Jingning Han [Tue, 18 Dec 2018 00:09:06 +0000 (16:09 -0800)]
Relocate tpl buffer allocation
Move it to deeper stages where all the encoder configurations have
been set. This avoids the encoding failure when the buffer is
allocated before the encoder is fully configured.
Marco Paniconi [Mon, 17 Dec 2018 23:12:04 +0000 (15:12 -0800)]
vp9-svc: Adjust search step param for spatial layers
For non-base spatial layer in screen-content mode:
use nstep but with larger step_param value than sl0,
to avoid increase in encode_time.
Some improvement on scrolling slides content.
Marco Paniconi [Mon, 17 Dec 2018 21:23:01 +0000 (13:23 -0800)]
vp9-svc: Define rc scene change flag per superframe
Define the rc->high_num_blocks_with_motion, set in the
scene change analysis, to be defined per superframe.
This is used for increasing motion search area on
some (super)frames, e.g., for scrolling.
Jerome Jiang [Fri, 14 Dec 2018 22:39:58 +0000 (14:39 -0800)]
vp8: Fix potential use-after-free in mfqe.
Similar issue to 842265.
The pointer in vp8 postproc refers to show_frame_mi which is only
updated on show frame. However, when there is a no-show frame which also
changes the size (thus new frame buffers allocated), show_frame_mi is
not updated with new frame buffer memory.
Change the pointer in postproc to mi which is always updated.
make the parameter constant to match the base class and mark the
function virtual. virtual is used to match the rest of the code base,
but now that c++11 is required all such functions could be changed to
override.
since: bb3a82ec3 vp9 svc: add test for scaling partition on 1080p crash.
Jerome Jiang [Mon, 10 Dec 2018 20:53:20 +0000 (12:53 -0800)]
Refactor svc_*_test.cc
Put test classes into svc_test namespace.
Make num_nonref_frames_ and mismatched_nframes private, as they're
computed by encoder/decoder hooks which shouldn't be modified outside
the class.
Add accessor to num_nonref_frames_.
James Zern [Sat, 8 Dec 2018 08:43:31 +0000 (00:43 -0800)]
test/svc_*_test: fix SetConfig() signature
make the parameter constant to match the base class and mark the
function virtual. virtual is used to match the rest of the code base,
but now that c++11 is required all such functions could be changed to
override.
Jerome Jiang [Wed, 5 Dec 2018 02:37:02 +0000 (18:37 -0800)]
vp9 screen: Update motion search offset when set to NSTEP.
Search method and step parameter might be changed in speed settings.
In this case, we should update the search area offset due to the change
of search method.
sdeng [Wed, 7 Nov 2018 00:20:41 +0000 (16:20 -0800)]
Add high bit Hadamard 32x32 avx2 implementation
Speed test:
[ RUN ] C/HadamardHighbdTest.DISABLED_Speed/2
Hadamard32x32[ 10 runs]: 9 us
Hadamard32x32[ 10000 runs]: 8914 us
Hadamard32x32[ 10000000 runs]: 8991776 us
[ RUN ] AVX2/HadamardHighbdTest.DISABLED_Speed/2
Hadamard32x32[ 10 runs]: 5 us
Hadamard32x32[ 10000 runs]: 4582 us
Hadamard32x32[ 10000000 runs]: 4548203 us
Paul Wilkins [Thu, 6 Dec 2018 13:34:41 +0000 (13:34 +0000)]
Improve rd_variance_adjustment() for low variance blocks.
Change the cross over point for switching between per pixel
and per block variance numbers when comparing reconstruction
and source complexity.
This improves the accuracy of the comparison for low variance
regions, For example, recon and source may both have an integer per
pixel variance of 1, but one of these may actually be be 1.01 and the
other 1.99.
The reason for using per pixel at all was because this number is already
available for the source block so does not need to be recomputed
here. Changing the threshold from >0 to >100 for using per pixel values
will thus cause a little extra work for some blocks.
With my default runs on derf and nf sets their is a net gain as follows:
(-ve = better, Overal PSNR, SSIm, PSNR-HVS)
derf low res -0.106, -0.107, -0.093
midres -0.000, -0.021, 0.001
hd res -0.198, -0.190, -0.282
nf2k -0.090, -0.088, -0.077
Yaowu Xu [Thu, 29 Nov 2018 17:44:16 +0000 (09:44 -0800)]
Optimize RDMult
This commit introduces the optimized RDMult values for both key
and non-key frames. For key frames, the commit gets values back
from commit#b13f6154df9c0834d74f7e3d41e41c4208f56d18. For impact
on key frame only encodings, see commit message for that commit.
For inter frames, the values get optimzied by running encoding tests
in Q mode with the following range using 150 frames:
2 6 10 14 18 22 26 30 34 38 42 46 50 54 58 62
The impact of current set of RDMULT values:
PSNR SSIM PSNR-HVS
lowres: -0.325% 0.422% -0.228%
midres: -0.377% 0.158% -0.376%
hdres: -0.309% 0.522% -0.322%
sdeng [Wed, 7 Nov 2018 00:20:41 +0000 (16:20 -0800)]
Add high bit Hadamard 16x16 avx2 implementation
Speed test:
[ RUN ] C/HadamardHighbdTest.DISABLED_Speed/1
Hadamard16x16[ 10 runs]: 2 us
Hadamard16x16[ 10000 runs]: 1836 us
Hadamard16x16[ 10000000 runs]: 1829451 us
[ RUN ] AVX2/HadamardHighbdTest.DISABLED_Speed/1
Hadamard16x16[ 10 runs]: 1 us
Hadamard16x16[ 10000 runs]: 1009 us
Hadamard16x16[ 10000000 runs]: 984856 us
James Zern [Wed, 5 Dec 2018 00:38:08 +0000 (16:38 -0800)]
configure: test -std=c++11 before enabling unit tests
since: 77fa51003 Replace deprecated scoped_ptr with unique_ptr
the unit tests require a c++11 capable compiler; future versions of
googletest (1.9.x) will as well, so this change was inevitable if we
wanted to keep the snapshot up to date.
Deepa K G [Mon, 3 Dec 2018 09:33:18 +0000 (15:03 +0530)]
Fix intra_count_low calculation in first pass
In first pass, scaled_low_intra_thresh should not be
compared with motion_error, as scaled_low_intra_thresh
accounts for bit-depth, whereas motion_error does not.
In addition, mv_cost is excluded for comparison.