Commit 5e87ffb7 authored by Archit Tamarapu's avatar Archit Tamarapu
Browse files

port LC3PLUS_LEA_COMPAT_BITRATES_48_6

parent 4bec0fbb
Loading
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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 */
+8 −0
Original line number Diff line number Diff line
@@ -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 );
+15 −0
Original line number Diff line number Diff line
@@ -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
@@ -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;
+27 −0
Original line number Diff line number Diff line
@@ -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()
+11 −0
Original line number Diff line number Diff line
@@ -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 )