platform/upstream/libvpx.git
12 years agoAdded Prediction Filter to Mode Selection
Adrian Grange [Mon, 25 Jun 2012 23:23:58 +0000 (16:23 -0700)]
Added Prediction Filter to Mode Selection

Added the ability to optionally filter the prediction data
when inter modes are selected (excludes SPLITMV, for now).

The mode selection loop considers both the filtered and
non-filtered prediction data when choosing mode. The filter
can be turned on/off at the frame-level, or signaled for
each MB.

Change-Id: I1b783c71d95a361ab36c761b07e8a6b06bc36822

12 years agoContinued adaptive entropy coding
Deb Mukherjee [Wed, 20 Jun 2012 12:07:24 +0000 (05:07 -0700)]
Continued adaptive entropy coding

Incorporates mv_ref, mbsplit and second_mv into the adaptive
entropy framework. The mv_ref framework has been modified from
before.

Adds some clean-ups and fixes.

Results with the adaptive entropy experiment are currently up by
+1.93% on derf; +2.33% std-hd and +1.87% yt-hd.

Fixed a nasty intermittent bug.

Change-Id: I4b1ac9f9483b48432597595195bfec05f31d1e39

12 years agoSign-extend input argument so it can be used in pointer arithmetic.
Ronald S. Bultje [Mon, 25 Jun 2012 18:23:09 +0000 (11:23 -0700)]
Sign-extend input argument so it can be used in pointer arithmetic.

Change-Id: I6cbd4de96f9dcc783cef170bfd7652f6cbee36a2

12 years agoMerge "x86inc: add some more format identifiers for elf file format recognition....
Ronald S. Bultje [Wed, 20 Jun 2012 18:26:33 +0000 (18:26 +0000)]
Merge "x86inc: add some more format identifiers for elf file format recognition." into experimental

12 years agoMerge "Reset executable flags for configure." into experimental
Ronald S. Bultje [Wed, 20 Jun 2012 18:00:27 +0000 (18:00 +0000)]
Merge "Reset executable flags for configure." into experimental

12 years agox86inc: add some more format identifiers for elf file format recognition.
Ronald S. Bultje [Wed, 20 Jun 2012 16:48:54 +0000 (09:48 -0700)]
x86inc: add some more format identifiers for elf file format recognition.

Change-Id: I3582c64200eed3606a4b57a9f78624ec46041461

12 years agolibs.mk: add x86inc.asm to the CODEC_SRCS.
Ronald S. Bultje [Tue, 19 Jun 2012 22:34:49 +0000 (15:34 -0700)]
libs.mk: add x86inc.asm to the CODEC_SRCS.

Change-Id: I45ea0369ad489080c2505269855a46ca1d3624f7

12 years agoMerge "Add comments to intra prediction probability tables." into experimental
Ronald S. Bultje [Tue, 19 Jun 2012 15:43:41 +0000 (15:43 +0000)]
Merge "Add comments to intra prediction probability tables." into experimental

12 years agoFix a bunch of warnings.
Christian Duvivier [Fri, 15 Jun 2012 01:14:43 +0000 (18:14 -0700)]
Fix a bunch of warnings.

Change-Id: I883b4f63559c1cf66a25016e946b1b1ae98a20da

12 years agoReset executable flags for configure.
Ronald S. Bultje [Mon, 18 Jun 2012 21:21:30 +0000 (14:21 -0700)]
Reset executable flags for configure.

This was accidently disabled in 1fe85a35e0451434d183da71e4e85796d11ca868.

Change-Id: I09dbfecfe45b28dec75b27a627e3065f9c7dc8b2

12 years agox86inc: Move x86inc to the correct location.
Daniel Kang [Mon, 18 Jun 2012 19:45:34 +0000 (12:45 -0700)]
x86inc: Move x86inc to the correct location.

Change-Id: I6802731a4d15feef5ce62993dc505ded55c40f7e

12 years agoAdd comments to intra prediction probability tables.
Ronald S. Bultje [Mon, 18 Jun 2012 16:22:53 +0000 (09:22 -0700)]
Add comments to intra prediction probability tables.

Change-Id: Iec81423e8e6c50acd9e10f69bc99ad0e9058517d

12 years agox86inc.asm: fix symbol mangling and PIC handling on Win64/Mac64.
Ronald S. Bultje [Mon, 18 Jun 2012 19:34:51 +0000 (12:34 -0700)]
x86inc.asm: fix symbol mangling and PIC handling on Win64/Mac64.

Change-Id: I97aa175346683184f9430d880593b291a563e04f

12 years agoAdaptive entropy coding of coefficients, modes, mv.
Deb Mukherjee [Tue, 5 Jun 2012 22:25:07 +0000 (15:25 -0700)]
Adaptive entropy coding of coefficients, modes, mv.

This patch incorporates adaptive entropy coding of coefficient tokens,
and mode/mv information based on distributions encountered in a frame.
Specifically, there is an initial forward update to the probabilities
in the bitstream as before for coding the symbols in the frame, however
at the end of decoding each frame, the forward update to the
probabilities is reverted and instead the probabilities are updated
towards the actual distributions encountered within the frame.
The amount of update is weighted by the number of hits within each
context.

Results on derf/hd/std-hd are all up by 1.6%.

On derf, the most of the gains come from coefficients, however for the
hd and std-hd sets, the most of the gains come from the mode/mv
information updates.

Change-Id: I708c0e11fdacafee04940fe7ae159ba6844005fd

12 years agoMerge "Adds x86inc.asm and update idct/dequant mmx" into experimental
Daniel Kang [Fri, 15 Jun 2012 17:13:08 +0000 (17:13 +0000)]
Merge "Adds x86inc.asm and update idct/dequant mmx" into experimental

