aboutsummaryrefslogtreecommitdiff
path: root/decoder/armv8
diff options
context:
space:
mode:
authorHarish Mahendrakar <harish.mahendrakar@ittiam.com>2018-05-09 14:23:00 -0700
committerRay Essick <essick@google.com>2018-06-05 13:04:22 -0700
commit8eb646f89b94cf6d0aa26e5bca39ba083a554965 (patch)
tree11bfb08fb1722b0b435c453aed777ab94687c31f /decoder/armv8
parent36ef96da451b4257b77e841b36d4dcbcb250500d (diff)
downloadlibxaac-8eb646f89b94cf6d0aa26e5bca39ba083a554965.tar.gz
Collected Cleanups from Ittiam
Test: CTS android.media.cts.DecoderTest{AacDrc,XheAac} Added __ARM_NEON__ check to generic function selector Bug: 80432407 Change-Id: I66c7879fda1369da88ccaea5f8792ea54657cdaf Added support to build for mips Bug: 80432286 Change-Id: I908029bbaddd3c1fbc39be1192926b56d981576e Add optimized versions for qmf_dec for armv7 and armv8 Separating common functions and platform specific functions in ixheaacd_qmf_dec.c. Platform specific functions are moved to qmf_dec in armv7, armv8 and generic folder. Bug: 80431870 Change-Id: I860cb79a1870e228d2108b7915418e1c003cefc5 Fixes for crashes reported by Fuzzer tool Bug: 109697676 Change-Id: I862fc054b99ee9d427d20596bc8d2e85522a7188
Diffstat (limited to 'decoder/armv8')
-rw-r--r--decoder/armv8/ixheaacd_qmf_dec_armv8.c (renamed from decoder/armv8/ixheaacd_qmf_dec.c)1074
1 files changed, 4 insertions, 1070 deletions
diff --git a/decoder/armv8/ixheaacd_qmf_dec.c b/decoder/armv8/ixheaacd_qmf_dec_armv8.c
index 27c26bd..ac1a300 100644
--- a/decoder/armv8/ixheaacd_qmf_dec.c
+++ b/decoder/armv8/ixheaacd_qmf_dec_armv8.c
@@ -19,7 +19,7 @@
*/
#include <string.h>
#include "ixheaacd_sbr_common.h"
-#include "ixheaacd_type_def.h"
+#include <ixheaacd_type_def.h>
#include "ixheaacd_constants.h"
#include "ixheaacd_basic_ops32.h"
@@ -64,18 +64,6 @@
#define ROUNDING_SPECTRA 1
#define HQ_SHIFT_VAL 4
-static PLATFORM_INLINE WORD32 ixheaacd_mult32x32in32_shift25(WORD32 a,
- WORD32 b) {
- WORD32 result;
- WORD64 temp_result;
-
- temp_result = (WORD64)a * (WORD64)b;
-
- result = (WORD32)(temp_result >> 25);
-
- return (result);
-}
-
VOID ixheaacd_dct3_32(WORD32 *input, WORD32 *output,
const WORD16 *main_twidle_fwd, const WORD16 *post_tbl,
const WORD16 *w_16, const WORD32 *p_table) {
@@ -241,124 +229,6 @@ VOID ixheaacd_dct3_32(WORD32 *input, WORD32 *output,
return;
}
-
-static PLATFORM_INLINE VOID ixheaacd_pretwdct2(WORD32 *inp, WORD32 *out_fwd) {
- WORD32 n;
- WORD32 *out_rev = out_fwd + DCT2_LEN - 1;
- for (n = 0; n < DCT2_LEN / 2; n++) {
- *out_fwd = *inp;
- inp++;
- *out_rev = *inp;
- out_fwd++;
-
- out_rev--;
- inp++;
- }
-
- return;
-}
-
-VOID ixheaacd_fftposttw(WORD32 *out,
- ia_qmf_dec_tables_struct *qmf_dec_tables_ptr) {
- int k;
- WORD32 *p_out_fwd, *ptr_out_rev;
- const WORD16 *twidle_fwd, *twidle_rev;
- WORD32 in1, in2, val1, val2;
-
- twidle_fwd = qmf_dec_tables_ptr->post_fft_tbl + 1;
- twidle_rev = qmf_dec_tables_ptr->post_fft_tbl + 15;
-
- p_out_fwd = out;
- ptr_out_rev = out + DCT2_LEN - 1;
-
- in1 = ((*p_out_fwd++) << 1);
- val1 = ((*p_out_fwd--) << 1);
-
- *p_out_fwd++ = in1;
- *p_out_fwd++ = val1;
-
- for (k = 1; k <= DCT2_LEN / 4; k++) {
- WORD32 temp[4];
- WORD16 twid_re, twid_im;
-
- temp[0] = *p_out_fwd++;
- temp[1] = *p_out_fwd--;
- temp[3] = *ptr_out_rev--;
- temp[2] = *ptr_out_rev++;
-
- in2 = temp[3] - temp[1];
- in1 = temp[3] + temp[1];
-
- temp[1] = temp[0] - temp[2];
- temp[3] = temp[0] + temp[2];
-
- twid_re = *twidle_fwd++;
- twid_im = *twidle_rev--;
- val1 = msu32x16in32_dual(in1, twid_re, temp[1], twid_im);
- val2 = mac32x16in32_dual(temp[1], twid_re, in1, twid_im);
- val1 = val1 << 1;
- val2 = val2 << 1;
-
- *p_out_fwd++ = temp[3] + val1;
- *p_out_fwd++ = in2 + val2;
-
- *ptr_out_rev-- = -in2 + val2;
- *ptr_out_rev-- = temp[3] - val1;
- }
-
- return;
-}
-
-VOID ixheaacd_posttwdct2(WORD32 *inp, WORD16 *out_fwd,
- ia_qmf_dec_tables_struct *qmf_dec_tables_ptr) {
- WORD32 k;
- WORD32 inp_re, inp_im, out_re, out_im, last_val, out_re1;
- WORD16 *out_fwd2, *out_rev2, *out_rev;
- WORD16 twid_re, twid_im;
- const WORD16 *twidle_fwd;
- WORD16 re1, im1, im2;
-
- out_rev = out_fwd + DCT2_LEN - 1;
- out_rev2 = out_fwd - 1;
- out_fwd2 = out_fwd + 65;
- out_re = *inp++;
- out_im = *inp++;
- out_re1 = (out_re + out_im) >> 1;
- re1 = ixheaacd_round16(ixheaacd_shl32(out_re1, (5 - 1)));
-
- *out_fwd++ = re1;
-
- last_val = (out_re - out_im);
-
- twidle_fwd = qmf_dec_tables_ptr->dct23_tw + 2;
- for (k = DCT2_LEN / 2 - 2; k >= 0; k--) {
- inp_re = *inp++;
- inp_im = *inp++;
-
- twid_re = *twidle_fwd++;
- twid_im = *twidle_fwd++;
- out_re = msu32x16in32_dual(inp_re, twid_re, inp_im, twid_im);
- out_im = mac32x16in32_dual(inp_im, twid_re, inp_re, twid_im);
- re1 = ixheaacd_round16(ixheaacd_shl32(out_re, (5 - 1)));
- im1 = ixheaacd_round16(ixheaacd_shl32(out_im, (5 - 1)));
- im2 = ixheaacd_negate16(im1);
-
- *out_fwd++ = re1;
- *out_rev2-- = re1;
- *out_rev-- = im1;
- *out_fwd2++ = im2;
- }
- twid_re = *twidle_fwd++;
-
- out_re = ixheaacd_mult32x16in32(last_val, twid_re);
- re1 = ixheaacd_round16(ixheaacd_shl32(out_re, (5 - 1)));
-
- *out_fwd++ = re1;
- *out_rev2-- = re1;
-
- return;
-}
-
VOID ixheaacd_dct2_64(WORD32 *x, WORD32 *X,
ia_qmf_dec_tables_struct *qmf_dec_tables_ptr,
WORD16 *filter_states) {
@@ -377,169 +247,6 @@ VOID ixheaacd_dct2_64(WORD32 *x, WORD32 *X,
return;
}
-static PLATFORM_INLINE VOID ixheaacd_pretwdct2_32(WORD32 *inp, WORD32 *out_fwd,
- int dct2_len) {
- WORD32 n;
-
- WORD32 *out_rev = out_fwd + dct2_len - 1;
- for (n = dct2_len / 2 - 1; n >= 0; n--) {
- *out_fwd = *inp;
- inp++;
- *out_rev = *inp;
- out_fwd++;
-
- out_rev--;
- inp++;
- }
-
- return;
-}
-
-static PLATFORM_INLINE VOID ixheaacd_fftposttw_32(
- WORD32 *out, int dct2_len, ia_qmf_dec_tables_struct *qmf_dec_tables_ptr) {
- int k;
- WORD32 *ptr_out_fwd, *ptr_out_rev;
- const WORD16 *twidle_fwd, *twidle_rev;
- WORD32 in1, in2, val1, val2;
-
- twidle_fwd = qmf_dec_tables_ptr->post_fft_tbl + 2;
- twidle_rev = qmf_dec_tables_ptr->post_fft_tbl + 14;
-
- ptr_out_fwd = out;
- ptr_out_rev = out + dct2_len - 1;
-
- in1 = ((*ptr_out_fwd++) << 1);
- val1 = ((*ptr_out_fwd--) << 1);
-
- *ptr_out_fwd++ = in1;
- *ptr_out_fwd++ = val1;
-
- for (k = dct2_len / 4 - 1; k >= 0; k--) {
- WORD32 temp0, temp1, temp2, temp3;
- WORD16 twid_re, twid_im;
-
- temp0 = *ptr_out_fwd++;
- temp1 = *ptr_out_fwd--;
- temp3 = *ptr_out_rev--;
- temp2 = *ptr_out_rev++;
-
- in1 = temp1 + temp3;
- in2 = -temp1 + temp3;
-
- temp1 = temp0 - temp2;
- temp3 = temp0 + temp2;
-
- twid_re = *twidle_fwd;
- twidle_fwd += 2;
-
- twid_im = *twidle_rev;
- twidle_rev -= 2;
-
- val1 = ixheaacd_mult32x16in32(in1, twid_re) -
- ixheaacd_mult32x16in32(temp1, twid_im);
- val2 = ixheaacd_mult32x16in32(temp1, twid_re) +
- ixheaacd_mult32x16in32(in1, twid_im);
-
- val1 = val1 << 1;
- val2 = val2 << 1;
-
- *ptr_out_fwd++ = temp3 + val1;
- *ptr_out_fwd++ = in2 + val2;
-
- *ptr_out_rev-- = -in2 + val2;
- *ptr_out_rev-- = temp3 - val1;
- }
-
- return;
-}
-
-static PLATFORM_INLINE VOID
-ixheaacd_posttwdct2_32(WORD32 *inp, WORD16 *out_fwd,
- ia_qmf_dec_tables_struct *qmf_dec_tables_ptr) {
- int k;
- WORD32 inp_re, out_re, out_im, last_val, out_re1;
- WORD16 *out_rev, *out_rev2, *out_fwd2;
- WORD16 twid_re, twid_im;
- const WORD16 *twidle_fwd;
- WORD16 re1, im1, im2;
- WORD32 rounding_fac = 0x8000;
-
- out_rev = out_fwd + 32 - 1;
- out_rev2 = out_fwd - 1;
- out_fwd2 = out_fwd + 32 + 1;
- out_fwd[32] = 0;
- out_re = *inp++;
- out_im = *inp++;
-
- out_re1 = (out_re + out_im) >> 1;
- re1 = ixheaacd_round16(ixheaacd_shl32_sat(out_re1, (5 - 1)));
- *out_fwd++ = re1;
- last_val = (out_re - out_im);
-
- twidle_fwd = qmf_dec_tables_ptr->dct23_tw + 4;
- for (k = 14; k >= 0; k--) {
- WORD32 temp1, temp2;
- inp_re = *inp++;
- twid_re = *twidle_fwd++;
- twid_im = *twidle_fwd;
- twidle_fwd += 3;
-
- temp1 = ixheaacd_mult32x16in32(inp_re, twid_re);
- temp2 = ixheaacd_mult32x16in32(inp_re, twid_im);
-
- inp_re = *inp++;
-
- out_re = ixheaacd_sub32(temp1, ixheaacd_mult32x16in32(inp_re, twid_im));
- out_im = ixheaacd_add32(ixheaacd_mult32x16in32(inp_re, twid_re), temp2);
-
- out_re = ixheaacd_add32_sat(out_re, out_re);
- out_im = ixheaacd_add32_sat(out_im, out_im);
- out_re = ixheaacd_add32_sat(out_re, out_re);
- out_im = ixheaacd_add32_sat(out_im, out_im);
- out_re = ixheaacd_add32_sat(out_re, out_re);
- out_im = ixheaacd_add32_sat(out_im, out_im);
- out_re = ixheaacd_add32_sat(out_re, out_re);
- out_im = ixheaacd_add32_sat(out_im, out_im);
- out_re = ixheaacd_add32_sat(out_re, rounding_fac);
- out_im = ixheaacd_add32_sat(out_im, rounding_fac);
- re1 = (out_re >> 16);
- im1 = (out_im >> 16);
- im2 = ixheaacd_negate16(im1);
-
- *out_fwd++ = re1;
- *out_rev2-- = re1;
- *out_rev-- = im1;
- *out_fwd2++ = im2;
- }
- twid_re = *twidle_fwd++;
-
- out_re = ixheaacd_mult32x16in32(last_val, twid_re);
- re1 = ixheaacd_round16(ixheaacd_shl32_sat(out_re, (5 - 1)));
- *out_fwd++ = re1;
- *out_rev2-- = re1;
-
- return;
-}
-
-VOID ixheaacd_dct2_32(WORD32 *inp, WORD32 *out,
- ia_qmf_dec_tables_struct *qmf_dec_tables_ptr,
- WORD16 *filter_states) {
- WORD32 *output;
-
- output = out + 16;
- filter_states = filter_states + 16;
- ixheaacd_pretwdct2_32(inp, output, 32);
-
- ixheaacd_radix4bfly(qmf_dec_tables_ptr->w_16, output, 1, 4);
- ixheaacd_postradixcompute4(inp, output, qmf_dec_tables_ptr->dig_rev_table4_16,
- 16);
- ixheaacd_fftposttw_32(inp, 32, qmf_dec_tables_ptr);
-
- ixheaacd_posttwdct2_32(inp, filter_states, qmf_dec_tables_ptr);
-
- return;
-}
-
VOID ixheaacd_cos_sin_mod(WORD32 *subband,
ia_sbr_qmf_filter_bank_struct *qmf_bank,
WORD16 *p_twiddle, WORD32 *p_dig_rev_tbl) {
@@ -620,316 +327,6 @@ VOID ixheaacd_fwd_modulation(const WORD32 *p_time_in1, WORD32 *real_subband,
}
}
-VOID ixheaacd_sbr_qmfanal32_winadd(WORD16 *inp1, WORD16 *inp2, WORD16 *p_qmf1,
- WORD16 *p_qmf2, WORD32 *p_out) {
- WORD32 n;
-
- for (n = 0; n < 32; n += 2) {
- WORD32 accu;
-
- accu = ixheaacd_mult16x16in32(inp1[n + 0], p_qmf1[2 * (n + 0)]);
- accu = ixheaacd_add32(
- accu, ixheaacd_mult16x16in32(inp1[n + 64], p_qmf1[2 * (n + 64)]));
- accu = ixheaacd_add32(
- accu, ixheaacd_mult16x16in32(inp1[n + 128], p_qmf1[2 * (n + 128)]));
- accu = ixheaacd_add32(
- accu, ixheaacd_mult16x16in32(inp1[n + 192], p_qmf1[2 * (n + 192)]));
- accu = ixheaacd_add32(
- accu, ixheaacd_mult16x16in32(inp1[n + 256], p_qmf1[2 * (n + 256)]));
- p_out[n] = accu;
-
- accu = ixheaacd_mult16x16in32(inp1[n + 1 + 0], p_qmf1[2 * (n + 1 + 0)]);
- accu = ixheaacd_add32_sat(
- accu,
- ixheaacd_mult16x16in32(inp1[n + 1 + 64], p_qmf1[2 * (n + 1 + 64)]));
- accu = ixheaacd_add32_sat(
- accu,
- ixheaacd_mult16x16in32(inp1[n + 1 + 128], p_qmf1[2 * (n + 1 + 128)]));
- accu = ixheaacd_add32_sat(
- accu,
- ixheaacd_mult16x16in32(inp1[n + 1 + 192], p_qmf1[2 * (n + 1 + 192)]));
- accu = ixheaacd_add32_sat(
- accu,
- ixheaacd_mult16x16in32(inp1[n + 1 + 256], p_qmf1[2 * (n + 1 + 256)]));
- p_out[n + 1] = accu;
-
- accu = ixheaacd_mult16x16in32(inp2[n + 0], p_qmf2[2 * (n + 0)]);
- accu = ixheaacd_add32(
- accu, ixheaacd_mult16x16in32(inp2[n + 64], p_qmf2[2 * (n + 64)]));
- accu = ixheaacd_add32(
- accu, ixheaacd_mult16x16in32(inp2[n + 128], p_qmf2[2 * (n + 128)]));
- accu = ixheaacd_add32(
- accu, ixheaacd_mult16x16in32(inp2[n + 192], p_qmf2[2 * (n + 192)]));
- accu = ixheaacd_add32(
- accu, ixheaacd_mult16x16in32(inp2[n + 256], p_qmf2[2 * (n + 256)]));
- p_out[n + 32] = accu;
-
- accu = ixheaacd_mult16x16in32(inp2[n + 1 + 0], p_qmf2[2 * (n + 1 + 0)]);
- accu = ixheaacd_add32_sat(
- accu,
- ixheaacd_mult16x16in32(inp2[n + 1 + 64], p_qmf2[2 * (n + 1 + 64)]));
- accu = ixheaacd_add32_sat(
- accu,
- ixheaacd_mult16x16in32(inp2[n + 1 + 128], p_qmf2[2 * (n + 1 + 128)]));
- accu = ixheaacd_add32_sat(
- accu,
- ixheaacd_mult16x16in32(inp2[n + 1 + 192], p_qmf2[2 * (n + 1 + 192)]));
- accu = ixheaacd_add32_sat(
- accu,
- ixheaacd_mult16x16in32(inp2[n + 1 + 256], p_qmf2[2 * (n + 1 + 256)]));
- p_out[n + 1 + 32] = accu;
- }
-}
-
-VOID ixheaacd_sbr_qmfanal32_winadd_eld(WORD16 *inp1, WORD16 *inp2,
- WORD16 *p_qmf1, WORD16 *p_qmf2,
- WORD32 *p_out) {
- WORD32 n;
-
- for (n = 0; n < 32; n += 2) {
- WORD32 accu;
- accu = ixheaacd_mult16x16in32(inp1[n + 0], p_qmf1[(n + 0)]);
- accu = ixheaacd_add32(
- accu, ixheaacd_mult16x16in32(inp1[n + 64], p_qmf1[(n + 64)]));
- accu = ixheaacd_add32(
- accu, ixheaacd_mult16x16in32(inp1[n + 128], p_qmf1[(n + 128)]));
- accu = ixheaacd_add32(
- accu, ixheaacd_mult16x16in32(inp1[n + 192], p_qmf1[(n + 192)]));
- accu = ixheaacd_add32(
- accu, ixheaacd_mult16x16in32(inp1[n + 256], p_qmf1[(n + 256)]));
- p_out[n] = accu;
-
- accu = ixheaacd_mult16x16in32(inp1[n + 1 + 0], p_qmf1[(n + 1 + 0)]);
- accu = ixheaacd_add32_sat(
- accu, ixheaacd_mult16x16in32(inp1[n + 1 + 64], p_qmf1[(n + 1 + 64)]));
- accu = ixheaacd_add32_sat(
- accu, ixheaacd_mult16x16in32(inp1[n + 1 + 128], p_qmf1[(n + 1 + 128)]));
- accu = ixheaacd_add32_sat(
- accu, ixheaacd_mult16x16in32(inp1[n + 1 + 192], p_qmf1[(n + 1 + 192)]));
- accu = ixheaacd_add32_sat(
- accu, ixheaacd_mult16x16in32(inp1[n + 1 + 256], p_qmf1[(n + 1 + 256)]));
- p_out[n + 1] = accu;
-
- accu = ixheaacd_mult16x16in32(inp2[n + 0], p_qmf2[(n + 0)]);
- accu = ixheaacd_add32(
- accu, ixheaacd_mult16x16in32(inp2[n + 64], p_qmf2[(n + 64)]));
- accu = ixheaacd_add32(
- accu, ixheaacd_mult16x16in32(inp2[n + 128], p_qmf2[(n + 128)]));
- accu = ixheaacd_add32(
- accu, ixheaacd_mult16x16in32(inp2[n + 192], p_qmf2[(n + 192)]));
- accu = ixheaacd_add32(
- accu, ixheaacd_mult16x16in32(inp2[n + 256], p_qmf2[(n + 256)]));
- p_out[n + 32] = accu;
-
- accu = ixheaacd_mult16x16in32(inp2[n + 1 + 0], p_qmf2[(n + 1 + 0)]);
- accu = ixheaacd_add32_sat(
- accu, ixheaacd_mult16x16in32(inp2[n + 1 + 64], p_qmf2[(n + 1 + 64)]));
- accu = ixheaacd_add32_sat(
- accu, ixheaacd_mult16x16in32(inp2[n + 1 + 128], p_qmf2[(n + 1 + 128)]));
- accu = ixheaacd_add32_sat(
- accu, ixheaacd_mult16x16in32(inp2[n + 1 + 192], p_qmf2[(n + 1 + 192)]));
- accu = ixheaacd_add32_sat(
- accu, ixheaacd_mult16x16in32(inp2[n + 1 + 256], p_qmf2[(n + 1 + 256)]));
- p_out[n + 1 + 32] = accu;
- }
-}
-
-VOID ixheaacd_esbr_qmfanal32_winadd(WORD32 *inp1, WORD32 *inp2, WORD32 *p_qmf1,
- WORD32 *p_qmf2, WORD32 *p_out,
- WORD32 num_band_anal_qmf) {
- WORD32 n;
- WORD64 accu;
-
- if (num_band_anal_qmf == 32) {
- for (n = 0; n < num_band_anal_qmf; n += 2) {
- accu = ixheaacd_mult64(inp1[n + 0], p_qmf1[2 * (n + 0)]);
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp1[n + 2 * num_band_anal_qmf],
- p_qmf1[2 * (n + 2 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp1[n + 4 * num_band_anal_qmf],
- p_qmf1[2 * (n + 4 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp1[n + 6 * num_band_anal_qmf],
- p_qmf1[2 * (n + 6 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp1[n + 8 * num_band_anal_qmf],
- p_qmf1[2 * (n + 8 * num_band_anal_qmf)]));
- p_out[n] = (WORD32)(accu >> 31);
-
- accu = ixheaacd_mult64(inp1[n + 1 + 0], p_qmf1[2 * (n + 1 + 0)]);
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp1[n + 1 + 2 * num_band_anal_qmf],
- p_qmf1[2 * (n + 1 + 2 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp1[n + 1 + 4 * num_band_anal_qmf],
- p_qmf1[2 * (n + 1 + 4 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp1[n + 1 + 6 * num_band_anal_qmf],
- p_qmf1[2 * (n + 1 + 6 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp1[n + 1 + 8 * num_band_anal_qmf],
- p_qmf1[2 * (n + 1 + 8 * num_band_anal_qmf)]));
- p_out[n + 1] = (WORD32)(accu >> 31);
-
- accu = ixheaacd_mult64(inp2[n + 0], p_qmf2[2 * (n + 0)]);
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp2[n + 2 * num_band_anal_qmf],
- p_qmf2[2 * (n + 2 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp2[n + 4 * num_band_anal_qmf],
- p_qmf2[2 * (n + 4 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp2[n + 6 * num_band_anal_qmf],
- p_qmf2[2 * (n + 6 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp2[n + 8 * num_band_anal_qmf],
- p_qmf2[2 * (n + 8 * num_band_anal_qmf)]));
- p_out[n + num_band_anal_qmf] = (WORD32)(accu >> 31);
-
- accu = ixheaacd_mult64(inp2[n + 1 + 0], p_qmf2[2 * (n + 1 + 0)]);
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp2[n + 1 + 2 * num_band_anal_qmf],
- p_qmf2[2 * (n + 1 + 2 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp2[n + 1 + 4 * num_band_anal_qmf],
- p_qmf2[2 * (n + 1 + 4 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp2[n + 1 + 6 * num_band_anal_qmf],
- p_qmf2[2 * (n + 1 + 6 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp2[n + 1 + 8 * num_band_anal_qmf],
- p_qmf2[2 * (n + 1 + 8 * num_band_anal_qmf)]));
- p_out[n + 1 + num_band_anal_qmf] = (WORD32)(accu >> 31);
- }
- } else if (num_band_anal_qmf == 24) {
- for (n = 0; n < num_band_anal_qmf; n += 2) {
- accu = ixheaacd_mult64(inp1[n + 0], p_qmf1[(n + 0)]);
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp1[n + 2 * num_band_anal_qmf],
- p_qmf1[(n + 2 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp1[n + 4 * num_band_anal_qmf],
- p_qmf1[(n + 4 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp1[n + 6 * num_band_anal_qmf],
- p_qmf1[(n + 6 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp1[n + 8 * num_band_anal_qmf],
- p_qmf1[(n + 8 * num_band_anal_qmf)]));
- p_out[n] = (WORD32)(accu >> 31);
-
- accu = ixheaacd_mult64(inp1[n + 1 + 0], p_qmf1[(n + 1 + 0)]);
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp1[n + 1 + 2 * num_band_anal_qmf],
- p_qmf1[(n + 1 + 2 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp1[n + 1 + 4 * num_band_anal_qmf],
- p_qmf1[(n + 1 + 4 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp1[n + 1 + 6 * num_band_anal_qmf],
- p_qmf1[(n + 1 + 6 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp1[n + 1 + 8 * num_band_anal_qmf],
- p_qmf1[(n + 1 + 8 * num_band_anal_qmf)]));
- p_out[n + 1] = (WORD32)(accu >> 31);
-
- accu = ixheaacd_mult64(inp2[n + 0], p_qmf2[(n + 0)]);
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp2[n + 2 * num_band_anal_qmf],
- p_qmf2[(n + 2 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp2[n + 4 * num_band_anal_qmf],
- p_qmf2[(n + 4 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp2[n + 6 * num_band_anal_qmf],
- p_qmf2[(n + 6 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp2[n + 8 * num_band_anal_qmf],
- p_qmf2[(n + 8 * num_band_anal_qmf)]));
- p_out[n + num_band_anal_qmf] = (WORD32)(accu >> 31);
-
- accu = ixheaacd_mult64(inp2[n + 1 + 0], p_qmf2[(n + 1 + 0)]);
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp2[n + 1 + 2 * num_band_anal_qmf],
- p_qmf2[(n + 1 + 2 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp2[n + 1 + 4 * num_band_anal_qmf],
- p_qmf2[(n + 1 + 4 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp2[n + 1 + 6 * num_band_anal_qmf],
- p_qmf2[(n + 1 + 6 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp2[n + 1 + 8 * num_band_anal_qmf],
- p_qmf2[(n + 1 + 8 * num_band_anal_qmf)]));
- p_out[n + 1 + num_band_anal_qmf] = (WORD32)(accu >> 31);
- }
-
- } else {
- for (n = 0; n < num_band_anal_qmf; n += 2) {
- accu = ixheaacd_mult64(inp1[n + 0], p_qmf1[4 * (n + 0)]);
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp1[n + 2 * num_band_anal_qmf],
- p_qmf1[4 * (n + 2 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp1[n + 4 * num_band_anal_qmf],
- p_qmf1[4 * (n + 4 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp1[n + 6 * num_band_anal_qmf],
- p_qmf1[4 * (n + 6 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp1[n + 8 * num_band_anal_qmf],
- p_qmf1[4 * (n + 8 * num_band_anal_qmf)]));
- p_out[n] = (WORD32)(accu >> 31);
-
- accu = ixheaacd_mult64(inp1[n + 1 + 0], p_qmf1[4 * (n + 1 + 0)]);
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp1[n + 1 + 2 * num_band_anal_qmf],
- p_qmf1[4 * (n + 1 + 2 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp1[n + 1 + 4 * num_band_anal_qmf],
- p_qmf1[4 * (n + 1 + 4 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp1[n + 1 + 6 * num_band_anal_qmf],
- p_qmf1[4 * (n + 1 + 6 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp1[n + 1 + 8 * num_band_anal_qmf],
- p_qmf1[4 * (n + 1 + 8 * num_band_anal_qmf)]));
- p_out[n + 1] = (WORD32)(accu >> 31);
-
- accu = ixheaacd_mult64(inp2[n + 0], p_qmf2[4 * (n + 0)]);
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp2[n + 2 * num_band_anal_qmf],
- p_qmf2[4 * (n + 2 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp2[n + 4 * num_band_anal_qmf],
- p_qmf2[4 * (n + 4 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp2[n + 6 * num_band_anal_qmf],
- p_qmf2[4 * (n + 6 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp2[n + 8 * num_band_anal_qmf],
- p_qmf2[4 * (n + 8 * num_band_anal_qmf)]));
- p_out[n + num_band_anal_qmf] = (WORD32)(accu >> 31);
-
- accu = ixheaacd_mult64(inp2[n + 1 + 0], p_qmf2[4 * (n + 1 + 0)]);
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp2[n + 1 + 2 * num_band_anal_qmf],
- p_qmf2[4 * (n + 1 + 2 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp2[n + 1 + 4 * num_band_anal_qmf],
- p_qmf2[4 * (n + 1 + 4 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp2[n + 1 + 6 * num_band_anal_qmf],
- p_qmf2[4 * (n + 1 + 6 * num_band_anal_qmf)]));
- accu = ixheaacd_add64(
- accu, ixheaacd_mult64(inp2[n + 1 + 8 * num_band_anal_qmf],
- p_qmf2[4 * (n + 1 + 8 * num_band_anal_qmf)]));
- p_out[n + 1 + num_band_anal_qmf] = (WORD32)(accu >> 31);
- }
- }
-}
-
VOID ixheaacd_cplx_anal_qmffilt(const WORD16 *time_sample_buf,
ia_sbr_scale_fact_struct *sbr_scale_factor,
WORD32 **qmf_real, WORD32 **qmf_imag,
@@ -1074,8 +471,7 @@ VOID ixheaacd_cplx_anal_qmffilt(const WORD16 *time_sample_buf,
}
}
-static PLATFORM_INLINE VOID
-ixheaacd_inv_modulation_lp(WORD32 *qmf_real, WORD16 *filter_states,
+VOID ixheaacd_inv_modulation_lp(WORD32 *qmf_real, WORD16 *filter_states,
ia_sbr_qmf_filter_bank_struct *syn_qmf,
ia_qmf_dec_tables_struct *qmf_dec_tables_ptr) {
WORD32 L = syn_qmf->no_channels;
@@ -1094,7 +490,7 @@ ixheaacd_inv_modulation_lp(WORD32 *qmf_real, WORD16 *filter_states,
filter_states[3 * M] = 0;
}
-static VOID ixheaacd_inv_emodulation(
+VOID ixheaacd_inv_emodulation(
WORD32 *qmf_real, ia_sbr_qmf_filter_bank_struct *syn_qmf,
ia_qmf_dec_tables_struct *qmf_dec_tables_ptr) {
ixheaacd_cos_sin_mod(qmf_real, syn_qmf, (WORD16 *)qmf_dec_tables_ptr->w1024,
@@ -1707,6 +1103,7 @@ VOID ixheaacd_esbr_cos_sin_mod(WORD32 *subband,
}
}
+
VOID ixheaacd_esbr_fwd_modulation(
const WORD32 *time_sample_buf, WORD32 *real_subband, WORD32 *imag_subband,
ia_sbr_qmf_filter_bank_struct *qmf_bank,
@@ -1753,17 +1150,6 @@ VOID ixheaacd_esbr_fwd_modulation(
}
}
-VOID ixheaacd_esbr_inv_modulation(
- WORD32 *qmf_real, ia_sbr_qmf_filter_bank_struct *syn_qmf,
- ia_qmf_dec_tables_struct *qmf_dec_tables_ptr) {
- ixheaacd_esbr_cos_sin_mod(qmf_real, syn_qmf, qmf_dec_tables_ptr->esbr_w_32,
- qmf_dec_tables_ptr->dig_rev_table2_32);
-}
-
-VOID ixheaacd_sbr_qmfsyn64_winadd(WORD16 *tmp1, WORD16 *tmp2, WORD16 *inp1,
- WORD16 *sample_buffer, FLAG shift,
- WORD32 ch_fac);
-
VOID ixheaacd_esbr_qmfsyn64_winadd(WORD32 *tmp1, WORD32 *tmp2, WORD32 *inp1,
WORD32 *sample_buffer, WORD32 ch_fac) {
WORD32 k;
@@ -1797,45 +1183,6 @@ VOID ixheaacd_esbr_qmfsyn64_winadd(WORD32 *tmp1, WORD32 *tmp2, WORD32 *inp1,
}
}
-VOID ixheaacd_sbr_qmfsyn32_winadd(WORD16 *tmp1, WORD16 *tmp2, WORD16 *inp1,
- WORD16 *sample_buffer, FLAG shift,
- WORD32 ch_fac) {
- WORD32 k;
- WORD32 rounding_fac = 0x8000;
- rounding_fac = rounding_fac >> shift;
-
- for (k = 0; k < 32; k++) {
- WORD32 syn_out = rounding_fac;
-
- syn_out = ixheaacd_add32(
- syn_out, ixheaacd_mult16x16in32(tmp1[0 + k], inp1[2 * (k + 0)]));
- syn_out = ixheaacd_add32(
- syn_out, ixheaacd_mult16x16in32(tmp1[128 + k], inp1[2 * (k + 64)]));
- syn_out = ixheaacd_add32(
- syn_out, ixheaacd_mult16x16in32(tmp1[256 + k], inp1[2 * (k + 128)]));
- syn_out = ixheaacd_add32(
- syn_out, ixheaacd_mult16x16in32(tmp1[384 + k], inp1[2 * (k + 192)]));
- syn_out = ixheaacd_add32(
- syn_out, ixheaacd_mult16x16in32(tmp1[512 + k], inp1[2 * (k + 256)]));
-
- syn_out = ixheaacd_add32(
- syn_out, ixheaacd_mult16x16in32(tmp2[64 + k], inp1[2 * (k + 32)]));
- syn_out = ixheaacd_add32(
- syn_out, ixheaacd_mult16x16in32(tmp2[192 + k], inp1[2 * (k + 96)]));
- syn_out = ixheaacd_add32(
- syn_out, ixheaacd_mult16x16in32(tmp2[320 + k], inp1[2 * (k + 160)]));
- syn_out = ixheaacd_add32(
- syn_out, ixheaacd_mult16x16in32(tmp2[448 + k], inp1[2 * (k + 224)]));
- syn_out = ixheaacd_add32(
- syn_out, ixheaacd_mult16x16in32(tmp2[576 + k], inp1[2 * (k + 288)]));
- syn_out = ixheaacd_add32_sat(syn_out, syn_out);
- if (shift == 2) {
- syn_out = ixheaacd_add32_sat(syn_out, syn_out);
- }
- sample_buffer[ch_fac * k] = (syn_out >> 16);
- }
-}
-
VOID ixheaacd_shiftrountine(WORD32 *qmf_real, WORD32 *qmf_imag, WORD32 len,
WORD32 common_shift) {
WORD32 treal, timag;
@@ -1896,336 +1243,6 @@ VOID ixheaacd_shiftrountine_with_rnd_hq(WORD32 *qmf_real, WORD32 *qmf_imag,
}
}
-void ixheaacd_sbr_pre_twiddle(WORD32 *pXre, WORD32 *pXim, WORD16 *pTwiddles) {
- int k;
-
- for (k = 62; k >= 0; k--) {
- WORD32 Xre = *pXre;
- WORD32 Xim = *pXim;
-
- WORD16 ixheaacd_cosine = *pTwiddles++;
-
- WORD16 ixheaacd_sine = *pTwiddles++;
-
- WORD32 re, im;
-
- re = ixheaacd_mac32x16in32_shl(
- ixheaacd_mult32x16in32_shl(Xre, ixheaacd_cosine), Xim, ixheaacd_sine);
- im = ixheaacd_sub32(ixheaacd_mult32x16in32_shl(Xim, ixheaacd_cosine),
- ixheaacd_mult32x16in32_shl(Xre, ixheaacd_sine));
-
- *pXre++ = re;
- *pXim++ = im;
- }
-}
-
-VOID ixheaacd_cplx_synt_qmffilt(
- WORD32 **qmf_real, WORD32 **qmf_imag, WORD32 split,
- ia_sbr_scale_fact_struct *sbr_scale_factor, WORD16 *time_out,
- ia_sbr_qmf_filter_bank_struct *qmf_bank, ia_ps_dec_struct *ptr_ps_dec,
- FLAG active, FLAG low_pow_flag, ia_sbr_tables_struct *sbr_tables_ptr,
- ixheaacd_misc_tables *pstr_common_tables, WORD32 ch_fac, FLAG drc_on,
- WORD32 drc_sbr_factors[][64], WORD32 audio_object_type) {
- WORD32 i;
-
- WORD32 code_scale_factor;
- WORD32 scale_factor;
- WORD32 out_scale_factor;
- WORD32 low_band_scale_factor;
- WORD32 high_band_scale_factor;
- WORD16 *filter_states = qmf_bank->filter_states;
- WORD32 **ptr_qmf_imag_temp;
- WORD32 qmf_real2[2 * NO_SYNTHESIS_CHANNELS];
-
- WORD32 no_synthesis_channels = qmf_bank->no_channels;
- WORD32 p1;
-
- WORD16 *fp1;
- WORD16 *fp2;
-
- WORD32 sixty4 = NO_SYNTHESIS_CHANNELS;
- WORD32 thirty2 = qmf_bank->no_channels;
-
- WORD16 *filter_coeff;
- WORD32 num_time_slots = qmf_bank->num_time_slots;
- WORD32 ixheaacd_drc_offset;
- WORD32 ov_lb_scale = sbr_scale_factor->ov_lb_scale;
- WORD32 lb_scale = sbr_scale_factor->lb_scale;
- WORD32 st_syn_scale = sbr_scale_factor->st_syn_scale;
- WORD32 ov_lb_shift, lb_shift, hb_shift;
-
- WORD32 *qmf_real_tmp = qmf_real2;
- WORD32 *qmf_imag_tmp = &qmf_real2[NO_SYNTHESIS_CHANNELS];
- WORD32 env = 0;
-
- WORD32 common_shift;
-
- if (no_synthesis_channels == 32) {
- qmf_bank->cos_twiddle =
- (WORD16 *)sbr_tables_ptr->qmf_dec_tables_ptr->sbr_sin_cos_twiddle_l32;
- qmf_bank->alt_sin_twiddle =
- (WORD16 *)sbr_tables_ptr->qmf_dec_tables_ptr->sbr_alt_sin_twiddle_l32;
- qmf_bank->t_cos =
- (WORD16 *)
- sbr_tables_ptr->qmf_dec_tables_ptr->sbr_cos_sin_twiddle_ds_l32;
- } else {
- qmf_bank->cos_twiddle =
- (WORD16 *)sbr_tables_ptr->qmf_dec_tables_ptr->sbr_sin_cos_twiddle_l64;
- qmf_bank->alt_sin_twiddle =
- (WORD16 *)sbr_tables_ptr->qmf_dec_tables_ptr->sbr_alt_sin_twiddle_l64;
- }
- if (audio_object_type != AOT_ER_AAC_ELD &&
- audio_object_type != AOT_ER_AAC_LD) {
- qmf_bank->filter_pos_syn +=
- (sbr_tables_ptr->qmf_dec_tables_ptr->qmf_c - qmf_bank->p_filter);
- qmf_bank->p_filter = sbr_tables_ptr->qmf_dec_tables_ptr->qmf_c;
- } else {
- qmf_bank->filter_pos_syn +=
- (sbr_tables_ptr->qmf_dec_tables_ptr->qmf_c_eld - qmf_bank->p_filter);
- qmf_bank->p_filter = sbr_tables_ptr->qmf_dec_tables_ptr->qmf_c_eld;
- }
-
- fp1 = &filter_states[0];
- fp2 = fp1 + no_synthesis_channels;
-
- if (audio_object_type == AOT_ER_AAC_ELD ||
- audio_object_type == AOT_ER_AAC_LD) {
- fp1 = qmf_bank->fp1_syn;
- fp2 = qmf_bank->fp2_syn;
- sixty4 = qmf_bank->sixty4;
- }
-
- filter_coeff = qmf_bank->filter_pos_syn;
-
- if (active) {
- code_scale_factor = scale_factor = sbr_scale_factor->ps_scale;
- } else {
- code_scale_factor = ixheaacd_min32(lb_scale, ov_lb_scale);
- scale_factor = sbr_scale_factor->hb_scale;
- }
-
- low_band_scale_factor = (st_syn_scale - code_scale_factor);
- high_band_scale_factor = (st_syn_scale - scale_factor);
-
- p1 = 0;
-
- if (low_pow_flag)
-
- {
- ov_lb_shift = (st_syn_scale - ov_lb_scale) - 4;
- lb_shift = (st_syn_scale - lb_scale) - 4;
- hb_shift = high_band_scale_factor - 4;
- out_scale_factor = -((sbr_scale_factor->st_syn_scale - 1));
- ptr_qmf_imag_temp = 0;
-
- }
-
- else {
- out_scale_factor = -((sbr_scale_factor->st_syn_scale - 3));
- if (active) {
- ov_lb_shift = (sbr_scale_factor->ps_scale - ov_lb_scale);
- lb_shift = (sbr_scale_factor->ps_scale - lb_scale);
- hb_shift = (sbr_scale_factor->ps_scale - sbr_scale_factor->hb_scale);
- common_shift = low_band_scale_factor - 8;
-
- } else {
- if (audio_object_type != AOT_ER_AAC_ELD &&
- audio_object_type != AOT_ER_AAC_LD) {
- ov_lb_shift = (st_syn_scale - ov_lb_scale) - 8;
- lb_shift = (st_syn_scale - lb_scale) - 8;
- hb_shift = high_band_scale_factor - 8;
- } else {
- ov_lb_shift = (st_syn_scale - ov_lb_scale) - 7;
- lb_shift = (st_syn_scale - lb_scale) - 7;
- hb_shift = high_band_scale_factor - 7;
- }
- common_shift = 0;
- }
- ptr_qmf_imag_temp = qmf_imag;
- }
-
- {
- if (ov_lb_shift == lb_shift) {
- (*ixheaacd_adjust_scale)(qmf_real, ptr_qmf_imag_temp, 0, qmf_bank->lsb, 0,
- num_time_slots, ov_lb_shift, low_pow_flag);
-
- } else {
- (*ixheaacd_adjust_scale)(qmf_real, ptr_qmf_imag_temp, 0, qmf_bank->lsb, 0,
- split, ov_lb_shift, low_pow_flag);
-
- (*ixheaacd_adjust_scale)(qmf_real, ptr_qmf_imag_temp, 0, qmf_bank->lsb,
- split, num_time_slots, lb_shift, low_pow_flag);
- }
-
- (*ixheaacd_adjust_scale)(qmf_real, ptr_qmf_imag_temp, qmf_bank->lsb,
- qmf_bank->usb, 0, num_time_slots, hb_shift,
- low_pow_flag);
- }
-
- ixheaacd_drc_offset = qmf_bank->ixheaacd_drc_offset;
-
- if (1 == drc_on) {
- for (i = 0; i < num_time_slots; i++) {
- WORD32 loop_val;
- for (loop_val = 0; loop_val < 64; loop_val++) {
- qmf_real[i][loop_val] = ixheaacd_mult32x32in32_shift25(
- qmf_real[i][loop_val], drc_sbr_factors[6 + i][loop_val]);
- }
- }
- }
-
- if (low_pow_flag)
-
- {
- WORD16 *fptemp;
-
- VOID(*sbr_qmf_syn_winadd)
- (WORD16 *, WORD16 *, WORD16 *, WORD16 *, FLAG, WORD32);
- ia_qmf_dec_tables_struct *qmf_tab_ptr = sbr_tables_ptr->qmf_dec_tables_ptr;
-
- if (no_synthesis_channels == NO_SYNTHESIS_CHANNELS_DOWN_SAMPLED)
- sbr_qmf_syn_winadd = ixheaacd_sbr_qmfsyn32_winadd;
- else
- sbr_qmf_syn_winadd = ixheaacd_sbr_qmfsyn64_winadd;
-
- for (i = 0; i < num_time_slots; i++) {
- ixheaacd_inv_modulation_lp(qmf_real[i],
- &filter_states[ixheaacd_drc_offset], qmf_bank,
- qmf_tab_ptr);
-
- sbr_qmf_syn_winadd(fp1, fp2, filter_coeff, &time_out[ch_fac * p1], 2,
- ch_fac);
-
- ixheaacd_drc_offset -= no_synthesis_channels << 1;
-
- if (ixheaacd_drc_offset < 0)
- ixheaacd_drc_offset += ((no_synthesis_channels << 1) * 10);
-
- fptemp = fp1;
- fp1 = fp2;
- fp2 = fptemp;
-
- filter_coeff += 64;
-
- if (filter_coeff == qmf_bank->p_filter + 640)
- filter_coeff = (WORD16 *)qmf_bank->p_filter;
-
- p1 += no_synthesis_channels;
- }
-
- } else {
- for (i = 0; i < num_time_slots; i++) {
- WORD32 *t_qmf_imag;
- t_qmf_imag = qmf_imag[i];
-
- if (active) {
- if (i == ptr_ps_dec->border_position[env]) {
- ixheaacd_init_rot_env(ptr_ps_dec, (WORD16)env, qmf_bank->usb,
- sbr_tables_ptr, pstr_common_tables->trig_data);
- env++;
- }
-
- ixheaacd_apply_ps(ptr_ps_dec, &qmf_real[i], &qmf_imag[i], qmf_real_tmp,
- qmf_imag_tmp, sbr_scale_factor, (WORD16)i,
- sbr_tables_ptr);
- }
- if (1 == drc_on) {
- WORD32 loop_val;
- for (loop_val = 0; loop_val < 64; loop_val++) {
- qmf_real[i][loop_val] = ixheaacd_mult32x32in32_shift25(
- qmf_real[i][loop_val], drc_sbr_factors[6 + i][loop_val]);
- }
- }
-
- if (active) {
- if (common_shift)
- ixheaacd_shiftrountine(qmf_real[i], t_qmf_imag, no_synthesis_channels,
- common_shift);
- }
-
- if (audio_object_type == AOT_ER_AAC_ELD ||
- audio_object_type == AOT_ER_AAC_LD)
- ixheaacd_sbr_pre_twiddle(
- qmf_real[i], t_qmf_imag,
- sbr_tables_ptr->qmf_dec_tables_ptr->ixheaacd_sbr_synth_cos_sin_l32);
-
- ixheaacd_inv_emodulation(qmf_real[i], qmf_bank,
- sbr_tables_ptr->qmf_dec_tables_ptr);
-
- {
- WORD32 temp_out_scale_fac = out_scale_factor + 1;
- if (audio_object_type == AOT_ER_AAC_LD ||
- audio_object_type == AOT_ER_AAC_ELD) {
- temp_out_scale_fac = temp_out_scale_fac - 1;
- ixheaacd_shiftrountine_with_rnd_eld(
- qmf_real[i], t_qmf_imag, &filter_states[ixheaacd_drc_offset],
- no_synthesis_channels, temp_out_scale_fac);
- }
-
- else {
- ixheaacd_shiftrountine_with_rnd(
- qmf_real[i], t_qmf_imag, &filter_states[ixheaacd_drc_offset],
- no_synthesis_channels, temp_out_scale_fac);
- }
- }
-
- if (no_synthesis_channels == NO_SYNTHESIS_CHANNELS_DOWN_SAMPLED) {
- WORD32 temp = 1;
- if (audio_object_type == AOT_ER_AAC_LD ||
- audio_object_type == AOT_ER_AAC_ELD) {
- temp = 2;
- }
- ixheaacd_sbr_qmfsyn32_winadd(fp1, fp2, filter_coeff,
- &time_out[ch_fac * p1], temp, ch_fac);
-
- fp1 += thirty2;
- fp2 -= thirty2;
- thirty2 = -thirty2;
-
- ixheaacd_drc_offset -= 64;
-
- if (ixheaacd_drc_offset < 0) ixheaacd_drc_offset += 640;
-
- } else {
- WORD32 temp = 1;
- if (audio_object_type == AOT_ER_AAC_LD ||
- audio_object_type == AOT_ER_AAC_ELD) {
- temp = 2;
- }
- ixheaacd_sbr_qmfsyn64_winadd(fp1, fp2, filter_coeff,
- &time_out[ch_fac * p1], temp, ch_fac);
-
- fp1 += sixty4;
- fp2 -= sixty4;
- sixty4 = -sixty4;
- ixheaacd_drc_offset -= 128;
-
- if (ixheaacd_drc_offset < 0) ixheaacd_drc_offset += 1280;
- }
-
- filter_coeff += 64;
-
- if (filter_coeff == qmf_bank->p_filter + 640)
- filter_coeff = (WORD16 *)qmf_bank->p_filter;
-
- p1 += no_synthesis_channels;
-
- if (active)
- memcpy(qmf_real[i], qmf_real_tmp,
- 2 * no_synthesis_channels * sizeof(WORD32));
- }
- }
-
- if (audio_object_type == AOT_ER_AAC_LD ||
- audio_object_type == AOT_ER_AAC_ELD) {
- qmf_bank->fp1_syn = fp1;
- qmf_bank->fp2_syn = fp2;
- qmf_bank->sixty4 = sixty4;
- }
-
- qmf_bank->filter_pos_syn = filter_coeff;
- qmf_bank->ixheaacd_drc_offset = ixheaacd_drc_offset;
-}
VOID ixheaacd_radix4bfly(const WORD16 *w, WORD32 *x, WORD32 index1,
WORD32 index) {
int i;
@@ -2328,88 +1345,5 @@ VOID ixheaacd_radix4bfly(const WORD16 *w, WORD32 *x, WORD32 index1,
}
}
-VOID ixheaacd_postradixcompute2(WORD32 *ptr_y, WORD32 *ptr_x,
- const WORD32 *pdig_rev_tbl, WORD32 npoints) {
- WORD32 i, k;
- WORD32 h2;
- WORD32 x_0, x_1, x_2, x_3;
- WORD32 x_4, x_5, x_6, x_7;
- WORD32 x_8, x_9, x_a, x_b, x_c, x_d, x_e, x_f;
- WORD32 n00, n10, n20, n30, n01, n11, n21, n31;
- WORD32 n02, n12, n22, n32, n03, n13, n23, n33;
- WORD32 n0, j0;
- WORD32 *x2, *x0;
- WORD32 *y0, *y1, *y2, *y3;
-
- y0 = ptr_y;
- y2 = ptr_y + (WORD32)npoints;
- x0 = ptr_x;
- x2 = ptr_x + (WORD32)(npoints >> 1);
-
- y1 = y0 + (WORD32)(npoints >> 2);
- y3 = y2 + (WORD32)(npoints >> 2);
- j0 = 8;
- n0 = npoints >> 1;
-
- for (k = 0; k < 2; k++) {
- for (i = 0; i<npoints>> 1; i += 8) {
- h2 = *pdig_rev_tbl++ >> 2;
-
- x_0 = *x0++;
- x_1 = *x0++;
- x_2 = *x0++;
- x_3 = *x0++;
- x_4 = *x0++;
- x_5 = *x0++;
- x_6 = *x0++;
- x_7 = *x0++;
- n00 = x_0 + x_2;
- n01 = x_1 + x_3;
- n20 = x_0 - x_2;
- n21 = x_1 - x_3;
- n10 = x_4 + x_6;
- n11 = x_5 + x_7;
- n30 = x_4 - x_6;
- n31 = x_5 - x_7;
- y0[h2] = n00;
- y0[h2 + 1] = n01;
- y1[h2] = n10;
- y1[h2 + 1] = n11;
- y2[h2] = n20;
- y2[h2 + 1] = n21;
- y3[h2] = n30;
- y3[h2 + 1] = n31;
-
- x_8 = *x2++;
- x_9 = *x2++;
- x_a = *x2++;
- x_b = *x2++;
- x_c = *x2++;
- x_d = *x2++;
- x_e = *x2++;
- x_f = *x2++;
-
- n02 = x_8 + x_a;
- n03 = x_9 + x_b;
- n22 = x_8 - x_a;
- n23 = x_9 - x_b;
- n12 = x_c + x_e;
- n13 = x_d + x_f;
- n32 = x_c - x_e;
- n33 = x_d - x_f;
-
- y0[h2 + 2] = n02;
- y0[h2 + 3] = n03;
- y1[h2 + 2] = n12;
- y1[h2 + 3] = n13;
- y2[h2 + 2] = n22;
- y2[h2 + 3] = n23;
- y3[h2 + 2] = n32;
- y3[h2 + 3] = n33;
- }
- x0 += (WORD32)npoints >> 1;
- x2 += (WORD32)npoints >> 1;
- }
-}