Loading lib_com/options.h +2 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,7 @@ #define NONBE_FIX_TCX5_INTERLEAVING_FOR_FS_IN_UNEQUAL_FS_OUT /* FhG: apply correct TCX5 grouping/interleaving when input_fs != output_fs */ #define FIX_1917_DIRAC_RENDER_PTR_INCR /* FhG: fix wrong pointer increment in ivas_dirac_dec_render_sf_fx() for object rendering */ #define FIX_CDLFB_BUFFER_SCALING /* FhG: fix wrong buffer scaling in ivas_dirac_dec_render_sf_fx() for object rendering */ #define FIX_1824 #define FIX_1822 Loading Loading @@ -141,6 +142,7 @@ #define NONBE_FIX_1110_STEREO_DTX_BRATE_SWITCHING /* VA: issue 1110: fix encoder crash in the stereo DTX bitrate switching condition */ #define NONBE_1894_OSBA_SCALING /* FhG: do not scale OSBA inputs by 0.5 any more */ #define NONBE_FIX_1141_OSBA_ROOM_RENDERING /* FhG: Fix for issue 1141: render objects in OSBA decoder with room effect */ #define NONBE_1360_LFE_DELAY /* Dlb: LFE delay alignment when rendering in CLDFB domain*/ #define NONBE_1229_FIX_ISM1_DPID /* Eri: issue 1229: fix bug causing ISM 1 to use default -dpid instead of the specified one */ Loading lib_dec/ivas_dirac_dec_fx.c +25 −1 Original line number Diff line number Diff line Loading @@ -3713,8 +3713,9 @@ void ivas_dirac_dec_render_sf_fx( Word16 num_objects, nchan_out_woLFE, lfe_index; Word16 n_slots_to_render; Word16 n_samples_to_render; #ifndef NONBE_FIX_1141_OSBA_ROOM_RENDERING Word16 interp_offset; #endif Word32 gain_fx, prev_gain_fx; num_objects = st_ivas->nchan_ism; Loading @@ -3724,16 +3725,23 @@ void ivas_dirac_dec_render_sf_fx( n_slots_to_render = st_ivas->hSpar->subframe_nbslots[st_ivas->hSpar->subframes_rendered]; move16(); n_samples_to_render = imult1616( hSpatParamRendCom->num_freq_bands, n_slots_to_render ); #ifndef NONBE_FIX_1141_OSBA_ROOM_RENDERING interp_offset = st_ivas->hTcBuffer->n_samples_rendered; move16(); #endif test(); IF( st_ivas->hCombinedOrientationData && st_ivas->hCombinedOrientationData->enableCombinedOrientation[0] ) { ivas_jbm_dec_get_adapted_linear_interpolator_fx( n_samples_to_render, n_samples_to_render, st_ivas->hIsmRendererData->interpolator_fx ); #ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING st_ivas->hIsmRendererData->interp_offset_fx = 0; #else interp_offset = 0; #endif move16(); } FOR( i = 0; i < num_objects; i++ ) { /* Combined rotation: rotate the object positions depending the head and external orientations */ Loading Loading @@ -3779,7 +3787,12 @@ void ivas_dirac_dec_render_sf_fx( { Word32 *tc_re_fx, *tc_im_fx; Word16 *w1_fx, w2_fx; #ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING w1_fx = &st_ivas->hIsmRendererData->interpolator_fx[st_ivas->hIsmRendererData->interp_offset_fx]; #else w1_fx = &st_ivas->hIsmRendererData->interpolator_fx[interp_offset]; #endif tc_re_fx = pppQMfFrame_ts_re_fx[nchan_transport + i][0]; move32(); tc_im_fx = pppQMfFrame_ts_im_fx[nchan_transport + i][0]; Loading @@ -3791,10 +3804,18 @@ void ivas_dirac_dec_render_sf_fx( g_fx = Madd_32_16( Mpy_32_16_1( gain_fx, *w1_fx ), prev_gain_fx, w2_fx ); // Q15 FOR( l = 0; l < hSpatParamRendCom->num_freq_bands; l++ ) { #ifdef FIX_CDLFB_BUFFER_SCALING Cldfb_RealBuffer_fx[j2][k][l] = Madd_32_32( Cldfb_RealBuffer_fx[j2][k][l], g_fx, L_shl( *tc_re_fx, 1 ) ); #else Cldfb_RealBuffer_fx[j2][k][l] = Madd_32_32( Cldfb_RealBuffer_fx[j2][k][l], g_fx, *tc_re_fx ); #endif move32(); tc_re_fx++; #ifdef FIX_CDLFB_BUFFER_SCALING Cldfb_ImagBuffer_fx[j2][k][l] = Madd_32_32( Cldfb_ImagBuffer_fx[j2][k][l], g_fx, L_shl( *tc_im_fx, 1 ) ); #else Cldfb_ImagBuffer_fx[j2][k][l] = Madd_32_32( Cldfb_ImagBuffer_fx[j2][k][l], g_fx, *tc_im_fx ); #endif move32(); #ifdef FIX_1917_DIRAC_RENDER_PTR_INCR tc_im_fx++; Loading @@ -3815,6 +3836,9 @@ void ivas_dirac_dec_render_sf_fx( } } } #ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING st_ivas->hIsmRendererData->interp_offset_fx = add( st_ivas->hIsmRendererData->interp_offset_fx, i_mult( hSpatParamRendCom->num_freq_bands, st_ivas->hSpar->subframe_nbslots[st_ivas->hSpar->subframes_rendered] ) ); #endif } /* Perform binaural rendering */ Loading lib_dec/ivas_ism_param_dec_fx.c +29 −0 Original line number Diff line number Diff line Loading @@ -939,9 +939,21 @@ void ivas_ism_dec_digest_tc_fx( test(); test(); #ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING test(); test(); test(); #endif #ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING IF( EQ_32( st_ivas->renderer_type, RENDERER_SBA_LINEAR_ENC ) || EQ_32( st_ivas->renderer_type, RENDERER_OSBA_AMBI ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) || ( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) && EQ_32( st_ivas->ivas_format, SBA_ISM_FORMAT ) && EQ_32( st_ivas->ism_mode, ISM_SBA_MODE_DISC ) ) ) #else IF( EQ_32( st_ivas->renderer_type, RENDERER_SBA_LINEAR_ENC ) || EQ_32( st_ivas->renderer_type, RENDERER_OSBA_AMBI ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) ) #endif { st_ivas->hIsmRendererData->interpolator_fx[0] = 0; move16(); Loading @@ -966,6 +978,10 @@ void ivas_ism_dec_digest_tc_fx( ivas_jbm_dec_get_adapted_linear_interpolator_fx( extract_l( Mpy_32_32( st_ivas->hDecoderConfig->output_Fs, ONE_BY_FRAMES_PER_SEC_Q31 ) ), st_ivas->hTcBuffer->n_samples_available, st_ivas->hIsmRendererData->interpolator_fx ); move16(); } #ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING st_ivas->hIsmRendererData->interp_offset_fx = 0; move16(); #endif /* also get the gains here */ FOR( i = 0; i < st_ivas->nchan_ism; i++ ) Loading @@ -992,10 +1008,23 @@ void ivas_ism_dec_digest_tc_fx( test(); test(); test(); #ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING test(); test(); test(); #endif #ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING IF( ( EQ_32( st_ivas->renderer_type, RENDERER_TD_PANNING ) || EQ_32( st_ivas->renderer_type, RENDERER_OSBA_LS ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_MIXER_CONV_ROOM ) || ( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) && EQ_32( st_ivas->ivas_format, SBA_ISM_FORMAT ) && EQ_32( st_ivas->ism_mode, ISM_SBA_MODE_DISC ) ) ) && st_ivas->hCombinedOrientationData == NULL ) #else IF( ( EQ_32( st_ivas->renderer_type, RENDERER_TD_PANNING ) || EQ_32( st_ivas->renderer_type, RENDERER_OSBA_LS ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_MIXER_CONV_ROOM ) ) && st_ivas->hCombinedOrientationData == NULL ) #endif { if ( st_ivas->hIntSetup.is_planar_setup ) { Loading lib_dec/ivas_stat_dec.h +3 −0 Original line number Diff line number Diff line Loading @@ -859,6 +859,9 @@ typedef struct renderer_struct Word32 prev_gains_fx[MAX_NUM_OBJECTS][MAX_OUTPUT_CHANNELS]; /*Q30*/ Word16 *interpolator_fx; /*Q15*/ Word16 interpolator_len; #ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING Word16 interp_offset_fx; #endif Word32 gains_fx[MAX_NUM_OBJECTS][MAX_OUTPUT_CHANNELS]; /*Q30*/ } ISM_RENDERER_DATA, *ISM_RENDERER_HANDLE; Loading Loading
lib_com/options.h +2 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,7 @@ #define NONBE_FIX_TCX5_INTERLEAVING_FOR_FS_IN_UNEQUAL_FS_OUT /* FhG: apply correct TCX5 grouping/interleaving when input_fs != output_fs */ #define FIX_1917_DIRAC_RENDER_PTR_INCR /* FhG: fix wrong pointer increment in ivas_dirac_dec_render_sf_fx() for object rendering */ #define FIX_CDLFB_BUFFER_SCALING /* FhG: fix wrong buffer scaling in ivas_dirac_dec_render_sf_fx() for object rendering */ #define FIX_1824 #define FIX_1822 Loading Loading @@ -141,6 +142,7 @@ #define NONBE_FIX_1110_STEREO_DTX_BRATE_SWITCHING /* VA: issue 1110: fix encoder crash in the stereo DTX bitrate switching condition */ #define NONBE_1894_OSBA_SCALING /* FhG: do not scale OSBA inputs by 0.5 any more */ #define NONBE_FIX_1141_OSBA_ROOM_RENDERING /* FhG: Fix for issue 1141: render objects in OSBA decoder with room effect */ #define NONBE_1360_LFE_DELAY /* Dlb: LFE delay alignment when rendering in CLDFB domain*/ #define NONBE_1229_FIX_ISM1_DPID /* Eri: issue 1229: fix bug causing ISM 1 to use default -dpid instead of the specified one */ Loading
lib_dec/ivas_dirac_dec_fx.c +25 −1 Original line number Diff line number Diff line Loading @@ -3713,8 +3713,9 @@ void ivas_dirac_dec_render_sf_fx( Word16 num_objects, nchan_out_woLFE, lfe_index; Word16 n_slots_to_render; Word16 n_samples_to_render; #ifndef NONBE_FIX_1141_OSBA_ROOM_RENDERING Word16 interp_offset; #endif Word32 gain_fx, prev_gain_fx; num_objects = st_ivas->nchan_ism; Loading @@ -3724,16 +3725,23 @@ void ivas_dirac_dec_render_sf_fx( n_slots_to_render = st_ivas->hSpar->subframe_nbslots[st_ivas->hSpar->subframes_rendered]; move16(); n_samples_to_render = imult1616( hSpatParamRendCom->num_freq_bands, n_slots_to_render ); #ifndef NONBE_FIX_1141_OSBA_ROOM_RENDERING interp_offset = st_ivas->hTcBuffer->n_samples_rendered; move16(); #endif test(); IF( st_ivas->hCombinedOrientationData && st_ivas->hCombinedOrientationData->enableCombinedOrientation[0] ) { ivas_jbm_dec_get_adapted_linear_interpolator_fx( n_samples_to_render, n_samples_to_render, st_ivas->hIsmRendererData->interpolator_fx ); #ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING st_ivas->hIsmRendererData->interp_offset_fx = 0; #else interp_offset = 0; #endif move16(); } FOR( i = 0; i < num_objects; i++ ) { /* Combined rotation: rotate the object positions depending the head and external orientations */ Loading Loading @@ -3779,7 +3787,12 @@ void ivas_dirac_dec_render_sf_fx( { Word32 *tc_re_fx, *tc_im_fx; Word16 *w1_fx, w2_fx; #ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING w1_fx = &st_ivas->hIsmRendererData->interpolator_fx[st_ivas->hIsmRendererData->interp_offset_fx]; #else w1_fx = &st_ivas->hIsmRendererData->interpolator_fx[interp_offset]; #endif tc_re_fx = pppQMfFrame_ts_re_fx[nchan_transport + i][0]; move32(); tc_im_fx = pppQMfFrame_ts_im_fx[nchan_transport + i][0]; Loading @@ -3791,10 +3804,18 @@ void ivas_dirac_dec_render_sf_fx( g_fx = Madd_32_16( Mpy_32_16_1( gain_fx, *w1_fx ), prev_gain_fx, w2_fx ); // Q15 FOR( l = 0; l < hSpatParamRendCom->num_freq_bands; l++ ) { #ifdef FIX_CDLFB_BUFFER_SCALING Cldfb_RealBuffer_fx[j2][k][l] = Madd_32_32( Cldfb_RealBuffer_fx[j2][k][l], g_fx, L_shl( *tc_re_fx, 1 ) ); #else Cldfb_RealBuffer_fx[j2][k][l] = Madd_32_32( Cldfb_RealBuffer_fx[j2][k][l], g_fx, *tc_re_fx ); #endif move32(); tc_re_fx++; #ifdef FIX_CDLFB_BUFFER_SCALING Cldfb_ImagBuffer_fx[j2][k][l] = Madd_32_32( Cldfb_ImagBuffer_fx[j2][k][l], g_fx, L_shl( *tc_im_fx, 1 ) ); #else Cldfb_ImagBuffer_fx[j2][k][l] = Madd_32_32( Cldfb_ImagBuffer_fx[j2][k][l], g_fx, *tc_im_fx ); #endif move32(); #ifdef FIX_1917_DIRAC_RENDER_PTR_INCR tc_im_fx++; Loading @@ -3815,6 +3836,9 @@ void ivas_dirac_dec_render_sf_fx( } } } #ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING st_ivas->hIsmRendererData->interp_offset_fx = add( st_ivas->hIsmRendererData->interp_offset_fx, i_mult( hSpatParamRendCom->num_freq_bands, st_ivas->hSpar->subframe_nbslots[st_ivas->hSpar->subframes_rendered] ) ); #endif } /* Perform binaural rendering */ Loading
lib_dec/ivas_ism_param_dec_fx.c +29 −0 Original line number Diff line number Diff line Loading @@ -939,9 +939,21 @@ void ivas_ism_dec_digest_tc_fx( test(); test(); #ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING test(); test(); test(); #endif #ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING IF( EQ_32( st_ivas->renderer_type, RENDERER_SBA_LINEAR_ENC ) || EQ_32( st_ivas->renderer_type, RENDERER_OSBA_AMBI ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) || ( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) && EQ_32( st_ivas->ivas_format, SBA_ISM_FORMAT ) && EQ_32( st_ivas->ism_mode, ISM_SBA_MODE_DISC ) ) ) #else IF( EQ_32( st_ivas->renderer_type, RENDERER_SBA_LINEAR_ENC ) || EQ_32( st_ivas->renderer_type, RENDERER_OSBA_AMBI ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) ) #endif { st_ivas->hIsmRendererData->interpolator_fx[0] = 0; move16(); Loading @@ -966,6 +978,10 @@ void ivas_ism_dec_digest_tc_fx( ivas_jbm_dec_get_adapted_linear_interpolator_fx( extract_l( Mpy_32_32( st_ivas->hDecoderConfig->output_Fs, ONE_BY_FRAMES_PER_SEC_Q31 ) ), st_ivas->hTcBuffer->n_samples_available, st_ivas->hIsmRendererData->interpolator_fx ); move16(); } #ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING st_ivas->hIsmRendererData->interp_offset_fx = 0; move16(); #endif /* also get the gains here */ FOR( i = 0; i < st_ivas->nchan_ism; i++ ) Loading @@ -992,10 +1008,23 @@ void ivas_ism_dec_digest_tc_fx( test(); test(); test(); #ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING test(); test(); test(); #endif #ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING IF( ( EQ_32( st_ivas->renderer_type, RENDERER_TD_PANNING ) || EQ_32( st_ivas->renderer_type, RENDERER_OSBA_LS ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_MIXER_CONV_ROOM ) || ( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) && EQ_32( st_ivas->ivas_format, SBA_ISM_FORMAT ) && EQ_32( st_ivas->ism_mode, ISM_SBA_MODE_DISC ) ) ) && st_ivas->hCombinedOrientationData == NULL ) #else IF( ( EQ_32( st_ivas->renderer_type, RENDERER_TD_PANNING ) || EQ_32( st_ivas->renderer_type, RENDERER_OSBA_LS ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_MIXER_CONV_ROOM ) ) && st_ivas->hCombinedOrientationData == NULL ) #endif { if ( st_ivas->hIntSetup.is_planar_setup ) { Loading
lib_dec/ivas_stat_dec.h +3 −0 Original line number Diff line number Diff line Loading @@ -859,6 +859,9 @@ typedef struct renderer_struct Word32 prev_gains_fx[MAX_NUM_OBJECTS][MAX_OUTPUT_CHANNELS]; /*Q30*/ Word16 *interpolator_fx; /*Q15*/ Word16 interpolator_len; #ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING Word16 interp_offset_fx; #endif Word32 gains_fx[MAX_NUM_OBJECTS][MAX_OUTPUT_CHANNELS]; /*Q30*/ } ISM_RENDERER_DATA, *ISM_RENDERER_HANDLE; Loading