Commit 985eb638 authored by Vladimir Malenovsky's avatar Vladimir Malenovsky
Browse files

Merge branch 'main' into isar_lcld_crash_codec_fr_LT_isar_fr

parents 0c191b4c c8f62466
Loading
Loading
Loading
Loading
Loading
+49 −0
Original line number Diff line number Diff line
@@ -175,7 +175,11 @@ typedef struct

static bool parseCmdlIVAS_dec( int16_t argc, char **argv, DecArguments *arg );
static void usage_dec( void );
#ifdef FIX_FLOAT_1539_G192_FORMAT_SWITCH
static ivas_error decodeG192( DecArguments arg, BS_READER_HANDLE hBsReader, IVAS_DEC_HRTF_BINARY_WRAPPER *hHrtfBinary, RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, Vector3PairFileReader *referenceVectorReader, ObjectEditFileReader *objectEditFileReader, ISAR_SPLIT_REND_BITS_DATA *splitRendBits, IVAS_DEC_HANDLE *phIvasDec, int16_t *pcmBuf );
#else
static ivas_error decodeG192( DecArguments arg, BS_READER_HANDLE hBsReader, IVAS_DEC_HRTF_BINARY_WRAPPER *hHrtfBinary, RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, Vector3PairFileReader *referenceVectorReader, ObjectEditFileReader *objectEditFileReader, ISAR_SPLIT_REND_BITS_DATA *splitRendBits, IVAS_DEC_HANDLE hIvasDec, int16_t *pcmBuf );
#endif
static ivas_error decodeVoIP( DecArguments arg, BS_READER_HANDLE hBsReader, IVAS_DEC_HRTF_BINARY_WRAPPER *hHrtf, RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, Vector3PairFileReader *referenceVectorReader, ObjectEditFileReader *objectEditFileReader, ISAR_SPLIT_REND_BITS_DATA *splitRendBits, IVAS_RENDER_CONFIG_DATA *renderConfig, IVAS_DEC_HANDLE *phIvasDec, int16_t *pcmBuf );
static ivas_error load_hrtf_from_file( IVAS_DEC_HRTF_BINARY_WRAPPER *hHrtfBinary, IVAS_DEC_HANDLE hIvasDec, const IVAS_AUDIO_CONFIG OutputConfig, const int32_t output_Fs );
#ifdef DEBUGGING
@@ -779,7 +783,11 @@ int main(
    }
    else
    {
#ifdef FIX_FLOAT_1539_G192_FORMAT_SWITCH
        error = decodeG192( arg, hBsReader, &hHrtfBinary, headRotReader, externalOrientationFileReader, refRotReader, referenceVectorReader, objectEditFileReader, &splitRendBits, &hIvasDec, pcmBuf );
#else
        error = decodeG192( arg, hBsReader, &hHrtfBinary, headRotReader, externalOrientationFileReader, refRotReader, referenceVectorReader, objectEditFileReader, &splitRendBits, hIvasDec, pcmBuf );
#endif
    }

    if ( error == IVAS_ERR_OK || error == IVAS_ERR_END_OF_FILE )
@@ -2232,7 +2240,11 @@ static ivas_error decodeG192(
    Vector3PairFileReader *referenceVectorReader,
    ObjectEditFileReader *objectEditFileReader,
    ISAR_SPLIT_REND_BITS_DATA *splitRendBits,
#ifdef FIX_FLOAT_1539_G192_FORMAT_SWITCH
    IVAS_DEC_HANDLE *phIvasDec,
#else
    IVAS_DEC_HANDLE hIvasDec,
#endif
    int16_t *pcmBuf )

