Commit fb4a10a3 authored by Jan Kiene's avatar Jan Kiene
Browse files

accept REND_STATIC_MEM_OPT

parent 791ff315
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -179,7 +179,6 @@
#define NONBE_FIX_539_MASA_384K_CHIRP                   /* Nokia: issue 539, puts the normalization of the energy ratios at the correct place, affect MASA 384k only */

/* Fixes for bugs found during split rendering contribution development */
#define REND_STATIC_MEM_OPT                             /* Dlb: Static memory optimisation for external renderer */
#define EULER2QUAT_FIX                                  /* Dlb: Fix for Euler2Quat()/Quat2EulerDegree functions */
#define SBA_CREND_ROT_OPT                               /* Dlb: Optimisation for rotateFrameSba() used for SHD rotations in external renderer */
#define TD_TDREND_FIX_NULLPTR_ACCESS                    /* FhG: avoid nullptr access in ivas_rend_TDObjRendOpen */
+0 −87
Original line number Diff line number Diff line
@@ -57,13 +57,9 @@

/* Maximum buffer length (total) in samples. */
#ifdef SPLIT_REND_WITH_HEAD_ROT
#ifdef REND_STATIC_MEM_OPT
#define MAX_BUFFER_LENGTH       ( MAX_BUFFER_LENGTH_PER_CHANNEL * MAX_INPUT_CHANNELS )
#define MAX_CLDFB_BUFFER_LENGTH ( MAX_CLDFB_BUFFER_LENGTH_PER_CHANNEL * MAX_INPUT_CHANNELS )
#define MAX_BIN_BUFFER_LENGTH   ( MAX_BUFFER_LENGTH_PER_CHANNEL * BINAURAL_CHANNELS )
#else /* REND_STATIC_MEM_OPT */
#define MAX_BUFFER_LENGTH ( MAX_CLDFB_BUFFER_LENGTH_PER_CHANNEL * MAX_INPUT_CHANNELS )
#endif /* REND_STATIC_MEM_OPT */

#else
#define MAX_BUFFER_LENGTH ( MAX_BUFFER_LENGTH_PER_CHANNEL * MAX_INPUT_CHANNELS )
@@ -124,9 +120,6 @@ typedef struct
    IVAS_REND_AudioConfig inConfig;
    IVAS_REND_InputId id;
    IVAS_REND_AudioBuffer inputBuffer;
#ifndef REND_STATIC_MEM_OPT
    float bufferData[MAX_BUFFER_LENGTH];
#endif
    float gain; /* Linear, not in dB */
    rendering_context ctx;
    int32_t numNewSamplesPerChannel; /* Used to keep track how much new audio was fed before rendering current frame */
@@ -144,9 +137,7 @@ typedef struct
#ifdef SPLIT_REND_WITH_HEAD_ROT
    TDREND_WRAPPER splitTdRendWrappers[MAX_HEAD_ROT_POSES - 1]; /* Additional TD Rend instances used for split rendering */
#endif
#ifdef REND_STATIC_MEM_OPT
    float *bufferData;
#endif
    int16_t nonDiegeticPan;
    float nonDiegeticPanGain;
    OMASA_ANA_HANDLE hOMasa;
@@ -183,9 +174,7 @@ typedef struct
    int16_t nonDiegeticPan;
    float nonDiegeticPanGain;
    lfe_routing lfeRouting;
#ifdef REND_STATIC_MEM_OPT
    float *bufferData;
#endif
    MCMASA_ANA_HANDLE hMcMasa;
} input_mc;

@@ -203,9 +192,7 @@ typedef struct
    rotation_gains rot_gains_prev;
#endif

#ifdef REND_STATIC_MEM_OPT
    float *bufferData;
#endif
    DIRAC_ANA_HANDLE hDirAC;
} input_sba;

@@ -214,9 +201,7 @@ typedef struct
{
    input_base base;
    SPLIT_POST_REND_WRAPPER splitPostRendWrapper;
#ifdef REND_STATIC_MEM_OPT
    float *bufferData;
#endif
} input_split_post_rend;
#endif

@@ -230,9 +215,7 @@ typedef struct
    DecoderDummy *decDummy;
    MASA_METADATA_FRAME masaMetadata;
    bool metadataHasBeenFed;
#ifdef REND_STATIC_MEM_OPT
    float *bufferData;
#endif
    MASA_PREREND_HANDLE hMasaPrerend;
} input_masa;

