Commit a37b812b authored by Archit Tamarapu's avatar Archit Tamarapu
Browse files

[fix] incorrect frame size at decoder for LCLD and instrumented build

parent b2996c4f
Loading
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -1258,8 +1258,9 @@ ivas_error IVAS_DEC_GetSplitBinauralBitstream(
    ivas_set_split_rend_setup( hSplitBinRend, &st_ivas->hRenderConfig->split_rend_config, st_ivas->hCombinedOrientationData, hSplitRendBits );
    numPoses = hSplitBinRend->splitrend.multiBinPoseData.num_poses;

    if ( hIvasDec->st_ivas->hRenderConfig->split_rend_config.poseCorrectionMode == IVAS_SPLIT_REND_POSE_CORRECTION_MODE_NONE ||
         hIvasDec->st_ivas->hRenderConfig->split_rend_config.dof == 0 )
    if ( hIvasDec->st_ivas->hRenderConfig->split_rend_config.codec == IVAS_SPLIT_REND_CODEC_LC3PLUS &&
         ( hIvasDec->st_ivas->hRenderConfig->split_rend_config.poseCorrectionMode == IVAS_SPLIT_REND_POSE_CORRECTION_MODE_NONE ||
           hIvasDec->st_ivas->hRenderConfig->split_rend_config.dof == 0 ) )
    {
        numSamplesPerChannelToSplitEncode = (int16_t) ( output_Fs / FRAMES_PER_SEC / MAX_PARAM_SPATIAL_SUBFRAMES );
        numSamplesPerChannelCacheSize = numSamplesPerChannelToDecode - numSamplesPerChannelToSplitEncode;
+26 −14
Original line number Diff line number Diff line
@@ -7787,6 +7787,14 @@ static ivas_error renderSplitBinauralWithPostRot(
    COMBINED_ORIENTATION_HANDLE pCombinedOrientationData;
    SPLIT_POST_REND_WRAPPER *hSplitBin;
    int8_t isPostRendInputCldfb;
#ifdef API_5MS
    int16_t chnlIdx, slotIdx, smplIdx;
    int16_t preRendFrameSize_ms;
    int16_t outBufNumSamplesPerChannel, outBufNumColPerChannel;
    int16_t numSamplesPerChannelCacheSize, numColPerChannelCacheSize;
    float *readPtr, *writePtr;
#endif


    isPostRendInputCldfb = 0;

@@ -7876,12 +7884,14 @@ static ivas_error renderSplitBinauralWithPostRot(
            {
                isPostRendInputCldfb = 1;
            }
            int16_t chnlIdx, slotIdx, smplIdx;
            int16_t pre_rend_frame_size_ms = bits.codec == IVAS_SPLIT_REND_CODEC_LC3PLUS ? hSplitBin->hLc3plusDec->config.ivas_frame_duration_us / 1000 : 20;
            int16_t numSamplesPerChannelCacheSize = *splitBinInput->base.ctx.pOutSampleRate * ( pre_rend_frame_size_ms - bits.codec_frame_size_ms ) / 1000;
            int16_t out_buffer_num_samples_per_channel = outAudio.config.numSamplesPerChannel;
            int16_t out_buffer_num_col_per_channel = CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES;
            int16_t numColPerChannelCacheSize = CLDFB_NO_COL_MAX - out_buffer_num_col_per_channel;

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

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

            outBufNumColPerChannel = CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES;
            numColPerChannelCacheSize = CLDFB_NO_COL_MAX - outBufNumColPerChannel;

            if ( splitBinInput->numCachedSamples == 0 )
            {
@@ -7910,7 +7920,6 @@ static ivas_error renderSplitBinauralWithPostRot(
                    }
                    /* cache the remaining 15ms */
                    splitBinInput->numCachedSamples = numColPerChannelCacheSize;
                    float *writePtr;
                    writePtr = splitBinInput->bufferData;
                    for ( slotIdx = CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES; slotIdx < CLDFB_NO_COL_MAX; ++slotIdx )
                    {
@@ -7938,10 +7947,10 @@ static ivas_error renderSplitBinauralWithPostRot(
#ifdef API_5MS
                    /* cache the remaining 15ms */
                    splitBinInput->numCachedSamples = numSamplesPerChannelCacheSize;
                    mvr2r( &tmpCrendBuffer[0][out_buffer_num_samples_per_channel],
                    mvr2r( &tmpCrendBuffer[0][outBufNumSamplesPerChannel],
                           splitBinInput->bufferData,
                           numSamplesPerChannelCacheSize );
                    mvr2r( &tmpCrendBuffer[1][out_buffer_num_samples_per_channel],
                    mvr2r( &tmpCrendBuffer[1][outBufNumSamplesPerChannel],
                           splitBinInput->bufferData + numSamplesPerChannelCacheSize,
                           numSamplesPerChannelCacheSize );
#endif
@@ -7954,7 +7963,6 @@ static ivas_error renderSplitBinauralWithPostRot(
                if ( bits.codec == IVAS_SPLIT_REND_CODEC_LCLD )
                {
                    int16_t readOffset = ( numColPerChannelCacheSize - splitBinInput->numCachedSamples );
                    float *readPtr;
                    readPtr = splitBinInput->bufferData;
                    isPostRendInputCldfb = 1;

@@ -7974,14 +7982,18 @@ static ivas_error renderSplitBinauralWithPostRot(
                        }
                    }

                    splitBinInput->numCachedSamples -= out_buffer_num_col_per_channel;
                    splitBinInput->numCachedSamples -= outBufNumColPerChannel;
                }
                else
                {
                    int16_t readOffset = numSamplesPerChannelCacheSize - splitBinInput->numCachedSamples;
                    mvr2r( splitBinInput->bufferData + readOffset, tmpCrendBuffer[0], out_buffer_num_samples_per_channel );
                    mvr2r( numSamplesPerChannelCacheSize + splitBinInput->bufferData + readOffset, tmpCrendBuffer[1], out_buffer_num_samples_per_channel );
                    splitBinInput->numCachedSamples -= out_buffer_num_samples_per_channel;
                    mvr2r( splitBinInput->bufferData + readOffset,
                           tmpCrendBuffer[0],
                           outBufNumSamplesPerChannel );
                    mvr2r( splitBinInput->bufferData + readOffset + numSamplesPerChannelCacheSize,
                           tmpCrendBuffer[1],
                           outBufNumSamplesPerChannel );
                    splitBinInput->numCachedSamples -= outBufNumSamplesPerChannel;
                }
            }
#endif