nellymoserdec: use dsp functions for overlap and windowing
This commit is contained in:
parent
8c9581f052
commit
77c8ef9a36
@ -48,7 +48,7 @@
|
||||
typedef struct NellyMoserDecodeContext {
|
||||
AVCodecContext* avctx;
|
||||
float *float_buf;
|
||||
float state[NELLY_BUF_LEN];
|
||||
DECLARE_ALIGNED(16, float, state)[NELLY_BUF_LEN];
|
||||
AVLFG random_state;
|
||||
GetBitContext gb;
|
||||
float scale_bias;
|
||||
@ -58,23 +58,6 @@ typedef struct NellyMoserDecodeContext {
|
||||
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)
|
||||
{
|
||||
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,
|
||||
const unsigned char block[NELLY_BLOCK_LEN],
|
||||
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);
|
||||
/* XXX: overlapping and windowing should be part of a more
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user