Commit 69090cd6 authored by vaclav's avatar vaclav
Browse files

- simplifications in ivas_dec()

- add error returns
parent 4d827c19
Loading
Loading
Loading
Loading
+58 −33
Original line number Diff line number Diff line
@@ -451,7 +451,7 @@ ivas_error ivas_dec(
            }
        }

        /* MASA decoding */
        /* MASA metadata decoding */
        if ( ( error = ivas_masa_decode( st_ivas, st, &nb_bits_metadata[0] ) ) != IVAS_ERR_OK )
        {
            return error;
@@ -462,7 +462,25 @@ ivas_error ivas_dec(

        st->bit_stream = &( st_ivas->bit_stream[( ism_total_brate / FRAMES_PER_SEC )] );

        /* Audio signal decoding */
#ifdef OMASA_UPDATES
        /* set ISM parameters */
        int16_t nchan_ism, nchan_transport_ism;
        nchan_ism = st_ivas->nchan_ism;
        nchan_transport_ism = st_ivas->nchan_ism;
        if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ )
        {
            nchan_ism = 1;
            nchan_transport_ism = 1;
        }
        else if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ )
        {
            nchan_ism = 0;
            nchan_transport_ism = 1;
        }
#endif

        /* decode ISM metadata */
#ifndef OMASA_UPDATES
#ifdef OMASA_UPDATES
        if ( st_ivas->ism_mode != ISM_MASA_MODE_DISC && st_ivas->ism_mode != ISM_MASA_MODE_MASA_ONE_OBJ )
#else
@@ -471,10 +489,7 @@ ivas_error ivas_dec(
        {
            if ( st_ivas->nSCE == 1 )
            {
                if ( ( error = ivas_sce_dec( st_ivas, 0, &output[2], output_frame, nb_bits_metadata[1] ) ) != IVAS_ERR_OK )
                {
                    return error;
                }
                ivas_sce_dec( st_ivas, 0, &output[2], output_frame, nb_bits_metadata[1] );
            }
            else
            {
@@ -484,24 +499,19 @@ ivas_error ivas_dec(
            }
        }
        else
        {
#ifdef OMASA_UPDATES
            int16_t nchan_ism = st_ivas->nchan_ism;
            if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ )
            {
                nchan_ism = 1;
            }
#else
        if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ )
#endif

            /* decode ISM format */
        {
            /* decode ISM metadata */
#ifdef NCHAN_ISM_PARAMETER
            if ( ( error = ivas_ism_metadata_dec( ism_total_brate,
#ifdef OMASA_UPDATES
                                                  nchan_ism,
                                                  nchan_ism, &nchan_transport_ism,
#else
                                                  st_ivas->nchan_ism,
                                                  st_ivas->nchan_ism, &( st_ivas->nSCE ),
#endif
                                                  &( st_ivas->nSCE ), st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->bfi, &nb_bits_metadata[1], st_ivas->ism_mode, st_ivas->hISMDTX, NULL ) ) != IVAS_ERR_OK )
                                                  st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->bfi, &nb_bits_metadata[1], st_ivas->ism_mode, st_ivas->hISMDTX, NULL ) ) != IVAS_ERR_OK )
#else
            if ( ( error = ivas_ism_metadata_dec( ism_total_brate, st_ivas->nchan_ism, &( st_ivas->nchan_transport ), st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->bfi, &nb_bits_metadata[1], st_ivas->ism_mode, NULL, NULL ) ) != IVAS_ERR_OK )
#endif
@@ -509,19 +519,7 @@ ivas_error ivas_dec(
                return error;
            }

            for ( n = 0; n < st_ivas->nSCE - 1; n++ )
            {
                if ( ( error = ivas_sce_dec( st_ivas, n, &output[2 * st_ivas->nCPE + n], output_frame, 0 ) ) != IVAS_ERR_OK )
                {
                    return error;
                }
            }

            if ( ( error = ivas_sce_dec( st_ivas, n, &output[2 * st_ivas->nCPE + n], output_frame, sum_s( &nb_bits_metadata[1], st_ivas->nSCE ) ) ) != IVAS_ERR_OK )
            {
                return error;
            }

            // VE: move the following updates into ivas_ism_metadata_dec()
