Commit 85875e80 authored by Serdar Buyuksarac's avatar Serdar Buyuksarac
Browse files

Merge branch 'main' into 814-replace-double-precision-arithmetic-with-single

parents 5f945a04 eeee3ca9
Loading
Loading
Loading
Loading
Loading
+24 −1
Original line number Diff line number Diff line
@@ -196,7 +196,11 @@ int main(
    RotFileReader *refRotReader = NULL;
    Vector3PairFileReader *referenceVectorReader = NULL;
    ivas_error error = IVAS_ERR_UNKNOWN;
#ifdef FIX_847_OUTPUT_PCM_BUFFER
    int16_t *pcmBuf = NULL;
#else
    int16_t pcmBuf[MAX_OUTPUT_PCM_BUFFER_SIZE];
#endif
#ifdef SPLIT_REND_WITH_HEAD_ROT
    uint8_t splitRendBitsBuf[IVAS_MAX_SPLIT_REND_BITS_BUFFER_SIZE_IN_BYTES];
#endif
@@ -743,6 +747,21 @@ int main(
        }
    }

#ifdef FIX_847_OUTPUT_PCM_BUFFER
    /*------------------------------------------------------------------------------------------*
     * Allocate output data buffer
     *------------------------------------------------------------------------------------------*/

    int16_t pcmBufSize;
    if ( ( error = IVAS_DEC_GetOutputBufferSize( hIvasDec, &pcmBufSize ) ) != IVAS_ERR_OK )
    {
        fprintf( stderr, "\nGetOutputBufferSize failed: %s\n\n", IVAS_DEC_GetErrorMessage( error ) );
        goto cleanup;
    }

    pcmBuf = malloc( pcmBufSize * sizeof( int16_t ) );

#endif

    /*-----------------------------------------------------------------*
     * Decoding
@@ -797,10 +816,14 @@ int main(

cleanup:

#ifdef FIX_847_OUTPUT_PCM_BUFFER
    free( pcmBuf );
#endif

#ifdef DEBUG_SBA_AUDIO_DUMP
    IVAS_DEC_GetSbaDebugParams( hIvasDec, &numOutChannels, &numTransportChannels, &pca_ingest_channels );
#endif

#endif
    if ( arg.hrtfReaderEnabled )
    {
        IVAS_DEC_HRTF_HANDLE hHrtfTD = NULL;
+7 −0
Original line number Diff line number Diff line
@@ -65,6 +65,9 @@ typedef enum
    IVAS_ERR_INVALID_FEC_CONFIG,
    IVAS_ERR_INVALID_FEC_OFFSET,
    IVAS_ERR_INVALID_INPUT_BUFFER_SIZE,
#ifdef FIX_847_OUTPUT_PCM_BUFFER
    IVAS_ERR_INVALID_OUTPUT_BUFFER_SIZE,
#endif
    IVAS_ERR_DTX_NOT_SUPPORTED,
    IVAS_ERR_UNEXPECTED_NULL_POINTER,
    IVAS_ERR_METADATA_NOT_EXPECTED,
@@ -217,6 +220,10 @@ static inline const char *ivas_error_to_string( ivas_error error_code )
            return "Invalid FEC offset";
        case IVAS_ERR_INVALID_INPUT_BUFFER_SIZE:
            return "Invalid input buffer size";
#ifdef FIX_847_OUTPUT_PCM_BUFFER
        case IVAS_ERR_INVALID_OUTPUT_BUFFER_SIZE:
            return "Invalid output buffer size";
#endif
        case IVAS_ERR_DTX_NOT_SUPPORTED:
            return "DTX is not supported in this IVAS format and element mode";
        case IVAS_ERR_UNEXPECTED_NULL_POINTER:
+1 −0
Original line number Diff line number Diff line
@@ -161,6 +161,7 @@

#define FIX_818_DOUBLE_PREC_KERNEL_SW                   /* FhG: Issue 818: Avoid double precision in kernel switching */
#define FIX_822_REFACTOR_BIN_REVERB_OPEN                /* Nokia: Addresses first step of issue 822 by refactoring ivas_binaural_reverb_open */
#define FIX_847_OUTPUT_PCM_BUFFER                       /* VA: issue 847: Allocate decoder output PCM buffer dynamically */
#define FIX_814_DOUBLE_PREC_IN_REVERB                   /* Philips: Issue 814: Replace double precision arithmetic in reverb */