12 years agoAdds x86inc.asm and update idct/dequant mmx
Daniel Kang [Fri, 8 Jun 2012 00:25:54 +0000 (17:25 -0700)]
Adds x86inc.asm and update idct/dequant mmx

Updates idct/dequant mmx assembly to work with vpnext instead of vp8.

Also adds x86inc.asm

Change-Id: I6e147d5e89177ae449271e97e50d082eb11b078e

12 years agochanged to use a fixed number for update probabity
Yaowu Xu [Thu, 24 May 2012 19:02:12 +0000 (12:02 -0700)]
changed to use a fixed number for update probabity

This commit is to remove two arrays, which contain the probabilities
of how likely each probability in coef_probs table is updated. The
commit changed to use a fixed number "252".

Surprisedly, the overall impact on quality is close to zero, which
basically says the two big static arrays are not helpful at all.
derf: -0.016%, -0.020%
std-hd: 0.000%, -0.013%
yt: -0.022%, +0.007%
yt-hd: -0.038%, +0.034%

Change-Id: Ifee94d28a37dcab4f1d2b994bd5b07575be42b72

12 years agoAdded the ability to accumulate coef stats across encodings
Yaowu Xu [Tue, 8 May 2012 19:38:39 +0000 (12:38 -0700)]
Added the ability to accumulate coef stats across encodings

This commit added the ability to accumulate the coef stats across
different encodings using an intermediate binary stats files. The
accumulation happens only the binary stats file exists in current
directory. The encoder needs to be built with "ENTROPY_STATS" to
allow the output. The commit also fixed a few formating issues in
output stats file.

Change-Id: Ib1a41180aa554845cf51e4421a230b128a3a82b4

12 years agoMerge "Merge of further two pass rc clean up and adjustments." into experimental
Paul Wilkins [Tue, 12 Jun 2012 16:29:46 +0000 (16:29 +0000)]
Merge "Merge of further two pass rc clean up and adjustments." into experimental

12 years agoMerge "Key frame and GF sizing changes." into experimental
Paul Wilkins [Tue, 12 Jun 2012 16:19:13 +0000 (16:19 +0000)]
Merge "Key frame and GF sizing changes." into experimental

12 years agoMerge of further two pass rc clean up and adjustments.
Paul Wilkins [Wed, 30 May 2012 11:54:34 +0000 (12:54 +0100)]
Merge ... further two pass rc clean up and adjustments.

Changes to calculation of  sr_coded_error to include 0,0 case.

Experimental use of sr_coded_error in calculating correction factor
for estimating the allowable Q range.

Reinstated some code needed for calculating section_intra_rating.

Add flash detection in calculation of KF boost

