VP8: partially inline decode_block_coeffs
Avoids a function call in the case of empty DCT blocks (most of the time). Originally committed as revision 24691 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
ffbf0794f9
commit
1e73967950
@ -821,18 +821,13 @@ void decode_mb_mode(VP8Context *s, VP8Macroblock *mb, int mb_x, int mb_y, uint8_
|
|||||||
* @return 0 if no coeffs were decoded
|
* @return 0 if no coeffs were decoded
|
||||||
* otherwise, the index of the last coeff decoded plus one
|
* otherwise, the index of the last coeff decoded plus one
|
||||||
*/
|
*/
|
||||||
static int decode_block_coeffs(VP56RangeCoder *c, DCTELEM block[16],
|
static int decode_block_coeffs_internal(VP56RangeCoder *c, DCTELEM block[16],
|
||||||
uint8_t probs[8][3][NUM_DCT_TOKENS-1],
|
uint8_t probs[8][3][NUM_DCT_TOKENS-1],
|
||||||
int i, int zero_nhood, int16_t qmul[2])
|
int i, uint8_t *token_prob, int16_t qmul[2])
|
||||||
{
|
{
|
||||||
uint8_t *token_prob = probs[i][zero_nhood];
|
|
||||||
int coeff;
|
|
||||||
|
|
||||||
if (!vp56_rac_get_prob_branchy(c, token_prob[0]))
|
|
||||||
return 0;
|
|
||||||
goto skip_eob;
|
goto skip_eob;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
int coeff;
|
||||||
if (!vp56_rac_get_prob_branchy(c, token_prob[0])) // DCT_EOB
|
if (!vp56_rac_get_prob_branchy(c, token_prob[0])) // DCT_EOB
|
||||||
return i;
|
return i;
|
||||||
|
|
||||||
@ -879,6 +874,17 @@ skip_eob:
|
|||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static av_always_inline
|
||||||
|
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 = probs[i][zero_nhood];
|
||||||
|
if (!vp56_rac_get_prob_branchy(c, token_prob[0])) // DCT_EOB
|
||||||
|
return 0;
|
||||||
|
return decode_block_coeffs_internal(c, block, probs, i, token_prob, qmul);
|
||||||
|
}
|
||||||
|
|
||||||
static av_always_inline
|
static av_always_inline
|
||||||
void decode_mb_coeffs(VP8Context *s, VP56RangeCoder *c, VP8Macroblock *mb,
|
void decode_mb_coeffs(VP8Context *s, VP56RangeCoder *c, VP8Macroblock *mb,
|
||||||
uint8_t t_nnz[9], uint8_t l_nnz[9])
|
uint8_t t_nnz[9], uint8_t l_nnz[9])
|
||||||
|
Loading…
Reference in New Issue
Block a user