@@ -281,7 +264,6 @@ struct IVAS_REND
 * Local functions
 *-------------------------------------------------------------------*/

#ifdef REND_STATIC_MEM_OPT
static ivas_error allocateInputBaseBufferData( float **data, const int16_t data_size )
{
    *data = (float *) malloc( data_size * sizeof( float ) );
@@ -303,7 +285,6 @@ static void freeInputBaseBufferData( float **data )

    return;
}
#endif

static IVAS_QUATERNION quaternionInit(
    void )
@@ -1221,11 +1202,9 @@ static void initRendInputBase(
    const IVAS_REND_AudioConfig inConfig,
    const IVAS_REND_InputId id,
    const rendering_context rendCtx
#ifdef REND_STATIC_MEM_OPT
    ,
    float *dataBuf,
    const int16_t dataBufSize
#endif
)
{
    inputBase->inConfig = inConfig;
@@ -1236,17 +1215,11 @@ static void initRendInputBase(

    inputBase->inputBuffer.config.numSamplesPerChannel = 0;
    inputBase->inputBuffer.config.numChannels = 0;
#ifndef REND_STATIC_MEM_OPT
    inputBase->inputBuffer.data = inputBase->bufferData;

    set_zero( inputBase->bufferData, MAX_BUFFER_LENGTH );
#else
    inputBase->inputBuffer.data = dataBuf;
    if ( inputBase->inputBuffer.data != NULL )
    {
        set_zero( inputBase->inputBuffer.data, dataBufSize );
    }
#endif

    return;
}
@@ -1386,17 +1359,13 @@ static ivas_error setRendInputActiveIsm(
        return IVAS_ERR_IO_CONFIG_PAIR_NOT_SUPPORTED;
    }

#ifdef REND_STATIC_MEM_OPT
    if ( ( error = allocateInputBaseBufferData( &inputIsm->bufferData, MAX_BUFFER_LENGTH ) ) != IVAS_ERR_OK )
    {
        return error;
    }
#endif
    initRendInputBase( &inputIsm->base, inConfig, id, rendCtx
#ifdef REND_STATIC_MEM_OPT
                       ,
                       inputIsm->bufferData, MAX_BUFFER_LENGTH
#endif
    );

    inputIsm->currentPos = defaultObjectPosition();
@@ -1497,14 +1466,10 @@ static void clearInputIsm(

    rendCtx = inputIsm->base.ctx;

#ifdef REND_STATIC_MEM_OPT
    freeInputBaseBufferData( &inputIsm->base.inputBuffer.data );
#endif
    initRendInputBase( &inputIsm->base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, rendCtx
#ifdef REND_STATIC_MEM_OPT
                       ,
                       NULL, 0
#endif
    );

    /* Free input's internal handles */
@@ -2408,17 +2373,13 @@ static ivas_error setRendInputActiveMc(
        return IVAS_ERR_IO_CONFIG_PAIR_NOT_SUPPORTED;
    }

#ifdef REND_STATIC_MEM_OPT
    if ( ( error = allocateInputBaseBufferData( &inputMc->bufferData, MAX_BUFFER_LENGTH ) ) != IVAS_ERR_OK )
    {
        return error;
    }
#endif
    initRendInputBase( &inputMc->base, inConfig, id, rendCtx
#ifdef REND_STATIC_MEM_OPT
                       ,
                       inputMc->bufferData, MAX_BUFFER_LENGTH
#endif
    );
    setZeroPanMatrix( inputMc->panGains );
    inputMc->customLsInput = defaultCustomLs();
@@ -2472,14 +2433,10 @@ static void clearInputMc(

    rendCtx = inputMc->base.ctx;

#ifdef REND_STATIC_MEM_OPT
    freeInputBaseBufferData( &inputMc->bufferData );
#endif
    initRendInputBase( &inputMc->base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, rendCtx
#ifdef REND_STATIC_MEM_OPT
                       ,
                       NULL, 0
#endif
    );

    /* Free input's internal handles */
@@ -2777,17 +2734,13 @@ static ivas_error setRendInputActiveSplitPostRend(
    rendCtx = inputSplitPostRend->base.ctx;
    outConfig = *rendCtx.pOutConfig;

#ifdef REND_STATIC_MEM_OPT
    if ( ( error = allocateInputBaseBufferData( &inputSplitPostRend->bufferData, MAX_BIN_BUFFER_LENGTH ) ) != IVAS_ERR_OK )
    {
        return error;
    }
#endif
    initRendInputBase( &inputSplitPostRend->base, inConfig, id, rendCtx
#ifdef REND_STATIC_MEM_OPT
                       ,
                       inputSplitPostRend->bufferData, MAX_BIN_BUFFER_LENGTH
#endif
    );

    if ( ( error = updateSplitPostRendPanGains( inputSplitPostRend, outConfig, hRendCfg ) ) != IVAS_ERR_OK )
@@ -2842,7 +2795,6 @@ static ivas_error setRendInputActiveSba(
        return IVAS_ERR_IO_CONFIG_PAIR_NOT_SUPPORTED;
    }

#ifdef REND_STATIC_MEM_OPT
#ifdef SPLIT_REND_WITH_HEAD_ROT
    if ( ( error = allocateInputBaseBufferData( &inputSba->bufferData, MAX_CLDFB_BUFFER_LENGTH ) ) != IVAS_ERR_OK )
#else
@@ -2856,9 +2808,6 @@ static ivas_error setRendInputActiveSba(
#else
    initRendInputBase( &inputSba->base, inConfig, id, rendCtx, inputSba->bufferData, MAX_BUFFER_LENGTH );
#endif /* SPLIT_REND_WITH_HEAD_ROT */
#else  /* REND_STATIC_MEM_OPT */
    initRendInputBase( &inputSba->base, inConfig, id, rendCtx );
#endif /* REND_STATIC_MEM_OPT */
    setZeroPanMatrix( inputSba->hoaDecMtx );
#ifdef SPLIT_REND_WITH_HEAD_ROT
    inputSba->crendWrapper = NULL;
@@ -2896,14 +2845,10 @@ static void clearInputSplitRend(

    rendCtx = inputSplitRend->base.ctx;

#ifdef REND_STATIC_MEM_OPT
    freeInputBaseBufferData( &inputSplitRend->bufferData );
#endif
    initRendInputBase( &inputSplitRend->base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, rendCtx
#ifdef REND_STATIC_MEM_OPT
                       ,
                       NULL, 0
#endif
    );
    if ( inputSplitRend->splitPostRendWrapper.hBinHrSplitPostRend != NULL )
    {
@@ -2929,14 +2874,10 @@ static void clearInputSba(

    rendCtx = inputSba->base.ctx;

#ifdef REND_STATIC_MEM_OPT
    freeInputBaseBufferData( &inputSba->bufferData );
#endif
    initRendInputBase( &inputSba->base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, rendCtx
#ifdef REND_STATIC_MEM_OPT
                       ,
                       NULL, 0
#endif
    );

    /* Free input's internal handles */
@@ -3341,17 +3282,13 @@ static ivas_error setRendInputActiveMasa(
        return IVAS_ERR_IO_CONFIG_PAIR_NOT_SUPPORTED;
    }

#ifdef REND_STATIC_MEM_OPT
    if ( ( error = allocateInputBaseBufferData( &inputMasa->bufferData, MAX_BUFFER_LENGTH ) ) != IVAS_ERR_OK )
    {
        return error;
    }
#endif
    initRendInputBase( &inputMasa->base, inConfig, id, rendCtx
#ifdef REND_STATIC_MEM_OPT
                       ,
                       inputMasa->bufferData, MAX_BUFFER_LENGTH
#endif
    );

    if ( ( error = getAudioConfigNumChannels( inConfig, &numInChannels ) ) != IVAS_ERR_OK )
@@ -3473,16 +3410,12 @@ static void clearInputMasa(

    rendCtx = inputMasa->base.ctx;

#ifdef REND_STATIC_MEM_OPT
    freeInputBaseBufferData( &inputMasa->bufferData );
#endif

    masaPrerendClose( &inputMasa->hMasaPrerend );
    initRendInputBase( &inputMasa->base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, rendCtx
#ifdef REND_STATIC_MEM_OPT
                       ,
                       NULL, 0
#endif
    );
    freeDecoderDummy( &inputMasa->decDummy );

@@ -3635,10 +3568,8 @@ ivas_error IVAS_REND_Open(
    for ( i = 0; i < RENDERER_MAX_ISM_INPUTS; ++i )
    {
        initRendInputBase( &hIvasRend->inputsIsm[i].base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, getRendCtx( hIvasRend )
#ifdef REND_STATIC_MEM_OPT
                                                                                                 ,
                           NULL, 0
#endif
        );
        hIvasRend->inputsIsm[i].crendWrapper = NULL;
        hIvasRend->inputsIsm[i].hReverb = NULL;
@@ -3650,9 +3581,7 @@ ivas_error IVAS_REND_Open(
            hIvasRend->inputsIsm[i].splitTdRendWrappers[j].hHrtfTD = NULL;
        }
#endif
#ifdef REND_STATIC_MEM_OPT
        hIvasRend->inputsIsm[i].bufferData = NULL;
#endif
        hIvasRend->inputsIsm[i].nonDiegeticPan = nonDiegeticPan;
        hIvasRend->inputsIsm[i].nonDiegeticPanGain = nonDiegeticPanGain;
        hIvasRend->inputsIsm[i].hOMasa = NULL;
@@ -3661,18 +3590,14 @@ ivas_error IVAS_REND_Open(
    for ( i = 0; i < RENDERER_MAX_MC_INPUTS; ++i )
    {
        initRendInputBase( &hIvasRend->inputsMc[i].base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, getRendCtx( hIvasRend )
#ifdef REND_STATIC_MEM_OPT
                                                                                                ,
                           NULL, 0
#endif
        );
        hIvasRend->inputsMc[i].efapInWrapper.hEfap = NULL;
        hIvasRend->inputsMc[i].crendWrapper = NULL;
        hIvasRend->inputsMc[i].hReverb = NULL;
        hIvasRend->inputsMc[i].tdRendWrapper.hBinRendererTd = NULL;
#ifdef REND_STATIC_MEM_OPT
        hIvasRend->inputsMc[i].bufferData = NULL;
#endif
        hIvasRend->inputsMc[i].nonDiegeticPan = nonDiegeticPan;
        hIvasRend->inputsMc[i].nonDiegeticPanGain = nonDiegeticPanGain;
        hIvasRend->inputsMc[i].hMcMasa = NULL;
@@ -3688,35 +3613,27 @@ ivas_error IVAS_REND_Open(
    for ( i = 0; i < RENDERER_MAX_SBA_INPUTS; ++i )
    {
        initRendInputBase( &hIvasRend->inputsSba[i].base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, getRendCtx( hIvasRend )
#ifdef REND_STATIC_MEM_OPT
                                                                                                 ,
                           NULL, 0
#endif
        );
        hIvasRend->inputsSba[i].crendWrapper = NULL;
#ifdef SPLIT_REND_WITH_HEAD_ROT
        hIvasRend->inputsSba[i].cldfbRendWrapper.hCldfbRend = NULL;
        hIvasRend->inputsSba[i].cldfbRendWrapper.hHrtfFastConv = NULL;
#endif
#ifdef REND_STATIC_MEM_OPT
        hIvasRend->inputsSba[i].bufferData = NULL;
#endif
        hIvasRend->inputsSba[i].hDirAC = NULL;
    }

    for ( i = 0; i < RENDERER_MAX_MASA_INPUTS; ++i )
    {
        initRendInputBase( &hIvasRend->inputsMasa[i].base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, getRendCtx( hIvasRend )
#ifdef REND_STATIC_MEM_OPT
                                                                                                  ,
                           NULL, 0
#endif
        );
        hIvasRend->inputsMasa[i].decDummy = NULL;
        hIvasRend->inputsMasa[i].metadataHasBeenFed = false;
#ifdef REND_STATIC_MEM_OPT
        hIvasRend->inputsMasa[i].bufferData = NULL;
#endif
        hIvasRend->inputsMasa[i].hMasaPrerend = NULL;
    }
#ifdef SPLIT_REND_WITH_HEAD_ROT
@@ -3726,19 +3643,15 @@ ivas_error IVAS_REND_Open(
                           IVAS_REND_AUDIO_CONFIG_UNKNOWN,
                           0,
                           getRendCtx( hIvasRend )
#ifdef REND_STATIC_MEM_OPT
                               ,
                           NULL, 0
#endif
        );
        ivas_init_split_post_rend_handles( &hIvasRend->inputsSplitPost[i].splitPostRendWrapper );
#ifdef SPLIT_REND_WITH_HEAD_ROT
        hIvasRend->splitRendBFI = 0;
#endif
#ifdef REND_STATIC_MEM_OPT
        hIvasRend->inputsSplitPost[i].bufferData = NULL;

#endif
    }
#endif