]> granicus.if.org Git - libvpx/log
libvpx
12 years agoMerge "Reworked context conversion between 8x8 and 4x4" into experimental
Yaowu Xu [Wed, 22 Feb 2012 15:55:37 +0000 (15:55 +0000)]
Merge "Reworked context conversion between 8x8 and 4x4" into experimental

12 years agoCode base simplification.
Paul Wilkins [Fri, 17 Feb 2012 16:29:03 +0000 (16:29 +0000)]
Code base simplification.

Removal of most code to do with 1 pass.
Removal of cyclic refresh code.

Change-Id: I74971082bc19dd76e795d4d2e781a0424cec5c8c

12 years agoMerge "Code simplification" into experimental
Paul Wilkins [Fri, 17 Feb 2012 11:04:32 +0000 (11:04 +0000)]
Merge "Code simplification" into experimental

12 years agoReworked context conversion between 8x8 and 4x4
Yaowu Xu [Fri, 20 Jan 2012 23:30:31 +0000 (15:30 -0800)]
Reworked context conversion between 8x8 and 4x4

The commit rationized and simplified the entropy context conversion
betwen MB using 8x8 transform and MB using 4x4 transform. The old version
had a number of weirdness in how 4x4 transform MB's context is used for
8x8 blocks other than the first 8x8 within a MB.

Test showed the change has a gain ~.1% for avg psnr, glb psnr and ssim on
the limited HD set.

Change-Id: I774536c416baa6845aa741f956d8a69fa40e5d47

12 years agoRemoving a stray CONFIG_DUALPRED, and a INTERP_EXTEND fix.
Deb Mukherjee [Thu, 16 Feb 2012 18:40:39 +0000 (10:40 -0800)]
Removing a stray CONFIG_DUALPRED, and a INTERP_EXTEND fix.

Change-Id: I7549e424ca6846b07a796f2b9cd4e9d4e550ca9b

12 years agoCode simplification
Paul Wilkins [Thu, 16 Feb 2012 17:02:17 +0000 (17:02 +0000)]
Code simplification

Removal of the pickinter.c and .h files and calls to this
code.

Removal of some code relating to real time and one pass
settings  though there is more to be done in this regard.

However,  vp8_set_speed_features() now
only supports modes 0 and 1 and speeds up to 3
so rd should always be set.

Change-Id: I62c0c1b6154ab499785baef310536080e87bc4d8

12 years agoMerge "Adjusting 8-tap filter + prelim edge pixel filter code." into experimental
Deb Mukherjee [Thu, 16 Feb 2012 16:32:38 +0000 (16:32 +0000)]
Merge "Adjusting 8-tap filter + prelim edge pixel filter code." into experimental

12 years agorevised the rate distortion computation for UV
Yaowu Xu [Fri, 20 Jan 2012 23:30:31 +0000 (15:30 -0800)]
revised the rate distortion computation for UV

this commit changed the UV r/d calculation in the mode decision process to
properly account for the rate of 8x8 transform coefficients.

Change-Id: I485f8f35f2b61db0b6539beb32e83481b1cf083b

12 years agoMerge "revised the rate distortion computation for UV" into experimental
Yaowu Xu [Thu, 16 Feb 2012 15:34:38 +0000 (15:34 +0000)]
Merge "revised the rate distortion computation for UV" into experimental

12 years agoMerge "optmized rounding for transforms" into experimental
Yaowu Xu [Thu, 16 Feb 2012 15:33:01 +0000 (15:33 +0000)]
Merge "optmized rounding for transforms" into experimental

12 years agoMerge "re-scaled 2nd order haar transform" into experimental
Yaowu Xu [Thu, 16 Feb 2012 15:32:33 +0000 (15:32 +0000)]
Merge "re-scaled 2nd order haar transform" into experimental

12 years agoMerge "moved scaling from dequantization to inverse transform for T8x8" into experimental
Yaowu Xu [Thu, 16 Feb 2012 15:32:17 +0000 (15:32 +0000)]
Merge "moved scaling from dequantization to inverse transform for T8x8" into experimental

12 years agooptmized rounding for transforms
Yaowu Xu [Thu, 16 Feb 2012 01:35:48 +0000 (17:35 -0800)]
optmized rounding for transforms

the changes are still temporary, the final transforms, especially
inverse ones should take in account both accuracy, complexity, and
sign-bias, which should be decided at a later time.

Change-Id: I116b0c70b25f5ee324ae5713d4564f5d0aa27151

12 years agore-scaled 2nd order haar transform
Yaowu Xu [Wed, 15 Feb 2012 23:01:35 +0000 (15:01 -0800)]
re-scaled 2nd order haar transform

During the work of extend_qrange, we have rolled a factor of 2 from
quantization/dequatnization into 2nd order walsh-hadamard transform.
This commit does the same for the 2nd order haar transform. so they
can share the same quantizaiton process as the 2nd order WHT.

Change-Id: I734af4a20ea8149a01b5b1971a065092977dfe33

12 years agomoved scaling from dequantization to inverse transform for T8x8
Yaowu Xu [Tue, 14 Feb 2012 15:40:26 +0000 (07:40 -0800)]
moved scaling from dequantization to inverse transform for T8x8

Previously, the scaling related to extended quantize range happens in
dequantization stage, which implies the coefficients form forward
transform are in different scale(4x) from dequantization coefficients
This worked fine when there was not distortion computation done based
on 8x8 transform, but it completely wracked the distortion estimation
based on transform coefficients and dequantized transform coefficients
introduced in commit f64725a00 for macroblocks using 8x8 transform.
This commit fixed the issue by moving the scaling into the stage of
inverse 8x8 transform.

TODO: Test&Verify the transform/quantization pipeline accuracy.

Change-Id: Iff77b36a965c2a6b247e59b9c59df93eba5d60e2

12 years agoAdjusting 8-tap filter + prelim edge pixel filter code.
Deb Mukherjee [Mon, 13 Feb 2012 22:38:58 +0000 (14:38 -0800)]
Adjusting 8-tap filter + prelim edge pixel filter code.

Results with the new filter coefficients compared with the previous
versions are here:
http://www.corp.google.com/~debargha/vp8_results/enhinterp.html (derf)
http://www.corp.google.com/~debargha/vp8_results/enhinterp_hd.html (HD)
Overall, the derf set improves by 0.94% with 8-tap filters while
the HD set improves by 0.58%.

Patch 1: resolving merge conflict

