Loading lib_enc/ivas_masa_enc.c +46 −33 Original line number Diff line number Diff line Loading @@ -41,7 +41,7 @@ #include "prot.h" #ifdef FIX_382_MASA_META_FRAMING_ASYNC #include <string.h> #include <string.h> // VE: please remove it #endif /*-----------------------------------------------------------------------* Loading @@ -54,9 +54,9 @@ static void combine_directions( MASA_ENCODER_HANDLE hMasa ); static void find_n_largest( const float *input, int16_t *largestIndices, const int16_t numElements, const int16_t numLargest ); static void move_metadata_to_qmetadata( MASA_ENCODER_HANDLE hMasa, IVAS_QMETADATA_HANDLE hQMeta ); static void move_metadata_to_qmetadata( const MASA_ENCODER_HANDLE hMasa, IVAS_QMETADATA_HANDLE hQMeta ); static void detect_metadata_composition( MASA_ENCODER_HANDLE hMasa, uint8_t *joinedSubframes, uint8_t *coherencePresent, uint8_t *isTwoDir ); static void detect_metadata_composition( const MASA_ENCODER_HANDLE hMasa, uint8_t *joinedSubframes, uint8_t *coherencePresent, uint8_t *isTwoDir ); static void compensate_energy_ratios( MASA_ENCODER_HANDLE hMasa ); Loading @@ -65,13 +65,13 @@ static int16_t encode_lfe_to_total_energy_ratio( MASA_ENCODER_HANDLE hMasa, BSTR static void reduce_metadata_further( MASA_ENCODER_HANDLE hMasa, IVAS_QMETADATA_HANDLE hqmetadata, const IVAS_FORMAT ivas_format ); #ifdef FIX_382_MASA_META_FRAMING_ASYNC static void average_masa_metadata( MASA_ENCODER_HANDLE hMasa ); static void average_masa_metadata( MASA_METADATA_FRAME *masaMetadata, float energy[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS] ); static void copy_masa_metadata_subframe( MASA_METADATA_HANDLE hMetaFrom, const uint8_t sfFrom, MASA_METADATA_HANDLE hMetaTo, const uint8_t sfTo ); static void copy_masa_metadata_subframe( const MASA_METADATA_HANDLE hMetaFrom, const uint8_t sfFrom, MASA_METADATA_HANDLE hMetaTo, const uint8_t sfTo ); static void copy_masa_metadata( MASA_METADATA_HANDLE hMetaFrom, MASA_METADATA_HANDLE hMetaTo ); static void copy_masa_metadata( const MASA_METADATA_HANDLE hMetaFrom, MASA_METADATA_HANDLE hMetaTo ); static uint8_t are_masa_subframes_similar( MASA_METADATA_HANDLE frame1, const uint8_t sf1_idx, MASA_METADATA_HANDLE frame2, const uint8_t sf2_idx ); static uint8_t are_masa_subframes_similar( const MASA_METADATA_HANDLE frame1, const uint8_t sf1_idx, const MASA_METADATA_HANDLE frame2, const uint8_t sf2_idx ); static void detect_framing_async( MASA_ENCODER_HANDLE hMasa ); #endif Loading Loading @@ -533,7 +533,7 @@ ivas_error ivas_masa_enc_config( if ( hMasa->data.sync_state.frame_mode == MASA_FRAME_1SF && hMasa->data.sync_state.prev_offset != 0 ) { /* average over sub-frames */ average_masa_metadata( hMasa ); average_masa_metadata( &( hMasa->masaMetadata ), hMasa->data.energy ); } #endif Loading Loading @@ -1045,7 +1045,7 @@ static void find_n_largest( static void move_metadata_to_qmetadata( MASA_ENCODER_HANDLE hMasa, const MASA_ENCODER_HANDLE hMasa, IVAS_QMETADATA_HANDLE hQMeta ) { int16_t dir, sf, band; Loading Loading @@ -1117,7 +1117,7 @@ static void move_metadata_to_qmetadata( /* This function studies parametric MASA metadata to provide information for codec configuration */ static void detect_metadata_composition( MASA_ENCODER_HANDLE hMasa, /* i : MASA encoder data */ const MASA_ENCODER_HANDLE hMasa, /* i : MASA encoder data */ uint8_t *joinedSubframes, /* o : Result of subframe composition */ uint8_t *coherencePresent, /* o : Result of coherence presence */ uint8_t *isTwoDir /* o : Result of two direction check */ Loading Loading @@ -1801,22 +1801,21 @@ void ivas_masa_enc_reconfigure( return; } #ifdef FIX_382_MASA_META_FRAMING_ASYNC /*-------------------------------------------------------------------* * average_masa_metadata() * * Average MASA metadata frame subframe contents: applies aggregation over time *-------------------------------------------------------------------*/ static void average_masa_metadata( MASA_ENCODER_HANDLE hMasa /* i/o: MASA encoder handle */ ) MASA_METADATA_FRAME *hMeta, float energy[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS] ) { int16_t i, j, k; float azi_rad, ele_rad; uint8_t numDirections; MASA_METADATA_HANDLE hMeta; hMeta = &( hMasa->masaMetadata ); /* use the nominal values without data-adaptivity */ numDirections = hMeta->descriptive_meta.numberOfDirections + 1; Loading @@ -1838,20 +1837,20 @@ static void average_masa_metadata( { azi_rad = hMeta->directional_meta[i].azimuth[j][k] / 180.0f * EVS_PI; ele_rad = hMeta->directional_meta[i].elevation[j][k] / 180.0f * EVS_PI; vec_len = hMeta->directional_meta[i].energy_ratio[j][k] * hMasa->data.energy[j][k]; vec_len = hMeta->directional_meta[i].energy_ratio[j][k] * energy[j][k]; /* energy-weighted sum over subframes */ x_sum += cosf( azi_rad ) * cosf( ele_rad ) * vec_len; y_sum += sinf( azi_rad ) * cosf( ele_rad ) * vec_len; z_sum += sinf( ele_rad ) * vec_len; energy_sum += hMasa->data.energy[j][k]; energy_sum += energy[j][k]; spread_coh_sum += hMeta->directional_meta[i].spread_coherence[j][k] * hMasa->data.energy[j][k]; spread_coh_sum += hMeta->directional_meta[i].spread_coherence[j][k] * energy[j][k]; if ( i == 0 ) { /* this is in common metadata and not in each direction */ surr_coh_sum += hMeta->common_meta.surround_coherence[j][k] * hMasa->data.energy[j][k]; surr_coh_sum += hMeta->common_meta.surround_coherence[j][k] * energy[j][k]; } } Loading Loading @@ -1899,8 +1898,11 @@ static void average_masa_metadata( hMeta->common_meta.remainder_to_total_ratio[j][k] = 0.0f; } } return; } /*-------------------------------------------------------------------* * copy_masa_metadata_subframe() * Loading @@ -1908,13 +1910,14 @@ static void average_masa_metadata( *-------------------------------------------------------------------*/ static void copy_masa_metadata_subframe( MASA_METADATA_HANDLE hMetaFrom, /* i : MASA frame metdata to be copied */ const MASA_METADATA_HANDLE hMetaFrom, /* i : MASA frame metdata to be copied */ const uint8_t sfFrom, /* i : subframe index of the copy source */ MASA_METADATA_HANDLE hMetaTo, /* o : MASA frame metadata copy destination */ const uint8_t sfTo /* i : subframe index of the copy target */ ) { uint8_t dir; /* directional metadata */ for ( dir = 0; dir < MASA_MAXIMUM_DIRECTIONS; dir++ ) { Loading @@ -1928,8 +1931,11 @@ static void copy_masa_metadata_subframe( mvr2r( hMetaFrom->common_meta.diffuse_to_total_ratio[sfFrom], hMetaTo->common_meta.diffuse_to_total_ratio[sfTo], MASA_FREQUENCY_BANDS ); mvr2r( hMetaFrom->common_meta.surround_coherence[sfFrom], hMetaTo->common_meta.surround_coherence[sfTo], MASA_FREQUENCY_BANDS ); mvr2r( hMetaFrom->common_meta.remainder_to_total_ratio[sfFrom], hMetaTo->common_meta.remainder_to_total_ratio[sfTo], MASA_FREQUENCY_BANDS ); return; } /*-------------------------------------------------------------------* * copy_masa_metadata() * Loading @@ -1937,13 +1943,14 @@ static void copy_masa_metadata_subframe( *-------------------------------------------------------------------*/ static void copy_masa_metadata( MASA_METADATA_HANDLE hMetaFrom, /* i : MASA frame metadata to be copied */ const MASA_METADATA_HANDLE hMetaFrom, /* i : MASA frame metadata to be copied */ MASA_METADATA_HANDLE hMetaTo /* o : MASA frame metadata copy destination */ ) { uint8_t sf; /* descriptive metadata */ // VE: please do not use memcpy() and replace by mvr2r() etc. memcpy( hMetaTo->descriptive_meta.formatDescriptor, hMetaFrom->descriptive_meta.formatDescriptor, sizeof( hMetaFrom->descriptive_meta.formatDescriptor ) ); hMetaTo->descriptive_meta.numberOfDirections = hMetaFrom->descriptive_meta.numberOfDirections; Loading @@ -1959,8 +1966,11 @@ static void copy_masa_metadata( { copy_masa_metadata_subframe( hMetaFrom, sf, hMetaTo, sf ); } return; } /*-------------------------------------------------------------------* * are_masa_subframes_similar() * Loading @@ -1968,9 +1978,9 @@ static void copy_masa_metadata( *-------------------------------------------------------------------*/ static uint8_t are_masa_subframes_similar( MASA_METADATA_HANDLE frame1, /* i : MASA metadata frame 1 */ const MASA_METADATA_HANDLE frame1, /* i : MASA metadata frame 1 */ const uint8_t sf1_idx, /* i : index of the subframe of frame1 to inspect */ MASA_METADATA_HANDLE frame2, /* i : MASA metadata frame 2 */ const MASA_METADATA_HANDLE frame2, /* i : MASA metadata frame 2 */ const uint8_t sf2_idx /* o : index of the subframe of frame2 to inspect */ ) { Loading Loading @@ -2045,7 +2055,7 @@ static uint8_t are_masa_subframes_similar( } } /* TODO: a nicer negation */ /* TODO: a nicer negation */ // VE: ?? if ( sf_differ ) { return FALSE; Loading @@ -2056,6 +2066,7 @@ static uint8_t are_masa_subframes_similar( } } /*-------------------------------------------------------------------* * detect_framing_async() * Loading Loading @@ -2184,5 +2195,7 @@ static void detect_framing_async( sync_state->prev_sim_stop = n_sim_stop; sync_state->prev_offset = found_offset; sync_state->frame_mode = frame_mode; return; } #endif Loading
lib_enc/ivas_masa_enc.c +46 −33 Original line number Diff line number Diff line Loading @@ -41,7 +41,7 @@ #include "prot.h" #ifdef FIX_382_MASA_META_FRAMING_ASYNC #include <string.h> #include <string.h> // VE: please remove it #endif /*-----------------------------------------------------------------------* Loading @@ -54,9 +54,9 @@ static void combine_directions( MASA_ENCODER_HANDLE hMasa ); static void find_n_largest( const float *input, int16_t *largestIndices, const int16_t numElements, const int16_t numLargest ); static void move_metadata_to_qmetadata( MASA_ENCODER_HANDLE hMasa, IVAS_QMETADATA_HANDLE hQMeta ); static void move_metadata_to_qmetadata( const MASA_ENCODER_HANDLE hMasa, IVAS_QMETADATA_HANDLE hQMeta ); static void detect_metadata_composition( MASA_ENCODER_HANDLE hMasa, uint8_t *joinedSubframes, uint8_t *coherencePresent, uint8_t *isTwoDir ); static void detect_metadata_composition( const MASA_ENCODER_HANDLE hMasa, uint8_t *joinedSubframes, uint8_t *coherencePresent, uint8_t *isTwoDir ); static void compensate_energy_ratios( MASA_ENCODER_HANDLE hMasa ); Loading @@ -65,13 +65,13 @@ static int16_t encode_lfe_to_total_energy_ratio( MASA_ENCODER_HANDLE hMasa, BSTR static void reduce_metadata_further( MASA_ENCODER_HANDLE hMasa, IVAS_QMETADATA_HANDLE hqmetadata, const IVAS_FORMAT ivas_format ); #ifdef FIX_382_MASA_META_FRAMING_ASYNC static void average_masa_metadata( MASA_ENCODER_HANDLE hMasa ); static void average_masa_metadata( MASA_METADATA_FRAME *masaMetadata, float energy[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS] ); static void copy_masa_metadata_subframe( MASA_METADATA_HANDLE hMetaFrom, const uint8_t sfFrom, MASA_METADATA_HANDLE hMetaTo, const uint8_t sfTo ); static void copy_masa_metadata_subframe( const MASA_METADATA_HANDLE hMetaFrom, const uint8_t sfFrom, MASA_METADATA_HANDLE hMetaTo, const uint8_t sfTo ); static void copy_masa_metadata( MASA_METADATA_HANDLE hMetaFrom, MASA_METADATA_HANDLE hMetaTo ); static void copy_masa_metadata( const MASA_METADATA_HANDLE hMetaFrom, MASA_METADATA_HANDLE hMetaTo ); static uint8_t are_masa_subframes_similar( MASA_METADATA_HANDLE frame1, const uint8_t sf1_idx, MASA_METADATA_HANDLE frame2, const uint8_t sf2_idx ); static uint8_t are_masa_subframes_similar( const MASA_METADATA_HANDLE frame1, const uint8_t sf1_idx, const MASA_METADATA_HANDLE frame2, const uint8_t sf2_idx ); static void detect_framing_async( MASA_ENCODER_HANDLE hMasa ); #endif Loading Loading @@ -533,7 +533,7 @@ ivas_error ivas_masa_enc_config( if ( hMasa->data.sync_state.frame_mode == MASA_FRAME_1SF && hMasa->data.sync_state.prev_offset != 0 ) { /* average over sub-frames */ average_masa_metadata( hMasa ); average_masa_metadata( &( hMasa->masaMetadata ), hMasa->data.energy ); } #endif Loading Loading @@ -1045,7 +1045,7 @@ static void find_n_largest( static void move_metadata_to_qmetadata( MASA_ENCODER_HANDLE hMasa, const MASA_ENCODER_HANDLE hMasa, IVAS_QMETADATA_HANDLE hQMeta ) { int16_t dir, sf, band; Loading Loading @@ -1117,7 +1117,7 @@ static void move_metadata_to_qmetadata( /* This function studies parametric MASA metadata to provide information for codec configuration */ static void detect_metadata_composition( MASA_ENCODER_HANDLE hMasa, /* i : MASA encoder data */ const MASA_ENCODER_HANDLE hMasa, /* i : MASA encoder data */ uint8_t *joinedSubframes, /* o : Result of subframe composition */ uint8_t *coherencePresent, /* o : Result of coherence presence */ uint8_t *isTwoDir /* o : Result of two direction check */ Loading Loading @@ -1801,22 +1801,21 @@ void ivas_masa_enc_reconfigure( return; } #ifdef FIX_382_MASA_META_FRAMING_ASYNC /*-------------------------------------------------------------------* * average_masa_metadata() * * Average MASA metadata frame subframe contents: applies aggregation over time *-------------------------------------------------------------------*/ static void average_masa_metadata( MASA_ENCODER_HANDLE hMasa /* i/o: MASA encoder handle */ ) MASA_METADATA_FRAME *hMeta, float energy[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS] ) { int16_t i, j, k; float azi_rad, ele_rad; uint8_t numDirections; MASA_METADATA_HANDLE hMeta; hMeta = &( hMasa->masaMetadata ); /* use the nominal values without data-adaptivity */ numDirections = hMeta->descriptive_meta.numberOfDirections + 1; Loading @@ -1838,20 +1837,20 @@ static void average_masa_metadata( { azi_rad = hMeta->directional_meta[i].azimuth[j][k] / 180.0f * EVS_PI; ele_rad = hMeta->directional_meta[i].elevation[j][k] / 180.0f * EVS_PI; vec_len = hMeta->directional_meta[i].energy_ratio[j][k] * hMasa->data.energy[j][k]; vec_len = hMeta->directional_meta[i].energy_ratio[j][k] * energy[j][k]; /* energy-weighted sum over subframes */ x_sum += cosf( azi_rad ) * cosf( ele_rad ) * vec_len; y_sum += sinf( azi_rad ) * cosf( ele_rad ) * vec_len; z_sum += sinf( ele_rad ) * vec_len; energy_sum += hMasa->data.energy[j][k]; energy_sum += energy[j][k]; spread_coh_sum += hMeta->directional_meta[i].spread_coherence[j][k] * hMasa->data.energy[j][k]; spread_coh_sum += hMeta->directional_meta[i].spread_coherence[j][k] * energy[j][k]; if ( i == 0 ) { /* this is in common metadata and not in each direction */ surr_coh_sum += hMeta->common_meta.surround_coherence[j][k] * hMasa->data.energy[j][k]; surr_coh_sum += hMeta->common_meta.surround_coherence[j][k] * energy[j][k]; } } Loading Loading @@ -1899,8 +1898,11 @@ static void average_masa_metadata( hMeta->common_meta.remainder_to_total_ratio[j][k] = 0.0f; } } return; } /*-------------------------------------------------------------------* * copy_masa_metadata_subframe() * Loading @@ -1908,13 +1910,14 @@ static void average_masa_metadata( *-------------------------------------------------------------------*/ static void copy_masa_metadata_subframe( MASA_METADATA_HANDLE hMetaFrom, /* i : MASA frame metdata to be copied */ const MASA_METADATA_HANDLE hMetaFrom, /* i : MASA frame metdata to be copied */ const uint8_t sfFrom, /* i : subframe index of the copy source */ MASA_METADATA_HANDLE hMetaTo, /* o : MASA frame metadata copy destination */ const uint8_t sfTo /* i : subframe index of the copy target */ ) { uint8_t dir; /* directional metadata */ for ( dir = 0; dir < MASA_MAXIMUM_DIRECTIONS; dir++ ) { Loading @@ -1928,8 +1931,11 @@ static void copy_masa_metadata_subframe( mvr2r( hMetaFrom->common_meta.diffuse_to_total_ratio[sfFrom], hMetaTo->common_meta.diffuse_to_total_ratio[sfTo], MASA_FREQUENCY_BANDS ); mvr2r( hMetaFrom->common_meta.surround_coherence[sfFrom], hMetaTo->common_meta.surround_coherence[sfTo], MASA_FREQUENCY_BANDS ); mvr2r( hMetaFrom->common_meta.remainder_to_total_ratio[sfFrom], hMetaTo->common_meta.remainder_to_total_ratio[sfTo], MASA_FREQUENCY_BANDS ); return; } /*-------------------------------------------------------------------* * copy_masa_metadata() * Loading @@ -1937,13 +1943,14 @@ static void copy_masa_metadata_subframe( *-------------------------------------------------------------------*/ static void copy_masa_metadata( MASA_METADATA_HANDLE hMetaFrom, /* i : MASA frame metadata to be copied */ const MASA_METADATA_HANDLE hMetaFrom, /* i : MASA frame metadata to be copied */ MASA_METADATA_HANDLE hMetaTo /* o : MASA frame metadata copy destination */ ) { uint8_t sf; /* descriptive metadata */ // VE: please do not use memcpy() and replace by mvr2r() etc. memcpy( hMetaTo->descriptive_meta.formatDescriptor, hMetaFrom->descriptive_meta.formatDescriptor, sizeof( hMetaFrom->descriptive_meta.formatDescriptor ) ); hMetaTo->descriptive_meta.numberOfDirections = hMetaFrom->descriptive_meta.numberOfDirections; Loading @@ -1959,8 +1966,11 @@ static void copy_masa_metadata( { copy_masa_metadata_subframe( hMetaFrom, sf, hMetaTo, sf ); } return; } /*-------------------------------------------------------------------* * are_masa_subframes_similar() * Loading @@ -1968,9 +1978,9 @@ static void copy_masa_metadata( *-------------------------------------------------------------------*/ static uint8_t are_masa_subframes_similar( MASA_METADATA_HANDLE frame1, /* i : MASA metadata frame 1 */ const MASA_METADATA_HANDLE frame1, /* i : MASA metadata frame 1 */ const uint8_t sf1_idx, /* i : index of the subframe of frame1 to inspect */ MASA_METADATA_HANDLE frame2, /* i : MASA metadata frame 2 */ const MASA_METADATA_HANDLE frame2, /* i : MASA metadata frame 2 */ const uint8_t sf2_idx /* o : index of the subframe of frame2 to inspect */ ) { Loading Loading @@ -2045,7 +2055,7 @@ static uint8_t are_masa_subframes_similar( } } /* TODO: a nicer negation */ /* TODO: a nicer negation */ // VE: ?? if ( sf_differ ) { return FALSE; Loading @@ -2056,6 +2066,7 @@ static uint8_t are_masa_subframes_similar( } } /*-------------------------------------------------------------------* * detect_framing_async() * Loading Loading @@ -2184,5 +2195,7 @@ static void detect_framing_async( sync_state->prev_sim_stop = n_sim_stop; sync_state->prev_offset = found_offset; sync_state->frame_mode = frame_mode; return; } #endif