]> granicus.if.org Git - libvpx/commit
Dual 16x16 inter prediction.
authorRonald S. Bultje <rbultje@google.com>
Tue, 6 Dec 2011 19:53:02 +0000 (11:53 -0800)
committerRonald S. Bultje <rbultje@google.com>
Tue, 6 Dec 2011 19:53:02 +0000 (11:53 -0800)
commit60cb39da860c91adc45f51f2dfa193d19598a801
tree1d0a7a90a6dfe13b55eb8dc9c537db71bdd54874
parentb4ad9b5d5052b54d74c98c2ee71d5236c39a1537
Dual 16x16 inter prediction.

This patch introduces the concept of dual inter16x16 prediction. A
16x16 inter-predicted macroblock can use 2 references instead of 1,
where both references use the same mvmode (new, near/est, zero). In the
case of newmv, this means that two MVs are coded instead of one. The
frame can be encoded in 3 ways: all MBs single-prediction, all MBs dual
prediction, or per-MB single/dual prediction selection ("hybrid"), in
which case a single bit is coded per-MB to indicate whether the MB uses
single or dual inter prediction.

In the future, we can (maybe?) get further gains by mixing this with
Adrian's 32x32 work, per-segment dual prediction settings, or adding
support for dual splitmv/8x8mv inter prediction.

Gain (on derf-set, CQ mode) is ~2.8% (SSIM) or ~3.6% (glb PSNR). Most
gain is at medium/high bitrates, but there's minor gains at low bitrates
also. Output was confirmed to match between encoder and decoder.

Note for optimization people: this patch introduces a 2nd version of
16x16/8x8 sixtap/bilin functions, which does an avg instead of a
store. They may want to look and make sure this is implemented to
their satisfaction so we can optimize it best in the future.

Change-ID: I59dc84b07cbb3ccf073ac0f756d03d294cb19281
22 files changed:
configure
vp8/common/alloccommon.c
vp8/common/blockd.h
vp8/common/filter.c
vp8/common/generic/systemdependent.c
vp8/common/onyxc_int.h
vp8/common/recon.h
vp8/common/reconinter.c
vp8/common/reconinter.h
vp8/common/subpixel.h
vp8/decoder/decodemv.c
vp8/decoder/decodframe.c
vp8/decoder/onyxd_int.h
vp8/decoder/threading.c
vp8/encoder/bitstream.c
vp8/encoder/encodeframe.c
vp8/encoder/ethreading.c
vp8/encoder/onyx_if.c
vp8/encoder/onyx_int.h
vp8/encoder/pickinter.c
vp8/encoder/rdopt.c
vp8/encoder/rdopt.h