Go to the documentation of this file.
62 for (j = 0; j < 6; j += 2) {
68 re_op = (re_op + 0x40000000) >> 31;
69 im_op = (im_op + 0x40000000) >> 31;
120 for (
i = 0;
i < 5;
i++) {
121 for (j = 0; j < 38; j++) {
122 in[
i][j+6][0] =
L[0][j][
i];
123 in[
i][j+6][1] =
L[1][j][
i];
140 for (
i = 0;
i < 5;
i++) {
141 memcpy(
in[
i],
in[
i]+32, 6 *
sizeof(
in[
i][0]));
150 for (n = 0; n <
len; n++) {
151 memset(
out[0][n], 0, 5*
sizeof(
out[0][n][0]));
152 memset(
out[1][n], 0, 5*
sizeof(
out[1][n][0]));
153 for (
i = 0;
i < 12;
i++) {
157 for (
i = 0;
i < 8;
i++) {
161 for (
i = 0;
i < 4;
i++) {
172 for (n = 0; n <
len; n++) {
187 #define DECAY_SLOPE Q30(0.05f)
210 for (;
b >= 0;
b--) {
211 par_mapped[2*
b+1] = par_mapped[2*
b] = par[
b];
217 par_mapped[ 0] = (2*par[ 0] + par[ 1]) / 3;
218 par_mapped[ 1] = ( par[ 1] + 2*par[ 2]) / 3;
219 par_mapped[ 2] = (2*par[ 3] + par[ 4]) / 3;
220 par_mapped[ 3] = ( par[ 4] + 2*par[ 5]) / 3;
221 par_mapped[ 4] = ( par[ 6] + par[ 7]) / 2;
222 par_mapped[ 5] = ( par[ 8] + par[ 9]) / 2;
223 par_mapped[ 6] = par[10];
224 par_mapped[ 7] = par[11];
225 par_mapped[ 8] = ( par[12] + par[13]) / 2;
226 par_mapped[ 9] = ( par[14] + par[15]) / 2;
227 par_mapped[10] = par[16];
229 par_mapped[11] = par[17];
230 par_mapped[12] = par[18];
231 par_mapped[13] = par[19];
232 par_mapped[14] = ( par[20] + par[21]) / 2;
233 par_mapped[15] = ( par[22] + par[23]) / 2;
234 par_mapped[16] = ( par[24] + par[25]) / 2;
235 par_mapped[17] = ( par[26] + par[27]) / 2;
236 par_mapped[18] = ( par[28] + par[29] + par[30] + par[31]) / 4;
237 par_mapped[19] = ( par[32] + par[33]) / 2;
244 par[ 0] = (
int)(((int64_t)(par[ 0] + (
unsigned)(par[ 1]>>1)) * 1431655765 + \
246 par[ 1] = (
int)(((int64_t)((par[ 1]>>1) + (
unsigned)par[ 2]) * 1431655765 + \
248 par[ 2] = (
int)(((int64_t)(par[ 3] + (unsigned)(par[ 4]>>1)) * 1431655765 + \
250 par[ 3] = (
int)(((int64_t)((par[ 4]>>1) + (
unsigned)par[ 5]) * 1431655765 + \
253 par[ 0] = (2*par[ 0] + par[ 1]) * 0.33333333
f;
254 par[ 1] = ( par[ 1] + 2*par[ 2]) * 0.33333333
f;
255 par[ 2] = (2*par[ 3] + par[ 4]) * 0.33333333
f;
256 par[ 3] = ( par[ 4] + 2*par[ 5]) * 0.33333333
f;
273 par[18] = (((par[28]+2)>>2) + ((par[29]+2)>>2) + ((par[30]+2)>>2) + ((par[31]+2)>>2));
275 par[18] = ( par[28] + par[29] + par[30] + par[31]) * 0.25
f;
283 par_mapped[33] = par[9];
284 par_mapped[32] = par[9];
285 par_mapped[31] = par[9];
286 par_mapped[30] = par[9];
287 par_mapped[29] = par[9];
288 par_mapped[28] = par[9];
289 par_mapped[27] = par[8];
290 par_mapped[26] = par[8];
291 par_mapped[25] = par[8];
292 par_mapped[24] = par[8];
293 par_mapped[23] = par[7];
294 par_mapped[22] = par[7];
295 par_mapped[21] = par[7];
296 par_mapped[20] = par[7];
297 par_mapped[19] = par[6];
298 par_mapped[18] = par[6];
299 par_mapped[17] = par[5];
300 par_mapped[16] = par[5];
304 par_mapped[15] = par[4];
305 par_mapped[14] = par[4];
306 par_mapped[13] = par[4];
307 par_mapped[12] = par[4];
308 par_mapped[11] = par[3];
309 par_mapped[10] = par[3];
310 par_mapped[ 9] = par[2];
311 par_mapped[ 8] = par[2];
312 par_mapped[ 7] = par[2];
313 par_mapped[ 6] = par[2];
314 par_mapped[ 5] = par[1];
315 par_mapped[ 4] = par[1];
316 par_mapped[ 3] = par[1];
317 par_mapped[ 2] = par[0];
318 par_mapped[ 1] = par[0];
319 par_mapped[ 0] = par[0];
325 par_mapped[33] = par[19];
326 par_mapped[32] = par[19];
327 par_mapped[31] = par[18];
328 par_mapped[30] = par[18];
329 par_mapped[29] = par[18];
330 par_mapped[28] = par[18];
331 par_mapped[27] = par[17];
332 par_mapped[26] = par[17];
333 par_mapped[25] = par[16];
334 par_mapped[24] = par[16];
335 par_mapped[23] = par[15];
336 par_mapped[22] = par[15];
337 par_mapped[21] = par[14];
338 par_mapped[20] = par[14];
339 par_mapped[19] = par[13];
340 par_mapped[18] = par[12];
341 par_mapped[17] = par[11];
343 par_mapped[16] = par[10];
344 par_mapped[15] = par[ 9];
345 par_mapped[14] = par[ 9];
346 par_mapped[13] = par[ 8];
347 par_mapped[12] = par[ 8];
348 par_mapped[11] = par[ 7];
349 par_mapped[10] = par[ 6];
350 par_mapped[ 9] = par[ 5];
351 par_mapped[ 8] = par[ 5];
352 par_mapped[ 7] = par[ 4];
353 par_mapped[ 6] = par[ 4];
354 par_mapped[ 5] = par[ 3];
355 par_mapped[ 4] = (par[ 2] + par[ 3]) / 2;
356 par_mapped[ 3] = par[ 2];
357 par_mapped[ 2] = par[ 1];
358 par_mapped[ 1] = (par[ 0] + par[ 1]) / 2;
359 par_mapped[ 0] = par[ 0];
409 const float transient_impact = 1.5f;
410 const float a_smooth = 0.25f;
415 const INTFLOAT peak_decay_factor =
Q31(0.76592833836465
f);
417 memset(power, 0, 34 *
sizeof(*power));
427 for (k = 0; k <
NR_BANDS[is34]; k++) {
435 for (n = n0; n < nL; n++) {
437 decayed_peak = (
int)(((int64_t)peak_decay_factor * \
438 peak_decay_nrg[
i] + 0x40000000) >> 31);
439 peak_decay_nrg[
i] =
FFMAX(decayed_peak, power[
i][n]);
440 power_smooth[
i] += (power[
i][n] + 2LL - power_smooth[
i]) >> 2;
441 peak_decay_diff_smooth[
i] += (peak_decay_nrg[
i] + 2LL - power[
i][n] - \
442 peak_decay_diff_smooth[
i]) >> 2;
444 if (peak_decay_diff_smooth[
i]) {
445 transient_gain[
i][n] =
FFMIN(power_smooth[
i]*43691LL / peak_decay_diff_smooth[
i], 1<<16);
447 transient_gain[
i][n] = 1 << 16;
452 for (n = n0; n < nL; n++) {
453 float decayed_peak = peak_decay_factor * peak_decay_nrg[
i];
455 peak_decay_nrg[
i] =
FFMAX(decayed_peak, power[
i][n]);
456 power_smooth[
i] += a_smooth * (power[
i][n] - power_smooth[
i]);
457 peak_decay_diff_smooth[
i] += a_smooth * (peak_decay_nrg[
i] - power[
i][n] - peak_decay_diff_smooth[
i]);
458 denom = transient_impact * peak_decay_diff_smooth[
i];
459 transient_gain[
i][n] = (denom > power_smooth[
i]) ?
460 power_smooth[
i] / denom : 1.0
f;
479 g_decay_slope = 1 << 30;
489 g_decay_slope =
av_clipf(g_decay_slope, 0.
f, 1.
f);
491 memcpy(delay[k], delay[k]+nL,
PS_MAX_DELAY*
sizeof(delay[k][0]));
494 memcpy(ap_delay[k][m], ap_delay[k][m]+
numQMFSlots, 5*
sizeof(ap_delay[k][m][0]));
499 transient_gain[
b], g_decay_slope, nL - n0);
503 memcpy(delay[k], delay[k]+nL,
PS_MAX_DELAY*
sizeof(delay[k][0]));
507 transient_gain[
i], nL - n0);
511 memcpy(delay[k], delay[k]+nL,
PS_MAX_DELAY*
sizeof(delay[k][0]));
515 transient_gain[
i], nL - n0);
521 int num_par,
int num_env,
int full)
525 if (num_par == 20 || num_par == 11) {
526 for (e = 0; e < num_env; e++) {
529 }
else if (num_par == 10 || num_par == 5) {
530 for (e = 0; e < num_env; e++) {
540 int num_par,
int num_env,
int full)
544 if (num_par == 34 || num_par == 17) {
545 for (e = 0; e < num_env; e++) {
548 }
else if (num_par == 10 || num_par == 5) {
549 for (e = 0; e < num_env; e++) {
581 memcpy(H11[0][0], H11[0][ps2->
num_env_old],
sizeof(H11[0][0]));
582 memcpy(H11[1][0], H11[1][ps2->
num_env_old],
sizeof(H11[1][0]));
583 memcpy(H12[0][0], H12[0][ps2->
num_env_old],
sizeof(H12[0][0]));
584 memcpy(H12[1][0], H12[1][ps2->
num_env_old],
sizeof(H12[1][0]));
585 memcpy(H21[0][0], H21[0][ps2->
num_env_old],
sizeof(H21[0][0]));
586 memcpy(H21[1][0], H21[1][ps2->
num_env_old],
sizeof(H21[1][0]));
587 memcpy(H22[0][0], H22[0][ps2->
num_env_old],
sizeof(H22[0][0]));
588 memcpy(H22[1][0], H22[1][ps2->
num_env_old],
sizeof(H22[1][0]));
630 for (e = 0; e < ps2->
num_env; e++) {
633 h11 = H_LUT[iid_mapped[e][
b] + 7 + 23 * ps2->
iid_quant][icc_mapped[e][
b]][0];
634 h12 = H_LUT[iid_mapped[e][
b] + 7 + 23 * ps2->
iid_quant][icc_mapped[e][
b]][1];
635 h21 = H_LUT[iid_mapped[e][
b] + 7 + 23 * ps2->
iid_quant][icc_mapped[e][
b]][2];
636 h22 = H_LUT[iid_mapped[e][
b] + 7 + 23 * ps2->
iid_quant][icc_mapped[e][
b]][3];
643 int opd_idx = opd_hist[
b] * 8 + opd_mapped[e][
b];
644 int ipd_idx = ipd_hist[
b] * 8 + ipd_mapped[e][
b];
649 opd_hist[
b] = opd_idx & 0x3F;
650 ipd_hist[
b] = ipd_idx & 0x3F;
652 ipd_adj_re =
AAC_MADD30(opd_re, ipd_re, opd_im, ipd_im);
653 ipd_adj_im =
AAC_MSUB30(opd_im, ipd_re, opd_re, ipd_im);
662 H11[1][e+1][
b] = h11i;
663 H12[1][e+1][
b] = h12i;
664 H21[1][e+1][
b] = h21i;
665 H22[1][e+1][
b] = h22i;
667 H11[0][e+1][
b] = h11;
668 H12[0][e+1][
b] = h12;
669 H21[0][e+1][
b] = h21;
670 H22[0][e+1][
b] = h22;
672 for (k = 0; k <
NR_BANDS[is34]; k++) {
682 h[0][0] = H11[0][e][
b];
683 h[0][1] = H12[0][e][
b];
684 h[0][2] = H21[0][e][
b];
685 h[0][3] = H22[0][e][
b];
688 if ((is34 && k <= 13 && k >= 9) || (!is34 && k <= 1)) {
689 h[1][0] = -H11[1][e][
b];
690 h[1][1] = -H12[1][e][
b];
691 h[1][2] = -H21[1][e][
b];
692 h[1][3] = -H22[1][e][
b];
694 h[1][0] = H11[1][e][
b];
695 h[1][1] = H12[1][e][
b];
696 h[1][2] = H21[1][e][
b];
697 h[1][3] = H22[1][e][
b];
713 l[k] + 1 + start,
r[k] + 1 + start,
714 h, h_step, stop - start);
724 int is34 = ps->common.is34bands;
727 memset(ps->delay+top, 0, (
NR_BANDS[is34] - top)*
sizeof(ps->delay[0]));
729 memset(ps->ap_delay + top, 0, (
NR_ALLPASS_BANDS[is34] - top)*
sizeof(ps->ap_delay[0]));
static void map_idx_34_to_20(int8_t *par_mapped, const int8_t *par, int full)
#define AAC_MADD30(x, y, a, b)
static int f34_2_4[4][8][2]
static int pd_im_smooth[8 *8 *8]
INTFLOAT peak_decay_diff_smooth[34]
static TABLE_CONST int Q_fract_allpass[2][50][3][2]
void(* decorrelate)(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)
static int f20_0_8[8][8][2]
av_cold void AAC_RENAME() ff_ps_init(void)
static const int NR_PAR_BANDS[]
Number of frequency bands that can be addressed by the parameter index, b(k)
const int8_t ff_k_to_i_34[]
Table 8.49.
#define PS_QMF_TIME_SLOTS
static int f34_0_12[12][8][2]
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
int border_position[PS_MAX_NUM_ENV+1]
int8_t ipd_hist[PS_MAX_NR_IIDICC]
int8_t opd_par[PS_MAX_NUM_ENV][PS_MAX_NR_IIDICC]
Overall Phase Difference Parameters.
static int pd_re_smooth[8 *8 *8]
#define DECAY_SLOPE
All-pass filter decay slope.
void(* add_squares)(INTFLOAT *dst, const INTFLOAT(*src)[2], int n)
INTFLOAT H12[2][PS_MAX_NUM_ENV+1][PS_MAX_NR_IIDICC]
static void hybrid_synthesis(PSDSPContext *dsp, INTFLOAT out[2][38][64], INTFLOAT in[91][32][2], int is34, int len)
static void map_idx_10_to_20(int8_t *par_mapped, const int8_t *par, int full)
Table 8.46.
static const int NR_BANDS[]
Number of frequency bands that can be addressed by the sub subband index, k.
static uint32_t reverse(uint32_t num, int bits)
static const int NR_ALLPASS_BANDS[]
Number of all-pass filer bands.
void ff_ps_init_common(void)
#define AAC_HALF_SUM(x, y)
INTFLOAT delay[PS_MAX_SSB][PS_QMF_TIME_SLOTS+PS_MAX_DELAY][2]
static void hybrid6_cx(PSDSPContext *dsp, INTFLOAT(*in)[2], INTFLOAT(*out)[32][2], TABLE_CONST INTFLOAT(*filter)[8][2], int len)
Split one subband into 6 subsubbands with a complex filter.
#define LOCAL_ALIGNED_16(t, v,...)
#define AAC_MSUB30(x, y, a, b)
static void map_val_20_to_34(INTFLOAT par[PS_MAX_NR_IIDICC])
static const int SHORT_DELAY_BAND[]
First stereo band using the short one sample delay.
static void map_val_34_to_20(INTFLOAT par[PS_MAX_NR_IIDICC])
INTFLOAT ap_delay[PS_MAX_AP_BANDS][PS_AP_LINKS][PS_QMF_TIME_SLOTS+PS_MAX_AP_DELAY][2]
static const int NR_IPDOPD_BANDS[]
static void map_idx_10_to_34(int8_t *par_mapped, const int8_t *par, int full)
INTFLOAT power_smooth[34]
void(* hybrid_synthesis_deint)(INTFLOAT out[2][38][64], INTFLOAT(*in)[32][2], int i, int len)
static int f34_1_8[8][8][2]
static const INTFLOAT g1_Q2[]
void(* mul_pair_single)(INTFLOAT(*dst)[2], INTFLOAT(*src0)[2], INTFLOAT *src1, int n)
void(* hybrid_analysis_ileave)(INTFLOAT(*out)[32][2], INTFLOAT L[2][38][64], int i, int len)
static void map_idx_20_to_34(int8_t *par_mapped, const int8_t *par, int full)
static const int DECAY_CUTOFF[]
Start frequency band for the all-pass filter decay slope.
const int8_t ff_k_to_i_20[]
Table 8.48.
av_cold void AAC_RENAME() ff_ps_ctx_init(PSContext *ps)
INTFLOAT H22[2][PS_MAX_NUM_ENV+1][PS_MAX_NR_IIDICC]
#define AAC_MSUB31_V3(x, y, z)
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi - 0x80) *(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi - 0x80) *(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(const int16_t *) pi >> 8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t, *(const int16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t, *(const int16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(const int32_t *) pi >> 24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t, *(const int32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t, *(const int32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(const float *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(const float *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(const float *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(const double *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(const double *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(const double *) pi *(1U<< 31)))) #define SET_CONV_FUNC_GROUP(ofmt, ifmt) static void set_generic_function(AudioConvert *ac) { } void ff_audio_convert_free(AudioConvert **ac) { if(! *ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);} AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt, int channels, int sample_rate, int apply_map) { AudioConvert *ac;int in_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) return NULL;ac->avr=avr;ac->out_fmt=out_fmt;ac->in_fmt=in_fmt;ac->channels=channels;ac->apply_map=apply_map;if(avr->dither_method !=AV_RESAMPLE_DITHER_NONE &&av_get_packed_sample_fmt(out_fmt)==AV_SAMPLE_FMT_S16 &&av_get_bytes_per_sample(in_fmt) > 2) { ac->dc=ff_dither_alloc(avr, out_fmt, in_fmt, channels, sample_rate, apply_map);if(!ac->dc) { av_free(ac);return NULL;} return ac;} in_planar=ff_sample_fmt_is_planar(in_fmt, channels);out_planar=ff_sample_fmt_is_planar(out_fmt, channels);if(in_planar==out_planar) { ac->func_type=CONV_FUNC_TYPE_FLAT;ac->planes=in_planar ? ac->channels :1;} else if(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;else ac->func_type=CONV_FUNC_TYPE_DEINTERLEAVE;set_generic_function(ac);if(ARCH_AARCH64) ff_audio_convert_init_aarch64(ac);if(ARCH_ARM) ff_audio_convert_init_arm(ac);if(ARCH_X86) ff_audio_convert_init_x86(ac);return ac;} int ff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in) { int use_generic=1;int len=in->nb_samples;int p;if(ac->dc) { av_log(ac->avr, AV_LOG_TRACE, "%d samples - audio_convert: %s to %s (dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));return ff_convert_dither(ac-> in
int8_t opd_hist[PS_MAX_NR_IIDICC]
static void hybrid_analysis(PSDSPContext *dsp, INTFLOAT out[91][32][2], INTFLOAT in[5][44][2], INTFLOAT L[2][38][64], int is34, int len)
int8_t ipd_par[PS_MAX_NUM_ENV][PS_MAX_NR_IIDICC]
Inter-channel Phase Difference Parameters.
static void hybrid4_8_12_cx(PSDSPContext *dsp, INTFLOAT(*in)[2], INTFLOAT(*out)[32][2], TABLE_CONST INTFLOAT(*filter)[8][2], int N, int len)
void(* stereo_interpolate[2])(INTFLOAT(*l)[2], INTFLOAT(*r)[2], INTFLOAT h[2][4], INTFLOAT h_step[2][4], int len)
void AAC_RENAME() ff_psdsp_init(PSDSPContext *s)
main external API structure.
static int phi_fract[2][50][2]
static void hybrid2_re(INTFLOAT(*in)[2], INTFLOAT(*out)[32][2], const INTFLOAT filter[8], int len, int reverse)
Split one subband into 2 subsubbands with a symmetric real filter.
static void ps_tableinit(void)
int8_t iid_par[PS_MAX_NUM_ENV][PS_MAX_NR_IIDICC]
Inter-channel Intensity Difference Parameters.
static void remap20(int8_t(**p_par_mapped)[PS_MAX_NR_IIDICC], int8_t(*par)[PS_MAX_NR_IIDICC], int num_par, int num_env, int full)
static void ipdopd_reset(int8_t *ipd_hist, int8_t *opd_hist)
int AAC_RENAME() ff_ps_apply(AVCodecContext *avctx, PSContext *ps, INTFLOAT L[2][38][64], INTFLOAT R[2][38][64], int top)
INTFLOAT H11[2][PS_MAX_NUM_ENV+1][PS_MAX_NR_IIDICC]
#define PS_BASELINE
Operate in Baseline PS mode.
void(* hybrid_analysis)(INTFLOAT(*out)[2], INTFLOAT(*in)[2], const INTFLOAT(*filter)[8][2], ptrdiff_t stride, int n)
static void stereo_processing(PSContext *ps, INTFLOAT(*l)[32][2], INTFLOAT(*r)[32][2], int is34)
int8_t icc_par[PS_MAX_NUM_ENV][PS_MAX_NR_IIDICC]
Inter-Channel Coherence Parameters.
INTFLOAT peak_decay_nrg[34]
static void remap34(int8_t(**p_par_mapped)[PS_MAX_NR_IIDICC], int8_t(*par)[PS_MAX_NR_IIDICC], int num_par, int num_env, int full)
static void decorrelation(PSContext *ps, INTFLOAT(*out)[32][2], const INTFLOAT(*s)[32][2], int is34)
INTFLOAT H21[2][PS_MAX_NUM_ENV+1][PS_MAX_NR_IIDICC]