Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net> Signed-off-by: Martin Storsjö <martin@martin.st>tags/n2.6
@@ -106,7 +106,7 @@ static int g722_decode_frame(AVCodecContext *avctx, void *data, | |||||
for (j = 0; j < avpkt->size; j++) { | for (j = 0; j < avpkt->size; j++) { | ||||
int ilow, ihigh, rlow, rhigh, dhigh; | int ilow, ihigh, rlow, rhigh, dhigh; | ||||
int xout1, xout2; | |||||
int xout[2]; | |||||
ihigh = get_bits(&gb, 2); | ihigh = get_bits(&gb, 2); | ||||
ilow = get_bits(&gb, 6 - skip); | ilow = get_bits(&gb, 6 - skip); | ||||
@@ -124,10 +124,9 @@ static int g722_decode_frame(AVCodecContext *avctx, void *data, | |||||
c->prev_samples[c->prev_samples_pos++] = rlow + rhigh; | c->prev_samples[c->prev_samples_pos++] = rlow + rhigh; | ||||
c->prev_samples[c->prev_samples_pos++] = rlow - rhigh; | c->prev_samples[c->prev_samples_pos++] = rlow - rhigh; | ||||
c->dsp.apply_qmf(c->prev_samples + c->prev_samples_pos - 24, | |||||
&xout1, &xout2); | |||||
*out_buf++ = av_clip_int16(xout1 >> 11); | |||||
*out_buf++ = av_clip_int16(xout2 >> 11); | |||||
c->dsp.apply_qmf(c->prev_samples + c->prev_samples_pos - 24, xout); | |||||
*out_buf++ = av_clip_int16(xout[0] >> 11); | |||||
*out_buf++ = av_clip_int16(xout[1] >> 11); | |||||
if (c->prev_samples_pos >= PREV_SAMPLES_BUF_SIZE) { | if (c->prev_samples_pos >= PREV_SAMPLES_BUF_SIZE) { | ||||
memmove(c->prev_samples, c->prev_samples + c->prev_samples_pos - 22, | memmove(c->prev_samples, c->prev_samples + c->prev_samples_pos - 22, | ||||
22 * sizeof(c->prev_samples[0])); | 22 * sizeof(c->prev_samples[0])); | ||||
@@ -29,15 +29,15 @@ static const int16_t qmf_coeffs[12] = { | |||||
3, -11, 12, 32, -210, 951, 3876, -805, 362, -156, 53, -11, | 3, -11, 12, 32, -210, 951, 3876, -805, 362, -156, 53, -11, | ||||
}; | }; | ||||
static void g722_apply_qmf(const int16_t *prev_samples, int *xout1, int *xout2) | |||||
static void g722_apply_qmf(const int16_t *prev_samples, int xout[2]) | |||||
{ | { | ||||
int i; | int i; | ||||
*xout1 = 0; | |||||
*xout2 = 0; | |||||
xout[0] = 0; | |||||
xout[1] = 0; | |||||
for (i = 0; i < 12; i++) { | for (i = 0; i < 12; i++) { | ||||
MAC16(*xout2, prev_samples[2*i ], qmf_coeffs[i ]); | |||||
MAC16(*xout1, prev_samples[2*i+1], qmf_coeffs[11-i]); | |||||
MAC16(xout[1], prev_samples[2*i ], qmf_coeffs[i ]); | |||||
MAC16(xout[0], prev_samples[2*i+1], qmf_coeffs[11-i]); | |||||
} | } | ||||
} | } | ||||
@@ -24,7 +24,7 @@ | |||||
#include <stdint.h> | #include <stdint.h> | ||||
typedef struct G722DSPContext { | typedef struct G722DSPContext { | ||||
void (*apply_qmf)(const int16_t *prev_samples, int *xout1, int *xout2); | |||||
void (*apply_qmf)(const int16_t *prev_samples, int xout[2]); | |||||
} G722DSPContext; | } G722DSPContext; | ||||
void ff_g722dsp_init(G722DSPContext *c); | void ff_g722dsp_init(G722DSPContext *c); | ||||
@@ -137,12 +137,12 @@ static const int16_t low_quant[33] = { | |||||
static inline void filter_samples(G722Context *c, const int16_t *samples, | static inline void filter_samples(G722Context *c, const int16_t *samples, | ||||
int *xlow, int *xhigh) | int *xlow, int *xhigh) | ||||
{ | { | ||||
int xout1, xout2; | |||||
int xout[2]; | |||||
c->prev_samples[c->prev_samples_pos++] = samples[0]; | c->prev_samples[c->prev_samples_pos++] = samples[0]; | ||||
c->prev_samples[c->prev_samples_pos++] = samples[1]; | c->prev_samples[c->prev_samples_pos++] = samples[1]; | ||||
c->dsp.apply_qmf(c->prev_samples + c->prev_samples_pos - 24, &xout1, &xout2); | |||||
*xlow = xout1 + xout2 >> 14; | |||||
*xhigh = xout1 - xout2 >> 14; | |||||
c->dsp.apply_qmf(c->prev_samples + c->prev_samples_pos - 24, xout); | |||||
*xlow = xout[0] + xout[1] >> 14; | |||||
*xhigh = xout[0] - xout[1] >> 14; | |||||
if (c->prev_samples_pos >= PREV_SAMPLES_BUF_SIZE) { | if (c->prev_samples_pos >= PREV_SAMPLES_BUF_SIZE) { | ||||
memmove(c->prev_samples, | memmove(c->prev_samples, | ||||
c->prev_samples + c->prev_samples_pos - 22, | c->prev_samples + c->prev_samples_pos - 22, | ||||