Change-Id: I09db0abdab7b08bb19f86d911de23d2123309748

12 years agoRemove dual prediction frame re-encoding loop.
Ronald S. Bultje [Thu, 16 Feb 2012 00:38:04 +0000 (16:38 -0800)]
Remove dual prediction frame re-encoding loop.

I'm basically not convinced that the concept works at all, let alone
that this is the right place to do it. I think if we want something
like this at all, I should integrate it with the main encoding loop
and re-encode checks in onyx_if.c, and show that it has a significant
benefit (which right now, it doesn't; removing this re-encode check
actually increases all metrics by ~0.15%).

Change-Id: I1b597385dc17f468384a994484fb24813389411f

12 years agoFix overflows in dual prediction mode selection.
Ronald S. Bultje [Wed, 15 Feb 2012 16:30:36 +0000 (08:30 -0800)]
Fix overflows in dual prediction mode selection.

Change-Id: I265ad46e01a307bca21e6223725e4055f5e08648

12 years agoExperimental code base simplification.
Paul Wilkins [Tue, 14 Feb 2012 13:17:14 +0000 (13:17 +0000)]
Experimental code base simplification.

Remove error concealment code.

Change-Id: I882705174fbfea212e96f7f684e47a671dbe5c67

12 years agomoved segment based LPF level selection under CONFIG_FEATUREUPDATES
Yaowu Xu [Wed, 15 Feb 2012 01:52:18 +0000 (17:52 -0800)]
moved segment based LPF level selection under CONFIG_FEATUREUPDATES

This commit moved segment based loop filter level selection into
the experiment of CONFIG_FEATUREUPDATES. As previous commit noted,
the segment based loop filter selection helps the compression by
~0.1% on cif set, the ongoing experiment CONFIG_FEATUREUPDATES
made encoding updates of the segment based LPF level more efficient,
hence, another .04% gain on cif set. The commit also fixed an issue
previously where encoder/decoder may use different loop filter level
for one of the segments.

Change-Id: Ia978b14aae95bb107d561ba53a7a2bb6ff01faf3

12 years agoadded 8x8 based Rate estimation for dualpred case
Yaowu Xu [Mon, 13 Feb 2012 22:34:19 +0000 (14:34 -0800)]
added 8x8 based Rate estimation for dualpred case

This commmit added logic for MB using dual-pred to compute rate
estimation based on correct transform size. The section of code
was previously located under #if CONFIG_DUALPRED, that was made
to be working with T8x8 experiment at the same time.

Change-Id: Iebc2518c03f11378b9c2e72905520f088b54d5c0

12 years agoSimplification of experimental code base.
Paul Wilkins [Mon, 13 Feb 2012 17:05:26 +0000 (17:05 +0000)]
Simplification of experimental code base.

Removed ~CONFIG_REALTIME_ONLY code.

Change-Id: I5fafff29a08acd8928699f9ddce8744787024d8c

12 years agovp8 - config_featureupdates
Jim Bankoski [Mon, 13 Feb 2012 16:21:24 +0000 (08:21 -0800)]
vp8 - config_featureupdates

Added a bit to signify that the feature changed since
the last time we sent it, or not so that we don't need
to send all the databits for every feature change.

added config

Change-Id: I8d3064ce90d4500bf0d5c6b87c664e46138dfcac

12 years agoChanged how coefficient probability table is updated
Yaowu Xu [Mon, 6 Feb 2012 23:10:13 +0000 (15:10 -0800)]
Changed how coefficient probability table is updated

Added a frame level flag to indicate if coef probabilities are updated
at all for the frame.

During the experimental work with 8x8 transform, it is discovered that
even in the case of no probability is ever update, cost of transmitting
"no update" for each of probabilities can run up to become a significant
overhead cost. A single bit to indicate no-update for all coef probs
is therefore helpful, which is also demonstrated by the test results:

1. On Cif set:
http://www.corp.google.com/~yaowu/no_crawl/t8x8/cif_t8x8_updprob.html
(avg psnr: .14%, glb psnr: .14% SSIM: .13%)

2. On HD set:
http://www.corp.google.com/~yaowu/no_crawl/t8x8/HD_t8x8_updprob.html
(avg psnr: .02%  glb psnr: .01% SSIM: .02%)
It should be noted that the gain on HD is smaller because the average bit
rate is much higher in contrast to the overhead bit cost.

Change-Id: I46db270e693ee8799fef34a14d8260868ce4cd16

12 years agoFixed typo on #define name
Paul Wilkins [Mon, 13 Feb 2012 12:06:18 +0000 (12:06 +0000)]
Fixed typo on #define name

SE_LVL_EOB => SEG_LVL_EOB

Change-Id: I6d10169878a709bc9b82f03e5d5903c629fa7679

12 years agofixed an issue related to 2nd order size due to merge artifacts.
Yaowu Xu [Fri, 10 Feb 2012 19:49:22 +0000 (11:49 -0800)]
fixed an issue related to 2nd order size due to merge artifacts.

For 8x8 transformed macroblock, the 2nd order transform is a 2x2 haar
transform, here there is only 4 coefficients total. A previous merge
changed these to 64, causing crashes when encoding with 8x8 transform
enabled. (i.e. when input video image size > 640x360 ) This commit
reverts them back to 4 and fixes the crashes.

Change-Id: I3290b81f8c0d32c7efec03093a61ea57736c0550

12 years agoRemoval of threading code.
Paul Wilkins [Fri, 10 Feb 2012 16:02:10 +0000 (16:02 +0000)]
Removal of threading code.

For the experimental branch we are trying to slim the codebase
down removing features such as threading for now which complicate
the process of development and testing.

Change-Id: I657c0246aef4d1fa8c8ffc6a1adfeee45bce8e24

12 years agoImproved coding using 8x8 transform
Ronald S. Bultje [Fri, 10 Feb 2012 00:12:23 +0000 (16:12 -0800)]
Improved coding using 8x8 transform

In summary, this commit encompasses a series of changes in attempt to
improve the 8x8 transform based coding to help overall compression
quality, please refer to the detailed commit history below for what
are the rationale underly the series of changes:

a. A frame level flag to indicate if 8x8 transform is used at all.
b. 8x8 transform is not used for key frames and small image size.
c. On inter coded frame, macroblocks using modes B_PRED, SPLIT_MV
and I8X8_PRED are forced to using 4x4 transform based coding, the
rest uses 8x8 transform based coding.
d. Encoder and decoder has the same assumption on the relationship
between prediction modes and transform size, therefore no signaling
is encoded in bitstream.
e. Mode decision process now calculate the rate and distortion scores
using their respective transforms.

