1941 Commits

Author SHA1 Message Date
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 c5af82b7ed6d89a4a12003b8d1c6b4befcadce92

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
Yaowu Xu
b0cfcb2ca8 Merge "realtime turndown loopfilter for 00" 2012-08-20 13:44:56 -07:00
Yaowu Xu
1829d03906 Merge "static threshold fix for realtime" 2012-08-20 13:40:53 -07:00
Jim Bankoski
9f0b42247d realtime turndown loopfilter for 00
Loop filter producing wierd artifacts when
repeatedly applied in noisy video.   This
mitigates the effect.

Change-Id: If4b1a8543912d186a486f84e11d8b01f7436fa5f
2012-08-20 13:04:53 -07:00
Jim Bankoski
985f09fdca static threshold fix for realtime
This code allows us to skip encoding if the sse
is less than the error we could possibly encode.

Change-Id: Iefb590dc0ee30b660495218398c7969f7d5fd19f
2012-08-20 12:58:31 -07:00
Yaowu Xu
d71ba03822 silent compiling warnings for VC9 build
Change-Id: Iaa947e640f27e6f6eaf7d845f243536bca2df513
2012-08-20 11:45:01 -07:00
Christian Duvivier
fc892cc54d Fix warnings.
Change-Id: I01dd96da18fe22450bb372b10ba90eab52e29bdf
2012-08-17 16:35:48 -07:00
Daniel Kang
e5cc24cc2e Fix valgrind error which causes non-deterministic results.
Error was introduced in bf474e170fefbed60cf20fa3d2e9e229776469f0

Change-Id: I55bf114a1938c3a8869d8ff49cbe076eb9e83ea0
2012-08-16 11:04:34 -07:00
Ronald S. Bultje
0393e558a4 Fix stack overrun in calculating segmentation map coding method.
This caused spurious crashes on encodes, frustratingly often only on
high-definition material.

Change-Id: Ia8c1dfc420d598ca92108bd9cc2df7450e8d10a2
2012-08-15 22:31:49 -07:00
Daniel Kang
26a55baed2 Fix build with TX_16X16
Change-Id: I1ccb2546e29803d0e9d69282409d549a28201967
2012-08-15 09:43:54 -07:00
Paul Wilkins
77dc5c65f2 Code clean up.
Further cases of inconsistent naming convention.

Change-Id: Id3411ecec6f01a4c889268a00f0c9fd5a92ea143
2012-08-15 11:00:53 +01:00
Christian Duvivier
73089031f0 Fix build.
Change-Id: I27729a8631cffd54dfbae3ec0f07df7c883f7510
2012-08-14 13:44:14 -07:00
Scott LaVarnway
d1b6fa4161 Added error checking to vp8cx_create_encoder_threads()
Added checks for pthread_create() errors.

Change-Id: Ie198ef5c14314fe252d2e02f7fe5bfacc7e16377
2012-08-14 12:00:23 -07:00
Daniel Kang
fd084b2489 Shut up warnings added by -Wundef
Change-Id: I9c7ef4a75c37aa0e10df75e165e3066614c955ef
2012-08-14 09:33:22 -07:00
Yaowu Xu
3fda7a665d Merge "Changed to use reference mv as nearest mv" into experimental 2012-08-14 09:12:31 -07:00
Yaowu Xu
e52e8b7025 Changed to use reference mv as nearest mv
The reference motion vector selected by surrounding pixels that has
the best matching score is used as nearest motion vector.

The change has shown consistent gain on all test sets, compression
gains range from .2% to .6%. The variation is largely dependent on
various other experiments on or off.

Change-Id: I5552e1c2f6fc57c3e8818a5ee41ffda89af05e75
2012-08-14 09:12:15 -07:00
Paul Wilkins
39892ccead Code clean up.
References to MACROBLOCKD that use "x" changed to "xd"
to comply with convention elsewhere that x = MACROBLOCK
and xd = MACROBLOCKD.

Simplify some repeat references using local variables.

Change-Id: I0ba2e79536add08140a6c8b19698fcf5077246bc
2012-08-14 11:32:29 +01:00
Daniel Kang
2f963917a6 Fix typo, which adds skip testing for 16x16
Also add warnings for undefined macros in the C pre-processor

Change-Id: I1ec30e57c5a49fb72151a4cf140d7eeb0fb1d779
2012-08-13 16:28:11 -07:00
Daniel Kang
d4762ce327 Shut up some compiler warnings on gcc
Change-Id: I8548aebd3c39797b253eef472bfe1c40f2f7ec59
2012-08-13 16:24:28 -07:00
Daniel Kang
fcb59ba084 Cosmetics to rdopt.c
Change-Id: Icc276609e409e4e234d240e5c12e137600e178ed
2012-08-13 09:55:49 -07:00
Daniel Kang
1b8169bb54 Combine optimize_b and optimize_b_8x8
The 16x16 has not been done yet for speed reasons.

Change-Id: I066e369a065674d58986e937344c9303fed19450
2012-08-13 09:55:30 -07:00