Commit eeddc25f authored by Lauros Pajunen's avatar Lauros Pajunen
Browse files

Merge branch...

Merge branch '350-masa-audio-and-meta-out-of-sync-in-decoder-when-delay-compensation-is-disabled' into 'main'

[non-BE] Resolve "MASA audio and meta out-of-sync in decoder when delay compensation is disabled"

See merge request !453
parents e2d0547f 5e5651de
Loading
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -1297,15 +1297,24 @@ static ivas_error initOnFirstGoodFrame(
        /* If outputting MASA, open output file and write metadata for initial bad frames */
        else if ( *pBsFormat == IVAS_DEC_BS_MASA )
        {
#ifdef FIX_350_MASA_DELAY_COMP
            if ( ( error = MasaFileWriter_open( arg.outputWavFilename, arg.delayCompensationEnabled, ppMasaWriter ) ) != IVAS_ERR_OK )
#else
            if ( ( error = MasaFileWriter_open( arg.outputWavFilename, ppMasaWriter ) ) != IVAS_ERR_OK )
#endif
            {
                fprintf( stderr, "\nError: Error opening MASA decoded metadata file %s\n", MasaFileWriter_getFilePath( *ppMasaWriter ) );
                return error;
            }

            /* Duplicate good first frame metadata to fill the beginning of stream. */
#ifdef FIX_350_MASA_DELAY_COMP
            MASA_DECODER_EXT_OUT_META_HANDLE hMasaExtOutMeta = NULL;
            if ( ( error = IVAS_DEC_GetMasaMetadata( hIvasDec, &hMasaExtOutMeta ) ) != IVAS_ERR_OK )
#else
            IVAS_MASA_QMETADATA_HANDLE qMetadata = NULL;
            if ( ( error = IVAS_DEC_GetMasaMetadata( hIvasDec, &qMetadata ) ) != IVAS_ERR_OK )
#endif
            {
                fprintf( stderr, "\nError in IVAS_DEC_GetMasaMetadata: %s\n", IVAS_DEC_GetErrorMessage( error ) );
                return error;
@@ -1313,7 +1322,11 @@ static ivas_error initOnFirstGoodFrame(

            for ( int16_t j = 0; j < numInitialBadFrames; ++j )
            {
#ifdef FIX_350_MASA_DELAY_COMP
                if ( ( error = MasaFileWriter_writeFrame( *ppMasaWriter, hMasaExtOutMeta ) ) != IVAS_ERR_OK )
#else
                if ( ( error = MasaFileWriter_writeFrame( *ppMasaWriter, qMetadata ) ) != IVAS_ERR_OK )
#endif
                {
                    fprintf( stderr, "\nError writing MASA metadata to file: %s\n", MasaFileWriter_getFilePath( *ppMasaWriter ) );
                    return error;
@@ -1546,14 +1559,23 @@ static ivas_error decodeG192(
            }
            else if ( bsFormat == IVAS_DEC_BS_MASA )
            {
#ifdef FIX_350_MASA_DELAY_COMP
                MASA_DECODER_EXT_OUT_META_HANDLE hMasaExtOutMeta;
                if ( ( error = IVAS_DEC_GetMasaMetadata( hIvasDec, &hMasaExtOutMeta ) ) != IVAS_ERR_OK )
#else
                IVAS_MASA_QMETADATA_HANDLE qMetadata;
                if ( ( error = IVAS_DEC_GetMasaMetadata( hIvasDec, &qMetadata ) ) != IVAS_ERR_OK )
#endif
                {
                    fprintf( stderr, "\nError in IVAS_DEC_GetMasaMetadata: %s\n", IVAS_DEC_GetErrorMessage( error ) );
                    goto cleanup;
                }

#ifdef FIX_350_MASA_DELAY_COMP
                if ( ( error = MasaFileWriter_writeFrame( masaWriter, hMasaExtOutMeta ) ) != IVAS_ERR_OK )
#else
                if ( ( error = MasaFileWriter_writeFrame( masaWriter, qMetadata ) ) != IVAS_ERR_OK )
#endif
                {
                    fprintf( stderr, "\nError writing MASA metadata to file: %s\n", MasaFileWriter_getFilePath( masaWriter ) );
                    goto cleanup;
+4 −0
Original line number Diff line number Diff line
@@ -87,7 +87,11 @@ typedef struct
} IVAS_QUATERNION;

typedef struct ivas_masa_metadata_frame_struct *IVAS_MASA_METADATA_HANDLE;
#ifdef FIX_350_MASA_DELAY_COMP
typedef struct ivas_masa_decoder_ext_out_meta_struct *MASA_DECODER_EXT_OUT_META_HANDLE;
#else
typedef struct ivas_masa_qmetadata_frame_struct *IVAS_MASA_QMETADATA_HANDLE;
#endif

typedef struct TDREND_HRFILT_FiltSet_struct *IVAS_DEC_HRTF_HANDLE;
typedef struct ivas_hrtfs_crend_structure *IVAS_DEC_HRTF_CREND_HANDLE;
+14 −0
Original line number Diff line number Diff line
@@ -72,6 +72,13 @@ int32_t get_delay(
        else /* IVAS */
        {
            delay = IVAS_ENC_DELAY_NS;

#ifdef FIX_350_MASA_DELAY_COMP
            if ( ivas_format == MASA_FORMAT )
            {
                delay = 0; /* All delay is compensated in the decoder with MASA */
            }
#endif
        }

        if ( ivas_format == SBA_FORMAT )
@@ -107,6 +114,13 @@ int32_t get_delay(
            /* compensate for binauralization delay */
            delay += binaural_latency_ns;
#endif

#ifdef FIX_350_MASA_DELAY_COMP
            if ( ivas_format == MASA_FORMAT )
            {
                delay += IVAS_ENC_DELAY_NS; /* Compensate also the encoder delay in the decoder with MASA */
            }
#endif
        }
    }

+8 −0
Original line number Diff line number Diff line
@@ -931,6 +931,10 @@ typedef enum
#define DELAY_DIRAC_SPAR_ENC_CMP_NS             500000L                    /* here we may set the 24 samples (at 48 kHz) additional delay to something else, leave as is for now*/       
#define DELAY_DIRAC_PARAM_DEC_SFR               2                           /* Delay to be compensation for DirAC parameters in the decoder (subframes) */

#ifdef FIX_350_MASA_DELAY_COMP
#define DELAY_MASA_PARAM_DEC_SFR                2                           /* Delay to be compensation for MASA parameters in the decoder (subframes) */
#endif

#define DIRAC_SLOT_NS                           1250000L                    /* time duration of a time slot, 1.25ms (==DELAY_RENERER_NS/MAX_PARAM_SPATIAL_SUBFRAMES) */
#define DIRAC_SLOT_ENC_NS                       5000000L

@@ -1100,7 +1104,11 @@ enum
#define MASA_MAXIMUM_CODING_SUBBANDS            24
#define MASA_MAXIMUM_DIRECTIONS                 2
#define MASA_MAX_TRANSPORT_CHANNELS             2

#ifndef FIX_350_MASA_DELAY_COMP
#define MASA_ENC_DELAY_SLOTS                    7
#endif

#define MASA_NUM_DEFINED_SUR_SPR_COH_ENE_BINS   5

#define MASA_DELTA_AZI_DCT0                     30
+4 −1
Original line number Diff line number Diff line
@@ -4436,9 +4436,12 @@ ivas_error ivas_masa_enc_open(
);

void ivas_masa_enc_close(
    MASA_ENCODER_HANDLE hMasa,                                  /* i/o: MASA metadata structure                         */
    MASA_ENCODER_HANDLE hMasa                                  /* i/o: MASA metadata structure                         */
 #ifndef FIX_350_MASA_DELAY_COMP
    ,
    const int16_t nchan_transport,                              /* i  : Number of transport channels                    */
    const IVAS_FORMAT ivas_format                               /* i  : IVAS format                                     */
 #endif
);

void ivas_masa_enc_reconfigure(
Loading