Commit Graph

1811 Commits

Author SHA1 Message Date
Ronald S. Bultje
7944b4f239 Fix superblock experiment.
Also merge some duplicate code related to the superblock experiment
in the RD loop.

Change-Id: Ic93f1d4d1ed81220fd7ecf6e65da2821a215b2de
2012-10-29 17:58:18 -07:00
Ronald S. Bultje
1758dc03d4 Merge "Name space clean up." into experimental 2012-10-29 14:41:47 -07:00
Ronald S. Bultje
86728ce109 Merge "A clean up of the down_copy function" into experimental 2012-10-29 14:41:39 -07:00
Jim Bankoski
818ee904a9 remove fdct invoke macros
Remove the fdct invoke macro calls

Change-Id: Ica2431c655819fa012133ee7abc75a16761e5fd6
2012-10-29 11:25:56 -07:00
Jim Bankoski
ee6421a201 Fixes invoke macro commit...
Change-Id: Ic186269b51ffb3c344635bfa9825bed25be2c5ae
2012-10-29 08:58:05 -07:00
Paul Wilkins
a99a2c3667 Name space clean up.
Preparation for project restructuring.
Added vp9_ prefix on some function names that have global scope.
Added static declaration on some that dont.

Change-Id: If072f78b4300e8c17cfeed82c5d17b59946dcc5e
2012-10-29 14:44:10 +00:00
Yaowu Xu
cc9c637d07 Improves subpixel reference mv evaluation
Previously, in evaluating reference motion vectors, MVs are always
rounded to integer pixel position and SADs are calculated.  This
commit takes into account the subpixel portion of the mvs, and uses
bilinear interpolation to produce reference pixel values in subpixel
postions. In addition, SSE is used in place of SAD. Pixels used are
16x2 above and 2x16 to the left.

This commmit intends to test the potential of this line of work in
term of compression improvement, obviously, the change would increase
decoder complexity significantly.

Test results
std-hd: 1.738%(avg) 1.779%(glb), 1.663%(ssim)
derf: 0.472%(avg) 0.477%(glb), 0.418%(ssim)

Change-Id: I3ae1b098f6289df78891134d9a5e4bb2fde87a0b
2012-10-29 07:06:10 -07:00
Paul Wilkins
d638056952 Inconsistent reference to MacroblockD data structure.
Cleaned up some inconsistent references using both xd-> and
x->e_mbd. to access the same data structure in the same function.

Change-Id: Ieb496fa22bf1feec6aa7bc70b941ea4f16e0f8b5
2012-10-29 12:58:49 +00:00
Paul Wilkins
f9d9b2b7f6 Merge "invoke macro removal encodemb" into experimental 2012-10-29 05:42:58 -07:00
Jim Bankoski
1838d87771 invoke macro removal encodemb
Change-Id: I321280abcf48f3dc16e194d29bde2bd3baec6006
2012-10-29 12:36:50 +00:00
Deb Mukherjee
d269de5fba A clean up of the down_copy function
Change-Id: I0c689fb44e9e91539c450d26672d7a1d92e92900
2012-10-26 15:54:37 -07:00
Ronald S. Bultje
37ba4cfc7e Merge "Extend edges correctly during actual frame encoding also." into experimental 2012-10-26 11:05:51 -07:00
Paul Wilkins
7d921524d6 Merge "Explicit MV reference experiment." into experimental 2012-10-26 09:42:37 -07:00
Paul Wilkins
ba30e7746e Explicit MV reference experiment.
Coding and costing of mv reference signal.

Issues in updating MV ref with COMPANDED_MVREF_THRESH
to be resolved. Ideally the MV precision should be defined based
on absolute MV magnitude not as now the MV ref magnitude.

Update to mv counts moved into bitstream.c because otherwise
if the motion reference is changed at the last minute the encoder
and decoder get out of step in terms of the counts used to update
entropy probs.

Code working on a few test clips but no results yet re benefit vs
signaling cost and no tuning of red loop to test lower cost alternatives
based on the available reference values.

Patch 3. Added check to make sure we don't pick a reference
that would give rise to an uncodeable / out of range residual.

Patch 6-7: Attempt to rebase. OK to submit but best to leave flag off for now.

Patch 9. Remove print no longer needed.

Change-Id: I1938c2ffe41afe6d3cf6ccc0cb2c5d404809a712
2012-10-26 13:35:02 +01:00
Ronald S. Bultje
6d465faa34 Extend edges correctly during actual frame encoding also.
Should fix B_PRED-related encoder/decoder mismatches.

Change-Id: I16f808dffd19094e02e8562ba58cc1016155ce93
2012-10-25 18:09:02 -07:00
Ronald S. Bultje
fbf2ac111e Fix 4x4 intra prediction on the edge of SB rows.
Change-Id: I87d571008c73f0a8514e0a864405aadb82fd1bc0
2012-10-25 12:05:58 -07:00
Ronald S. Bultje
2c4f616a61 Fix yet another typo in splitmv/tx_select code.
Change-Id: I6a28cc87af275fc267b3cc8d90d642dcc870c249
2012-10-25 09:17:47 -07:00
Ronald S. Bultje
b4cdcd6ea6 Generalize coefficient tokenizing.
Change-Id: Ie33f7d0f90d0e5862be975d676a700d06f79eec6
2012-10-25 09:14:21 -07:00
Ronald S. Bultje
cb9e6abf80 Generalize EOB token stuffing.
Change-Id: Ibb51f3f8c3575d4621890220b20887a13a46a04e
2012-10-24 16:59:00 -07:00
Ronald S. Bultje
29b6a45b88 Fix typo in splitmv/tx_select code.
Change-Id: I2823043634b0fa617c2715d63ff18595b7209287
2012-10-24 13:04:09 -07:00
John Koleszar
226e55c17d coef_probs: remove duplicate read/update code
Refactor per-transform copy & paste into a common function
update_coef_probs_common() and read_coef_probs_common(). The dry-run and
bit-writing loops in the encoder are still obvious candidates to be made
common, but they start to diverge a bit in the next commit, so are left
as-is for now.

