summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2008-07-11 19:51:36 +0000
committerMichael Niedermayer <michaelni@gmx.at>2008-07-11 19:51:36 +0000
commit7ee18c1781ebfdfb1ef6f6f17edcbde0d349aad5 (patch)
tree792a9360520a067e10efdeaef6e887972cf5c6e9 /libavcodec
parent362aba4be71f2d5d6c85f7bf8dd800faf5c1069f (diff)
Fix not coded channels / silence decoding.
Fixes issue264 WMV audio stutter Originally committed as revision 14171 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/wmadec.c13
1 files 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;