mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
adxenc: avoid stereo deinterleaving
This commit is contained in:
parent
6b77f07074
commit
613668210b
@ -34,11 +34,11 @@
|
||||
*/
|
||||
|
||||
static void adx_encode(ADXContext *c, uint8_t *adx, const int16_t *wav,
|
||||
ADXChannelState *prev)
|
||||
ADXChannelState *prev, int channels)
|
||||
{
|
||||
PutBitContext pb;
|
||||
int scale;
|
||||
int i;
|
||||
int i, j;
|
||||
int s0, s1, s2, d;
|
||||
int max = 0;
|
||||
int min = 0;
|
||||
@ -46,10 +46,10 @@ static void adx_encode(ADXContext *c, uint8_t *adx, const int16_t *wav,
|
||||
|
||||
s1 = prev->s1;
|
||||
s2 = prev->s2;
|
||||
for (i = 0; i < 32; i++) {
|
||||
for (i = 0, j = 0; j < 32; i += channels, j++) {
|
||||
s0 = wav[i];
|
||||
d = ((s0 << COEFF_BITS) - c->coeff[0] * s1 - c->coeff[1] * s2) >> COEFF_BITS;
|
||||
data[i] = d;
|
||||
data[j] = d;
|
||||
if (max < d)
|
||||
max = d;
|
||||
if (min > d)
|
||||
@ -138,23 +138,15 @@ static int adx_encode_frame(AVCodecContext *avctx, uint8_t *frame,
|
||||
|
||||
if (avctx->channels == 1) {
|
||||
while (rest >= 32) {
|
||||
adx_encode(c, dst, samples, c->prev);
|
||||
adx_encode(c, dst, samples, c->prev, avctx->channels);
|
||||
dst += 18;
|
||||
samples += 32;
|
||||
rest -= 32;
|
||||
}
|
||||
} else {
|
||||
while (rest >= 32*2) {
|
||||
int16_t tmpbuf[32*2];
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 32; i++) {
|
||||
tmpbuf[i ] = samples[i*2 ];
|
||||
tmpbuf[i+32] = samples[i*2+1];
|
||||
}
|
||||
|
||||
adx_encode(c, dst, tmpbuf, c->prev );
|
||||
adx_encode(c, dst + 18, tmpbuf + 32, c->prev + 1);
|
||||
adx_encode(c, dst, samples, c->prev, avctx->channels);
|
||||
adx_encode(c, dst + 18, samples + 1, c->prev + 1, avctx->channels);
|
||||
dst += 18*2;
|
||||
samples += 32*2;
|
||||
rest -= 32*2;
|
||||
|
Loading…
Reference in New Issue
Block a user