Commit 543c4018 authored by sagnowski's avatar sagnowski
Browse files

Port C changes

parent 5d8d12e3
Loading
Loading
Loading
Loading
+117 −4
Original line number Diff line number Diff line
@@ -171,7 +171,11 @@ typedef struct
static bool parseCmdlIVAS_dec( int16_t argc, char **argv, DecArguments *arg );
static void usage_dec( void );
static ivas_error decodeG192( 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_DEC_HANDLE hIvasDec, int16_t *pcmBuf );
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, IVAS_DEC_HANDLE hIvasDec, int16_t *pcmBuf );
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, 
#ifdef FIX_1119_SPLIT_RENDERING_VOIP
        ISAR_SPLIT_REND_BITS_DATA *splitRendBits,
#endif
        IVAS_DEC_HANDLE hIvasDec, 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
static ivas_error printBitstreamInfoVoip( DecArguments arg, BS_READER_HANDLE hBsReader, IVAS_DEC_HANDLE hIvasDec );
@@ -756,7 +760,11 @@ int main(

    if ( arg.voipMode )
    {
        error = decodeVoIP( arg, hBsReader, &hHrtfBinary, headRotReader, externalOrientationFileReader, refRotReader, referenceVectorReader, objectEditFileReader, hIvasDec, pcmBuf );
        error = decodeVoIP( arg, hBsReader, &hHrtfBinary, headRotReader, externalOrientationFileReader, refRotReader, referenceVectorReader, objectEditFileReader,
#ifdef FIX_1119_SPLIT_RENDERING_VOIP
               &splitRendBits, 
#endif
               hIvasDec, pcmBuf );
    }
    else
    {
@@ -1872,7 +1880,11 @@ static ivas_error initOnFirstGoodFrame(

    for ( int16_t i = 0; i < numInitialBadFrames; ++i )
    {
#ifdef FIX_1119_SPLIT_RENDERING_VOIP
        if ( isSplitRend )
#else
        if ( *splitRendWriter != NULL )
#endif
        {
            ISAR_SPLIT_REND_BITS_DATA splitRendBitsZero;
            splitRendBitsZero.bits_buf = NULL;
@@ -1890,7 +1902,12 @@ static ivas_error initOnFirstGoodFrame(
                return error;
            }
        }

#ifdef FIX_1119_SPLIT_RENDERING_VOIP
        if ( !isSplitCoded )
#else
        else
#endif
        {

            if ( *pRemainingDelayNumSamples < *numOutSamples )
@@ -2098,6 +2115,14 @@ static ivas_error decodeG192(
        return error;
    }

#ifdef FIX_1119_SPLIT_RENDERING_VOIP
    if ( !isSplitRend )
    {
        /* Ensure split rendering output struct is not used when not outputting to a split rendering format */
        splitRendBits = NULL;
    }
#endif

    if ( ( error = IVAS_DEC_is_split_rendering_coded_out( hIvasDec, &isSplitCoded ) ) != IVAS_ERR_OK )
    {
        fprintf( stderr, "\nError in IVAS_DEC_is_split_rendering_coded_out, code: %d\n", error );
@@ -2433,7 +2458,11 @@ static ivas_error decodeG192(
                }

                /* decode transport channels, do TSM and feed to renderer */
                if ( ( error = IVAS_DEC_GetSamplesDecoder( hIvasDec, isSplitRend, splitRendBits ) ) != IVAS_ERR_OK )
                if ( ( error = IVAS_DEC_GetSamplesDecoder( hIvasDec,
#ifndef FIX_1119_SPLIT_RENDERING_VOIP
                                isSplitRend,
#endif
                                splitRendBits ) ) != IVAS_ERR_OK )
                {
                    return error;
                }
@@ -2984,6 +3013,9 @@ static ivas_error decodeVoIP(
    RotFileReader *refRotReader,
    Vector3PairFileReader *referenceVectorReader,
    ObjectEditFileReader *objectEditFileReader,
#ifdef FIX_1119_SPLIT_RENDERING_VOIP
    ISAR_SPLIT_REND_BITS_DATA *splitRendBits,
#endif
    IVAS_DEC_HANDLE hIvasDec,
    int16_t *pcmBuf )
{
@@ -3035,6 +3067,29 @@ static ivas_error decodeVoIP(
    bool parametersAvailableForEditing = false;
    uint16_t nSamplesRendered = 0;

#ifdef FIX_1119_SPLIT_RENDERING_VOIP
    SplitFileReadWrite *splitRendWriter = NULL;
    int16_t isSplitRend, isSplitCoded;

    if ( ( error = IVAS_DEC_is_split_rendering_enabled( hIvasDec, &isSplitRend ) ) != IVAS_ERR_OK )
    {
        fprintf( stderr, "\nError in IVAS_DEC_is_split_rendering_enabled, code: %d\n", error );
        return error;
    }

    if ( !isSplitRend )
    {
        /* Ensure split rendering output struct is not used when not outputting to a split rendering format */
        splitRendBits = NULL;
    }

    if ( ( error = IVAS_DEC_is_split_rendering_coded_out( hIvasDec, &isSplitCoded ) ) != IVAS_ERR_OK )
    {
        fprintf( stderr, "\nError in IVAS_DEC_is_split_rendering_coded_out, code: %d\n", error );
        return error;
    }
#endif

    vec_pos_update = 0;
    if ( ( error = IVAS_DEC_GetRenderFramesizeMs( hIvasDec, &systemTimeInc_ms ) ) != IVAS_ERR_OK )
    {
@@ -3325,6 +3380,27 @@ static ivas_error decodeVoIP(
        /* decode and get samples */
        while ( nSamplesRendered < nOutSamples )
        {
#ifdef FIX_1119_SPLIT_RENDERING_VOIP
        if ( isSplitRend )
        {
            if ( ( error = IVAS_DEC_VoIP_GetSplitBinauralBitstream( hIvasDec, (void *) pcmBuf, splitRendBits,
#ifdef SUPPORT_JBM_TRACEFILE
                                                                    writeJbmTraceFileFrameWrapper,
                                                                    jbmTraceWriter,
#endif
	                                                                &bitstreamReadDone,
                                                                    &nSamplesRendered,
                                                                    &parametersAvailableForEditing,
                                                                    systemTime_ms
                                                                   ) ) != IVAS_ERR_OK )
            {
                fprintf( stderr, "\nError in IVAS_DEC_VoIP_GetSplitBinauralBitstream: %s\n", IVAS_DEC_GetErrorMessage( error ) );
                goto cleanup;
            }
        }
        else
        {
#endif
#ifdef SUPPORT_JBM_TRACEFILE
            if ( ( error = IVAS_DEC_VoIP_GetSamples( hIvasDec, nOutSamples, IVAS_DEC_PCM_INT16, (void *) pcmBuf, writeJbmTraceFileFrameWrapper, jbmTraceWriter, &bitstreamReadDone, &nSamplesRendered, &parametersAvailableForEditing, systemTime_ms ) ) != IVAS_ERR_OK )
#else
@@ -3334,6 +3410,9 @@ static ivas_error decodeVoIP(
                fprintf( stderr, "\nError in IVAS_DEC_VoIP_GetSamples: %s\n", IVAS_DEC_GetErrorMessage( error ) );
                goto cleanup;
            }
#ifdef FIX_1119_SPLIT_RENDERING_VOIP
        }
#endif

            if ( bitstreamReadDone == true )
            {
@@ -3413,9 +3492,17 @@ static ivas_error decodeVoIP(
            /* Once good frame decoded, catch up */
            if ( decodedGoodFrame )
            {
#ifndef FIX_1119_SPLIT_RENDERING_VOIP
                SplitFileReadWrite *splitRendWriter = NULL;
#endif

                if ( ( error = initOnFirstGoodFrame( hIvasDec, arg, numInitialBadFrames, &nOutSamples, NULL, delayNumSamples_orig, &delayNumSamples, &delayTimeScale,
                if ( ( error = initOnFirstGoodFrame( hIvasDec, arg, numInitialBadFrames, &nOutSamples,
#ifdef FIX_1119_SPLIT_RENDERING_VOIP
                                                    &vec_pos_len,
#else
                                                    NULL, 
#endif
                                delayNumSamples_orig, &delayNumSamples, &delayTimeScale,
                                                     &bsFormat, &afWriter, &masaWriter, ismWriters, &nOutChannels, &numObj, &splitRendWriter ) ) != IVAS_ERR_OK )
                {
                    fprintf( stderr, "Error in initOnFirstGoodFrame(): %s\n", IVAS_DEC_GetErrorMessage( error ) );
@@ -3431,6 +3518,18 @@ static ivas_error decodeVoIP(
        /* Write current frame */
        if ( decodedGoodFrame )
        {
#ifdef FIX_1119_SPLIT_RENDERING_VOIP
            if ( isSplitRend )
            {
                if ( split_rend_write_bitstream_to_file( splitRendWriter, splitRendBits->bits_buf, &splitRendBits->bits_read, &splitRendBits->bits_written ) != IVAS_ERR_OK )
                {
                    fprintf( stderr, "\nUnable to write to bitstream file!\n" );
                    goto cleanup;
                }
            }
            if ( !isSplitCoded )
            {
#endif
            if ( delayNumSamples < nOutSamples )
            {
                if ( ( error = AudioFileWriter_write( afWriter, &pcmBuf[delayNumSamples * nOutChannels], nOutSamples * nOutChannels - ( delayNumSamples * nOutChannels ) ) ) != IVAS_ERR_OK )
@@ -3444,6 +3543,9 @@ static ivas_error decodeVoIP(
            {
                delayNumSamples -= nOutSamples;
            }
#ifdef FIX_1119_SPLIT_RENDERING_VOIP
            }
#endif

            /* Write ISM metadata to external file(s) */
            if ( decodedGoodFrame && arg.outputConfig == IVAS_AUDIO_CONFIG_EXTERNAL )
@@ -3602,11 +3704,19 @@ static ivas_error decodeVoIP(
     *------------------------------------------------------------------------------------------*/

    memset( pcmBuf, 0, delayNumSamples_orig[0] * nOutChannels * sizeof( int16_t ) );

#ifdef FIX_1119_SPLIT_RENDERING_VOIP
    if ( afWriter != NULL)
    {
#endif
    if ( ( error = AudioFileWriter_write( afWriter, pcmBuf, delayNumSamples_orig[0] * nOutChannels ) ) != IVAS_ERR_OK )
    {
        fprintf( stderr, "\nError writing output file: %s\n", ivas_error_to_string( error ) );
        goto cleanup;
    }
#ifdef FIX_1119_SPLIT_RENDERING_VOIP
    }
#endif

    /*------------------------------------------------------------------------------------------*
     * Printouts after decoding has finished
@@ -3651,6 +3761,9 @@ cleanup:

    EVS_RTPDUMP_DEPACKER_close( &rtpdumpDepacker );
    AudioFileWriter_close( &afWriter );
#ifdef FIX_1119_SPLIT_RENDERING_VOIP
    split_rend_reader_writer_close( &splitRendWriter );
#endif
    JbmOffsetFileWriter_close( &jbmOffsetWriter );
#ifdef SUPPORT_JBM_TRACEFILE
    JbmTraceFileWriter_close( &jbmTraceWriter );
+10 −0
Original line number Diff line number Diff line
@@ -1103,6 +1103,16 @@ int main(
                    fprintf( stderr, "\nISAR_POST_REND_FeedSplitBinauralBitstream failed: %s\n", ivas_error_to_string( error ) );
                    goto cleanup;
                }

#ifdef FIX_1119_SPLIT_RENDERING_VOIP
                /* Set BFI if frame is empty */
                int16_t frameEmpty = (int16_t) ( bitsBuffer.config.bitsWritten == 0 );
                if ( ( error = ISAR_POST_REND_SetSplitRendBFI( hIsarPostRend, frameEmpty ) ) != IVAS_ERR_OK )
                {
                    fprintf( stderr, "Error in ISAR_POST_REND_SetSplitRendBFI(): %s\n", ivas_error_to_string( error ) );
                    goto cleanup;
                }
#endif
            }
        }

+1 −1
Original line number Diff line number Diff line
@@ -159,8 +159,8 @@
/* only BE switches wrt selection floating point code */

/*#define FIX_I4_OL_PITCH*/                             /* fix open-loop pitch used for EVS core switching */
#define TMP_FIX_1119_SPLIT_RENDERING_VOIP               /* FhG: Add error check for unsupported config: split rendering with VoIP mode */
#define UNIFIED_DECODING_PATHS_LEFTOVERS                /* VA: issue 880: remove leftovers after NONBE_UNIFIED_DECODING_PATHS */
#define FIX_1119_SPLIT_RENDERING_VOIP                   /* FhG: Add split rendering support to decoder in VoIP mode */


/* #################### End BE switches ################################## */
+488 −12

File changed.

Preview size limit exceeded, changes collapsed.

+21 −0
Original line number Diff line number Diff line
@@ -162,7 +162,9 @@ ivas_error IVAS_DEC_ReadFormat(
/*! r: decoder error code */
ivas_error IVAS_DEC_GetSamplesDecoder(
    IVAS_DEC_HANDLE hIvasDec,                   /* i/o: IVAS decoder handle                                                     */
#ifndef FIX_1119_SPLIT_RENDERING_VOIP
    const int16_t isSplitRend,                  /* i  : split rendering enabled flag                                            */
#endif
    ISAR_SPLIT_REND_BITS_DATA *splitRendBits    /* o  : output split rendering bits                                             */
);

@@ -321,6 +323,25 @@ ivas_error IVAS_DEC_VoIP_GetSamples(
    const uint32_t systemTimestamp_ms           /* i  : current system timestamp                                                */
);

#ifdef FIX_1119_SPLIT_RENDERING_VOIP
/*! r: error code */
ivas_error IVAS_DEC_VoIP_GetSplitBinauralBitstream(
    IVAS_DEC_HANDLE hIvasDec,                   /* i/o: IVAS decoder handle                                                     */
    /* const IVAS_DEC_PCM_TYPE pcmType, */      /* i  : type for the decoded PCM resolution                                     */
    void *pcmBuf,                               /* o  : output synthesis signal                                                 */
    ISAR_SPLIT_REND_BITS_DATA *splitRendBits,   /* o  : output split rendering bits                                             */
#ifdef SUPPORT_JBM_TRACEFILE
    JbmTraceFileWriterFn jbmWriterFn,
    void* jbmWriter
#endif
    ,
    bool *bitstreamReadDone,                    /* o  : flag indicating that bitstream was read                                 */
    uint16_t *nSamplesRendered,
    bool *parametersAvailableForEditing,
    const uint32_t systemTimestamp_ms           /* i  : current system timestamp                                                */
);
#endif

ivas_error IVAS_DEC_Flush(
    IVAS_DEC_HANDLE hIvasDec,                   /* i/o: IVAS decoder handle                                                     */
    const int16_t nSamplesPerChannel,           /* i  : number of samples per channel requested to be written to output buffer  */
Loading