Lines Matching refs:sbr
31 #include "sbr.h"
73 static void sbr_dequant(SpectralBandReplication *sbr, int id_aac)
78 if (id_aac == TYPE_CPE && sbr->bs_coupling) {
79 int pan_offset = sbr->data[0].bs_amp_res ? 12 : 24;
80 for (e = 1; e <= sbr->data[0].bs_num_env; e++) {
81 for (k = 0; k < sbr->n[sbr->data[0].bs_freq_res[e]]; k++) {
83 if (sbr->data[0].bs_amp_res) {
84 temp1 = ff_exp2fi(sbr->data[0].env_facs_q[e][k] + 7);
85 temp2 = ff_exp2fi(pan_offset - sbr->data[1].env_facs_q[e][k]);
88 temp1 = ff_exp2fi((sbr->data[0].env_facs_q[e][k]>>1) + 7) *
89 exp2_tab[sbr->data[0].env_facs_q[e][k] & 1];
90 temp2 = ff_exp2fi((pan_offset - sbr->data[1].env_facs_q[e][k])>>1) *
91 exp2_tab[(pan_offset - sbr->data[1].env_facs_q[e][k]) & 1];
98 sbr->data[0].env_facs[e][k] = fac;
99 sbr->data[1].env_facs[e][k] = fac * temp2;
102 for (e = 1; e <= sbr->data[0].bs_num_noise; e++) {
103 for (k = 0; k < sbr->n_q; k++) {
104 float temp1 = ff_exp2fi(NOISE_FLOOR_OFFSET - sbr->data[0].noise_facs_q[e][k] + 1);
105 float temp2 = ff_exp2fi(12 - sbr->data[1].noise_facs_q[e][k]);
109 sbr->data[0].noise_facs[e][k] = fac;
110 sbr->data[1].noise_facs[e][k] = fac * temp2;
115 for (e = 1; e <= sbr->data[ch].bs_num_env; e++)
116 for (k = 0; k < sbr->n[sbr->data[ch].bs_freq_res[e]]; k++){
117 if (sbr->data[ch].bs_amp_res)
118 sbr->data[ch].env_facs[e][k] = ff_exp2fi(sbr->data[ch].env_facs_q[e][k] + 6);
120 sbr->data[ch].env_facs[e][k] = ff_exp2fi((sbr->data[ch].env_facs_q[e][k]>>1) + 6)
121 * exp2_tab[sbr->data[ch].env_facs_q[e][k] & 1];
122 if (sbr->data[ch].env_facs[e][k] > 1E20) {
124 sbr->data[ch].env_facs[e][k] = 1;
128 for (e = 1; e <= sbr->data[ch].bs_num_noise; e++)
129 for (k = 0; k < sbr->n_q; k++)
130 sbr->data[ch].noise_facs[e][k] =
131 ff_exp2fi(NOISE_FLOOR_OFFSET - sbr->data[ch].noise_facs_q[e][k]);
195 static void sbr_chirp(SpectralBandReplication *sbr, SBRData *ch_data)
201 for (i = 0; i < sbr->n_q; i++) {
219 static void sbr_gain_calc(AACContext *ac, SpectralBandReplication *sbr,
228 for (k = 0; k < sbr->n_lim; k++) {
231 for (m = sbr->f_tablelim[k] - sbr->kx[1]; m < sbr->f_tablelim[k + 1] - sbr->kx[1]; m++) {
232 const float temp = sbr->e_origmapped[e][m] / (1.0f + sbr->q_mapped[e][m]);
233 sbr->q_m[e][m] = sqrtf(temp * sbr->q_mapped[e][m]);
234 sbr->s_m[e][m] = sqrtf(temp * ch_data->s_indexmapped[e + 1][m]);
235 if (!sbr->s_mapped[e][m]) {
236 sbr->gain[e][m] = sqrtf(sbr->e_origmapped[e][m] /
237 ((1.0f + sbr->e_curr[e][m]) *
238 (1.0f + sbr->q_mapped[e][m] * delta)));
240 sbr->gain[e][m] = sqrtf(sbr->e_origmapped[e][m] * sbr->q_mapped[e][m] /
241 ((1.0f + sbr->e_curr[e][m]) *
242 (1.0f + sbr->q_mapped[e][m])));
244 sbr->gain[e][m] += FLT_MIN;
246 for (m = sbr->f_tablelim[k] - sbr->kx[1]; m < sbr->f_tablelim[k + 1] - sbr->kx[1]; m++) {
247 sum[0] += sbr->e_origmapped[e][m];
248 sum[1] += sbr->e_curr[e][m];
250 gain_max = limgain[sbr->bs_limiter_gains] * sqrtf((FLT_EPSILON + sum[0]) / (FLT_EPSILON + sum[1]));
252 for (m = sbr->f_tablelim[k] - sbr->kx[1]; m < sbr->f_tablelim[k + 1] - sbr->kx[1]; m++) {
253 float q_m_max = sbr->q_m[e][m] * gain_max / sbr->gain[e][m];
254 sbr->q_m[e][m] = FFMIN(sbr->q_m[e][m], q_m_max);
255 sbr->gain[e][m] = FFMIN(sbr->gain[e][m], gain_max);
258 for (m = sbr->f_tablelim[k] - sbr->kx[1]; m < sbr->f_tablelim[k + 1] - sbr->kx[1]; m++) {
259 sum[0] += sbr->e_origmapped[e][m];
260 sum[1] += sbr->e_curr[e][m] * sbr->gain[e][m] * sbr->gain[e][m]
261 + sbr->s_m[e][m] * sbr->s_m[e][m]
262 + (delta && !sbr->s_m[e][m]) * sbr->q_m[e][m] * sbr->q_m[e][m];
266 for (m = sbr->f_tablelim[k] - sbr->kx[1]; m < sbr->f_tablelim[k + 1] - sbr->kx[1]; m++) {
267 sbr->gain[e][m] *= gain_boost;
268 sbr->q_m[e][m] *= gain_boost;
269 sbr->s_m[e][m] *= gain_boost;
278 SpectralBandReplication *sbr, SBRData *ch_data,
282 const int h_SL = 4 * !sbr->bs_smoothing_mode;
283 const int kx = sbr->kx[1];
284 const int m_max = sbr->m[1];
296 if (sbr->reset) {
298 memcpy(g_temp[i + 2*ch_data->t_env[0]], sbr->gain[0], m_max * sizeof(sbr->gain[0][0]));
299 memcpy(q_temp[i + 2*ch_data->t_env[0]], sbr->q_m[0], m_max * sizeof(sbr->q_m[0][0]));
314 memcpy(g_temp[h_SL + i], sbr->gain[e], m_max * sizeof(sbr->gain[0][0]));
315 memcpy(q_temp[h_SL + i], sbr->q_m[e], m_max * sizeof(sbr->q_m[0][0]));
342 sbr->dsp.hf_g_filt(Y1[i] + kx, X_high + kx, g_filt, m_max,
346 sbr->dsp.hf_apply_noise[indexsine](Y1[i] + kx, sbr->s_m[e],
354 float *in = sbr->s_m[e];