Skip to content
...@@ -2279,10 +2279,12 @@ static void getmidbands( ...@@ -2279,10 +2279,12 @@ static void getmidbands(
) )
{ {
Word16 j, max_psize, shift; Word16 j, max_psize, shift;
#ifndef ISSUE_1796_replace_shl_o
#ifdef BASOP_NOGLOB_DECLARE_LOCAL #ifdef BASOP_NOGLOB_DECLARE_LOCAL
Flag Overflow = 0; Flag Overflow = 0;
move32(); move32();
#endif #endif
#endif
max_psize = psize[0]; max_psize = psize[0];
...@@ -2316,7 +2318,11 @@ static void getmidbands( ...@@ -2316,7 +2318,11 @@ static void getmidbands(
move16(); move16();
FOR( j = 0; j < npart; j++ ) FOR( j = 0; j < npart; j++ )
{ {
#ifdef ISSUE_1796_replace_shl_o
psize_norm[j] = shl_sat( psize[j], shift ); // Q(15 - psize_norm_exp)
#else
psize_norm[j] = shl_o( psize[j], shift, &Overflow ); // Q(15 - psize_norm_exp) psize_norm[j] = shl_o( psize[j], shift, &Overflow ); // Q(15 - psize_norm_exp)
#endif
move16(); move16();
} }
/* minimum_statistics needs fixed exponent of 6 */ /* minimum_statistics needs fixed exponent of 6 */
......
...@@ -277,7 +277,11 @@ Word16 frame_energy_fx( /* o : Frame energy in Q8 ...@@ -277,7 +277,11 @@ Word16 frame_energy_fx( /* o : Frame energy in Q8
/*add ld(2^exp1)=exp1 but check format, first*/ /*add ld(2^exp1)=exp1 but check format, first*/
tmp16 = sub( sub( 15, norm_s( exp1 ) ), 5 ); /*factor to shift Ltmp and exp1 with (shr) to avoid overflows when adding*/ tmp16 = sub( sub( 15, norm_s( exp1 ) ), 5 ); /*factor to shift Ltmp and exp1 with (shr) to avoid overflows when adding*/
#ifdef ISSUE_1799_replace_L_shr_o
Ltmp = L_shr_sat( Ltmp, tmp16 ); /*Q25, tmp16*/
#else
Ltmp = L_shr_o( Ltmp, tmp16, &Overflow ); /*Q25, tmp16*/ Ltmp = L_shr_o( Ltmp, tmp16, &Overflow ); /*Q25, tmp16*/
#endif
exp2 = shr( exp1, tmp16 ); /*Q0 , tmp16*/ exp2 = shr( exp1, tmp16 ); /*Q0 , tmp16*/
Ltmp = L_add_o( Ltmp, L_shl( L_deposit_l( exp2 ), 25 ), &Overflow ); /*Q25, tmp16, normalized*/ Ltmp = L_add_o( Ltmp, L_shl( L_deposit_l( exp2 ), 25 ), &Overflow ); /*Q25, tmp16, normalized*/
......
...@@ -126,7 +126,11 @@ void Comp_and_apply_gain_fx( ...@@ -126,7 +126,11 @@ void Comp_and_apply_gain_fx(
y_gain = extract_l( Pow2( 14, frac ) ); /* Put 14 as exponent so that */ y_gain = extract_l( Pow2( 14, frac ) ); /* Put 14 as exponent so that */
/* output of Pow2() will be: */ /* output of Pow2() will be: */
/* 16384 < Pow2() <= 32767 */ /* 16384 < Pow2() <= 32767 */
#ifdef ISSUE_1796_replace_shl_o
Ener_per_bd_yQ[i_band] = shl_sat( y_gain, sub( exp1, 13 ) );
#else
Ener_per_bd_yQ[i_band] = shl_o( y_gain, sub( exp1, 13 ), &Overflow ); Ener_per_bd_yQ[i_band] = shl_o( y_gain, sub( exp1, 13 ), &Overflow );
#endif
move16(); /*Q1 */ move16(); /*Q1 */
tmp_exp = add( add( exp1, 1 ), sub( Q_exc, Qexc_diff ) ); tmp_exp = add( add( exp1, 1 ), sub( Q_exc, Qexc_diff ) );
...@@ -208,7 +212,11 @@ void Comp_and_apply_gain_ivas_fx( ...@@ -208,7 +212,11 @@ void Comp_and_apply_gain_ivas_fx(
y_gain = extract_l( Pow2( 14, frac ) ); /* Put 14 as exponent so that */ y_gain = extract_l( Pow2( 14, frac ) ); /* Put 14 as exponent so that */
/* output of Pow2() will be: */ /* output of Pow2() will be: */
/* 16384 < Pow2() <= 32767 */ /* 16384 < Pow2() <= 32767 */
#ifdef ISSUE_1796_replace_shl_o
Ener_per_bd_yQ[i_band] = shl_sat( y_gain, sub( exp1, 13 ) ); /*Q13*/
#else
Ener_per_bd_yQ[i_band] = shl_o( y_gain, sub( exp1, 13 ), &Overflow ); /*Q13*/ Ener_per_bd_yQ[i_band] = shl_o( y_gain, sub( exp1, 13 ), &Overflow ); /*Q13*/
#endif
move16(); /*Q1 */ move16(); /*Q1 */
tmp_exp = add( add( exp1, 1 ), sub( *Q_exc, Qexc_diff ) ); tmp_exp = add( add( exp1, 1 ), sub( *Q_exc, Qexc_diff ) );
......
...@@ -565,7 +565,11 @@ static void envelop_modify_fx( ...@@ -565,7 +565,11 @@ static void envelop_modify_fx(
/* output of Pow2() will be: */ /* output of Pow2() will be: */
/* 16384 < Pow2() <= 32767 */ /* 16384 < Pow2() <= 32767 */
exp = sub( exp, 14 ); exp = sub( exp, 14 );
#ifdef ISSUE_1796_replace_shl_o
Ener1_fx = mult_ro( 13107, shl_sat( tmp, exp ), &Overflow ); /*Q0 */
#else
Ener1_fx = mult_ro( 13107, shl_o( tmp, exp, &Overflow ), &Overflow ); /*Q0 */ Ener1_fx = mult_ro( 13107, shl_o( tmp, exp, &Overflow ), &Overflow ); /*Q0 */
#endif
FOR( j = 0; j < 16; j++ ) FOR( j = 0; j < 16; j++ )
{ {
...@@ -591,7 +595,11 @@ static void envelop_modify_fx( ...@@ -591,7 +595,11 @@ static void envelop_modify_fx(
/* output of Pow2() will be: */ /* output of Pow2() will be: */
/* 16384 < Pow2() <= 32767 */ /* 16384 < Pow2() <= 32767 */
exp = sub( exp, 14 ); exp = sub( exp, 14 );
#ifdef ISSUE_1796_replace_shl_o
Ener1_fx = mult_r( 13107, shl_sat( tmp, exp ) ); /*Q0 */
#else
Ener1_fx = mult_r( 13107, shl_o( tmp, exp, &Overflow ) ); /*Q0 */ Ener1_fx = mult_r( 13107, shl_o( tmp, exp, &Overflow ) ); /*Q0 */
#endif
src_fx = &exc_diffQ_fx[224]; src_fx = &exc_diffQ_fx[224];
FOR( j = 0; j < 32; j++ ) FOR( j = 0; j < 32; j++ )
...@@ -708,7 +716,11 @@ void highband_exc_dct_in_fx( ...@@ -708,7 +716,11 @@ void highband_exc_dct_in_fx(
/* output of Pow2() will be: */ /* output of Pow2() will be: */
/* 16384 < Pow2() <= 32767 */ /* 16384 < Pow2() <= 32767 */
exp = sub( exp, 14 ); exp = sub( exp, 14 );
#ifdef ISSUE_1796_replace_shl_o
tmp1 = shl_sat( tmp, exp );
#else
tmp1 = shl_o( tmp, exp, &Overflow ); tmp1 = shl_o( tmp, exp, &Overflow );
#endif
move16(); move16();
ener = add_o( tmp1, ener, &Overflow ); /*Q0 */ ener = add_o( tmp1, ener, &Overflow ); /*Q0 */
} }
...@@ -1086,7 +1098,11 @@ void highband_exc_dct_in_ivas_fx( ...@@ -1086,7 +1098,11 @@ void highband_exc_dct_in_ivas_fx(
/* output of Pow2() will be: */ /* output of Pow2() will be: */
/* 16384 < Pow2() <= 32767 */ /* 16384 < Pow2() <= 32767 */
exp = sub( exp, 14 ); exp = sub( exp, 14 );
#ifdef ISSUE_1796_replace_shl_o
tmp1 = shl_sat( tmp, exp );
#else
tmp1 = shl_o( tmp, exp, &Overflow ); tmp1 = shl_o( tmp, exp, &Overflow );
#endif
move16(); move16();
ener = add_o( tmp1, ener, &Overflow ); /*Q0 */ ener = add_o( tmp1, ener, &Overflow ); /*Q0 */
} }
......
...@@ -212,13 +212,29 @@ void hp20( Word16 signal[], /* i/o: signal to filter any * ...@@ -212,13 +212,29 @@ void hp20( Word16 signal[], /* i/o: signal to filter any *
IF( prescale != prescaleOld ) IF( prescale != prescaleOld )
{ {
diff = sub( prescale, prescaleOld ); diff = sub( prescale, prescaleOld );
#ifdef ISSUE_1799_replace_L_shr_o
mem[0] = L_shr_sat( mem[0], diff );
#else
mem[0] = L_shr_o( mem[0], diff, &Overflow ); mem[0] = L_shr_o( mem[0], diff, &Overflow );
#endif
move32(); move32();
#ifdef ISSUE_1799_replace_L_shr_o
mem[1] = L_shr_sat( mem[1], diff );
#else
mem[1] = L_shr_o( mem[1], diff, &Overflow ); mem[1] = L_shr_o( mem[1], diff, &Overflow );
#endif
move32(); move32();
#ifdef ISSUE_1799_replace_L_shr_o
mem[2] = L_shr_sat( mem[2], diff );
#else
mem[2] = L_shr_o( mem[2], diff, &Overflow ); mem[2] = L_shr_o( mem[2], diff, &Overflow );
#endif
move32(); move32();
#ifdef ISSUE_1799_replace_L_shr_o
mem[3] = L_shr_sat( mem[3], diff );
#else
mem[3] = L_shr_o( mem[3], diff, &Overflow ); mem[3] = L_shr_o( mem[3], diff, &Overflow );
#endif
move32(); move32();
mem[4] = L_deposit_l( prescale ); mem[4] = L_deposit_l( prescale );
} }
...@@ -325,13 +341,29 @@ void hp20_fx_32( ...@@ -325,13 +341,29 @@ void hp20_fx_32(
prescale = s_min( 3, sub( 1 + HP20_COEFF_SCALE, prescale ) ); prescale = s_min( 3, sub( 1 + HP20_COEFF_SCALE, prescale ) );
diff = sub( prescale, prescaleOld ); diff = sub( prescale, prescaleOld );
#ifdef ISSUE_1799_replace_L_shr_o
mem_fx[0] = L_shr_sat( mem_fx[0], diff );
#else
mem_fx[0] = L_shr_o( mem_fx[0], diff, &Overflow ); mem_fx[0] = L_shr_o( mem_fx[0], diff, &Overflow );
#endif
move32(); move32();
#ifdef ISSUE_1799_replace_L_shr_o
mem_fx[1] = L_shr_sat( mem_fx[1], diff );
#else
mem_fx[1] = L_shr_o( mem_fx[1], diff, &Overflow ); mem_fx[1] = L_shr_o( mem_fx[1], diff, &Overflow );
#endif
move32(); move32();
#ifdef ISSUE_1799_replace_L_shr_o
mem_fx[2] = L_shr_sat( mem_fx[2], diff );
#else
mem_fx[2] = L_shr_o( mem_fx[2], diff, &Overflow ); mem_fx[2] = L_shr_o( mem_fx[2], diff, &Overflow );
#endif
move32(); move32();
#ifdef ISSUE_1799_replace_L_shr_o
mem_fx[3] = L_shr_sat( mem_fx[3], diff );
#else
mem_fx[3] = L_shr_o( mem_fx[3], diff, &Overflow ); mem_fx[3] = L_shr_o( mem_fx[3], diff, &Overflow );
#endif
move32(); move32();
mem_fx[4] = L_deposit_l( prescale_current_frame ); mem_fx[4] = L_deposit_l( prescale_current_frame );
move32(); move32();
......
...@@ -163,7 +163,11 @@ void mdct_spectrum_denorm_fx( ...@@ -163,7 +163,11 @@ void mdct_spectrum_denorm_fx(
pd_fx = div_s( shl( npulses[k], exp_normn ), shl( band_width[k], exp_normd ) ); /* 15 + (exp_norm - exp_normd) */ pd_fx = div_s( shl( npulses[k], exp_normn ), shl( band_width[k], exp_normd ) ); /* 15 + (exp_norm - exp_normd) */
Qpd = add( sub( exp_normn, exp_normd ), 15 ); Qpd = add( sub( exp_normn, exp_normd ), 15 );
#ifdef ISSUE_1796_replace_shl_o
cond_fx = sub( shl_sat( pd_fx, sub( 15, Qpd ) ), pd_thresh_fx /*Q15*/ ); /* Q15 */
#else
cond_fx = sub( shl_o( pd_fx, sub( 15, Qpd ), &Overflow ), pd_thresh_fx /*Q15*/ ); /* Q15 */ cond_fx = sub( shl_o( pd_fx, sub( 15, Qpd ), &Overflow ), pd_thresh_fx /*Q15*/ ); /* Q15 */
#endif
Overflow = 0; Overflow = 0;
move16(); /* allow overflow happen. */ move16(); /* allow overflow happen. */
IF( cond_fx < 0 ) IF( cond_fx < 0 )
...@@ -335,7 +339,11 @@ void mdct_spectrum_denorm_ivas_fx( ...@@ -335,7 +339,11 @@ void mdct_spectrum_denorm_ivas_fx(
pd_fx = div_s( shl( npulses[k], exp_normn ), shl( band_width[k], exp_normd ) ); /* 15 + (exp_normn + exp_normd) */ pd_fx = div_s( shl( npulses[k], exp_normn ), shl( band_width[k], exp_normd ) ); /* 15 + (exp_normn + exp_normd) */
Qpd = add( sub( exp_normn, exp_normd ), 15 ); Qpd = add( sub( exp_normn, exp_normd ), 15 );
#ifdef ISSUE_1796_replace_shl_o
cond_fx = sub( shl_sat( pd_fx, sub( 15, Qpd ) ), pd_thresh_fx /*Q15*/ ); /* Q15 */
#else
cond_fx = sub( shl_o( pd_fx, sub( 15, Qpd ), &Overflow ), pd_thresh_fx /*Q15*/ ); /* Q15 */ cond_fx = sub( shl_o( pd_fx, sub( 15, Qpd ), &Overflow ), pd_thresh_fx /*Q15*/ ); /* Q15 */
#endif
Overflow = 0; Overflow = 0;
move16(); /* allow overflow happen. */ move16(); /* allow overflow happen. */
IF( cond_fx < 0 ) IF( cond_fx < 0 )
......
...@@ -467,7 +467,11 @@ void hq2_noise_inject_fx( ...@@ -467,7 +467,11 @@ void hq2_noise_inject_fx(
} }
L_tmp = Mult_32_16( Ep_fx[k], fac_fx ); /*Q(Q_Ep_fx[k]+12-15 = Q_Ep_fx[k]-3) */ L_tmp = Mult_32_16( Ep_fx[k], fac_fx ); /*Q(Q_Ep_fx[k]+12-15 = Q_Ep_fx[k]-3) */
#ifdef ISSUE_1799_replace_L_shr_o
ni_gain_fx[k] = L_shr_sat( L_tmp, sub( Q_Ep_fx[k], 20 ) );
#else
ni_gain_fx[k] = L_shr_o( L_tmp, sub( Q_Ep_fx[k], 20 ), &Overflow ); ni_gain_fx[k] = L_shr_o( L_tmp, sub( Q_Ep_fx[k], 20 ), &Overflow );
#endif
move32(); /*Q17 */ move32(); /*Q17 */
} }
ELSE ELSE
...@@ -608,7 +612,11 @@ void hq2_noise_inject_fx( ...@@ -608,7 +612,11 @@ void hq2_noise_inject_fx(
IF( band_width[k] != 0 ) IF( band_width[k] != 0 )
{ {
Q_speech = norm_s( band_width[k] ); Q_speech = norm_s( band_width[k] );
#ifdef ISSUE_1796_replace_shl_o
tmp = shl_sat( band_width[k], Q_speech ); /*Q(Q_speech) */
#else
tmp = shl_o( band_width[k], Q_speech, &Overflow ); /*Q(Q_speech) */ tmp = shl_o( band_width[k], Q_speech, &Overflow ); /*Q(Q_speech) */
#endif
tmp = div_s( 16384 /* 0.5 in Q15 */, tmp ); /*Q(15+14-Q_speech) */ tmp = div_s( 16384 /* 0.5 in Q15 */, tmp ); /*Q(15+14-Q_speech) */
} }
ELSE ELSE
......
...@@ -111,11 +111,23 @@ void ifft_rel_fx( ...@@ -111,11 +111,23 @@ void ifft_rel_fx(
t1 = sub_o( *xi1, *xi3, &Overflow ); /*Qx*/ t1 = sub_o( *xi1, *xi3, &Overflow ); /*Qx*/
*xi1 = add_o( *xi1, *xi3, &Overflow ); /*Qx*/ *xi1 = add_o( *xi1, *xi3, &Overflow ); /*Qx*/
move16(); move16();
#ifdef ISSUE_1796_replace_shl_o
*xi2 = shl_sat( *xi2, 1 ); /*Qx*/
#else
*xi2 = shl_o( *xi2, 1, &Overflow ); /*Qx*/ *xi2 = shl_o( *xi2, 1, &Overflow ); /*Qx*/
#endif
move16(); move16();
#ifdef ISSUE_1796_replace_shl_o
*xi3 = sub_o( t1, shl_sat( *xi4, 1 ), &Overflow ); /*Qx*/
#else
*xi3 = sub_o( t1, shl_o( *xi4, 1, &Overflow ), &Overflow ); /*Qx*/ *xi3 = sub_o( t1, shl_o( *xi4, 1, &Overflow ), &Overflow ); /*Qx*/
#endif
move16(); move16();
#ifdef ISSUE_1796_replace_shl_o
*xi4 = add_o( t1, shl_sat( *xi4, 1 ), &Overflow ); /*Qx*/
#else
*xi4 = add_o( t1, shl_o( *xi4, 1, &Overflow ), &Overflow ); /*Qx*/ *xi4 = add_o( t1, shl_o( *xi4, 1, &Overflow ), &Overflow ); /*Qx*/
#endif
move16(); move16();
IF( NE_16( n4, 1 ) ) IF( NE_16( n4, 1 ) )
...@@ -127,9 +139,17 @@ void ifft_rel_fx( ...@@ -127,9 +139,17 @@ void ifft_rel_fx(
move16(); move16();
*( xi2 + n8 ) = sub_o( *( xi4 + n8 ), *( xi3 + n8 ), &Overflow ); /*Qx*/ *( xi2 + n8 ) = sub_o( *( xi4 + n8 ), *( xi3 + n8 ), &Overflow ); /*Qx*/
move16(); move16();
#ifdef ISSUE_1796_replace_shl_o
*( xi3 + n8 ) = negate( shl_sat( add_o( t2, t1, &Overflow ), 1 ) ); /*Qx*/
#else
*( xi3 + n8 ) = negate( shl_o( add_o( t2, t1, &Overflow ), 1, &Overflow ) ); /*Qx*/ *( xi3 + n8 ) = negate( shl_o( add_o( t2, t1, &Overflow ), 1, &Overflow ) ); /*Qx*/
#endif
move16(); move16();
#ifdef ISSUE_1796_replace_shl_o
*( xi4 + n8 ) = shl_sat( sub_o( t1, t2, &Overflow ), 1 ); /*Qx*/
#else
*( xi4 + n8 ) = shl_o( sub_o( t1, t2, &Overflow ), 1, &Overflow ); /*Qx*/ *( xi4 + n8 ) = shl_o( sub_o( t1, t2, &Overflow ), 1, &Overflow ); /*Qx*/
#endif
move16(); move16();
} }
xi1 += id; xi1 += id;
......
...@@ -70,14 +70,8 @@ Word32 Interpol_lc_fx( /* o : interpolated value ...@@ -70,14 +70,8 @@ Word32 Interpol_lc_fx( /* o : interpolated value
c2 += up_samp; /* move16() not needed, since the coefficient can be rearrange in bit exact way */ c2 += up_samp; /* move16() not needed, since the coefficient can be rearrange in bit exact way */
c1 += up_samp; c1 += up_samp;
} }
#ifdef OPT_SBA_ENC_V2_BE
L_sum = W_shl_sat_l( L_sum64, 1 ); /*Q15*/ L_sum = W_shl_sat_l( L_sum64, 1 ); /*Q15*/
} }
#else
L_sum = W_sat_l( L_sum64 ); /*Q14*/
}
L_sum = L_shl_sat( L_sum, 1 ); /*Q15*/
#endif
return L_sum; return L_sum;
} }
......
...@@ -1562,7 +1562,9 @@ typedef enum ...@@ -1562,7 +1562,9 @@ typedef enum
typedef enum typedef enum
{ {
IVAS_FILTER_ORDER_1 = 1, IVAS_FILTER_ORDER_1 = 1,
#ifndef NONBE_FIX_MC_LFE_LPF
IVAS_FILTER_ORDER_2 = 2, IVAS_FILTER_ORDER_2 = 2,
#endif
IVAS_FILTER_ORDER_4 = 4, IVAS_FILTER_ORDER_4 = 4,
} ivas_filter_order; } ivas_filter_order;
......
This diff is collapsed.
...@@ -614,7 +614,6 @@ void ivas_fb_mixer_get_windowed_fr_fx( ...@@ -614,7 +614,6 @@ void ivas_fb_mixer_get_windowed_fr_fx(
Word16 n_new_samples; Word16 n_new_samples;
Word32 fr_in_block_fx[L_FRAME48k * 2]; Word32 fr_in_block_fx[L_FRAME48k * 2];
const Word16 *win_ptr_fx; const Word16 *win_ptr_fx;
#ifdef OPT_MCT_ENC_V1_BE
Word16 two_mdft_len = shl( mdft_len, 1 ); Word16 two_mdft_len = shl( mdft_len, 1 );
Word16 tmp = sub( shl( mdft_len, 1 ), length ); Word16 tmp = sub( shl( mdft_len, 1 ), length );
Word16 gb_neg = negate( gb ); Word16 gb_neg = negate( gb );
...@@ -622,11 +621,6 @@ void ivas_fb_mixer_get_windowed_fr_fx( ...@@ -622,11 +621,6 @@ void ivas_fb_mixer_get_windowed_fr_fx(
n_old_samples = s_min( ( sub( hFbMixer->fb_cfg->prior_input_length, hFbMixer->fb_cfg->windowed_fr_offset ) ), two_mdft_len ); n_old_samples = s_min( ( sub( hFbMixer->fb_cfg->prior_input_length, hFbMixer->fb_cfg->windowed_fr_offset ) ), two_mdft_len );
offset = sub( tmp, hFbMixer->ana_window_offset ); offset = sub( tmp, hFbMixer->ana_window_offset );
rev_offset = sub( two_mdft_len, hFbMixer->ana_window_offset ); rev_offset = sub( two_mdft_len, hFbMixer->ana_window_offset );
#else
n_old_samples = s_min( ( sub( hFbMixer->fb_cfg->prior_input_length, hFbMixer->fb_cfg->windowed_fr_offset ) ), ( shl( mdft_len, 1 ) ) );
offset = sub( sub( shl( mdft_len, 1 ), length ), hFbMixer->ana_window_offset );
rev_offset = sub( shl( mdft_len, 1 ), hFbMixer->ana_window_offset );
#endif
set32_fx( fr_in_block_fx, 0, offset ); set32_fx( fr_in_block_fx, 0, offset );
n_new_samples = s_max( 0, sub( shl( length, 1 ), n_old_samples ) ); n_new_samples = s_max( 0, sub( shl( length, 1 ), n_old_samples ) );
FOR( ch_idx = 0; ch_idx < nchan_fb_in; ch_idx++ ) FOR( ch_idx = 0; ch_idx < nchan_fb_in; ch_idx++ )
...@@ -636,41 +630,21 @@ void ivas_fb_mixer_get_windowed_fr_fx( ...@@ -636,41 +630,21 @@ void ivas_fb_mixer_get_windowed_fr_fx(
win_ptr_fx = hFbMixer->pAna_window_fx; /*Q15*/ win_ptr_fx = hFbMixer->pAna_window_fx; /*Q15*/
#ifdef OPT_MCT_ENC_V1_BE
FOR( j = offset; j < tmp; j++ ) FOR( j = offset; j < tmp; j++ )
#else
FOR( j = offset; j < sub( shl( mdft_len, 1 ), length ); j++ )
#endif
{ {
fr_in_block_fx[j] = Mpy_32_16_1( fr_in_block_fx[j], ( *( win_ptr_fx++ ) ) ); // Qx + 15 - 15 = Qx fr_in_block_fx[j] = Mpy_32_16_1( fr_in_block_fx[j], ( *( win_ptr_fx++ ) ) ); // Qx + 15 - 15 = Qx
move32(); move32();
} }
#ifdef OPT_MCT_ENC_V1_BE
FOR( j = rev_offset; j < two_mdft_len; j++ ) FOR( j = rev_offset; j < two_mdft_len; j++ )
#else
FOR( j = rev_offset; j < shl( mdft_len, 1 ); j++ )
#endif
{ {
fr_in_block_fx[j] = Mpy_32_16_1( fr_in_block_fx[j], ( *( --win_ptr_fx ) ) ); // Qx + 15 - 15 = Qx fr_in_block_fx[j] = Mpy_32_16_1( fr_in_block_fx[j], ( *( --win_ptr_fx ) ) ); // Qx + 15 - 15 = Qx
move32(); move32();
} }
#ifdef OPT_MCT_ENC_V1_BE
scale_sig32( fr_in_block_fx, two_mdft_len, gb_neg ); scale_sig32( fr_in_block_fx, two_mdft_len, gb_neg );
#else
FOR( Word16 i = 0; i < shl( mdft_len, 1 ); i++ )
{
fr_in_block_fx[i] = L_shr( fr_in_block_fx[i], gb ); // Qx - gb
move32();
}
#endif
#ifdef OPT_MCT_ENC_V1_BE
ivas_mdft_fx( fr_in_block_fx, frame_f_real_fx[ch_idx], frame_f_imag_fx[ch_idx], two_mdft_len, mdft_len ); ivas_mdft_fx( fr_in_block_fx, frame_f_real_fx[ch_idx], frame_f_imag_fx[ch_idx], two_mdft_len, mdft_len );
#else
ivas_mdft_fx( fr_in_block_fx, frame_f_real_fx[ch_idx], frame_f_imag_fx[ch_idx], shl( mdft_len, 1 ), mdft_len );
#endif
} }
return; return;
...@@ -783,13 +757,11 @@ void ivas_fb_mixer_process_fx( ...@@ -783,13 +757,11 @@ void ivas_fb_mixer_process_fx(
pMdft_out_fx[0] = Mdft_out_0_fx; pMdft_out_fx[0] = Mdft_out_0_fx;
pMdft_out_fx[1] = Mdft_out_1_fx; pMdft_out_fx[1] = Mdft_out_1_fx;
#ifdef OPT_SBA_ENC_V1_BE
Word16 total_guard = find_guarded_bits_fx( num_bands ); Word16 total_guard = find_guarded_bits_fx( num_bands );
Word16 total_guard_2 = find_guarded_bits_fx( shl( frame_len, 1 ) ); Word16 total_guard_2 = find_guarded_bits_fx( shl( frame_len, 1 ) );
Word16 tmp_q = sub( sub( *q_mixer_mat_fx, total_guard ), 32 ); // Q30 + hFbMixer->q_prior_mixer_fx - 31 - total_guard - 31 Word16 tmp_q = sub( sub( *q_mixer_mat_fx, total_guard ), 32 ); // Q30 + hFbMixer->q_prior_mixer_fx - 31 - total_guard - 31
Word16 len = shl( frame_len, 1 ); Word16 len = shl( frame_len, 1 );
Word16 res_q, q_check; Word16 res_q, q_check;
#endif
FOR( ch = ( hFbMixer->fb_cfg->active_w_mixing == 0 ); ch < hFbMixer->fb_cfg->num_out_chans; ch++ ) FOR( ch = ( hFbMixer->fb_cfg->active_w_mixing == 0 ); ch < hFbMixer->fb_cfg->num_out_chans; ch++ )
{ {
/* Run a loop of 2 to calculate current frame's filterbank output and prev frame's output */ /* Run a loop of 2 to calculate current frame's filterbank output and prev frame's output */
...@@ -804,12 +776,10 @@ void ivas_fb_mixer_process_fx( ...@@ -804,12 +776,10 @@ void ivas_fb_mixer_process_fx(
IF( in_out_mixer_map[ch][j] != 0 ) IF( in_out_mixer_map[ch][j] != 0 )
{ {
#ifdef OPT_SBA_ENC_V1_BE
res_q = add( tmp_q, hFbMixer->q_ppFilterbank_inFR[j] ); res_q = add( tmp_q, hFbMixer->q_ppFilterbank_inFR[j] );
q_check = s_min( q_pOut_fr_fx, res_q ); q_check = s_min( q_pOut_fr_fx, res_q );
scale_sig32( pOut_fr_re_fx, frame_len, sub( q_check, q_pOut_fr_fx ) ); scale_sig32( pOut_fr_re_fx, frame_len, sub( q_check, q_pOut_fr_fx ) );
scale_sig32( pOut_fr_im_fx, frame_len, sub( q_check, q_pOut_fr_fx ) ); scale_sig32( pOut_fr_im_fx, frame_len, sub( q_check, q_pOut_fr_fx ) );
#endif
Word32 filterbank_mixer_bins_re_fx[L_FRAME48k]; Word32 filterbank_mixer_bins_re_fx[L_FRAME48k];
Word32 filterbank_mixer_bins_im_fx[L_FRAME48k]; Word32 filterbank_mixer_bins_im_fx[L_FRAME48k];
Word32 *pFb_inFR_re_fx = hFbMixer->ppFilterbank_inFR_re_fx[j]; // Q(hFbMixer->q_ppFilterbank_inFR_re_fx) Word32 *pFb_inFR_re_fx = hFbMixer->ppFilterbank_inFR_re_fx[j]; // Q(hFbMixer->q_ppFilterbank_inFR_re_fx)
...@@ -818,10 +788,6 @@ void ivas_fb_mixer_process_fx( ...@@ -818,10 +788,6 @@ void ivas_fb_mixer_process_fx(
set_zero_fx( filterbank_mixer_bins_re_fx, frame_len ); set_zero_fx( filterbank_mixer_bins_re_fx, frame_len );
set_zero_fx( filterbank_mixer_bins_im_fx, frame_len ); set_zero_fx( filterbank_mixer_bins_im_fx, frame_len );
#ifndef OPT_SBA_ENC_V1_BE
Word16 total_guard = find_guarded_bits_fx( num_bands );
move16();
#endif
FOR( i = 0; i < num_bands; i++ ) FOR( i = 0; i < num_bands; i++ )
{ {
Word16 start_offset = pFb->fb_consts.pFilterbank_bins_start_offset[i]; Word16 start_offset = pFb->fb_consts.pFilterbank_bins_start_offset[i];
...@@ -847,69 +813,35 @@ void ivas_fb_mixer_process_fx( ...@@ -847,69 +813,35 @@ void ivas_fb_mixer_process_fx(
hFbMixer->prior_mixer_fx[ch][j][i] = mixer_mat_fx[ch][j][i]; // Q(q_mixer_mat_fx) hFbMixer->prior_mixer_fx[ch][j][i] = mixer_mat_fx[ch][j][i]; // Q(q_mixer_mat_fx)
move32(); move32();
} }
#ifndef OPT_SBA_ENC_V1_BE
Word16 res_q = 0;
move16();
#endif
FOR( k = 0; k < frame_len; k++ ) FOR( k = 0; k < frame_len; k++ )
{ {
Word32 temp_out_re_fx, temp_out_im_fx; Word32 temp_out_re_fx, temp_out_im_fx;
ivas_cmult_fix( filterbank_mixer_bins_re_fx[k], filterbank_mixer_bins_im_fx[k], pFb_inFR_re_fx[k], ivas_cmult_fix( filterbank_mixer_bins_re_fx[k], filterbank_mixer_bins_im_fx[k], pFb_inFR_re_fx[k],
pFb_inFR_im_fx[k], &temp_out_re_fx, &temp_out_im_fx ); pFb_inFR_im_fx[k], &temp_out_re_fx, &temp_out_im_fx );
#ifndef OPT_SBA_ENC_V1_BE
res_q = sub( add( sub( sub( add( 30, *q_mixer_mat_fx ), 31 ), total_guard ), hFbMixer->q_ppFilterbank_inFR[j] ), 31 );
Word16 q_check = s_min( q_pOut_fr_fx, res_q );
IF( NE_16( q_check, q_pOut_fr_fx ) )
{
pOut_fr_re_fx[k] = L_shr( pOut_fr_re_fx[k], sub( q_pOut_fr_fx, q_check ) ); // q_pOut_fr_fx -> q_check
move32();
pOut_fr_im_fx[k] = L_shr( pOut_fr_im_fx[k], sub( q_pOut_fr_fx, q_check ) ); // q_pOut_fr_fx -> q_check
move32();
}
#endif
IF( NE_16( q_check, res_q ) ) IF( NE_16( q_check, res_q ) )
{ {
temp_out_re_fx = L_shr( temp_out_re_fx, sub( res_q, q_check ) ); // res_q -> q_check temp_out_re_fx = L_shr( temp_out_re_fx, sub( res_q, q_check ) ); // res_q -> q_check
temp_out_im_fx = L_shr( temp_out_im_fx, sub( res_q, q_check ) ); // res_q -> q_check temp_out_im_fx = L_shr( temp_out_im_fx, sub( res_q, q_check ) ); // res_q -> q_check
} }
#ifndef OPT_SBA_ENC_V1_BE
res_q = q_check;
move16();
#endif
pOut_fr_re_fx[k] = L_add_sat( pOut_fr_re_fx[k], temp_out_re_fx ); // res_q pOut_fr_re_fx[k] = L_add_sat( pOut_fr_re_fx[k], temp_out_re_fx ); // res_q
move32(); move32();
pOut_fr_im_fx[k] = L_add_sat( pOut_fr_im_fx[k], temp_out_im_fx ); // res_q pOut_fr_im_fx[k] = L_add_sat( pOut_fr_im_fx[k], temp_out_im_fx ); // res_q
move32(); move32();
} }
#ifdef OPT_SBA_ENC_V1_BE
q_pOut_fr_fx = q_check; q_pOut_fr_fx = q_check;
#else
q_pOut_fr_fx = res_q;
move16();
#endif
} }
} }
#ifndef OPT_SBA_ENC_V1_BE
Word16 scale = sub( s_min( L_norm_arr( pOut_fr_re_fx, frame_len ), L_norm_arr( pOut_fr_im_fx, frame_len ) ), find_guarded_bits_fx( shl( frame_len, 1 ) ) );
#else
Word16 scale = sub( s_min( L_norm_arr( pOut_fr_re_fx, frame_len ), L_norm_arr( pOut_fr_im_fx, frame_len ) ), total_guard_2 ); Word16 scale = sub( s_min( L_norm_arr( pOut_fr_re_fx, frame_len ), L_norm_arr( pOut_fr_im_fx, frame_len ) ), total_guard_2 );
#endif
scale_sig32( pOut_fr_re_fx, frame_len, scale ); scale_sig32( pOut_fr_re_fx, frame_len, scale );
scale_sig32( pOut_fr_im_fx, frame_len, scale ); scale_sig32( pOut_fr_im_fx, frame_len, scale );
ivas_imdft_fx( pOut_fr_re_fx, pOut_fr_im_fx, pMdft_out_fx[hist], frame_len ); ivas_imdft_fx( pOut_fr_re_fx, pOut_fr_im_fx, pMdft_out_fx[hist], frame_len );
q_pMdft_out_fx[hist] = add( q_pOut_fr_fx, scale ); q_pMdft_out_fx[hist] = add( q_pOut_fr_fx, scale );
move16(); move16();
} }
#ifdef OPT_SBA_ENC_V1_BE
scale_sig32( pMdft_out_fx[0], len, sub( s_min( q_pMdft_out_fx[0], q_pMdft_out_fx[1] ), q_pMdft_out_fx[0] ) ); scale_sig32( pMdft_out_fx[0], len, sub( s_min( q_pMdft_out_fx[0], q_pMdft_out_fx[1] ), q_pMdft_out_fx[0] ) );
scale_sig32( pMdft_out_fx[1], len, sub( s_min( q_pMdft_out_fx[0], q_pMdft_out_fx[1] ), q_pMdft_out_fx[1] ) ); scale_sig32( pMdft_out_fx[1], len, sub( s_min( q_pMdft_out_fx[0], q_pMdft_out_fx[1] ), q_pMdft_out_fx[1] ) );
#else
scale_sig32( pMdft_out_fx[0], shl( frame_len, 1 ), sub( s_min( q_pMdft_out_fx[0], q_pMdft_out_fx[1] ), q_pMdft_out_fx[0] ) );
scale_sig32( pMdft_out_fx[1], shl( frame_len, 1 ), sub( s_min( q_pMdft_out_fx[0], q_pMdft_out_fx[1] ), q_pMdft_out_fx[1] ) );
#endif
ivas_fb_mixer_cross_fading_fx( hFbMixer, ppOut_pcm_fx, pMdft_out_fx[0], pMdft_out_fx[1], ch, frame_len, frame_len ); ivas_fb_mixer_cross_fading_fx( hFbMixer, ppOut_pcm_fx, pMdft_out_fx[0], pMdft_out_fx[1], ch, frame_len, frame_len );
q_ppOut_pcm_fx[ch] = s_min( q_pMdft_out_fx[0], q_pMdft_out_fx[1] ); q_ppOut_pcm_fx[ch] = s_min( q_pMdft_out_fx[0], q_pMdft_out_fx[1] );
move16(); move16();
......
...@@ -64,7 +64,11 @@ void ivas_filters_init_fx( ...@@ -64,7 +64,11 @@ void ivas_filters_init_fx(
test(); test();
#ifdef NONBE_FIX_MC_LFE_LPF
IF( EQ_16( order, IVAS_FILTER_ORDER_1 ) )
#else
IF( EQ_16( order, IVAS_FILTER_ORDER_2 ) || EQ_16( order, IVAS_FILTER_ORDER_1 ) ) IF( EQ_16( order, IVAS_FILTER_ORDER_2 ) || EQ_16( order, IVAS_FILTER_ORDER_1 ) )
#endif
{ {
filter_state->filt_len = add( order, 1 ); filter_state->filt_len = add( order, 1 );
move16(); move16();
...@@ -166,7 +170,9 @@ void ivas_filter_process_fx( ...@@ -166,7 +170,9 @@ void ivas_filter_process_fx(
SWITCH( filter_state->order ) SWITCH( filter_state->order )
{ {
case IVAS_FILTER_ORDER_1: case IVAS_FILTER_ORDER_1:
#ifndef NONBE_FIX_MC_LFE_LPF
case IVAS_FILTER_ORDER_2: case IVAS_FILTER_ORDER_2:
#endif
set_val_Word16( pIn_Out_e, sub( Q31, q_factor ), length ); set_val_Word16( pIn_Out_e, sub( Q31, q_factor ), length );
ivas_iir_2_filter_fx( filter_state, pIn_Out_fx, length, IVAS_FILTER_STAGE_0, pIn_Out_e ); ivas_iir_2_filter_fx( filter_state, pIn_Out_fx, length, IVAS_FILTER_STAGE_0, pIn_Out_e );
/* Scale pIn_Out_fx back to input Q */ /* Scale pIn_Out_fx back to input Q */
...@@ -205,7 +211,9 @@ void ivas_filter_process_exp_fx( ...@@ -205,7 +211,9 @@ void ivas_filter_process_exp_fx(
SWITCH( filter_state->order ) SWITCH( filter_state->order )
{ {
case IVAS_FILTER_ORDER_1: case IVAS_FILTER_ORDER_1:
#ifndef NONBE_FIX_MC_LFE_LPF
case IVAS_FILTER_ORDER_2: case IVAS_FILTER_ORDER_2:
#endif
ivas_iir_2_filter_fx( filter_state, pIn_Out_fx, length, IVAS_FILTER_STAGE_0, pIn_Out_e ); ivas_iir_2_filter_fx( filter_state, pIn_Out_fx, length, IVAS_FILTER_STAGE_0, pIn_Out_e );
/* Scale pIn_Out_fx back to input Q */ /* Scale pIn_Out_fx back to input Q */
BREAK; BREAK;
......
...@@ -58,6 +58,8 @@ void ivas_lfe_lpf_select_filt_coeff_fx( ...@@ -58,6 +58,8 @@ void ivas_lfe_lpf_select_filt_coeff_fx(
{ {
SWITCH( order ) SWITCH( order )
{ {
#ifndef NONBE_FIX_MC_LFE_LPF
case IVAS_FILTER_ORDER_2: case IVAS_FILTER_ORDER_2:
SWITCH( sampling_rate ) SWITCH( sampling_rate )
{ {
...@@ -74,6 +76,7 @@ void ivas_lfe_lpf_select_filt_coeff_fx( ...@@ -74,6 +76,7 @@ void ivas_lfe_lpf_select_filt_coeff_fx(
BREAK; BREAK;
} }
BREAK; BREAK;
#endif
case IVAS_FILTER_ORDER_4: case IVAS_FILTER_ORDER_4:
SWITCH( sampling_rate ) SWITCH( sampling_rate )
{ {
......
/******************************************************************************************************
(C) 2022-2025 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB,
Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD.,
Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange,
Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other
contributors to this repository. All Rights Reserved.
This software is protected by copyright law and by international treaties.
The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB,
Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD.,
Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange,
Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other
contributors to this repository retain full ownership rights in their respective contributions in
the software. This notice grants no license of any kind, including but not limited to patent
license, nor is any license granted by implication, estoppel or otherwise.
Contributors are required to enter into the IVAS codec Public Collaboration agreement before making
contributions.
This software is provided "AS IS", without any express or implied warranties. The software is in the
development stage. It is intended exclusively for experts who have experience with such software and
solely for the purpose of inspection. All implied warranties of non-infringement, merchantability
and fitness for a particular purpose are hereby disclaimed and excluded.
Any dispute, controversy or claim arising under or in relation to providing this software shall be
submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in
accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and
the United Nations Convention on Contracts on the International Sales of Goods.
*******************************************************************************************************/
#include "options.h"
#include "ivas_cnst.h"
#include "ivas_prot_fx.h"
#include "prot_fx.h"
#include "ivas_rom_com.h"
#ifdef DEBUGGING
#include "debug.h"
#endif
/*! r : ISM format mode */
ISM_MODE ivas_osba_ism_mode_select(
const Word32 ivas_total_brate, /* i : IVAS total bitrate */
const Word16 nchan_ism /* i : number of input ISM's */
)
{
ISM_MODE ism_mode = ISM_MODE_NONE;
SWITCH( nchan_ism )
{
case 1:
if ( GE_32( ivas_total_brate, IVAS_96k ) )
{
ism_mode = ISM_SBA_MODE_DISC;
move32();
}
BREAK;
case 2:
case 3:
case 4:
if ( GE_32( ivas_total_brate, IVAS_128k ) )
{
ism_mode = ISM_SBA_MODE_DISC;
move32();
}
BREAK;
}
return ism_mode;
}
...@@ -698,17 +698,11 @@ Word16 read_flag_EC_DFT( ...@@ -698,17 +698,11 @@ Word16 read_flag_EC_DFT(
Word16 *flag /* o : flag value */ Word16 *flag /* o : flag value */
); );
void ivas_init_dec_get_num_cldfb_instances( void ivas_init_dec_get_num_cldfb_instances_fx(
Decoder_Struct *st_ivas, /* i : IVAS decoder structure */ Decoder_Struct *st_ivas, /* i : IVAS decoder structure */
Word16 *numCldfbAnalyses, /* o : number of CLDFB analysis instances */ Word16 *numCldfbAnalyses, /* o : number of CLDFB analysis instances */
Word16 *numCldfbSyntheses /* o : number of CLDFB synthesis instances */ Word16 *numCldfbSyntheses /* o : number of CLDFB synthesis instances */
); );
/*file:ivas_init_dec_fx.c*/
void ivas_init_dec_get_num_cldfb_instances_ivas_fx(
Decoder_Struct *st_ivas, /* i : IVAS decoder structure */
Word16 *numCldfbAnalyses, /* o : number of needed CLDFB analysis instances */
Word16 *numCldfbSyntheses /* o : number of needed CLDFB synthesis instances */
);
Word16 masa_sq_fx( Word16 masa_sq_fx(
const Word32 in, /* i : input value */ const Word32 in, /* i : input value */
...@@ -864,7 +858,11 @@ void ivas_lfe_dec_close_fx( ...@@ -864,7 +858,11 @@ void ivas_lfe_dec_close_fx(
ivas_error ivas_create_lfe_dec_fx( ivas_error ivas_create_lfe_dec_fx(
LFE_DEC_HANDLE *hLFE_out, /* o : IVAS LFE decoder structure */ LFE_DEC_HANDLE *hLFE_out, /* o : IVAS LFE decoder structure */
const Word32 output_Fs, /* i : output sampling rate */ const Word32 output_Fs, /* i : output sampling rate */
#ifdef NONBE_FIX_MC_LFE_LPF
const Word32 delay_ns /* i : additional LFE delay to sync other channel outputs */
#else
const Word32 binauralization_delay_ns /* i : additional LFE delay to sync with binaural renderer */ const Word32 binauralization_delay_ns /* i : additional LFE delay to sync with binaural renderer */
#endif
); );
void ivas_lfe_dec_fx( void ivas_lfe_dec_fx(
...@@ -1125,10 +1123,6 @@ void apply_MCT_dec_fx( ...@@ -1125,10 +1123,6 @@ void apply_MCT_dec_fx(
MCT_DEC_HANDLE hMCT, /* i/o: MCT decoder structure */ MCT_DEC_HANDLE hMCT, /* i/o: MCT decoder structure */
Decoder_State **sts, /* i/o: decoder state structure */ Decoder_State **sts, /* i/o: decoder state structure */
Word32 *x[MCT_MAX_CHANNELS][NB_DIV] /* i/o: decoded and dequan. spect. input to MCT */ Word32 *x[MCT_MAX_CHANNELS][NB_DIV] /* i/o: decoded and dequan. spect. input to MCT */
#ifndef OPT_SBA_DEC_PATH
,
Word16 q_x[MCT_MAX_CHANNELS]
#endif /* OPT_SBA_DEC_PATH */
); );
void mctStereoIGF_dec_fx( void mctStereoIGF_dec_fx(
...@@ -1164,11 +1158,6 @@ void stereo_decoder_tcx_fx( ...@@ -1164,11 +1158,6 @@ void stereo_decoder_tcx_fx(
const Word16 last_core_l, /* i : last core for left channel */ const Word16 last_core_l, /* i : last core for left channel */
const Word16 last_core_r, /* i : last core for right channel */ const Word16 last_core_r, /* i : last core for right channel */
const Word16 tmp_plc_upmix /* i : indicates temp upmix for PLC decision */ const Word16 tmp_plc_upmix /* i : indicates temp upmix for PLC decision */
#ifndef OPT_SBA_DEC_PATH
,
Word16 *q_x_ch2,
Word16 *q_x_ch1
#endif /* OPT_SBA_DEC_PATH */
); );
void v_multc_acc_32_16( void v_multc_acc_32_16(
...@@ -1606,11 +1595,7 @@ void ivas_mdct_core_tns_ns_fx( ...@@ -1606,11 +1595,7 @@ void ivas_mdct_core_tns_ns_fx(
Word32 *x_fx[CPE_CHANNELS][NB_DIV], /* o : synthesis @internal_FS */ Word32 *x_fx[CPE_CHANNELS][NB_DIV], /* o : synthesis @internal_FS */
Word32 Aq_fx[CPE_CHANNELS][( NB_SUBFR16k + 1 ) * ( M + 1 )], /* o : LP coefficients */ Word32 Aq_fx[CPE_CHANNELS][( NB_SUBFR16k + 1 ) * ( M + 1 )], /* o : LP coefficients */
const Word16 MCT_flag, /* i : hMCT handle allocated (1) or not (0) */ const Word16 MCT_flag, /* i : hMCT handle allocated (1) or not (0) */
#ifdef OPT_SBA_DEC_V2_NBE
Word16 x_e Word16 x_e
#else /* OPT_SBA_DEC_V2_NBE */
Word16 x_e[CPE_CHANNELS][NB_DIV]
#endif /* OPT_SBA_DEC_V2_NBE */
); );
void decoder_tcx_imdct_fx( void decoder_tcx_imdct_fx(
...@@ -1977,17 +1962,9 @@ void ivas_mdct_core_invQ_fx( ...@@ -1977,17 +1962,9 @@ void ivas_mdct_core_invQ_fx(
Word16 fUseTns[CPE_CHANNELS][NB_DIV], /* i : flag TNS enabled */ Word16 fUseTns[CPE_CHANNELS][NB_DIV], /* i : flag TNS enabled */
STnsData tnsData[CPE_CHANNELS][NB_DIV], /* i : TNS parameter */ STnsData tnsData[CPE_CHANNELS][NB_DIV], /* i : TNS parameter */
Word32 *x_0[CPE_CHANNELS][NB_DIV], /* i/o: signal buffer */ Word32 *x_0[CPE_CHANNELS][NB_DIV], /* i/o: signal buffer */
#ifdef OPT_SBA_DEC_V2_NBE
Word16 x_0_e, Word16 x_0_e,
#else /* OPT_SBA_DEC_V2_NBE */
Word16 x_0_e[CPE_CHANNELS][NB_DIV],
#endif /* OPT_SBA_DEC_V2_NBE */
Word32 *x[CPE_CHANNELS][NB_DIV], /* i/o: signal buffer */ Word32 *x[CPE_CHANNELS][NB_DIV], /* i/o: signal buffer */
#ifdef OPT_SBA_DEC_V2_NBE
Word16 x_e, Word16 x_e,
#else /* OPT_SBA_DEC_V2_NBE */
Word16 x_e[CPE_CHANNELS][NB_DIV],
#endif /* OPT_SBA_DEC_V2_NBE */
Word16 x_len[CPE_CHANNELS][NB_DIV], Word16 x_len[CPE_CHANNELS][NB_DIV],
Word16 Aq[CPE_CHANNELS][( NB_SUBFR16k + 1 ) * ( M + 1 )], /* i : LP coefficients */ Word16 Aq[CPE_CHANNELS][( NB_SUBFR16k + 1 ) * ( M + 1 )], /* i : LP coefficients */
Word16 ms_mask[NB_DIV][MAX_SFB], /* i : M/S mask */ Word16 ms_mask[NB_DIV][MAX_SFB], /* i : M/S mask */
...@@ -2359,6 +2336,9 @@ void ivas_dirac_dec_read_BS_fx( ...@@ -2359,6 +2336,9 @@ void ivas_dirac_dec_read_BS_fx(
Word16 *nb_bits, /* o : number of bits read */ Word16 *nb_bits, /* o : number of bits read */
const Word16 last_bit_pos, /* i : last read bitstream position */ const Word16 last_bit_pos, /* i : last read bitstream position */
const Word16 hodirac_flag, /* i : flag to indicate HO-DirAC mode */ const Word16 hodirac_flag, /* i : flag to indicate HO-DirAC mode */
#ifdef NONBE_FIX_1052_SBA_EXT
const Word16 nchan_transport, /* i : number of transport channels */
#endif
Word16 *dirac_to_spar_md_bands /* o : DirAC->SPAR MD bands */ Word16 *dirac_to_spar_md_bands /* o : DirAC->SPAR MD bands */
); );
...@@ -2397,9 +2377,14 @@ ivas_error ivas_ism_dec_config_fx( ...@@ -2397,9 +2377,14 @@ ivas_error ivas_ism_dec_config_fx(
ivas_error ivas_ism_metadata_dec_create_fx( ivas_error ivas_ism_metadata_dec_create_fx(
Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */
const Word16 n_ISms, /* i : number of objects */ const Word16 n_ISms, /* i : number of separately coded objects */
Word32 element_brate_tmp[] /* o : element bitrate per object */ Word32 element_brate_tmp[] /* o : element bitrate per object */
); );
void ivas_ism_reset_metadata_handle_dec_fx(
ISM_METADATA_HANDLE hIsmMeta /* i/o: ISM metadata handle */
);
ivas_error ivas_sba_dec_reconfigure_fx( ivas_error ivas_sba_dec_reconfigure_fx(
Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */
UWord16 *nSamplesFlushed, /* o : number of samples flushed */ UWord16 *nSamplesFlushed, /* o : number of samples flushed */
...@@ -2415,6 +2400,7 @@ void ivas_spar_md_dec_matrix_close_fx( ...@@ -2415,6 +2400,7 @@ void ivas_spar_md_dec_matrix_close_fx(
ivas_spar_md_dec_state_t *hMdDecoder, /* i/o: SPAR MD decoder handle */ ivas_spar_md_dec_state_t *hMdDecoder, /* i/o: SPAR MD decoder handle */
const Word16 num_channels /* i : number of internal channels */ const Word16 num_channels /* i : number of internal channels */
); );
ivas_error ivas_spar_dec_open_fx( ivas_error ivas_spar_dec_open_fx(
Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */
const Word16 spar_reconfig_flag /* i : SPAR reconfiguration flag */ const Word16 spar_reconfig_flag /* i : SPAR reconfiguration flag */
...@@ -2513,6 +2499,13 @@ Word16 ivas_sba_get_nchan_metadata_fx( ...@@ -2513,6 +2499,13 @@ Word16 ivas_sba_get_nchan_metadata_fx(
const Word32 ivas_total_brate /* i : IVAS total bitrate */ const Word32 ivas_total_brate /* i : IVAS total bitrate */
); );
#ifdef NONBE_FIX_1052_SBA_EXT
/*! r: number of bits in SPAR SID frame */
Word16 ivas_sba_spar_sid_bitlen_fx(
const Word16 nchan_transport /* i : number of transport channels */
);
#endif
void ivas_sba_get_spar_hoa_ch_ind_fx( void ivas_sba_get_spar_hoa_ch_ind_fx(
const Word16 num_md_chs, /* i : number of MD channels */ const Word16 num_md_chs, /* i : number of MD channels */
const Word32 ivas_total_brate, /* i : IVAS total bitrate */ const Word32 ivas_total_brate, /* i : IVAS total bitrate */
...@@ -3517,6 +3510,9 @@ void ivas_qmetadata_enc_sid_encode_fx( ...@@ -3517,6 +3510,9 @@ void ivas_qmetadata_enc_sid_encode_fx(
BSTR_ENC_HANDLE hMetaData, /* i/o: metadata bitstream handle */ BSTR_ENC_HANDLE hMetaData, /* i/o: metadata bitstream handle */
IVAS_QMETADATA *q_metadata, /* i/o: metadata handle */ IVAS_QMETADATA *q_metadata, /* i/o: metadata handle */
const Word16 masa_sid_descriptor, /* i : description of MASA SID coding structure*/ const Word16 masa_sid_descriptor, /* i : description of MASA SID coding structure*/
#ifdef NONBE_FIX_1052_SBA_EXT
const Word16 nchan_transport, /* i : number of transport channels */
#endif
const Word16 ivas_format /* i : ivas format */ const Word16 ivas_format /* i : ivas format */
); );
void ivas_param_mc_enc_fx( void ivas_param_mc_enc_fx(
...@@ -3900,6 +3896,13 @@ void ivas_osba_data_close_fx( ...@@ -3900,6 +3896,13 @@ void ivas_osba_data_close_fx(
SBA_ISM_DATA_HANDLE *hSbaIsmData /* i/o: OSBA rendering handle */ SBA_ISM_DATA_HANDLE *hSbaIsmData /* i/o: OSBA rendering handle */
); );
#ifdef NONBE_FIX_ISM_XOVER_BR
ISM_MODE ivas_osba_ism_mode_select(
const Word32 ivas_total_brate, /* i : IVAS total bitrate */
const Word16 nchan_ism /* i : number of input ISM's */
);
#endif
void ivas_set_ism_importance_interformat_fx( void ivas_set_ism_importance_interformat_fx(
const Word32 ism_total_brate, /* i/o: ISms total bitrate */ const Word32 ism_total_brate, /* i/o: ISms total bitrate */
const Word16 nchan_transport, /* i : number of transported channels */ const Word16 nchan_transport, /* i : number of transported channels */
...@@ -4984,11 +4987,6 @@ Word16 ivas_sba_get_nchan_metadata( ...@@ -4984,11 +4987,6 @@ Word16 ivas_sba_get_nchan_metadata(
const Word32 ivas_total_brate /* i : IVAS total bitrate */ const Word32 ivas_total_brate /* i : IVAS total bitrate */
); );
void ivas_sba_get_spar_hoa_ch_ind(
const Word16 num_md_chs, /* i : number of MD channels */
const Word32 ivas_total_brate, /* i : IVAS total bitrate */
Word16 HOA_md_ind[IVAS_SPAR_MAX_CH] );
/*! r: flag indicating to code SPAR HOA MD for all bands */ /*! r: flag indicating to code SPAR HOA MD for all bands */
void ivas_sba_get_spar_hoa_md_flag( void ivas_sba_get_spar_hoa_md_flag(
const Word16 sba_order, /* i : Ambisonic (SBA) order */ const Word16 sba_order, /* i : Ambisonic (SBA) order */
...@@ -5848,6 +5846,9 @@ ivas_error ivas_dirac_enc_fx( ...@@ -5848,6 +5846,9 @@ ivas_error ivas_dirac_enc_fx(
const Word16 input_frame, /* i : input frame length */ const Word16 input_frame, /* i : input frame length */
const Word16 dtx_vad, /* i : DTX vad flag */ const Word16 dtx_vad, /* i : DTX vad flag */
const IVAS_FORMAT ivas_format, /* i : ivas format */ const IVAS_FORMAT ivas_format, /* i : ivas format */
#ifdef NONBE_FIX_1052_SBA_EXT
const Word16 nchan_transport, /* i : number of transport channels */
#endif
const Word16 hodirac_flag, /* i : hodirac flag */ const Word16 hodirac_flag, /* i : hodirac flag */
const Word16 shift ); const Word16 shift );
......
...@@ -2585,6 +2585,9 @@ const Word16 ivas_lfe_num_dct_pass_bins_tbl[IVAS_LFE_NUM_COEFFS_IN_SUBGRP] = { 8 ...@@ -2585,6 +2585,9 @@ const Word16 ivas_lfe_num_dct_pass_bins_tbl[IVAS_LFE_NUM_COEFFS_IN_SUBGRP] = { 8
const Word16 ivas_lfe_min_shift_tbl[IVAS_LFE_NUM_COEFFS_IN_SUBGRP] = { 1, 0 }; const Word16 ivas_lfe_min_shift_tbl[IVAS_LFE_NUM_COEFFS_IN_SUBGRP] = { 1, 0 };
const Word16 ivas_lfe_lpf_delay_Q15[2] = { 57, 114 }; const Word16 ivas_lfe_lpf_delay_Q15[2] = { 57, 114 };
#ifdef NONBE_FIX_MC_LFE_LPF
const Word32 ivas_lfe_lpf_delay_ns[2] = { 1750000, 3500000 };
#endif
const Word16 dirac_gains_P_idx[16] = const Word16 dirac_gains_P_idx[16] =
{ {
......
...@@ -279,6 +279,9 @@ extern const Word16 ivas_lfe_num_dct_pass_bins_tbl[IVAS_LFE_NUM_COEFFS_IN_SUBGRP ...@@ -279,6 +279,9 @@ extern const Word16 ivas_lfe_num_dct_pass_bins_tbl[IVAS_LFE_NUM_COEFFS_IN_SUBGRP
extern const Word16 ivas_lfe_min_shift_tbl[IVAS_LFE_NUM_COEFFS_IN_SUBGRP]; extern const Word16 ivas_lfe_min_shift_tbl[IVAS_LFE_NUM_COEFFS_IN_SUBGRP];
extern const ivas_lfe_freq_models ivas_str_lfe_freq_models; extern const ivas_lfe_freq_models ivas_str_lfe_freq_models;
extern const Word16 ivas_lfe_lpf_delay_Q15[2]; extern const Word16 ivas_lfe_lpf_delay_Q15[2];
#ifdef NONBE_FIX_MC_LFE_LPF
extern const Word32 ivas_lfe_lpf_delay_ns[2];
#endif
extern const Word16 dirac_gains_P_idx[16]; extern const Word16 dirac_gains_P_idx[16];
......
...@@ -1807,6 +1807,7 @@ const Word16 ivas_lpf_4_butter_48k_sos_e[IVAS_BIQUAD_FILT_LEN << 2] = { ...@@ -1807,6 +1807,7 @@ const Word16 ivas_lpf_4_butter_48k_sos_e[IVAS_BIQUAD_FILT_LEN << 2] = {
-27, -26, -27, 1, 1, 1, 1, 1, 1, 1, 1, 1 -27, -26, -27, 1, 1, 1, 1, 1, 1, 1, 1, 1
}; };
#ifndef NONBE_FIX_MC_LFE_LPF
const Word32 ivas_lpf_2_butter_16k_fx[IVAS_BIQUAD_FILT_LEN << 1] = { /* Q30 */ const Word32 ivas_lpf_2_butter_16k_fx[IVAS_BIQUAD_FILT_LEN << 1] = { /* Q30 */
0xa4d0c, 0x149a17, 0xa4d0c, 0x40000000, 0x849e6300, 0x3b8ad140 0xa4d0c, 0x149a17, 0xa4d0c, 0x40000000, 0x849e6300, 0x3b8ad140
}; };
...@@ -1819,6 +1820,7 @@ const Word32 ivas_lpf_2_butter_32k_fx[IVAS_BIQUAD_FILT_LEN << 1] = { /* Q30 */ ...@@ -1819,6 +1820,7 @@ const Word32 ivas_lpf_2_butter_32k_fx[IVAS_BIQUAD_FILT_LEN << 1] = { /* Q30 */
const Word32 ivas_lpf_2_butter_48k_fx[IVAS_BIQUAD_FILT_LEN << 1] = { /* Q30 */ const Word32 ivas_lpf_2_butter_48k_fx[IVAS_BIQUAD_FILT_LEN << 1] = { /* Q30 */
0x12c07, 0x2580d, 0x12c07, 0x40000000, 0x818a4580, 0x3e7a6a80 0x12c07, 0x2580d, 0x12c07, 0x40000000, 0x818a4580, 0x3e7a6a80
}; };
#endif
const Word32 ivas_lfe_window_coeff_48k_fx[IVAS_LFE_FADE_LEN_48K] = { // Q31 const Word32 ivas_lfe_window_coeff_48k_fx[IVAS_LFE_FADE_LEN_48K] = { // Q31
0x0003a373, 0x000608f6, 0x000888a7, 0x000b3e1b, 0x000e34f1, 0x001174a2, 0x00150328, 0x0018e5e1, 0x001d21eb, 0x0021bc4d, 0x0026ba09, 0x002c202f, 0x0031f3dc, 0x00383a43, 0x003ef8ad, 0x0046347b, 0x004df325, 0x00563a3f, 0x005f0f74, 0x00687888, 0x00727b59, 0x007d1ddb, 0x0088661c, 0x00945a41, 0x00a10087, 0x00ae5f3d, 0x00bc7ccd, 0x00cb5fb3, 0x00db0e7d, 0x00eb8fd0, 0x00fcea61, 0x010f24f8, 0x0122466a, 0x013655a0, 0x014b598e, 0x01615936, 0x01785ba8, 0x01906800, 0x01a9855e, 0x01c3baf0, 0x01df0fee, 0x01fb8b90, 0x02193514, 0x023813c4, 0x02582ee4, 0x02798db8, 0x029c378c, 0x02c033a4, 0x02e58944, 0x030c3fa8, 0x03345e0c, 0x035deba0, 0x0388ef8c, 0x03b570f0, 0x03e376dc, 0x04130858, 0x04442c58, 0x0476e9b8, 0x04ab4760, 0x04e14c00, 0x0518fe48, 0x055264c8, 0x058d8600, 0x05ca6850, 0x06091200, 0x06498930, 0x068bd3f0, 0x06cff830, 0x0715fba8, 0x075de408, 0x07a7b6c8, 0x07f37940, 0x084130a0, 0x0890e200, 0x08e29220, 0x093645c0, 0x098c0150, 0x09e3c940, 0x0a3da180, 0x0a998e30, 0x0af792e0, 0x0b57b320, 0x0bb9f240, 0x0c1e5360, 0x0c84d940, 0x0ced8690, 0x0d585dc0, 0x0dc560f0, 0x0e349200, 0x0ea5f2b0, 0x0f198450, 0x0f8f4820, 0x10073f00, 0x10816980, 0x10fdc840, 0x117c5b00, 0x11fd21e0, 0x12801c60, 0x130549a0, 0x138ca8c0, 0x14163880, 0x14a1f740, 0x152fe320, 0x15bffa00, 0x16523980, 0x16e69ee0, 0x177d2700, 0x1815cec0, 0x18b09260, 0x194d6e00, 0x19ec5d60, 0x1a8d5c20, 0x1b306580, 0x1bd57440, 0x1c7c8300, 0x1d258c40, 0x1dd08a00, 0x1e7d7600, 0x1f2c49a0, 0x1fdcfe20, 0x208f8c40, 0x2143ed00, 0x21fa1840, 0x22b20680, 0x236baf40, 0x24270a00, 0x24e40e00, 0x25a2b280, 0x2662ee00, 0x2724b700, 0x27e80400, 0x28acca80, 0x297300c0, 0x2a3a9c00, 0x2b039180, 0x2bcdd680, 0x2c995fc0, 0x2d6621c0, 0x2e341140, 0x2f032240, 0x2fd34900, 0x30a47900, 0x3176a640, 0x3249c440, 0x331dc600, 0x33f29f40, 0x34c842c0, 0x359ea340, 0x3675b3c0, 0x374d66c0, 0x3825af00, 0x38fe7ec0, 0x39d7c880, 0x3ab17e40, 0x3b8b9240, 0x3c65f6c0, 0x3d409d80, 0x3e1b7880, 0x3ef679c0, 0x3fd19340, 0x40acb680, 0x4187d580, 0x4262e280, 0x433dce80, 0x44188c00, 0x44f30c80, 0x45cd4180, 0x46a71e00, 0x47809300, 0x48599300, 0x49320f80, 0x4a09fb80, 0x4ae14880, 0x4bb7e900, 0x4c8dcf80, 0x4d62ee80, 0x4e373880, 0x4f0aa080, 0x4fdd1900, 0x50ae9600, 0x517f0980, 0x524e6780, 0x531ca380, 0x53e9b100, 0x54b58400, 0x55801080, 0x56494b00, 0x57112800, 0x57d79c00, 0x589c9c00, 0x59601d00, 0x5a221480, 0x5ae27880, 0x5ba13e00, 0x5c5e5c00, 0x5d19c880, 0x5dd37a80, 0x5e8b6800, 0x5f418980, 0x5ff5d580, 0x60a84480, 0x6158ce00, 0x62076a80, 0x62b41280, 0x635ebf80, 0x64076a80, 0x64ae0d00, 0x6552a100, 0x65f52080, 0x66958680, 0x6733cd00, 0x67cff000, 0x6869ea80, 0x6901b880, 0x69975600, 0x6a2abf80, 0x6abbf200, 0x6b4aea80, 0x6bd7a680, 0x6c622300, 0x6cea5f80, 0x6d705900, 0x6df40f00, 0x6e758080, 0x6ef4ac80, 0x6f719300, 0x6fec3380, 0x70648f00, 0x70daa580, 0x714e7880, 0x71c00880, 0x722f5780, 0x729c6700, 0x73073980, 0x736fd100, 0x73d62f80, 0x743a5900, 0x749c5080, 0x74fc1880, 0x7559b600, 0x75b52b80, 0x760e7e80, 0x7665b280, 0x76bacc80, 0x770dd180, 0x775ec600, 0x77adb000, 0x77fa9480, 0x78457900, 0x788e6400, 0x78d55b80, 0x791a6500, 0x795d8780, 0x799ec900, 0x79de3100, 0x7a1bc580, 0x7a578d80, 0x7a919100, 0x7ac9d600, 0x7b006500, 0x7b354400, 0x7b687b80, 0x7b9a1300, 0x7bca1180, 0x7bf87f80, 0x7c256400, 0x7c50c780, 0x7c7ab180, 0x7ca32a00, 0x7cca3900, 0x7cefe600, 0x7d143900, 0x7d373a80, 0x7d58f280, 0x7d796800, 0x7d98a380, 0x7db6ad00, 0x7dd38c80, 0x7def4900, 0x7e09eb00, 0x7e237a00, 0x7e3bfd80, 0x7e537d80, 0x7e6a0180, 0x7e7f9080, 0x7e943200, 0x7ea7ed80, 0x7ebaca00, 0x7ecccf00, 0x7ede0300, 0x7eee6d00, 0x7efe1400, 0x7f0cfe80, 0x7f1b3380, 0x7f28b900, 0x7f359500, 0x7f41ce80, 0x7f4d6b80, 0x7f587180, 0x7f62e680, 0x7f6cd000, 0x7f763400, 0x7f7f1780, 0x7f878080, 0x7f8f7380, 0x7f96f580, 0x7f9e0b80, 0x7fa4bb00, 0x7fab0780, 0x7fb0f600, 0x7fb68b00, 0x7fbbca00, 0x7fc0b800, 0x7fc55880, 0x7fc9af80, 0x7fcdc080, 0x7fd18f00, 0x7fd51e80, 0x7fd87280, 0x7fdb8d80, 0x7fde7380, 0x7fe12700, 0x7fe3aa80, 0x7fe60100, 0x7fe82d00, 0x7fea3180, 0x7fec1000, 0x7fedcb00, 0x7fef6500, 0x7ff0e000, 0x7ff23e00, 0x7ff38080, 0x7ff4a980, 0x7ff5ba80, 0x7ff6b580, 0x7ff79c00, 0x7ff86e80, 0x7ff92f80, 0x7ff9e000, 0x7ffa8100, 0x7ffb1380, 0x7ffb9880, 0x7ffc1180, 0x7ffc7f80, 0x7ffce300, 0x7ffd3c80, 0x7ffd8d80, 0x7ffdd680, 0x7ffe1880, 0x7ffe5300, 0x7ffe8800, 0x7ffeb700, 0x7ffee100, 0x7fff0600, 0x7fff2700, 0x7fff4480, 0x7fff5e80, 0x7fff7500, 0x7fff8900, 0x7fff9a80, 0x7fffaa00, 0x7fffb780, 0x7fffc300, 0x7fffcd00, 0x7fffd580, 0x7fffdc80, 0x7fffe300, 0x7fffe880, 0x7fffec80, 0x7ffff080, 0x7ffff380, 0x7ffff680, 0x7ffff880, 0x7ffffa00, 0x7ffffb80, 0x7ffffc80, 0x7ffffd80, 0x7ffffe80, 0x7fffff00, 0x7fffff00, 0x7fffff80, 0x7fffff80, 0x7fffffff, 0x7fffffff 0x0003a373, 0x000608f6, 0x000888a7, 0x000b3e1b, 0x000e34f1, 0x001174a2, 0x00150328, 0x0018e5e1, 0x001d21eb, 0x0021bc4d, 0x0026ba09, 0x002c202f, 0x0031f3dc, 0x00383a43, 0x003ef8ad, 0x0046347b, 0x004df325, 0x00563a3f, 0x005f0f74, 0x00687888, 0x00727b59, 0x007d1ddb, 0x0088661c, 0x00945a41, 0x00a10087, 0x00ae5f3d, 0x00bc7ccd, 0x00cb5fb3, 0x00db0e7d, 0x00eb8fd0, 0x00fcea61, 0x010f24f8, 0x0122466a, 0x013655a0, 0x014b598e, 0x01615936, 0x01785ba8, 0x01906800, 0x01a9855e, 0x01c3baf0, 0x01df0fee, 0x01fb8b90, 0x02193514, 0x023813c4, 0x02582ee4, 0x02798db8, 0x029c378c, 0x02c033a4, 0x02e58944, 0x030c3fa8, 0x03345e0c, 0x035deba0, 0x0388ef8c, 0x03b570f0, 0x03e376dc, 0x04130858, 0x04442c58, 0x0476e9b8, 0x04ab4760, 0x04e14c00, 0x0518fe48, 0x055264c8, 0x058d8600, 0x05ca6850, 0x06091200, 0x06498930, 0x068bd3f0, 0x06cff830, 0x0715fba8, 0x075de408, 0x07a7b6c8, 0x07f37940, 0x084130a0, 0x0890e200, 0x08e29220, 0x093645c0, 0x098c0150, 0x09e3c940, 0x0a3da180, 0x0a998e30, 0x0af792e0, 0x0b57b320, 0x0bb9f240, 0x0c1e5360, 0x0c84d940, 0x0ced8690, 0x0d585dc0, 0x0dc560f0, 0x0e349200, 0x0ea5f2b0, 0x0f198450, 0x0f8f4820, 0x10073f00, 0x10816980, 0x10fdc840, 0x117c5b00, 0x11fd21e0, 0x12801c60, 0x130549a0, 0x138ca8c0, 0x14163880, 0x14a1f740, 0x152fe320, 0x15bffa00, 0x16523980, 0x16e69ee0, 0x177d2700, 0x1815cec0, 0x18b09260, 0x194d6e00, 0x19ec5d60, 0x1a8d5c20, 0x1b306580, 0x1bd57440, 0x1c7c8300, 0x1d258c40, 0x1dd08a00, 0x1e7d7600, 0x1f2c49a0, 0x1fdcfe20, 0x208f8c40, 0x2143ed00, 0x21fa1840, 0x22b20680, 0x236baf40, 0x24270a00, 0x24e40e00, 0x25a2b280, 0x2662ee00, 0x2724b700, 0x27e80400, 0x28acca80, 0x297300c0, 0x2a3a9c00, 0x2b039180, 0x2bcdd680, 0x2c995fc0, 0x2d6621c0, 0x2e341140, 0x2f032240, 0x2fd34900, 0x30a47900, 0x3176a640, 0x3249c440, 0x331dc600, 0x33f29f40, 0x34c842c0, 0x359ea340, 0x3675b3c0, 0x374d66c0, 0x3825af00, 0x38fe7ec0, 0x39d7c880, 0x3ab17e40, 0x3b8b9240, 0x3c65f6c0, 0x3d409d80, 0x3e1b7880, 0x3ef679c0, 0x3fd19340, 0x40acb680, 0x4187d580, 0x4262e280, 0x433dce80, 0x44188c00, 0x44f30c80, 0x45cd4180, 0x46a71e00, 0x47809300, 0x48599300, 0x49320f80, 0x4a09fb80, 0x4ae14880, 0x4bb7e900, 0x4c8dcf80, 0x4d62ee80, 0x4e373880, 0x4f0aa080, 0x4fdd1900, 0x50ae9600, 0x517f0980, 0x524e6780, 0x531ca380, 0x53e9b100, 0x54b58400, 0x55801080, 0x56494b00, 0x57112800, 0x57d79c00, 0x589c9c00, 0x59601d00, 0x5a221480, 0x5ae27880, 0x5ba13e00, 0x5c5e5c00, 0x5d19c880, 0x5dd37a80, 0x5e8b6800, 0x5f418980, 0x5ff5d580, 0x60a84480, 0x6158ce00, 0x62076a80, 0x62b41280, 0x635ebf80, 0x64076a80, 0x64ae0d00, 0x6552a100, 0x65f52080, 0x66958680, 0x6733cd00, 0x67cff000, 0x6869ea80, 0x6901b880, 0x69975600, 0x6a2abf80, 0x6abbf200, 0x6b4aea80, 0x6bd7a680, 0x6c622300, 0x6cea5f80, 0x6d705900, 0x6df40f00, 0x6e758080, 0x6ef4ac80, 0x6f719300, 0x6fec3380, 0x70648f00, 0x70daa580, 0x714e7880, 0x71c00880, 0x722f5780, 0x729c6700, 0x73073980, 0x736fd100, 0x73d62f80, 0x743a5900, 0x749c5080, 0x74fc1880, 0x7559b600, 0x75b52b80, 0x760e7e80, 0x7665b280, 0x76bacc80, 0x770dd180, 0x775ec600, 0x77adb000, 0x77fa9480, 0x78457900, 0x788e6400, 0x78d55b80, 0x791a6500, 0x795d8780, 0x799ec900, 0x79de3100, 0x7a1bc580, 0x7a578d80, 0x7a919100, 0x7ac9d600, 0x7b006500, 0x7b354400, 0x7b687b80, 0x7b9a1300, 0x7bca1180, 0x7bf87f80, 0x7c256400, 0x7c50c780, 0x7c7ab180, 0x7ca32a00, 0x7cca3900, 0x7cefe600, 0x7d143900, 0x7d373a80, 0x7d58f280, 0x7d796800, 0x7d98a380, 0x7db6ad00, 0x7dd38c80, 0x7def4900, 0x7e09eb00, 0x7e237a00, 0x7e3bfd80, 0x7e537d80, 0x7e6a0180, 0x7e7f9080, 0x7e943200, 0x7ea7ed80, 0x7ebaca00, 0x7ecccf00, 0x7ede0300, 0x7eee6d00, 0x7efe1400, 0x7f0cfe80, 0x7f1b3380, 0x7f28b900, 0x7f359500, 0x7f41ce80, 0x7f4d6b80, 0x7f587180, 0x7f62e680, 0x7f6cd000, 0x7f763400, 0x7f7f1780, 0x7f878080, 0x7f8f7380, 0x7f96f580, 0x7f9e0b80, 0x7fa4bb00, 0x7fab0780, 0x7fb0f600, 0x7fb68b00, 0x7fbbca00, 0x7fc0b800, 0x7fc55880, 0x7fc9af80, 0x7fcdc080, 0x7fd18f00, 0x7fd51e80, 0x7fd87280, 0x7fdb8d80, 0x7fde7380, 0x7fe12700, 0x7fe3aa80, 0x7fe60100, 0x7fe82d00, 0x7fea3180, 0x7fec1000, 0x7fedcb00, 0x7fef6500, 0x7ff0e000, 0x7ff23e00, 0x7ff38080, 0x7ff4a980, 0x7ff5ba80, 0x7ff6b580, 0x7ff79c00, 0x7ff86e80, 0x7ff92f80, 0x7ff9e000, 0x7ffa8100, 0x7ffb1380, 0x7ffb9880, 0x7ffc1180, 0x7ffc7f80, 0x7ffce300, 0x7ffd3c80, 0x7ffd8d80, 0x7ffdd680, 0x7ffe1880, 0x7ffe5300, 0x7ffe8800, 0x7ffeb700, 0x7ffee100, 0x7fff0600, 0x7fff2700, 0x7fff4480, 0x7fff5e80, 0x7fff7500, 0x7fff8900, 0x7fff9a80, 0x7fffaa00, 0x7fffb780, 0x7fffc300, 0x7fffcd00, 0x7fffd580, 0x7fffdc80, 0x7fffe300, 0x7fffe880, 0x7fffec80, 0x7ffff080, 0x7ffff380, 0x7ffff680, 0x7ffff880, 0x7ffffa00, 0x7ffffb80, 0x7ffffc80, 0x7ffffd80, 0x7ffffe80, 0x7fffff00, 0x7fffff00, 0x7fffff80, 0x7fffff80, 0x7fffffff, 0x7fffffff
......
...@@ -219,9 +219,11 @@ extern const Word32 ivas_lpf_4_butter_32k_sos_fx[IVAS_BIQUAD_FILT_LEN << 2]; ...@@ -219,9 +219,11 @@ extern const Word32 ivas_lpf_4_butter_32k_sos_fx[IVAS_BIQUAD_FILT_LEN << 2];
extern const Word16 ivas_lpf_4_butter_32k_sos_e[IVAS_BIQUAD_FILT_LEN << 2]; extern const Word16 ivas_lpf_4_butter_32k_sos_e[IVAS_BIQUAD_FILT_LEN << 2];
extern const Word32 ivas_lpf_4_butter_48k_sos_fx[IVAS_BIQUAD_FILT_LEN << 2]; extern const Word32 ivas_lpf_4_butter_48k_sos_fx[IVAS_BIQUAD_FILT_LEN << 2];
extern const Word16 ivas_lpf_4_butter_48k_sos_e[IVAS_BIQUAD_FILT_LEN << 2]; extern const Word16 ivas_lpf_4_butter_48k_sos_e[IVAS_BIQUAD_FILT_LEN << 2];
#ifndef NONBE_FIX_MC_LFE_LPF
extern const Word32 ivas_lpf_2_butter_16k_fx[IVAS_BIQUAD_FILT_LEN << 1]; extern const Word32 ivas_lpf_2_butter_16k_fx[IVAS_BIQUAD_FILT_LEN << 1];
extern const Word32 ivas_lpf_2_butter_32k_fx[IVAS_BIQUAD_FILT_LEN << 1]; extern const Word32 ivas_lpf_2_butter_32k_fx[IVAS_BIQUAD_FILT_LEN << 1];
extern const Word32 ivas_lpf_2_butter_48k_fx[IVAS_BIQUAD_FILT_LEN << 1]; extern const Word32 ivas_lpf_2_butter_48k_fx[IVAS_BIQUAD_FILT_LEN << 1];
#endif
extern const Word32 ivas_lfe_window_coeff_48k_fx[IVAS_LFE_FADE_LEN_48K]; // Q31 extern const Word32 ivas_lfe_window_coeff_48k_fx[IVAS_LFE_FADE_LEN_48K]; // Q31
extern const Word32 ivas_lfe_window_coeff_32k_fx[IVAS_LFE_FADE_LEN_32K]; // Q31 extern const Word32 ivas_lfe_window_coeff_32k_fx[IVAS_LFE_FADE_LEN_32K]; // Q31
......