Loading lib_com/options.h +1 −1 Original line number Diff line number Diff line Loading @@ -96,7 +96,7 @@ #define FIX_2015_PREMPH_SAT_ALT_PART2 /* VA: Add missing scaling factor to be passed to AVQ_cod() */ #define FIX_2253_CORRECT_GSC_MINIMUM_PIT_SEARCH /* VA: Fix Issue 2253 where the encoder and decoder could get out of sync */ #define NONBE_FIX_1967_SBA_DECODER_MONO_OUT_BIG_DIFFERENCES /* Dolby: Fix basop issue 1967 */ #define FIX_2235_TD_RENDERER_WORD16 /* Eri: Use Word16 in TD renderer without converting to Word32 */ /* ##################### End NON-BE switches ########################### */ Loading lib_rend/ivas_objectRenderer_hrFilt_fx.c +5 −0 Original line number Diff line number Diff line Loading @@ -357,8 +357,13 @@ static void GenerateFilter_fx( FOR( i = 0; i < p; i++ ) { #ifdef FIX_2235_TD_RENDERER_WORD16 temp1 = W_add( temp1, Mpy_32_16_1( modelEval->BM_fx[modelEval->BMEnergiesL[modelEval->UseIndsL[i]].i], model->AlphaL_fx[BM_idx[modelEval->BMEnergiesL[modelEval->UseIndsL[i]].i] + ( model->AlphaN * k )] ) ); // add(model->AlphaL_e, 1) temp2 = W_add( temp2, Mpy_32_16_1( modelEval->BM_fx[modelEval->BMEnergiesR[modelEval->UseIndsR[i]].i], model->AlphaR_fx[BM_idx[modelEval->BMEnergiesR[modelEval->UseIndsR[i]].i] + ( model->AlphaN * k )] ) ); // add(model->AlphaR_e, 1) #else temp1 = W_add( temp1, Mpy_32_32( modelEval->BM_fx[modelEval->BMEnergiesL[modelEval->UseIndsL[i]].i], model->AlphaL_fx[BM_idx[modelEval->BMEnergiesL[modelEval->UseIndsL[i]].i] + ( model->AlphaN * k )] ) ); // add(model->AlphaL_e, 1) temp2 = W_add( temp2, Mpy_32_32( modelEval->BM_fx[modelEval->BMEnergiesR[modelEval->UseIndsR[i]].i], model->AlphaR_fx[BM_idx[modelEval->BMEnergiesR[modelEval->UseIndsR[i]].i] + ( model->AlphaN * k )] ) ); // add(model->AlphaR_e, 1) #endif } tmp_hrfModL_e = W_norm( temp1 ); Loading lib_rend/ivas_objectRenderer_mix_fx.c +27 −0 Original line number Diff line number Diff line Loading @@ -504,6 +504,14 @@ static ivas_error DefaultBSplineModel_fx( SWITCH( output_Fs ) { case 48000: #ifdef FIX_2235_TD_RENDERER_WORD16 model->AlphaL_fx = (const Word16 *) defaultHRIR_rom_AlphaL48_fx; // Q14 model->AlphaL_e = Q15 - defaultHRIR_rom_Alpha48_Q_fx; move16(); model->AlphaR_fx = (const Word16 *) defaultHRIR_rom_AlphaR48_fx; // Q14 model->AlphaR_e = Q15 - defaultHRIR_rom_Alpha48_Q_fx; move16(); #else model->AlphaL_dyn_fx = (Word32 *) malloc( 60160 * sizeof( Word32 ) ); if ( model->AlphaL_dyn_fx == NULL ) { Loading @@ -524,6 +532,7 @@ static ivas_error DefaultBSplineModel_fx( model->AlphaR_fx = model->AlphaR_dyn_fx; model->AlphaR_e = Q15 - defaultHRIR_rom_Alpha48_Q_fx; move16(); #endif model->EL_fx = (const Word32 *) defaultHRIR_rom_EL48_fx; // Q28 model->EL_e = Q31 - defaultHRIR_rom_E48_Q_fx; move16(); Loading @@ -539,6 +548,14 @@ static ivas_error DefaultBSplineModel_fx( } BREAK; case 32000: #ifdef FIX_2235_TD_RENDERER_WORD16 model->AlphaL_fx = (const Word16 *) defaultHRIR_rom_AlphaL32_fx; // Q14 model->AlphaL_e = Q15 - defaultHRIR_rom_Alpha32_Q_fx; move16(); model->AlphaR_fx = (const Word16 *) defaultHRIR_rom_AlphaR32_fx; // Q14 model->AlphaR_e = Q15 - defaultHRIR_rom_Alpha32_Q_fx; move16(); #else model->AlphaL_dyn_fx = (Word32 *) malloc( 40420 * sizeof( Word32 ) ); if ( model->AlphaL_dyn_fx == NULL ) { Loading @@ -559,6 +576,7 @@ static ivas_error DefaultBSplineModel_fx( model->AlphaR_fx = model->AlphaR_dyn_fx; model->AlphaR_e = Q15 - defaultHRIR_rom_Alpha32_Q_fx; move16(); #endif model->EL_fx = (const Word32 *) defaultHRIR_rom_EL32_fx; // Q28 model->EL_e = Q31 - defaultHRIR_rom_E32_Q_fx; move16(); Loading @@ -574,6 +592,14 @@ static ivas_error DefaultBSplineModel_fx( } BREAK; case 16000: #ifdef FIX_2235_TD_RENDERER_WORD16 model->AlphaL_fx = (const Word16 *) defaultHRIR_rom_AlphaL16_fx; // Q14 model->AlphaL_e = Q15 - defaultHRIR_rom_Alpha16_Q_fx; move16(); model->AlphaR_fx = (const Word16 *) defaultHRIR_rom_AlphaR16_fx; // Q14 model->AlphaR_e = Q15 - defaultHRIR_rom_Alpha16_Q_fx; move16(); #else model->AlphaL_dyn_fx = (Word32 *) malloc( 20210 * sizeof( Word32 ) ); if ( model->AlphaL_dyn_fx == NULL ) { Loading @@ -592,6 +618,7 @@ static ivas_error DefaultBSplineModel_fx( model->AlphaR_fx = model->AlphaR_dyn_fx; model->AlphaR_e = Q15 - defaultHRIR_rom_Alpha16_Q_fx; move16(); #endif model->EL_fx = (const Word32 *) defaultHRIR_rom_EL16_fx; // Q28 model->EL_e = Q31 - defaultHRIR_rom_E16_Q_fx; move16(); Loading lib_rend/ivas_stat_rend.h +13 −0 Original line number Diff line number Diff line Loading @@ -1056,9 +1056,17 @@ typedef struct const Word32 *elevBsShape_fx; const Word32 **azimBsShape_fx; Word32 **azimKSeq_fx; /* Array, length azimDim3+1 */ #ifdef FIX_2235_TD_RENDERER_WORD16 const Word16 *AlphaL_fx; /* Array, size AlphaN x K */ #else const Word32 *AlphaL_fx; /* Array, size AlphaN x K */ #endif Word16 AlphaL_e; #ifdef FIX_2235_TD_RENDERER_WORD16 const Word16 *AlphaR_fx; /* Array, size AlphaN x K */ #else const Word32 *AlphaR_fx; /* Array, size AlphaN x K */ #endif Word16 AlphaR_e; const Word32 *EL_fx; /* Array, size (AlphaN*HRTF_MODEL_N_SECTIONS) */ Word16 EL_e; Loading @@ -1069,8 +1077,13 @@ typedef struct Word16 iSecFirst[HRTF_MODEL_N_SECTIONS]; /* Indices for start of sections */ Word16 iSecLast[HRTF_MODEL_N_SECTIONS]; /* Indices for end of sections */ /* Pointers for allocation of dynamic memory */ #ifdef FIX_2235_TD_RENDERER_WORD16 Word16 *AlphaL_dyn_fx; Word16 *AlphaR_dyn_fx; #else Word32 *AlphaL_dyn_fx; Word32 *AlphaR_dyn_fx; #endif Word32 *EL_dyn_fx; Word32 *ER_dyn_fx; Word32 *elevBsShape_dyn_fx; Loading lib_util/hrtf_file_reader.c +26 −0 Original line number Diff line number Diff line Loading @@ -529,6 +529,13 @@ static ivas_error TDREND_LoadBSplineBinary( } fread( &model->AlphaN, sizeof( Word16 ), 1, f_hrtf ); #ifdef FIX_2235_TD_RENDERER_WORD16 model->AlphaL_dyn_fx = (Word16 *) malloc( model->AlphaN * model->K * sizeof( Word16 ) ); if ( model->AlphaL_dyn_fx == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" ); } #else model->AlphaL_dyn_fx = (Word32 *) malloc( model->AlphaN * model->K * sizeof( Word32 ) ); v_tmp16 = (Word16 *) malloc( model->AlphaN * model->K * sizeof( Word16 ) ); Loading @@ -536,17 +543,30 @@ static ivas_error TDREND_LoadBSplineBinary( { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" ); } #endif fread( &factor_Q, 1, sizeof( Word16 ), f_hrtf ); model->AlphaL_e = Q15 - factor_Q; // model->AlphaL_dyn_e = 1; /* force to 6 to be corrected */ model->AlphaR_e = model->AlphaL_e; #ifdef FIX_2235_TD_RENDERER_WORD16 fread( model->AlphaL_dyn_fx, sizeof( Word16 ), model->AlphaN * model->K, f_hrtf ); #else fread( v_tmp16, sizeof( Word16 ), model->AlphaN * model->K, f_hrtf ); for ( j = 0; j < model->AlphaN * model->K; j++ ) { model->AlphaL_dyn_fx[j] = L_shl_r( L_deposit_l( v_tmp16[j] ), Q30 - factor_Q ); } #endif #ifdef FIX_2235_TD_RENDERER_WORD16 model->AlphaR_dyn_fx = (Word16 *) malloc( model->AlphaN * model->K * sizeof( Word16 ) ); if ( model->AlphaR_dyn_fx == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" ); } fread( model->AlphaR_dyn_fx, sizeof( Word16 ), model->AlphaN * model->K, f_hrtf ); #else model->AlphaR_dyn_fx = (Word32 *) malloc( model->AlphaN * model->K * sizeof( Word32 ) ); if ( model->AlphaR_dyn_fx == NULL ) { Loading @@ -560,6 +580,7 @@ static ivas_error TDREND_LoadBSplineBinary( } free( v_tmp16 ); #endif /* azimuth */ fread( &model->num_unique_azim_splines, sizeof( Word16 ), 1, f_hrtf ); Loading Loading @@ -660,8 +681,13 @@ static ivas_error TDREND_LoadBSplineBinary( fread( (Word32 *) model->ER_dyn_fx, sizeof( Word32 ), model->AlphaN * HRTF_MODEL_N_SECTIONS, f_hrtf ); /* Set const pointers */ #ifdef FIX_2235_TD_RENDERER_WORD16 model->AlphaL_fx = (const Word16 *) model->AlphaL_dyn_fx; model->AlphaR_fx = (const Word16 *) model->AlphaR_dyn_fx; #else model->AlphaL_fx = (const Word32 *) model->AlphaL_dyn_fx; model->AlphaR_fx = (const Word32 *) model->AlphaR_dyn_fx; #endif model->EL_fx = (const Word32 *) model->EL_dyn_fx; model->ER_fx = (const Word32 *) model->ER_dyn_fx; model->elevBsLen = (const Word16 *) model->elevBsLen_dyn; Loading Loading
lib_com/options.h +1 −1 Original line number Diff line number Diff line Loading @@ -96,7 +96,7 @@ #define FIX_2015_PREMPH_SAT_ALT_PART2 /* VA: Add missing scaling factor to be passed to AVQ_cod() */ #define FIX_2253_CORRECT_GSC_MINIMUM_PIT_SEARCH /* VA: Fix Issue 2253 where the encoder and decoder could get out of sync */ #define NONBE_FIX_1967_SBA_DECODER_MONO_OUT_BIG_DIFFERENCES /* Dolby: Fix basop issue 1967 */ #define FIX_2235_TD_RENDERER_WORD16 /* Eri: Use Word16 in TD renderer without converting to Word32 */ /* ##################### End NON-BE switches ########################### */ Loading
lib_rend/ivas_objectRenderer_hrFilt_fx.c +5 −0 Original line number Diff line number Diff line Loading @@ -357,8 +357,13 @@ static void GenerateFilter_fx( FOR( i = 0; i < p; i++ ) { #ifdef FIX_2235_TD_RENDERER_WORD16 temp1 = W_add( temp1, Mpy_32_16_1( modelEval->BM_fx[modelEval->BMEnergiesL[modelEval->UseIndsL[i]].i], model->AlphaL_fx[BM_idx[modelEval->BMEnergiesL[modelEval->UseIndsL[i]].i] + ( model->AlphaN * k )] ) ); // add(model->AlphaL_e, 1) temp2 = W_add( temp2, Mpy_32_16_1( modelEval->BM_fx[modelEval->BMEnergiesR[modelEval->UseIndsR[i]].i], model->AlphaR_fx[BM_idx[modelEval->BMEnergiesR[modelEval->UseIndsR[i]].i] + ( model->AlphaN * k )] ) ); // add(model->AlphaR_e, 1) #else temp1 = W_add( temp1, Mpy_32_32( modelEval->BM_fx[modelEval->BMEnergiesL[modelEval->UseIndsL[i]].i], model->AlphaL_fx[BM_idx[modelEval->BMEnergiesL[modelEval->UseIndsL[i]].i] + ( model->AlphaN * k )] ) ); // add(model->AlphaL_e, 1) temp2 = W_add( temp2, Mpy_32_32( modelEval->BM_fx[modelEval->BMEnergiesR[modelEval->UseIndsR[i]].i], model->AlphaR_fx[BM_idx[modelEval->BMEnergiesR[modelEval->UseIndsR[i]].i] + ( model->AlphaN * k )] ) ); // add(model->AlphaR_e, 1) #endif } tmp_hrfModL_e = W_norm( temp1 ); Loading
lib_rend/ivas_objectRenderer_mix_fx.c +27 −0 Original line number Diff line number Diff line Loading @@ -504,6 +504,14 @@ static ivas_error DefaultBSplineModel_fx( SWITCH( output_Fs ) { case 48000: #ifdef FIX_2235_TD_RENDERER_WORD16 model->AlphaL_fx = (const Word16 *) defaultHRIR_rom_AlphaL48_fx; // Q14 model->AlphaL_e = Q15 - defaultHRIR_rom_Alpha48_Q_fx; move16(); model->AlphaR_fx = (const Word16 *) defaultHRIR_rom_AlphaR48_fx; // Q14 model->AlphaR_e = Q15 - defaultHRIR_rom_Alpha48_Q_fx; move16(); #else model->AlphaL_dyn_fx = (Word32 *) malloc( 60160 * sizeof( Word32 ) ); if ( model->AlphaL_dyn_fx == NULL ) { Loading @@ -524,6 +532,7 @@ static ivas_error DefaultBSplineModel_fx( model->AlphaR_fx = model->AlphaR_dyn_fx; model->AlphaR_e = Q15 - defaultHRIR_rom_Alpha48_Q_fx; move16(); #endif model->EL_fx = (const Word32 *) defaultHRIR_rom_EL48_fx; // Q28 model->EL_e = Q31 - defaultHRIR_rom_E48_Q_fx; move16(); Loading @@ -539,6 +548,14 @@ static ivas_error DefaultBSplineModel_fx( } BREAK; case 32000: #ifdef FIX_2235_TD_RENDERER_WORD16 model->AlphaL_fx = (const Word16 *) defaultHRIR_rom_AlphaL32_fx; // Q14 model->AlphaL_e = Q15 - defaultHRIR_rom_Alpha32_Q_fx; move16(); model->AlphaR_fx = (const Word16 *) defaultHRIR_rom_AlphaR32_fx; // Q14 model->AlphaR_e = Q15 - defaultHRIR_rom_Alpha32_Q_fx; move16(); #else model->AlphaL_dyn_fx = (Word32 *) malloc( 40420 * sizeof( Word32 ) ); if ( model->AlphaL_dyn_fx == NULL ) { Loading @@ -559,6 +576,7 @@ static ivas_error DefaultBSplineModel_fx( model->AlphaR_fx = model->AlphaR_dyn_fx; model->AlphaR_e = Q15 - defaultHRIR_rom_Alpha32_Q_fx; move16(); #endif model->EL_fx = (const Word32 *) defaultHRIR_rom_EL32_fx; // Q28 model->EL_e = Q31 - defaultHRIR_rom_E32_Q_fx; move16(); Loading @@ -574,6 +592,14 @@ static ivas_error DefaultBSplineModel_fx( } BREAK; case 16000: #ifdef FIX_2235_TD_RENDERER_WORD16 model->AlphaL_fx = (const Word16 *) defaultHRIR_rom_AlphaL16_fx; // Q14 model->AlphaL_e = Q15 - defaultHRIR_rom_Alpha16_Q_fx; move16(); model->AlphaR_fx = (const Word16 *) defaultHRIR_rom_AlphaR16_fx; // Q14 model->AlphaR_e = Q15 - defaultHRIR_rom_Alpha16_Q_fx; move16(); #else model->AlphaL_dyn_fx = (Word32 *) malloc( 20210 * sizeof( Word32 ) ); if ( model->AlphaL_dyn_fx == NULL ) { Loading @@ -592,6 +618,7 @@ static ivas_error DefaultBSplineModel_fx( model->AlphaR_fx = model->AlphaR_dyn_fx; model->AlphaR_e = Q15 - defaultHRIR_rom_Alpha16_Q_fx; move16(); #endif model->EL_fx = (const Word32 *) defaultHRIR_rom_EL16_fx; // Q28 model->EL_e = Q31 - defaultHRIR_rom_E16_Q_fx; move16(); Loading
lib_rend/ivas_stat_rend.h +13 −0 Original line number Diff line number Diff line Loading @@ -1056,9 +1056,17 @@ typedef struct const Word32 *elevBsShape_fx; const Word32 **azimBsShape_fx; Word32 **azimKSeq_fx; /* Array, length azimDim3+1 */ #ifdef FIX_2235_TD_RENDERER_WORD16 const Word16 *AlphaL_fx; /* Array, size AlphaN x K */ #else const Word32 *AlphaL_fx; /* Array, size AlphaN x K */ #endif Word16 AlphaL_e; #ifdef FIX_2235_TD_RENDERER_WORD16 const Word16 *AlphaR_fx; /* Array, size AlphaN x K */ #else const Word32 *AlphaR_fx; /* Array, size AlphaN x K */ #endif Word16 AlphaR_e; const Word32 *EL_fx; /* Array, size (AlphaN*HRTF_MODEL_N_SECTIONS) */ Word16 EL_e; Loading @@ -1069,8 +1077,13 @@ typedef struct Word16 iSecFirst[HRTF_MODEL_N_SECTIONS]; /* Indices for start of sections */ Word16 iSecLast[HRTF_MODEL_N_SECTIONS]; /* Indices for end of sections */ /* Pointers for allocation of dynamic memory */ #ifdef FIX_2235_TD_RENDERER_WORD16 Word16 *AlphaL_dyn_fx; Word16 *AlphaR_dyn_fx; #else Word32 *AlphaL_dyn_fx; Word32 *AlphaR_dyn_fx; #endif Word32 *EL_dyn_fx; Word32 *ER_dyn_fx; Word32 *elevBsShape_dyn_fx; Loading
lib_util/hrtf_file_reader.c +26 −0 Original line number Diff line number Diff line Loading @@ -529,6 +529,13 @@ static ivas_error TDREND_LoadBSplineBinary( } fread( &model->AlphaN, sizeof( Word16 ), 1, f_hrtf ); #ifdef FIX_2235_TD_RENDERER_WORD16 model->AlphaL_dyn_fx = (Word16 *) malloc( model->AlphaN * model->K * sizeof( Word16 ) ); if ( model->AlphaL_dyn_fx == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" ); } #else model->AlphaL_dyn_fx = (Word32 *) malloc( model->AlphaN * model->K * sizeof( Word32 ) ); v_tmp16 = (Word16 *) malloc( model->AlphaN * model->K * sizeof( Word16 ) ); Loading @@ -536,17 +543,30 @@ static ivas_error TDREND_LoadBSplineBinary( { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" ); } #endif fread( &factor_Q, 1, sizeof( Word16 ), f_hrtf ); model->AlphaL_e = Q15 - factor_Q; // model->AlphaL_dyn_e = 1; /* force to 6 to be corrected */ model->AlphaR_e = model->AlphaL_e; #ifdef FIX_2235_TD_RENDERER_WORD16 fread( model->AlphaL_dyn_fx, sizeof( Word16 ), model->AlphaN * model->K, f_hrtf ); #else fread( v_tmp16, sizeof( Word16 ), model->AlphaN * model->K, f_hrtf ); for ( j = 0; j < model->AlphaN * model->K; j++ ) { model->AlphaL_dyn_fx[j] = L_shl_r( L_deposit_l( v_tmp16[j] ), Q30 - factor_Q ); } #endif #ifdef FIX_2235_TD_RENDERER_WORD16 model->AlphaR_dyn_fx = (Word16 *) malloc( model->AlphaN * model->K * sizeof( Word16 ) ); if ( model->AlphaR_dyn_fx == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" ); } fread( model->AlphaR_dyn_fx, sizeof( Word16 ), model->AlphaN * model->K, f_hrtf ); #else model->AlphaR_dyn_fx = (Word32 *) malloc( model->AlphaN * model->K * sizeof( Word32 ) ); if ( model->AlphaR_dyn_fx == NULL ) { Loading @@ -560,6 +580,7 @@ static ivas_error TDREND_LoadBSplineBinary( } free( v_tmp16 ); #endif /* azimuth */ fread( &model->num_unique_azim_splines, sizeof( Word16 ), 1, f_hrtf ); Loading Loading @@ -660,8 +681,13 @@ static ivas_error TDREND_LoadBSplineBinary( fread( (Word32 *) model->ER_dyn_fx, sizeof( Word32 ), model->AlphaN * HRTF_MODEL_N_SECTIONS, f_hrtf ); /* Set const pointers */ #ifdef FIX_2235_TD_RENDERER_WORD16 model->AlphaL_fx = (const Word16 *) model->AlphaL_dyn_fx; model->AlphaR_fx = (const Word16 *) model->AlphaR_dyn_fx; #else model->AlphaL_fx = (const Word32 *) model->AlphaL_dyn_fx; model->AlphaR_fx = (const Word32 *) model->AlphaR_dyn_fx; #endif model->EL_fx = (const Word32 *) model->EL_dyn_fx; model->ER_fx = (const Word32 *) model->ER_dyn_fx; model->elevBsLen = (const Word16 *) model->elevBsLen_dyn; Loading