Commit 1759aa41 authored by michael's avatar michael

Fix not coded channels / silence decoding.

Fixes issue264 WMV audio stutter


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@14171 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent 3377d2ae
...@@ -401,13 +401,14 @@ static int wma_decode_block(WMACodecContext *s) ...@@ -401,13 +401,14 @@ static int wma_decode_block(WMACodecContext *s)
s->channel_coded[ch] = a; s->channel_coded[ch] = a;
v |= a; v |= a;
} }
bsize = s->frame_len_bits - s->block_len_bits;
/* if no channel coded, no need to go further */ /* if no channel coded, no need to go further */
/* XXX: fix potential framing problems */ /* XXX: fix potential framing problems */
if (!v) if (!v)
goto next; goto next;
bsize = s->frame_len_bits - s->block_len_bits;
/* read total gain and extract corresponding number of bits for /* read total gain and extract corresponding number of bits for
coef escape coding */ coef escape coding */
total_gain = 1; total_gain = 1;
...@@ -679,14 +680,17 @@ static int wma_decode_block(WMACodecContext *s) ...@@ -679,14 +680,17 @@ static int wma_decode_block(WMACodecContext *s)
} }
} }
next:
for(ch = 0; ch < s->nb_channels; ch++) { for(ch = 0; ch < s->nb_channels; ch++) {
if (s->channel_coded[ch]) {
int n4, index, n; int n4, index, n;
n = s->block_len; n = s->block_len;
n4 = s->block_len / 2; n4 = s->block_len / 2;
if(s->channel_coded[ch]){
s->mdct_ctx[bsize].fft.imdct_calc(&s->mdct_ctx[bsize], s->mdct_ctx[bsize].fft.imdct_calc(&s->mdct_ctx[bsize],
s->output, s->coefs[ch], s->mdct_tmp); 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 */ /* multiply by the window and add in the frame */
index = (s->frame_len / 2) + s->block_pos - n4; index = (s->frame_len / 2) + s->block_pos - n4;
...@@ -697,9 +701,8 @@ static int wma_decode_block(WMACodecContext *s) ...@@ -697,9 +701,8 @@ static int wma_decode_block(WMACodecContext *s)
if (s->ms_stereo && !s->channel_coded[1]) { if (s->ms_stereo && !s->channel_coded[1]) {
wma_window(s, &s->frame_out[1][index]); wma_window(s, &s->frame_out[1][index]);
} }
}
} }
next:
/* update block number */ /* update block number */
s->block_num++; s->block_num++;
s->block_pos += s->block_len; s->block_pos += s->block_len;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment