From b0d58795138c738c45c5b738418765939021b49f Mon Sep 17 00:00:00 2001 From: Jason Garrett-Glaser Date: Tue, 3 Aug 2010 23:21:47 +0000 Subject: [PATCH] VP8: slightly faster DCT coefficient probability update Originally committed as revision 24687 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/vp8.c | 5 ++--- libavcodec/vp8data.h | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/libavcodec/vp8.c b/libavcodec/vp8.c index 3863a81187..2a0f93bb16 100644 --- a/libavcodec/vp8.c +++ b/libavcodec/vp8.c @@ -494,9 +494,8 @@ static int decode_frame_header(VP8Context *s, const uint8_t *buf, int buf_size) for (l = 0; l < NUM_DCT_TOKENS-1; l++) if (vp56_rac_get_prob_branchy(c, vp8_token_update_probs[i][j][k][l])) { int prob = vp8_rac_get_uint(c, 8); - for (m = 0; m < 16; m++) - if (vp8_coeff_band[m] == j) - s->prob->token[i][m][k][l] = prob; + for (m = 0; vp8_coeff_band_indexes[j][m] >= 0; m++) + s->prob->token[i][vp8_coeff_band_indexes[j][m]][k][l] = prob; } if ((s->mbskip_enabled = vp8_rac_get(c))) diff --git a/libavcodec/vp8data.h b/libavcodec/vp8data.h index ce64262758..775472e8e8 100644 --- a/libavcodec/vp8data.h +++ b/libavcodec/vp8data.h @@ -293,6 +293,20 @@ static const uint8_t vp8_coeff_band[16] = 0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7 }; +/* Inverse of vp8_coeff_band: mappings of bands to coefficient indexes. + * Each list is -1-terminated. */ +static const int8_t vp8_coeff_band_indexes[8][10] = +{ + {0, -1}, + {1, -1}, + {2, -1}, + {3, -1}, + {5, -1}, + {6, -1}, + {4, 7, 8, 9, 10, 11, 12, 13, 14, -1}, + {15, -1} +}; + static const uint8_t vp8_dct_cat1_prob[] = { 159, 0 }; static const uint8_t vp8_dct_cat2_prob[] = { 165, 145, 0 }; static const uint8_t vp8_dct_cat3_prob[] = { 173, 148, 140, 0 };