imc: make IMDCT support stereo output
This will be useful for Indeo Audio decoder which is almost the same but supports stereo.
This commit is contained in:
parent
c45e2da617
commit
34271cabac
@ -589,10 +589,12 @@ static void imc_adjust_bit_allocation(IMCContext *q, IMCChannel *chctx,
|
||||
}
|
||||
}
|
||||
|
||||
static void imc_imdct256(IMCContext *q, IMCChannel *chctx)
|
||||
static void imc_imdct256(IMCContext *q, IMCChannel *chctx, int channels)
|
||||
{
|
||||
int i;
|
||||
float re, im;
|
||||
float *dst1 = q->out_samples;
|
||||
float *dst2 = q->out_samples + (COEFFS - 1) * channels;
|
||||
|
||||
/* prerotation */
|
||||
for (i = 0; i < COEFFS / 2; i++) {
|
||||
@ -610,10 +612,12 @@ static void imc_imdct256(IMCContext *q, IMCChannel *chctx)
|
||||
for (i = 0; i < COEFFS / 2; i++) {
|
||||
re = ( q->samples[i].re * q->post_cos[i]) + (-q->samples[i].im * q->post_sin[i]);
|
||||
im = (-q->samples[i].im * q->post_cos[i]) - ( q->samples[i].re * q->post_sin[i]);
|
||||
q->out_samples[i * 2] = (q->mdct_sine_window[COEFFS - 1 - i * 2] * chctx->last_fft_im[i])
|
||||
+ (q->mdct_sine_window[i * 2] * re);
|
||||
q->out_samples[COEFFS - 1 - i * 2] = (q->mdct_sine_window[i * 2] * chctx->last_fft_im[i])
|
||||
- (q->mdct_sine_window[COEFFS - 1 - i * 2] * re);
|
||||
*dst1 = (q->mdct_sine_window[COEFFS - 1 - i * 2] * chctx->last_fft_im[i])
|
||||
+ (q->mdct_sine_window[i * 2] * re);
|
||||
*dst2 = (q->mdct_sine_window[i * 2] * chctx->last_fft_im[i])
|
||||
- (q->mdct_sine_window[COEFFS - 1 - i * 2] * re);
|
||||
dst1 += channels * 2;
|
||||
dst2 -= channels * 2;
|
||||
chctx->last_fft_im[i] = im;
|
||||
}
|
||||
}
|
||||
@ -840,7 +844,7 @@ static int imc_decode_block(AVCodecContext *avctx, IMCContext *q, int ch)
|
||||
|
||||
memset(chctx->skipFlags, 0, sizeof(chctx->skipFlags));
|
||||
|
||||
imc_imdct256(q, chctx);
|
||||
imc_imdct256(q, chctx, avctx->channels);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user