#ifdef OMASA_UPDATES
            if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC )
            {
@@ -531,7 +529,7 @@ ivas_error ivas_dec(
                    st_ivas->hMasaIsmData->elevation_ism[n] = (int16_t) ( st_ivas->hIsmMetaData[n]->elevation + 0.5f );
                }
            }
            else
            else /* ISM_MASA_MODE_MASA_ONE_OBJ */
            {
                st_ivas->hMasaIsmData->azimuth_separated_ism = (int16_t) ( st_ivas->hIsmMetaData[0]->azimuth + 0.5f );
                st_ivas->hMasaIsmData->elevation_separated_ism = (int16_t) ( st_ivas->hIsmMetaData[0]->elevation + 0.5f );
@@ -543,8 +541,35 @@ ivas_error ivas_dec(
                st_ivas->hMasaIsmData->elevation_ism[n] = (int16_t) ( st_ivas->hIsmMetaData[n]->elevation + 0.5f );
            }
#endif

#ifndef OMASA_UPDATES
            for ( n = 0; n < st_ivas->nSCE - 1; n++ )
            {
                if ( ( error = ivas_sce_dec( st_ivas, n, &output[2 * st_ivas->nCPE + n], output_frame, 0 ) ) != IVAS_ERR_OK )
                {
                    return error;
                }
            }

            if ( ( error = ivas_sce_dec( st_ivas, n, &output[2 * st_ivas->nCPE + n], output_frame, sum_s( &nb_bits_metadata[1], st_ivas->nSCE ) ) ) != IVAS_ERR_OK )
            {
                return error;
            }
#endif
        }

#ifdef OMASA_UPDATES
        /* decode ISM channels */
        for ( n = 0; n < nchan_transport_ism; n++ )
        {
            if ( ( error = ivas_sce_dec( st_ivas, n, &output[st_ivas->nchan_transport + n], output_frame, nb_bits_metadata[1] ) ) != IVAS_ERR_OK )
            {
                return error;
            }
        }