Increased tolerance in testing candidate key frames (needed with
longer motion search as this tends to slightly increase inter %.

Zbin changes for 8x8.

Other minor adjustments, refactoring and bug fixes.

Reinstated some motion break out clauses in boost loop
as their removal hurt a few 50fps  clips badly in the std set.
It may be possible to remove them again later if a better way
can be found of preventing overly long gf intervals.

Change-Id: Iee686d0c31072828bb1ccd2bc63f5f1c7c548ea2

12 years agoKey frame and GF sizing changes.
Paul Wilkins [Thu, 7 Jun 2012 12:39:20 +0000 (13:39 +0100)]
Key frame and GF sizing changes.

Changes to the equations for kf and gf minQ and to
the boost calculations for kg and gf

Change-Id: I312031c910e6a575334f49075c32f49a8dfff239

12 years agoFixed bug where invalid pointer is dereferenced
Adrian Grange [Thu, 31 May 2012 16:51:54 +0000 (09:51 -0700)]
Fixed bug where invalid pointer is dereferenced

Variables m & mi were being dereferenced when they might
hold invalid values.

The fix is simply to move these dereferences to after the
point at which mb_row and mb_col are tested for validity.

Change-Id: Ib16561efa9792dc469759936189ea379d374ad20

12 years agoRate control fix.
Paul Wilkins [Wed, 30 May 2012 10:29:49 +0000 (11:29 +0100)]
Rate control fix.

This fix addresses some problems with very complex clips like
handling of flashes on clips like crew (which was made worse
by an earlier patch (derf and std-hd)).

Most clips a small effect but some between 1 & 2%

Derf +0.039, +0.211%
YT +0.042, +0.083%

Change-Id: I65fc7c13afc31482040068544dd65b8808f5cb4a

12 years agoMerge "fixed one more compiling issue with VC" into experimental
Paul Wilkins [Tue, 29 May 2012 10:06:49 +0000 (10:06 +0000)]
Merge "fixed one more compiling issue with VC" into experimental

12 years agoRemove "est_max_qcorrection_factor"
Paul Wilkins [Fri, 18 May 2012 13:46:16 +0000 (14:46 +0100)]
Remove "est_max_qcorrection_factor"

Removed the local scaling factor est_max_qcorrection_factor
and related code to simplify estimateq calculation (little effect
anyway)

Cap range of total correction factor.

Slight change to break out case to turn off arf.

Change-Id: I748187737ba93cfadf016f3dfdf8d2741934067f

12 years agofixed one more compiling issue with VC
Yaowu Xu [Sat, 26 May 2012 04:52:09 +0000 (21:52 -0700)]
fixed one more compiling issue with VC

One more compiling issue, only happened in Visual C under a specific
combination of experiments.

Change-Id: Iba0775dc0ea7342b556348a9cdf60a05a59e0241

12 years agofixed a number of compiling issues
Yaowu Xu [Fri, 25 May 2012 17:55:47 +0000 (10:55 -0700)]
fixed a number of compiling issues

the commit fixed a number of compiling issues when some epxeriments
are turned on at the same time.

Change-Id: Idb15b215e2d2a7d25f2707f99ef55a34e7301ce7

12 years agoMerge "Experimental change to two pass prediction decay calculation." into experimental
Paul Wilkins [Fri, 25 May 2012 09:15:27 +0000 (09:15 +0000)]
Merge "Experimental change to two pass prediction decay calculation." into experimental

12 years agochanged the way that default probs for 8x8 is set.
Yaowu Xu [Wed, 16 May 2012 19:07:46 +0000 (12:07 -0700)]
changed the way that default probs for 8x8 is set.

The commit changed how baseline 8x8 coefficient probabilities are
initialized, to be consistent with the initialization of baseline
4x4 coefficient probabilities.

The commit does not have any effect on compression.

Change-Id: Ifb3902b5dc0b0c2e6dc3aa5d4a6589d528e58355

12 years agoMerge "Further firstpass.c changes." into experimental
Paul Wilkins [Fri, 18 May 2012 15:43:58 +0000 (15:43 +0000)]
Merge "Further firstpass.c changes." into experimental

12 years agoExperimental change to two pass prediction decay calculation.
Paul Wilkins [Wed, 16 May 2012 13:49:30 +0000 (14:49 +0100)]
Experimental change to two pass prediction decay calculation.

Remove dependency on amount and speed of motion as this
may not behave well across different image sizes.

Tweak impact of % inter.

Add in experimental adjustment based on relative quality of an
older second reference frame.

Cap range of decay values allowed.

Some small + effect on derf but -ve on yt & hd at this stage.

Change-Id: I390d6f6ebe67a2eb0b834980d0d4650124980d3e

12 years agoMerge "Move / re-factor some of boost calculation code." into experimental
Paul Wilkins [Thu, 17 May 2012 08:37:30 +0000 (08:37 +0000)]
Merge "Move / re-factor  some of boost calculation code." into experimental

12 years agoRewrite reference frame costing in the RD loop.
Ronald S. Bultje [Tue, 15 May 2012 00:39:42 +0000 (17:39 -0700)]
Rewrite reference frame costing in the RD loop.

I now see I didn't write a very long description, so let's do it
here then. We took a pretty big quality hit (0.1-0.2%) from my
recent fix of the inversion of arguments to vp8_cost_bit() in the
RD reference frame costing. I looked into it and basically the
costing prevented us from switching reference frames. This is of
course silly, since each frame codes its own prob_intra_coded, so
using last frame cost indications as a limiting factor can never
be right.

Here, I've rewritten that code to estimate costings based partially
on statistics from progress on current frame encoding. Overall,
this gives us a ~0.2%-0.3% improvement over what we had previously
before my argument-inversion-fix, and thus about ~0.4% over current
git (on derf-set), and a little more (0.5-1.0%) on HD/STD-HD/YT.

Change-Id: I79ebd4ccec4d6edbf0e152d9590d103ba2747775

12 years agoFurther firstpass.c changes.
Paul Wilkins [Tue, 15 May 2012 17:01:44 +0000 (18:01 +0100)]
Further firstpass.c changes.

base the static image test off a measure of 0,0 motion
instead of the decay accumulator value.

Change "transition to still detection" to compare the
decay rate from successive frames.

Minor tweak to the arf extra boost given based on the
number of frames affected.

Removed unused variable mod_err_per_mb_accumulator.

Change-Id: Idd8360083ad409e45f133ce97dd2488259003e64

12 years agoAdds new Directional Intra prediction modes.
Deb Mukherjee [Mon, 14 May 2012 23:21:01 +0000 (16:21 -0700)]
Adds new Directional Intra prediction modes.

Adds 6 directional intra predictiom modes for 16x16 and 8x8 blocks.

Change-Id: I25eccc0836f28d8d74922e4e9231568a648b47d1

12 years agoMerge "Firstpass.c refactoring" into experimental
Paul Wilkins [Tue, 15 May 2012 15:04:48 +0000 (15:04 +0000)]
Merge "Firstpass.c refactoring" into experimental

12 years agoMerge "Two pass refactoring continued." into experimental
Paul Wilkins [Tue, 15 May 2012 15:04:14 +0000 (15:04 +0000)]
Merge "Two pass refactoring continued." into experimental

12 years agoMerge "Two pass rc refactoring." into experimental
Paul Wilkins [Tue, 15 May 2012 14:44:34 +0000 (14:44 +0000)]
Merge "Two pass rc refactoring." into experimental

12 years agoChanged to use integer 8x8 dct
Yaowu Xu [Wed, 9 May 2012 16:31:14 +0000 (09:31 -0700)]
Changed to use integer 8x8 dct

The commit added an integer version of 8x8 forward DCT, based on the
orginal forward DCT from VP6. The constants, roundings, and shifts
were adjusted to improve the accuracy. The latest patch has a very
similar accuracy in term of round trip error against the floating
point version.

It should be noted here that the purpose of the patch is to help
encoding speed and facilitate all other experiments. There will be
futher review in combination with inverse DCT before finalization.

configure with "--enable--int_8x8fdct" to use the integer version

Change-Id: I5a4f80507429f0e07cf02a13768ec81cbfddc5bc

12 years agoMove / re-factor some of boost calculation code.
Paul Wilkins [Tue, 15 May 2012 14:28:02 +0000 (15:28 +0100)]
Move / re-factor  some of boost calculation code.

Some marginal impact due to the fact that it makes use of
arf more likely / stable even in hard sections.

Change-Id: Ic72fda0f63eefc9433914b5d9cd374d515810129

12 years agoFirstpass.c refactoring
Paul Wilkins [Tue, 15 May 2012 13:58:13 +0000 (14:58 +0100)]
Firstpass.c refactoring

Removed unused function.

Added tentative code to take error score of an older frame
into account when calculating Q range. However, for now
it is disabled pending merging other changes and testing.

Change-Id: Ie89955e70319dac31b79e3b833e3352712a061ec

12 years agoMerge "First pass overhaul preparatory change." into experimental
Paul Wilkins [Tue, 15 May 2012 10:05:16 +0000 (10:05 +0000)]
Merge "First pass overhaul preparatory change." into experimental

12 years agoMerge "Reversible WHT pair" into experimental
Yaowu Xu [Mon, 14 May 2012 19:28:21 +0000 (19:28 +0000)]
Merge "Reversible WHT pair" into experimental

12 years agoMerge "Don't use compound prediction for golden frames based on alt-ref frames."...
Ronald S. Bultje [Mon, 14 May 2012 19:25:09 +0000 (19:25 +0000)]
Merge "Don't use compound prediction for golden frames based on alt-ref frames." into experimental

12 years agoTwo pass refactoring continued.
Paul Wilkins [Mon, 14 May 2012 14:13:26 +0000 (15:13 +0100)]
Two pass refactoring continued.

Remove testing of whether we estimate that it will be possible
to code an arf at a lower Q than the ambient Q.  This adds quite
a bit of extra code and complexity for marginal gain.

Factored out some code relating to ARNR selection to a separate
function as this is likely to be changed / simplified soon.

Change-Id: Ia1cf060405637ef5bbf7018355437be21d12375f

12 years agoTwo pass rc refactoring.
Paul Wilkins [Mon, 14 May 2012 13:54:54 +0000 (14:54 +0100)]
Two pass rc refactoring.

Removed odd *100 >> 4 factor from boost calculations. Not all the
calculations exactly match what was there before so there may be
some minor impact on results.

Some other minor tidying up in regard to coding conventions.

The specific values of factors and thresholds will likely change as
part of subsequent patches.

Change-Id: Id976321484ac02ba50294cf54fafbc17dda85686

12 years agoDon't use compound prediction for golden frames based on alt-ref frames.
Ronald S. Bultje [Sat, 12 May 2012 00:48:20 +0000 (17:48 -0700)]
Don't use compound prediction for golden frames based on alt-ref frames.

These frames can force reference frame (arf), mode (zeromv) and skip,
which means that if we use compound prediction (i.e. arf+last), we
might use a blend of a perfect (arf) and an imperfect (last) predictor,
leading to semi-garbage display and thus a huge drop in SSIM/PSNR (up
to 10dB for some frames I analyzed).

Gives a +0.2% gain on YT.

Change-Id: If1f2b7899ad165684af3808fd379295e82558cbb

12 years agoMerge "Improved index remapping for prob updates." into experimental
Deb Mukherjee [Fri, 11 May 2012 17:10:30 +0000 (17:10 +0000)]
Merge "Improved index remapping for prob updates." into experimental

12 years agoFirst pass overhaul preparatory change.
Paul Wilkins [Fri, 11 May 2012 17:07:33 +0000 (18:07 +0100)]
First pass overhaul preparatory change.

This is the first patch in a series of changes to the first
pass code. (Broken down for ease of testing/merging/review).

This patch introduces a new stats element "sr_coded_error".
This is the coded error recorded vs the second reference
frame (which is updated such that it lags by at least one frame).
No use is made of the new structure in this change so this patch
should have no material effect.

Removed some ifdefs and deprecated code (#if NEW_BOOST).
Removed twopass.gf_decay_rate (not used any more)

Change-Id: I1be672a73017f7c13fd50fb4f99236aa2ed30916

12 years agoFix configure issue with unit test add.
Jim Bankoski [Fri, 11 May 2012 15:08:12 +0000 (08:08 -0700)]
Fix configure issue with unit test add.

Change-Id: I960c6eb81f8d76c958e8af989700447f581a8812

12 years agoadd unit test support via google test
James Berry [Wed, 2 May 2012 21:25:58 +0000 (17:25 -0400)]
add unit test support via google test

adds unit testing via google test

Change-Id: I144b50a976d79251fc5135186a4e0a5051ed0e8c

12 years agoReversible WHT pair
Yaowu Xu [Thu, 10 May 2012 00:19:16 +0000 (17:19 -0700)]
Reversible WHT pair

This commit changed the forward and the inverse 4x4 Walsh Hadamard
transform to a new pair, where the inverse transform can pefectly
reconstuct the input to forward transform. It also does so without
changing the input and output value range. Even more, it does not
change the complexity of the transforms.

While it was not expected to improve the results of our current test,
it does improve std-hd set by 0.2% on all metrics. No change on derf.

Change-Id: Ie4f23ddd3a0f3c5fbe97fb58399f860031f99337

12 years agoImproved index remapping for prob updates.
Deb Mukherjee [Thu, 3 May 2012 09:22:26 +0000 (02:22 -0700)]
Improved index remapping for prob updates.

Also includes some clean ups and refactoring.

Rebased.

Change-Id: I268c97fe325b4881103fe19f41ae818569e7ccf7

12 years agoa number of fixes to entropy stats collection
Yaowu Xu [Wed, 2 May 2012 20:53:15 +0000 (13:53 -0700)]
a number of fixes to entropy stats collection

1. block types
There are only three types of blocks for 8x8 transformed MBs, i.e. Y
block with DC does not exist for 8x8 transformed MBs as all MB using
8x8 transform have 2nd order haar transform. This commit introduced
a new macro BLOCK_TYPES_8X8 to reflect such fact.

2. context counters
This commit also fixed the mixed of context_counters between 4x4 and
8x8 transformed MBs. The mixed use of the counters leads me to think
the existing the context probabilities were not properly generated
from 8x8 transformed MBs.

3. redundant collecting in recoding
The commit also corrected the code that accumulates entropy stats by
making sure stats only collected for final packing, not during the
recode loop

Change-Id: I029f09f8f60bd0c3240cc392ff5c6d05435e322c

12 years agoExpanding the coefficient encoding contexts
Deb Mukherjee [Wed, 21 Mar 2012 22:22:21 +0000 (15:22 -0700)]
Expanding the coefficient encoding contexts

This patch expands the set of prev contexts used for video coding
from 3 to 4.

There is a small improvement of the order of 0.08% for derf and
0.15% on the HD set. The tests were rerun after the various merges
last week. There are two columns in each test - the first are the
results with the mbskip change, and the second with expanded contexts
added on top of that.

Derf:
http://www.corp.google.com/~debargha/vp8_results/explibvpx_newentropy_expcontext.html

HD:
http://www.corp.google.com/~debargha/vp8_results/explibvpx_hd_newentropy_expcontext.html

Rebased.

Broke up 80 char lines.

Change-Id: I82d2e72d054e530cbf5ce9aa0e6d85c582965675

12 years agochagned the decoder band to match the encoder
Yaowu Xu [Wed, 2 May 2012 18:10:25 +0000 (11:10 -0700)]
chagned the decoder band to match the encoder

missed the decoder side in last commit

Change-Id: Ie97f35189e93f78783e3d8072a36eea768beed27

12 years agoslight adjustment to coef band definition
Yaowu Xu [Wed, 2 May 2012 02:54:19 +0000 (19:54 -0700)]
slight adjustment to coef band definition

This commit adjusted slightly the 4x4 coefficents band definition to
better classify coefficients with similar distributions and usages.
It helps derf set about .1%, it is alos slightly positive for std-hd
set, where 4x4 blocks are used less frequently.

The commit also removed a const array not in use.

Change-Id: I78d16905d4036641ec905b0c32c190c1def5b249

12 years agoAdded usage info on command line options
Yaowu Xu [Tue, 1 May 2012 19:25:56 +0000 (12:25 -0700)]
Added usage info on command line options

This commit added usage information that was missed in usage output.

Change-Id: If1a85bcc20131314f5d047c6db4e76a40d945e66

12 years agoFix inversion of probability and value in calls to vp8_cost_bit().
Ronald S. Bultje [Mon, 30 Apr 2012 23:32:12 +0000 (16:32 -0700)]
Fix inversion of probability and value in calls to vp8_cost_bit().

Change-Id: I9f1686249ac812f7b9b872eabe3970d1dfb25e56

12 years agoTurning off filter search for now to improve encode speed.
Deb Mukherjee [Mon, 30 Apr 2012 19:24:22 +0000 (12:24 -0700)]
Turning off filter search for now to improve encode speed.

Change-Id: I87291fb40c745f34c36b067f47abdf69774a812f

12 years agoMinor cleanup in tokenize.h
Deb Mukherjee [Mon, 30 Apr 2012 18:03:24 +0000 (11:03 -0700)]
Minor cleanup in tokenize.h

Removes a set of spurious declarations that were inadvertently checked
in.

Change-Id: I2f80b6b66d2ec9ea667c810eaf1a6e7d52478c67

12 years agoMerge "Removed MV costing from ARNR filtering" into experimental
Adrian Grange [Fri, 27 Apr 2012 22:09:57 +0000 (22:09 +0000)]
Merge "Removed MV costing from ARNR filtering" into experimental

12 years agoRemoved MV costing from ARNR filtering
Adrian Grange [Thu, 26 Apr 2012 17:37:52 +0000 (10:37 -0700)]
Removed MV costing from ARNR filtering

The ARNR filter uses a motion compensated temporal filter,
but the motion estimation implementation accounts for the
cost of the mv in its decision making process. The ARNR
filter uses a dummy cost table initialized to 0 as a way
to ignore the mv costs (which are irrelevant to the filter).

This CL modifies the ARNR filter implementation to so that
the mv costing is ignored without the requirement for
dummy tables.

Change-Id: I0dd9620c3b70682f938b2a70912c11d4d7c9284c

12 years agoAdds search option for best interpolation filter.
Deb Mukherjee [Mon, 16 Apr 2012 21:53:37 +0000 (14:53 -0700)]
Adds search option for best interpolation filter.

Adds a speed feature to conduct a brute force search among a set of
available interpolation filters for the best one in an RD sense.

There is a gain of 0.4% on derf, 1.0% on Std-HD.

Patch 2: A macro added to determine if the encoder state is reset
for each new filter tried.

Patch 3: rebase, also fixes a bug (decodframe.c) introduced by a
couple of missing function pointer assignements.

Patch 4: rebase.

Change-Id: Ic9ccca9d8c35c6af557449ae867391a2f996cc29

12 years agoMerge QIMODE experiment
Yaowu Xu [Wed, 25 Apr 2012 15:47:33 +0000 (08:47 -0700)]
Merge QIMODE experiment

This commit merge the QI mode experiment. As the experiment affects
the encoding of intra coding modes on key frame only, the overall
effect of the experiment on encoding tests is insignificant.

Change-Id: I9e4e3933adface88867ad429cee3986e529c511d

12 years agoMerge UVINTRA experiment
Yaowu Xu [Wed, 25 Apr 2012 15:33:30 +0000 (08:33 -0700)]
Merge UVINTRA experiment

The commit merges the UVINTRA experiment and removed the related
macros. The overall effect of the experiment is a small gain (.1%
on derf)

Change-Id: Ia34b3312fb9b5b34c9ba111bf0fa78c6f78ac80b

12 years agoMerge "Differential encoding of probability updates" into experimental
Deb Mukherjee [Tue, 24 Apr 2012 23:07:18 +0000 (23:07 +0000)]
Merge "Differential encoding of probability updates" into experimental

12 years agoRemove unused header files.
Ronald S. Bultje [Tue, 24 Apr 2012 18:07:27 +0000 (11:07 -0700)]
Remove unused header files.

Change-Id: I8708358bb37edabcbe5dfc755ed18791d9e143c4

12 years agoDifferential encoding of probability updates
Deb Mukherjee [Thu, 12 Apr 2012 16:24:03 +0000 (09:24 -0700)]
Differential encoding of probability updates

Adds differential encoding of prob updates using a subexponential
code centered around the previous probability value.
Also searches for the most cost-effective update, and breaks
up the coefficient updates into smaller groups.

Small gain on Derf: 0.2%

Change-Id: Ie0071e3dc113e3d0d7ab95b6442bb07a89970030

12 years agoHide some code behind CONFIG_COMP_INTRA_PRED.
Ronald S. Bultje [Fri, 20 Apr 2012 21:25:36 +0000 (14:25 -0700)]
Hide some code behind CONFIG_COMP_INTRA_PRED.

Change-Id: I7c0597dede20cc71145c053f76bd99aaf759d144

12 years agochange to allow 8x8 transform always
Yaowu Xu [Fri, 20 Apr 2012 16:14:26 +0000 (09:14 -0700)]
change to allow 8x8 transform always

This commit changed to enable the usage 8x8 transform for all frame
type, all resolution and all quantizer range. This has an overall
benefit .2% to .3% in term of compression, but more importantly,
the difficult clips benefits much more, up to 2% to 3% on clips
like football, harbour and so on.

We observed some weird humps on very high end on a couple of youtube
clips, but have determined the underly cause was the aggressive zbin
having an effect of lowering rate with lower quality, which have
an impact on slide show clips around 60DB.

The commit does not change the association between prediction mode
and transform size.

Change-Id: I33043bdce6207528ae00b4a4b26d8ff63cfea1f4

12 years agoadded reset of rate estimates for each mode
Yaowu Xu [Tue, 17 Apr 2012 22:14:45 +0000 (15:14 -0700)]
added reset of rate estimates for each mode

This is to prevent the evaluation of a mode from using values left
over from a mode evaluated prior in the loop.

Change-Id: Ife2c6ceb76d2f7365fd262515d3ae48229033c2d

12 years agoFix splitmv/compound prediction when eightpel is enabled.
Ronald S. Bultje [Thu, 19 Apr 2012 17:07:14 +0000 (10:07 -0700)]
Fix splitmv/compound prediction when eightpel is enabled.

Change-Id: I9d6083d54e3d478ec20dc6dc48d3f45eb5c7e16b

12 years agoCompound prediction for splitmv macroblocks.
Ronald S. Bultje [Wed, 18 Apr 2012 20:51:58 +0000 (13:51 -0700)]
Compound prediction for splitmv macroblocks.

Change-Id: I0af3395500b1cb0ed629249eb6636a0c9322cb18

12 years agoAdded update of mode context pointers in decoder
Adrian Grange [Wed, 18 Apr 2012 16:08:55 +0000 (09:08 -0700)]
Added update of mode context pointers in decoder

With the NEWENTROPY experiment enabled encoding certain clips
produced invlid bitstreams, or files that had a high degree
of artefacts.

This was the results of pointers in MACROBLOCKD not being
setup correctly (mode_info_context and prev_mode_info_context).

Change-Id: Ice13e1efa8bd122997d2f8f3f1e761c6c16e0403

12 years agoMerge "Added save coding context & modified MV bounds" into experimental
Adrian Grange [Wed, 18 Apr 2012 16:21:16 +0000 (16:21 +0000)]
Merge "Added save coding context & modified MV bounds" into experimental

12 years agoMerge "Added intra mode probabilites into coding_context" into experimental
Yaowu Xu [Tue, 17 Apr 2012 18:37:23 +0000 (18:37 +0000)]
Merge "Added intra mode probabilites into coding_context" into experimental

12 years agoAdded intra mode probabilites into coding_context
Yaowu Xu [Tue, 17 Apr 2012 16:26:19 +0000 (09:26 -0700)]
Added intra mode probabilites into coding_context

These contexts need to be saved and restored for recode, otherwise
encoder/decoder mismatch happens for some clips (eg._mobcal 720p)

Change-Id: Ic65cfa0bf56ed0472ecab962ce31394d59d344bf

12 years agoBug fix introduced from a recent refactoring of skip coding.
Deb Mukherjee [Mon, 16 Apr 2012 18:38:15 +0000 (11:38 -0700)]
Bug fix introduced from a recent refactoring of skip coding.

Change-Id: Iccd0f09a4db02a2bad644deb3c76189c5f5612a3

12 years agoAdded save coding context & modified MV bounds
Adrian Grange [Fri, 13 Apr 2012 17:26:49 +0000 (10:26 -0700)]
Added save coding context & modified MV bounds

Added code to save the coding context in vp8_rd_pick_inter_mode
when the coding mode is forced to ARF(0,0).

Also, modified the MV bounds computation to comply with the
change in MV border from 32 to 64 pixels.

Change-Id: I96963a6f5f4d04ce84c807ae11e0635177c3ad6c

12 years agoTurning off interpolation filter selection
Deb Mukherjee [Wed, 11 Apr 2012 21:32:20 +0000 (14:32 -0700)]
Turning off interpolation filter selection

Turning off the interpolation filter selection based on edge
proportion. This heuristics has not been working as well as
expected and I have started a more rigorous investigation into
this. We can turn this off for now since it is unnecessarily
slowing things down.

Rebase.

Change-Id: Ic5958b2b3a35ec2d8eb73b6d81617ca8fbe07e74

12 years agoa set of minor fixes
Yaowu Xu [Wed, 4 Apr 2012 14:24:10 +0000 (07:24 -0700)]
a set of minor fixes

This commit tries to address an issue related to the oddity shown on
HD _mobcal clip, where some rather ugly blocks shown in the second
frame at low-mid bit rates if the third frame is not made a key frame
by he encoder. The fixes include: 1)  made calls to sad_16x16 to be
consistent with function prototype. 2) remove the error bias to intra
and golden in mbgraph search. 3) changed the error accumulation on
inter_segment encoding to avoid potential out-of-range. 1) has no
effect on encoding results.

