diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2006-08-24 06:57:32 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2006-08-24 06:57:32 +0000 |
commit | a08a502eda9dee5db510da7c207db1ca04253faa (patch) | |
tree | fca3126039f098dad6191a7fbd3efcbb0c3f924e /libavcodec | |
parent | 3328ec63318141feff512a3da42bc240ce863354 (diff) | |
download | ffmpeg-a08a502eda9dee5db510da7c207db1ca04253faa.tar.gz |
dont copy the whole GetBitContext around
Originally committed as revision 6062 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/mpegaudiodec.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/libavcodec/mpegaudiodec.c b/libavcodec/mpegaudiodec.c index 0c57508ee3..a47bcb9ca7 100644 --- a/libavcodec/mpegaudiodec.c +++ b/libavcodec/mpegaudiodec.c @@ -1671,7 +1671,7 @@ static int huffman_decode(MPADecodeContext *s, GranuleDef *g, { int s_index; int linbits, code, x, y, l, v, i, j, k, pos; - GetBitContext last_gb; + int last_pos; VLC *vlc; /* low frequencies (called big values) */ @@ -1735,19 +1735,20 @@ static int huffman_decode(MPADecodeContext *s, GranuleDef *g, /* high frequencies */ vlc = &huff_quad_vlc[g->count1table_select]; - last_gb.buffer = NULL; + last_pos=0; while (s_index <= 572) { pos = get_bits_count(&s->gb); if (pos >= end_pos) { - if (pos > end_pos && last_gb.buffer != NULL) { + if (pos > end_pos && last_pos){ /* some encoders generate an incorrect size for this part. We must go back into the data */ s_index -= 4; - s->gb = last_gb; + init_get_bits(&s->gb, s->gb.buffer + (last_pos>>3), s->gb.size_in_bits - (last_pos&(~7))); + skip_bits(&s->gb, last_pos&7); } break; } - last_gb= s->gb; + last_pos= pos; code = get_vlc2(&s->gb, vlc->table, vlc->bits, 1); dprintf("t=%d code=%d\n", g->count1table_select, code); |