This commit reworks the transform and quantization unit. It enables
the use of adaptive quantization for intra modes. This further
improves the compression performance:
lowres 0.36%
midres 0.79%
hdres 0.73%
The key frame coding performance is improved:
lowres 1.7%
midres 1.9%
hdres 3.3%
The overall coding gains are:
lowres 1.1%
midres 1.8%
hdres 2.3%
Change-Id: Iaec1a3a4c1d5eac883ab526ed076d957060479dd
Move filter intra modes search to the end, after regular
mode search.
On average no performance changes.
Change-Id: I9293c8fdf706ebf831fbd61c6bb81959790f4848
The speed feature sf->lpf_picl == LPF_PICK_MINIMAL_LPF is used
to disable loop filtering. This did not work with the loop-restoration
experiment, but now it is respected.
Note that this speed feature is only used in real-time cpu-used >= 8
settings.
Change-Id: I193723c9ac5f802ec31d8c8b4d37650796e065fd
mi->stride now depends on the maximum superblock size, and hence
the constant 8 padding is no longer appropriate. Traverse the array
using mi->stride instead.
Change-Id: I8e84b9fe1728f6663f8c10765fe32206375f1e71
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
Revisit the compression performance and complexity trade-off after
making the SIMD version of trellis optimizations. Before that,
reduce the transform-quantization function calls temporarily. This
would cause about 0.3% performance drop for lowres set.
Change-Id: I16917a6bd5c44ec6cd8cd0b59f3c336c4fd96dd2
This commit combines uniform quantizer with trellis based coefficient
level optimization. It improves the codebase compression performance:
lowres 0.8%
midres 1.0%
hdres 1.6%
Note that the current trellis optimization unit is using C code. This
will make the cost of the overall quantization process slower. A number
of optimizations will come up next.
Change-Id: Id441dd238e4844409d0f08f82604be777f3f5282
This experiment implements non-uniform quantization where
the width of the bins increases gradually to more closely
match a laplacian distribution of the coeficcients.
Performance Gain:
derflr: 0.15%
hevcmr: 0.675%
Change-Id: I25234244e3bcd94b87c1f77cf682190b61c8ef94
This reverts commit efda2831e5f758b4f350679b5c55c0b9282449b0.
This commit causes segmentation fault at SSE2/SumSquares2DTest.RandomValues/0
Change-Id: I171937e4daf6f15323e8206418773deb03bd8c53
Bring commits 575e81f and 3d6b8a6 to VP10. These changes predate
the creation of the active map cyclic refresh test.
BUG=https://bugs.chromium.org/p/webm/issues/detail?id=1224
Change-Id: I3559b6933ffa5649926a4b214e45ed0fae523a25
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 commit re-works the transform type speed feature. It moves
the transform type selection outside of the coding mode loop. This
avoids repeated motion search if the best prediction mode is
chosen as NEWMV. It improves the speed performance for clips that
contain more motion activities.
For mobile_cif at 1000 kbps, this makes the baseline encoding 7%
faster and makes the encoding with dynamic motion vector referencing
scheme enabled 10% faster.
Change-Id: I93e2714b3e461303372c4b66a4134ee212faffd1
This patch will make sure the use of the BWDREF_FRAME for the
encoding of both the two types of bipredictive frames, namely
LAST_BIPRED_UPDATE and BIPRED_UPDATE. To realize it, the
updates on the cpi->ref_frame_flags have been moved to before
the encoding of one frame, instread of originally handled after
the encoding of one frame.
RD performance has been improved slightly, approximately by 0.17%
compared to before the applying of this patch:
lowres: Avg -3.474; BDRate -3.324
derflr: Avg -2.097; BDRate -1.353
Change-Id: I0aa19afd752293e345489fbff104c4351ca5498c
The segment counts are computed as part of packing the bitstream,
so they might have been computed already in the recode loop. Zero
the accumulator to avoid double counting.
This fixes some encoder/decoder mismatches.
Change-Id: Ib7816034cbbb1db41101116b706302b02fad3a2c
1. Wiener restoration filter now has normalization and evaluation of
quantization procedure.
2. Corrected scaling of bits in RD cost computation.
3. Changed dynamic range and number of bits for Wiener filter.
Observed gains: Overall 0.58% for low_res, 0.7% for mid_res sequences.
Change-Id: I8928b3ea493bfe1790926b00388d6c4bafc08e19
We can optimize wedge partition selection by pre-computing the
residuals of the 2 underlying predictors, and then blend these
to compute the sse of the compound predictor, without actually
having to compute and subtract the compound predictor.
Similarly we can pre-compute a proxy array which we can use to
cheaply check which mask sign would have lower sse.
Details are in wedge_utils.c.
Mathematically these are equivalence transformations, but due to the
finite precision the encoder output will be perturbed, though on
average this should make 0% difference.
ext-inter gains about ~4.5% speedup.
Change-Id: Ib2657c3209ae161b4090b58b4b6c392641bf2792
The transform can only be skipped if both Y and U/V can be skipped, so
we always include the cost of tx size in the rate for Y. This will
get later subtracted if the transform is actually skipped.
Change-Id: I136a223e5596f18b69bb9f743e7e08438183a215
We used to cache the cost of the UV mode from the search with a
different previously tried Y mode, but the UV mode is contexted
on the Y mode, so caching the cost is inaccurate.
Change-Id: Ib003510afb6fc9befb7808b67b0be64f1c0a0804
This patch factors in the different partition coding syntax used for
right and bottom edge blocks when doing RD search.
Change-Id: I2f31650512b6a4a7a2c03352414693aff6fbf87b