Encoding test show that the overall effect of the commit helps about
.2%(HD) to .3%(cif)

Change-Id: I930975a2d0c06252f01c39e0a02351529774e30b

12 years agoAdjust the key frame placement condition
Yaowu Xu [Wed, 4 Apr 2012 14:24:10 +0000 (07:24 -0700)]
Adjust the key frame placement condition

The commit removed a limit on key frame detection, which caused a big
drop in all metric measurements for standard HD clip such as _mobcal.

This single change helps two standard HD clips by a huge amount, which
help the overall std-hd set by 2.4% (glb psnr), 0.9% (avg_psnr), 2.1%
(vpxssim).

In the result page:
http://pafr9.prod.google.com:26163/?/cns/rc-d/home/on2-prod/sunkaras/borg-test/yaowu

2012_04_02_1649_yaowu_bugfix_std-hd
2012_04_03_1452_yaowu_hump_std-hd
represent the encoding test results and std-hd set prior and after this
commit respectively.

Change-Id: Ie4313e317c737ea0e699c3a7919c1376744baa1a

12 years agochanged function prototype for macro_block_yrd
Yaowu Xu [Tue, 3 Apr 2012 16:12:10 +0000 (09:12 -0700)]
changed function prototype for macro_block_yrd

This commit has made macro_block_yrd_8x8 and macro_block_yrd_8x8 to
take same parameters. It also removed a few unnecessary shifts that
has the potential to create out-of-range distortion values.