/* #################### End BE switches ################################## */
+66 −0
Original line number Diff line number Diff line
@@ -1417,6 +1417,72 @@ ivas_error IVAS_DEC_GetFormat(
}


#ifdef FIX_847_OUTPUT_PCM_BUFFER
/*---------------------------------------------------------------------*
 * getInputBufferSize()
 *
 *
 *---------------------------------------------------------------------*/

static int16_t getOutputBufferSize(
    const Decoder_Struct *st_ivas /* i  : IVAS decoder handle */
)
{
    if ( st_ivas->hDecoderConfig == NULL )
    {
        return -1;
    }

    if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_EXTERNAL )
    {
        return (int16_t) ( st_ivas->hDecoderConfig->output_Fs * ( IVAS_MAX_OUTPUT_CHANNELS + IVAS_MAX_NUM_OBJECTS ) / FRAMES_PER_SEC );
    }
    else if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM )
    {
        if ( st_ivas->hLsSetupCustom == NULL )
        {
            return -1;
        }

        return (int16_t) ( st_ivas->hDecoderConfig->output_Fs * ( st_ivas->hLsSetupCustom->num_spk + st_ivas->hLsSetupCustom->num_lfe ) / FRAMES_PER_SEC );
    }
    else
    {
        return (int16_t) ( st_ivas->hDecoderConfig->output_Fs * st_ivas->hDecoderConfig->nchan_out / FRAMES_PER_SEC );
    }
}


/*---------------------------------------------------------------------*
 * IVAS_DEC_GetOutputBufferSize()
 *
 *
 *---------------------------------------------------------------------*/

ivas_error IVAS_DEC_GetOutputBufferSize(
    const IVAS_DEC_HANDLE hIvasDec, /* i  : IVAS decoder handle                                                                     */
    int16_t *outputBufferSize       /* o  : total number of samples expected in the output buffer for current decoder configuration */
)
{
    if ( outputBufferSize == NULL || hIvasDec == NULL || hIvasDec->st_ivas == NULL )
    {
        return IVAS_ERR_UNEXPECTED_NULL_POINTER;
    }

    *outputBufferSize = getOutputBufferSize( hIvasDec->st_ivas );

    if ( *outputBufferSize == -1 )
    {
        return IVAS_ERR_INVALID_OUTPUT_BUFFER_SIZE;
    }
    else
    {
        return IVAS_ERR_OK;
    }
}
#endif


/*---------------------------------------------------------------------*
 * IVAS_DEC_GetNumOutputChannels( )
 *
+8 −0
Original line number Diff line number Diff line
@@ -358,6 +358,14 @@ ivas_error IVAS_DEC_GetFormat(
    IVAS_DEC_BS_FORMAT *format                  /* o  : format detected from bitstream fed to the decoder                       */
);

#ifdef FIX_847_OUTPUT_PCM_BUFFER
/*! r: error code */
ivas_error IVAS_DEC_GetOutputBufferSize(
    const IVAS_DEC_HANDLE hIvasDec,             /* i  : IVAS decoder handle                                                     */
    int16_t *outputBufferSize                   /* o  : total number of samples expected in the output buffer for current decoder configuration */
);
#endif

/*! r: error code */
ivas_error IVAS_DEC_GetNumOutputChannels(
    IVAS_DEC_HANDLE hIvasDec,                   /* i/o: IVAS decoder handle                                                     */