#endif

        /* decode MASA channels */
        if ( ( error = ivas_cpe_dec( st_ivas, 0, output, output_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK )
        {
            return error;
@@ -575,7 +600,7 @@ ivas_error ivas_dec(

                for ( n = 0; n < st_ivas->nchan_ism; n++ )
                {
                    mvr2r( output[n + 2], data_separated_objects[n], output_frame );
                    mvr2r( output[2 + n], data_separated_objects[n], output_frame );
                    v_multc( data_separated_objects[n], gain, data_separated_objects[n], output_frame );
                }

+12 −3
Original line number Diff line number Diff line
@@ -1132,7 +1132,10 @@ ivas_error ivas_init_decoder(
#ifdef MASA_AND_OBJECTS
    else if ( st_ivas->ivas_format == MASA_ISM_FORMAT )
    {
        ivas_qmetadata_open( &( st_ivas->hQMetaData ) );
        if ( ( error = ivas_qmetadata_open( &( st_ivas->hQMetaData ) ) ) != IVAS_ERR_OK )
        {
            return error;
        }

        k = 0;
        ism_total_brate = 0;
@@ -1150,7 +1153,10 @@ ivas_error ivas_init_decoder(
            st_ivas->nSCE = 1;

            ism_total_brate = sep_object_brate[k - 2][0];
            create_sce_dec( st_ivas, 0, ism_total_brate );
            if ( ( error = create_sce_dec( st_ivas, 0, ism_total_brate ) ) != IVAS_ERR_OK )
            {
                return error;
            }

            reset_indices_dec( st_ivas->hSCE[0]->hCoreCoder[0] );

@@ -1221,7 +1227,10 @@ ivas_error ivas_init_decoder(

        if ( st_ivas->renderer_type != RENDERER_DISABLE && st_ivas->renderer_type != RENDERER_MONO_DOWNMIX )
        {
            ivas_dirac_dec_open( st_ivas );
            if ( ( error = ivas_dirac_dec_open( st_ivas ) ) != IVAS_ERR_OK )
            {
                return error;
            }
        }

        if ( ( error = create_cpe_dec( st_ivas, 0, ivas_total_brate - ism_total_brate ) ) != IVAS_ERR_OK )
+14 −10
Original line number Diff line number Diff line
@@ -98,7 +98,7 @@ ivas_error ivas_ism_enc(
#endif
    ivas_error error;
#ifdef MASA_AND_OBJECTS
    int16_t i, nchan_transport;
    int16_t i, nchan_transport_ism;
#endif

    push_wmops( "ivas_ism_enc" );
@@ -132,18 +132,18 @@ ivas_error ivas_ism_enc(
    set_s( md_diff_flag, 1, nchan_ism );

#ifdef MASA_AND_OBJECTS
    nchan_transport = st_ivas->nchan_transport;
    nchan_transport_ism = st_ivas->nchan_transport;
#ifdef OMASA_UPDATES
    if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ )
    {
        nchan_transport = 1;
        nchan_transport_ism = 1;
        nchan_ism = 1;
    }
    else
#endif
        if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC )
    {
        nchan_transport = st_ivas->hEncoderConfig->nchan_ism;
        nchan_transport_ism = st_ivas->hEncoderConfig->nchan_ism;
    }
#endif

@@ -151,10 +151,10 @@ ivas_error ivas_ism_enc(
     * Preprocesing
     *-----------------------------------------------------------------*/

    /* in ISM format: st_ivas->nchan_transport = st_ivas->nSCE */
#ifdef MASA_AND_OBJECTS
    for ( sce_id = 0; sce_id < nchan_transport; sce_id++ )
    for ( sce_id = 0; sce_id < nchan_transport_ism; sce_id++ )
#else
    /* in ISM format: st_ivas->nchan_transport = st_ivas->nSCE */
    for ( sce_id = 0; sce_id < st_ivas->nchan_transport; sce_id++ )
#endif
    {
@@ -303,7 +303,7 @@ ivas_error ivas_ism_enc(
                   nchan_ism,
#endif
#ifdef MASA_AND_OBJECTS
                   nchan_transport,
                   nchan_transport_ism,
#else
                   st_ivas->nchan_transport,
#endif
@@ -352,7 +352,7 @@ ivas_error ivas_ism_enc(
                               nchan_ism,
#endif
#ifdef MASA_AND_OBJECTS
                               nchan_transport,
                               nchan_transport_ism,
#else
                               st_ivas->nchan_transport,
#endif
@@ -411,7 +411,7 @@ ivas_error ivas_ism_enc(
     *-----------------------------------------------------------------*/

#ifdef MASA_AND_OBJECTS
    for ( sce_id = 0; sce_id < nchan_transport; sce_id++ )
    for ( sce_id = 0; sce_id < nchan_transport_ism; sce_id++ )
#else
    for ( sce_id = 0; sce_id < st_ivas->nchan_transport; sce_id++ )
#endif
@@ -471,7 +471,7 @@ ivas_error ivas_ism_enc(
    if ( dtx_flag )
    {
#ifdef MASA_AND_OBJECTS
        for ( sce_id = 0; sce_id < nchan_transport; sce_id++ )
        for ( sce_id = 0; sce_id < nchan_transport_ism; sce_id++ )
#else
        for ( sce_id = 0; sce_id < st_ivas->nchan_transport; sce_id++ )
#endif
@@ -493,7 +493,11 @@ ivas_error ivas_ism_enc(
        int16_t id, n;

        n = 0;
#ifdef MASA_AND_OBJECTS
        for ( sce_id = 0; sce_id < nchan_transport_ism; sce_id++ )
#else
        for ( sce_id = 0; sce_id < st_ivas->nchan_transport; sce_id++ )
#endif
        {
            if ( sce_id != st_ivas->hISMDTX->sce_id_dtx )
            {