Change-Id: I4ec5afb307c3685c2a67a07c2850f0927d214455

12 years agoDelete unused function.
Paul Wilkins [Wed, 11 Apr 2012 16:14:46 +0000 (17:14 +0100)]
Delete unused function.

Deleted check_gf_quality().

Change-Id: If75fbd84accb1f6471ad6ea6ff2b65ae99976f5d

12 years agoRefactoring of encode loop and bitstream packing
Paul Wilkins [Wed, 11 Apr 2012 14:44:14 +0000 (15:44 +0100)]
Refactoring of encode loop and bitstream packing

Some code re-factored / moved to allow the main
pack operation inside the recode loop so  that the
size estimate is accurate.

Deletion of some redundant code relating to one pass.

Aproximate improvement over March 27 code base:
Derf 0.0%, YT 0.5%, YThd 0.3% Std_hd 0.25%

Change-Id: Id2d071794ab44f0b52935f6fcdb5733d09a6bb86

12 years agoChanges to costing of skip.
Paul Wilkins [Wed, 11 Apr 2012 13:37:48 +0000 (14:37 +0100)]
Changes to costing of skip.

Update the costing of skip in the recode loop and rd code.

Change-Id: I2e5ebbd7ddf201212b32441321e12626cd0423e9

12 years agoT8x8 zbin and rate control changes.
Paul Wilkins [Tue, 27 Mar 2012 12:01:34 +0000 (13:01 +0100)]
T8x8 zbin and rate control changes.

