X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fwmadec.c;h=fbd945db5465f5e6d89c4dfedb0b3e89a64354fa;hb=ede725104b57c6bf0fa6b20f18d1035ea091e1cc;hp=0b46fe08842f09727955fa8d8567421ab03715f4;hpb=362aba4be71f2d5d6c85f7bf8dd800faf5c1069f;p=ffmpeg diff --git a/libavcodec/wmadec.c b/libavcodec/wmadec.c index 0b46fe08842..fbd945db546 100644 --- a/libavcodec/wmadec.c +++ b/libavcodec/wmadec.c @@ -126,6 +126,7 @@ static int wma_decode_init(AVCodecContext * avctx) wma_lsp_to_curve_init(s, s->frame_len); } + avctx->sample_fmt = SAMPLE_FMT_S16; return 0; } @@ -401,13 +402,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,27 +681,22 @@ 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; - s->mdct_ctx[bsize].fft.imdct_calc(&s->mdct_ctx[bsize], - s->output, s->coefs[ch], s->mdct_tmp); - - /* multiply by the window and add in the frame */ - index = (s->frame_len / 2) + s->block_pos - n4; - wma_window(s, &s->frame_out[ch][index]); - - /* specific fast case for ms-stereo : add to second - channel if it is not coded */ - if (s->ms_stereo && !s->channel_coded[1]) { - wma_window(s, &s->frame_out[1][index]); - } - } + int n4, index, n; + + n = s->block_len; + n4 = s->block_len / 2; + if(s->channel_coded[ch]){ + ff_imdct_calc(&s->mdct_ctx[bsize], s->output, s->coefs[ch]); + }else if(!(s->ms_stereo && ch==1)) + 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; + wma_window(s, &s->frame_out[ch][index]); } - next: + /* update block number */ s->block_num++; s->block_pos += s->block_len;