Change-Id: I896bd3f4a073a6296eab7e92463fef79d8c6c08c
2012-10-24 09:41:04 -07:00
pascal massimino
73d387dcd2 Merge "Change eob[] array type in splitmv RD loop to a regular integer." into experimental 2012-10-23 14:00:01 -07:00
Ronald S. Bultje
6498516bb6 Change eob[] array type in splitmv RD loop to a regular integer.
Change-Id: I240d6b50069fd3f35cc4fed2f4507796f0ef25e9
2012-10-23 09:23:23 -07:00
Deb Mukherjee
5373119713 Merging in the Switchable interp experiment
There is a macro DEFAULT_INTERP_FILTER defined in encoder/onyx_if.c that
is set as EIGHTTAP for now - so SWITCHABLE is not really used. Ideally,
this should be SWITCHABLE but that would make the encoder quite a bit slower.
We will change the default filter to SWITCHABLE once we find a faster way to
search for switchable filters.

Change-Id: Iee91832cdc07e6e14108d9b543130fdd12fc9874
2012-10-23 08:50:52 -07:00
Ronald S. Bultje
f93d316e0c Merge "Change entropy context assignment style from *(x + y) = z to x[y] = z." into experimental 2012-10-22 22:04:28 -07:00
Deb Mukherjee
04d62a989b Merging in the TX_SELECT experiment
Change-Id: I0d306b0062be59bc785b65882691c956c8b5e7c8
2012-10-22 16:58:57 -07:00
Deb Mukherjee
78808ad9fb Merge of the newmventropy experiment
Removes the old mv encoding code.

Change-Id: I1026d48cc5ac15ccb776f98463e929254c3dc7da
2012-10-22 15:23:41 -07:00
Ronald S. Bultje
95dcfb9dd6 Change entropy context assignment style from *(x + y) = z to x[y] = z.
Change-Id: Ibc4425bb6e01606751021e57c93106c365a2da21
2012-10-22 14:06:52 -07:00
Scott LaVarnway
12c1b180f8 Merge "Added rtcd support vp8_sad16x3 and vp8_sad3x16" into experimental 2012-10-22 13:57:03 -07:00
Scott LaVarnway
d36ecb42da Added rtcd support vp8_sad16x3 and vp8_sad3x16
Change-Id: I5bca7b7a4b230082d36ac6fb84db84137ad177d7
2012-10-22 13:45:42 -07:00
Ronald S. Bultje
97096f5fa3 Merge changes I02e7f64a,Ide954b00,Idc8b5977 into experimental
* changes:
  Fix another typo in 4x4-transform-for-i8x8-intra-pred coeff contexts.
  8x8 transform support in splitmv.
  Use SPLITMV_PARTITIONING instead of a plain integer type.
2012-10-22 12:54:39 -07:00
Deb Mukherjee
7906ed091a Merge "Merging the hybrid transform experiments" into experimental 2012-10-22 12:18:46 -07:00
Deb Mukherjee
f10465634b Merging the hybrid transform experiments
Change-Id: I99f1982b30a630a9a070a8326d83b34a33cba14c
2012-10-22 11:55:29 -07:00
Ronald S. Bultje
f72fdf1c7f Fix another typo in 4x4-transform-for-i8x8-intra-pred coeff contexts.
Change-Id: I02e7f64a7c99f6c222b9ef21341b0e801d646810
2012-10-22 11:55:06 -07:00
Ronald S. Bultje
84ea002eb1 8x8 transform support in splitmv.
For splitmv, where partitioning is 8x16, 16x8 or 8x8, this patch
uses the 8x8 transform (instead of the 4x4) if txfm_mode is
ALLOW_8X8 or ALLOW_16X16. For TX_MODE_SELECT, splitmv can indicate
which of the 2 transform sizes (4x4 or 8x8) it wants to use.

Gains (with hybridtx4x4/8x8/16x16 and tx_select experiments
enabled) on derf: +0.9%, HD: +0.4%, STD/HD: +0.8% (SSIM or overall
PSNR, both metrics show similar improvements).

Change-Id: Ide954b000b415548ed92a7ac78e24f36e60fcf06
2012-10-22 11:49:00 -07:00
Ronald S. Bultje
5a80e7a292 Use SPLITMV_PARTITIONING instead of a plain integer type.
This can be used to distinguish between 16x8, 8x16, 8x8 and 4x4
partitioning modes when choosing splitmv as a MB mode.

Change-Id: Idc8b59772e1a80ccc4ad44d63c5c2ec3fc061a3c
2012-10-22 11:25:48 -07:00
Ronald S. Bultje
09fb253b39 Merge "Invert SB probability." into experimental 2012-10-22 11:18:01 -07:00
Jim Bankoski
8fc5774f8b Merge "Remove variance vtable from rtcd" into experimental 2012-10-22 11:12:07 -07:00
Ronald S. Bultje
ef50e48323 Invert SB probability.
It currently counts the probability that the branch is true, but it
should count the probability that the branch is false.

Change-Id: I963825da2e7a7ed3a613eb23ffd085e427dc36e5
2012-10-22 11:05:56 -07:00
Ronald S. Bultje
6e5cb12886 Merge "Fix use of wrong context in i8x8 coefficient cost calculation." into experimental 2012-10-22 11:03:26 -07:00
Jim Bankoski
118b2fe962 Remove variance vtable from rtcd
Change-Id: Idd2722a538423b451e1e3495f89a7141480493d6
2012-10-21 20:47:57 -07:00
Deb Mukherjee
788d7f10d4 Merge "Allow B_VL_PRED & B_LD_PRED modes with Superblocks" into experimental 2012-10-21 15:35:24 -07:00
Deb Mukherjee
57679badf2 Allow B_VL_PRED & B_LD_PRED modes with Superblocks
Allows B_VL_PRED & B_LD_PRED modes to be used for all blocks
within a MB in B_PRED mode. These modes were temporarily
disabled with super-block coding.