Some adjustments to zbin for t8x8.
Changes to rules for sizing forced key frames.
Some extra stats output in tmp.stt.

Approximate  gain on YT-hd set 0.5%

There are still issues in sizing key frames and gf/arf frames
when the image is largely static. These in part relate to
problems with cost estimates in the recode loop.

Change-Id: I6f0159dc8a8faeab4115a19c668d442491619a68

12 years agoSuperblock encoding order
Adrian Grange [Fri, 6 Apr 2012 23:38:34 +0000 (16:38 -0700)]
Superblock encoding order

This is the first patch to add superblock (32x32) coding
order capabilities. It does not yet do any mode selection
at the SB level, that will follow in a further patch.

This patch encodes rows of SBs rather than
MBs, each SB contains 2x2 MBs.

Two intra prediction modes have been disabled since they
require reconstructed data for the above-right MB which
may not have been encoded yet (e.g. for the bottom right
MB in each SB).

Results on the one test clip I have tried (720p GIPS clip)
suggest that it is somewhere around 0.2dB worse than the
baseline version, so there may be bugs.

It has been tested with no experiments enabled and with
the following 3 experiments enabled:
  --enable-enhanced_interp
  --enable-high_precision_mv
  --enable-sixteenth_subpel_uv
in each case the decode buffer matches the recon buffer
(using "cmp" to compare the dumped/decoded frames).
Note: Testing these experiments individually created
errors.

