]> granicus.if.org Git - libvpx/commit
Change SR_diff calculation and representation
authorPaul Wilkins <paulwilkins@google.com>
Wed, 10 Mar 2021 14:39:43 +0000 (14:39 +0000)
committerPaul Wilkins <paulwilkins@google.com>
Thu, 18 Mar 2021 14:33:44 +0000 (14:33 +0000)
commitb5e754a840511c9956c033561955745a184495cb
tree36a9ad864f29e7d35c82d804409c80bfb97d9349
parentcbc4ead58691c899262513025a83f03f5932e50e
Change SR_diff calculation and representation

This patch changes the way prediction decay is calculated.

We expect that frames that are further from an ALT-REF frame (or Golden
 Frame) will be less well predicted by that ALT-REF frame. As such it is
desirable that they should contribute less to the boost calculation used
to assign bits to the ALT_REF.

This code looks at the reduction in prediction quality between the last
frame and the second reference frame (usually two frames old). We make
the assumption that we can accumulate this to get a proxy for the likely
loss of prediction quality over multiple frames.

Previously the calculation looked at the absolute difference in the
coded errors. The issue here is that the meaning of a unit difference
is not the same for very complex frames as it is for easy frames.

In this patch we scale the decay value based on how the error difference
compares to the overall frame complexity as represented by the intra
coding error.

This was tuned experimentally to give  test results that
were approximately neutral for our various test sets. There was
 a slight drop in Overall PSNR but a consistent improvement in
SSIM. This balance may be improved with tuning further as it is
noteworthy that it was much better on the hd_res set.

Results (Overall PSNR, SSIM -ve better) for low_res, ugc360, midres2,
ugc480P and hd_res are as follows:

0.173 -0.688
0.118 -0.153
0.132 -0.239
0.261 -0.405
-0.305 -1.109

As part of this adjustment the contribution of motion amplitude was
removed.

This patch also changes the control mechanism that will be exposed
on the command line for use by the Vizier project. The control is now
a linear factor which defaults to 1.0, where values < 1.0 mean a lower
decay rate and values > 1.0 mean an increased decay rate.

This presents a more easily understandable interface for use in
optimizing the decay behavior for various formats, where it is clear
what a passed in value means relative to the default.

With the new decay mechanism the current values for various formats
are almost certainly wrong and we still need to define sensible upper
and lower bounds for use during future training.

Change-Id: Ib1074bbea97c725cdbf25772ee8ed66831461ce3
vp9/encoder/vp9_firstpass.c
vp9/encoder/vp9_firstpass.h
vp9/encoder/vp9_rd.c