Commit 0b058fa3 authored by Archit Tamarapu's avatar Archit Tamarapu
Browse files

[fix] wrap changes in SPLIT_REND_WITH_HEAD_ROT

parent 84b76657
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -1743,6 +1743,7 @@ ivas_error ivas_rend_crendProcessSubframe(
}


#ifdef SPLIT_REND_WITH_HEAD_ROT
/*-----------------------------------------------------------------------------------------*
 * Function ivas_rend_crend_ProcessSplitBin()
 *
@@ -1860,3 +1861,4 @@ ivas_error ivas_rend_crendProcessSplitBin(

    return IVAS_ERR_OK;
}
#endif
+2 −0
Original line number Diff line number Diff line
@@ -637,12 +637,14 @@ ivas_error ivas_rend_crendProcessSubframe(
    const int32_t output_Fs                                     /* i  : output sampling rate                    */
);

#ifdef SPLIT_REND_WITH_HEAD_ROT
/* TODO tmu : interface cleanup */
ivas_error ivas_rend_crendProcessSplitBin(
    Decoder_Struct *st_ivas,
    float output[][L_FRAME48k],
    const int16_t output_frame 
);
#endif

/*----------------------------------------------------------------------------------*
 * Reverberator
+93 −22
Original line number Diff line number Diff line
@@ -177,7 +177,9 @@ typedef struct
    EFAP_WRAPPER efapInWrapper;
    TDREND_WRAPPER tdRendWrapper;
    CREND_WRAPPER_HANDLE crendWrapper;
#ifdef SPLIT_REND_WITH_HEAD_ROT
    TDREND_WRAPPER splitTdRendWrappers[MAX_HEAD_ROT_POSES - 1]; /* Additional TD Rend instances used for split rendering */
#endif
    REVERB_HANDLE hReverb;
    rotation_gains rot_gains_prev;
    int16_t nonDiegeticPan;