Some problems were found with other experiments but it
is unclear what state these experiments are in:
  --enable-comp_intra_pred
  --enable-newentropy
  --enable-uvintra

This code has not been extensively tested yet, so there
is every likelihood that further bugs remain. I also
intend to do some code cleanup & refactoring in tandem
with the next patch that adds the 32x32 modes.

Change-Id: I1eba7f740a70b3510df58db53464535ef881b4d9

12 years agoBug fix in probability update savings computation
Deb Mukherjee [Wed, 28 Mar 2012 22:19:45 +0000 (15:19 -0700)]
Bug fix in probability update savings computation

Found this bug while tracking down some anomalies in my experiments.
Since vp8_cost_one and vp8_cost_zero return unsigned int, the
bit shift by 8 will be incorrect if the value is negative.
I am cautiously optimistic that this fix will make the prob
updates more correct and somewhat improve results across the board.
But the update probabilities will need to be retuned I think.

Patch 2: Adding more of the same fixes using a macro.

Change-Id: I1a168f040e74e8c67e7225103b1c2af9a611da49

12 years agoOnly enable compound prediction if multiple reference frames are present.
Ronald S. Bultje [Thu, 22 Mar 2012 17:03:14 +0000 (10:03 -0700)]
Only enable compound prediction if multiple reference frames are present.