Overall test results:
1. HD set
http://www.corp.google.com/~yaowu/no_crawl/t8x8/HD_t8x8_20120206.html
(avg psnr: 3.09% glb psnr: 3.22%, ssim: 3.90%)
2. Cif set:
http://www.corp.google.com/~yaowu/no_crawl/t8x8/cif_t8x8_20120206.html
(avg psnr: -0.03%, glb psnr: -0.02%, ssim: -0.04%)
It should be noted here, as 8x8 transform coding itself is disabled
for cif size clips, the 0.03% loss is purely from the 1 bit/frame
flag overhead on if 8x8 transform is used or not for the frame.

---patch history for future reference---
Patch 1:
this commit tries to select transform size based on macroblock
prediction mode. If the size of a prediction mode is 16x16, then
the macroblock is forced to use 8x8 transform. If the prediction
mode is B_PRED, SPLITMV or I8X8_PRED, then the macroblock is forced
to use 4x4 transform. Tests on the following HD clips showed mixed
results: (all hd clips only used first 100 frames in the test)

http://www.corp.google.com/~yaowu/no_crawl/t8x8/hdmodebased8x8.html
http://www.corp.google.com/~yaowu/no_crawl/t8x8/hdmodebased8x8_log.html

while the results are mixed and overall negative, it is interesting to
see 8x8 helped a few of the clips.

Patch 2:
this patch tries to hard-wire selection of transform size based on
prediction modes without using segmentation to signal the transform size.
encoder and decoder both takes the same assumption that all macroblocks
use 8x8 transform except when prediciton mode is B_PRED, I8X8_PRED or
SPLITMV. Test results are as follows:

http://www.corp.google.com/~yaowu/no_crawl/t8x8/cifmodebase8x8_0125.html
http://www.corp.google.com/~yaowu/no_crawl/t8x8/hdmodebased8x8_0125log.html

Interestingly, by removing the overhead or coding the segmentation, the
results on this limited HD set have turn positive on average.

Patch 3:
this patch disabled the usage of 8x8 transform on key frames, and kept the
logic from patch 2 for inter frames only. test results on HD set turned
decidedly positive with 8x8 transform enabled on inter frame with 16x16
prediction modes: (avg psnr: .81% glb psnr: .82 ssim: .55%)

http://www.corp.google.com/~yaowu/no_crawl/t8x8/hdintermode8x8_0125.html
results on cif set still negative overall

Patch 4:
continued from last patch, but now in mode decision process, the rate and
distortion estimates are computed based on 8x8 transform results for MBs
with modes associated with 8x8 transform. This patch also fixed a problem
related to segment based eob coding when 8x8 transform is used. The patch
significantly improved the results on HD clips:

http://www.corp.google.com/~yaowu/no_crawl/t8x8/hd8x8RDintermode.html
(avg psnr: 2.70% glb psnr: 2.76% ssim: 3.34%)
results on cif also improved, though they are still negative compared to
baseline that uses 4x4 transform only:
http://www.corp.google.com/~yaowu/no_crawl/t8x8/cif8x8RDintermode.html
(avg psnr: -.78% glb psnr: -.86% ssim: -.19%)

Patch 5:
This patch does 3 things:
a. a bunch of decoder bug fixes, encodings and decodings were verified
to have matched recon buffer on a number of encodes on cif size mobile and
hd version of _pedestrian.
b. the patch further improved the rate distortion calculation of MBS that
use 8x8 transform. This provided some further gain on compression.
c. the patch also got the experimental work SEG_LVL_EOB to work with 8x8
transformed macroblock, test results indicates it improves the cif set
but hurt the HD set slightly.

Tests results on HD clips:
http://www.corp.google.com/~yaowu/no_crawl/t8x8/HD_t8x8_20120201.html
(avg psnr: 3.19% glb psnr: 3.30% ssim: 3.93%)

Test results on cif clips:
http://www.corp.google.com/~yaowu/no_crawl/t8x8/cif_t8x8_20120201.html
(avg psnr: -.47% glb psnr: -.51% ssim: +.28%)

Patch 6:
Added a frame level flag to indicate if 8x8 transform is allowed at all.
temporarily the decision is based on frame size, can be optimized later
one. This get the cif results to basically unchanged, with one bit per
frame overhead on both cif and hd clips.

Patch 8:
Rebase and Merge to head by PGW.
Fixed some suspect 4s that look like hey should be 64s in regard
to segmented EOB. Perhaps #defines would be bette.
Bulit and tested without T8x8 enabled and produces unchanged
output.

Patch 9:
Corrected misalligned code/decode of "txfm_mode" bit.
Limited testing for correct encode and decode with
T8x8 configured on derf clips.

Change-Id: I156e1405d25f81579d579dff8ab9af53944ec49c

12 years agoReindent some code after merging the dualpred experiment.
Ronald S. Bultje [Fri, 10 Feb 2012 00:12:23 +0000 (16:12 -0800)]
Reindent some code after merging the dualpred experiment.

Change-Id: Idb328dd29ebcd360e39886abe48694f90f2e1140

12 years agoMerge dualpred (compound prediction) experiment.
Ronald S. Bultje [Fri, 10 Feb 2012 00:11:00 +0000 (16:11 -0800)]
Merge dualpred (compound prediction) experiment.

Change-Id: Ieaaa07c50eae41118596197f6a4d848135946e41

12 years agoRemoval of SEGFEATURES placeholder comments
Paul Wilkins [Thu, 9 Feb 2012 17:06:52 +0000 (17:06 +0000)]
Removal of SEGFEATURES placeholder comments

This commit only involves the removal of placeholder comments
//#if CONFIG_SEGFEATURES.

Change-Id: I94b350daaf998ee0cfdde5aa25b1d3b0522ab816

12 years agoMerge Extended Q experiment.
Paul Wilkins [Thu, 9 Feb 2012 16:44:46 +0000 (16:44 +0000)]
Merge Extended Q experiment.

Merge the extended Q experiment as indicated by the

Change-Id: I02d9e654fff9998cc7e9e2f1f5cd838dad8fb431

12 years agoMerge COMPRED
Paul Wilkins [Thu, 9 Feb 2012 16:10:46 +0000 (16:10 +0000)]
Merge COMPRED

Merged in most of the current common prediction changes
that were under the #if CONFIG_COMPRED option.

