Yi Luo [Wed, 10 Aug 2016 23:21:16 +0000 (16:21 -0700)]
Optimization for HBD filter intra predictors (SSE4.1)
- Add unit tests to verify the bit-exact.
- Speed unit test, function improvement: about 8%-23%.
- On E5-2680, park_joy_1080p_12, 25 frames, --kf-max-dist=1
encoding time improves from <1% to 3.5%
This is a debug tool used to detect bitstream error. On encoder side, it pushes
each bit and probability into a queue before the bit is written into the
Arithmetic coder. On decoder side, whenever a bit is read out from the
Arithmetic coder, it pops up the reference bit and probability from the queue as
well. If the two results do not match, this debug tool will report an error.
This tool can be used to pin down the bitstream error precisely. By combining
gdb's backtrace method, we can detect which module causes the bitstream error.
Zoe Liu [Thu, 28 Jul 2016 00:24:42 +0000 (17:24 -0700)]
Fix a bug in RATE_FACTOR_LEVEL definition for ext-refs
There was a bug in the original set up for RATE_FACTOR_LEVELS, which
results that rate_factor_deltas for GF_ARF_STD is 2.00, instead of the
intentional value of 1.75, whereas for KF_STD is 0.00, instead of the
intentional value of 2.00.
Nevertheless, if simply fixing the bug as in the first patch, the RD
performance unexpectedly dropped by 0.143% in Avg bitrate using
Overall PSNR, especially for following sequences in lowres:
bridge_close_cif: dropped by 1.468%
container_cif: dropped by 2.140%
husky_cif: dropped by 0.826%
motherdaughter_cif: dropped by 0.798%
rasehorses_240p: dropped by 0.805%
students_cif: dropped by 1.411%
This indicates that we should boost up the value for GF_ARF_STD from
1.75 to at least to 2.00. After doing so, while still keeps 2.00 for
KF_STD, the new patch achieves a small gain of 0.15% for the baseline,
and a smaller gain of 0.06% for the experiment of ext-refs. Most
sequences keep the similar RD performance in lowres, except for the
following ones that obtain a bigger gain:
James Zern [Mon, 8 Aug 2016 22:09:30 +0000 (15:09 -0700)]
remove SVC
spatial/temporal scalability are not supported in VP10 currently.
+ remove the unused vp10/encoder/skin_detection.[hc]
this also enables DatarateTestLarge for VP10 which passes with no
experiments enabled. these were removed previously when only the SVC
tests should have been: 134710a Disable tests not applicable to VP10
Sarah Parker [Tue, 9 Aug 2016 01:11:05 +0000 (18:11 -0700)]
Add interface to compute gm parameters in encodeframe
This patch just creates the interface for global motion computation
and calls it from encodeframe. Currently, the function
compute_global_motion_feature_based is empty and the work to do
the actual parameter calculation will be added in a future patch.
Sarah Parker [Wed, 3 Aug 2016 19:29:27 +0000 (12:29 -0700)]
Add reconstruction using gm parameters
This patch only includes inter frame reconstruction using gm
parameters when GLOBAL_MOTION and/or VP9_HIGHBITDEPTH are enabled.
GM is not currently used when EXT_INTER or DUAL_FILTER is enabled.
This will be added in a followup patch. For now, these experiments
will take precedence over GLOBAL_MOTION when they are all enabled.
Yi Luo [Tue, 2 Aug 2016 16:57:08 +0000 (09:57 -0700)]
Optimization EXT_INTRA's filtered intra predictor (SSE4.1)
- Add unit tests to verify the bit-exact result.
- In speed test, function speed (for each mode/tx_size)
improves about 23%~35%.
- On E5-2680, park_joy_1080p, 10 frames, --kf-max-dist=1,
encoding time improves about 1%~2%.
Yue Chen [Fri, 5 Aug 2016 17:37:24 +0000 (10:37 -0700)]
Speed filter intra mode search in EXT_INTRA experiment
(1) Key frame: skip filter intra modes whose directional pred
version is relatively bad (rd >= 1.125 * best_rd)
(2) Inter frame: do not check filter intra modes if best_intra_rd
>= 1.25 * best_rd
Encoding time overhead is reduced by:
4.9% (9.2%->4.3%, soccer_cif)
Coding gains drop by 0.021% on lowres and by 0.076% on midres
Wei-ting Lin [Fri, 5 Aug 2016 20:32:47 +0000 (13:32 -0700)]
Fix a bug for multi_arf_allowed
The ARF Index was wrong when updating the upsampled reference
frame buffer.
Compared to the baseline in which multi_arf_allowed is disabled, the
RD performance drops 2.250% in Avg using Overall PSNR in the derf
dataset. The performance decrease is especially in the following
video sequences:
INTER_REFS_PER_FRAME specifies the maximum number of reference frames
that each Inter frame may use.
TOTAL_REFS_PER_FRAME is equal to INTER_REFS_PER_FRAME + 1, which
counts the INTRA_FRAME.
Further, at the encoder side, since REF_FRAMES specifies the maximum
number of the reference frames that the encoder may store, REF_FRAMES
is usually larger than INTER_REFS_PER_FRAME. For example, in the
ext-refs experiment, REF_FRAMES == 8, which allows the encoder to
store maximum 8 reference frames in the buffer, but
INTER_REFS_PER_FRAME equals to 6, which allows each Inter frame may
use up to 6 frames out of the 8 buffered frames as its references.
Hence, in order to explore the possibility to store more reference
frames in future patches, we modified a couple of array sizes to
accomodate the case that the number of buffered reference frames is
not always equal to the number of the references that are being used
by each Inter frame.
Sarah Parker [Tue, 2 Aug 2016 19:28:41 +0000 (12:28 -0700)]
Adjust gm parameter computation to avoid mismatch
The gm parameters need to have WARPED_PRECISION_BITS precision
until they are written to the bitstream because functions in
reconinter use these parameters before they are written to
the bitstream. Previously, the parameters weren't being converted
to WARPED_PRECISION_BITS until they were read from the bitstream
which causes an encode/decode mismatch.
Yue Chen [Tue, 2 Aug 2016 22:18:44 +0000 (15:18 -0700)]
Fix a bug and a function name in EXT_INTRA experiment
(1) Apply ALLOW_FILTER_INTRA_MODES flag to the correct place, otherwise
there are bitstream mismatchs when it is 0.
(2) Rename pick_ext_intra_iframe() to pick_ext_intra_interframe().
Manually cherry-picked the following changes: 8c8d16de vp9 -> vpx in names 75b57d39 VP9_ -> VPX_ in function names 761a7088 VP9_INTERP_EXTEND -> VPX_INTERP_EXTEND 4273a52c VP9->VPX in border pixel macros 03568c31 VP9_FRAME_MARKER -> VPX_FRAME_MARKER 2334f51d VP9->VPX in fdct function names
Jingning Han [Wed, 27 Jul 2016 16:12:53 +0000 (09:12 -0700)]
Separate frame context index for different frame types
This commit makes the encoder to use different frame context index
for different frame types. In the baseline setting, it sets the
frame context index of the overlay frame to be different from other
regular inter frames. In the ext-refs setting, it further allows
the backward reference frame to use a different index.
It improves the compression performance for both settings.