From 7ee18c1781ebfdfb1ef6f6f17edcbde0d349aad5 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Fri, 11 Jul 2008 19:51:36 +0000 Subject: [PATCH] Fix not coded channels / silence decoding. Fixes issue264 WMV audio stutter Originally committed as revision 14171 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/wmadec.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/libavcodec/wmadec.c b/libavcodec/wmadec.c index 0b46fe0884..6de5f96164 100644 --- a/libavcodec/wmadec.c +++ b/libavcodec/wmadec.c @@ -401,13 +401,14 @@ static int wma_decode_block(WMACodecContext *s) s->channel_coded[ch] = a; v |= a; } + + bsize = s->frame_len_bits - s->block_len_bits; + /* if no channel coded, no need to go further */ /* XXX: fix potential framing problems */ if (!v) goto next; - bsize = s->frame_len_bits - s->block_len_bits; - /* read total gain and extract corresponding number of bits for coef escape coding */ total_gain = 1; @@ -679,14 +680,17 @@ static int wma_decode_block(WMACodecContext *s) } } +next: for(ch = 0; ch < s->nb_channels; ch++) { - if (s->channel_coded[ch]) { int n4, index, n; n = s->block_len; n4 = s->block_len / 2; + if(s->channel_coded[ch]){ s->mdct_ctx[bsize].fft.imdct_calc(&s->mdct_ctx[bsize], s->output, s->coefs[ch], s->mdct_tmp); + }else + memset(s->output, 0, sizeof(s->output)); /* multiply by the window and add in the frame */ index = (s->frame_len / 2) + s->block_pos - n4; @@ -697,9 +701,8 @@ static int wma_decode_block(WMACodecContext *s) if (s->ms_stereo && !s->channel_coded[1]) { wma_window(s, &s->frame_out[1][index]); } - } } - next: + /* update block number */ s->block_num++; s->block_pos += s->block_len;