Change-Id: Ia52ac825400eb83ff663e3a05a3fe0b3526bac9a

12 years agoenable 8x8 transform for MBs in intra frames
Yaowu Xu [Mon, 19 Mar 2012 18:03:27 +0000 (11:03 -0700)]
enable 8x8 transform for MBs in intra frames

When ac_yquant>171, a key frame is enabled to use 8x8 transform. In
such case, MBs with DC_PRED or TM_PRED are selected to use T8x8. This
change helped the full STD-HD set by ~.1% or so, which is reasonable
considering how often key frame occurs in these encodings.

Change-Id: Id17009ef6327252177b19e6bf0d6628827febaf1

12 years agoOnly support improved quant
Paul Wilkins [Wed, 21 Mar 2012 18:22:33 +0000 (18:22 +0000)]
Only support improved quant

Deprecate fast quant and strict_quant code.
Small effect on quality as fast was used in first pass but the
effect is basically neutral across the derf set.

The rationale here is to reduce the number of code paths for
now to make experimentation easier. Optimized and fast code
options can be re-introduced later along with other  encode
speed options.

Change-Id: Ia30c5daf3dbc52e72c83b277a1d281e3c934cdad

12 years agoMerge Exact Quant
Paul Wilkins [Tue, 20 Mar 2012 14:20:36 +0000 (14:20 +0000)]
Merge Exact Quant

Change-Id: Id2412a7f24a7c1016ec9fc3b9b0fbd16871f374a

12 years agoMaking subpel filters switchable at frame level
Deb Mukherjee [Mon, 19 Mar 2012 14:53:05 +0000 (07:53 -0700)]
Making subpel filters switchable at frame level

Various refactoring to make the subpel motion compensation
filters switchable by a frame level field.
Two types of 8-tap filters are supported in addition to the existing
bilinar and sixtap filters. One is the default 8-tap and the
other has a sharper cut-off for use with frames with substantial
edge content.

Patch 2: Added a preliminary strategy for filter selection based on
edginess detecton. Also includes some filter changes.

Change-Id: I866085bda5ae143cfdf2ec88157feaabdf7bd63a

12 years agoAdding contextual coding of mb_skip_coeff flag.
Deb Mukherjee [Mon, 19 Mar 2012 18:02:04 +0000 (11:02 -0700)]
Adding contextual coding of mb_skip_coeff flag.

Using contextual coding of the mkb_skip_coeff flag using the
values of this flag from the left and above. There is a small
improvement of about 0.15% on Derf:
http://www.corp.google.com/~debargha/vp8_results/mbskipcontext.html

Refactored to use pred_common.c by adding a new context type.

Results on HD set (about 0.66% improvement):
http://www.corp.google.com/~debargha/vp8_results/mbskipcontext_hd.html

Incliding missing refactoring to use the pred_common utilities.

Change-Id: I95373382d429b5a59610d77f69a0fea2be628278

12 years agoadded clamp for 2nd motion vector
Yaowu Xu [Tue, 13 Mar 2012 17:26:53 +0000 (10:26 -0700)]
added clamp for 2nd motion vector

The commit added a clamp to the 2nd motion vector used in compound
prediction to insure mv within UMV borders. The clamp is similar to
that of the first motion vector except that No SPLITMV is ever used
for the 2nd motion vector.

Change-Id: I26dd63c304bd66b2e03a083749cc98c641667116

12 years agoAdded encode/decode recon buffer match test to vpxenc
Yaowu Xu [Wed, 7 Mar 2012 20:25:50 +0000 (12:25 -0800)]
Added encode/decode recon buffer match test to vpxenc

The commit added a new command line option --test-decode to vpxenc.
The option enables encoder to decode compressed frames and test recon
buffers from the decode against those from encode for mismatch.

There are a few limitations on this option currently, one of them
being the match test is not done on a number of lagged frames at
the end of an encoding.

Change-Id: I80c29b46dcdcea9f48107a506b235743068862fe

12 years agofixed a bug of context overwritten by key frame recoding
Yaowu Xu [Thu, 15 Mar 2012 00:29:39 +0000 (17:29 -0700)]
fixed a bug of context overwritten by key frame recoding

The recoding loop save and restore frame coding context for recodes.
However in recoding of key frames, some of the coding context saved
was stale from last encoded inter frame. The save/restore sometimes
overwrites the re-inintialized coding context with saved context
from last frame, resulting in encoder/decoder mismatch

Change-Id: I354ae2f71074d142602d51d06544c05a2462caaf