Change-Id: If4e6f61dbe7b86dd449f6effbe93b5eb7e893885

12 years agoDual pred flag
Paul Wilkins [Thu, 9 Feb 2012 15:44:18 +0000 (15:44 +0000)]
Dual pred flag

Further changes to make experiments with the context
used for coding the dual pred flag easier.

Current best performing method tested on derf is a two
element context based on reference frame. I also tried
various combinations of mode and reference frame as
shown in commented out case using up to 6 contexts.

Derf +0.26 overall psnr +0.15% ssim vs original method.

Change-Id: I64c21ddec0abbb27feaaeaa1da2e9f164ebaca03

12 years agoChanges to coding of dual_pred flag.
Paul Wilkins [Wed, 8 Feb 2012 15:52:07 +0000 (15:52 +0000)]
Changes to coding of dual_pred flag.

Further use of common prediction functions and experiments
with alternate contexts based on mode and reference frame.

For the Derf set using reference frame as basis of context
gives +0.18% Overall Psnr and +0.08 SSIM

Change-Id: Ie7eb76f329f74c9c698614f01ece31de0b6bfc9e

12 years agoFix dual prediction recode loop.
Ronald S. Bultje [Wed, 8 Feb 2012 22:55:46 +0000 (14:55 -0800)]
Fix dual prediction recode loop.

We should only change the dual prediction mode if we actually entered
the recode branch. Else, it may potentially undo beneficial changes
to the dual prediction mode in the first encode iteration.

Change-Id: I79fc53e5fd0bb551092ed422c797619f1566f002

12 years agoRemove write-only variable "mbs_dual_count".
Ronald S. Bultje [Wed, 8 Feb 2012 22:18:02 +0000 (14:18 -0800)]
Remove write-only variable "mbs_dual_count".

Change-Id: Icf7a6749ca2f8ad6a032f86c34540d1c5880cf68

12 years agoFix dual prediction recode loop.
Ronald S. Bultje [Wed, 8 Feb 2012 01:48:47 +0000 (17:48 -0800)]
Fix dual prediction recode loop.

Some conditions were conditional under a threshold, whereas they should
always execute. Also, some conditions were testing an array instead of
the values within it.

Change-Id: Ia6892945cfbbe07322e6af6be42cd864bf9479c1

12 years agoMove update of ref frame probabilities in encode loop.
Paul Wilkins [Fri, 3 Feb 2012 17:08:37 +0000 (17:08 +0000)]
Move update of ref frame probabilities in encode loop.

The existing code updated the reference frame probabilities before
the test to evaluate the impact of using updated probabilities
in vp8_estimate_entropy_savings().

The estimate of cost and savings is still basic and does not reflect
the new prediction code but this would require per MB costings
and the benefit is probably marginal, as this is really just used for
rate estimation in the loop.

Change-Id: Id6ba88ae6e11c273b3159deff70980363ccd8ea1

12 years agoMerged NEWNEAR experiment
Paul Wilkins [Fri, 3 Feb 2012 15:10:44 +0000 (15:10 +0000)]
Merged NEWNEAR experiment

This commit merges the NEWNEAR experiment such that it
is effectively always on.

The fact that there were changes in the threading code again
highlights the need to strip out such features during the
bitstream development phase as trying to maintain this code
(especially as it is not being tested) slows the development cycle.

Change-Id: I8b34950a1333231ced9928aa11cd6d6459984b65

12 years agoCoding the hybrid dual prediction signal.
Paul Wilkins [Thu, 2 Feb 2012 17:30:27 +0000 (17:30 +0000)]
Coding the hybrid dual prediction signal.

Initial modifications to make limited use of common prediction
functions.

The only functional change thus far is that updates to the probabilities are
no longer "damped". This was a testing convenience but in fact seems to
help by a little over 0.1% over the derf set.

Change-Id: I8b82907d9d6b6a4a075728b60b31ce93392a5f2e

12 years agoMoved prob_dualpred to common.
Paul Wilkins [Thu, 2 Feb 2012 14:33:34 +0000 (14:33 +0000)]
Moved prob_dualpred to common.

Moved the prob_dualpred[] sturcture to common.
Created common prediction entry for Dual flag.

Change-Id: I9ac3d128bae6114f09e5c18216d4b95cf36453d5

12 years agoModified prediction behavior for reference frame.
Paul Wilkins [Fri, 3 Feb 2012 13:46:18 +0000 (13:46 +0000)]
Modified prediction behavior for reference frame.

Trial of a modified prediction function that ranks each possible
reference frame based on a combination of local usage and
frame level probability. The code is a bit cleaner and simpler.

In direct comparison with old unpredicted method with segment level
coding turned off for mode,ref & EOB the prediction gives a gain on derf
of around 0.4%. There is some further gain from bug fixes over earlier code.

With segment coding on the prediction method is slightly -ve on some very
easy clips (at low rates) due to slightly higher overheads, but better on harder
clips. Overall neutral on derf in direct comparison on latest code base, but
compared to earlier code without bug fixes about +0.7% overall psnr
+0.3% SSIM.

Change-Id: I5b8474658b208134d352d24f6517f25795490789

12 years agoReference frame prediction:
Paul Wilkins [Tue, 31 Jan 2012 12:45:30 +0000 (12:45 +0000)]
Reference frame prediction:

Extended prediction and coding of reference frame where
a subset of options are flagged as available at the segment level.

Updated copyright notices.

Switch to SAD in mbgraph code as SATD problematic for the
foreground and background separation as it can ignore large DC shifts.

Change-Id: I661dbbb2f94f3ec0f96bb928c1655e5e415a7de1

12 years agoAdded encoding in Superblock Order
Adrian Grange [Thu, 2 Feb 2012 17:04:40 +0000 (09:04 -0800)]
Added encoding in Superblock Order

As a precursor to encoding 32x32 blocks this cl adds the
ability to encode the frame superblock (=32x32 block) at
a time. Within a SB the 4 indiviual MBs are encoded in
raster-order (NW,NE,SW,SE).

This functionality is added as an experiment which can be
enabled by ispecifying --enable-superblocks in the
command line specified to configure (CONFIG_SUPERBLOCKS
macro in the code).

To make this work I had to disable the two intra
prediction modes that use data from the top-right of the
MB.

On the tests that I have run the results produce
almost exactly the same PSNRs & SSIMs with a very
slightly higher average data rate (and slightly higher
data rate than just disabling the two intra modes in
the original code).

NOTE: This will also break the multi-threaded code.

