Mercurial > libavcodec.hg
changeset 12336:e84378ff89ca libavcodec
VP8: simplify token_prob handling
~1.5% faster decode_block_coeffs
author | darkshikari |
---|---|
date | Mon, 02 Aug 2010 05:20:38 +0000 |
parents | 3ce688a83319 |
children | aa0714243f88 |
files | vp8.c vp8data.h |
diffstat | 2 files changed, 6 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/vp8.c Sun Aug 01 23:20:06 2010 +0000 +++ b/vp8.c Mon Aug 02 05:20:38 2010 +0000 @@ -810,13 +810,11 @@ 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 @@ 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 @@ 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?
--- a/vp8data.h Sun Aug 01 23:20:06 2010 +0000 +++ b/vp8data.h Mon Aug 02 05:20:38 2010 +0000 @@ -314,9 +314,10 @@ { -2, -3 }, // '10', '11' }; -static const uint8_t vp8_coeff_band[16] = +/* Padded by one byte to allow overreads */ +static const uint8_t vp8_coeff_band[17] = { - 0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7 + 0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 0 }; static const uint8_t vp8_dct_cat1_prob[] = { 159, 0 };