Commit 75e669c1 authored by vaclav's avatar vaclav
Browse files

Merge branch '911-crend-binaural-external-renderer-function' into 'main'

Resolve "CRend binaural external renderer function"

See merge request !1258
parents 0f77ad0e af652f87
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -154,6 +154,7 @@
#define FIX_CRASH_LONG_BRIR                             /* Orange : Fix crash when long BRIR is set */
#define FIX_910_REMOVE_DUPLICATION_TD_REND              /* VA: issue 910: remove duplication of function ivas_td_binaural_renderer() */
#define FIX_940_DEBUGGING_VARIABLE                      /* Nokia: issue #940: remove debugging variable */
#define FIX_911_REMOVE_CREND_DUPLICATION                /* VA: issue 911: resolve duplication of CRend binaural external renderer function */

/* #################### End BE switches ################################## */

+56 −13
Original line number Diff line number Diff line
@@ -1770,7 +1770,7 @@ static ivas_error ivas_rend_crendConvolver(
    return IVAS_ERR_OK;
}


#ifndef FIX_911_REMOVE_CREND_DUPLICATION
/*-----------------------------------------------------------------------------------------*
 * Function ivas_rend_crendProcess()
 *
@@ -1912,7 +1912,7 @@ ivas_error ivas_rend_crendProcess(
    pop_wmops();
    return IVAS_ERR_OK;
}

#endif

/*-----------------------------------------------------------------------------------------*
 * Function ivas_rend_crendProcessSubframe()
@@ -1987,6 +1987,10 @@ ivas_error ivas_rend_crendProcessSubframe(
        p_pcm_tmp[ch] = pcm_tmp[ch];
    }

#ifdef FIX_911_REMOVE_CREND_DUPLICATION
    if ( hTcBuffer != NULL )
    {
#endif
        slot_size = hTcBuffer->n_samples_granularity;

        /* loop for synthesis, assume we always have to render in multiples of 5ms subframes with spills */
@@ -1999,10 +2003,27 @@ ivas_error ivas_rend_crendProcessSubframe(
            slots_to_render -= hTcBuffer->subframe_nbslots[last_sf];
            last_sf++;
        }
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
        subframe_len = -1; /* will be set later */
    }
    else
    {
        subframe_len = (int16_t) ( output_Fs / ( FRAMES_PER_SEC * MAX_PARAM_SPATIAL_SUBFRAMES ) );
        first_sf = 0;
        last_sf = n_samples_to_render / subframe_len;
    }
