diff options
author | Jason Garrett-Glaser <darkshikari@gmail.com> | 2010-08-02 05:20:38 +0000 |
---|---|---|
committer | Jason Garrett-Glaser <darkshikari@gmail.com> | 2010-08-02 05:20:38 +0000 |
commit | 10bf2eebbe285ca7d8a2a28dda76f44f6f77efb7 (patch) | |
tree | 7b98799499f4bca7002f80823ae882722bbf12bc /libavcodec/vp8.c | |
parent | 9c87c037793c79bf52352516c211ab556c4bc93e (diff) | |
download | ffmpeg-10bf2eebbe285ca7d8a2a28dda76f44f6f77efb7.tar.gz |
VP8: simplify token_prob handling
~1.5% faster decode_block_coeffs
Originally committed as revision 24659 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/vp8.c')
-rw-r--r-- | libavcodec/vp8.c | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/libavcodec/vp8.c b/libavcodec/vp8.c index c82c36bca6..9af92d5717 100644 --- a/libavcodec/vp8.c +++ b/libavcodec/vp8.c @@ -810,13 +810,11 @@ static int decode_block_coeffs(VP56RangeCoder *c, DCTELEM block[16], uint8_t probs[8][3][NUM_DCT_TOKENS-1], int i, int zero_nhood, int16_t qmul[2]) { - uint8_t *token_prob; + uint8_t *token_prob = probs[vp8_coeff_band[i]][zero_nhood]; int nonzero = 0; int coeff; do { - token_prob = probs[vp8_coeff_band[i]][zero_nhood]; - if (!vp56_rac_get_prob_branchy(c, token_prob[0])) // DCT_EOB return nonzero; @@ -824,17 +822,14 @@ skip_eob: if (!vp56_rac_get_prob_branchy(c, token_prob[1])) { // DCT_0 if (++i == 16) return nonzero; // invalid input; blocks should end with EOB - zero_nhood = 0; token_prob = probs[vp8_coeff_band[i]][0]; goto skip_eob; } if (!vp56_rac_get_prob_branchy(c, token_prob[2])) { // DCT_1 coeff = 1; - zero_nhood = 1; + token_prob = probs[vp8_coeff_band[i+1]][1]; } else { - zero_nhood = 2; - if (!vp56_rac_get_prob_branchy(c, token_prob[3])) { // DCT 2,3,4 coeff = vp56_rac_get_prob(c, token_prob[4]); if (coeff) @@ -858,6 +853,7 @@ skip_eob: coeff += vp8_rac_get_coeff(c, vp8_dct_cat_prob[cat]); } } + token_prob = probs[vp8_coeff_band[i+1]][2]; } // todo: full [16] qmat? load into register? |