Loading lib_dec/ivas_dirac_dec.c +66 −43 Original line number Diff line number Diff line Loading @@ -51,7 +51,12 @@ * Local function prototypes *-----------------------------------------------------------------------*/ static ivas_error ivas_dirac_alloc_mem( DIRAC_DEC_HANDLE hDirAC, const RENDERER_TYPE renderer_type, DIRAC_DEC_STACK_MEM_HANDLE hDirAC_mem ); static ivas_error ivas_dirac_alloc_mem( DIRAC_DEC_HANDLE hDirAC, const RENDERER_TYPE renderer_type, DIRAC_DEC_STACK_MEM_HANDLE hDirAC_mem #ifdef HODIRAC , int16_t hodirac #endif ); static void ivas_dirac_free_mem( DIRAC_DEC_STACK_MEM_HANDLE hDirAC_mem ); Loading Loading @@ -879,7 +884,12 @@ ivas_error ivas_dirac_dec_config( { ivas_dirac_free_mem( &( hDirAC->stack_mem ) ); } if ( ( error = ivas_dirac_alloc_mem( hDirAC, st_ivas->renderer_type, &( hDirAC->stack_mem ) ) ) != IVAS_ERR_OK ) if ( ( error = ivas_dirac_alloc_mem( hDirAC, st_ivas->renderer_type, &( hDirAC->stack_mem ) #ifdef HODIRAC , st_ivas->sba_analysis_order > 1 #endif ) ) != IVAS_ERR_OK ) { return error; } Loading Loading @@ -1326,9 +1336,18 @@ void ivas_dirac_dec_close( static ivas_error ivas_dirac_alloc_mem( DIRAC_DEC_HANDLE hDirAC, const RENDERER_TYPE renderer_type, DIRAC_DEC_STACK_MEM_HANDLE hDirAC_mem ) DIRAC_DEC_STACK_MEM_HANDLE hDirAC_mem #ifdef HODIRAC , int16_t hodirac #endif ) { int16_t num_freq_bands, num_freq_bands_diff, size; #ifdef HODIRAC int16_t size_ho; int16_t size_pf; #endif int16_t num_outputs_dir, num_outputs_diff; int16_t num_protos_dir; Loading @@ -1341,6 +1360,18 @@ static ivas_error ivas_dirac_alloc_mem( num_outputs_diff = hDirAC->num_outputs_diff; size = num_freq_bands * num_outputs_dir; #ifdef HODIRAC if ( hodirac ) { size_ho = size * DIRAC_HO_NUMSECTORS; size_pf = num_freq_bands * DIRAC_HO_NUMSECTORS; } else { size_ho = size; size_pf = num_freq_bands; } #endif /* PSD related buffers */ hDirAC_mem->cy_auto_dir_smooth = NULL; Loading Loading @@ -1388,18 +1419,14 @@ static ivas_error ivas_dirac_alloc_mem( /* Target and smoothed nrg factors/gains */ #ifdef HODIRAC if ( ( hDirAC_mem->cy_cross_dir_smooth = (float *) malloc( sizeof( float ) * size * DIRAC_HO_NUMSECTORS ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate stack memory for DirAC\n" ) ); } set_zero( hDirAC_mem->cy_cross_dir_smooth, size * DIRAC_HO_NUMSECTORS ); if ( ( hDirAC_mem->cy_cross_dir_smooth = (float *) malloc( sizeof( float ) * size_ho ) ) == NULL ) #else if ( ( hDirAC_mem->cy_cross_dir_smooth = (float *) malloc( sizeof( float ) * size ) ) == NULL ) #endif { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate stack memory for DirAC\n" ) ); } set_zero( hDirAC_mem->cy_cross_dir_smooth, size ); #endif if ( hDirAC->synthesisConf != DIRAC_SYNTHESIS_GAIN_SHD ) { Loading @@ -1422,18 +1449,14 @@ static ivas_error ivas_dirac_alloc_mem( /*Responses (gains/factors)*/ #ifdef HODIRAC if ( ( hDirAC_mem->direct_responses = (float *) malloc( sizeof( float ) * size * DIRAC_HO_NUMSECTORS ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate stack memory for DirAC\n" ) ); } set_zero( hDirAC_mem->direct_responses, size * DIRAC_HO_NUMSECTORS ); if ( ( hDirAC_mem->direct_responses = (float *) malloc( sizeof( float ) * size_ho ) ) == NULL ) #else if ( ( hDirAC_mem->direct_responses = (float *) malloc( sizeof( float ) * size ) ) == NULL ) #endif { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate stack memory for DirAC\n" ) ); } set_zero( hDirAC_mem->direct_responses, size ); #endif hDirAC->h_output_synthesis_psd_state.direct_responses = hDirAC_mem->direct_responses; Loading Loading @@ -1472,27 +1495,27 @@ static ivas_error ivas_dirac_alloc_mem( /* Gains/power factors*/ hDirAC_mem->direct_power_factor = NULL; hDirAC_mem->diffuse_power_factor = NULL; #ifdef HODIRAC if ( ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) || ( renderer_type != RENDERER_BINAURAL_PARAMETRIC && renderer_type != RENDERER_BINAURAL_PARAMETRIC_ROOM && renderer_type != RENDERER_STEREO_PARAMETRIC ) ) { hDirAC_mem->direct_power_factor = (float *) malloc( sizeof( float ) * num_freq_bands * DIRAC_HO_NUMSECTORS ); hDirAC_mem->diffuse_power_factor = (float *) malloc( sizeof( float ) * num_freq_bands * DIRAC_HO_NUMSECTORS ); } #else if ( renderer_type != RENDERER_BINAURAL_PARAMETRIC && renderer_type != RENDERER_BINAURAL_PARAMETRIC_ROOM && renderer_type != RENDERER_STEREO_PARAMETRIC ) { #ifdef HODIRAC if ( ( hDirAC_mem->direct_power_factor = (float *) malloc( sizeof( float ) * size_pf ) ) == NULL ) #else if ( ( hDirAC_mem->direct_power_factor = (float *) malloc( sizeof( float ) * num_freq_bands ) ) == NULL ) #endif { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate stack memory for DirAC\n" ) ); } #ifdef HODIRAC if ( ( hDirAC_mem->diffuse_power_factor = (float *) malloc( sizeof( float ) * size_pf ) ) == NULL ) #else if ( ( hDirAC_mem->diffuse_power_factor = (float *) malloc( sizeof( float ) * num_freq_bands ) ) == NULL ) #endif { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate stack memory for DirAC\n" ) ); } } #endif hDirAC->h_output_synthesis_psd_state.direct_power_factor = hDirAC_mem->direct_power_factor; hDirAC->h_output_synthesis_psd_state.diffuse_power_factor = hDirAC_mem->diffuse_power_factor; Loading lib_dec/ivas_dirac_output_synthesis_dec.c +21 −8 Original line number Diff line number Diff line Loading @@ -1209,18 +1209,31 @@ void ivas_dirac_dec_output_synthesis_process_subframe_gain_shd( /* store estimates for next synthesis block */ #ifdef HODIRAC if ( hodirac ) { mvr2r( h_dirac_output_synthesis_state.cy_cross_dir_smooth_prev, h_dirac_output_synthesis_state.gains_dir_prev, num_freq_bands * num_channels_dir * DIRAC_HO_NUMSECTORS ); #else mvr2r( h_dirac_output_synthesis_state.cy_cross_dir_smooth_prev, h_dirac_output_synthesis_state.gains_dir_prev, num_freq_bands * num_channels_dir ); } else #endif { mvr2r( h_dirac_output_synthesis_state.cy_cross_dir_smooth_prev, h_dirac_output_synthesis_state.gains_dir_prev, num_freq_bands * num_channels_dir ); } mvr2r( h_dirac_output_synthesis_state.cy_auto_diff_smooth_prev, h_dirac_output_synthesis_state.gains_diff_prev, num_freq_bands_diff * num_channels_diff ); /* reset values */ #ifdef HODIRAC if ( hodirac ) { set_zero( h_dirac_output_synthesis_state.cy_cross_dir_smooth, num_freq_bands * num_channels_dir * DIRAC_HO_NUMSECTORS ); #else set_zero( h_dirac_output_synthesis_state.cy_cross_dir_smooth, num_freq_bands * num_channels_dir ); } else #endif { set_zero( h_dirac_output_synthesis_state.cy_cross_dir_smooth, num_freq_bands * num_channels_dir ); } set_zero( h_dirac_output_synthesis_state.cy_auto_diff_smooth, num_freq_bands_diff * num_channels_diff ); return; Loading Loading
lib_dec/ivas_dirac_dec.c +66 −43 Original line number Diff line number Diff line Loading @@ -51,7 +51,12 @@ * Local function prototypes *-----------------------------------------------------------------------*/ static ivas_error ivas_dirac_alloc_mem( DIRAC_DEC_HANDLE hDirAC, const RENDERER_TYPE renderer_type, DIRAC_DEC_STACK_MEM_HANDLE hDirAC_mem ); static ivas_error ivas_dirac_alloc_mem( DIRAC_DEC_HANDLE hDirAC, const RENDERER_TYPE renderer_type, DIRAC_DEC_STACK_MEM_HANDLE hDirAC_mem #ifdef HODIRAC , int16_t hodirac #endif ); static void ivas_dirac_free_mem( DIRAC_DEC_STACK_MEM_HANDLE hDirAC_mem ); Loading Loading @@ -879,7 +884,12 @@ ivas_error ivas_dirac_dec_config( { ivas_dirac_free_mem( &( hDirAC->stack_mem ) ); } if ( ( error = ivas_dirac_alloc_mem( hDirAC, st_ivas->renderer_type, &( hDirAC->stack_mem ) ) ) != IVAS_ERR_OK ) if ( ( error = ivas_dirac_alloc_mem( hDirAC, st_ivas->renderer_type, &( hDirAC->stack_mem ) #ifdef HODIRAC , st_ivas->sba_analysis_order > 1 #endif ) ) != IVAS_ERR_OK ) { return error; } Loading Loading @@ -1326,9 +1336,18 @@ void ivas_dirac_dec_close( static ivas_error ivas_dirac_alloc_mem( DIRAC_DEC_HANDLE hDirAC, const RENDERER_TYPE renderer_type, DIRAC_DEC_STACK_MEM_HANDLE hDirAC_mem ) DIRAC_DEC_STACK_MEM_HANDLE hDirAC_mem #ifdef HODIRAC , int16_t hodirac #endif ) { int16_t num_freq_bands, num_freq_bands_diff, size; #ifdef HODIRAC int16_t size_ho; int16_t size_pf; #endif int16_t num_outputs_dir, num_outputs_diff; int16_t num_protos_dir; Loading @@ -1341,6 +1360,18 @@ static ivas_error ivas_dirac_alloc_mem( num_outputs_diff = hDirAC->num_outputs_diff; size = num_freq_bands * num_outputs_dir; #ifdef HODIRAC if ( hodirac ) { size_ho = size * DIRAC_HO_NUMSECTORS; size_pf = num_freq_bands * DIRAC_HO_NUMSECTORS; } else { size_ho = size; size_pf = num_freq_bands; } #endif /* PSD related buffers */ hDirAC_mem->cy_auto_dir_smooth = NULL; Loading Loading @@ -1388,18 +1419,14 @@ static ivas_error ivas_dirac_alloc_mem( /* Target and smoothed nrg factors/gains */ #ifdef HODIRAC if ( ( hDirAC_mem->cy_cross_dir_smooth = (float *) malloc( sizeof( float ) * size * DIRAC_HO_NUMSECTORS ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate stack memory for DirAC\n" ) ); } set_zero( hDirAC_mem->cy_cross_dir_smooth, size * DIRAC_HO_NUMSECTORS ); if ( ( hDirAC_mem->cy_cross_dir_smooth = (float *) malloc( sizeof( float ) * size_ho ) ) == NULL ) #else if ( ( hDirAC_mem->cy_cross_dir_smooth = (float *) malloc( sizeof( float ) * size ) ) == NULL ) #endif { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate stack memory for DirAC\n" ) ); } set_zero( hDirAC_mem->cy_cross_dir_smooth, size ); #endif if ( hDirAC->synthesisConf != DIRAC_SYNTHESIS_GAIN_SHD ) { Loading @@ -1422,18 +1449,14 @@ static ivas_error ivas_dirac_alloc_mem( /*Responses (gains/factors)*/ #ifdef HODIRAC if ( ( hDirAC_mem->direct_responses = (float *) malloc( sizeof( float ) * size * DIRAC_HO_NUMSECTORS ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate stack memory for DirAC\n" ) ); } set_zero( hDirAC_mem->direct_responses, size * DIRAC_HO_NUMSECTORS ); if ( ( hDirAC_mem->direct_responses = (float *) malloc( sizeof( float ) * size_ho ) ) == NULL ) #else if ( ( hDirAC_mem->direct_responses = (float *) malloc( sizeof( float ) * size ) ) == NULL ) #endif { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate stack memory for DirAC\n" ) ); } set_zero( hDirAC_mem->direct_responses, size ); #endif hDirAC->h_output_synthesis_psd_state.direct_responses = hDirAC_mem->direct_responses; Loading Loading @@ -1472,27 +1495,27 @@ static ivas_error ivas_dirac_alloc_mem( /* Gains/power factors*/ hDirAC_mem->direct_power_factor = NULL; hDirAC_mem->diffuse_power_factor = NULL; #ifdef HODIRAC if ( ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) || ( renderer_type != RENDERER_BINAURAL_PARAMETRIC && renderer_type != RENDERER_BINAURAL_PARAMETRIC_ROOM && renderer_type != RENDERER_STEREO_PARAMETRIC ) ) { hDirAC_mem->direct_power_factor = (float *) malloc( sizeof( float ) * num_freq_bands * DIRAC_HO_NUMSECTORS ); hDirAC_mem->diffuse_power_factor = (float *) malloc( sizeof( float ) * num_freq_bands * DIRAC_HO_NUMSECTORS ); } #else if ( renderer_type != RENDERER_BINAURAL_PARAMETRIC && renderer_type != RENDERER_BINAURAL_PARAMETRIC_ROOM && renderer_type != RENDERER_STEREO_PARAMETRIC ) { #ifdef HODIRAC if ( ( hDirAC_mem->direct_power_factor = (float *) malloc( sizeof( float ) * size_pf ) ) == NULL ) #else if ( ( hDirAC_mem->direct_power_factor = (float *) malloc( sizeof( float ) * num_freq_bands ) ) == NULL ) #endif { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate stack memory for DirAC\n" ) ); } #ifdef HODIRAC if ( ( hDirAC_mem->diffuse_power_factor = (float *) malloc( sizeof( float ) * size_pf ) ) == NULL ) #else if ( ( hDirAC_mem->diffuse_power_factor = (float *) malloc( sizeof( float ) * num_freq_bands ) ) == NULL ) #endif { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate stack memory for DirAC\n" ) ); } } #endif hDirAC->h_output_synthesis_psd_state.direct_power_factor = hDirAC_mem->direct_power_factor; hDirAC->h_output_synthesis_psd_state.diffuse_power_factor = hDirAC_mem->diffuse_power_factor; Loading
lib_dec/ivas_dirac_output_synthesis_dec.c +21 −8 Original line number Diff line number Diff line Loading @@ -1209,18 +1209,31 @@ void ivas_dirac_dec_output_synthesis_process_subframe_gain_shd( /* store estimates for next synthesis block */ #ifdef HODIRAC if ( hodirac ) { mvr2r( h_dirac_output_synthesis_state.cy_cross_dir_smooth_prev, h_dirac_output_synthesis_state.gains_dir_prev, num_freq_bands * num_channels_dir * DIRAC_HO_NUMSECTORS ); #else mvr2r( h_dirac_output_synthesis_state.cy_cross_dir_smooth_prev, h_dirac_output_synthesis_state.gains_dir_prev, num_freq_bands * num_channels_dir ); } else #endif { mvr2r( h_dirac_output_synthesis_state.cy_cross_dir_smooth_prev, h_dirac_output_synthesis_state.gains_dir_prev, num_freq_bands * num_channels_dir ); } mvr2r( h_dirac_output_synthesis_state.cy_auto_diff_smooth_prev, h_dirac_output_synthesis_state.gains_diff_prev, num_freq_bands_diff * num_channels_diff ); /* reset values */ #ifdef HODIRAC if ( hodirac ) { set_zero( h_dirac_output_synthesis_state.cy_cross_dir_smooth, num_freq_bands * num_channels_dir * DIRAC_HO_NUMSECTORS ); #else set_zero( h_dirac_output_synthesis_state.cy_cross_dir_smooth, num_freq_bands * num_channels_dir ); } else #endif { set_zero( h_dirac_output_synthesis_state.cy_cross_dir_smooth, num_freq_bands * num_channels_dir ); } set_zero( h_dirac_output_synthesis_state.cy_auto_diff_smooth, num_freq_bands_diff * num_channels_diff ); return; Loading