Change-Id: I973b9bdb82c3da5f12d7cc963162a28805f25303
2012-10-20 21:28:38 -07:00
Ronald S. Bultje
0d4e82aa4e Fix use of wrong context in i8x8 coefficient cost calculation.
Change-Id: Ica58d0c7d8addb5ddd5d6e1fdea8f0f96e110862
2012-10-19 22:05:50 -07:00
John Koleszar
91dc8ce70d calculate probs consistently
There were several different methods for calculating bitstream
probabilities in use. Consolodate these into a pair of functions,
get_prob() and get_binary_prob().

Change-Id: I5534f517f74027fee16d89c9baefaafea8156b2f
2012-10-19 12:31:16 -07:00
John Koleszar
e9fd1eace1 Remove bc, bc2 from pbi,cpi,xd
Pass the bool coder to be used explicitly. This avoids cases where two
different bool coders can be addressed from the same function. Also be
more consistent with bool coder variable naming, start to standardize
on 'bc'.

Change-Id: I1c95e2fdbe24ebe8c0f84924daa1728e3b054a31
2012-10-19 12:31:15 -07:00
Deb Mukherjee
f3208f362b Some cleanups and fixes.
Separates the logic on transform type selection previously spread out
over a number of files into a separate function. Currently the tx_type
field in b_mode_info is not used, but still left in there to eventually
use for signaling the transform type in the bitstream.

Also, now for tx_type = DCT_DCT, the regular integer DCT is used, as
opposed to the floating point DCT used in conjuction with hybrid
transform.

Results change somewhat due to the transform change, but are within
reasonable limits. The hd/std-hd sets are slightly up, while derf/yt
are slightly down.

Change-Id: I5776840c2239ca2da31ca6cfd7fd1148dc5f9e0f
2012-10-19 06:58:15 -07:00
Ronald S. Bultje
b44397ebcd Merge "Fix encode breakout skip handling." into experimental 2012-10-18 15:21:30 -07:00
Ronald S. Bultje
1f11d13e5e Merge "Detect skippable blocks in splitmv RD loop case." into experimental 2012-10-18 15:21:14 -07:00
Ronald S. Bultje
637c4d2ec8 Merge "Use correct context for optimize_b() in vp8_optimize_mby_8x8()." into experimental 2012-10-18 12:39:10 -07:00
Deb Mukherjee
96276f97ec A fix for crashes when #macroblock rows is odd.
Change-Id: If9fc2df4051ccfb8d804dae9d1be08d12d0f81ce
2012-10-18 12:00:23 -07:00
Ronald S. Bultje
87d2b2549c Fix encode breakout skip handling.
Change-Id: Ib42a5dbded27abf2a01fd656a47a1e96b1fe2912
2012-10-17 18:00:56 -07:00
Ronald S. Bultje
b276efd002 Detect skippable blocks in splitmv RD loop case.
Change-Id: Id8a7265dc721e5cdcaa144e0041beeb32a98f51c
2012-10-17 15:45:00 -07:00
pascal massimino
07c03b3f23 Merge "cosmetic: fix '= & ' construct" into experimental 2012-10-17 15:17:21 -07:00
John Koleszar
cdd0ed1352 Merge "consolidate update_mb_segmentation_map data" into experimental 2012-10-17 15:15:59 -07:00
John Koleszar
c6f13f3278 Merge changes Ic711a378,I43a46c36,If19ee74a into experimental
* changes:
  Move remaining per-frame data into partition 0
  Interleave modes/residual per macroblock
  Force interleaved decoding
2012-10-17 15:15:10 -07:00
John Koleszar
3883dab0a2 cosmetic: fix '= & ' construct
remove useless space after address-of operator.

Change-Id: I1fb9e82e8d6cf87558fbd454fb5c0f87599ca2ab
2012-10-17 14:51:27 -07:00
John Koleszar
47a2154c0e Move remaining per-frame data into partition 0
This commit moves a bit of data that ended up packed with the
modes/mv/residual partition during the change to interleaved encoding
into partition 0 where it belongs.

Change-Id: Ic711a378c58d9d6a17254384f492c213a15bad92
2012-10-17 14:48:13 -07:00
Ronald S. Bultje
3182ab619d Use correct context for optimize_b() in vp8_optimize_mby_8x8().
Change-Id: Ic975ab85a9924adc7b3d421f64155cc79f40ffd0
2012-10-17 14:12:59 -07:00
John Koleszar
6ef5a00538 Interleave modes/residual per macroblock
Packs the bitstream with each mb's residual following its mode/mv
information.

TODO: There are still a few fields that should be packed into partition
0 but are included in partition 1, due to them being serialized from
write_kfmodes/pack_inter_mode_mvs, which execute after the first
partition is finalized. These need to be separated out into a separate
function, similar to mb_mode_mv_init() in decodemv.c.

Change-Id: I43a46c363601ab36954d07ebe498760e1e2e3af4
2012-10-17 13:19:41 -07:00
Ronald S. Bultje
eab804558b Use 8x8 block bases for non-4x4 splitmv RD.
Change-Id: I76095d5a02edcc5d404ea830157780b24fd509d7
2012-10-17 11:40:00 -07:00
Jim Bankoski
9a1962210d Merge "removed the recon rtcd invoke macro code (unrevert)" into experimental 2012-10-16 13:49:22 -07:00
Marco Paniconi
4cf4c94ad1 Fix to rd cost computation for mv bias.
This prevents the rd cost from wrapping around and going negative.

Change-Id: Id61390537d2ad47762e410918bb4e18f6a0912d4
2012-10-16 13:37:38 -07:00
Ronald S. Bultje
9443f05e6b Fix a mismatch if a keyframe contains skip-blocks.
Change-Id: I0681d3183f51627be8c2bb76f343b7270f9116d8
2012-10-16 12:41:56 -07:00
Jim Bankoski
7c15c18c5e removed the recon rtcd invoke macro code (unrevert)
This reinstates reverted commit 2113a83157

Change-Id: I9a9af13497d1e58d4f467e3e083fddf06b1b786c
2012-10-16 12:02:31 -07:00
Ronald S. Bultje
23a64c890e Remove test from B_MODE_INFO.
It is essentially a duplicate of mode for RD-only purposes. Removing it
saves us 4 bytes per B_MODE_INFO, or ~0.5MB for a 1080p video encode.

