Loading lib_com/options.h +3 −0 Original line number Diff line number Diff line Loading @@ -107,6 +107,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 #define FIX_1372_ISAR_POST_REND #endif #define NONBE_FIX_1058_DECODER_ERROR_WITH_REVERB_ROOM /* FhG: issue 1058: do not initialize EFAP when IntSetup is HOA3 */ Loading lib_isar/isar_prot.h +8 −0 Original line number Diff line number Diff line Loading @@ -336,6 +336,14 @@ Word32 isar_get_lc3plus_bitrate( const Word16 split_prerender_frame_size_ms ); #endif #ifdef LC3PLUS_LEA_COMPAT_BITRATES_48_6 Word32 isar_get_lc3plus_bitrate( const Word32 SplitRendBitRate, const ISAR_SPLIT_REND_POSE_CORRECTION_MODE poseCorrectionMode, const Word32 nChannels, const Word32 codecFrameDurationUs ); #endif ivas_error isar_split_rend_validate_config( const ISAR_SPLIT_REND_CONFIG_DATA *pSplitRendConfig, const Word16 is_pcm_out ); Loading lib_isar/isar_splitRendererPre.c +15 −0 Original line number Diff line number Diff line Loading @@ -2966,7 +2966,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 @@ -3300,7 +3304,18 @@ ivas_error isar_renderMultiTDBinToSplitBinaural( ELSE { #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_fx, Q_in ) ) != IVAS_ERR_OK ) { return error; Loading lib_isar/isar_splitRenderer_utils.c +27 −0 Original line number Diff line number Diff line Loading @@ -738,6 +738,33 @@ Word32 isar_get_lcld_bitrate( return -1; } #ifdef LC3PLUS_LEA_COMPAT_BITRATES_48_6 /*------------------------------------------------------------------------- * Function isar_get_lc3plus_bitrate() * * *------------------------------------------------------------------------*/ Word32 isar_get_lc3plus_bitrate( const Word32 SplitRendBitRate, const ISAR_SPLIT_REND_POSE_CORRECTION_MODE poseCorrectionMode, const Word32 nChannels, const Word32 codecFrameDurationUs ) { Word32 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 /*------------------------------------------------------------------------- * Function isar_get_lc3plus_bitrate() Loading lib_isar/lib_isar_pre_rend.c +11 −0 Original line number Diff line number Diff line Loading @@ -533,7 +533,18 @@ ivas_error ISAR_PRE_REND_MultiBinToSplitBinaural( assert( Q_out[0] == Q_out[1] ); #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, pOutput_fx, Q_out[0] ) ) != IVAS_ERR_OK ) #else IF( ( error = splitRendLc3plusEncodeAndWrite( hSplitBin, pBits, SplitRendBitRate, pOutput_fx ) ) != IVAS_ERR_OK ) Loading Loading
lib_com/options.h +3 −0 Original line number Diff line number Diff line Loading @@ -107,6 +107,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 #define FIX_1372_ISAR_POST_REND #endif #define NONBE_FIX_1058_DECODER_ERROR_WITH_REVERB_ROOM /* FhG: issue 1058: do not initialize EFAP when IntSetup is HOA3 */ Loading
lib_isar/isar_prot.h +8 −0 Original line number Diff line number Diff line Loading @@ -336,6 +336,14 @@ Word32 isar_get_lc3plus_bitrate( const Word16 split_prerender_frame_size_ms ); #endif #ifdef LC3PLUS_LEA_COMPAT_BITRATES_48_6 Word32 isar_get_lc3plus_bitrate( const Word32 SplitRendBitRate, const ISAR_SPLIT_REND_POSE_CORRECTION_MODE poseCorrectionMode, const Word32 nChannels, const Word32 codecFrameDurationUs ); #endif ivas_error isar_split_rend_validate_config( const ISAR_SPLIT_REND_CONFIG_DATA *pSplitRendConfig, const Word16 is_pcm_out ); Loading
lib_isar/isar_splitRendererPre.c +15 −0 Original line number Diff line number Diff line Loading @@ -2966,7 +2966,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 @@ -3300,7 +3304,18 @@ ivas_error isar_renderMultiTDBinToSplitBinaural( ELSE { #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_fx, Q_in ) ) != IVAS_ERR_OK ) { return error; Loading
lib_isar/isar_splitRenderer_utils.c +27 −0 Original line number Diff line number Diff line Loading @@ -738,6 +738,33 @@ Word32 isar_get_lcld_bitrate( return -1; } #ifdef LC3PLUS_LEA_COMPAT_BITRATES_48_6 /*------------------------------------------------------------------------- * Function isar_get_lc3plus_bitrate() * * *------------------------------------------------------------------------*/ Word32 isar_get_lc3plus_bitrate( const Word32 SplitRendBitRate, const ISAR_SPLIT_REND_POSE_CORRECTION_MODE poseCorrectionMode, const Word32 nChannels, const Word32 codecFrameDurationUs ) { Word32 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 /*------------------------------------------------------------------------- * Function isar_get_lc3plus_bitrate() Loading
lib_isar/lib_isar_pre_rend.c +11 −0 Original line number Diff line number Diff line Loading @@ -533,7 +533,18 @@ ivas_error ISAR_PRE_REND_MultiBinToSplitBinaural( assert( Q_out[0] == Q_out[1] ); #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, pOutput_fx, Q_out[0] ) ) != IVAS_ERR_OK ) #else IF( ( error = splitRendLc3plusEncodeAndWrite( hSplitBin, pBits, SplitRendBitRate, pOutput_fx ) ) != IVAS_ERR_OK ) Loading