This replaces the abandoned change:
Iebebe0d1a50ce8c15c79862c537b765a2f67e162

Change-Id: I1bc1a00f236abc1a373c7210d756e25f970fcad8

12 years agoComment out segref segmentation filter changes.
Paul Wilkins [Tue, 31 Jan 2012 13:09:49 +0000 (13:09 +0000)]
Comment out segref segmentation filter changes.

Commented out changes from earlier checking:

"Change Iab7f1eff: vpnext use segref segmentation filter"

Which in its current state breaks the decoder.

Change-Id: I9185098aeda8ce65310f338c4c9375f4a39005d3

12 years agoFixes a decoder bug
Yaowu Xu [Wed, 1 Feb 2012 22:49:10 +0000 (14:49 -0800)]
Fixes a decoder bug

The bug was introduced by the commit that added I8X8 intra prediction
mode for inter frames, the decoder was not update to accept the additional
probability update from encoder. This causes the decoder typicall to crash
when encoder sends intra mode probability update.

Change-Id: Ib7dc42dc77a51178aa9ece41e081829818a25016

12 years agoImport another decoder bug fix from public stable branch
Author: John Koleszar [Wed, 1 Feb 2012 22:40:15 +0000 (14:40 -0800)]
Import another decoder bug fix from public stable branch

Please see the following for details:
https://gerrit.chromium.org/gerrit/#change,10925

Change-Id: Ie692261c255c58d7762df22eeca566a7d13adcba

12 years agoImport a decoder bug fix from public stable branch
Scott LaVarnway [Wed, 1 Feb 2012 22:27:50 +0000 (14:27 -0800)]
Import a decoder bug fix from public stable branch

Please see the following public commit for details:
https://gerrit.chromium.org/gerrit/#change,7608

Change-Id: I589eed0b6078e2c5c9c74e942886e503bd02b273

12 years agoCorrectly capped minqtarget to maxq
Adrian Grange [Tue, 31 Jan 2012 20:58:34 +0000 (12:58 -0800)]
Correctly capped minqtarget to maxq

This line of code incorrectly set maxq = maxq rather than
capping minqtarget.

Change-Id: Ifbc86df8b0ff2779e7b2a5f7349724d04a18bd62

12 years agoMerge "Refining the 8-tap interpolation filters." into experimental
Deb Mukherjee [Tue, 31 Jan 2012 16:40:41 +0000 (16:40 +0000)]
Merge "Refining the 8-tap interpolation filters." into experimental

12 years agoImplementation of new prediction model for reference frame coding.
Paul Wilkins [Sat, 28 Jan 2012 12:20:14 +0000 (12:20 +0000)]
Implementation of new prediction model for reference frame coding.

This check in uses the common prediction interface functions
to code reference frame.

Some updates made regarding the impact of the new code in rd loop
but there remain TODOs in this regard.

Change-Id: I9da3ed5dfdaa489e0903ab33258b0767a585567f

12 years agoUse common prediction interface for segment coding.
Paul Wilkins [Sat, 28 Jan 2012 10:24:43 +0000 (10:24 +0000)]
Use common prediction interface for segment coding.

This does not change any functionality just modifies the code to
use the common prediction module interface for coding
the segment data.

Change-Id: Ifd43e9153573365619774a4f5572215e44fb5aa3

12 years agoAdded common prediction modules.
Paul Wilkins [Sat, 28 Jan 2012 10:07:08 +0000 (10:07 +0000)]
Added common prediction modules.

This function adds the common prediction modules,  some data structures
and a config option but does not use them.

It also corrects a bug in clearing down  the MODE_INFO border and introduces
a new element that indicates if an entry corresponds to an "in image" macro block
or is part of the border.

Change-Id: Ib69eec0876173ebe9d1de9df9537d0b2447702e0

12 years agoMoved some reference frame data structures into common.
Paul Wilkins [Sat, 28 Jan 2012 08:50:33 +0000 (08:50 +0000)]
Moved some reference frame data structures into common.

Encoder side changes

Change-Id: I8921800e4fccec5e5a9e4755b80cbd472623107b

12 years agoMoved some reference frame data structures into common.
Paul Wilkins [Fri, 27 Jan 2012 18:35:14 +0000 (18:35 +0000)]
Moved some reference frame data structures into common.

In this commit only the decoder side was updated.

Change-Id: Ia9bd58da07d1a943f028e330f0489344e62b0d02

12 years agoMoved some segmentation data structures.
Paul Wilkins [Fri, 27 Jan 2012 18:29:07 +0000 (18:29 +0000)]
Moved some segmentation data structures.

Moved some segmentation data structures into VP8_COMMON

Change-Id: I59c6e2edf7a0176e35319936eea450027aeb3b39

12 years agoRefining the 8-tap interpolation filters.
Deb Mukherjee [Mon, 30 Jan 2012 17:27:44 +0000 (09:27 -0800)]
Refining the 8-tap interpolation filters.

Fixes a rounding issue with the 8-tap filters, which allows us to
use sharper filters that before with a little better performance.
Results on derf (0verall gain 0.76):
http://www.corp.google.com/~debargha/vp8_results/enhinterp.html
Results on a 720P set (Overall gain 0.61):
http://www.corp.google.com/~debargha/vp8_results/enhinterp_hd.html

Change-Id: I4cd7bdf3583db974dc5589fa64857bc31ac861fa

12 years agovpnext use segref segmentation filter
Jim Bankoski [Thu, 26 Jan 2012 18:04:34 +0000 (10:04 -0800)]
vpnext use segref segmentation filter

Goes through set of ref frames used by each macroblock and
sets seg_lvl_ref_frame flags accordingly..

http://www.corp.google.com/~jimbankoski/no_crawl/segref.html

Change-Id: Iab7f1effd75a839b34eb310d7168692c8f105411

12 years agovpnext: pick loop filter segment by segment
Jim Bankoski [Thu, 26 Jan 2012 01:06:42 +0000 (17:06 -0800)]
vpnext: pick loop filter segment by segment

Picks a per segment loopfilter.  Adapts the algorithm to search for
a loopfilter value for each separate segment.  Further todo fix the
bias

Improvements .06 % ov psnr, .11% ssim
http://www.corp.google.com/~jimbankoski/no_crawl/segmentedpicklpf.html

Change-Id: Ic6a571c16fcd6ec0139f4de1f8061f87c6515a10