Change-Id: I0a54db5f51658b3946d7efb1ca6e8cfbda0cdf88
2012-10-15 13:54:05 -07:00
Ronald S. Bultje
66180f228c Remove mode_rdopt from MB_MODE_INFO.
The variable is essentially a duplicate of mode for RD-only purposes.
Removing it gives identical results, and saves 4 bytes per macroblock
(i.e. 32.5kB for a 1080p HD video encode).

Change-Id: I22d5058fdb80ab0b69862caee825e9d86bb148b3
2012-10-15 13:49:45 -07:00
Ronald S. Bultje
1d87f9c142 Properly use chroma block object for chroma coefficient costing.
Change-Id: Ieb38c7aae91dbaca4a8add204fa84e1cfc459933
2012-10-15 13:36:00 -07:00
Ronald S. Bultje
e788146247 Add a new token stuffing function vp8_stuff_mb().
This way a caller doesn't need to implement the logic for which (and how
many) tokens to write out to stuff one macroblock worth of EOBs. Make
the actual function implementations static, since they are now only used
in tokenize.c; also do some minor stylistic changes so it follows the
style guide a little more closely; use PLANE_TYPE where appropriate,
remove old (stale) frame_type function arguments; hardcode plane type
where only a single one is possible (2nd order DC or U/V EOB stuffing);
support stuffing 8x8/4x4 transform EOBs with no 2nd order DC.

Change-Id: Ia448e251d19a4e3182eddeb9edd034bd7dc16fa3
2012-10-15 10:56:39 -07:00
Ronald S. Bultje
41e3a9ef14 Add and consistently use PLANE_TYPE.
Change the macros PLANE_TYPE_{Y_NO_DC,Y2,UV,Y_WITH_DC} to a typed enum,
and use this typed enum consistently across all places where relevant.
In places where the type is implied (e.g. in functions that only handle
second order planes or chroma planes), remove it as a function argument
and instead hardcode the proper enum in the code directly.

Change-Id: I93652b4a36aa43163d49c732b0bf5c4442738c47
2012-10-15 07:57:16 -07:00
Ronald S. Bultje
5cfff7ce88 Merge duplicate loops in tokenization code.
Also merge the three occurrences of 4x4 chroma block writing into a
single function, and call that function instead of duplicating the
4x4 chroma tokenization code in 3 places.

Change-Id: I7913538d1029f709b0e3ae49fff1148d3be9eeb9
2012-10-15 07:55:27 -07:00
Ronald S. Bultje
a0ad521caf Minor refactoring in encodeintra.c.
Merge code blocks for different transform sizes; use MACROBLOCKD as a
temp variable where that leads to smaller overall source code; remove
duplicate code under #if CONFIG_HYBRIDTRANSFORM/#else blocks. Some style
changes to make it follow the style guide a little better.

Change-Id: I1870a06dae298243db46e14c6729c96c66196525
2012-10-14 17:09:08 -07:00
Ronald S. Bultje
e7a4bccaee Make optimize_mb_16x16() static.
It is not used outside this file.

Change-Id: Id0947180edab4c5f1f50589863350b21e97c25f1
2012-10-14 17:09:08 -07:00
Ronald S. Bultje
781f6ad7c6 Remove assignment in vp8_optimize_mby_16x16().
The result of the assignment is unused.

Change-Id: Id94b790baa6451f24e9aeda6f036390388d93921
2012-10-14 17:09:07 -07:00
Ronald S. Bultje
11e42d46aa Remove duplicate code in optimize_mb_NxN vs. vp8_optimize_mby/uv_NxN().
Instead, just call vp8_optimize_mby/uv_NxN() inside optimize_mb_NxN().

Change-Id: Ief941064d86db4277ba02e990a26819144b55f7c
2012-10-14 17:09:07 -07:00
Ronald S. Bultje
238ed517fd Remove duplicate or unused code in encoder/encodemb.c.
Also make some minor stylistic changes to bring the code closer to
the style guide. Remove distinction between inter and intra transform
functions, since both do exactly the same thing except for the check
against SPLITMV for the second-order transform. Remove some commented
out debug code. Remove 8x8/16x16 transform code in encode_inter16x16y(),
since the first-pass only uses 4x4 anyway.

Change-Id: Ife54816ff759825b9141f95dc2ba43c253c14dba
2012-10-14 17:09:02 -07:00
Ronald S. Bultje
f41adbb468 Remove duplicate or unused code in encoder/quantize.c.
Also make some minor stylistic changes to bring the code closer to
the style guide. Remove checks against i8x8/bpred in the mb-codepath,
since these do individual block reconstruction and thus don't go through
this codepath.

Change-Id: I4dfcf8f78746f4647a206475acf731837aa4fd47
2012-10-14 08:04:06 -07:00
Ronald S. Bultje
f1e629320b Add a _4x4 sufix to all 4x4-transform-related functions.
This includes trellis optimization, forward/inverse transform,
quantization, tokenization and stuffing functions.

Change-Id: Ibd34132e1bf0cd667671a57b3f25b3d361b9bf8a
2012-10-14 08:04:05 -07:00
Ronald S. Bultje
e03715fe6c Replace vp8_inverse_htransform_b() by direct call to vp8_ihtllm_c().
Change-Id: I55ee7566341b04d7e7340fdab95189f82231a792
2012-10-14 08:04:05 -07:00
Jim Bankoski
f9d5f86643 Revert "removed the recon. rtcd invoke macro code"
This reverts commit 2113a83157
2012-10-13 20:29:04 -07:00
Jim Bankoski
2113a83157 removed the recon. rtcd invoke macro code
Code clean up - removed rtcd

Change-Id: Id963ecf53c370b1d99484ef18d6befeed7e0c748
2012-10-13 18:49:44 -07:00
Adrian Grange
6e3c7849f7 Merge "Remove reverting of tx-select if only a single txfm-size is used." into experimental 2012-10-12 15:08:24 -07:00
Yaowu Xu
707e6c301e removed the dependency cross key frame boundary
This allowed decoding from any key frame after skipping the frames
prior.