@@ -2136,8 +2138,10 @@ static ivas_error updateMcPanGains(
            switch ( outConfig )
            {
                case IVAS_REND_AUDIO_CONFIG_BINAURAL:
#ifdef SPLIT_REND_WITH_HEAD_ROT
                case IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CODED:
                case IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM:
#endif
                    break; /* Do nothing */
                case IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM_IR:
                case IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM_REVERB:
@@ -2184,7 +2188,9 @@ static ivas_error initMcBinauralRendering(
    RENDER_CONFIG_DATA *hRendCfg )
{
    ivas_error error;
#ifdef SPLIT_REND_WITH_HEAD_ROT
    int16_t i;
#endif
    int32_t outSampleRate;

    /* check if re-initialization */
@@ -2194,6 +2200,7 @@ static ivas_error initMcBinauralRendering(
        inputMc->tdRendWrapper.hHrtfTD = NULL;
    }

#ifdef SPLIT_REND_WITH_HEAD_ROT
    for ( i = 0; i < MAX_HEAD_ROT_POSES - 1; ++i )
    {
        if ( inputMc->splitTdRendWrappers[i].hBinRendererTd != NULL )
@@ -2202,6 +2209,7 @@ static ivas_error initMcBinauralRendering(
            inputMc->splitTdRendWrappers[i].hHrtfTD = NULL;
        }
    }
#endif

    ivas_rend_closeCrend( &inputMc->crendWrapper
#ifdef SPLIT_REND_WITH_HEAD_ROT
@@ -2248,6 +2256,7 @@ static ivas_error initMcBinauralRendering(
            return error;
        }

#ifdef SPLIT_REND_WITH_HEAD_ROT
        if ( outConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CODED || outConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM )
        {
            /* Open TD renderer wrappers */
@@ -2267,6 +2276,7 @@ static ivas_error initMcBinauralRendering(
            }
        }

#endif
        if ( outConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM_REVERB )
        {
            if ( ( error = ivas_reverb_open( &( inputMc->hReverb ), getIvasAudioConfigFromRendAudioConfig( outConfig ), NULL, hRendCfg, outSampleRate ) ) != IVAS_ERR_OK )
@@ -2397,7 +2407,9 @@ static ivas_error setRendInputActiveMc(
    const IVAS_REND_InputId id,
    RENDER_CONFIG_DATA *hRendCfg )
{
#ifdef SPLIT_REND_WITH_HEAD_ROT
    int16_t i;
#endif
    ivas_error error;
    rendering_context rendCtx;
    IVAS_REND_AudioConfig outConfig;
@@ -2432,13 +2444,19 @@ static ivas_error setRendInputActiveMc(
    inputMc->hMcMasa = NULL;
    initRotGains( inputMc->rot_gains_prev );
    inputMc->lfeRouting = defaultLfeRouting( inConfig, inputMc->customLsInput, outConfig, *inputMc->base.ctx.pCustomLsOut );
#ifdef SPLIT_REND_WITH_HEAD_ROT
    for ( i = 0; i < (int16_t) ( sizeof( inputMc->splitTdRendWrappers ) / sizeof( *inputMc->splitTdRendWrappers ) ); ++i )
    {
        inputMc->splitTdRendWrappers[i] = defaultTdRendWrapper();
    }

#endif

#ifdef SPLIT_REND_WITH_HEAD_ROT
    if ( getAudioConfigType( outConfig ) == IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL )
#else
    if ( outConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL || outConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM_IR || outConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM_REVERB )
#endif
    {
        if ( ( error = initMcBinauralRendering( inputMc, inConfig, outConfig, hRendCfg ) ) != IVAS_ERR_OK )
        {
@@ -2465,7 +2483,9 @@ static ivas_error setRendInputActiveMc(
static void clearInputMc(
    input_mc *inputMc )
{
#ifdef SPLIT_REND_WITH_HEAD_ROT
    int16_t i;
#endif
    rendering_context rendCtx;

    rendCtx = inputMc->base.ctx;
@@ -2501,6 +2521,7 @@ static void clearInputMc(
        inputMc->tdRendWrapper.hHrtfTD = NULL;
    }

#ifdef SPLIT_REND_WITH_HEAD_ROT
    for ( i = 0; i < (int16_t) ( sizeof( inputMc->splitTdRendWrappers ) / sizeof( *inputMc->splitTdRendWrappers ) ); ++i )
    {
        if ( inputMc->splitTdRendWrappers[i].hBinRendererTd != NULL )
@@ -2509,6 +2530,7 @@ static void clearInputMc(
            inputMc->splitTdRendWrappers[i].hHrtfTD = NULL;
        }
    }
#endif

    ivas_mcmasa_ana_close( &( inputMc->hMcMasa ) );

@@ -3696,12 +3718,14 @@ ivas_error IVAS_REND_Open(
        hIvasRend->inputsMc[i].nonDiegeticPanGain = nonDiegeticPanGain;
        hIvasRend->inputsMc[i].hMcMasa = NULL;

#ifdef SPLIT_REND_WITH_HEAD_ROT
        for ( j = 0; j < (int16_t) ( sizeof( hIvasRend->inputsMc[i].splitTdRendWrappers ) / sizeof( *hIvasRend->inputsMc[i].splitTdRendWrappers ) ); ++j )
        {
            hIvasRend->inputsMc[i].splitTdRendWrappers[j].hBinRendererTd = NULL;
            hIvasRend->inputsMc[i].splitTdRendWrappers[j].hHrtfTD = NULL;
        }
    }
#endif

    for ( i = 0; i < RENDERER_MAX_SBA_INPUTS; ++i )
    {
@@ -4290,7 +4314,11 @@ ivas_error IVAS_REND_ConfigureCustomInputLoudspeakerLayout(
        return error;
    }

#ifdef SPLIT_REND_WITH_HEAD_ROT
    if ( getAudioConfigType( hIvasRend->outputConfig ) == IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL )
#else
        if ( hIvasRend->outputConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL || hIvasRend->outputConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM_IR || hIvasRend->outputConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM_REVERB )
#endif
    {
        if ( ( error = initMcBinauralRendering( inputMc, inputMc->base.inConfig, hIvasRend->outputConfig, hIvasRend->hRendererConfig ) ) != IVAS_ERR_OK )
        {
@@ -6338,16 +6366,24 @@ static ivas_error renderActiveInputsIsm(

static ivas_error renderLfeToBinaural(
    const input_mc *mcInput,
#ifdef SPLIT_REND_WITH_HEAD_ROT
    const IVAS_REND_AudioConfig outConfig,
#endif
    IVAS_REND_AudioBuffer outAudio )
{
    int16_t i;
    int16_t lfe_idx;
#ifdef SPLIT_REND_WITH_HEAD_ROT
    int16_t pose_idx, num_poses;
#endif
    float gain;
    float *readPtr, *writePtr;

#ifdef SPLIT_REND_WITH_HEAD_ROT
    assert( ( getAudioConfigType( outConfig ) == IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL ) && "Must be binaural output" );
#else
        assert( ( outAudio.config.numChannels == 2 ) && "Must be binaural output" );
#endif

    push_wmops( "renderLfeToBinaural" );

@@ -6377,6 +6413,7 @@ static ivas_error renderLfeToBinaural(
        num_poses = 1;
    }

#ifdef SPLIT_REND_WITH_HEAD_ROT
    for ( pose_idx = 0; pose_idx < num_poses; ++pose_idx )
    {
        readPtr = getSmplPtr( mcInput->base.inputBuffer, lfe_idx, 0 );
@@ -6393,6 +6430,23 @@ static ivas_error renderLfeToBinaural(
            *writePtr++ += gain * ( *readPtr++ );
        }
    }
#else
        /* Copy LFE to left and right ears */
        readPtr = getSmplPtr( mcInput->base.inputBuffer, lfe_idx, 0 );
        writePtr = getSmplPtr( outAudio, 0, 0 );
        for ( i = 0; i < mcInput->base.inputBuffer.config.numSamplesPerChannel; i++ )
        {
            *writePtr++ += gain * ( *readPtr++ );
        }

        readPtr = getSmplPtr( mcInput->base.inputBuffer, lfe_idx, 0 );
        writePtr = getSmplPtr( outAudio, 1, 0 );
        for ( i = 0; i < mcInput->base.inputBuffer.config.numSamplesPerChannel; i++ )
        {
            *writePtr++ += gain * ( *readPtr++ );
        }

#endif

    pop_wmops();

@@ -6491,7 +6545,12 @@ static ivas_error renderMcToBinaural(

    accumulate2dArrayToBuffer( tmpRendBuffer, &outAudio );

#ifdef SPLIT_REND_WITH_HEAD_ROT
    if ( ( error = renderLfeToBinaural( mcInput, outConfig, outAudio ) ) != IVAS_ERR_OK )
#else
        if ( ( error = renderLfeToBinaural( mcInput, outAudio ) ) != IVAS_ERR_OK )
#endif

    {
        return error;
    }
@@ -6589,7 +6648,12 @@ static ivas_error renderMcToBinauralRoom(

    accumulate2dArrayToBuffer( tmpRendBuffer, &outAudio );

#ifdef SPLIT_REND_WITH_HEAD_ROT
    if ( ( error = renderLfeToBinaural( mcInput, outConfig, outAudio ) ) != IVAS_ERR_OK )
#else
        if ( ( error = renderLfeToBinaural( mcInput, outAudio ) ) != IVAS_ERR_OK )
#endif

    {
        return error;
    }
@@ -6687,7 +6751,11 @@ static ivas_error renderMcCustomLsToBinauralRoom(

    accumulate2dArrayToBuffer( tmpCrendBuffer, &outAudio );

#ifdef SPLIT_REND_WITH_HEAD_ROT
    if ( ( error = renderLfeToBinaural( mcInput, outConfig, outAudio ) ) != IVAS_ERR_OK )
#else
        if ( ( error = renderLfeToBinaural( mcInput, outAudio ) ) != IVAS_ERR_OK )
#endif )
    {
        return error;
    }
@@ -6762,6 +6830,7 @@ static ivas_error renderMcToMasa(
    return IVAS_ERR_OK;
}

#ifdef SPLIT_REND_WITH_HEAD_ROT
static ivas_error renderMcToSplitBinaural(
    input_mc *mcInput,
    const IVAS_REND_AudioConfig outConfig,
@@ -6934,6 +7003,7 @@ static ivas_error renderMcToSplitBinaural(

    return IVAS_ERR_OK;
}
#endif

static ivas_error renderInputMc(
    input_mc *mcInput,
@@ -6985,10 +7055,12 @@ static ivas_error renderInputMc(
                        error = renderMcToBinauralRoom( mcInput, outConfig, outAudio );
                    }
                    break;
#ifdef SPLIT_REND_WITH_HEAD_ROT
                case IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CODED:
                case IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM:
                    error = renderMcToSplitBinaural( mcInput, outConfig, outAudio );
                    break;
#endif
                default:
                    return IVAS_ERR_INVALID_OUTPUT_FORMAT;
            }
@@ -8528,8 +8600,7 @@ ivas_error IVAS_REND_GetSamples(
    if ( ( hIvasRend->outputConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CODED ) ||
         ( ( hIvasRend->outputConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) &&
           ( ( hIvasRend->inputsIsm[0].base.inConfig != IVAS_REND_AUDIO_CONFIG_UNKNOWN ) ||
             ( hIvasRend->inputsMc[0].base.inConfig != IVAS_REND_AUDIO_CONFIG_UNKNOWN ) )
               ) )
             ( hIvasRend->inputsMc[0].base.inConfig != IVAS_REND_AUDIO_CONFIG_UNKNOWN ) ) ) )
    {
        outAudio = hIvasRend->splitRendEncBuffer;
    }