From a08a502eda9dee5db510da7c207db1ca04253faa Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Thu, 24 Aug 2006 06:57:32 +0000 Subject: [PATCH] dont copy the whole GetBitContext around Originally committed as revision 6062 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/mpegaudiodec.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/libavcodec/mpegaudiodec.c b/libavcodec/mpegaudiodec.c index 0c57508..a47bcb9 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); -- 2.7.4