[soc]: r4017 - in wmapro: wma3.h wma3dec.c
Author: faust3 Date: Tue Feb 3 19:24:57 2009 New Revision: 4017 Log: reuse per channel output buffer for decoding the coefficients Modified: wmapro/wma3.h wmapro/wma3dec.c Modified: wmapro/wma3.h ============================================================================== --- wmapro/wma3.h Tue Feb 3 19:06:34 2009 (r4016) +++ wmapro/wma3.h Tue Feb 3 19:24:57 2009 (r4017) @@ -57,7 +57,7 @@ typedef struct { int scale_factors[MAX_BANDS]; //< scale factor values int resampled_scale_factors[MAX_BANDS]; //< scale factors from a previous block int scale_factor_block_len; //< sf reference block length - DECLARE_ALIGNED_16(float, coeffs[BLOCK_MAX_SIZE]); //< decode buffer + float* coeffs; //< pointer to the decode buffer DECLARE_ALIGNED_16(float, out[2*BLOCK_MAX_SIZE]); //< output buffer } WMA3ChannelCtx; @@ -83,6 +83,7 @@ typedef struct WMA3DecodeContext { AVCodecContext* avctx; //< codec context for av_log DSPContext dsp; MDCTContext mdct_ctx[BLOCK_NB_SIZES]; //< MDCT context per block size + DECLARE_ALIGNED_16(float, tmp[BLOCK_MAX_SIZE]); //< imdct working buffer float* windows[BLOCK_NB_SIZES]; //< window per block size VLC sf_vlc; //< scale factor DPCM vlc VLC sf_rl_vlc; //< scale factor run length vlc Modified: wmapro/wma3dec.c ============================================================================== --- wmapro/wma3dec.c Tue Feb 3 19:06:34 2009 (r4016) +++ wmapro/wma3dec.c Tue Feb 3 19:24:57 2009 (r4017) @@ -1110,7 +1110,6 @@ static int wma_decode_subframe(WMA3Decod */ for(i=0;i<s->nb_channels;i++){ s->channel[i].grouped = 0; - memset(s->channel[i].coeffs,0,sizeof(s->channel[0].coeffs)); if(offset > s->channel[i].decoded_samples){ offset = s->channel[i].decoded_samples; subframe_len = s->channel[i].subframe_len[s->channel[i].cur_subframe]; @@ -1155,6 +1154,8 @@ static int wma_decode_subframe(WMA3Decod s->rgiBarkIndex = &s->sfb_offsets[MAX_BANDS * frame_offset]; s->subwoofer_cutoff = s->subwoofer_cutoffs[frame_offset]; } + s->channel[c].coeffs = &s->channel[c].out[s->samples_per_frame/2 + offset]; + memset(s->channel[c].coeffs,0,sizeof(float) * subframe_len); /** init some things if this is the first subframe */ if(!s->channel[c].cur_subframe){ @@ -1297,9 +1298,9 @@ static int wma_decode_subframe(WMA3Decod } dst = &s->channel[c].out[s->samples_per_frame/2 + s->channel[c].subframe_offset[s->channel[c].cur_subframe]]; - ff_imdct_half(&s->mdct_ctx[av_log2(subframe_len)-BLOCK_MIN_BITS], dst, s->channel[c].coeffs); // DCTIV with reverse + ff_imdct_half(&s->mdct_ctx[av_log2(subframe_len)-BLOCK_MIN_BITS], s->tmp, s->channel[c].coeffs); // DCTIV with reverse for(b=0;b<subframe_len;b++) - dst[b] /= subframe_len / 2; // FIXME: try to remove this scaling + dst[b] = s->tmp[b] / (subframe_len / 2); // FIXME: try to remove this scaling } }else{ for(i=0;i<s->channels_for_cur_subframe;i++){
participants (1)
-
faust3