X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fnellymoserdec.c;h=59c1b3bdd87958114a1f8efc32007e47a76cbf8c;hb=d1be646e906487b395190af1d6dd8d33c22bf25f;hp=89dde912484c22065db6b558b1589b25a83ceae7;hpb=d36beb3f6902b1217beda576aa18abf7eb72b03c;p=ffmpeg diff --git a/libavcodec/nellymoserdec.c b/libavcodec/nellymoserdec.c index 89dde912484..59c1b3bdd87 100644 --- a/libavcodec/nellymoserdec.c +++ b/libavcodec/nellymoserdec.c @@ -34,10 +34,12 @@ #include "nellymoser.h" #include "libavutil/lfg.h" #include "libavutil/random_seed.h" -#include "libavcore/audioconvert.h" +#include "libavutil/audioconvert.h" #include "avcodec.h" #include "dsputil.h" #include "fft.h" +#include "fmtconvert.h" +#include "sinewin.h" #define ALT_BITSTREAM_READER_LE #include "get_bits.h" @@ -45,15 +47,15 @@ typedef struct NellyMoserDecodeContext { AVCodecContext* avctx; - DECLARE_ALIGNED(16, float,float_buf)[NELLY_SAMPLES]; + DECLARE_ALIGNED(32, float, float_buf)[NELLY_SAMPLES]; float state[128]; AVLFG random_state; GetBitContext gb; - int add_bias; float scale_bias; DSPContext dsp; FFTContext imdct_ctx; - DECLARE_ALIGNED(16, float,imdct_out)[NELLY_BUF_LEN * 2]; + FmtConvertContext fmt_conv; + DECLARE_ALIGNED(32, float, imdct_out)[NELLY_BUF_LEN * 2]; } NellyMoserDecodeContext; static void overlap_and_window(NellyMoserDecodeContext *s, float *state, float *audio, float *a_in) @@ -65,7 +67,7 @@ static void overlap_and_window(NellyMoserDecodeContext *s, float *state, float * while (bot < NELLY_BUF_LEN) { audio[bot] = a_in [bot]*ff_sine_128[bot] - +state[bot]*ff_sine_128[top] + s->add_bias; + +state[bot]*ff_sine_128[top]; bot++; top--; @@ -120,7 +122,7 @@ static void nelly_decode_block(NellyMoserDecodeContext *s, memset(&aptr[NELLY_FILL_LEN], 0, (NELLY_BUF_LEN - NELLY_FILL_LEN) * sizeof(float)); - ff_imdct_calc(&s->imdct_ctx, s->imdct_out, aptr); + s->imdct_ctx.imdct_calc(&s->imdct_ctx, s->imdct_out, aptr); /* XXX: overlapping and windowing should be part of a more generic imdct function */ overlap_and_window(s, s->state, aptr, s->imdct_out); @@ -135,14 +137,9 @@ static av_cold int decode_init(AVCodecContext * avctx) { ff_mdct_init(&s->imdct_ctx, 8, 1, 1.0); dsputil_init(&s->dsp, avctx); + ff_fmt_convert_init(&s->fmt_conv, avctx); - if(s->dsp.float_to_int16 == ff_float_to_int16_c) { - s->add_bias = 385; - s->scale_bias = 1.0/(8*32768); - } else { - s->add_bias = 0; - s->scale_bias = 1.0/(1*8); - } + s->scale_bias = 1.0/(1*8); /* Generate overlap window */ if (!ff_sine_128[127]) @@ -182,7 +179,7 @@ static int decode_tag(AVCodecContext * avctx, for (i=0 ; ifloat_buf); - s->dsp.float_to_int16(&samples[i*NELLY_SAMPLES], s->float_buf, NELLY_SAMPLES); + s->fmt_conv.float_to_int16(&samples[i*NELLY_SAMPLES], s->float_buf, NELLY_SAMPLES); *data_size += NELLY_SAMPLES*sizeof(int16_t); }