12 years agoMerge "fixed an issue with 8x8 token cost in trellisquant" into experimental
Yaowu Xu [Fri, 27 Jan 2012 15:11:18 +0000 (15:11 +0000)]
Merge "fixed an issue with 8x8 token cost in trellisquant" into experimental

12 years agofixed an issue with 8x8 token cost in trellisquant
Yaowu Xu [Thu, 26 Jan 2012 22:36:20 +0000 (14:36 -0800)]
fixed an issue with 8x8 token cost in trellisquant

changed the token cost for 8x8 transformed macroblock used in trellisquant
from those derived from 4x4 transform coefficient distribution to those
derived from 8x8 transform coefficient distribution. Test results show
this fix help 8x8 transform based compression consistently on cif and hd
sets:

http://www.corp.google.com/~yaowu/no_crawl/t8x8/cif_cost8x8only.html
(avg psnr:.14% glb psnr: .17% ssim: .20%)
http://www.corp.google.com/~yaowu/no_crawl/t8x8/hd_cost8x8only.html
(avg psnr:.17% glb psnr: .18% ssim: .58%)

Note: To test the effect of this change, 8x8 transform was forced to be used
only on 16x16 predicted macroblocks on inter frames, the effect would be
bigger had all macroblocks been forcd to use 8x8 transform.

Change-Id: If9b7868b75357c66541f511e5ee78e4d2d4929a4

12 years agoAdds support for enhanced interpolation for subpel motion
Deb Mukherjee [Mon, 16 Jan 2012 19:21:12 +0000 (11:21 -0800)]
Adds support for enhanced interpolation for subpel motion
using an 8-tap filter.

The results with 3 different 8-tap filters on the derf set are in:
http://www.corp.google.com/~debargha/vp8_results/enhinterp.html
The one that gives the most gain achieves an overall gain of about
0.6%. The results for a set of 12 hd (720p) videos are in:
http://www.corp.google.com/~debargha/vp8_results/enhinterp_hd.html
with max gain of 0.55% with the same filter. The best filter apparently
achieves the best trade-off between pass band ripple and stop band
attenuation.

Change-Id: I919e28ae245c0493147fa0864f8c9d048a9dd530

12 years agoMerge "changed loop filter for MBs using 8x8 transform" into experimental
Yaowu Xu [Tue, 24 Jan 2012 21:45:16 +0000 (21:45 +0000)]
Merge "changed loop filter for MBs using 8x8 transform" into experimental

12 years agovpn common -> implicit segmentation
Jim Bankoski [Mon, 23 Jan 2012 17:55:23 +0000 (09:55 -0800)]
vpn common -> implicit segmentation

This introduces base functions for introducing implicit segmentation.
The code that actually stores the results to the segment map isn't
here yet.   This just prints out the segmentation map results
if you call it.

Uses connected component labeling technique on mbmi info so that only
if 2 mbs are horizontally or vertically touching do they get the same
segment.

vp8next - plumbing for rotation

code to produce taps for rotation ( tapify. py ),  code
for predicting using rotation ( predict_rotated.c ) ,  code
for finding the best rotation find_rotation.c.

didn't checkin code that uses this in the codec.   still work
in progress.

Fixed copyright notice

Change-Id: I450c13cfa41ab2fcb699f3897760370b4935fdf8

12 years agochanged loop filter for MBs using 8x8 transform
Yaowu Xu [Wed, 30 Nov 2011 16:05:45 +0000 (08:05 -0800)]
changed loop filter for MBs using 8x8 transform

This commit added a set of loop filter functions for macroblocks
using 8x8 transform. First we turned off the regular loop filtering
on 4x4 block boundaries that do not exist in macroblocks using 8x8
transform. Second, we change to use the same loop filter(mask and
7 tap filter) that used for macroblock edge filtering.

Change-Id: I3a00460b7674ced116917d86812ffc32578c1d3a

12 years agoAdded code to prevent I8X8_PRED mode for MBs using 8x8 transform
Yaowu Xu [Fri, 20 Jan 2012 00:37:32 +0000 (16:37 -0800)]
Added code to prevent I8X8_PRED mode for MBs using 8x8 transform

This fixed a conflict introduced by the change of adding 8x8 intra
prediction modes. The 8x8 intra prediction mode code assumed the
use of 4x4 transform, and causes encoder crashes when the codec is
configured with --enable-t8x8.

Change-Id: I00cc94df63e9725377ffba9eb51be6b77fe3fcf9

12 years agoreverted an accidental code deleting
Yaowu Xu [Fri, 20 Jan 2012 00:56:46 +0000 (16:56 -0800)]
reverted an accidental code deleting

commit cf561bad accidentally deleted a line of code that sets the
base_qindex for each frame, which leads to every frame is encoded
at Q of 0.

Change-Id: Ib5f8022e856bf3b3bd0d4147405e46241e3dcf2d

12 years agoMerge "new loop filter functions for macroblock boundaries" into experimental
Yaowu Xu [Wed, 18 Jan 2012 17:54:19 +0000 (17:54 +0000)]
Merge "new loop filter functions for macroblock boundaries" into experimental

12 years agonew loop filter functions for macroblock boundaries
Yaowu Xu [Fri, 13 Jan 2012 22:37:17 +0000 (14:37 -0800)]
new loop filter functions for macroblock boundaries

The commit adds a new set of loop filter for macroblock edge filtering.
The new loop filter has a mask to detect so-called "flat" regions. The
detection checks 5 pixels of each side of an edge. If the all pixels
have value with +/-1 from the edge pixel on the same side, the region
is treated as a "flat" region. For such case, a 7 tap filter is used
to change 3 pixel values on each side. The 7 taps are:
               [1, 1, 1, 2, 1, 1, 1]/8
The furthest away pixels used as input are +/-5 away from edge. For
non-flat region, we fall back to old filtering. It should be noted
here that the thresholds and filter taps may require more optimization
for best possible results.

Tests on a set of hd clips showed consistent gains:
http://www.corp.google.com/~yaowu/no_crawl/mblpf_hd.html
(avg psnr: .83% glb psnr: .77% ssim: .82%)

Tests on derf set also showed consistent gains:
http://www.corp.google.com/~yaowu/no_crawl/mblpf_derf.html
(avg psnr: .24% glb psnr: .22% ssim: .48%)

Change-Id: I0855b1ff48e79e1175c20b81967137e18b2af352

12 years agoPossible divide by 0 error.
Paul Wilkins [Wed, 18 Jan 2012 11:10:51 +0000 (11:10 +0000)]
Possible divide by 0 error.