{
@@ -2240,6 +2252,9 @@ static ivas_error decodeG192(
    uint16_t bit_stream[IVAS_MAX_BITS_PER_FRAME + 4 * 8];
    int16_t i, num_bits;
    int16_t bfi = 0;
#ifdef FIX_FLOAT_1539_G192_FORMAT_SWITCH
    IVAS_DEC_HANDLE hIvasDec = *phIvasDec;
#endif
#ifdef DEBUGGING
    int16_t fec_seed = 12558; /* FEC_SEED */
#endif
@@ -2270,6 +2285,9 @@ static ivas_error decodeG192(
    int16_t vec_pos_update, vec_pos_len;
    SplitFileReadWrite *splitRendWriter = NULL;
    int16_t isSplitRend, isSplitCoded;
#ifdef FIX_FLOAT_1539_G192_FORMAT_SWITCH
    bool restartNeeded;
#endif

#ifdef VARIABLE_SPEED_DECODING
    if ( arg.tsmEnabled )
@@ -2601,6 +2619,37 @@ static ivas_error decodeG192(
                    return error;
                }

#ifdef FIX_FLOAT_1539_G192_FORMAT_SWITCH
                if ( ( error = IVAS_DEC_isRestartNeeded( hIvasDec, &restartNeeded ) ) != IVAS_ERR_OK )
                {
                    return error;
                }

                if ( restartNeeded )
                {
                    IVAS_DEC_BS_FORMAT tempFormat;
                    if ( ( error = IVAS_DEC_GetFormat( hIvasDec, &tempFormat ) ) != IVAS_ERR_OK )
                    {
                        fprintf( stderr, "\nError in IVAS_DEC_GetFormat, code: %d\n", error );
                        goto cleanup;
                    }
                    IVAS_DEC_MODE codecMode = ( tempFormat == IVAS_DEC_BS_MONO ) ? IVAS_DEC_MODE_EVS : IVAS_DEC_MODE_IVAS;
                    error = restartDecoder(
                        &hIvasDec,
                        codecMode,
                        &arg,
                        NULL, /* ToDo : Provide rendererConfig */
                        NULL  /* ToDo : Provide LS Custom Data */
                    );
                    if ( error != IVAS_ERR_OK )
                    {
                        fprintf( stderr, "\nFailed to restart decoder\n" );
                        goto cleanup;
                    }
                    *phIvasDec = hIvasDec; /* Update for main()' s free */
                }
#endif

                /* Placeholder for memory reallocation */
                /* ... */

+10 −0
Original line number Diff line number Diff line
@@ -385,7 +385,17 @@ void ivas_get_dirac_sba_max_md_bits(
        *metadata_max_bits = MAX16B; /* no limit */
    }

#ifdef FIX_FLOAT_1544_SBA_META_IMPRECISION_UNSAFE_MATH
    /*
      original formula was:
      *metadata_max_bits = (int16_t) min( (float) MAX16B, ceilf( (float) *metadata_max_bits * nbands / 5 ) );
      The division by 5 is replaced by a multiplication by 0.2f, since the division is causing problems for
      certain optimizations using -funsafe-math-optimizations
    */
    *metadata_max_bits = (int16_t) min( (float) MAX16B, ceilf( *metadata_max_bits * nbands * 0.2f ) );
#else
    *metadata_max_bits = (int16_t) min( (float) MAX16B, ceilf( (float) *metadata_max_bits * nbands / 5 ) );
#endif
    *qmetadata_max_bit_req = QMETADATA_MAXBIT_REQ_SBA >> 1;

    return;
+7 −0
Original line number Diff line number Diff line
@@ -162,6 +162,11 @@
#define TMP_1342_WORKAROUND_DEC_FLUSH_BROKEN_IN_SR      /* FhG: Temporary workaround for incorrect implementation of decoder flush with split rendering */
#define NONBE_1122_KEEP_EVS_MODE_UNCHANGED              /* FhG: Disables fix for issue 1122 in EVS mode to keep BE tests green. This switch should be removed once the 1122 fix is added to EVS via a CR.  */
#define FIX_BASOP_2469_OBJ_EDIT_TD_REND_GAIN            /* Eri: Basop issue 2469: TD renderer gain has wrong Q. In float this is just a synch of the cleanup done in BASOP */
#define FIX_ISSUE_1546_DEAD_CODE                        /* FhG: remove dead code reported in the issue*/
#define FIX_FLOAT_1544_SBA_META_IMPRECISION_UNSAFE_MATH /* FhG: float issue 1544: imprecision in ivas_get_dirac_sba_max_md_bits() with -funsafe-math-optimizations */
#define FIX_FLOAT_1544_ITD_IMPRECISION_UNSAFE_MATH      /* FhG: float issue 1544: Avoid assert() with -funsafe-math-optimizations in stereo_td_itd() */
#define FIX_FLOAT_1539_G192_FORMAT_SWITCH               /* Nokia: reintroduce format switching for g192 bitstreams */
#define FIX_1527_CMR_BITRATE_IDX                        /* Fix for incorrect bitrate idx packed in rtp CMR E-byte */

/* #################### End BE switches ################################## */

@@ -171,6 +176,8 @@
#define FIX_1543_MID_LSF_BITS                           /* VA: float issue 1543: Resolve "MSAN: use-of-uninitialized-value in lib_enc/lsf_enc.c:262:5 for EVS encoder" */
#define FIX_1547_ISMDTX_HANDLE                          /* VA: float issue 1547: fix use of 'hISMDTX' handle */
#define FIX_1540_EXPOSE_PT_IN_RTP_HEADER_API            /* Expose Payload Type setting in RTP Header */
#define FIX_1563_FIX_STEREO_SW                          /* VA: float issue 1563: fix clicks in stereo switching */
#define FIX_1562_DTX_CRASH_DECODER                      /* VA: float issue 1562: fix crash in stereo decoding in DTX and bitrate switching */
#define FIX_1576_LCLD_CRASH_DIFFERENT_CODEC_ISAR_FRAME_SIZE  /* Dolby: float issue 1576: fix for crash in LCLD mode when codec frame size is less than isar frame size */

/* ##################### End NON-BE switches ########################### */
+4 −0
Original line number Diff line number Diff line
@@ -315,7 +315,11 @@ ivas_error acelp_core_dec(
    {
        int16_t dec;

#ifdef FIX_1562_DTX_CRASH_DECODER
        if ( st->hPFstat != NULL && st->hPFstat->on != 0 )
#else
        if ( st->hPFstat->on != 0 )
#endif
        {
            int16_t mem_syn_r_size_old, mem_syn_r_size_new;

+53 −0
Original line number Diff line number Diff line
@@ -106,7 +106,9 @@ ivas_error ivas_dec_get_format(
    int16_t nchan_ism, element_mode_flag;
    int16_t sba_order, sba_planar, sba_analysis_order;
    int32_t ivas_total_brate;
#ifndef FIX_FLOAT_1539_G192_FORMAT_SWITCH
    int16_t Opt_tsm;
#endif
    uint16_t *bit_stream_orig;
    AUDIO_CONFIG signaled_config;
    ivas_error error;
@@ -115,7 +117,9 @@ ivas_error ivas_dec_get_format(
    element_mode_flag = 0;

    ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate;
#ifndef FIX_FLOAT_1539_G192_FORMAT_SWITCH
    Opt_tsm = st_ivas->hDecoderConfig->Opt_tsm;
#endif
    bit_stream_orig = st_ivas->bit_stream;

    /*-------------------------------------------------------------------*
@@ -131,11 +135,14 @@ ivas_error ivas_dec_get_format(
         !( st_ivas->ivas_format == MASA_FORMAT && st_ivas->last_ivas_format == MASA_ISM_FORMAT ) &&
         !( st_ivas->ivas_format == MASA_ISM_FORMAT && st_ivas->last_ivas_format == MASA_FORMAT ) )
    {
#ifndef FIX_FLOAT_1539_G192_FORMAT_SWITCH
        if ( Opt_tsm )
        {
#endif
            st_ivas->restartNeeded = 1;

            return IVAS_ERR_OK;
#ifndef FIX_FLOAT_1539_G192_FORMAT_SWITCH
        }
        else
        {
@@ -144,6 +151,7 @@ ivas_error ivas_dec_get_format(
#endif
            return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Wrong number of objects signalled!" );
        }
#endif
    }

    /*-------------------------------------------------------------------*
@@ -177,11 +185,14 @@ ivas_error ivas_dec_get_format(

            if ( st_ivas->ini_frame > 0 && nchan_ism != st_ivas->nchan_ism )
            {
#ifndef FIX_FLOAT_1539_G192_FORMAT_SWITCH
                if ( Opt_tsm )
                {
#endif
                    st_ivas->restartNeeded = 1;

                    return IVAS_ERR_OK;
#ifndef FIX_FLOAT_1539_G192_FORMAT_SWITCH
                }
                else
                {
@@ -190,6 +201,7 @@ ivas_error ivas_dec_get_format(
#endif
                    return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Wrong number of objects signalled!" );
                }
#endif
            }

            st_ivas->nchan_ism = nchan_ism;
@@ -209,10 +221,14 @@ ivas_error ivas_dec_get_format(

            if ( st_ivas->ini_frame > 0 && sba_planar != st_ivas->sba_planar )
            {
#ifndef FIX_FLOAT_1539_G192_FORMAT_SWITCH
                if ( Opt_tsm )
                {
#endif
                    st_ivas->restartNeeded = 1;

                    return IVAS_ERR_OK;
#ifndef FIX_FLOAT_1539_G192_FORMAT_SWITCH
                }
                else
                {
@@ -221,6 +237,7 @@ ivas_error ivas_dec_get_format(
#endif
                    return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Wrong SBA planar flag signalled!" );
                }
#endif
            }

            /* read Ambisonic (SBA) order */
@@ -229,11 +246,14 @@ ivas_error ivas_dec_get_format(

            if ( st_ivas->ini_frame > 0 && sba_order != st_ivas->sba_order )
            {
#ifndef FIX_FLOAT_1539_G192_FORMAT_SWITCH
                if ( Opt_tsm )
                {
#endif
                    st_ivas->restartNeeded = 1;

                    return IVAS_ERR_OK;
#ifndef FIX_FLOAT_1539_G192_FORMAT_SWITCH
                }
                else
                {
@@ -242,6 +262,7 @@ ivas_error ivas_dec_get_format(
#endif
                    return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Wrong SBA order signalled!" );
                }
#endif
            }

            sba_analysis_order = ivas_sba_get_analysis_order( ivas_total_brate, sba_order );
@@ -254,7 +275,11 @@ ivas_error ivas_dec_get_format(
            /* read number of MASA transport channels */
            if ( st_ivas->bit_stream[( ivas_total_brate / FRAMES_PER_SEC ) - 1] )
            {
#ifdef FIX_FLOAT_1539_G192_FORMAT_SWITCH
                if ( st_ivas->nchan_transport == 1 )
#else
                if ( st_ivas->nchan_transport == 1 && Opt_tsm )
#endif
                {
                    masaRestartCandidate = 1;
                }
@@ -264,7 +289,11 @@ ivas_error ivas_dec_get_format(
            }
            else
            {
#ifdef FIX_FLOAT_1539_G192_FORMAT_SWITCH
                if ( st_ivas->nchan_transport == 2 )
#else
                if ( st_ivas->nchan_transport == 2 && Opt_tsm )
#endif
                {
                    masaRestartCandidate = 1;
                }
@@ -305,11 +334,14 @@ ivas_error ivas_dec_get_format(

            if ( st_ivas->ini_frame > 0 && nchan_ism != st_ivas->nchan_ism )
            {
#ifndef FIX_FLOAT_1539_G192_FORMAT_SWITCH
                if ( Opt_tsm )
                {
#endif
                    st_ivas->restartNeeded = 1;

                    return IVAS_ERR_OK;
#ifndef FIX_FLOAT_1539_G192_FORMAT_SWITCH
                }
                else
                {
@@ -318,6 +350,7 @@ ivas_error ivas_dec_get_format(
#endif
                    return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Wrong number of objects signalled!" );
                }
#endif
            }

            st_ivas->nchan_ism = nchan_ism;
@@ -332,11 +365,14 @@ ivas_error ivas_dec_get_format(

            if ( st_ivas->ini_frame > 0 && nchan_ism != st_ivas->nchan_ism )
            {
#ifndef FIX_FLOAT_1539_G192_FORMAT_SWITCH
                if ( Opt_tsm )
                {
#endif
                    st_ivas->restartNeeded = 1;

                    return IVAS_ERR_OK;
#ifndef FIX_FLOAT_1539_G192_FORMAT_SWITCH
                }
                else
                {
@@ -345,6 +381,7 @@ ivas_error ivas_dec_get_format(
#endif
                    return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Wrong number of objects signalled!" );
                }
#endif
            }

            st_ivas->nchan_ism = nchan_ism;
@@ -356,11 +393,14 @@ ivas_error ivas_dec_get_format(

            if ( st_ivas->ini_frame > 0 && nchan_ism != st_ivas->nchan_ism )
            {
#ifndef FIX_FLOAT_1539_G192_FORMAT_SWITCH
                if ( Opt_tsm )
                {
#endif
                    st_ivas->restartNeeded = 1;

                    return IVAS_ERR_OK;
#ifndef FIX_FLOAT_1539_G192_FORMAT_SWITCH
                }
                else
                {
@@ -369,6 +409,7 @@ ivas_error ivas_dec_get_format(
#endif
                    return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Wrong number of objects signalled!" );
                }
#endif
            }

            st_ivas->nchan_ism = nchan_ism;
@@ -392,11 +433,14 @@ ivas_error ivas_dec_get_format(

            if ( st_ivas->ini_frame > 0 && sba_order != st_ivas->sba_order )
            {
#ifndef FIX_FLOAT_1539_G192_FORMAT_SWITCH
                if ( Opt_tsm )
                {
#endif
                    st_ivas->restartNeeded = 1;

                    return IVAS_ERR_OK;
#ifndef FIX_FLOAT_1539_G192_FORMAT_SWITCH
                }
                else
                {
@@ -405,6 +449,7 @@ ivas_error ivas_dec_get_format(
#endif
                    return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Wrong SBA order signalled!" );
                }
#endif
            }

            st_ivas->ism_mode = ivas_osba_ism_mode_select( ivas_total_brate, st_ivas->nchan_ism );
@@ -429,11 +474,14 @@ ivas_error ivas_dec_get_format(

            if ( st_ivas->ini_frame > 0 && st_ivas->transport_config != signaled_config )
            {
#ifndef FIX_FLOAT_1539_G192_FORMAT_SWITCH
                if ( Opt_tsm )
                {
#endif
                    st_ivas->restartNeeded = 1;

                    return IVAS_ERR_OK;
#ifndef FIX_FLOAT_1539_G192_FORMAT_SWITCH
                }
                else
                {
@@ -442,6 +490,7 @@ ivas_error ivas_dec_get_format(
#endif
                    return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "wrong MC configuration signalled!" );
                }
#endif
            }

            st_ivas->mc_mode = ivas_mc_mode_select( ivas_mc_map_output_config_to_mc_ls_setup( signaled_config ), ivas_total_brate );
@@ -523,11 +572,14 @@ ivas_error ivas_dec_get_format(

            if ( st_ivas->ini_frame > 0 && nchan_ism != st_ivas->nchan_ism )
            {
#ifndef FIX_FLOAT_1539_G192_FORMAT_SWITCH
                if ( Opt_tsm )
                {
#endif
                    st_ivas->restartNeeded = 1;

                    return IVAS_ERR_OK;
#ifndef FIX_FLOAT_1539_G192_FORMAT_SWITCH
                }
                else
                {
@@ -536,6 +588,7 @@ ivas_error ivas_dec_get_format(
#endif
                    return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Wrong number of objects signalled!" );
                }
#endif
            }

            st_ivas->nchan_ism = nchan_ism;
Loading