This commit replaces the previous table based intra mode model
coding with a more balanced entropy coding system. It reduces the
decoder lookup table size by 1K bytes. The key frame compression
performance is about even on average. There are a few points where
the compression performance is improved by over 5%. Most test
points are fairly close to the lookup table approach.
Change-Id: I47154276c0a6a22ae87de8845bc2d494681b95f6
This commit allows the entropy coder for transform block partition
to account for its relative position with respect to the block size.
Change-Id: I2b5019c378bfb58c11b926fa50c0db1933f35852
Refactor the recursive transform block partition to reduce repeated
computation maximum transform block size per block.
Change-Id: Ib408c78dc6923fe7d337dc937e74f2701ac63859
This commit refactors the loop filter implementation to make it
support recursive transform block partition.
Change-Id: Ica2daa9cb54730cff7770ee2c2d7ffdb240ff418
Temporarily use univariate transform size for loop filter.
As compared to VP9 master branch with loop filter turned on, the
compression gains are:
derf 0.671%
mr 0.749%
stdhd 0.886%
hr 1.394%
The encoding speed currently is about 1.3X that of speed 0.
Change-Id: I64788f894e70fde14c5be3159501bedf836e5998
If a block is coded in the intra modes, update the transform block
partition information as maximum block size.
Change-Id: I5ea440c700fc887ff2fe84fabde77a9d896d16f4
This commit makes the tx_block_rd_b() compute the rate and
distortion cost per transform block, instead of accumulating these
costs.
Change-Id: Iff5adc4c27cc54f8e6eb3abd95f8d88ba00f462c
If the skip flag is already on, there is no need to further check
the all zero block case. This improves encoding speed at no coding
statistics change.
Change-Id: Icab997ca2977e650351a47ff1314def5ac4ecb1d
This commit allows the encoder to force all zero quantized
coefficient block per transform block, if that provides better
rate-distortion trade-off.
Change-Id: I5b57b28cccd257ebfaf7c1749dda7be482abc834
If a block has all coefficients quantized to zero, the codec will
assume that it uses largest transform block size.
Change-Id: I1a32527e50026e8e4759ad8de474189cd20e89c8
This commit refactors the transform block partition entropy
coding process to improve the encoding speed. There is no change
in the compression statistics.
Change-Id: I237466fd95c1b888df432babfa36e01f74240eef
Unify transform block partition update process used in rate
distortion optimization and encoding stage.
Change-Id: I4e5f2b6d2482c53ceadb7c8743435158f229a82c
This commit allows the encoder to account for the boundary block
information to estimate the transform block partitiion rate cost
in the rate-distortion optimization scheme.
Change-Id: Idb79cf936d96cdd15bcba27e47318295413a5f5d
Select the probability model for transform block partition coding
conditioned on the neighbor transform block sizes.
Change-Id: Ib701296e59009bad97dbd21d8dcd58bc5e552f39
This commit makes the encoder to properly compute the rate
distortion cost for blocks that partially cover extend pixels.
Change-Id: I44529af6f76925cdc0f6b24a5d190b51b0813983
If the frame header sets to use fixed transform block size, use
the univariate transform block partition search flow.
Change-Id: Ic422ecb6565642cd8ddb96dc67a37109ef3ce90f
This commit fixes the over count issue in the recursive transform
block partition rate cost estimation. It improves the compression
performance by about 0.45%.
Change-Id: I01ccda954ed0e120263977472c1c759c3c67170c
This commit enables the rate-distortion optimization for recursive
transform block partition for inter mode blocks based on luma
component. The chroma component infers the transform block size
decision from those of luma component.
Change-Id: I907cc52af888a606b718e087e717b189fa505748
Move the rate-distortion estimate function outside the recursion
as an individual operating module.
Change-Id: I662199223c256664bcd312084b3aebffb8a8034b
This commit makes the rate-distortion estimation of the chroma
components support the recursive transform block partition
inferred from the luma component mode decisions.
Change-Id: I2e038bebf558da406e966015952ad1058bdf4766
It allows the decoder to recursively parse and use the transform
block size for inter coded blocks.
Change-Id: I12ceea48ab35501ac1a3447142deb2a334eff3b8
Make the bit-stream syntax elelment coding ready to support
variable transform coding block sizes.
Change-Id: I07ae4ab62d1ecd46c4a5ae45702fc14bd1d4b07d
Allocate memory buffer to store the transform coding partition
information of inter prediction mode blocks.
Change-Id: I428b1dd0b26e8eaf24030a833554ceb4479c5551
The encoding and tokenization process support the recursive
transform block partition coding scheme.
Change-Id: I47283cc6ee9c383059950623ece60a0fcce82e00
Make the encoder packetize transform block in a recursive order.
Note that the block index with respect to the coding block remains
identical.
Change-Id: I07c6d2017f4f150274aff46c05388a7fd47cd920
This commit re-designs the bitstream syntax to support recursive
transform block partition. It disables the decoder vector unit
tests.
Change-Id: I6cac24c4f1e44f29ffcc9b87ba1167eeb32d1b69
Skip redundant prediction filter type cost in filter search loop,
if the rate value will be reset in Hadamard transform based rate
distortion estimate.
Change-Id: Ie5221f4bc8da9461c449df367251aeeac52c6e5d
This commit turns on the Hadamard transform based rate distortion
estimate for all block sizes in RTC coding mode. It conditionally
skips the rate distortion estimation if all zero block flag is set
on. No significant encoding speed change is observed. The
compression performance of speed -6 is improved by 1.7% over using
it only for block sizes of 32x32 and below.
Change-Id: I768145e6f05c737b05b5b5f1ee674e929532cafb
This commit accounts for the transform block end of coefficient flag
cost in the RTC mode decision process. This allows a more precise
rate estimate. It also turns on the model to block sizes up to 32x32.
The test sequences shows about 3% - 5% speed penalty for speed -6.
The average compression performance improvement for speed -6 is
1.58% in PSNR. The compression gains for hard clips like jimredvga,
mmmoving, and tacomascmv at low bit-rate range are 1.8%, 2.1%, and
3.2%, respectively.
Change-Id: Ic2ae211888e25a93979eac56b274c6e5ebcc21fb
This commit separates Hadamard transform/quantization operations
from rate and distortion computation in block_yrd. This allows one
to skip SATD computation when all transform blocks are quantized
to zero. It also uses a new block error function that skips
repeated computation of sum of squared residuals. It reduces the
CPU cycles spent on block error calculation in block_yrd by 40%.
Change-Id: I726acb2454b44af1c3bd95385abecac209959b10
This commit allows the quantizer to compare the AC coefficients to
the quantization step size to determine if further multiplication
operations are needed. It makes the quantization process 20% faster
without coding statistics change.
Change-Id: I735aaf6a9c0874c82175bb565b20e131464db64a
For large partition blocks(block_size > 32x32), the variance
calculation is modified so that every 8x8 block's variance
is stored during the calculation, which is used in the
following transform skipping test. Also, the variance for
every tx block is calculated. The skipping test checks all tx
blocks in the partition, and sets the skip flag only if all tx
blocks are skippable. If the skip flag of Y plane is 1, a
quick evaluation is done on UV planes. If the current partition
block is skippable in YUV planes, the mode search checks fewer
inter modes and doesn't check intra modes.
The rtc set borg test(at speed 6) showed that:
Overall psnr: -0.527%; Avg psnr: -0.510%; ssim: -0.573%.
Average single-thread speedup on rtc set was 3.5%.
For 720p clips, more speedups were seen.
gipsrecmotion: 13%
gipsrestat: 12%
vidyo: 5 - 9%
dark: 15%
niklas: 6%
Change-Id: I8d8ebec0cb305f1de016516400bf007c3042666e