Loading lib_com/common_api_types.h +1 −1 Original line number Diff line number Diff line Loading @@ -81,7 +81,7 @@ typedef struct _IVAS_ISM_METADATA float yaw; float pitch; #ifdef ISM_NON_DIEGETIC_PAN uint16_t metadata_flag; uint16_t non_diegetic_flag; #endif } IVAS_ISM_METADATA; Loading lib_com/ivas_prot.h +4 −3 Original line number Diff line number Diff line Loading @@ -789,10 +789,11 @@ ivas_error ivas_set_ism_metadata( const float elevation, /* i : elevation value */ const float radius_meta, /* i : radius */ const float yaw, /* i : yaw */ const float pitch /* i : pitch */ #ifdef ISM_NON_DIEGETIC_PAN , const uint16_t metadata_flag /* i : 0 VAD, 1 if metadate type is source or 2 if non diegetic pan*/ const float pitch, /* i : pitch */ const int16_t non_diegetic_flag /* i : non-diegetic flag */ #else const float pitch /* i : pitch */ #endif ); Loading lib_com/ivas_stat_com.h +3 −1 Original line number Diff line number Diff line Loading @@ -55,7 +55,9 @@ typedef struct { int16_t ism_metadata_flag; /* flag whether metadata are coded in particular frame of particular object */ int16_t last_ism_metadata_flag; /* last frame ism_metadata_flag */ #ifdef ISM_NON_DIEGETIC_PAN int16_t non_diegetic_flag; /* Non-diegetic (non-headtracked) object */ #endif float azimuth; /* azimuth value read from the input metadata file */ float elevation; /* azimuth value read from the input metadata file */ float radius; Loading lib_dec/ivas_ism_metadata_dec.c +538 −528 Original line number Diff line number Diff line Loading @@ -48,11 +48,12 @@ * Local functions *-----------------------------------------------------------------------*/ static void decode_angle_indices( DEC_CORE_HANDLE st0, ISM_METADATA_ANGLE_HANDLE angle, #ifdef ISM_NON_DIEGETIC_PAN uint16_t ism_metadata_flag, static void decode_angle_indices( DEC_CORE_HANDLE st0, ISM_METADATA_ANGLE_HANDLE angle, const int16_t non_diegetic_flag, int16_t *flag_abs_azimuth ); #else static void decode_angle_indices( DEC_CORE_HANDLE st0, ISM_METADATA_ANGLE_HANDLE angle, int16_t *flag_abs_azimuth ); #endif int16_t *flag_abs_azimuth ); static int16_t decode_radius( DEC_CORE_HANDLE st0, int16_t *last_radius_idx, int16_t *flag_abs_radius ); Loading Loading @@ -160,6 +161,9 @@ ivas_error ivas_ism_metadata_dec( int32_t element_brate[MAX_NUM_OBJECTS], total_brate[MAX_NUM_OBJECTS]; DEC_CORE_HANDLE st0; int16_t ism_extmeta_bitstream; #ifdef ISM_NON_DIEGETIC_PAN int16_t non_diegetic_flag_global; #endif float yaw, pitch, radius; int16_t flag_abs_radius; int16_t flag_abs_orientation; Loading @@ -178,6 +182,7 @@ ivas_error ivas_ism_metadata_dec( push_wmops( "ism_meta_dec" ); /* initialization */ st0 = hSCE[0]->hCoreCoder[0]; ism_metadata_flag_global = 0; Loading @@ -188,6 +193,9 @@ ivas_error ivas_ism_metadata_dec( next_bit_pos_orig = st0->next_bit_pos; st0->next_bit_pos = 0; ism_extmeta_bitstream = 0; #ifdef ISM_NON_DIEGETIC_PAN non_diegetic_flag_global = 0; #endif /* reverse the bitstream for easier reading of indices */ for ( i = 0; i < min( MAX_BITS_METADATA, last_bit_pos ); i++ ) Loading Loading @@ -223,7 +231,6 @@ ivas_error ivas_ism_metadata_dec( return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "wrong number of objects signalled!" ); } /* read extended metadata presence flag */ if ( ism_total_brate >= ISM_EXTENDED_METADATA_BRATE ) { Loading @@ -231,7 +238,7 @@ ivas_error ivas_ism_metadata_dec( #ifdef ISM_NON_DIEGETIC_PAN if ( ism_extmeta_bitstream ) { ism_extmeta_bitstream += get_next_indice( st0, ISM_METADATA_IS_NDP_BITS ); non_diegetic_flag_global = get_next_indice( st0, ISM_METADATA_IS_NDP_BITS ); } #endif } Loading @@ -251,7 +258,6 @@ ivas_error ivas_ism_metadata_dec( } } /* Read ISM present flags (one per object) */ for ( ch = 0; ch < *nchan_transport; ch++ ) { Loading @@ -274,6 +280,7 @@ ivas_error ivas_ism_metadata_dec( hIsmMeta[ch]->ism_metadata_flag = 1; ism_metadata_flag_global |= hIsmMeta[ch]->ism_metadata_flag; } /* read VAD flag */ for ( ch = 0; ch < *nchan_transport; ch++ ) { Loading Loading @@ -311,16 +318,22 @@ ivas_error ivas_ism_metadata_dec( flag_abs_position = 0; flag_abs_orientation = 0; flag_abs_radius = 0; if ( hIsmMeta[ch]->ism_metadata_flag ) { #ifdef ISM_NON_DIEGETIC_PAN if ( hIsmMetaData->ism_metadata_flag && ( ism_extmeta_bitstream & 0x2 ) ) if ( non_diegetic_flag_global ) { hIsmMetaData->ism_metadata_flag += get_next_indice( st0, ISM_METADATA_IS_NDP_BITS ); hIsmMetaData->non_diegetic_flag = get_next_indice( st0, ISM_METADATA_IS_NDP_BITS ); } if ( hIsmMetaData->ism_metadata_flag == 2 ) else { hIsmMetaData->non_diegetic_flag = 0; } if ( hIsmMetaData->non_diegetic_flag ) { /* Azimuth/Elevation dequantization */ decode_angle_indices( st0, &( hIsmMetaData->position_angle ), hIsmMetaData->ism_metadata_flag, &flag_abs_position ); decode_angle_indices( st0, &( hIsmMetaData->position_angle ), hIsmMetaData->non_diegetic_flag, &flag_abs_position ); idx_angle1 = hIsmMetaData->position_angle.last_angle1_idx; idx_angle2 = 1 << ( ISM_ELEVATION_NBITS - 1 ); /* Azimuth/Elevation dequantization */ Loading @@ -329,17 +342,12 @@ ivas_error ivas_ism_metadata_dec( /* save for smoothing metadata evolution */ hIsmMetaData->last_true_azimuth = hIsmMetaData->azimuth; hIsmMetaData->last_true_elevation = hIsmMetaData->elevation; /* save number of metadata bits read */ nb_bits_metadata[ch] = st0->next_bit_pos - nb_bits_start; } if ( hIsmMeta[ch]->ism_metadata_flag == 1 ) { #else if ( hIsmMeta[ch]->ism_metadata_flag ) else { #endif #ifdef ISM_NON_DIEGETIC_PAN decode_angle_indices( st0, &( hIsmMetaData->position_angle ), hIsmMeta[ch]->ism_metadata_flag, &flag_abs_position ); decode_angle_indices( st0, &( hIsmMetaData->position_angle ), hIsmMeta[ch]->non_diegetic_flag, &flag_abs_position ); #else decode_angle_indices( st0, &( hIsmMetaData->position_angle ), &flag_abs_position ); #endif Loading @@ -360,7 +368,7 @@ ivas_error ivas_ism_metadata_dec( if ( ism_extmeta_bitstream ) { #ifdef ISM_NON_DIEGETIC_PAN decode_angle_indices( st0, &( hIsmMetaData->orientation_angle ), hIsmMeta[ch]->ism_metadata_flag, &flag_abs_orientation ); decode_angle_indices( st0, &( hIsmMetaData->orientation_angle ), hIsmMeta[ch]->non_diegetic_flag, &flag_abs_orientation ); #else decode_angle_indices( st0, &( hIsmMetaData->orientation_angle ), &flag_abs_orientation ); #endif Loading Loading @@ -392,7 +400,9 @@ ivas_error ivas_ism_metadata_dec( hIsmMetaData->last_true_azimuth = hIsmMetaData->azimuth; hIsmMetaData->last_true_elevation = hIsmMetaData->elevation; } #ifdef ISM_NON_DIEGETIC_PAN } #endif /* save number of metadata bits read */ if ( ism_mode == ISM_MODE_DISC ) { Loading Loading @@ -634,7 +644,7 @@ static void decode_angle_indices( DEC_CORE_HANDLE st0, /* i/o: bitstream handle */ ISM_METADATA_ANGLE_HANDLE angle, /* i/o: angle handle */ #ifdef ISM_NON_DIEGETIC_PAN uint16_t ism_metadata_flag, const int16_t non_diegetic_flag, /* i : Non diegetic flag */ #endif int16_t *flag_abs_angle1 /* o : Azimuth/yaw encoding mode */ ) Loading Loading @@ -715,7 +725,7 @@ static void decode_angle_indices( *----------------------------------------------------------------*/ #ifdef ISM_NON_DIEGETIC_PAN if ( ism_metadata_flag != 2 ) if ( !non_diegetic_flag ) { #endif Loading lib_dec/lib_dec.c +2 −2 Original line number Diff line number Diff line Loading @@ -864,7 +864,7 @@ ivas_error IVAS_DEC_GetObjectMetadata( metadata->yaw = 0.f; metadata->pitch = 0.f; #ifdef ISM_NON_DIEGETIC_PAN metadata->metadata_flag = 0; metadata->non_diegetic_flag = 0; #endif } else Loading @@ -877,7 +877,7 @@ ivas_error IVAS_DEC_GetObjectMetadata( metadata->spread = 0.f; metadata->gainFactor = 1.f; #ifdef ISM_NON_DIEGETIC_PAN metadata->metadata_flag = hIsmMeta->ism_metadata_flag; metadata->non_diegetic_flag = hIsmMeta->non_diegetic_flag; #endif } Loading Loading
lib_com/common_api_types.h +1 −1 Original line number Diff line number Diff line Loading @@ -81,7 +81,7 @@ typedef struct _IVAS_ISM_METADATA float yaw; float pitch; #ifdef ISM_NON_DIEGETIC_PAN uint16_t metadata_flag; uint16_t non_diegetic_flag; #endif } IVAS_ISM_METADATA; Loading
lib_com/ivas_prot.h +4 −3 Original line number Diff line number Diff line Loading @@ -789,10 +789,11 @@ ivas_error ivas_set_ism_metadata( const float elevation, /* i : elevation value */ const float radius_meta, /* i : radius */ const float yaw, /* i : yaw */ const float pitch /* i : pitch */ #ifdef ISM_NON_DIEGETIC_PAN , const uint16_t metadata_flag /* i : 0 VAD, 1 if metadate type is source or 2 if non diegetic pan*/ const float pitch, /* i : pitch */ const int16_t non_diegetic_flag /* i : non-diegetic flag */ #else const float pitch /* i : pitch */ #endif ); Loading
lib_com/ivas_stat_com.h +3 −1 Original line number Diff line number Diff line Loading @@ -55,7 +55,9 @@ typedef struct { int16_t ism_metadata_flag; /* flag whether metadata are coded in particular frame of particular object */ int16_t last_ism_metadata_flag; /* last frame ism_metadata_flag */ #ifdef ISM_NON_DIEGETIC_PAN int16_t non_diegetic_flag; /* Non-diegetic (non-headtracked) object */ #endif float azimuth; /* azimuth value read from the input metadata file */ float elevation; /* azimuth value read from the input metadata file */ float radius; Loading
lib_dec/ivas_ism_metadata_dec.c +538 −528 Original line number Diff line number Diff line Loading @@ -48,11 +48,12 @@ * Local functions *-----------------------------------------------------------------------*/ static void decode_angle_indices( DEC_CORE_HANDLE st0, ISM_METADATA_ANGLE_HANDLE angle, #ifdef ISM_NON_DIEGETIC_PAN uint16_t ism_metadata_flag, static void decode_angle_indices( DEC_CORE_HANDLE st0, ISM_METADATA_ANGLE_HANDLE angle, const int16_t non_diegetic_flag, int16_t *flag_abs_azimuth ); #else static void decode_angle_indices( DEC_CORE_HANDLE st0, ISM_METADATA_ANGLE_HANDLE angle, int16_t *flag_abs_azimuth ); #endif int16_t *flag_abs_azimuth ); static int16_t decode_radius( DEC_CORE_HANDLE st0, int16_t *last_radius_idx, int16_t *flag_abs_radius ); Loading Loading @@ -160,6 +161,9 @@ ivas_error ivas_ism_metadata_dec( int32_t element_brate[MAX_NUM_OBJECTS], total_brate[MAX_NUM_OBJECTS]; DEC_CORE_HANDLE st0; int16_t ism_extmeta_bitstream; #ifdef ISM_NON_DIEGETIC_PAN int16_t non_diegetic_flag_global; #endif float yaw, pitch, radius; int16_t flag_abs_radius; int16_t flag_abs_orientation; Loading @@ -178,6 +182,7 @@ ivas_error ivas_ism_metadata_dec( push_wmops( "ism_meta_dec" ); /* initialization */ st0 = hSCE[0]->hCoreCoder[0]; ism_metadata_flag_global = 0; Loading @@ -188,6 +193,9 @@ ivas_error ivas_ism_metadata_dec( next_bit_pos_orig = st0->next_bit_pos; st0->next_bit_pos = 0; ism_extmeta_bitstream = 0; #ifdef ISM_NON_DIEGETIC_PAN non_diegetic_flag_global = 0; #endif /* reverse the bitstream for easier reading of indices */ for ( i = 0; i < min( MAX_BITS_METADATA, last_bit_pos ); i++ ) Loading Loading @@ -223,7 +231,6 @@ ivas_error ivas_ism_metadata_dec( return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "wrong number of objects signalled!" ); } /* read extended metadata presence flag */ if ( ism_total_brate >= ISM_EXTENDED_METADATA_BRATE ) { Loading @@ -231,7 +238,7 @@ ivas_error ivas_ism_metadata_dec( #ifdef ISM_NON_DIEGETIC_PAN if ( ism_extmeta_bitstream ) { ism_extmeta_bitstream += get_next_indice( st0, ISM_METADATA_IS_NDP_BITS ); non_diegetic_flag_global = get_next_indice( st0, ISM_METADATA_IS_NDP_BITS ); } #endif } Loading @@ -251,7 +258,6 @@ ivas_error ivas_ism_metadata_dec( } } /* Read ISM present flags (one per object) */ for ( ch = 0; ch < *nchan_transport; ch++ ) { Loading @@ -274,6 +280,7 @@ ivas_error ivas_ism_metadata_dec( hIsmMeta[ch]->ism_metadata_flag = 1; ism_metadata_flag_global |= hIsmMeta[ch]->ism_metadata_flag; } /* read VAD flag */ for ( ch = 0; ch < *nchan_transport; ch++ ) { Loading Loading @@ -311,16 +318,22 @@ ivas_error ivas_ism_metadata_dec( flag_abs_position = 0; flag_abs_orientation = 0; flag_abs_radius = 0; if ( hIsmMeta[ch]->ism_metadata_flag ) { #ifdef ISM_NON_DIEGETIC_PAN if ( hIsmMetaData->ism_metadata_flag && ( ism_extmeta_bitstream & 0x2 ) ) if ( non_diegetic_flag_global ) { hIsmMetaData->ism_metadata_flag += get_next_indice( st0, ISM_METADATA_IS_NDP_BITS ); hIsmMetaData->non_diegetic_flag = get_next_indice( st0, ISM_METADATA_IS_NDP_BITS ); } if ( hIsmMetaData->ism_metadata_flag == 2 ) else { hIsmMetaData->non_diegetic_flag = 0; } if ( hIsmMetaData->non_diegetic_flag ) { /* Azimuth/Elevation dequantization */ decode_angle_indices( st0, &( hIsmMetaData->position_angle ), hIsmMetaData->ism_metadata_flag, &flag_abs_position ); decode_angle_indices( st0, &( hIsmMetaData->position_angle ), hIsmMetaData->non_diegetic_flag, &flag_abs_position ); idx_angle1 = hIsmMetaData->position_angle.last_angle1_idx; idx_angle2 = 1 << ( ISM_ELEVATION_NBITS - 1 ); /* Azimuth/Elevation dequantization */ Loading @@ -329,17 +342,12 @@ ivas_error ivas_ism_metadata_dec( /* save for smoothing metadata evolution */ hIsmMetaData->last_true_azimuth = hIsmMetaData->azimuth; hIsmMetaData->last_true_elevation = hIsmMetaData->elevation; /* save number of metadata bits read */ nb_bits_metadata[ch] = st0->next_bit_pos - nb_bits_start; } if ( hIsmMeta[ch]->ism_metadata_flag == 1 ) { #else if ( hIsmMeta[ch]->ism_metadata_flag ) else { #endif #ifdef ISM_NON_DIEGETIC_PAN decode_angle_indices( st0, &( hIsmMetaData->position_angle ), hIsmMeta[ch]->ism_metadata_flag, &flag_abs_position ); decode_angle_indices( st0, &( hIsmMetaData->position_angle ), hIsmMeta[ch]->non_diegetic_flag, &flag_abs_position ); #else decode_angle_indices( st0, &( hIsmMetaData->position_angle ), &flag_abs_position ); #endif Loading @@ -360,7 +368,7 @@ ivas_error ivas_ism_metadata_dec( if ( ism_extmeta_bitstream ) { #ifdef ISM_NON_DIEGETIC_PAN decode_angle_indices( st0, &( hIsmMetaData->orientation_angle ), hIsmMeta[ch]->ism_metadata_flag, &flag_abs_orientation ); decode_angle_indices( st0, &( hIsmMetaData->orientation_angle ), hIsmMeta[ch]->non_diegetic_flag, &flag_abs_orientation ); #else decode_angle_indices( st0, &( hIsmMetaData->orientation_angle ), &flag_abs_orientation ); #endif Loading Loading @@ -392,7 +400,9 @@ ivas_error ivas_ism_metadata_dec( hIsmMetaData->last_true_azimuth = hIsmMetaData->azimuth; hIsmMetaData->last_true_elevation = hIsmMetaData->elevation; } #ifdef ISM_NON_DIEGETIC_PAN } #endif /* save number of metadata bits read */ if ( ism_mode == ISM_MODE_DISC ) { Loading Loading @@ -634,7 +644,7 @@ static void decode_angle_indices( DEC_CORE_HANDLE st0, /* i/o: bitstream handle */ ISM_METADATA_ANGLE_HANDLE angle, /* i/o: angle handle */ #ifdef ISM_NON_DIEGETIC_PAN uint16_t ism_metadata_flag, const int16_t non_diegetic_flag, /* i : Non diegetic flag */ #endif int16_t *flag_abs_angle1 /* o : Azimuth/yaw encoding mode */ ) Loading Loading @@ -715,7 +725,7 @@ static void decode_angle_indices( *----------------------------------------------------------------*/ #ifdef ISM_NON_DIEGETIC_PAN if ( ism_metadata_flag != 2 ) if ( !non_diegetic_flag ) { #endif Loading
lib_dec/lib_dec.c +2 −2 Original line number Diff line number Diff line Loading @@ -864,7 +864,7 @@ ivas_error IVAS_DEC_GetObjectMetadata( metadata->yaw = 0.f; metadata->pitch = 0.f; #ifdef ISM_NON_DIEGETIC_PAN metadata->metadata_flag = 0; metadata->non_diegetic_flag = 0; #endif } else Loading @@ -877,7 +877,7 @@ ivas_error IVAS_DEC_GetObjectMetadata( metadata->spread = 0.f; metadata->gainFactor = 1.f; #ifdef ISM_NON_DIEGETIC_PAN metadata->metadata_flag = hIsmMeta->ism_metadata_flag; metadata->non_diegetic_flag = hIsmMeta->non_diegetic_flag; #endif } Loading