hui su [Wed, 7 Oct 2015 16:29:02 +0000 (09:29 -0700)]
ext-intra experiment
Currently there are two parts in this experiment: extra directional intra
prediction modes and the filter intra modes migrated from the nextgen branch.
Several macros are defined in "blockd.h" to provide controls of the experiment
settings. Setting "DR_ONLY" as 1 (default is 0) means we only use directional
modes, and skip the filter-intra modes; "EXT_INTRA_ANGLES" (default is 128)
defines the number of different angles we want to support; setting
"ANGLE_FAST_SEARCH" as 1 (default is 1) means we use fast sub-optimal search
for the best prediction angle, instead of exhaustive search. The fast search
is about 6 times faster than the exhaustive search, while preserving about
60% of the coding gains.
With extra directional prediction modes (fast search), we observe the following
code gains (number in parentheses is for all-key-frame setting):
derflr +0.42% (+1.79%)
hevclr +0.78% (+2.19%)
hevcmr +1.20% (+3.49%)
stdhd +0.56%
Speed-wise, about 110% slower for key frames, and 30% slower overall.
The gains of filter intra modes mostly add up with the gains of directional
modes. The overall coding gain of this experiment:
derflr +0.94%
hevclr +1.46%
hevcmr +1.94%
stdhd +1.58%
Jingning Han [Tue, 3 Nov 2015 16:56:47 +0000 (08:56 -0800)]
Re-work rate-distortion optimization scheme for transform coding
This commit re-works the rate-distortion optimization scheme for
transform coding. It improves the overall compression performance.
For derf set, the ext-tx experiment provides 2.27% coding gains,
and the new scheme that integrates multiple transform type selection
and recursive transform block partitioning provides a total of 3.24%
coding gains.
Jingning Han [Mon, 2 Nov 2015 20:05:47 +0000 (12:05 -0800)]
Incorporate flexible tx type and tx partition in RD scheme
This commit hooks up the rate-distortion optimization system to
fully exploit recursive transform block partition and multiple
transform type. The compression performance of the two experiments
largely adds up. For derf set, ext-tx provides additional 2.1%
coding gains on top of the gains due to recursive transform block
partition (0.69%).
Marco [Sun, 1 Nov 2015 22:40:05 +0000 (14:40 -0800)]
Move noise level estimate outside denoiser.
Source noise level estimate is also useful for
setting variance encoder parameters (variance thresholds,
qp-delta, mode selection, etc), so allow it to be used also
if denoising is not on.
Change-Id: I38952cd55b91f35e5db45bc8e6a20ef25069c464
--ext-refs: extended references - for multi-ref in nextgen
--ext-inter: extended inter - for new_inter/copy_mode in nextgen
--ext-interp: for new interpolation
Jingning Han [Fri, 16 Oct 2015 22:54:58 +0000 (15:54 -0700)]
Refactor loop filter mask
This commit refactors the loop filter selection process to support
variable transform block sizes based filter mask. It disables the
multi-thread loop filter implementation to simplify the experiments.
The speed impact on speed 0 encoding is negligible.
Jingning Han [Wed, 28 Oct 2015 18:34:45 +0000 (11:34 -0700)]
Account for variable txfm sizes in coeff token packing
This commit makes the coefficient token packtization process account
for variable transform block sizes supported in a single processing
block. It fixes an enc/dec mismatch issue when var-tx, ext-tx, and
misc-fixes experiments are all turned on.
Jingning Han [Tue, 27 Oct 2015 23:50:27 +0000 (16:50 -0700)]
Add tx_type counts in key frame
Properly update the transform type counts in key frame coding at
decoder. It fixes an enc/dec mismatch issue when both ext-tx and
misc-fixes are turned on.
Peter de Rivaz [Tue, 27 Oct 2015 10:50:00 +0000 (10:50 +0000)]
Accumulate EXT_TX counts for multithread
EXT_TX introduces some new symbols to be decoded.
The encoder counts how many times these are used.
In multithreaded mode, the counts from the worker threads
need to be accumulated into the main thread.
This change means that VP10/VPxEncoderThreadTest now works
with more choices of cpu-used and number of passes.
Jingning Han [Mon, 26 Oct 2015 19:32:30 +0000 (12:32 -0700)]
Fix lossless coding
Use inter_block_yrd as rate-distortion optimization for lossless
coding. This fixes transform coefficient buffer swap use case and
resolves the unit test failure related to lossless coding.
Jingning Han [Mon, 26 Oct 2015 18:09:55 +0000 (11:09 -0700)]
Make transform block partition scheme support use largest txfm setting
This commit properly resets the recursive transform block partition
array in the settings of using largest transform block size at frame
header level. It fixes one of the unit test failure related to the use
of frame level fixed transform block size with 440 color format.
Alex Converse [Wed, 14 Oct 2015 18:03:14 +0000 (11:03 -0700)]
palette: Replace rand() call with custom LCG.
The custom LCG is based on the POSIX recommend constants for a 16-bit
rand(). This implementation uses less computation than typical standard
library procedures which have been extended for 32-bit support, is
guaranteed to be reentrant, and identical everywhere.
base_frame_target is supposed to track the idealized bit
allocation based on error score and not the actual bits
allocated to each frame.
The clamping of this value based on the VBR min and max pct values
was causing a bug where in some cases the loop that adjusts the
active max quantizer for each GF group was running out of bits at
the end of a KF group. This caused a spike in Q and some ugly artifacts.
A second change makes sure that the calculation of the active
Q range for a group DOES, however, take account of clamping.
Jingning Han [Fri, 23 Oct 2015 21:27:21 +0000 (14:27 -0700)]
Properly handle non-420 color format in recursive transform scheme
This commit makes the recursive transform block partitioning properly
handle the non-420 color format. It resolves an enc/dec mismatch
issue in that setting when var-tx experiment is turned on.