Commit c1f20554 authored by TYAGIRIS's avatar TYAGIRIS
Browse files

BE fixes in ext rend

parent 52c723ba
Loading
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -1528,7 +1528,6 @@ void ivas_rend_CldfbSplitPostRendProcess(
    const IVAS_QUATERNION QuaternionPost,
    float Cldfb_RealBuffer_Binaural[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX],
    float Cldfb_ImagBuffer_Binaural[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX],
    const int16_t sf_idx,
#else
    const IVAS_QUATERNION QuaternionsPost[MAX_PARAM_SPATIAL_SUBFRAMES],
    float Cldfb_RealBuffer_Binaural[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX],
+2 −3
Original line number Diff line number Diff line
@@ -1973,7 +1973,6 @@ void ivas_rend_CldfbSplitPostRendProcess(
    const IVAS_QUATERNION QuaternionPost,
    float Cldfb_RealBuffer_Binaural[][CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX],
    float Cldfb_ImagBuffer_Binaural[][CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX],
    const int16_t sf_idx,
#else
    const IVAS_QUATERNION QuaternionsPost[MAX_PARAM_SPATIAL_SUBFRAMES],
    float Cldfb_RealBuffer_Binaural[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX],
@@ -2032,7 +2031,7 @@ void ivas_rend_CldfbSplitPostRendProcess(
            ImagBuffer[slot_idx] = Cldfb_ImagBuffer_Binaural[ch_idx][slot_idx];
        }

        cldfbSynthesis( RealBuffer, ImagBuffer, &( output[ch_idx][sf_idx * MAX_PARAM_SPATIAL_SUBFRAMES] ), num_cldfb_bands * CLDFB_NO_COL_MAX
        cldfbSynthesis( RealBuffer, ImagBuffer, &( output[ch_idx][0] ), num_cldfb_bands * CLDFB_NO_COL_MAX
#ifdef API_5MS
                                                                            / MAX_PARAM_SPATIAL_SUBFRAMES
#endif
+18 −3
Original line number Diff line number Diff line
@@ -2440,10 +2440,17 @@ static ivas_error ivas_renderMultiTDBinToSplitBinaural(
#ifdef API_5MS
    }
    else
    {
        if ( !useLc3plus )
        {
            bit_len = SplitRendBitRate / FRAMES_PER_SEC;
        }
        else
        {
            bit_len = hSplitBin->hLc3plusEnc->config.ivas_frame_duration_us / 1000;
            bit_len = SplitRendBitRate * bit_len / 1000;
        }
    }
#endif

    while ( pBits->bits_written < bit_len )
@@ -2694,7 +2701,15 @@ ivas_error ivas_renderMultiBinToSplitBinaural(
    }
    else
    {
        bit_len = SplitRendBitRate * hSplitBin->hLc3plusEnc->config.ivas_frame_duration_us / 1000;
        if ( splitCodec == IVAS_SPLIT_REND_CODEC_LCLD )
        {
            bit_len = SplitRendBitRate / FRAMES_PER_SEC;
        }
        else
        {
            bit_len = hSplitBin->hLc3plusEnc->config.ivas_frame_duration_us / 1000;
            bit_len = SplitRendBitRate * bit_len / 1000;
        }
    }
#endif

+44 −17
Original line number Diff line number Diff line
@@ -7636,14 +7636,15 @@ static ivas_error renderSplitBinauralWithPostRot(
    float Cldfb_ImagBuffer_Binaural[BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX];
    ivas_error error;
#ifdef API_5MS
    float Cldfb_RealBuffer_Binaural_5ms[BINAURAL_CHANNELS][CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX];
    float Cldfb_ImagBuffer_Binaural_5ms[BINAURAL_CHANNELS][CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX];
    float Cldfb_RealBuffer_Binaural_5ms[MAX_PARAM_SPATIAL_SUBFRAMES][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX];
    float Cldfb_ImagBuffer_Binaural_5ms[MAX_PARAM_SPATIAL_SUBFRAMES][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX];
#endif
    IVAS_QUATERNION QuaternionsPost[MAX_PARAM_SPATIAL_SUBFRAMES];
    int16_t sf_idx;

    ivas_split_rend_bits_t bits;
    float tmpCrendBuffer[MAX_OUTPUT_CHANNELS][L_FRAME48k];
    float tmpCrendBuffer_sf[BINAURAL_CHANNELS][L_FRAME48k];
    COMBINED_ORIENTATION_HANDLE pCombinedOrientationData;
    SPLIT_POST_REND_WRAPPER *hSplitBin;
    int8_t isPostRendInputCldfb;
@@ -7680,9 +7681,18 @@ static ivas_error renderSplitBinauralWithPostRot(
    else if ( bits.codec == IVAS_SPLIT_REND_CODEC_LC3PLUS && splitBinInput->splitPostRendWrapper.hLc3plusDec == NULL )
    {
        LC3PLUS_CONFIG config;

#ifdef API_5MS
        if ( outAudio.config.numSamplesPerChannel == 240 )
        {
            config.lc3plus_frame_duration_us = bits.codec_frame_size_ms * 1000;
        config.ivas_frame_duration_us = bits.pose_correction == IVAS_SPLIT_REND_POSE_CORRECTION_MODE_NONE ? config.lc3plus_frame_duration_us : 20000;
            config.ivas_frame_duration_us = ( bits.pose_correction == IVAS_SPLIT_REND_POSE_CORRECTION_MODE_NONE ) ? config.lc3plus_frame_duration_us : 20000;
        }
        else
        {
            config.lc3plus_frame_duration_us = 5000;
            config.ivas_frame_duration_us = 20000;
        }
#else
        config.lc3plus_frame_duration_us = 5000;
        config.ivas_frame_duration_us = 20000;
@@ -7701,6 +7711,7 @@ static ivas_error renderSplitBinauralWithPostRot(
    }

#ifdef API_5MS
    outBufNumSamplesPerChannel = outAudio.config.numSamplesPerChannel / pCombinedOrientationData->num_subframes;
    for ( sf_idx = 0; sf_idx < pCombinedOrientationData->num_subframes; sf_idx++ )
#else
    for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ )
@@ -7743,7 +7754,6 @@ static ivas_error renderSplitBinauralWithPostRot(

            preRendFrameSize_ms = bits.codec == IVAS_SPLIT_REND_CODEC_LC3PLUS ? (int16_t) ( hSplitBin->hLc3plusDec->config.ivas_frame_duration_us ) / 1000 : 20;

            outBufNumSamplesPerChannel = outAudio.config.numSamplesPerChannel;
            numSamplesPerChannelCacheSize = (int16_t) ( *splitBinInput->base.ctx.pOutSampleRate * ( preRendFrameSize_ms - bits.codec_frame_size_ms ) / 1000 );

            outBufNumColPerChannel = MAX_PARAM_SPATIAL_SUBFRAMES;
@@ -7772,8 +7782,8 @@ static ivas_error renderSplitBinauralWithPostRot(
                        {
                            for ( slotIdx = 0; slotIdx < CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES; ++slotIdx )
                            {
                                mvr2r( Cldfb_RealBuffer_Binaural[chnlIdx][slotIdx], Cldfb_RealBuffer_Binaural_5ms[chnlIdx][slotIdx], CLDFB_NO_CHANNELS_MAX );
                                mvr2r( Cldfb_ImagBuffer_Binaural[chnlIdx][slotIdx], Cldfb_ImagBuffer_Binaural_5ms[chnlIdx][slotIdx], CLDFB_NO_CHANNELS_MAX );
                                mvr2r( Cldfb_RealBuffer_Binaural[chnlIdx][slotIdx], Cldfb_RealBuffer_Binaural_5ms[sf_idx][chnlIdx][slotIdx], CLDFB_NO_CHANNELS_MAX );
                                mvr2r( Cldfb_ImagBuffer_Binaural[chnlIdx][slotIdx], Cldfb_ImagBuffer_Binaural_5ms[sf_idx][chnlIdx][slotIdx], CLDFB_NO_CHANNELS_MAX );
                            }
                        }
                        /* cache the remaining 15ms */
@@ -7831,11 +7841,11 @@ static ivas_error renderSplitBinauralWithPostRot(
                            {
                                for ( smplIdx = 0; smplIdx < CLDFB_NO_CHANNELS_MAX; ++smplIdx )
                                {
                                    Cldfb_RealBuffer_Binaural_5ms[chnlIdx][slotIdx][smplIdx] = *readPtr++;
                                    Cldfb_RealBuffer_Binaural_5ms[sf_idx][chnlIdx][slotIdx][smplIdx] = *readPtr++;
                                }
                                for ( smplIdx = 0; smplIdx < CLDFB_NO_CHANNELS_MAX; ++smplIdx )
                                {
                                    Cldfb_ImagBuffer_Binaural_5ms[chnlIdx][slotIdx][smplIdx] = *readPtr++;
                                    Cldfb_ImagBuffer_Binaural_5ms[sf_idx][chnlIdx][slotIdx][smplIdx] = *readPtr++;
                                }
                            }
                        }
@@ -7846,10 +7856,10 @@ static ivas_error renderSplitBinauralWithPostRot(
                    {
                        int16_t readOffset = numSamplesPerChannelCacheSize - splitBinInput->numCachedSamples;
                        mvr2r( splitBinInput->bufferData + readOffset,
                               tmpCrendBuffer[0],
                               &tmpCrendBuffer[0][sf_idx * outBufNumSamplesPerChannel],
                               outBufNumSamplesPerChannel );
                        mvr2r( splitBinInput->bufferData + readOffset + numSamplesPerChannelCacheSize,
                               tmpCrendBuffer[1],
                               &tmpCrendBuffer[1][sf_idx * outBufNumSamplesPerChannel],
                               outBufNumSamplesPerChannel );
                        splitBinInput->numCachedSamples -= outBufNumSamplesPerChannel;
                    }
@@ -7887,8 +7897,8 @@ static ivas_error renderSplitBinauralWithPostRot(
#endif
                    {
#ifdef API_5MS
                        RealBuffer[slot_idx] = Cldfb_RealBuffer_Binaural_5ms[ch_idx][slot_idx];
                        ImagBuffer[slot_idx] = Cldfb_ImagBuffer_Binaural_5ms[ch_idx][slot_idx];
                        RealBuffer[slot_idx] = Cldfb_RealBuffer_Binaural_5ms[sf_idx][ch_idx][slot_idx];
                        ImagBuffer[slot_idx] = Cldfb_ImagBuffer_Binaural_5ms[sf_idx][ch_idx][slot_idx];
#else
                    RealBuffer[slot_idx] = Cldfb_RealBuffer_Binaural[ch_idx][slot_idx];
                    ImagBuffer[slot_idx] = Cldfb_ImagBuffer_Binaural[ch_idx][slot_idx];
@@ -7908,21 +7918,38 @@ static ivas_error renderSplitBinauralWithPostRot(
            }
            else if ( bits.pose_correction == IVAS_SPLIT_REND_POSE_CORRECTION_MODE_CLDFB )
            {
#ifdef API_5MS
                mvr2r( &tmpCrendBuffer[0][sf_idx * outBufNumSamplesPerChannel],
                       tmpCrendBuffer_sf[0],
                       outBufNumSamplesPerChannel );
                mvr2r( &tmpCrendBuffer[1][sf_idx * outBufNumSamplesPerChannel],
                       tmpCrendBuffer_sf[1],
                       outBufNumSamplesPerChannel );
#endif
                ivas_rend_CldfbSplitPostRendProcess(
                    hSplitBin->hBinHrSplitPostRend,
                    &hSplitBin->multiBinPoseData,
#ifdef API_5MS
                    QuaternionsPost[sf_idx],
                    Cldfb_RealBuffer_Binaural_5ms,
                    Cldfb_ImagBuffer_Binaural_5ms,
                    sf_idx,
                    Cldfb_RealBuffer_Binaural_5ms[sf_idx],
                    Cldfb_ImagBuffer_Binaural_5ms[sf_idx],
                    tmpCrendBuffer_sf,
#else
                QuaternionsPost,
                Cldfb_RealBuffer_Binaural,
                Cldfb_ImagBuffer_Binaural,
#endif
                tmpCrendBuffer,
#endif
                    isPostRendInputCldfb );

#ifdef API_5MS
                mvr2r( tmpCrendBuffer_sf[0],
                       &tmpCrendBuffer[0][sf_idx * outBufNumSamplesPerChannel],
                       outBufNumSamplesPerChannel );
                mvr2r( tmpCrendBuffer_sf[1],
                       &tmpCrendBuffer[1][sf_idx * outBufNumSamplesPerChannel],
                       outBufNumSamplesPerChannel );
#endif
            }
#ifdef API_5MS
        }