mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-13 21:28:01 +02:00
Fix not coded channels / silence decoding.
Fixes issue264 WMV audio stutter Originally committed as revision 14171 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
362aba4be7
commit
7ee18c1781
@ -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)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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)
|
|||||||
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;
|
||||||
|
Loading…
Reference in New Issue
Block a user