Put traps to prevent two possible divide by 0 errors.

Change-Id: Ia415b945244253dcdd12f54f1f157f9ca8c94d6b

12 years agoRate control on static scenes plus Y2dc delta Q fix.
Paul Wilkins [Wed, 11 Jan 2012 14:05:57 +0000 (14:05 +0000)]
Rate control on static scenes plus Y2dc delta Q fix.

A problem can arise on static clips with force key frames where
attempts to avoid popping lead to a progressive reduction in key
frame Q that ultimately may lead to unexpected overspend against
the  rate target.

The changes in this patch help to insure that in such clips the
quality of the key frames across the clip is more uniform (rather
than starting bad and getting better - especially at low target rates).

This patch also includes a fix that removes a delta on the Y2DC
when the baseline q index < 4 as this is no longer needed.

There is also a fix to try and prevent repeat single step Q adjustment in
the recode loop leading to lots of recodes, especially where the use
of forced skips as part of segmentation has made the impact of Q on
the number of bits generated much smaller.

Patch 2: Amend "last_boosted_qindex" calculation for arf overlay frames.

Change-Id: Ia1feeb79ed8ed014e4239994fcf5e58e68fd9459

12 years agoMerge "Added an emms to prevent invalid stats output" into experimental
Yaowu Xu [Wed, 11 Jan 2012 23:07:54 +0000 (23:07 +0000)]
Merge "Added an emms to prevent invalid stats output" into experimental

12 years agoAdded an emms to prevent invalid stats output
Yaowu Xu [Thu, 5 Jan 2012 19:22:06 +0000 (11:22 -0800)]
Added an emms to prevent invalid stats output

In certain hardware configuration, where mmx code is enabled and
other simd (sse2/sse3) disabled, lacking of this emms caused invalid
internal stats outputs.

Change-Id: I77c61cf6e0448d3f3b8c11781aa9e42f31d231c9

12 years agoFix more warnings.
Christian Duvivier [Thu, 22 Dec 2011 00:19:09 +0000 (16:19 -0800)]
Fix more warnings.

Change-Id: Ifadf65026a11bdb5d39840748613880bcfb364bb

12 years agoAdd script to test all builds.
Christian Duvivier [Fri, 23 Dec 2011 00:04:15 +0000 (16:04 -0800)]
Add script to test all builds.

Change-Id: I6bbed8bcb2dfa3458ffc59179dfba66c92e18125

12 years agoFix a couple of warnings.
Christian Duvivier [Wed, 21 Dec 2011 23:52:18 +0000 (15:52 -0800)]
Fix a couple of warnings.

12 years agochanged mode_context update strategy
Yaowu Xu [Wed, 21 Dec 2011 20:05:10 +0000 (12:05 -0800)]
changed mode_context update strategy

Previously, the mode context is always udpated based on stats of current
frame, when there is no count, 50% is used for both left and right branch.
However, it is observed that with such strategy, a small count or no count
at all can skew the probability distribution significantly. This commmit
changed the mode_context update strategy to prevent small counts from
skewing the probability distributions.

Tests on derf set showed a small gain:  .06% in psnr and .09% in ssim

Change-Id: Ic812e64ae5f70251c170b0717f7b7fa587055488

12 years agoMerge "Extended Q:" into experimental
Paul Wilkins [Tue, 20 Dec 2011 11:12:28 +0000 (11:12 +0000)]
Merge "Extended Q:" into experimental

12 years agoMerge "Extend to 256 Q steps." into experimental
Paul Wilkins [Tue, 20 Dec 2011 11:12:08 +0000 (11:12 +0000)]
Merge "Extend to 256 Q steps." into experimental

12 years agoMerge "QRange experiements." into experimental
Paul Wilkins [Tue, 20 Dec 2011 11:11:50 +0000 (11:11 +0000)]
Merge "QRange experiements." into experimental

12 years agoMerge "Further QIndex realted Fixes:" into experimental
Paul Wilkins [Tue, 20 Dec 2011 11:11:09 +0000 (11:11 +0000)]
Merge "Further QIndex realted Fixes:" into experimental

12 years agoExtended Q:
Paul Wilkins [Mon, 19 Dec 2011 09:25:24 +0000 (09:25 +0000)]
Extended Q:

Cleanup and switch to Q extended at low end too.

Change-Id: Ie22676bb9e961097d75dbd1d81745208b63e5f4b

12 years agoExtend to 256 Q steps.
Paul Wilkins [Fri, 16 Dec 2011 10:23:01 +0000 (10:23 +0000)]
Extend to 256 Q steps.

This commit extends the number of Q steps to 256 from 128.
The q_trans[] array has been altered to distribute available Q index values
(using the current 64 steps available as input parameters) evenly across the
available range. This is coupled with the fact that each Q step where possible
now equates to a fixed % change in the quantizer. This may want refinement
later especially in terms of the granularity at the high quality end but is a
reasonable starting point.

Change-Id: I2aaa6874fa10ce05c958dd182947ce39f6f1eecb

12 years agoQRange experiements.
Paul Wilkins [Thu, 15 Dec 2011 18:22:42 +0000 (18:22 +0000)]
QRange experiements.

High Q end extended a little.
Some clean up.

Slightly better on SSIM, Slightly worse on PSNR over derf set.

Change-Id: I3dceea8a39e11c26e1a389a40e40b86efc76d28c

12 years agoFurther QIndex realted Fixes:
Paul Wilkins [Mon, 12 Dec 2011 18:27:25 +0000 (18:27 +0000)]
Further QIndex realted Fixes:

Added code to support 256 index steps instead of 128 but disabled for now.
Replace hard wired table vp8cx_base_skip_false_prob[128]
Observed Qindex problem with setting minimum loop filter value.
(Experiment code using real Q in place but for now just returning 0. This has a big
beneficial effect on some clips, particularly waterfall which shows 5% ssim gain)

Change-Id: I2f7117de8adc1797164c106aa13effc900a1467e

12 years agoReset segment_id to 0 when segmentation is disabled
Adrian Grange [Fri, 16 Dec 2011 22:00:36 +0000 (14:00 -0800)]
Reset segment_id to 0 when segmentation is disabled

Whilst the encoder explicitly set the segment_id to 0
when segmentation is diabled, the decoder would allow
the segment_id to persist from the previous frame.

This fix attempts to make the decoder behave the same
as the encoder by explicitly setting the segment_id to
0 in this case.

Change-Id: I65c3a05247550edb10706eb5d54d306dfb792309

12 years agoFixed stride bug in segmentation code
Adrian Grange [Thu, 15 Dec 2011 20:27:38 +0000 (12:27 -0800)]
Fixed stride bug in segmentation code

mode_info_context is padded with an additional column of data, so
mode_info_stride should be used to move between rows rather than
mb_cols.

Change-Id: I598559a2cd9df1c486d64aaeccf76b76a7ecf21c

12 years agoFixed bug to use mode_info_stride rather than mb_cols
Adrian Grange [Thu, 15 Dec 2011 18:00:46 +0000 (10:00 -0800)]
Fixed bug to use mode_info_stride rather than mb_cols

Both encoder & decoder were using mb_cols to
offset from one row of MODE_INFO structures to the next
when they should have been using mode_info_stride.

Fixing this in both encoder and decoder gives around
a 3KB size saving and 0.025dB PSNR improvement on the one
720P clip I tried.

(Also removed "index" which was being updated but not used)

Change-Id: I413bea802b142886bfcf8d8aa7f5a2f0c524fd4b

12 years agoQINDEX_RANGE fixed tables.
Paul Wilkins [Mon, 12 Dec 2011 11:18:57 +0000 (11:18 +0000)]
QINDEX_RANGE fixed tables.

Removed a couple more fixed tables for the extended quantizer experiment
that depend on QINDEX_RANGE.

Change-Id: I2c15ffc7488c2a2b8d6504e2c4b6b2339799d117

12 years agoEnabled adaptive UV intra coding for inter frames
Yaowu Xu [Thu, 8 Dec 2011 19:43:09 +0000 (11:43 -0800)]
Enabled adaptive UV intra coding for inter frames

Previously, Y-adaptive UV intra coding only enabled on key frames in
UVINTRA experiment. This commit enabled the same coding for inter
frames, so the encoding of UV intra modes are consistent cross all
frame types. Tests on derf set showed a very small overall gain around
.04%:

http://www.corp.google.com/~yaowu/no_crawl/interUVintra.html

The gain looks to be reasonable given inta coded MBs is only a
small portion of MBs in inter frames.

Change-Id: Ic6fc261923f2c253f4a0c9f8bccf4797557b9e16

12 years agoMerge "Fix out of bounds read in update_mbgraph_frame_stats" into experimental
Adrian Grange [Fri, 9 Dec 2011 21:05:00 +0000 (21:05 +0000)]
Merge "Fix out of bounds read in update_mbgraph_frame_stats" into experimental

12 years agoFix out of bounds read in update_mbgraph_frame_stats
Adrian Grange [Fri, 9 Dec 2011 20:47:57 +0000 (12:47 -0800)]
Fix out of bounds read in update_mbgraph_frame_stats

update_mbgraph_frame_stats used xd->mode_info_context
before it had been setup, resulting in potentially
random accesses of uninitialized memory.

This fix allocates a local MODE_INFO structure to hold
the data generated in the function.

Change-Id: Ic9e75610008ce0e2d690e8e583c21582fee6fc45

12 years agoRevised coding using adaptive mode context to depend on frame type
Yaowu Xu [Thu, 8 Dec 2011 19:43:09 +0000 (11:43 -0800)]
Revised coding using adaptive mode context to depend on frame type

A previous commit 76feb965 made the vp8_mode_context adaptive on a frame
frame basis, this commit further made the coding context adaptive to two
frame types separately. Tests on derf set showed a further small gain on
all metrics: avg psnr 0.10%, glb psnr: 0.11%, ssim: 0.08%

http://www.corp.google.com/~yaowu/no_crawl/newNearMode_1209.html

Change-Id: I7b3e32ec8729de1903d14a3f1213f1624b78cdee

12 years agoExperiment with old Q range:
Paul Wilkins [Thu, 8 Dec 2011 14:46:27 +0000 (14:46 +0000)]
Experiment with old Q range:

Experiment with old Q range but new higher precision quantizer
and transform code.

Change-Id: Id1ff4cb433e5775d709d0133e2aec0322975c292

12 years agofixed a crash caused invalid Q choice
Yaowu Xu [Thu, 8 Dec 2011 04:08:31 +0000 (20:08 -0800)]
fixed a crash caused invalid Q choice

The commit fixed a problem by capping cpi->active_best_quality to be
smaller than cpi->worst_quality.  Also fixed a few line of code that
was misplaced.

Change-Id: Ie908264b72140c669122a0afde5d886619c33474

12 years agoRemoved #if CONFIG_MULCONTEXT
Yaowu Xu [Wed, 7 Dec 2011 21:55:58 +0000 (13:55 -0800)]
Removed #if CONFIG_MULCONTEXT

This commit removed the macro CONFIG_MULCONTEXT, which was used to
indicate the experiment code for using separate context for altref
and normal frames. This commit made the change fully merged in.

Change-Id: I525f927f68e2365d37b340ef23b836a136a4f70b

12 years agoRemoved #if CONFIG_I8X8
Yaowu Xu [Wed, 7 Dec 2011 21:03:57 +0000 (13:03 -0800)]
Removed #if CONFIG_I8X8

This commit removed the macro CONFIG_I8X8, which was used to indicate
the 8x8 intra prediction experiment, made the change fully merged in.

Change-Id: Iafa4443781ce6e83f5591c12ba615a0e92ce0ea0

12 years agomade vp8_mode_context adaptive
Yaowu Xu [Tue, 6 Dec 2011 20:03:42 +0000 (12:03 -0800)]
made vp8_mode_context adaptive

vp8_mode_contexts[] is an entropy table used to code inter mode
choices. It was a fixed constant table. This commit made the entropy
context adaptive. Tests on derf set showed very good consistent gains
on all metrics: avg psnr .47%, overall psnr .46% and ssim .40%.

http://www.corp.google.com/~yaowu/no_crawl/newModeContext.html

Change-Id: Ia62b14485c948e2b74586118619c5eb2068b43b2

12 years agofixed a crash when MODE_STATS is enabled
Yaowu Xu [Tue, 6 Dec 2011 15:37:39 +0000 (07:37 -0800)]
fixed a crash when MODE_STATS is enabled

The MODE_STATS macro was used to #ifdef around code for mode entropy
stats collection, this commit fixed a crash when MODE_STATS is on.
The commit also changed a number of array definitions to use defined
macros instead of hard-coded numbers.

Change-Id: I114592f53a1e44e31e455f5725f036ae6168735a