Commit a5869bb6 authored by norvell's avatar norvell
Browse files

Restructuring and fixes under ISM_NON_DIEGETIC_PAN

parent 260c7b77
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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;

+4 −3
Original line number Diff line number Diff line
@@ -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
);

+3 −1
Original line number Diff line number Diff line
@@ -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;
+538 −528
Original line number Diff line number Diff line
@@ -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 );

@@ -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;
@@ -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;
@@ -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++ )
@@ -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 )
        {
@@ -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
        }
@@ -251,7 +258,6 @@ ivas_error ivas_ism_metadata_dec(
            }
        }


        /* Read ISM present flags (one per object) */
        for ( ch = 0; ch < *nchan_transport; ch++ )
        {
@@ -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++ )
        {
@@ -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 */
@@ -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
@@ -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
@@ -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 )
                    {
@@ -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           */
    )
@@ -715,7 +725,7 @@ static void decode_angle_indices(
         *----------------------------------------------------------------*/

#ifdef ISM_NON_DIEGETIC_PAN
    if ( ism_metadata_flag != 2 )
        if ( !non_diegetic_flag )
        {
#endif

+2 −2
Original line number Diff line number Diff line
@@ -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
@@ -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