summaryrefslogtreecommitdiff
path: root/libavcodec/mpegaudiodec.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2006-08-24 06:57:32 +0000
committerMichael Niedermayer <michaelni@gmx.at>2006-08-24 06:57:32 +0000
commita08a502eda9dee5db510da7c207db1ca04253faa (patch)
treefca3126039f098dad6191a7fbd3efcbb0c3f924e /libavcodec/mpegaudiodec.c
parent3328ec63318141feff512a3da42bc240ce863354 (diff)
dont copy the whole GetBitContext around
Originally committed as revision 6062 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/mpegaudiodec.c')
-rw-r--r--libavcodec/mpegaudiodec.c11
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);