#endif

    for ( subframe_idx = first_sf; subframe_idx < last_sf; subframe_idx++ )
    {
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
        if ( hTcBuffer != NULL )
        {
#endif
            subframe_len = hTcBuffer->subframe_nbslots[subframe_idx] * hTcBuffer->n_samples_granularity;
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
        }
#endif

        /* Early Reflections */
        if ( hCrend->reflections != NULL )
@@ -2071,7 +2092,15 @@ ivas_error ivas_rend_crendProcessSubframe(
            {
                p_pcm_tmp[ch] += subframe_len;
            }

#ifdef FIX_911_REMOVE_CREND_DUPLICATION
            if ( hTcBuffer != NULL )
            {
#endif
                hTcBuffer->slots_rendered += hTcBuffer->subframe_nbslots[subframe_idx];
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
            }
#endif
        }
        else
        {
@@ -2088,7 +2117,15 @@ ivas_error ivas_rend_crendProcessSubframe(
        mvr2r( pcm_tmp[ch], output[ch], n_samples_to_render );
    }

#ifdef FIX_911_REMOVE_CREND_DUPLICATION
    if ( hTcBuffer != NULL )
    {
#endif
        hTcBuffer->subframes_rendered = last_sf;
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
    }
#endif

    pop_wmops();

    return IVAS_ERR_OK;
@@ -2195,7 +2232,13 @@ ivas_error ivas_rend_crendProcessSplitBin(
        {
            mvr2r( hCombinedOrientationData->Rmat_prev[pos_idx][i], pCombinedOrientationDataLocal->Rmat_prev[0][i], 3 );
        }

#ifdef FIX_911_REMOVE_CREND_DUPLICATION
        if ( ( error = ivas_rend_crendProcessSubframe( pCrend, inConfig, outConfig, hDecoderConfig, pCombinedOrientationDataLocal, hIntSetup, hEFAPdata,
                                                       NULL, p_tmpInputBuffer, p_tmpInputBuffer, output_frame, output_Fs, pos_idx ) ) != IVAS_ERR_OK )
#else
        if ( ( error = ivas_rend_crendProcess( pCrend, inConfig, outConfig, hDecoderConfig, pCombinedOrientationDataLocal, hIntSetup, hEFAPdata, p_tmpInputBuffer, output_Fs, hCombinedOrientationData->num_subframes, pos_idx ) ) != IVAS_ERR_OK )
#endif
        {
            return error;
        }
+2 −0
Original line number Diff line number Diff line
@@ -918,6 +918,7 @@ ivas_error ivas_rend_initCrendWrapper(
#endif
);

#ifndef FIX_911_REMOVE_CREND_DUPLICATION
ivas_error ivas_rend_crendProcess(
    const CREND_WRAPPER *pCrend,
    const AUDIO_CONFIG inConfig,
@@ -936,6 +937,7 @@ ivas_error ivas_rend_crendProcess(
#endif
);

#endif
ivas_error ivas_rend_crendProcessSubframe(
    const CREND_WRAPPER *pCrend,                                /* i/o: Crend wrapper handle                    */
    const AUDIO_CONFIG inConfig,                                /* i  : input audio configuration               */
+75 −13
Original line number Diff line number Diff line
@@ -5369,32 +5369,22 @@ static ivas_error renderIsmToBinaural(
    return IVAS_ERR_OK;
}


#ifdef SPLIT_REND_WITH_HEAD_ROT
static int16_t getNumSubframesInBuffer(
    const IVAS_REND_AudioBuffer *buffer,
    const int32_t sampleRate )
{
#ifdef SPLIT_REND_WITH_HEAD_ROT
    int16_t cldfb2tdSampleFact;

    cldfb2tdSampleFact = buffer->config.is_cldfb ? 2 : 1;
#endif

#ifdef DEBUGGING
#ifdef SPLIT_REND_WITH_HEAD_ROT
    assert( buffer->config.numSamplesPerChannel % ( sampleRate / FRAMES_PER_SEC / MAX_PARAM_SPATIAL_SUBFRAMES * cldfb2tdSampleFact ) == 0 );
#else
    assert( buffer->config.numSamplesPerChannel % ( sampleRate / FRAMES_PER_SEC / MAX_PARAM_SPATIAL_SUBFRAMES ) == 0 );
#endif
#endif

#ifdef SPLIT_REND_WITH_HEAD_ROT
    return (int16_t) ( buffer->config.numSamplesPerChannel / ( sampleRate / FRAMES_PER_SEC / MAX_PARAM_SPATIAL_SUBFRAMES * cldfb2tdSampleFact ) );
#else
    return (int16_t) ( buffer->config.numSamplesPerChannel / ( sampleRate / FRAMES_PER_SEC / MAX_PARAM_SPATIAL_SUBFRAMES ) );
#endif
}

#endif

static ivas_error renderIsmToBinauralRoom(
    input_ism *ismInput,
@@ -5543,13 +5533,23 @@ static ivas_error renderIsmToBinauralRoom(

    /* render 7_1_4 with BRIRs */
#ifdef SPLIT_REND_WITH_HEAD_ROT
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
    if ( ( error = ivas_rend_crendProcessSubframe( ismInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR, NULL, NULL,
                                                   NULL, NULL, NULL, p_tmpRendBuffer, p_tmpRendBuffer, ismInput->base.inputBuffer.config.numSamplesPerChannel, *ismInput->base.ctx.pOutSampleRate, 0 ) ) != IVAS_ERR_OK )
#else
    if ( ( error = ivas_rend_crendProcess( ismInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR,
                                           NULL, NULL, NULL, NULL, p_tmpRendBuffer, *ismInput->base.ctx.pOutSampleRate,
                                           getNumSubframesInBuffer( &outAudio, *ismInput->base.ctx.pOutSampleRate ), 0 ) ) != IVAS_ERR_OK )
#endif
#else
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
    if ( ( error = ivas_rend_crendProcessSubframe( ismInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR, NULL, NULL,
                                                   NULL, NULL, NULL, p_tmpRendBuffer, p_tmpRendBuffer, ismInput->base.inputBuffer.config.numSamplesPerChannel, *ismInput->base.ctx.pOutSampleRate ) ) != IVAS_ERR_OK )
#else
    if ( ( error = ivas_rend_crendProcess( ismInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR,
                                           NULL, NULL, NULL, NULL, p_tmpRendBuffer, *ismInput->base.ctx.pOutSampleRate,
                                           getNumSubframesInBuffer( &outAudio, *ismInput->base.ctx.pOutSampleRate ) ) ) != IVAS_ERR_OK )
#endif

#endif
    {
@@ -6122,11 +6122,21 @@ static ivas_error renderMcToBinaural(

        /* call CREND */
#ifdef SPLIT_REND_WITH_HEAD_ROT
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
        if ( ( error = ivas_rend_crendProcessSubframe( mcInput->crendWrapper, mcInput->base.inConfig, outConfig, NULL, NULL,
                                                       NULL, NULL, NULL, p_tmpRendBuffer, p_tmpRendBuffer, mcInput->base.inputBuffer.config.numSamplesPerChannel, *mcInput->base.ctx.pOutSampleRate, 0 ) ) != IVAS_ERR_OK )
#else
        if ( ( error = ivas_rend_crendProcess( mcInput->crendWrapper, mcInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, p_tmpRendBuffer, *mcInput->base.ctx.pOutSampleRate,
                                               getNumSubframesInBuffer( &outAudio, *mcInput->base.ctx.pOutSampleRate ), 0 ) ) != IVAS_ERR_OK )
#endif
#else
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
        if ( ( error = ivas_rend_crendProcessSubframe( mcInput->crendWrapper, mcInput->base.inConfig, outConfig, NULL, NULL,
                                                       NULL, NULL, NULL, p_tmpRendBuffer, p_tmpRendBuffer, mcInput->base.inputBuffer.config.numSamplesPerChannel, *mcInput->base.ctx.pOutSampleRate ) ) != IVAS_ERR_OK )
#else
        if ( ( error = ivas_rend_crendProcess( mcInput->crendWrapper, mcInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, p_tmpRendBuffer, *mcInput->base.ctx.pOutSampleRate,
                                               getNumSubframesInBuffer( &outAudio, *mcInput->base.ctx.pOutSampleRate ) ) ) != IVAS_ERR_OK )
#endif
#endif
        {
            return error;
@@ -6227,11 +6237,21 @@ static ivas_error renderMcToBinauralRoom(

        /* call CREND */
#ifdef SPLIT_REND_WITH_HEAD_ROT
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
        if ( ( error = ivas_rend_crendProcessSubframe( mcInput->crendWrapper, mcInput->base.inConfig, outConfig, NULL, NULL,
                                                       NULL, NULL, NULL, p_tmpRendBuffer, p_tmpRendBuffer, mcInput->base.inputBuffer.config.numSamplesPerChannel, *mcInput->base.ctx.pOutSampleRate, 0 ) ) != IVAS_ERR_OK )
#else
        if ( ( error = ivas_rend_crendProcess( mcInput->crendWrapper, mcInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, p_tmpRendBuffer, *mcInput->base.ctx.pOutSampleRate,
                                               getNumSubframesInBuffer( &outAudio, *mcInput->base.ctx.pOutSampleRate ), 0 ) ) != IVAS_ERR_OK )
#endif
#else
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
        if ( ( error = ivas_rend_crendProcessSubframe( mcInput->crendWrapper, mcInput->base.inConfig, outConfig, NULL, NULL,
                                                       NULL, NULL, NULL, p_tmpRendBuffer, p_tmpRendBuffer, mcInput->base.inputBuffer.config.numSamplesPerChannel, *mcInput->base.ctx.pOutSampleRate ) ) != IVAS_ERR_OK )
#else
        if ( ( error = ivas_rend_crendProcess( mcInput->crendWrapper, mcInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, p_tmpRendBuffer, *mcInput->base.ctx.pOutSampleRate,
                                               getNumSubframesInBuffer( &outAudio, *mcInput->base.ctx.pOutSampleRate ) ) ) != IVAS_ERR_OK )
#endif
#endif
        {
            return error;
@@ -6333,11 +6353,21 @@ static ivas_error renderMcCustomLsToBinauralRoom(

    /* call CREND */
#ifdef SPLIT_REND_WITH_HEAD_ROT
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
    if ( ( error = ivas_rend_crendProcessSubframe( mcInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, NULL, NULL,
                                                   NULL, NULL, NULL, p_tmpCrendBuffer, p_tmpCrendBuffer, mcInput->base.inputBuffer.config.numSamplesPerChannel, *mcInput->base.ctx.pOutSampleRate, 0 ) ) != IVAS_ERR_OK )
#else
    if ( ( error = ivas_rend_crendProcess( mcInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, NULL, NULL, NULL, NULL,
                                           p_tmpCrendBuffer, *mcInput->base.ctx.pOutSampleRate, getNumSubframesInBuffer( &outAudio, *mcInput->base.ctx.pOutSampleRate ), 0 ) ) != IVAS_ERR_OK )
#endif
#else
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
    if ( ( error = ivas_rend_crendProcessSubframe( mcInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, NULL, NULL,
                                                   NULL, NULL, NULL, p_tmpCrendBuffer, p_tmpCrendBuffer, mcInput->base.inputBuffer.config.numSamplesPerChannel, *mcInput->base.ctx.pOutSampleRate ) ) != IVAS_ERR_OK )
#else
    if ( ( error = ivas_rend_crendProcess( mcInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, NULL, NULL, NULL, NULL,
                                           p_tmpCrendBuffer, *mcInput->base.ctx.pOutSampleRate, getNumSubframesInBuffer( &outAudio, *mcInput->base.ctx.pOutSampleRate ) ) ) != IVAS_ERR_OK )
#endif
#endif
    {
        return error;
@@ -6546,7 +6576,12 @@ static ivas_error renderMcToSplitBinaural(
            copyBufferTo2dArray( tmpRotBuffer, tmpRendBuffer );

            /* call CREND (rotation already performed) */
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
            if ( ( error = ivas_rend_crendProcessSubframe( mcInput->crendWrapper, mcInput->base.inConfig, outConfig, NULL, NULL,
                                                           NULL, NULL, NULL, p_tmpRendBuffer, p_tmpRendBuffer, mcInput->base.inputBuffer.config.numSamplesPerChannel, *mcInput->base.ctx.pOutSampleRate, pos_idx ) ) != IVAS_ERR_OK )
#else
            if ( ( error = ivas_rend_crendProcess( mcInput->crendWrapper, mcInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, p_tmpRendBuffer, *mcInput->base.ctx.pOutSampleRate, getNumSubframesInBuffer( &mcInput->base.inputBuffer, *mcInput->base.ctx.pOutSampleRate ), pos_idx ) ) != IVAS_ERR_OK )
#endif
            {
                return error;
            }
@@ -7089,8 +7124,13 @@ static ivas_error renderSbaToMultiBinaural(
        assert( sbaInput->crendWrapper->hCrend[0]->hReverb == NULL );

        /* call CREND */
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
        if ( ( error = ivas_rend_crendProcessSubframe( sbaInput->crendWrapper, sbaInput->base.inConfig, outConfig, NULL, NULL,
                                                       NULL, NULL, NULL, p_tmpCrendBuffer, p_tmpCrendBuffer, sbaInput->base.inputBuffer.config.numSamplesPerChannel, *sbaInput->base.ctx.pOutSampleRate, pos_idx ) ) != IVAS_ERR_OK )
#else
        if ( ( error = ivas_rend_crendProcess( sbaInput->crendWrapper, sbaInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, p_tmpCrendBuffer, *sbaInput->base.ctx.pOutSampleRate,
                                               getNumSubframesInBuffer( &sbaInput->base.inputBuffer, *sbaInput->base.ctx.pOutSampleRate ), pos_idx ) ) != IVAS_ERR_OK )
#endif
        {
            return error;
        }
@@ -7257,11 +7297,21 @@ static ivas_error renderSbaToBinaural(

        /* call CREND */
#ifdef SPLIT_REND_WITH_HEAD_ROT
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
        if ( ( error = ivas_rend_crendProcessSubframe( sbaInput->crendWrapper, sbaInput->base.inConfig, outConfig, NULL, NULL,
                                                       NULL, NULL, NULL, p_tmpCrendBuffer, p_tmpCrendBuffer, sbaInput->base.inputBuffer.config.numSamplesPerChannel, *sbaInput->base.ctx.pOutSampleRate, 0 ) ) != IVAS_ERR_OK )
#else
        if ( ( error = ivas_rend_crendProcess( sbaInput->crendWrapper, sbaInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, p_tmpCrendBuffer, *sbaInput->base.ctx.pOutSampleRate,
                                               getNumSubframesInBuffer( &outAudio, *sbaInput->base.ctx.pOutSampleRate ), 0 ) ) != IVAS_ERR_OK )
#endif
#else
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
        if ( ( error = ivas_rend_crendProcessSubframe( sbaInput->crendWrapper, sbaInput->base.inConfig, outConfig, NULL, NULL,
                                                       NULL, NULL, NULL, p_tmpCrendBuffer, p_tmpCrendBuffer, sbaInput->base.inputBuffer.config.numSamplesPerChannel, *sbaInput->base.ctx.pOutSampleRate ) ) != IVAS_ERR_OK )
#else
        if ( ( error = ivas_rend_crendProcess( sbaInput->crendWrapper, sbaInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, p_tmpCrendBuffer, *sbaInput->base.ctx.pOutSampleRate,
                                               getNumSubframesInBuffer( &outAudio, *sbaInput->base.ctx.pOutSampleRate ) ) ) != IVAS_ERR_OK )
#endif
#endif
        {
            return error;
@@ -7357,12 +7407,24 @@ static ivas_error renderSbaToBinauralRoom(
    copyBufferTo2dArray( tmpMcBuffer, tmpCrendBuffer );

    /* call CREND */
#ifdef SPLIT_REND_WITH_HEAD_ROT
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
    if ( ( error = ivas_rend_crendProcessSubframe( sbaInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, NULL, NULL,
                                                   NULL, NULL, NULL, p_tmpCrendBuffer, p_tmpCrendBuffer, sbaInput->base.inputBuffer.config.numSamplesPerChannel, *sbaInput->base.ctx.pOutSampleRate, 0 ) ) != IVAS_ERR_OK )
#else
    if ( ( error = ivas_rend_crendProcess( sbaInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig,
                                           NULL, NULL, NULL, NULL, p_tmpCrendBuffer, *sbaInput->base.ctx.pOutSampleRate,
#ifdef SPLIT_REND_WITH_HEAD_ROT
                                           getNumSubframesInBuffer( &outAudio, *sbaInput->base.ctx.pOutSampleRate ), 0 ) ) != IVAS_ERR_OK )
#endif
#else
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
    if ( ( error = ivas_rend_crendProcessSubframe( sbaInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, NULL, NULL,
                                                   NULL, NULL, NULL, p_tmpCrendBuffer, p_tmpCrendBuffer, sbaInput->base.inputBuffer.config.numSamplesPerChannel, *sbaInput->base.ctx.pOutSampleRate ) ) != IVAS_ERR_OK )
#else
    if ( ( error = ivas_rend_crendProcess( sbaInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig,
                                           NULL, NULL, NULL, NULL, p_tmpCrendBuffer, *sbaInput->base.ctx.pOutSampleRate,
                                           getNumSubframesInBuffer( &outAudio, *sbaInput->base.ctx.pOutSampleRate ) ) ) != IVAS_ERR_OK )
#endif
#endif
    {
        return error;