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,
|
static void adx_encode(ADXContext *c, uint8_t *adx, const int16_t *wav,
|
||||||
ADXChannelState *prev)
|
ADXChannelState *prev, int channels)
|
||||||
{
|
{
|
||||||
PutBitContext pb;
|
PutBitContext pb;
|
||||||
int scale;
|
int scale;
|
||||||
int i;
|
int i, j;
|
||||||
int s0, s1, s2, d;
|
int s0, s1, s2, d;
|
||||||
int max = 0;
|
int max = 0;
|
||||||
int min = 0;
|
int min = 0;
|
||||||
@ -46,10 +46,10 @@ static void adx_encode(ADXContext *c, uint8_t *adx, const int16_t *wav,
|
|||||||
|
|
||||||
s1 = prev->s1;
|
s1 = prev->s1;
|
||||||
s2 = prev->s2;
|
s2 = prev->s2;
|
||||||
for (i = 0; i < 32; i++) {
|
for (i = 0, j = 0; j < 32; i += channels, j++) {
|
||||||
s0 = wav[i];
|
s0 = wav[i];
|
||||||
d = ((s0 << COEFF_BITS) - c->coeff[0] * s1 - c->coeff[1] * s2) >> COEFF_BITS;
|
d = ((s0 << COEFF_BITS) - c->coeff[0] * s1 - c->coeff[1] * s2) >> COEFF_BITS;
|
||||||
data[i] = d;
|
data[j] = d;
|
||||||
if (max < d)
|
if (max < d)
|
||||||
max = d;
|
max = d;
|
||||||
if (min > d)
|
if (min > d)
|
||||||
@ -138,23 +138,15 @@ static int adx_encode_frame(AVCodecContext *avctx, uint8_t *frame,
|
|||||||
|
|
||||||
if (avctx->channels == 1) {
|
if (avctx->channels == 1) {
|
||||||
while (rest >= 32) {
|
while (rest >= 32) {
|
||||||
adx_encode(c, dst, samples, c->prev);
|
adx_encode(c, dst, samples, c->prev, avctx->channels);
|
||||||
dst += 18;
|
dst += 18;
|
||||||
samples += 32;
|
samples += 32;
|
||||||
rest -= 32;
|
rest -= 32;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
while (rest >= 32*2) {
|
while (rest >= 32*2) {
|
||||||
int16_t tmpbuf[32*2];
|
adx_encode(c, dst, samples, c->prev, avctx->channels);
|
||||||
int i;
|
adx_encode(c, dst + 18, samples + 1, c->prev + 1, avctx->channels);
|
||||||
|
|
||||||
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);
|
|
||||||
dst += 18*2;
|
dst += 18*2;
|
||||||
samples += 32*2;
|
samples += 32*2;
|
||||||
rest -= 32*2;
|
rest -= 32*2;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user