29 const int8_t hf_vq[1024][32],
31 ptrdiff_t sb_start, ptrdiff_t sb_end,
32 ptrdiff_t ofs, ptrdiff_t
len)
36 for (
i = sb_start;
i < sb_end;
i++) {
37 const int8_t *
coeff = hf_vq[vq_index[
i]];
39 for (j = 0; j <
len; j++)
40 dst[
i][j + ofs] =
clip23(
coeff[j] * scale + (1 << 3) >> 4);
46 ptrdiff_t sb_start, ptrdiff_t sb_end,
47 ptrdiff_t ofs, ptrdiff_t
len)
51 for (
i = sb_start;
i < sb_end;
i++) {
53 for (j = 0; j <
len; j++)
59 const float *filter_coeff, ptrdiff_t npcmblocks,
63 int factor = 64 << dec_select;
64 int ncoeffs = 8 >> dec_select;
65 int nlfesamples = npcmblocks >> (dec_select + 1);
68 for (
i = 0;
i < nlfesamples;
i++) {
70 for (j = 0; j <
factor / 2; j++) {
74 for (k = 0; k < ncoeffs; k++) {
75 a += filter_coeff[ j * ncoeffs + k] * lfe_samples[-k];
76 b += filter_coeff[255 - j * ncoeffs - k] * lfe_samples[-k];
80 pcm_samples[
factor / 2 + j] =
b;
89 const float *filter_coeff, ptrdiff_t npcmblocks)
95 const float *filter_coeff, ptrdiff_t npcmblocks)
101 float *hist, ptrdiff_t
len)
106 for (
i = 0;
i <
len;
i++) {
107 float a = 0.25f *
src[
i] + 0.75f * prev;
108 float b = 0.75f *
src[
i] + 0.25f * prev;
122 float *hist1,
int *
offset,
float *hist2,
123 const float *filter_coeff, ptrdiff_t npcmblocks,
129 for (j = 0; j < npcmblocks; j++) {
131 for (
i = 0;
i < 32;
i++) {
133 input[
i] = -subband_samples_lo[
i][j];
135 input[
i] = subband_samples_lo[
i][j];
141 pcm_samples, input, scale);
151 float *hist1,
int *
offset,
float *hist2,
152 const float *filter_coeff, ptrdiff_t npcmblocks,
158 if (!subband_samples_hi)
159 memset(&input[32], 0,
sizeof(input[0]) * 32);
161 for (j = 0; j < npcmblocks; j++) {
163 if (subband_samples_hi) {
165 for (
i = 0;
i < 32;
i++) {
167 input[
i] = -subband_samples_lo[
i][j] - subband_samples_hi[
i][j];
169 input[
i] = subband_samples_lo[
i][j] + subband_samples_hi[
i][j];
171 for (
i = 32;
i < 64;
i++) {
173 input[
i] = -subband_samples_hi[
i][j];
175 input[
i] = subband_samples_hi[
i][j];
179 for (
i = 0;
i < 32;
i++) {
181 input[
i] = -subband_samples_lo[
i][j];
183 input[
i] = subband_samples_lo[
i][j];
190 pcm_samples, input, scale);
196 const int32_t *filter_coeff, ptrdiff_t npcmblocks)
199 int nlfesamples = npcmblocks >> 1;
202 for (
i = 0;
i < nlfesamples;
i++) {
204 for (j = 0; j < 32; j++) {
208 for (k = 0; k < 8; k++) {
209 a += (
int64_t)filter_coeff[ j * 8 + k] * lfe_samples[-k];
210 b += (
int64_t)filter_coeff[255 - j * 8 - k] * lfe_samples[-k];
228 for (
i = 0;
i <
len;
i++) {
229 int64_t a = INT64_C(2097471) *
src[
i] + INT64_C(6291137) * prev;
230 int64_t b = INT64_C(6291137) *
src[
i] + INT64_C(2097471) * prev;
245 const int32_t *filter_coeff, ptrdiff_t npcmblocks)
250 for (j = 0; j < npcmblocks; j++) {
252 for (
i = 0;
i < 32;
i++)
253 input[
i] = subband_samples_lo[
i][j];
269 const int32_t *filter_coeff, ptrdiff_t npcmblocks)
274 if (!subband_samples_hi)
275 memset(&input[32], 0,
sizeof(input[0]) * 32);
277 for (j = 0; j < npcmblocks; j++) {
279 if (subband_samples_hi) {
281 for (
i = 0;
i < 32;
i++)
282 input[
i] = subband_samples_lo[
i][j] + subband_samples_hi[
i][j];
283 for (
i = 32;
i < 64;
i++)
284 input[
i] = subband_samples_hi[
i][j];
287 for (
i = 0;
i < 32;
i++)
288 input[
i] = subband_samples_lo[
i][j];
312 for (
i = 0;
i <
len;
i++) {
348 dst[
i] =
mul16(dst[
i], scale_inv);
377 for (
i = 0;
i < 8;
i++,
src0--) {
383 for (
i = 0;
i <
len;
i++) {
390 const float *
coeff, ptrdiff_t ofs, ptrdiff_t
len)
392 float SW0 =
coeff[0];
393 float SW1 =
coeff[1];
394 float SW2 =
coeff[2];
395 float SW3 =
coeff[3];
402 float AL1 =
coeff[8];
403 float AL2 =
coeff[9];
408 for (
i = 0;
i <
len;
i++) {
409 float *
src = input[
i] + ofs;
411 float a =
src[-4] * SW0 -
src[-1] * SW3;
412 float b =
src[-3] * SW1 -
src[-2] * SW2;
413 float c =
src[ 2] * SW1 +
src[ 1] * SW2;
414 float d =
src[ 3] * SW0 +
src[ 0] * SW3;
423 for (
i = 12;
i <
len - 1;
i++) {
424 float a = output[
i ][3] * AL1;
425 float b = output[
i+1][0] * AL1;
426 output[
i ][3] +=
b -
a;
427 output[
i+1][0] -=
b +
a;
428 a = output[
i ][2] * AL2;
429 b = output[
i+1][1] * AL2;
430 output[
i ][2] +=
b -
a;
431 output[
i+1][1] -=
b +
a;
435 static void lfe_iir_c(
float *output,
const float *input,
436 const float iir[5][4],
float hist[5][2],
442 for (
i = 0;
i < 64;
i++) {
445 for (j = 0; j <
factor; j++) {
446 for (k = 0; k < 5; k++) {
447 tmp = hist[k][0] * iir[k][0] + hist[k][1] * iir[k][1] + res;
448 res = hist[k][0] * iir[k][2] + hist[k][1] * iir[k][3] +
tmp;
450 hist[k][0] = hist[k][1];
static void dmix_scale_inv_c(int32_t *dst, int scale_inv, ptrdiff_t len)
static void dmix_sub_c(int32_t *dst, const int32_t *src, int coeff, ptrdiff_t len)
static void lbr_bank_c(float output[32][4], float **input, const float *coeff, ptrdiff_t ofs, ptrdiff_t len)
static void sub_qmf32_fixed_c(SynthFilterContext *synth, DCADCTContext *imdct, int32_t *pcm_samples, int32_t **subband_samples_lo, int32_t **subband_samples_hi, int32_t *hist1, int *offset, int32_t *hist2, const int32_t *filter_coeff, ptrdiff_t npcmblocks)
static void decode_joint_c(int32_t **dst, int32_t **src, const int32_t *scale_factors, ptrdiff_t sb_start, ptrdiff_t sb_end, ptrdiff_t ofs, ptrdiff_t len)
static void dmix_add_c(int32_t *dst, const int32_t *src, int coeff, ptrdiff_t len)
static void sub_qmf64_fixed_c(SynthFilterContext *synth, DCADCTContext *imdct, int32_t *pcm_samples, int32_t **subband_samples_lo, int32_t **subband_samples_hi, int32_t *hist1, int *offset, int32_t *hist2, const int32_t *filter_coeff, ptrdiff_t npcmblocks)
av_cold void ff_dcadsp_init(DCADSPContext *s)
static void lfe_x96_float_c(float *dst, const float *src, float *hist, ptrdiff_t len)
static void lfe_fir_float_c(float *pcm_samples, int32_t *lfe_samples, const float *filter_coeff, ptrdiff_t npcmblocks, int dec_select)
static void lfe_fir_fixed_c(int32_t *pcm_samples, int32_t *lfe_samples, const int32_t *filter_coeff, ptrdiff_t npcmblocks)
static void sub_qmf32_float_c(SynthFilterContext *synth, FFTContext *imdct, float *pcm_samples, int32_t **subband_samples_lo, int32_t **subband_samples_hi, float *hist1, int *offset, float *hist2, const float *filter_coeff, ptrdiff_t npcmblocks, float scale)
static void decor_c(int32_t *dst, const int32_t *src, int coeff, ptrdiff_t len)
static void filter0(SUINT32 *dst, const int32_t *src, int32_t coeff, ptrdiff_t len)
static void dmix_sub_xch_c(int32_t *dst1, int32_t *dst2, const int32_t *src, ptrdiff_t len)
static void assemble_freq_bands_c(int32_t *dst, int32_t *src0, int32_t *src1, const int32_t *coeff, ptrdiff_t len)
static void lfe_fir1_float_c(float *pcm_samples, int32_t *lfe_samples, const float *filter_coeff, ptrdiff_t npcmblocks)
static void dmix_scale_c(int32_t *dst, int scale, ptrdiff_t len)
static void lfe_fir0_float_c(float *pcm_samples, int32_t *lfe_samples, const float *filter_coeff, ptrdiff_t npcmblocks)
static void lfe_x96_fixed_c(int32_t *dst, const int32_t *src, int32_t *hist, ptrdiff_t len)
static void lfe_iir_c(float *output, const float *input, const float iir[5][4], float hist[5][2], ptrdiff_t factor)
static void sub_qmf64_float_c(SynthFilterContext *synth, FFTContext *imdct, float *pcm_samples, int32_t **subband_samples_lo, int32_t **subband_samples_hi, float *hist1, int *offset, float *hist2, const float *filter_coeff, ptrdiff_t npcmblocks, float scale)
static void decode_hf_c(int32_t **dst, const int32_t *vq_index, const int8_t hf_vq[1024][32], int32_t scale_factors[32][2], ptrdiff_t sb_start, ptrdiff_t sb_end, ptrdiff_t ofs, ptrdiff_t len)
static void filter1(SUINT32 *dst, const int32_t *src, int32_t coeff, ptrdiff_t len)
av_cold void ff_dcadsp_init_x86(DCADSPContext *s)
static int32_t norm23(int64_t a)
static int32_t mul16(int32_t a, int32_t b)
static int32_t mul23(int32_t a, int32_t b)
static int32_t mul17(int32_t a, int32_t b)
static int32_t mul22(int32_t a, int32_t b)
static int32_t clip23(int32_t a)
static int32_t mul15(int32_t a, int32_t b)
Memory handling functions.
#define LOCAL_ALIGNED_32(t, v,...)
void(* synth_filter_float_64)(FFTContext *imdct, float *synth_buf_ptr, int *synth_buf_offset, float synth_buf2[64], const float window[1024], float out[64], const float in[64], float scale)
void(* synth_filter_fixed)(DCADCTContext *imdct, int32_t *synth_buf_ptr, int *synth_buf_offset, int32_t synth_buf2[32], const int32_t window[512], int32_t out[32], const int32_t in[32])
void(* synth_filter_float)(FFTContext *imdct, float *synth_buf_ptr, int *synth_buf_offset, float synth_buf2[32], const float window[512], float out[32], const float in[32], float scale)
void(* synth_filter_fixed_64)(DCADCTContext *imdct, int32_t *synth_buf_ptr, int *synth_buf_offset, int32_t synth_buf2[64], const int32_t window[1024], int32_t out[64], const int32_t in[64])
static const double coeff[2][5]
static const int factor[16]
static const uint8_t offset[127][2]