You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
nellymoserdec: use dsp functions for overlap and windowing
This commit is contained in:
@@ -48,7 +48,7 @@
|
|||||||
typedef struct NellyMoserDecodeContext {
|
typedef struct NellyMoserDecodeContext {
|
||||||
AVCodecContext* avctx;
|
AVCodecContext* avctx;
|
||||||
float *float_buf;
|
float *float_buf;
|
||||||
float state[NELLY_BUF_LEN];
|
DECLARE_ALIGNED(16, float, state)[NELLY_BUF_LEN];
|
||||||
AVLFG random_state;
|
AVLFG random_state;
|
||||||
GetBitContext gb;
|
GetBitContext gb;
|
||||||
float scale_bias;
|
float scale_bias;
|
||||||
@@ -58,23 +58,6 @@ typedef struct NellyMoserDecodeContext {
|
|||||||
DECLARE_ALIGNED(32, float, imdct_out)[NELLY_BUF_LEN * 2];
|
DECLARE_ALIGNED(32, float, imdct_out)[NELLY_BUF_LEN * 2];
|
||||||
} NellyMoserDecodeContext;
|
} NellyMoserDecodeContext;
|
||||||
|
|
||||||
static void overlap_and_window(NellyMoserDecodeContext *s, float *state, float *audio, float *a_in)
|
|
||||||
{
|
|
||||||
int bot, top;
|
|
||||||
|
|
||||||
bot = 0;
|
|
||||||
top = NELLY_BUF_LEN-1;
|
|
||||||
|
|
||||||
while (bot < NELLY_BUF_LEN) {
|
|
||||||
audio[bot] = a_in [bot]*ff_sine_128[bot]
|
|
||||||
+state[bot]*ff_sine_128[top];
|
|
||||||
|
|
||||||
bot++;
|
|
||||||
top--;
|
|
||||||
}
|
|
||||||
memcpy(state, a_in + NELLY_BUF_LEN, sizeof(float)*NELLY_BUF_LEN);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void nelly_decode_block(NellyMoserDecodeContext *s,
|
static void nelly_decode_block(NellyMoserDecodeContext *s,
|
||||||
const unsigned char block[NELLY_BLOCK_LEN],
|
const unsigned char block[NELLY_BLOCK_LEN],
|
||||||
float audio[NELLY_SAMPLES])
|
float audio[NELLY_SAMPLES])
|
||||||
@@ -125,7 +108,9 @@ static void nelly_decode_block(NellyMoserDecodeContext *s,
|
|||||||
s->imdct_ctx.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
|
/* XXX: overlapping and windowing should be part of a more
|
||||||
generic imdct function */
|
generic imdct function */
|
||||||
overlap_and_window(s, s->state, aptr, s->imdct_out);
|
s->dsp.vector_fmul_reverse(s->state, s->state, ff_sine_128, NELLY_BUF_LEN);
|
||||||
|
s->dsp.vector_fmul_add(aptr, s->imdct_out, ff_sine_128, s->state, NELLY_BUF_LEN);
|
||||||
|
memcpy(s->state, s->imdct_out + NELLY_BUF_LEN, sizeof(float)*NELLY_BUF_LEN);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user