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.
Change-Id: I31e76e9d6f7d24df21af287a72f8c01f1997304d
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
Change-Id: Icc18dbf4b416dd0fa21033b3e19ab8a47c893508
Currently nothing is implemented to compute GM parameters, this
just adds the capability to send them in the bitstream if they
were computed. Still need to implement the reconstruction
based on the parameters in reconinter.
Change-Id: I72aea3c6a9de9f5a40f96da76c82b54a52781fe2
Use vpx_blend_a64_hmask and vpx_blend_a64_vmask to speed up
computing the obmc predictor. Clean up calc_target_weighted_pred.
Encoder speedup: 1.3%
Decoder speedup: 6.5%
Change-Id: I0c774fe53d22399e92a10d1daf3af0010d88d2c5
Commit 0d6980d7a1caa592058f8d5d618b012c160772f7 removed some use
of the skip_txfm optimization, and the rest are not productive.
The current use of this optimization is only used with --good
and --cpu-used >= 3, however the overhead of this is higher than the
speedup it yields.
Removing this, and subsequently simplifying model_rd_for_sb yields
a net encoder speedup:
--cpu-used=0 ~1.5% faster
--cpu-used=3 ~2.0% faster
The code simplification is also significant.
Change-Id: I1dd668c32de15a2e912c59c42379d0f9e1032ff8
This patch removed the experiment of BIDIR_PRED and merged the feature
into the experiment of EXT_REFS:
(1) Each frame now has up to 6 reference frames, namely
LAST_FRAME, LAST2_FRAME, LAST3_FRAME, GOLDEN_FRAME, (forward) and
BWDREF_FRAME, ALTREF_FRAME (backward);
LAST4_FRAME has been removed;
(2) First pass still keeps the 8 updates:
KF_UPDATE, LF_UPDATE, GF_UPDATE, ARF_UPDATE, OVERLAY_UPDATE, and
BRF_UPDATE, LAST_BIPRED_UPDATE, BI_PRED_UPDATE;
(3) show_existing_frame==1 is supported in the experiment of EXT_REFS;
(4) New encoding modes are added for both single-ref and compound cases,
through the use of the 2 extra forward references (LAST2 & LAST3)
and the 1 extra backward reference (BWDREF).
RD performance wise, using Overall PSNR: Avg/BDRate
Bipred only Prev EXT_REFS Current EXT_REFS with bipred
lowres: -3.474/-3.324 -1.748/-1.586 -4.613/-4.387
derflr: -2.097/-1.353 -1.439/-1.215 -3.120/-2.252
midres: -2.129/-1.901 -1.345/-1.185 -2.898/-2.636
If in vp10/encoder/firstpass.h, change BFG_INTERVAL from 2 to 3, i.e. to
use 2 bi-predictive frames than 1, a further improvement may be
obtained:
Current EXT_REFS with bipred
1 bi-predictive frame 2 bi-predictive frames
lowres: -4.613/-4.387 -4.675/-4.465
derflr: -3.120/-2.252 -3.333/-2.516
midres: -2.898/-2.636 -3.406/-3.095
Change-Id: Ib06fe9ea0a5cfd7418a1d79b978ee9d80bf191cb
Inter blocks that have SEG_LVL_SKIP active must be at least 8x8 in
size for bitstream conformance (see read_inter_block_mode_info in
decodemv.c).
This patch makes the variance based partitioning scheme stop at 8x8
blocks in inter frames. This satisfies the SEG_LVL_SKIP constraint
and is more in line with the original implementation of this function
(before it got extended for 128x128 superblocks).
BUG=webm:1234
Change-Id: I1fdd894569a9c0817713a77daabe4c8b8e1d00c0
Segment based loopfilter strength for supertx coded blocks is now
selected based on the minimum of all segment IDs within a supertx
coded block (same as the quantiser settings).
Change-Id: Ib056bd0d05f6a1d3b512a76deb4e2ad4db0f7dc4
Segment level quantizer settings for supertx coded blocks are now
selected based on the minimum of all segment IDs within a supertx
coded block.
This also fixes the 3 adaptive quantization modes with supertx.
Change-Id: Ib5db099539d4f82f240e1d745d6e5264f8b34cde
When using VARIANCE_AQ, we can change the segment assignment after
initialising the quantiser in set_offsets, so re-initialise it when
we do so.
Change-Id: I1f168553aaf0ade419f0d4bf05820cd591b87659
Explicitly signal when the segment map is being refreshed when
using VARIANE_AQ. This simplifies decisions about when the segment id
needs to be set from the previous segment map vs based on the current
variance.
Change-Id: Ieb12c950e9cfbc3f53f4d184880071dea805563c
The assumption doesn't hold true in the current codebase. Remove
this speed feature to simplify the codebase.
Change-Id: I9b69f484c9b7cd612b825047cc5b2fce63ee0af7
The inter prediction residual can undergo different transform types
during the rate-distortion optimization search. The assumption used
in this speed feature no longer holds true. This commit removes the
related code to clean up the codebase and clear out unit test
failure in higher speed setting.
Change-Id: I7f7cd4df2345ed3e607c9fae75b38cd2dbde0cac
This patch factors in the different partition coding syntax used for
right and bottom edge blocks when doing RD search.
Change-Id: I2f31650512b6a4a7a2c03352414693aff6fbf87b
This is for the bidir-pred experiment. Previously the length of the
bi-predictive frame group interval is fixed at 2, i.e. one
bi-predictive frame may be inserted every other frame. This patch
makes the length adjustable, i.e. any positive number may be
specified, but the use of the backward ref will be turned off if the
bi-predictive frame group interval is larger than the golden frame
group.
Further, an additional rate factor level has been added:
INTER_LOW
, which applies to LAST_BIPRED_UPDATE frames that are not used as
references.
Change-Id: I5514d34a64dd486bbb5756c2d0612946f598a789
Major parts have been implemented as follows:
(1) Added BRF_UPDATE, LASTNRF_UPDATE, and NRF_UPDATE in firstpass.c;
(2) Added the handling for the scenario of
"cpi->common.show_existing_frame == 1" at the encoder;
(3) Added a new reference frame of BWDREF_FRAME;
(4) Have bwd-ref work with upsampled references.
Note that when the experiment of "ext_refs" turned on, this experiment
will be turned off automatically currently.
RD performance in Overall PSNR has been improved, compared against the
VP10 baseline:
lowres: Avg -3.312; BDRate -3.154
derflr: Avg -1.927; BDRate -1.176
midres: Avg -2.149; BDRate -2.001
hdres : Avg -0.567; BDRate -0.588
Change-Id: I4c06ff51cc20194bffbd4d2346e57ba3dcf6b62c
If a reference block is coded with sub8x8 block size, and if it
has sub-pixel level motion vectors, its prediction filter type
should be used as context information.
The coding performance gains of dual filter type coding scheme are
lowres 0.57%
hdres 0.88%
Change-Id: I68b98f2518d02f11c29d0256aeb45b2580fe5cac
For the current stage, we assume a single prediction filter type
per direction in the settings of compound inter prediction modes.
Change-Id: I12a1afdd364b93fcee870bd11ad01fc40ab48cff
When not using ext-tile, there were still dependencies between tile
rows due to various tools (eg intra predictors) relying on the above
row or above mode info, which can be in the above tile. This is now
broken (the same way as it was when ext-tile is enabled) by fixing
the appropriate predicates.
Change-Id: I107dd0d8481775a792f14e05cfbbd761f16cdc1e
Make the bit-stream level support per direction filter type coding
for motion compensated reference.
Change-Id: I61a2360b301075f6734cfd9711b7ae68f214174d
The word 'pick' is usually used in functions that make decisions where
the bitstream allows multiple legal choices, and not to limit the
bitstream format itself.
Change-Id: Ia60709c29e004475e1aa8861aefded27ebaf4712
General code cleanup, but also use the same supertx condition for
ext-partition-types as for conventional partitions.
Change-Id: If86eb18b3c07b9c60434eec2c98b97ce93665b67
x->blk_skip used to be uninitialized (leftover from encoding the
previous block), if cm->tx_mode != TX_MODE_SELECT (which is used with
higher --cpu-used or --rt options). This resulted in degraded coding
performance when using cm->tx_mode != TX_MODE_SELECT.
This fixes the VP10/EndToEndTestLarge.EndtoEndPSNRTest/40 unit test.
Also fixed an edge effect where encode_block in encodemb.c used the
formal width of the block (without cropping at the right edge), to
look up blk_skip, while select_tx_block in rdopt.c used the cropped
width to set blk_skip.
Change-Id: I76d0f49ac5ab3ab54203573e0d7fcfcc1c6aa10d
x->blk_skip used to be uninitialzied (leftover from encoding the
previous block), if cm->tx_mode != TX_MODE_SELECT (which is used with
higher --cpu-used or --rt options). This resulted in degraded coding
performance when uning cm->tx_mode != TX_MODE_SELECT.
This fixes the VP10/EndToEndTestLarge.EndtoEndPSNRTest/40 unit test.
Change-Id: If39062927446798c626fc93694b4e6a4f35fa5da
In the rd loop, check the perf of obmc, whose mv is copied from regular
inter predictor, when wedge interinter is better than regular inter
(previously it will force allow_obmc = 0). The condition of the early
termination before this step is relaxed to avoid skipping too many obmc
predictions. The rates of the overhead are properly calculated for these tools.
The logic of the bitstream syntax:
(a single ref) the interintra flag is sent first, only if it is 0, we
send the obmc flag;
(compound refs) the obmc flag is sent first, only if it is 0, we send
the wedge interinter flag
Coding gain
lowres: 0.428% (2.287%->2.715%)
Change-Id: I5f3a34640b398e313cbf84235c9fe2073eb2173f