diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2007-02-03 13:15:55 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2007-02-03 13:15:55 +0000 |
commit | 5773d46009d63182217798f0d0dd31115f4a157e (patch) | |
tree | 7e75bc8e3272d415f582e677a0c7825e6e4b7e1c | |
parent | e0cf92048acd76e3364e551b6ae646929280d994 (diff) | |
download | ffmpeg-5773d46009d63182217798f0d0dd31115f4a157e.tar.gz |
factorize switch_buffer()
Originally committed as revision 7813 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavcodec/mpegaudiodec.c | 40 |
1 files changed, 16 insertions, 24 deletions
diff --git a/libavcodec/mpegaudiodec.c b/libavcodec/mpegaudiodec.c index 998efb85eb..ef3384b630 100644 --- a/libavcodec/mpegaudiodec.c +++ b/libavcodec/mpegaudiodec.c @@ -1592,6 +1592,19 @@ static inline int get_bitsz(GetBitContext *s, int n) return get_bits(s, n); } + +static void switch_buffer(MPADecodeContext *s, int *pos, int *end_pos, int *end_pos2){ + if(s->in_gb.buffer && *pos >= s->gb.size_in_bits){ + s->gb= s->in_gb; + s->in_gb.buffer=NULL; + assert((get_bits_count(&s->gb) & 7) == 0); + skip_bits_long(&s->gb, *pos - *end_pos); + *end_pos2= + *end_pos= *end_pos2 + get_bits_count(&s->gb) - *pos; + *pos= get_bits_count(&s->gb); + } +} + static int huffman_decode(MPADecodeContext *s, GranuleDef *g, int16_t *exponents, int end_pos2) { @@ -1627,15 +1640,7 @@ static int huffman_decode(MPADecodeContext *s, GranuleDef *g, if (pos >= end_pos){ // av_log(NULL, AV_LOG_ERROR, "pos: %d %d %d %d\n", pos, end_pos, end_pos2, s_index); - if(s->in_gb.buffer && pos >= s->gb.size_in_bits){ - s->gb= s->in_gb; - s->in_gb.buffer=NULL; - assert((get_bits_count(&s->gb) & 7) == 0); - skip_bits_long(&s->gb, pos - end_pos); - end_pos2= - end_pos= end_pos2 + get_bits_count(&s->gb) - pos; - pos= get_bits_count(&s->gb); - } + switch_buffer(s, &pos, &end_pos, &end_pos2); // av_log(NULL, AV_LOG_ERROR, "new pos: %d %d\n", pos, end_pos); if(pos >= end_pos) break; @@ -1712,15 +1717,7 @@ static int huffman_decode(MPADecodeContext *s, GranuleDef *g, break; } // av_log(NULL, AV_LOG_ERROR, "pos2: %d %d %d %d\n", pos, end_pos, end_pos2, s_index); - if(s->in_gb.buffer && pos >= s->gb.size_in_bits){ - s->gb= s->in_gb; - s->in_gb.buffer=NULL; - assert((get_bits_count(&s->gb) & 7) == 0); - skip_bits_long(&s->gb, pos - end_pos); - end_pos2= - end_pos= end_pos2 + get_bits_count(&s->gb) - pos; - pos= get_bits_count(&s->gb); - } + switch_buffer(s, &pos, &end_pos, &end_pos2); // av_log(NULL, AV_LOG_ERROR, "new pos2: %d %d %d\n", pos, end_pos, s_index); if(pos >= end_pos) break; @@ -1760,12 +1757,7 @@ static int huffman_decode(MPADecodeContext *s, GranuleDef *g, skip_bits_long(&s->gb, bits_left); i= get_bits_count(&s->gb); - if(s->in_gb.buffer && i >= s->gb.size_in_bits){ - s->gb= s->in_gb; - s->in_gb.buffer=NULL; - assert((get_bits_count(&s->gb) & 7) == 0); - skip_bits_long(&s->gb, i - end_pos); - } + switch_buffer(s, &i, &end_pos, &end_pos2); return 0; } |