Lines Matching defs:sbr
60 #include "sbr.h"
153 static void sbr_dequant(SpectralBandReplication *sbr, int id_aac)
158 if (id_aac == TYPE_CPE && sbr->bs_coupling) {
159 int alpha = sbr->data[0].bs_amp_res ? 2 : 1;
160 int pan_offset = sbr->data[0].bs_amp_res ? 12 : 24;
161 for (e = 1; e <= sbr->data[0].bs_num_env; e++) {
162 for (k = 0; k < sbr->n[sbr->data[0].bs_freq_res[e]]; k++) {
165 temp1.exp = sbr->data[0].env_facs_q[e][k] * alpha + 14;
176 temp2.exp = (pan_offset - sbr->data[1].env_facs_q[e][k]) * alpha;
183 sbr->data[0].env_facs[e][k] = fac;
184 sbr->data[1].env_facs[e][k] = av_mul_sf(fac, temp2);
187 for (e = 1; e <= sbr->data[0].bs_num_noise; e++) {
188 for (k = 0; k < sbr->n_q; k++) {
192 sbr->data[0].noise_facs_q[e][k] + 2;
195 temp2.exp = 12 - sbr->data[1].noise_facs_q[e][k] + 1;
198 sbr->data[0].noise_facs[e][k] = fac;
199 sbr->data[1].noise_facs[e][k] = av_mul_sf(fac, temp2);
204 int alpha = sbr->data[ch].bs_amp_res ? 2 : 1;
205 for (e = 1; e <= sbr->data[ch].bs_num_env; e++)
206 for (k = 0; k < sbr->n[sbr->data[ch].bs_freq_res[e]]; k++){
209 temp1.exp = alpha * sbr->data[ch].env_facs_q[e][k] + 12;
219 sbr->data[ch].env_facs[e][k] = temp1;
221 for (e = 1; e <= sbr->data[ch].bs_num_noise; e++)
222 for (k = 0; k < sbr->n_q; k++){
223 sbr->data[ch].noise_facs[e][k].exp = NOISE_FLOOR_OFFSET - \
224 sbr->data[ch].noise_facs_q[e][k] + 1;
225 sbr->data[ch].noise_facs[e][k].mant = 0x20000000;
369 static void sbr_chirp(SpectralBandReplication *sbr, SBRData *ch_data)
376 for (i = 0; i < sbr->n_q; i++) {
399 static void sbr_gain_calc(AACContext *ac, SpectralBandReplication *sbr,
409 for (k = 0; k < sbr->n_lim; k++) {
413 for (m = sbr->f_tablelim[k] - sbr->kx[1]; m < sbr->f_tablelim[k + 1] - sbr->kx[1]; m++) {
414 const SoftFloat temp = av_div_sf(sbr->e_origmapped[e][m],
415 av_add_sf(FLOAT_1, sbr->q_mapped[e][m]));
416 sbr->q_m[e][m] = av_sqrt_sf(av_mul_sf(temp, sbr->q_mapped[e][m]));
417 sbr->s_m[e][m] = av_sqrt_sf(av_mul_sf(temp, av_int2sf(ch_data->s_indexmapped[e + 1][m], 0)));
418 if (!sbr->s_mapped[e][m]) {
420 sbr->gain[e][m] = av_sqrt_sf(av_div_sf(sbr->e_origmapped[e][m],
421 av_mul_sf(av_add_sf(FLOAT_1, sbr->e_curr[e][m]),
422 av_add_sf(FLOAT_1, sbr->q_mapped[e][m]))));
424 sbr->gain[e][m] = av_sqrt_sf(av_div_sf(sbr->e_origmapped[e][m],
425 av_add_sf(FLOAT_1, sbr->e_curr[e][m])));
428 sbr->gain[e][m] = av_sqrt_sf(
430 av_mul_sf(sbr->e_origmapped[e][m], sbr->q_mapped[e][m]),
432 av_add_sf(FLOAT_1, sbr->e_curr[e][m]),
433 av_add_sf(FLOAT_1, sbr->q_mapped[e][m]))));
435 sbr->gain[e][m] = av_add_sf(sbr->gain[e][m], FLOAT_MIN);
437 for (m = sbr->f_tablelim[k] - sbr->kx[1]; m < sbr->f_tablelim[k + 1] - sbr->kx[1]; m++) {
438 sum[0] = av_add_sf(sum[0], sbr->e_origmapped[e][m]);
439 sum[1] = av_add_sf(sum[1], sbr->e_curr[e][m]);
441 gain_max = av_mul_sf(limgain[sbr->bs_limiter_gains],
448 for (m = sbr->f_tablelim[k] - sbr->kx[1]; m < sbr->f_tablelim[k + 1] - sbr->kx[1]; m++) {
450 av_mul_sf(sbr->q_m[e][m], gain_max),
451 sbr->gain[e][m]);
452 if (av_gt_sf(sbr->q_m[e][m], q_m_max))
453 sbr->q_m[e][m] = q_m_max;
454 if (av_gt_sf(sbr->gain[e][m], gain_max))
455 sbr->gain[e][m] = gain_max;
458 for (m = sbr->f_tablelim[k] - sbr->kx[1]; m < sbr->f_tablelim[k + 1] - sbr->kx[1]; m++) {
459 sum[0] = av_add_sf(sum[0], sbr->e_origmapped[e][m]);
462 av_mul_sf(sbr->e_curr[e][m],
463 sbr->gain[e][m]),
464 sbr->gain[e][m]));
466 av_mul_sf(sbr->s_m[e][m], sbr->s_m[e][m]));
467 if (delta && !sbr->s_m[e][m].mant)
469 av_mul_sf(sbr->q_m[e][m], sbr->q_m[e][m]));
478 for (m = sbr->f_tablelim[k] - sbr->kx[1]; m < sbr->f_tablelim[k + 1] - sbr->kx[1]; m++) {
479 sbr->gain[e][m] = av_mul_sf(sbr->gain[e][m], gain_boost);
480 sbr->q_m[e][m] = av_mul_sf(sbr->q_m[e][m], gain_boost);
481 sbr->s_m[e][m] = av_mul_sf(sbr->s_m[e][m], gain_boost);
490 SpectralBandReplication *sbr, SBRData *ch_data,
494 const int h_SL = 4 * !sbr->bs_smoothing_mode;
495 const int kx = sbr->kx[1];
496 const int m_max = sbr->m[1];
508 if (sbr->reset) {
510 memcpy(g_temp[i + 2*ch_data->t_env[0]], sbr->gain[0], m_max * sizeof(sbr->gain[0][0]));
511 memcpy(q_temp[i + 2*ch_data->t_env[0]], sbr->q_m[0], m_max * sizeof(sbr->q_m[0][0]));
526 memcpy(g_temp[h_SL + i], sbr->gain[e], m_max * sizeof(sbr->gain[0][0]));
527 memcpy(q_temp[h_SL + i], sbr->q_m[e], m_max * sizeof(sbr->q_m[0][0]));
558 sbr->dsp.hf_g_filt(Y1[i] + kx, X_high + kx, g_filt, m_max,
562 sbr->dsp.hf_apply_noise[indexsine](Y1[i] + kx, sbr->s_m[e],
573 SoftFloat *in = sbr->s_m[e];