Loading lib_com/ivas_prot.h +7 −0 Original line number Diff line number Diff line Loading @@ -3399,6 +3399,9 @@ void ivas_dirac_param_est_enc( DIRAC_ENC_HANDLE hDirAC, IVAS_QDIRECTION *q_direction, const uint8_t useLowerRes, #ifdef FIX_527_SBA_MONO_INPUT int16_t *dirac_mono_flag, #endif float data_f[][L_FRAME48k], float **pp_fr_real, float **pp_fr_imag, Loading Loading @@ -5578,6 +5581,10 @@ void computeReferencePower_enc( #endif , const int16_t nchan_ana /* i : number of analysis channels */ #ifdef FIX_527_SBA_MONO_INPUT , int16_t *dirac_mono_flag #endif ); ivas_error ivas_mono_dmx_renderer_open( Loading lib_com/ivas_stat_com.h +3 −0 Original line number Diff line number Diff line Loading @@ -546,6 +546,9 @@ typedef struct ivas_masa_qmetadata_frame_struct int16_t metadata_max_bits; /* maximum allowed number of bits for metadata per frame */ uint8_t useLowerRes; uint8_t useLowerBandRes; #ifdef FIX_527_SBA_MONO_INPUT int16_t dirac_mono_flag; #endif IVAS_SURROUND_COHERENCE_BAND_DATA *surcoh_band_data; /* Additional helper values to include all data required for writing to output file */ Loading lib_com/options.h +2 −0 Original line number Diff line number Diff line Loading @@ -234,6 +234,8 @@ #define FIX_TODO_NON_DIEGETIC_PAN_NOT_IMPLELENTED_IN_RENDERER /* ..\apps\renderer.c(240): .... (todo: implementation)",*/ #define REMOVE_OBS_CODE /* FhG: Remove unnecessary assignement after LFE cleanup (Issue #451)*/ #define FIX_527_SBA_MONO_INPUT /* FhG: fix issue 527, artifacts in mono signals coded in SBA mode */ /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ Loading lib_dec/ivas_dirac_dec.c +16 −0 Original line number Diff line number Diff line Loading @@ -1783,6 +1783,11 @@ void ivas_dirac_dec_read_BS( b = st->bit_stream[( st->next_bit_pos )--]; ( *nb_bits )++; #ifdef FIX_527_SBA_MONO_INPUT hQMetaData->dirac_mono_flag = st->bit_stream[( st->next_bit_pos )--]; ( *nb_bits )++; #endif #ifndef SBA_MODE_CLEAN_UP if ( sba_mode != SBA_MODE_SPAR ) { Loading Loading @@ -1945,6 +1950,17 @@ void ivas_dirac_dec_read_BS( if ( hDirAC != NULL ) { #ifdef FIX_527_SBA_MONO_INPUT printf( "%d\n", hQMetaData->dirac_mono_flag ); if ( hQMetaData->dirac_mono_flag ) { for ( b = 0; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) { set_zero( hQMetaData->q_direction[0].band_data[b].energy_ratio, MAX_PARAM_SPATIAL_SUBFRAMES ); set_zero( hQMetaData->q_direction[0].band_data[b].energy_ratio, MAX_PARAM_SPATIAL_SUBFRAMES ); } } #endif #ifndef SBA_MODE_CLEAN_UP ivas_qmetadata_to_dirac( hQMetaData, hDirAC, NULL, ivas_total_brate, sba_mode, hodirac_flag, Loading lib_enc/ivas_dirac_enc.c +67 −2 Original line number Diff line number Diff line Loading @@ -588,7 +588,24 @@ void ivas_dirac_enc( int16_t i, j, b, i_ts; push_wmops( "ivas_dirac_enc" ); ivas_dirac_param_est_enc( hDirAC, hQMetaData->q_direction, hQMetaData->useLowerRes, data_f, ppIn_FR_real, ppIn_FR_imag, input_frame, ivas_format, hodirac_flag, hodirac_flag ? HOA2_CHANNELS : FOA_CHANNELS ); #ifdef FIX_527_SBA_MONO_INPUT hQMetaData->dirac_mono_flag = 0; #endif ivas_dirac_param_est_enc( hDirAC, hQMetaData->q_direction, hQMetaData->useLowerRes, #ifdef FIX_527_SBA_MONO_INPUT &hQMetaData->dirac_mono_flag, #endif data_f, ppIn_FR_real, ppIn_FR_imag, input_frame, ivas_format, hodirac_flag, hodirac_flag ? HOA2_CHANNELS : FOA_CHANNELS ); if ( hQMetaData->q_direction->cfg.nbands > 0 ) { Loading @@ -599,6 +616,11 @@ void ivas_dirac_enc( /* WB 4TC mode bit : disable for now*/ push_next_indice( hMetaData, 0, 1 ); #ifdef FIX_527_SBA_MONO_INPUT /* flag to indicate a mono input signal */ push_next_indice( hMetaData, hQMetaData->dirac_mono_flag, 1 ); #endif ivas_qmetadata_enc_encode( hMetaData, hQMetaData, hodirac_flag ); } else Loading Loading @@ -636,9 +658,26 @@ void ivas_dirac_enc( /* 1 bit to indicate mode MD coding : temp solution*/ push_next_indice( hMetaData, 1, 1 ); #ifdef FIX_527_SBA_MONO_INPUT /* flag to indicate a mono input signal */ push_next_indice( hMetaData, hQMetaData->dirac_mono_flag, 1 ); #endif /* encode SID parameters */ ivas_qmetadata_enc_sid_encode( hMetaData, hQMetaData, -1, SBA_FORMAT ); } #ifdef FIX_527_SBA_MONO_INPUT if ( hQMetaData->dirac_mono_flag ) { for ( b = hQMetaData->q_direction->cfg.start_band; b < hQMetaData->q_direction->cfg.nbands; b++ ) { for ( i_ts = 0; i_ts < ( ( dtx_vad == 1 ) ? hQMetaData->q_direction[0].cfg.nblocks : 1 ); i_ts++ ) { hQMetaData->q_direction[0].band_data[b].energy_ratio[i_ts] = 1.0f; } } } #endif for ( b = hQMetaData->q_direction->cfg.start_band; b < hQMetaData->q_direction->cfg.nbands; b++ ) { Loading Loading @@ -699,6 +738,10 @@ void computeReferencePower_enc( #endif , const int16_t nchan_ana /* i : number of analysis channels */ #ifdef FIX_527_SBA_MONO_INPUT , int16_t *dirac_mono_flag #endif ) { int16_t brange[2]; Loading @@ -706,6 +749,13 @@ void computeReferencePower_enc( float reference_power_W[DIRAC_MAX_NBANDS]; #ifdef FIX_527_SBA_MONO_INPUT if ( dirac_mono_flag != NULL ) { *dirac_mono_flag = 1; } #endif for ( i = 0; i < num_freq_bands; i++ ) { brange[0] = band_grouping[i + enc_param_start_band]; Loading @@ -727,6 +777,13 @@ void computeReferencePower_enc( reference_power[i] += ( Cldfb_RealBuffer[ch_idx][j] * Cldfb_RealBuffer[ch_idx][j] ) + ( Cldfb_ImagBuffer[ch_idx][j] * Cldfb_ImagBuffer[ch_idx][j] ); } } #ifdef FIX_527_SBA_MONO_INPUT if ( reference_power[i] - reference_power_W[i] > EPSILON && dirac_mono_flag != NULL ) { *dirac_mono_flag = 0; } #endif } v_multc( reference_power, 0.5f, reference_power, num_freq_bands ); Loading Loading @@ -756,6 +813,9 @@ void ivas_dirac_param_est_enc( DIRAC_ENC_HANDLE hDirAC, IVAS_QDIRECTION *q_direction, const uint8_t useLowerRes, #ifdef FIX_527_SBA_MONO_INPUT int16_t *dirac_mono_flag, #endif float data_f[][L_FRAME48k], float **pp_fr_real, float **pp_fr_imag, Loading Loading @@ -879,7 +939,12 @@ void ivas_dirac_param_est_enc( ivas_format, hodirac_flag ? 0 : 1, #endif FOA_CHANNELS ); FOA_CHANNELS #ifdef FIX_527_SBA_MONO_INPUT , dirac_mono_flag #endif ); computeIntensityVector_enc( hDirAC, Loading Loading
lib_com/ivas_prot.h +7 −0 Original line number Diff line number Diff line Loading @@ -3399,6 +3399,9 @@ void ivas_dirac_param_est_enc( DIRAC_ENC_HANDLE hDirAC, IVAS_QDIRECTION *q_direction, const uint8_t useLowerRes, #ifdef FIX_527_SBA_MONO_INPUT int16_t *dirac_mono_flag, #endif float data_f[][L_FRAME48k], float **pp_fr_real, float **pp_fr_imag, Loading Loading @@ -5578,6 +5581,10 @@ void computeReferencePower_enc( #endif , const int16_t nchan_ana /* i : number of analysis channels */ #ifdef FIX_527_SBA_MONO_INPUT , int16_t *dirac_mono_flag #endif ); ivas_error ivas_mono_dmx_renderer_open( Loading
lib_com/ivas_stat_com.h +3 −0 Original line number Diff line number Diff line Loading @@ -546,6 +546,9 @@ typedef struct ivas_masa_qmetadata_frame_struct int16_t metadata_max_bits; /* maximum allowed number of bits for metadata per frame */ uint8_t useLowerRes; uint8_t useLowerBandRes; #ifdef FIX_527_SBA_MONO_INPUT int16_t dirac_mono_flag; #endif IVAS_SURROUND_COHERENCE_BAND_DATA *surcoh_band_data; /* Additional helper values to include all data required for writing to output file */ Loading
lib_com/options.h +2 −0 Original line number Diff line number Diff line Loading @@ -234,6 +234,8 @@ #define FIX_TODO_NON_DIEGETIC_PAN_NOT_IMPLELENTED_IN_RENDERER /* ..\apps\renderer.c(240): .... (todo: implementation)",*/ #define REMOVE_OBS_CODE /* FhG: Remove unnecessary assignement after LFE cleanup (Issue #451)*/ #define FIX_527_SBA_MONO_INPUT /* FhG: fix issue 527, artifacts in mono signals coded in SBA mode */ /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ Loading
lib_dec/ivas_dirac_dec.c +16 −0 Original line number Diff line number Diff line Loading @@ -1783,6 +1783,11 @@ void ivas_dirac_dec_read_BS( b = st->bit_stream[( st->next_bit_pos )--]; ( *nb_bits )++; #ifdef FIX_527_SBA_MONO_INPUT hQMetaData->dirac_mono_flag = st->bit_stream[( st->next_bit_pos )--]; ( *nb_bits )++; #endif #ifndef SBA_MODE_CLEAN_UP if ( sba_mode != SBA_MODE_SPAR ) { Loading Loading @@ -1945,6 +1950,17 @@ void ivas_dirac_dec_read_BS( if ( hDirAC != NULL ) { #ifdef FIX_527_SBA_MONO_INPUT printf( "%d\n", hQMetaData->dirac_mono_flag ); if ( hQMetaData->dirac_mono_flag ) { for ( b = 0; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) { set_zero( hQMetaData->q_direction[0].band_data[b].energy_ratio, MAX_PARAM_SPATIAL_SUBFRAMES ); set_zero( hQMetaData->q_direction[0].band_data[b].energy_ratio, MAX_PARAM_SPATIAL_SUBFRAMES ); } } #endif #ifndef SBA_MODE_CLEAN_UP ivas_qmetadata_to_dirac( hQMetaData, hDirAC, NULL, ivas_total_brate, sba_mode, hodirac_flag, Loading
lib_enc/ivas_dirac_enc.c +67 −2 Original line number Diff line number Diff line Loading @@ -588,7 +588,24 @@ void ivas_dirac_enc( int16_t i, j, b, i_ts; push_wmops( "ivas_dirac_enc" ); ivas_dirac_param_est_enc( hDirAC, hQMetaData->q_direction, hQMetaData->useLowerRes, data_f, ppIn_FR_real, ppIn_FR_imag, input_frame, ivas_format, hodirac_flag, hodirac_flag ? HOA2_CHANNELS : FOA_CHANNELS ); #ifdef FIX_527_SBA_MONO_INPUT hQMetaData->dirac_mono_flag = 0; #endif ivas_dirac_param_est_enc( hDirAC, hQMetaData->q_direction, hQMetaData->useLowerRes, #ifdef FIX_527_SBA_MONO_INPUT &hQMetaData->dirac_mono_flag, #endif data_f, ppIn_FR_real, ppIn_FR_imag, input_frame, ivas_format, hodirac_flag, hodirac_flag ? HOA2_CHANNELS : FOA_CHANNELS ); if ( hQMetaData->q_direction->cfg.nbands > 0 ) { Loading @@ -599,6 +616,11 @@ void ivas_dirac_enc( /* WB 4TC mode bit : disable for now*/ push_next_indice( hMetaData, 0, 1 ); #ifdef FIX_527_SBA_MONO_INPUT /* flag to indicate a mono input signal */ push_next_indice( hMetaData, hQMetaData->dirac_mono_flag, 1 ); #endif ivas_qmetadata_enc_encode( hMetaData, hQMetaData, hodirac_flag ); } else Loading Loading @@ -636,9 +658,26 @@ void ivas_dirac_enc( /* 1 bit to indicate mode MD coding : temp solution*/ push_next_indice( hMetaData, 1, 1 ); #ifdef FIX_527_SBA_MONO_INPUT /* flag to indicate a mono input signal */ push_next_indice( hMetaData, hQMetaData->dirac_mono_flag, 1 ); #endif /* encode SID parameters */ ivas_qmetadata_enc_sid_encode( hMetaData, hQMetaData, -1, SBA_FORMAT ); } #ifdef FIX_527_SBA_MONO_INPUT if ( hQMetaData->dirac_mono_flag ) { for ( b = hQMetaData->q_direction->cfg.start_band; b < hQMetaData->q_direction->cfg.nbands; b++ ) { for ( i_ts = 0; i_ts < ( ( dtx_vad == 1 ) ? hQMetaData->q_direction[0].cfg.nblocks : 1 ); i_ts++ ) { hQMetaData->q_direction[0].band_data[b].energy_ratio[i_ts] = 1.0f; } } } #endif for ( b = hQMetaData->q_direction->cfg.start_band; b < hQMetaData->q_direction->cfg.nbands; b++ ) { Loading Loading @@ -699,6 +738,10 @@ void computeReferencePower_enc( #endif , const int16_t nchan_ana /* i : number of analysis channels */ #ifdef FIX_527_SBA_MONO_INPUT , int16_t *dirac_mono_flag #endif ) { int16_t brange[2]; Loading @@ -706,6 +749,13 @@ void computeReferencePower_enc( float reference_power_W[DIRAC_MAX_NBANDS]; #ifdef FIX_527_SBA_MONO_INPUT if ( dirac_mono_flag != NULL ) { *dirac_mono_flag = 1; } #endif for ( i = 0; i < num_freq_bands; i++ ) { brange[0] = band_grouping[i + enc_param_start_band]; Loading @@ -727,6 +777,13 @@ void computeReferencePower_enc( reference_power[i] += ( Cldfb_RealBuffer[ch_idx][j] * Cldfb_RealBuffer[ch_idx][j] ) + ( Cldfb_ImagBuffer[ch_idx][j] * Cldfb_ImagBuffer[ch_idx][j] ); } } #ifdef FIX_527_SBA_MONO_INPUT if ( reference_power[i] - reference_power_W[i] > EPSILON && dirac_mono_flag != NULL ) { *dirac_mono_flag = 0; } #endif } v_multc( reference_power, 0.5f, reference_power, num_freq_bands ); Loading Loading @@ -756,6 +813,9 @@ void ivas_dirac_param_est_enc( DIRAC_ENC_HANDLE hDirAC, IVAS_QDIRECTION *q_direction, const uint8_t useLowerRes, #ifdef FIX_527_SBA_MONO_INPUT int16_t *dirac_mono_flag, #endif float data_f[][L_FRAME48k], float **pp_fr_real, float **pp_fr_imag, Loading Loading @@ -879,7 +939,12 @@ void ivas_dirac_param_est_enc( ivas_format, hodirac_flag ? 0 : 1, #endif FOA_CHANNELS ); FOA_CHANNELS #ifdef FIX_527_SBA_MONO_INPUT , dirac_mono_flag #endif ); computeIntensityVector_enc( hDirAC, Loading