Loading lib_com/options.h +3 −0 Original line number Diff line number Diff line Loading @@ -180,6 +180,9 @@ #ifdef SPLIT_REND_WITH_HEAD_ROT #define SPLIT_REND_POSE_CORRECTION_UNUSED_BITS #define ISAR_BITSTREAM_UPDATE_LC3PLUS /* FhG: Multiple improvements to the ISAR bitstream when LC3plus is used. See MR 1456 for details. */ #ifdef ISAR_BITSTREAM_UPDATE_LC3PLUS #define LC3PLUS_LEA_COMPAT_BITRATES_48_6 /* FhG: treat split-rendering 256kbps lc3plus 10ms 0dof bitrate as sentinel value for LEA compatible 48_6 bitrate (124 kbps per channel) */ #endif #endif #define NONBE_FIX_1058_DECODER_ERROR_WITH_REVERB_ROOM /* FhG: issue 1058: do not initialize EFAP when IntSetup is HOA3 */ #ifdef NONBE_FIX_1058_DECODER_ERROR_WITH_REVERB_ROOM Loading lib_isar/isar_prot.h +8 −0 Original line number Diff line number Diff line Loading @@ -317,6 +317,14 @@ int32_t isar_get_lc3plus_bitrate( const int16_t split_prerender_frame_size_ms ); #endif #ifdef LC3PLUS_LEA_COMPAT_BITRATES_48_6 int32_t isar_get_lc3plus_bitrate( const int32_t SplitRendBitRate, const ISAR_SPLIT_REND_POSE_CORRECTION_MODE poseCorrectionMode, const int32_t nChannels, const int32_t codecFrameDurationUs ); #endif ivas_error isar_split_rend_validate_config( const ISAR_SPLIT_REND_CONFIG_DATA *pSplitRendConfig, const int16_t pcm_out_flag ); Loading lib_isar/isar_splitRendererPre.c +15 −0 Original line number Diff line number Diff line Loading @@ -1969,7 +1969,11 @@ ivas_error split_renderer_open_lc3plus( if ( ( error = ISAR_LC3PLUS_ENC_Open( config, #ifdef ISAR_BITSTREAM_UPDATE_LC3PLUS #ifdef LC3PLUS_LEA_COMPAT_BITRATES_48_6 isar_get_lc3plus_bitrate( pSplitRendConfig->splitRendBitRate, pSplitRendConfig->poseCorrectionMode, config.channels, config.lc3plus_frame_duration_us ), #else isar_get_lcld_bitrate( pSplitRendConfig->splitRendBitRate, pSplitRendConfig->poseCorrectionMode ), #endif #else isar_get_lc3plus_bitrate( pSplitRendConfig->splitRendBitRate, pSplitRendConfig->poseCorrectionMode, (int16_t) ( config.isar_frame_duration_us / 1000 ) ), #endif Loading Loading @@ -2229,7 +2233,18 @@ ivas_error isar_renderMultiTDBinToSplitBinaural( { #ifdef ISAR_BITSTREAM_UPDATE_LC3PLUS #ifdef ISAR_BITSTREAM_UPDATE_LC3PLUS #ifdef LC3PLUS_LEA_COMPAT_BITRATES_48_6 if ( pBits->pose_correction == ISAR_SPLIT_REND_POSE_CORRECTION_MODE_NONE ) { available_bits = isar_get_lc3plus_bitrate( SplitRendBitRate, hSplitBin->multiBinPoseData.poseCorrectionMode, hSplitBin->hLc3plusEnc->config.channels, hSplitBin->hLc3plusEnc->config.lc3plus_frame_duration_us ) / FRAMES_PER_SEC; } else { available_bits = ( SplitRendBitRate / FRAMES_PER_SEC ) - pBits->bits_written; } #else available_bits = ( SplitRendBitRate / FRAMES_PER_SEC ) - pBits->bits_written; #endif if ( ( error = splitRendLc3plusEncodeAndWrite( hSplitBin, pBits, available_bits, in ) ) != IVAS_ERR_OK ) #else available_bits = ( SplitRendBitRate / FRAMES_PER_SEC ) - pBits->bits_written; Loading lib_isar/isar_splitRenderer_utils.c +26 −0 Original line number Diff line number Diff line Loading @@ -563,6 +563,32 @@ int32_t isar_get_lcld_bitrate( return -1; } #ifdef LC3PLUS_LEA_COMPAT_BITRATES_48_6 /*------------------------------------------------------------------------- * Function isar_get_lc3plus_bitrate() * * *------------------------------------------------------------------------*/ int32_t isar_get_lc3plus_bitrate( const int32_t SplitRendBitRate, const ISAR_SPLIT_REND_POSE_CORRECTION_MODE poseCorrectionMode, const int32_t nChannels, const int32_t codecFrameDurationUs ) { int32_t bitrate; bitrate = isar_get_lcld_bitrate( SplitRendBitRate, poseCorrectionMode ); /* Check for LC3plus LEA 48_6 LC3 compatibility mode signalling */ if ( ISAR_SPLIT_REND_POSE_CORRECTION_MODE_NONE == poseCorrectionMode && bitrate == 256000 && nChannels == 2 && codecFrameDurationUs == 10000 ) { bitrate = 2 * 126000; } return bitrate; } #endif #ifndef ISAR_BITSTREAM_UPDATE_LC3PLUS /*------------------------------------------------------------------------- Loading lib_isar/lib_isar_pre_rend.c +11 −0 Original line number Diff line number Diff line Loading @@ -434,7 +434,18 @@ ivas_error ISAR_PRE_REND_MultiBinToSplitBinaural( } #ifdef ISAR_BITSTREAM_UPDATE_LC3PLUS #ifdef LC3PLUS_LEA_COMPAT_BITRATES_48_6 if ( pBits->pose_correction == ISAR_SPLIT_REND_POSE_CORRECTION_MODE_NONE ) { available_bits = isar_get_lc3plus_bitrate( SplitRendBitRate, hSplitBin->multiBinPoseData.poseCorrectionMode, hSplitBin->hLc3plusEnc->config.channels, hSplitBin->hLc3plusEnc->config.lc3plus_frame_duration_us ) / FRAMES_PER_SEC; } else { available_bits = ( SplitRendBitRate / FRAMES_PER_SEC ) - pBits->bits_written; } #else available_bits = ( SplitRendBitRate / FRAMES_PER_SEC ) - pBits->bits_written; #endif if ( ( error = splitRendLc3plusEncodeAndWrite( hSplitBin, pBits, available_bits, output ) ) != IVAS_ERR_OK ) #else if ( ( error = splitRendLc3plusEncodeAndWrite( hSplitBin, pBits, SplitRendBitRate, output ) ) != IVAS_ERR_OK ) Loading Loading
lib_com/options.h +3 −0 Original line number Diff line number Diff line Loading @@ -180,6 +180,9 @@ #ifdef SPLIT_REND_WITH_HEAD_ROT #define SPLIT_REND_POSE_CORRECTION_UNUSED_BITS #define ISAR_BITSTREAM_UPDATE_LC3PLUS /* FhG: Multiple improvements to the ISAR bitstream when LC3plus is used. See MR 1456 for details. */ #ifdef ISAR_BITSTREAM_UPDATE_LC3PLUS #define LC3PLUS_LEA_COMPAT_BITRATES_48_6 /* FhG: treat split-rendering 256kbps lc3plus 10ms 0dof bitrate as sentinel value for LEA compatible 48_6 bitrate (124 kbps per channel) */ #endif #endif #define NONBE_FIX_1058_DECODER_ERROR_WITH_REVERB_ROOM /* FhG: issue 1058: do not initialize EFAP when IntSetup is HOA3 */ #ifdef NONBE_FIX_1058_DECODER_ERROR_WITH_REVERB_ROOM Loading
lib_isar/isar_prot.h +8 −0 Original line number Diff line number Diff line Loading @@ -317,6 +317,14 @@ int32_t isar_get_lc3plus_bitrate( const int16_t split_prerender_frame_size_ms ); #endif #ifdef LC3PLUS_LEA_COMPAT_BITRATES_48_6 int32_t isar_get_lc3plus_bitrate( const int32_t SplitRendBitRate, const ISAR_SPLIT_REND_POSE_CORRECTION_MODE poseCorrectionMode, const int32_t nChannels, const int32_t codecFrameDurationUs ); #endif ivas_error isar_split_rend_validate_config( const ISAR_SPLIT_REND_CONFIG_DATA *pSplitRendConfig, const int16_t pcm_out_flag ); Loading
lib_isar/isar_splitRendererPre.c +15 −0 Original line number Diff line number Diff line Loading @@ -1969,7 +1969,11 @@ ivas_error split_renderer_open_lc3plus( if ( ( error = ISAR_LC3PLUS_ENC_Open( config, #ifdef ISAR_BITSTREAM_UPDATE_LC3PLUS #ifdef LC3PLUS_LEA_COMPAT_BITRATES_48_6 isar_get_lc3plus_bitrate( pSplitRendConfig->splitRendBitRate, pSplitRendConfig->poseCorrectionMode, config.channels, config.lc3plus_frame_duration_us ), #else isar_get_lcld_bitrate( pSplitRendConfig->splitRendBitRate, pSplitRendConfig->poseCorrectionMode ), #endif #else isar_get_lc3plus_bitrate( pSplitRendConfig->splitRendBitRate, pSplitRendConfig->poseCorrectionMode, (int16_t) ( config.isar_frame_duration_us / 1000 ) ), #endif Loading Loading @@ -2229,7 +2233,18 @@ ivas_error isar_renderMultiTDBinToSplitBinaural( { #ifdef ISAR_BITSTREAM_UPDATE_LC3PLUS #ifdef ISAR_BITSTREAM_UPDATE_LC3PLUS #ifdef LC3PLUS_LEA_COMPAT_BITRATES_48_6 if ( pBits->pose_correction == ISAR_SPLIT_REND_POSE_CORRECTION_MODE_NONE ) { available_bits = isar_get_lc3plus_bitrate( SplitRendBitRate, hSplitBin->multiBinPoseData.poseCorrectionMode, hSplitBin->hLc3plusEnc->config.channels, hSplitBin->hLc3plusEnc->config.lc3plus_frame_duration_us ) / FRAMES_PER_SEC; } else { available_bits = ( SplitRendBitRate / FRAMES_PER_SEC ) - pBits->bits_written; } #else available_bits = ( SplitRendBitRate / FRAMES_PER_SEC ) - pBits->bits_written; #endif if ( ( error = splitRendLc3plusEncodeAndWrite( hSplitBin, pBits, available_bits, in ) ) != IVAS_ERR_OK ) #else available_bits = ( SplitRendBitRate / FRAMES_PER_SEC ) - pBits->bits_written; Loading
lib_isar/isar_splitRenderer_utils.c +26 −0 Original line number Diff line number Diff line Loading @@ -563,6 +563,32 @@ int32_t isar_get_lcld_bitrate( return -1; } #ifdef LC3PLUS_LEA_COMPAT_BITRATES_48_6 /*------------------------------------------------------------------------- * Function isar_get_lc3plus_bitrate() * * *------------------------------------------------------------------------*/ int32_t isar_get_lc3plus_bitrate( const int32_t SplitRendBitRate, const ISAR_SPLIT_REND_POSE_CORRECTION_MODE poseCorrectionMode, const int32_t nChannels, const int32_t codecFrameDurationUs ) { int32_t bitrate; bitrate = isar_get_lcld_bitrate( SplitRendBitRate, poseCorrectionMode ); /* Check for LC3plus LEA 48_6 LC3 compatibility mode signalling */ if ( ISAR_SPLIT_REND_POSE_CORRECTION_MODE_NONE == poseCorrectionMode && bitrate == 256000 && nChannels == 2 && codecFrameDurationUs == 10000 ) { bitrate = 2 * 126000; } return bitrate; } #endif #ifndef ISAR_BITSTREAM_UPDATE_LC3PLUS /*------------------------------------------------------------------------- Loading
lib_isar/lib_isar_pre_rend.c +11 −0 Original line number Diff line number Diff line Loading @@ -434,7 +434,18 @@ ivas_error ISAR_PRE_REND_MultiBinToSplitBinaural( } #ifdef ISAR_BITSTREAM_UPDATE_LC3PLUS #ifdef LC3PLUS_LEA_COMPAT_BITRATES_48_6 if ( pBits->pose_correction == ISAR_SPLIT_REND_POSE_CORRECTION_MODE_NONE ) { available_bits = isar_get_lc3plus_bitrate( SplitRendBitRate, hSplitBin->multiBinPoseData.poseCorrectionMode, hSplitBin->hLc3plusEnc->config.channels, hSplitBin->hLc3plusEnc->config.lc3plus_frame_duration_us ) / FRAMES_PER_SEC; } else { available_bits = ( SplitRendBitRate / FRAMES_PER_SEC ) - pBits->bits_written; } #else available_bits = ( SplitRendBitRate / FRAMES_PER_SEC ) - pBits->bits_written; #endif if ( ( error = splitRendLc3plusEncodeAndWrite( hSplitBin, pBits, available_bits, output ) ) != IVAS_ERR_OK ) #else if ( ( error = splitRendLc3plusEncodeAndWrite( hSplitBin, pBits, SplitRendBitRate, output ) ) != IVAS_ERR_OK ) Loading