Loading lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -110,6 +110,7 @@ #define FIX_1741_REVERB_TIMES_Q_FORMAT /* Philips: reverberation times in Q26 format instead of Q31 */ #define FIX_1831_REVERB_REGRESSION /* Philips: fixes reverb regression issues */ #define FIX_1835_REVERB_ACTIVATION /* FhG: Modified reverberation activation logic and corrected factEQ calculation */ #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) */ #define NONBE_FIX_SBA_SIGNALING_BITS_B /* FhG: issue 1061: option B: signal sba order additionally in OSBA */ #define NONBE_FIX_ISM_XOVER_BR /* FhG: issue 1072: select OSBA coding method depending on number of object and bitrate */ #define NONBE_FIX_1028_1DB_TCX_LEVEL_DROP /* VA: Harmonize the logic setting LP weighting factor between TCX encoder and TCX decoder */ Loading lib_isar/isar_prot.h +7 −0 Original line number Diff line number Diff line Loading @@ -318,7 +318,14 @@ void isar_set_split_rend_ht_setup_fx( IVAS_QUATERNION Quaternions[MAX_PARAM_SPATIAL_SUBFRAMES], Word32 Rmat_fx[MAX_PARAM_SPATIAL_SUBFRAMES][3][3] ); #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 +16 −0 Original line number Diff line number Diff line Loading @@ -2700,7 +2700,11 @@ ivas_error split_renderer_open_lc3plus( config.channels = BINAURAL_CHANNELS; if ( ( error = ISAR_LC3PLUS_ENC_Open( config, #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 &hSplitRendWrapper->hLc3plusEnc ) ) != IVAS_ERR_OK ) { return error; Loading Loading @@ -2993,7 +2997,19 @@ ivas_error isar_renderMultiTDBinToSplitBinaural( } ELSE { #ifdef LC3PLUS_LEA_COMPAT_BITRATES_48_6 IF( EQ_32( 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 ); available_bits = Mpy_32_32( available_bits, ONE_BY_FRAMES_PER_SEC_Q31 ); } ELSE { available_bits = L_sub( Mpy_32_32( SplitRendBitRate, ONE_BY_FRAMES_PER_SEC_Q31 ), 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 +29 −0 Original line number Diff line number Diff line Loading @@ -737,6 +737,35 @@ 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 */ test(); test(); test(); if ( EQ_32( ISAR_SPLIT_REND_POSE_CORRECTION_MODE_NONE, poseCorrectionMode ) && EQ_32( bitrate, 256000 ) && EQ_32( nChannels, 2 ) && EQ_32( codecFrameDurationUs, 10000 ) ) { bitrate = 2 * 126000; move32(); } return bitrate; } #endif /*------------------------------------------------------------------------- * Function isar_split_rend_validate_config() Loading lib_isar/lib_isar_pre_rend.c +13 −0 Original line number Diff line number Diff line Loading @@ -482,7 +482,20 @@ ivas_error ISAR_PRE_REND_MultiBinToSplitBinaural( } assert( Q_out[0] == Q_out[1] ); #ifdef LC3PLUS_LEA_COMPAT_BITRATES_48_6 IF( EQ_32( 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 ); available_bits = Mpy_32_32( available_bits, ONE_BY_FRAMES_PER_SEC_Q31 ); } ELSE { available_bits = L_sub( Mpy_32_32( SplitRendBitRate, ONE_BY_FRAMES_PER_SEC_Q31 ), 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 ) { return error; Loading Loading
lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -110,6 +110,7 @@ #define FIX_1741_REVERB_TIMES_Q_FORMAT /* Philips: reverberation times in Q26 format instead of Q31 */ #define FIX_1831_REVERB_REGRESSION /* Philips: fixes reverb regression issues */ #define FIX_1835_REVERB_ACTIVATION /* FhG: Modified reverberation activation logic and corrected factEQ calculation */ #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) */ #define NONBE_FIX_SBA_SIGNALING_BITS_B /* FhG: issue 1061: option B: signal sba order additionally in OSBA */ #define NONBE_FIX_ISM_XOVER_BR /* FhG: issue 1072: select OSBA coding method depending on number of object and bitrate */ #define NONBE_FIX_1028_1DB_TCX_LEVEL_DROP /* VA: Harmonize the logic setting LP weighting factor between TCX encoder and TCX decoder */ Loading
lib_isar/isar_prot.h +7 −0 Original line number Diff line number Diff line Loading @@ -318,7 +318,14 @@ void isar_set_split_rend_ht_setup_fx( IVAS_QUATERNION Quaternions[MAX_PARAM_SPATIAL_SUBFRAMES], Word32 Rmat_fx[MAX_PARAM_SPATIAL_SUBFRAMES][3][3] ); #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 +16 −0 Original line number Diff line number Diff line Loading @@ -2700,7 +2700,11 @@ ivas_error split_renderer_open_lc3plus( config.channels = BINAURAL_CHANNELS; if ( ( error = ISAR_LC3PLUS_ENC_Open( config, #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 &hSplitRendWrapper->hLc3plusEnc ) ) != IVAS_ERR_OK ) { return error; Loading Loading @@ -2993,7 +2997,19 @@ ivas_error isar_renderMultiTDBinToSplitBinaural( } ELSE { #ifdef LC3PLUS_LEA_COMPAT_BITRATES_48_6 IF( EQ_32( 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 ); available_bits = Mpy_32_32( available_bits, ONE_BY_FRAMES_PER_SEC_Q31 ); } ELSE { available_bits = L_sub( Mpy_32_32( SplitRendBitRate, ONE_BY_FRAMES_PER_SEC_Q31 ), 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 +29 −0 Original line number Diff line number Diff line Loading @@ -737,6 +737,35 @@ 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 */ test(); test(); test(); if ( EQ_32( ISAR_SPLIT_REND_POSE_CORRECTION_MODE_NONE, poseCorrectionMode ) && EQ_32( bitrate, 256000 ) && EQ_32( nChannels, 2 ) && EQ_32( codecFrameDurationUs, 10000 ) ) { bitrate = 2 * 126000; move32(); } return bitrate; } #endif /*------------------------------------------------------------------------- * Function isar_split_rend_validate_config() Loading
lib_isar/lib_isar_pre_rend.c +13 −0 Original line number Diff line number Diff line Loading @@ -482,7 +482,20 @@ ivas_error ISAR_PRE_REND_MultiBinToSplitBinaural( } assert( Q_out[0] == Q_out[1] ); #ifdef LC3PLUS_LEA_COMPAT_BITRATES_48_6 IF( EQ_32( 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 ); available_bits = Mpy_32_32( available_bits, ONE_BY_FRAMES_PER_SEC_Q31 ); } ELSE { available_bits = L_sub( Mpy_32_32( SplitRendBitRate, ONE_BY_FRAMES_PER_SEC_Q31 ), 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 ) { return error; Loading