Commit 03fae361 authored by Tapani Pihlajakuja's avatar Tapani Pihlajakuja
Browse files

Merge remote-tracking branch 'origin/main' into...

Merge remote-tracking branch 'origin/main' into 1847_basop_port_float_mr_1542_omasa_lbr_signaling_fix
parents 6861b8c1 83baff11
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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 */
+7 −0
Original line number Diff line number Diff line
@@ -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 );
+16 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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;
+29 −0
Original line number Diff line number Diff line
@@ -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()
+13 −0
Original line number Diff line number Diff line
@@ -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;