Loading lib_dec/ivas_init_dec.c +4 −1 Original line number Diff line number Diff line Loading @@ -1073,7 +1073,10 @@ ivas_error ivas_init_decoder( if ( ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CODED ) || ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ) { ivas_dec_init_split_rend( st_ivas ); if ( ( error = ivas_dec_init_split_rend( st_ivas ) ) != IVAS_ERR_OK ) { return error; } } else { Loading lib_rend/ivas_splitRendererPost.c +14 −1 Original line number Diff line number Diff line Loading @@ -1896,18 +1896,31 @@ void ivas_rend_CldfbSplitPostRendProcess( /* Implement CLDFB synthesis */ for ( ch_idx = 0; ch_idx < BINAURAL_CHANNELS; ch_idx++ ) { #ifdef API_5MS float *RealBuffer[CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES]; float *ImagBuffer[CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES]; for ( slot_idx = 0; slot_idx < CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES; slot_idx++ ) #else float *RealBuffer[CLDFB_NO_COL_MAX]; float *ImagBuffer[CLDFB_NO_COL_MAX]; for ( slot_idx = 0; slot_idx < CLDFB_NO_COL_MAX; slot_idx++ ) #endif { RealBuffer[slot_idx] = Cldfb_RealBuffer_Binaural[ch_idx][slot_idx]; ImagBuffer[slot_idx] = Cldfb_ImagBuffer_Binaural[ch_idx][slot_idx]; } cldfbSynthesis( RealBuffer, ImagBuffer, &( output[ch_idx][0] ), num_cldfb_bands * CLDFB_NO_COL_MAX, hBinHrSplitPostRend->cldfbSyn[ch_idx] ); cldfbSynthesis( RealBuffer, ImagBuffer, &( output[ch_idx][0] ), num_cldfb_bands * CLDFB_NO_COL_MAX #ifdef API_5MS / MAX_PARAM_SPATIAL_SUBFRAMES #endif , hBinHrSplitPostRend->cldfbSyn[ch_idx] ); } pop_wmops(); return; Loading lib_rend/lib_rend.c +118 −13 Original line number Diff line number Diff line Loading @@ -60,6 +60,9 @@ #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 ) #ifdef API_5MS #define MAX_CLDFB_BIN_BUFFER_LENGTH ( MAX_CLDFB_BUFFER_LENGTH_PER_CHANNEL * BINAURAL_CHANNELS ) #endif #else #define MAX_BUFFER_LENGTH ( MAX_BUFFER_LENGTH_PER_CHANNEL * MAX_INPUT_CHANNELS ) #endif Loading Loading @@ -2868,12 +2871,24 @@ static ivas_error setRendInputActiveSplitPostRend( rendCtx = inputSplitPostRend->base.ctx; outConfig = *rendCtx.pOutConfig; if ( ( error = allocateInputBaseBufferData( &inputSplitPostRend->bufferData, MAX_BIN_BUFFER_LENGTH ) ) != IVAS_ERR_OK ) if ( ( error = allocateInputBaseBufferData( &inputSplitPostRend->bufferData, #ifdef API_5MS MAX_CLDFB_BIN_BUFFER_LENGTH #else MAX_BIN_BUFFER_LENGTH #endif ) ) != IVAS_ERR_OK ) { return error; } initRendInputBase( &inputSplitPostRend->base, inConfig, id, rendCtx, inputSplitPostRend->bufferData, MAX_BIN_BUFFER_LENGTH ); inputSplitPostRend->bufferData, #ifdef API_5MS MAX_CLDFB_BIN_BUFFER_LENGTH #else MAX_BIN_BUFFER_LENGTH #endif ); inputSplitPostRend->numCachedSamples = 0; if ( ( error = updateSplitPostRendPanGains( inputSplitPostRend, outConfig, hRendCfg ) ) != IVAS_ERR_OK ) Loading Loading @@ -7817,13 +7832,22 @@ static ivas_error renderSplitBinauralWithPostRot( /* decode audio */ if ( splitBinInput->base.inConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CODED ) { /* TODO(sgi): For both codecs: decode 20ms, cache last 15ms for the next 3 rendering calls */ { #ifdef API_5MS if ( bits.codec == IVAS_SPLIT_REND_CODEC_LCLD ) { 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; if ( splitBinInput->numCachedSamples == 0 ) { #endif if ( bits.codec == IVAS_SPLIT_REND_CODEC_LCLD ) { ivas_splitBinLCLDDecProcess( Loading @@ -7832,7 +7856,39 @@ static ivas_error renderSplitBinauralWithPostRot( Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, SplitRendBFI ); #ifndef API_5MS isPostRendInputCldfb = 1; #endif #ifdef API_5MS /* copy data over to 5ms buffer */ for ( chnlIdx = 0; chnlIdx < BINAURAL_CHANNELS; ++chnlIdx ) { 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 ); } } /* 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 ) { for ( chnlIdx = 0; chnlIdx < BINAURAL_CHANNELS; ++chnlIdx ) { for ( smplIdx = 0; smplIdx < CLDFB_NO_CHANNELS_MAX; ++smplIdx ) { *writePtr++ = Cldfb_RealBuffer_Binaural[chnlIdx][slotIdx][smplIdx]; } for ( smplIdx = 0; smplIdx < CLDFB_NO_CHANNELS_MAX; ++smplIdx ) { *writePtr++ = Cldfb_ImagBuffer_Binaural[chnlIdx][slotIdx][smplIdx]; } } } #endif } else { Loading @@ -7841,20 +7897,57 @@ static ivas_error renderSplitBinauralWithPostRot( { return error; } #ifdef API_5MS /* cache the remaining 15ms */ splitBinInput->numCachedSamples = numSamplesPerChannelCacheSize; mvr2r( &tmpCrendBuffer[0][out_buffer_num_samples_per_channel], splitBinInput->bufferData, numSamplesPerChannelCacheSize ); mvr2r( &tmpCrendBuffer[1][out_buffer_num_samples_per_channel], splitBinInput->bufferData + numSamplesPerChannelCacheSize, numSamplesPerChannelCacheSize ); mvr2r( &tmpCrendBuffer[0][out_buffer_num_samples_per_channel], splitBinInput->bufferData, numSamplesPerChannelCacheSize ); mvr2r( &tmpCrendBuffer[1][out_buffer_num_samples_per_channel], splitBinInput->bufferData + numSamplesPerChannelCacheSize, numSamplesPerChannelCacheSize ); #endif } #ifdef API_5MS } else { /* copy from cache */ if ( bits.codec == IVAS_SPLIT_REND_CODEC_LCLD ) { int16_t readOffset = ( numColPerChannelCacheSize - splitBinInput->numCachedSamples ); float *readPtr; readPtr = splitBinInput->bufferData; isPostRendInputCldfb = 1; readPtr += 2 * readOffset * CLDFB_NO_CHANNELS_MAX * BINAURAL_CHANNELS; for ( slotIdx = 0; slotIdx < CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES; ++slotIdx ) { for ( chnlIdx = 0; chnlIdx < BINAURAL_CHANNELS; ++chnlIdx ) { for ( smplIdx = 0; smplIdx < CLDFB_NO_CHANNELS_MAX; ++smplIdx ) { Cldfb_RealBuffer_Binaural_5ms[chnlIdx][slotIdx][smplIdx] = *readPtr++; } for ( smplIdx = 0; smplIdx < CLDFB_NO_CHANNELS_MAX; ++smplIdx ) { Cldfb_ImagBuffer_Binaural_5ms[chnlIdx][slotIdx][smplIdx] = *readPtr++; } } } splitBinInput->numCachedSamples -= out_buffer_num_col_per_channel; } else { int16_t tdToCldfbSampleFact = 1; /* TODO(sgi): */ 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; } } #endif } else { copyBufferTo2dArray( splitBinInput->base.inputBuffer, tmpCrendBuffer ); Loading @@ -7868,10 +7961,17 @@ static ivas_error renderSplitBinauralWithPostRot( for ( ch_idx = 0; ch_idx < BINAURAL_CHANNELS; ch_idx++ ) { #ifdef API_5MS float *RealBuffer[CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES]; float *ImagBuffer[CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES]; for ( slot_idx = 0; slot_idx < CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES; slot_idx++ ) #else float *RealBuffer[CLDFB_NO_COL_MAX]; float *ImagBuffer[CLDFB_NO_COL_MAX]; for ( slot_idx = 0; slot_idx < CLDFB_NO_COL_MAX; slot_idx++ ) #endif { RealBuffer[slot_idx] = Cldfb_RealBuffer_Binaural[ch_idx][slot_idx]; ImagBuffer[slot_idx] = Cldfb_ImagBuffer_Binaural[ch_idx][slot_idx]; Loading @@ -7880,7 +7980,11 @@ static ivas_error renderSplitBinauralWithPostRot( cldfbSynthesis( RealBuffer, ImagBuffer, &( tmpCrendBuffer[ch_idx][0] ), hSplitBin->hBinHrSplitPostRend->cldfbSyn[0]->no_channels * CLDFB_NO_COL_MAX, hSplitBin->hBinHrSplitPostRend->cldfbSyn[0]->no_channels * CLDFB_NO_COL_MAX #ifdef API_5MS / MAX_PARAM_SPATIAL_SUBFRAMES #endif , hSplitBin->hBinHrSplitPostRend->cldfbSyn[ch_idx] ); } } Loading Loading @@ -9411,7 +9515,8 @@ ivas_error IVAS_REND_GetSplitBinauralBitstream( } } hIvasRend->splitRendEncBuffer.config.is_cldfb = cldfb_in; if ( hIvasRend->hRendererConfig->split_rend_config.dof == 0 || hIvasRend->hRendererConfig->split_rend_config.poseCorrectionMode == IVAS_SPLIT_REND_POSE_CORRECTION_MODE_NONE ) if ( hIvasRend->hRendererConfig->split_rend_config.codec == IVAS_SPLIT_REND_CODEC_LC3PLUS && ( hIvasRend->hRendererConfig->split_rend_config.dof == 0 || hIvasRend->hRendererConfig->split_rend_config.poseCorrectionMode == IVAS_SPLIT_REND_POSE_CORRECTION_MODE_NONE ) ) { hIvasRend->splitRendEncBuffer.config.numSamplesPerChannel = hIvasRend->hRendererConfig->split_rend_config.codec_frame_size_ms * ( hIvasRend->sampleRateOut / 1000 ); } Loading Loading
lib_dec/ivas_init_dec.c +4 −1 Original line number Diff line number Diff line Loading @@ -1073,7 +1073,10 @@ ivas_error ivas_init_decoder( if ( ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CODED ) || ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ) { ivas_dec_init_split_rend( st_ivas ); if ( ( error = ivas_dec_init_split_rend( st_ivas ) ) != IVAS_ERR_OK ) { return error; } } else { Loading
lib_rend/ivas_splitRendererPost.c +14 −1 Original line number Diff line number Diff line Loading @@ -1896,18 +1896,31 @@ void ivas_rend_CldfbSplitPostRendProcess( /* Implement CLDFB synthesis */ for ( ch_idx = 0; ch_idx < BINAURAL_CHANNELS; ch_idx++ ) { #ifdef API_5MS float *RealBuffer[CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES]; float *ImagBuffer[CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES]; for ( slot_idx = 0; slot_idx < CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES; slot_idx++ ) #else float *RealBuffer[CLDFB_NO_COL_MAX]; float *ImagBuffer[CLDFB_NO_COL_MAX]; for ( slot_idx = 0; slot_idx < CLDFB_NO_COL_MAX; slot_idx++ ) #endif { RealBuffer[slot_idx] = Cldfb_RealBuffer_Binaural[ch_idx][slot_idx]; ImagBuffer[slot_idx] = Cldfb_ImagBuffer_Binaural[ch_idx][slot_idx]; } cldfbSynthesis( RealBuffer, ImagBuffer, &( output[ch_idx][0] ), num_cldfb_bands * CLDFB_NO_COL_MAX, hBinHrSplitPostRend->cldfbSyn[ch_idx] ); cldfbSynthesis( RealBuffer, ImagBuffer, &( output[ch_idx][0] ), num_cldfb_bands * CLDFB_NO_COL_MAX #ifdef API_5MS / MAX_PARAM_SPATIAL_SUBFRAMES #endif , hBinHrSplitPostRend->cldfbSyn[ch_idx] ); } pop_wmops(); return; Loading
lib_rend/lib_rend.c +118 −13 Original line number Diff line number Diff line Loading @@ -60,6 +60,9 @@ #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 ) #ifdef API_5MS #define MAX_CLDFB_BIN_BUFFER_LENGTH ( MAX_CLDFB_BUFFER_LENGTH_PER_CHANNEL * BINAURAL_CHANNELS ) #endif #else #define MAX_BUFFER_LENGTH ( MAX_BUFFER_LENGTH_PER_CHANNEL * MAX_INPUT_CHANNELS ) #endif Loading Loading @@ -2868,12 +2871,24 @@ static ivas_error setRendInputActiveSplitPostRend( rendCtx = inputSplitPostRend->base.ctx; outConfig = *rendCtx.pOutConfig; if ( ( error = allocateInputBaseBufferData( &inputSplitPostRend->bufferData, MAX_BIN_BUFFER_LENGTH ) ) != IVAS_ERR_OK ) if ( ( error = allocateInputBaseBufferData( &inputSplitPostRend->bufferData, #ifdef API_5MS MAX_CLDFB_BIN_BUFFER_LENGTH #else MAX_BIN_BUFFER_LENGTH #endif ) ) != IVAS_ERR_OK ) { return error; } initRendInputBase( &inputSplitPostRend->base, inConfig, id, rendCtx, inputSplitPostRend->bufferData, MAX_BIN_BUFFER_LENGTH ); inputSplitPostRend->bufferData, #ifdef API_5MS MAX_CLDFB_BIN_BUFFER_LENGTH #else MAX_BIN_BUFFER_LENGTH #endif ); inputSplitPostRend->numCachedSamples = 0; if ( ( error = updateSplitPostRendPanGains( inputSplitPostRend, outConfig, hRendCfg ) ) != IVAS_ERR_OK ) Loading Loading @@ -7817,13 +7832,22 @@ static ivas_error renderSplitBinauralWithPostRot( /* decode audio */ if ( splitBinInput->base.inConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CODED ) { /* TODO(sgi): For both codecs: decode 20ms, cache last 15ms for the next 3 rendering calls */ { #ifdef API_5MS if ( bits.codec == IVAS_SPLIT_REND_CODEC_LCLD ) { 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; if ( splitBinInput->numCachedSamples == 0 ) { #endif if ( bits.codec == IVAS_SPLIT_REND_CODEC_LCLD ) { ivas_splitBinLCLDDecProcess( Loading @@ -7832,7 +7856,39 @@ static ivas_error renderSplitBinauralWithPostRot( Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, SplitRendBFI ); #ifndef API_5MS isPostRendInputCldfb = 1; #endif #ifdef API_5MS /* copy data over to 5ms buffer */ for ( chnlIdx = 0; chnlIdx < BINAURAL_CHANNELS; ++chnlIdx ) { 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 ); } } /* 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 ) { for ( chnlIdx = 0; chnlIdx < BINAURAL_CHANNELS; ++chnlIdx ) { for ( smplIdx = 0; smplIdx < CLDFB_NO_CHANNELS_MAX; ++smplIdx ) { *writePtr++ = Cldfb_RealBuffer_Binaural[chnlIdx][slotIdx][smplIdx]; } for ( smplIdx = 0; smplIdx < CLDFB_NO_CHANNELS_MAX; ++smplIdx ) { *writePtr++ = Cldfb_ImagBuffer_Binaural[chnlIdx][slotIdx][smplIdx]; } } } #endif } else { Loading @@ -7841,20 +7897,57 @@ static ivas_error renderSplitBinauralWithPostRot( { return error; } #ifdef API_5MS /* cache the remaining 15ms */ splitBinInput->numCachedSamples = numSamplesPerChannelCacheSize; mvr2r( &tmpCrendBuffer[0][out_buffer_num_samples_per_channel], splitBinInput->bufferData, numSamplesPerChannelCacheSize ); mvr2r( &tmpCrendBuffer[1][out_buffer_num_samples_per_channel], splitBinInput->bufferData + numSamplesPerChannelCacheSize, numSamplesPerChannelCacheSize ); mvr2r( &tmpCrendBuffer[0][out_buffer_num_samples_per_channel], splitBinInput->bufferData, numSamplesPerChannelCacheSize ); mvr2r( &tmpCrendBuffer[1][out_buffer_num_samples_per_channel], splitBinInput->bufferData + numSamplesPerChannelCacheSize, numSamplesPerChannelCacheSize ); #endif } #ifdef API_5MS } else { /* copy from cache */ if ( bits.codec == IVAS_SPLIT_REND_CODEC_LCLD ) { int16_t readOffset = ( numColPerChannelCacheSize - splitBinInput->numCachedSamples ); float *readPtr; readPtr = splitBinInput->bufferData; isPostRendInputCldfb = 1; readPtr += 2 * readOffset * CLDFB_NO_CHANNELS_MAX * BINAURAL_CHANNELS; for ( slotIdx = 0; slotIdx < CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES; ++slotIdx ) { for ( chnlIdx = 0; chnlIdx < BINAURAL_CHANNELS; ++chnlIdx ) { for ( smplIdx = 0; smplIdx < CLDFB_NO_CHANNELS_MAX; ++smplIdx ) { Cldfb_RealBuffer_Binaural_5ms[chnlIdx][slotIdx][smplIdx] = *readPtr++; } for ( smplIdx = 0; smplIdx < CLDFB_NO_CHANNELS_MAX; ++smplIdx ) { Cldfb_ImagBuffer_Binaural_5ms[chnlIdx][slotIdx][smplIdx] = *readPtr++; } } } splitBinInput->numCachedSamples -= out_buffer_num_col_per_channel; } else { int16_t tdToCldfbSampleFact = 1; /* TODO(sgi): */ 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; } } #endif } else { copyBufferTo2dArray( splitBinInput->base.inputBuffer, tmpCrendBuffer ); Loading @@ -7868,10 +7961,17 @@ static ivas_error renderSplitBinauralWithPostRot( for ( ch_idx = 0; ch_idx < BINAURAL_CHANNELS; ch_idx++ ) { #ifdef API_5MS float *RealBuffer[CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES]; float *ImagBuffer[CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES]; for ( slot_idx = 0; slot_idx < CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES; slot_idx++ ) #else float *RealBuffer[CLDFB_NO_COL_MAX]; float *ImagBuffer[CLDFB_NO_COL_MAX]; for ( slot_idx = 0; slot_idx < CLDFB_NO_COL_MAX; slot_idx++ ) #endif { RealBuffer[slot_idx] = Cldfb_RealBuffer_Binaural[ch_idx][slot_idx]; ImagBuffer[slot_idx] = Cldfb_ImagBuffer_Binaural[ch_idx][slot_idx]; Loading @@ -7880,7 +7980,11 @@ static ivas_error renderSplitBinauralWithPostRot( cldfbSynthesis( RealBuffer, ImagBuffer, &( tmpCrendBuffer[ch_idx][0] ), hSplitBin->hBinHrSplitPostRend->cldfbSyn[0]->no_channels * CLDFB_NO_COL_MAX, hSplitBin->hBinHrSplitPostRend->cldfbSyn[0]->no_channels * CLDFB_NO_COL_MAX #ifdef API_5MS / MAX_PARAM_SPATIAL_SUBFRAMES #endif , hSplitBin->hBinHrSplitPostRend->cldfbSyn[ch_idx] ); } } Loading Loading @@ -9411,7 +9515,8 @@ ivas_error IVAS_REND_GetSplitBinauralBitstream( } } hIvasRend->splitRendEncBuffer.config.is_cldfb = cldfb_in; if ( hIvasRend->hRendererConfig->split_rend_config.dof == 0 || hIvasRend->hRendererConfig->split_rend_config.poseCorrectionMode == IVAS_SPLIT_REND_POSE_CORRECTION_MODE_NONE ) if ( hIvasRend->hRendererConfig->split_rend_config.codec == IVAS_SPLIT_REND_CODEC_LC3PLUS && ( hIvasRend->hRendererConfig->split_rend_config.dof == 0 || hIvasRend->hRendererConfig->split_rend_config.poseCorrectionMode == IVAS_SPLIT_REND_POSE_CORRECTION_MODE_NONE ) ) { hIvasRend->splitRendEncBuffer.config.numSamplesPerChannel = hIvasRend->hRendererConfig->split_rend_config.codec_frame_size_ms * ( hIvasRend->sampleRateOut / 1000 ); } Loading