28 const int8_t hf_vq[1024][32],
30 ptrdiff_t sb_start, ptrdiff_t sb_end,
31 ptrdiff_t ofs, ptrdiff_t
len)
35 for (
i = sb_start;
i < sb_end;
i++) {
36 const int8_t *
coeff = hf_vq[vq_index[
i]];
38 for (j = 0; j <
len; j++)
45 ptrdiff_t sb_start, ptrdiff_t sb_end,
46 ptrdiff_t ofs, ptrdiff_t
len)
50 for (
i = sb_start;
i < sb_end;
i++) {
52 for (j = 0; j <
len; j++)
58 const float *filter_coeff, ptrdiff_t npcmblocks,
62 int factor = 64 << dec_select;
63 int ncoeffs = 8 >> dec_select;
64 int nlfesamples = npcmblocks >> (dec_select + 1);
67 for (
i = 0;
i < nlfesamples;
i++) {
69 for (j = 0; j <
factor / 2; j++) {
73 for (k = 0; k < ncoeffs; k++) {
74 a += filter_coeff[ j * ncoeffs + k] * lfe_samples[-k];
75 b += filter_coeff[255 - j * ncoeffs - k] * lfe_samples[-k];
79 pcm_samples[
factor / 2 + j] =
b;
88 const float *filter_coeff, ptrdiff_t npcmblocks)
94 const float *filter_coeff, ptrdiff_t npcmblocks)
100 float *hist, ptrdiff_t
len)
105 for (
i = 0;
i <
len;
i++) {
106 float a = 0.25f *
src[
i] + 0.75f * prev;
107 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, imdct_fn);
152 float *hist1,
int *
offset,
float *hist2,
153 const float *filter_coeff, ptrdiff_t npcmblocks,
159 if (!subband_samples_hi)
160 memset(&input[32], 0,
sizeof(input[0]) * 32);
162 for (j = 0; j < npcmblocks; j++) {
164 if (subband_samples_hi) {
166 for (
i = 0;
i < 32;
i++) {
168 input[
i] = -subband_samples_lo[
i][j] - subband_samples_hi[
i][j];
170 input[
i] = subband_samples_lo[
i][j] + subband_samples_hi[
i][j];
172 for (
i = 32;
i < 64;
i++) {
174 input[
i] = -subband_samples_hi[
i][j];
176 input[
i] = subband_samples_hi[
i][j];
180 for (
i = 0;
i < 32;
i++) {
182 input[
i] = -subband_samples_lo[
i][j];
184 input[
i] = subband_samples_lo[
i][j];
191 pcm_samples, input,
scale, imdct_fn);
197 const int32_t *filter_coeff, ptrdiff_t npcmblocks)
200 int nlfesamples = npcmblocks >> 1;
203 for (
i = 0;
i < nlfesamples;
i++) {
205 for (j = 0; j < 32; j++) {
209 for (k = 0; k < 8; k++) {
210 a += (
int64_t)filter_coeff[ j * 8 + k] * lfe_samples[-k];
211 b += (
int64_t)filter_coeff[255 - j * 8 - k] * lfe_samples[-k];
229 for (
i = 0;
i <
len;
i++) {
230 int64_t a = INT64_C(2097471) *
src[
i] + INT64_C(6291137) * prev;
231 int64_t b = INT64_C(6291137) *
src[
i] + INT64_C(2097471) * prev;
246 const int32_t *filter_coeff, ptrdiff_t npcmblocks)
251 for (j = 0; j < npcmblocks; j++) {
253 for (
i = 0;
i < 32;
i++)
254 input[
i] = subband_samples_lo[
i][j];
270 const int32_t *filter_coeff, ptrdiff_t npcmblocks)
275 if (!subband_samples_hi)
276 memset(&input[32], 0,
sizeof(input[0]) * 32);
278 for (j = 0; j < npcmblocks; j++) {
280 if (subband_samples_hi) {
282 for (
i = 0;
i < 32;
i++)
283 input[
i] = subband_samples_lo[
i][j] + subband_samples_hi[
i][j];
284 for (
i = 32;
i < 64;
i++)
285 input[
i] = subband_samples_hi[
i][j];
288 for (
i = 0;
i < 32;
i++)
289 input[
i] = subband_samples_lo[
i][j];
313 for (
i = 0;
i <
len;
i++) {
378 for (
i = 0;
i < 8;
i++,
src0--) {
384 for (
i = 0;
i <
len;
i++) {
391 const float *
coeff, ptrdiff_t ofs, ptrdiff_t
len)
393 float SW0 =
coeff[0];
394 float SW1 =
coeff[1];
395 float SW2 =
coeff[2];
396 float SW3 =
coeff[3];
403 float AL1 =
coeff[8];
404 float AL2 =
coeff[9];
409 for (
i = 0;
i <
len;
i++) {
410 float *
src = input[
i] + ofs;
412 float a =
src[-4] * SW0 -
src[-1] * SW3;
413 float b =
src[-3] * SW1 -
src[-2] * SW2;
414 float c =
src[ 2] * SW1 +
src[ 1] * SW2;
415 float d =
src[ 3] * SW0 +
src[ 0] * SW3;
424 for (
i = 12;
i <
len - 1;
i++) {
425 float a = output[
i ][3] * AL1;
426 float b = output[
i+1][0] * AL1;
427 output[
i ][3] +=
b -
a;
428 output[
i+1][0] -=
b +
a;
429 a = output[
i ][2] * AL2;
430 b = output[
i+1][1] * AL2;
431 output[
i ][2] +=
b -
a;
432 output[
i+1][1] -=
b +
a;
437 const float iir[5][4],
float hist[5][2],
443 for (
i = 0;
i < 64;
i++) {
446 for (j = 0; j <
factor; j++) {
447 for (k = 0; k < 5; k++) {
448 tmp = hist[k][0] * iir[k][0] + hist[k][1] * iir[k][1] + res;
449 res = hist[k][0] * iir[k][2] + hist[k][1] * iir[k][3] +
tmp;
451 hist[k][0] = hist[k][1];
492#elif ARCH_X86 && HAVE_X86ASM
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
#define i(width, name, range_min, range_max)
av_cold void ff_dcadsp_init_x86(DCADSPContext *s)
av_cold void ff_dcadsp_init_aarch64(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)
static void scale(int *out, const int *in, const int w, const int h, const int shift)
static const float scale_factors[25]
scale factor for each decoded exponent: 2^-exp
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 lfe_fir1_float_c(float *pcm_samples, const int32_t *lfe_samples, const float *filter_coeff, ptrdiff_t npcmblocks)
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)
static void lfe_fir_float_c(float *pcm_samples, const int32_t *lfe_samples, const float *filter_coeff, ptrdiff_t npcmblocks, int dec_select)
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 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 sub_qmf64_float_c(SynthFilterContext *synth, AVTXContext *imdct, av_tx_fn imdct_fn, 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 assemble_freq_bands_c(int32_t *dst, int32_t *src0, int32_t *src1, const int32_t *coeff, ptrdiff_t len)
static void lfe_fir_fixed_c(int32_t *pcm_samples, const int32_t *lfe_samples, const int32_t *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, const 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 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)
static void sub_qmf32_float_c(SynthFilterContext *synth, AVTXContext *imdct, av_tx_fn imdct_fn, 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 const int factor[16]
#define LOCAL_ALIGNED_32(t, v,...)
void(* synth_filter_float)(AVTXContext *imdct, float *synth_buf_ptr, int *synth_buf_offset, float synth_buf2[32], const float window[512], float out[32], float in[32], float scale, av_tx_fn imdct_fn)
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_64)(AVTXContext *imdct, float *synth_buf_ptr, int *synth_buf_offset, float synth_buf2[64], const float window[1024], float out[64], float in[64], float scale, av_tx_fn imdct_fn)
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])
void(* av_tx_fn)(AVTXContext *s, void *out, void *in, ptrdiff_t stride)
Function pointer to a function to perform the transform.
static const double coeff[2][5]