Change-Id: I096fccad5346d75ae50a017c94eb8d772a7e8b00
2012-10-12 12:25:21 -07:00
Ronald S. Bultje
5a4ea8bea6 Remove reverting of tx-select if only a single txfm-size is used.
Entropy coding takes care of this anyway, and this causes changes to
the txfm size assigned to skip blocks, which can affect the loopfilter
output, thus causing encoder/decoding mismatches.

Change-Id: I591a8d8a4758a507986b751a9f83e6d76e406998
2012-10-12 11:44:15 -07:00
Ronald S. Bultje
0dac290106 Remove CONFIG_TX16X16, since the experiment was merged.
Change-Id: Ib74824c824f7ebb279e7df8eb32440d4d65fbd79
2012-10-12 11:06:55 -07:00
John Koleszar
17fd972aea consolidate update_mb_segmentation_map data
The update_mb_segmentation_map flag was being signalled earlier than
other data dependent on that flag. Consolidate this data so it's
parsed within the same if-scope as the flag is originally parsed in.

Change-Id: I10e90b4f511856445ef75a85a44ff441e1e5e672
2012-10-12 07:12:59 -07:00
Ronald S. Bultje
f39b0f192f Use transform-size selection for i8x8_pred also.
Change-Id: Iecb282fc89f9b5145ef31c5eda294ad42bc32a5d
2012-10-11 09:26:00 -07:00
Yunqing Wang
f6886c4b93 post-proc: fix 0 or negative threshold handling
If the threshold(limits) <= 0, skipped filtering and copied the
frame directly. Also, fixed memory allocation checking.

Change-Id: If3d79d5b2bcb71b9777e6eb5cba1384585131e22
2012-10-10 18:36:26 -07:00
Deb Mukherjee
a7333b0a5b Merge of the TX_16X16 experiment
Change-Id: I22aa803ffff330622cdb77277e7b196a9766f882
2012-10-10 17:05:54 -07:00
John Koleszar
9581bf46dc Merge "write_kfmodes: use update_skip_probs()" into experimental 2012-10-10 08:49:50 -07:00
Paul Wilkins
a2b4a560b4 Merge "convert copy16x16 to rtcd" into experimental 2012-10-10 05:45:19 -07:00
Jim Bankoski
89f060e88a convert copy16x16 to rtcd
Convert copy16x16 from invoke to rtcd.  The first in a long
string of converts.

Change-Id: I296b0aa32f40e9fb649f7a3cb914a4e5300cad63
2012-10-09 17:09:08 -07:00
John Koleszar
d94d2b75ea write_kfmodes: use update_skip_probs()
Use the common update_skip_probs() function rather than duplicating its
logic in write_kf_modes().

Change-Id: I2890a28f6907cb79ffe0fb21d20f0ef98b85cdd9
2012-10-09 15:36:00 -07:00
John Koleszar
d21070a538 multi-res: disable intra on forced ref frames
If a reference frame is forced because of low dissimilarity, then
shut off the search of intra modes. This change has mixed results. On
one clip (QVGA), it hurt quality by ~1.5% with negligible speed impact.
On another (VGA) it had negligible affect on quality, but a ~0.2% speed
impact.

Change-Id: Ic8b07648979d732f489de5f094957e140f84d2eb
2012-10-09 10:25:01 -07:00
John Koleszar
81fd7ac589 Merge "multi-res: add parent_ref_valid flag" 2012-10-09 10:24:37 -07:00
John Koleszar
4de7aed6fb multi-res: add parent_ref_valid flag
Rather than overloading the parent_ref_frame value to shut off the
search in some cases, add a new validity flag. This cleans up some
of the duplicated mr_encoder_id && mr_low_res_mv_avail checks as
well, for readability.

Change-Id: Iddad93a27066c3d85ff2f25a361ac113b288ab7b
2012-10-09 09:29:45 -07:00
Yunqing Wang
8b698e8cb1 Merge "post-proc: deblock filter optimization" 2012-10-09 09:26:36 -07:00
Ronald S. Bultje
9ca3c8b2c4 Selectable transform size try 2.
Results: derf (vanilla or +hybridtx) +0.2% and (+hybrid16x16
or +tx16x16) +0.7%-0.8%; HD (vanilla or +hybridtx) +0.1-0.2%
and (+hybrid16x16 or +tx16x16) +1.4%, STD/HD (vanilla or +hybridtx)
about even, and (+hybrid16x16 or +tx16x16) +0.8-1.0%.

