Go to the documentation of this file.
32 for (
i = 0;
i < n;
i++)
40 for (
i = 0;
i < n;
i++) {
52 for (
i = 0;
i < n;
i++) {
56 for (j = 0; j < 6; j++) {
82 for (j = 0; j <
len; j++) {
96 for (n = 0; n <
len; n++) {
97 out[0][n][
i] = in[
i][n][0];
98 out[1][n][
i] = in[
i][n][1];
111 Q31(0.56471812200776
f),
112 Q31(0.48954165955695
f) };
119 for (n = 0; n <
len; n++) {
125 INTFLOAT link_delay_re = ap_delay[m][n+2-m][0];
126 INTFLOAT link_delay_im = ap_delay[m][n+2-m][1];
127 INTFLOAT fractional_delay_re = Q_fract[m][0];
128 INTFLOAT fractional_delay_im = Q_fract[m][1];
131 in_re =
AAC_MSUB30(link_delay_re, fractional_delay_re,
132 link_delay_im, fractional_delay_im);
134 in_im =
AAC_MADD30(link_delay_re, fractional_delay_im,
135 link_delay_im, fractional_delay_re);
159 for (n = 0; n <
len; n++) {
184 UINTFLOAT hs00 = h_step[0][0], hs10 = h_step[1][0];
185 UINTFLOAT hs01 = h_step[0][1], hs11 = h_step[1][1];
186 UINTFLOAT hs02 = h_step[0][2], hs12 = h_step[1][2];
187 UINTFLOAT hs03 = h_step[0][3], hs13 = h_step[1][3];
190 for (n = 0; n <
len; n++) {
205 l[n][0] =
AAC_MSUB30_V8(h00, l_re, h02, r_re, h10, l_im, h12, r_im);
206 l[n][1] =
AAC_MADD30_V8(h00, l_im, h02, r_im, h10, l_re, h12, r_re);
207 r[n][0] =
AAC_MSUB30_V8(h01, l_re, h03, r_re, h11, l_im, h13, r_im);
208 r[n][1] =
AAC_MADD30_V8(h01, l_im, h03, r_im, h11, l_re, h13, r_re);
#define AAC_MADD30(x, y, a, b)
static const float h0[64]
void ff_psdsp_init_x86(PSDSPContext *s)
#define PS_QMF_TIME_SLOTS
filter_frame For filters that do not use the this method is called when a frame is pushed to the filter s input It can be called at any time except in a reentrant way If the input frame is enough to produce then the filter should push the output frames on the output link immediately As an exception to the previous rule if the input frame is enough to produce several output frames then the filter needs output only at least one per link The additional frames can be left buffered in the filter
void ff_psdsp_init_mips(PSDSPContext *s)
static void ps_stereo_interpolate_c(INTFLOAT(*l)[2], INTFLOAT(*r)[2], INTFLOAT h[2][4], INTFLOAT h_step[2][4], int len)
void ff_psdsp_init_arm(PSDSPContext *s)
static void ps_hybrid_analysis_ileave_c(INTFLOAT(*out)[32][2], INTFLOAT L[2][38][64], int i, int len)
void ff_psdsp_init_aarch64(PSDSPContext *s)
#define AAC_MSUB30(x, y, a, b)
static void ps_stereo_interpolate_ipdopd_c(INTFLOAT(*l)[2], INTFLOAT(*r)[2], INTFLOAT h[2][4], INTFLOAT h_step[2][4], int len)
static void ps_add_squares_c(INTFLOAT *dst, const INTFLOAT(*src)[2], int n)
static void ps_hybrid_synthesis_deint_c(INTFLOAT out[2][38][64], INTFLOAT(*in)[32][2], int i, int len)
static void ps_hybrid_analysis_c(INTFLOAT(*out)[2], INTFLOAT(*in)[2], const INTFLOAT(*filter)[8][2], ptrdiff_t stride, int n)
static void ps_decorrelate_c(INTFLOAT(*out)[2], INTFLOAT(*delay)[2], INTFLOAT(*ap_delay)[PS_QMF_TIME_SLOTS+PS_MAX_AP_DELAY][2], const INTFLOAT phi_fract[2], const INTFLOAT(*Q_fract)[2], const INTFLOAT *transient_gain, INTFLOAT g_decay_slope, int len)
The reader does not expect b to be semantically here and if the code is changed by maybe adding a a division or other the signedness will almost certainly be mistaken To avoid this confusion a new type was SUINT is the C unsigned type but it holds a signed int to use the same example SUINT a
#define i(width, name, range_min, range_max)
#define AAC_MADD30_V8(x, y, a, b, c, d, e, f)
static void ps_mul_pair_single_c(INTFLOAT(*dst)[2], INTFLOAT(*src0)[2], INTFLOAT *src1, int n)
av_cold void AAC_RENAME() ff_psdsp_init(PSDSPContext *s)
static int phi_fract[2][50][2]
#define AAC_MSUB30_V8(x, y, a, b, c, d, e, f)
#define AAC_MADD28(x, y, a, b)