Change-Id: I03899e2f7a64e725a863f32e55366035ba77aa62
2012-10-09 09:18:21 -07:00
Yunqing Wang
4c53bacce4 post-proc: deblock filter optimization
1. Algorithm modification:
Instead of having same filter threshold for a whole frame, now we
allow the thresholds to be adjusted for each macroblock. In current
implementation, to avoid excessive blur on background as reported
in issue480(http://code.google.com/p/webm/issues/detail?id=480), we
reduce the thresholds for skipped macroblocks.

2. SSE2 optimization:
As started in issue479(http://code.google.com/p/webm/issues/detail?id=479),
the filter calculation was adjusted for better performance. The c
code was also modified accordingly. This made the deblock filter
2x faster, and the decoder was 1.2x faster overall.

Next, the demacroblock filter will be modified similarly.

Change-Id: I05e54c3f580ccd427487d085096b3174f2ab7e86
2012-10-08 12:06:44 -07:00
John Koleszar
30d8ba541e multi-res: work around reference mismatch
In some situations, believed to be an interaction between temporal
scalability and dropped frames, the references available to an
encoder may not be the same references available to its parent.
Previously, the code tried to force the reference frame chosen by
the parent to be used on this frame, even if it was disabled. This
was preventing the pick mode loop from running even once, which led
to a crash.

Attempts to reproduce this bug locally were unsuccessful, so it is
still undetermined what the underlying cause of this issue is. In
the specific case that was failing, the application did not set
any flags which influenced the reference selection on that frame.
ref_frame_flags indicated that the golden frame was disabled,
believed to be because the last frame updated the last and golden
frames, so golden was shut off by default. It's not clear why this
wouldn't have also been true in the lower res encoder, ie, why the
lower res encoder decided to use and/or was allowed to use the
golden frame. We weren't able to debug into the non-crashing
lower res encoder as the crash couldn't be reproduced locally.

Change-Id: Ifb265253d26963ac2afde0e20cf6792788be6af7
2012-10-08 08:39:47 -07:00
Deb Mukherjee
54434bdba2 Merge "Mismatch bug-fix when transform expts are off" into experimental 2012-10-05 06:49:08 -07:00
Deb Mukherjee
105746c8fe Mismatch bug-fix when transform expts are off
A variety of issues related to tangling of various hybrid transform
experiments.

Change-Id: I84dac65ff513f8b024407760df55fffa95e198de
2012-10-05 05:30:00 -07:00
Paul Wilkins
81c6041922 Fix SIMD unsafe use of floating point.
This commit fixes unsafe simd / floating point interactions arising
from the current hybrid and 16x16 transform implementation.
These led to a raft of bugs and issues when the project was
built using VS2008 for Win32 though they did not show up with
the unix builds.

Gerrit makes a meal out of presenting the fix but all I have actually
done is indent the body of each function that uses floating point by
one level and bracket with emms instructions using  the function
vp8_clear_system_state(). See below.

function () {
  vp8_clear_system_state();
  {
  ... function body
  }
  vp8_clear_system_state();
}

This is almost certainly over the top in terms of number of emms
instructions but is a temporary measure pending implementation of
integer variants of each function to replace the floating point.

Limited testing suggests that this fixes the problems that arose for
Win32 VS2008 when the hybrid or 16x16 transforms were enabled.

Change-Id: I7c9a72bd79315246ed880578dec51e2b7c178442
2012-10-05 11:16:46 +01:00
John Koleszar
0e213fb999 fix uninitialized value in multi-res encoding
If a parent mb is available but is intra coded, then parent_ref_mv is
invalid. Check that the parent is inter coded before trying to access
the parent_ref_mv. Previously the parent_ref_mv was being read from
an uninitialized stack allocation, causing potential OOB reads and
other undefined behavior.

Change-Id: I0c93cd412a19c3a184bcf6decaa145b3a036a6c0
2012-10-03 14:53:05 -07:00
Jim Bankoski
6f35b1958e Disable keyframe in real time that's placed one frame after a cut.
The codec as it stood placed a keyframe one frame after a
real cut scene - and ignored datarate and other considerations.

TODO: Its possible that we should detect a keyframe and recode
the frame ( in certain circumstances) to improve quality.

Change-Id: Ia1fd6d90103f4da4d21ca5ab62897d22e0b888a8
2012-10-01 14:17:43 -07:00
Marco Paniconi
9704cdec9f Resetting of the cyclic_refresh_mode_index:
Reset the cyclie refresh mode index in alloc_compressor_data().
This is needed to handle both cases of internal and
external spatial resizing.

Change-Id: I2697e12d45135eae2e8f0d45161811f24722312a
2012-09-27 14:34:43 -07:00
Deb Mukherjee
3f5d60b384 Entropy coding for hybrid transform
Separates the entropy coding context models for 4x4, 8x8 and 16x16
ADST variants.

There is a small improvement for HD (hd/std-hd) by about 0.1-0.2%.
Results on derf/yt are about the same, probably because there is not
enough statistics.

Results may improve somewhat once the initial probability tables are
updated for the hybrid transforms which is coming soon.

Change-Id: Ic7c0c62dacc68ef551054fdb575be8b8507d32a8
2012-09-27 11:21:39 -07:00
Marco Paniconi
d539c1db5a Reset the cyclic_refresh_mode_index to 0 on resize.
On an internal spatial resize, this mode index was not reset to 0,
and therefore could exceed dimensions of seg_map or cyclic_refresh_map.

Change-Id: I6fe85dbd2765eb0207a9d9f71fda8d8b8c34f075
2012-09-26 15:46:51 -07:00
Jim Bankoski
ab98103fac Merge "disable segmentation on enhancement layers" 2012-09-25 10:49:25 -07:00
Jim Bankoski
22141d9d79 disable segmentation on enhancement layers
This should avoid problems with blocks gettings high quality
improvement despite having recently moved:

Change-Id: Ic0af0de2d6577807fa3c553f47b55d547ef36359
2012-09-24 07:53:26 -07:00
Marco Paniconi
b501251e2e Update to cyclic refresh:
Set the seg map to 0 for key frame.

In previous commit on cyclic refresh, the seg map for key frame
was not reset, and instead used the seg map from last frame.

Change-Id: I848eb2face420dfcd2f7daca6f070b9127ca938b
2012-09-23 21:01:12 -07:00
Marco Paniconi
5979b89b92 Update to cyclic refresh.
-Increase the amount of mbs to be refreshed.
-Replace the delta qp with a fixed and reduced delta.
-Change to the mb update loop to try to always update same amount of mbs.

Change-Id: I93ac88002fd8dc677d2337f77998ff93f64e4ff9
2012-09-21 18:57:30 -07:00
Deb Mukherjee
70e21afb3f Separating 8x8DCT use from hybridtransform8x8
With this change, even if hybridtransform8x8 experiment is off,
8x8 dct is used for the I8x8 mode. However note that the gains
observed with the hybridtransform8x8 experiment will now be less,
since part of the gain is now merged in.

Change-Id: I9afb3880906fd0a1368a374041fc08efcf060c54
2012-09-21 16:39:23 -07:00
Yaowu Xu
fff019cea4 fixed inconsistency of transform size decision
for MBs using i8x8 prediciton mode when hybridtransform8x8 is not
enabled in configure.

Change-Id: I3e3c8bb1c0261108c1c71213ca9557b0ce558036
2012-09-20 16:31:30 -07:00
Yaowu Xu
d482fbff53 removed redundant initialization
Change-Id: I34569375e520759860504c3dfb17a2c27ceb9aed
2012-09-14 09:53:11 -07:00
Yaowu Xu
6d8538e508 Use 3 rows and cols of pixels for ref_mv scoring
The commit changed to use 3 rows above and 3 cols from left for SAD
scoring for selecting the best reference motion vector. The change
helped std-hd set by >.2% on psnr/ssim metrics.

Change-Id: Ifad3b528d0b4b6e3c22518af789d76eff23c1520
2012-09-14 09:47:43 -07:00
Scott LaVarnway
260f5071ed Removed pre_mvc
Not used.

Change-Id: Ifbd97c9ad537d5184f7e305fa8acf6f027978b6b
2012-09-13 11:55:57 -07:00
Adrian Grange
e1210c6aed Removed redundant line.
Removed spurious line that has no effect.

Change-Id: I9dc90babbbfcaca049d4a40dc996edc7de123e01
2012-09-13 11:37:55 -07:00
Deb Mukherjee
2b26cf1786 Adds feature for companded MV encoding
The high-precision (1/8) pel bit is turned off if the reference
MV is larger than a threshold. The motivation for this patch is
the intuition that if motion is likely large (as indicated by
the reference), there is likley to be more motion blur, and as
a result 1/8 pel precision would be wasteful both in rd sense
as well as computationally.

The feature is incorporated as part of the newmventropy experiment.
There is a modest RD improvement with the patch. Overall the
results with the newmventropy experiment with the threshold being
16 integer pels are:

derf: +0.279%
std-hd: +0.617%
hd: +1.299%
yt: +0.822%

With threshold 8 integer pels are:

derf: +0.295%
std-hd: +0.623%
hd: +1.365%
yt: +0.847%

Patch: rebased
Patch: rebase fixes

Change-Id: I4ed14600df3c457944e6541ed407cb6e91fe428b
2012-09-12 11:51:10 -07:00
Deb Mukherjee
d406334f27 Cleanups for hybrid transform
Some cleanups on the transform size and type selection logic.

Change-Id: If2e9675459482242cf83b4f7de7634505e3f6dac
2012-09-11 20:53:13 -07:00
Yaowu Xu
d4c329c4da Merge "Revert "Hybrid transform cleanups"" into experimental 2012-09-11 15:00:51 -07:00
Debargha Mukherjee
aac982e89c Revert "Hybrid transform cleanups"
This reverts commit c5af82b7ed

There was a mismatch bug introduced by this patch. Hence reverting until it is fixed.
2012-09-11 14:52:20 -07:00
Deb Mukherjee
44d27c7b2c Merge "Hybrid transform cleanups" into experimental 2012-09-10 15:39:37 -07:00
Deb Mukherjee
c5af82b7ed Hybrid transform cleanups
Some cleanups that will make it easier to maintain the code
and incorporate upcoming changes on  entropy coding for the
hybrid transforms.

Change-Id: I44bdba368f7b8bf203161d7a6d3b1fc2c9e21a8f
2012-09-10 15:27:56 -07:00
Paul Wilkins
778ec421e7 Partial merge of NEWBESTREFMV and NEW_MVREF.
This commit merges those parts of the CONFIG_NEW_MVREF
that specifically relate to choosing a better set of candidate
MV references into the NEWBESTREFMV experiment.

CONFIG_NEW_MVREF will then be used for changes relating
to the explicit coding of a cost optimized MV reference in the
bitstream as part of MV coding.

Change-Id: Ied982c0ad72093eab29e38b8cd74d5c3d7458b10
2012-09-07 14:21:22 +01:00
Paul Wilkins
38e1c79185 MV reference changes
Extend experiment to use both vectors from MBs
coded using compound prediction as candidates.

In final sort only consider best 4 candidates
for now but make sure 0,0 is always one of them.

Other minor changes to new MV reference code.
Pass in Mv list to vp8_find_best_ref_mvs().

Change-Id: Ib96220c33c6b80bd1d5e0fbe8b68121be7997095
2012-09-07 12:46:41 +01:00
Deb Mukherjee
00f9eb6590 New motion vector entropy coding
Adds a new experiment with redesigned/refactored motion vector entropy
coding. The patch also takes a first step towards separating the
integer and fractional pel components of a MV. However the fractional
pel encoding still depends on the integer pel part and so they are
not fully independent. Further experiments are in progress to see
how much they can be decoupled without affecting performance.
All components including entropy coding/decoding, costing for MV
search, forward updates and backward updates to probability tables,
have been implemented.

Results so far:
derf: +0.19%
std-hd: +0.28%
yt: +0.80%
hd: +1.15%

Patch: Simplifies the fractional pel models:
derf: +0.284%
std-hd: +0.289%
yt: +0.849%
hd: +1.254%

Patch: Some changes in the models, rebased.
derf: +0.330%
std-hd: +0.306%
yt: +0.816%
hd: +1.225%

Change-Id: I646b3c48f3587f4cc909639b78c3798da6402678
2012-09-06 08:28:21 -07:00
Yunqing Wang
64075c9b01 Encoder denoiser performance improvement
The denoiser function was modified to reduce the computational
complexity.

1. The denoiser c function modification:
The original implementation calculated pixel's filter_coefficient
based on the pixel value difference between current raw frame and last
denoised raw frame, and stored them in lookup tables. For each pixel c,
find its coefficient using
    filter_coefficient[c] = LUT[abs_diff[c]];
and then apply filtering operation for the pixel.

The denoising filter costed about 12% of encoding time when it was
turned on, and half of the time was spent on finding coefficients in
lookup tables. In order to simplify the process, a short cut was taken.
The pixel adjustments vs. pixel diff value were calculated ahead of time.
    adjustment = filtered_value - current_raw
               = (filter_coefficient * diff + 128) >> 8

The adjustment vs. diff curve becomes flat very quick when diff increases.
This allowed us to use only several levels to get a close approximation
of the curve. Following the denoiser algorithm, the adjustments are
further modified according to how big the motion magnitude is.

2. The sse2 function was rewritten.

This change made denoiser filter function 3x faster, and improved the
encoder performance by 7% ~ 10% with the denoiser on.

Change-Id: I93a4308963b8e80c7307f96ffa8b8c667425bf50
2012-08-31 13:48:13 -07:00
Jingning Han
de6dfa6bb0 hybrid transform of 16x16 dimension
Enable ADST/DCT of dimension 16x16 for I16X16 modes. This change provides
benefits mostly for hd sequences.

Set up the framework for selectable transform dimension.

Also allowing quantization parameter threshold to control the use
of hybrid transform (This is currently disabled by setting threshold
always above the quantization parameter. Adaptive thresholding can
be built upon this, which will further improve the coding performance.)

The coding performance gains (with respect to the codec that has all
other configuration settings turned on) are

derf:   0.013
yt:     0.086
hd:     0.198
std-hd: 0.501

Change-Id: Ibb4263a61fc74e0b3c345f54d73e8c73552bf926
2012-08-30 16:52:25 -07:00
Ronald S. Bultje
c59e36fc76 Merge "Add proper skip support to intra frames." into experimental 2012-08-30 09:11:41 -07:00
Ronald S. Bultje
4f36b7c6b9 Add proper skip support to intra frames.
Change-Id: I7524883fb29f42303fb46a5bc6772fbcf8781d1d
2012-08-29 10:43:20 -07:00
Ronald S. Bultje
7a18c81663 Remove some disabled code from pick_inter_mode_sb().
Change-Id: I323c429b453eec8c3b76c37f7e2a52da9dfe8d77
2012-08-28 09:51:52 -07:00
Ronald S. Bultje
8e8fb27694 Disable 16x16 temp buffer for superblocks.
Change-Id: I3d585bae446c16fcf7a39d72c1bcd6468a7bb1a1
2012-08-28 09:18:24 -07:00
Paul Wilkins
2d60bee1fb New Motion Reference Search
Alternative strategy for finding a list of candidate motion
vectors to use as reference values in mv coding and as
nearest and near.

Sort by sad in vp8_find_best_ref_mvs() rather than just
pick the best. Allow 0,0 as a best ref option but not a
nearest or near unless there are no alternatives.

Encode/Decode verified on at least some clips.

Some commented out experimental and stats code still in place.

Gain over existing code averages about 1% on derf (alll metrics)
with improvement on all clips. Other test results pending.

The entropy coding of the mode (nearest/near etc) still
depends upon and requires the old "findnear" code so
this needs looking at and may provide room for further gains.

Change-Id: I871d7cba1d1c379c4bad9bcccce1fb19c46b8247
2012-08-24 18:08:21 +01:00
Scott LaVarnway
c533f2a43e Merge "Added error checking to vp8cx_create_encoder_threads()" 2012-08-23 13:55:06 -07:00
John Koleszar
b43ed7a5b1 Merge "remove rotation experiment" into experimental 2012-08-22 10:01:39 -07:00
Jim Bankoski
c522217d78 Merge "Add biasing to ZEROMV for videos with static background" 2012-08-21 15:56:59 -07:00
Scott LaVarnway
2a96d6b0d5 Merge "Removed last_kf_gf_q" 2012-08-21 15:19:58 -07:00
Daniel Kang
8c2a6cac41 Fix compiler warnings
Change-Id: I887cdcf90b87736f2a3805420aa41eed93324bee
2012-08-21 15:09:42 -07:00
Christian Duvivier
2a050620e5 Fix warning.
Change-Id: I99311811820169d62fda3febac4bafacfc7a538b
2012-08-21 14:58:36 -07:00
Yunqing Wang
24c346dffc Add biasing to ZEROMV for videos with static background
For videos with big static background(such as video conferencing
clips), the mode decision was biased to ZEROMV in order to
obtain a stable background. The percentage of ZEROMV on last
frame was used to predict if there is static area in current frame,
and checking already-encoded neighboring macroblocks' motion
vectors to make sure the local area has low motion.

Change-Id: I05b3241d3a56a0bda88b6681e5646c1c8baf2e57
2012-08-21 14:56:02 -07:00
John Koleszar
6612a43ce2 Merge changes I96cd08c9,If8eeb8ff into experimental
* changes:
  hybridtransform8x8: fix compilation
  comp_intra_pred: fix compilation
2012-08-21 10:10:43 -07:00
John Koleszar
5055a1610d remove rotation experiment
This is being reimplemented more generically in terms of affine
transforms.

Change-Id: I9300bfde5f8b93c708c64f59427087720f8ed782
2012-08-21 10:09:56 -07:00
John Koleszar
fb44d3e1da hybridtransform8x8: fix compilation
corrected ifdefs to include CONFIG_HYBRIDTRANSFORM8X8 for missing
definitions

Change-Id: I96cd08c98d74b5ba10866f3fa30252073ce92fa5
2012-08-21 09:31:31 -07:00
Ronald S. Bultje
978e4d0445 Fix some compiler warnings.
Change-Id: Iccb56e3b966d1519ba49dfe4e1396479c6b54a6f
2012-08-20 17:45:36 -07:00
Yunqing Wang
8ee88da060 Fix inter_zz_count calculation bug
The current way of counting inter_zz_count doesn't work correctly
in multi-threaded encoding. Calculating it after the frame is
encoded fixed the problem.

Change-Id: Ifcb1972cde950b8cc194f75c6d7b6af09e8b0e65
2012-08-20 17:43:06 -07:00
John Koleszar
cbc66fa83b Merge "Fix typo." into experimental 2012-08-20 17:09:30 -07:00
Ronald S. Bultje
2f743143bb Fix typo.
Change-Id: I95217ce52675ad00637fc8f60d4d0dd054efd512
2012-08-20 17:07:24 -07:00
Ronald S. Bultje
4396441b8b Merge "Superblock coding." into experimental 2012-08-20 17:04:23 -07:00
Ronald S. Bultje
5d4cffb35f Superblock coding.
This commit adds a pick_sb_mode() function which selects the best 32x32
superblock coding mode. Then it selects the best per-MB modes, compares
the two and encodes that in the bitstream.

The bitstream coding is rather simplistic right now. At the SB level,
we code a bit to indicate whether this block uses SB-coding (32x32
prediction) or MB-coding (anything else), and then we follow with the
actual modes. This could and should be modified in the future, but is
omitted from this commit because it will likely involve reorganizing
much more code rather than just adding SB coding, so it's better to let
that be judged on its own merits.

Gains on derf: about even, YT/HD: +0.75%, STD/HD: +1.5%.

Change-Id: Iae313a7cbd8f75b3c66d04a68b991cb096eaaba6
2012-08-20 14:43:34 -07:00