Commit 2d4ceef6 authored by Sandesh Venkatesh's avatar Sandesh Venkatesh
Browse files

Merge branch 'integrate_com_funcs_lib_enc' into 'main'

Integrate lib_com functions in lib_enc modules

See merge request !391
parents 80e6290c b033717a
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@
 *--------------------------------------------------------------------------*/

/*! r: delay value in ns */
#ifndef IVAS_FLOAT_FIXED
int32_t get_delay(
    const int16_t enc_dec,          /* i  : encoder/decoder flag                */
    const int32_t io_fs,            /* i  : input/output sampling frequency     */
@@ -111,13 +112,7 @@ int32_t get_delay(

    return delay;
}

/*--------------------------------------------------------------------------
 *  get_delay_fx()
 *
 *  Function returns various types of delays in the codec in ns.
 *--------------------------------------------------------------------------*/

#else
Word32 get_delay_fx(                                 /* o  : delay value in ms                         */
                     const Word16 what_delay,        /* i  : what delay? (ENC or DEC)                  */
                     const Word32 io_fs,             /* i  : input/output sampling frequency           */
@@ -130,6 +125,7 @@ Word32 get_delay_fx( /* o : delay value in ms
)
{
    Word32 delay = 0;
    move32();

    IF( EQ_16( what_delay, ENC ) )
    {
@@ -141,17 +137,19 @@ Word32 get_delay_fx( /* o : delay value in ms
        ELSE
        {
            delay = IVAS_ENC_DELAY_NS;
            move32();
            test();
            IF( EQ_16( ivas_format, MASA_FORMAT ) || EQ_16( ivas_format, MASA_ISM_FORMAT ) )
            {
                delay = 0; /* All delay is compensated in the decoder with MASA */
                move32();
            }
        }
        test();
        IF( EQ_16( ivas_format, SBA_FORMAT ) || EQ_16( ivas_format, SBA_ISM_FORMAT ) )
        {
            /* compensate for DirAC/SPAR filterbank delay */
            delay += IVAS_FB_ENC_DELAY_NS;
            delay = L_add( delay, IVAS_FB_ENC_DELAY_NS );
        }
    }
    ELSE
@@ -172,6 +170,7 @@ Word32 get_delay_fx( /* o : delay value in ms
        ELSE /* IVAS */
        {
            delay = IVAS_DEC_DELAY_NS;
            move32();

#ifdef SPLIT_REND_WITH_HEAD_ROT

@@ -181,7 +180,7 @@ Word32 get_delay_fx( /* o : delay value in ms
                IF( hCldfb != NULL )
                {
                    /* compensate for filterbank delay */
                    delay += IVAS_FB_DEC_DELAY_NS;
                    delay = L_add( delay, IVAS_FB_DEC_DELAY_NS );
                }
#ifdef SPLIT_REND_WITH_HEAD_ROT
            }
@@ -189,10 +188,11 @@ Word32 get_delay_fx( /* o : delay value in ms
            test();
            IF( EQ_16( ivas_format, MASA_FORMAT ) || EQ_16( ivas_format, MASA_ISM_FORMAT ) )
            {
                delay += IVAS_ENC_DELAY_NS; /* Compensate also the encoder delay in the decoder with MASA */
                delay = L_add( delay, IVAS_ENC_DELAY_NS ); /* Compensate also the encoder delay in the decoder with MASA */
            }
        }
    }

    return delay;
}
#endif
+12 −11
Original line number Diff line number Diff line
@@ -466,6 +466,7 @@ void ivas_qmetadata_close(
 *------------------------------------------------------------------------*/

/*! r: codeword index */
#ifndef IVAS_FLOAT_FIXED
int16_t masa_sq(
    const float in,         /* i  : input value     */
    const float *threshold, /* i  : partition       */
@@ -484,8 +485,7 @@ int16_t masa_sq(

    return -1;
}

#ifdef IVAS_FLOAT_FIXED
#else
Word16 masa_sq_fx(
    const Word32 in,         /* i  : input value     */
    const Word32 *threshold, /* i  : partition       */
@@ -728,7 +728,7 @@ ivas_error only_reduce_bits_direction_fx(

    return IVAS_ERR_OK;
}
#endif
#else
ivas_error only_reduce_bits_direction(
    int16_t *reduce_bits_out,
    IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure   */
@@ -834,6 +834,7 @@ ivas_error only_reduce_bits_direction(

    return IVAS_ERR_OK;
}
#endif


/*---------------------------------------------------------------
@@ -940,6 +941,7 @@ void update_bits_next_block(
 * Inverse DCT transform for 4D vector
 *---------------------------------------------------------------*/

#ifndef IVAS_FLOAT_FIXED
void invdct4_transform(
    float *v,         /* i  : input vector                */
    uint8_t *invdct_v /* o  : inverse transformed vector  */
@@ -976,8 +978,7 @@ void invdct4_transform(

    return;
}

#ifdef IVAS_FLOAT_FIXED
#else
void invdct4_transform_fx(
    Word32 *v_fx,     /* i  : input vector                */
    UWord8 *invdct_v, /* o  : inverse transformed vector  */
@@ -1052,7 +1053,7 @@ void masa_compensate_two_dir_energy_ratio_index_fx(

    return;
}
#endif
#else
void masa_compensate_two_dir_energy_ratio_index(
    const int16_t ratio_index_1, /* i  : Input ratio for direction 1           */
    const int16_t ratio_index_2, /* i  : Input ratio for direction 2           */
@@ -1091,7 +1092,7 @@ void masa_compensate_two_dir_energy_ratio_index(

    return;
}

#endif

/*---------------------------------------------------------------
 * set_qmetadata_maxbit_req()
@@ -1144,6 +1145,7 @@ void ivas_set_qmetadata_maxbit_req(
 *
 *------------------------------------------------------------------------*/

#ifndef IVAS_FLOAT_FIXED
void ivas_qmetadata_azimuth_elevation_to_direction_vector(
    const float az, /* i  : azimuth          */
    const float el, /* i  : elevation        */
@@ -1160,8 +1162,7 @@ void ivas_qmetadata_azimuth_elevation_to_direction_vector(

    return;
}

#ifdef IVAS_FLOAT_FIXED
#else
void ivas_qmetadata_azimuth_elevation_to_direction_vector_fx(
    const Word32 az, /* i  : azimuth          */
    const Word32 el, /* i  : elevation        */
@@ -1171,8 +1172,8 @@ void ivas_qmetadata_azimuth_elevation_to_direction_vector_fx(
    Word16 radius_length;
    Word16 elevation_fx, azimuth_fx;

    elevation_fx = extract_l( L_shr( Mpy_32_16_1( el, 91 ), 7 ) );
    azimuth_fx = extract_l( L_shr( Mpy_32_16_1( az, 91 ), 7 ) );
    elevation_fx = extract_l( L_shr( Mpy_32_32( el, 5965232 ), 7 ) );
    azimuth_fx = extract_l( L_shr( Mpy_32_32( az, 5965232 ), 7 ) );

    dv[2] = L_shl( getSineWord16R2( elevation_fx ), Q15 ); /* Q30 */
    move32();
+65 −75
Original line number Diff line number Diff line
@@ -43,13 +43,13 @@
#include "ivas_prot_fx.h"
#endif

#ifdef IVAS_FLOAT_FIXED
/*-------------------------------------------------------------------------
 * stereo_dft_config()
 *
 * DFT Stereo Configuration function
 *------------------------------------------------------------------------*/

#ifdef IVAS_FLOAT_FIXED
void stereo_dft_config_fx(
    STEREO_DFT_CONFIG_DATA_HANDLE hConfig, /* o  : DFT stereo configuration                */
    const Word32 brate,                    /* i  : IVAS/CPE/nominal total bitrate          */
@@ -195,80 +195,7 @@ void stereo_dft_config_fx(

    return;
}

/*-------------------------------------------------------------------------
 * stereo_dft_band_config()
 *
 * Stereo DFT bands condfiguration
 *------------------------------------------------------------------------*/

Word16 stereo_dft_band_config_fx(
    Word16 *band_limits,   /* o  : DFT band limits                     */
    const Word16 band_res, /* i  : DFT band resolution                 */
    const Word16 NFFT,     /* i  : analysis/synthesis window length    */
    const Word16 enc_dec   /* i  : flag to indicate enc vs dec         */
)
{
    Word16 nbands;

    /*sanity check*/
    assert( ( EQ_16( band_res, 1 ) || EQ_16( band_res, 0 ) || EQ_16( band_res, 2 ) ) && "stereo DFT: Parameter band resolution not supported!\n" );

    band_limits[0] = 1;
    move16();
    nbands = 0;
    move16();
    WHILE( LT_16( band_limits[nbands++], shr( NFFT, 1 ) ) )
    {
        IF( EQ_16( band_res, 0 ) )
        {
            assert( 0 && "stereo DFT: band config failed!\n" );
        }
        ELSE IF( EQ_16( band_res, 1 ) )
        {
            IF( EQ_16( enc_dec, ENC ) )
            {
                band_limits[nbands] = round_fx( L_mult0( shl( dft_band_limits_erb4[nbands], 2 ), 26214 /* 1.60000002 in Q14 */ ) );
                move16();
            }
            ELSE
            {
                band_limits[nbands] = round_fx( L_mult0( shl( dft_band_limits_erb4[nbands], 1 ), 26214 /* 0.800000012 in Q14 */ ) );
                move16();
            }

            assert( ( LT_16( nbands, STEREO_DFT_ERB4_BANDS ) ) && "stereo DFT: band config failed!\n" );
        }
        ELSE
        {
            IF( EQ_16( enc_dec, ENC ) )
            {
                band_limits[nbands] = round_fx( L_mult0( shl( dft_band_limits_erb8[nbands], 2 ), 26214 /* 1.60000002 in Q14 */ ) );
                move16();
            }
            ELSE
            {
                band_limits[nbands] = round_fx( L_mult0( shl( dft_band_limits_erb8[nbands], 1 ), 26214 /* 0.800000012 in Q14 */ ) );
                move16();
            }

            assert( ( LT_16( nbands, STEREO_DFT_ERB8_BANDS ) ) && "stereo DFT: band config failed!\n" );
        }
    }
    nbands = sub( nbands, 1 );
    band_limits[nbands] = shr( NFFT, 1 ); /*Nyquist Freq*/
    move16();

    return ( nbands );
}
#endif

/*-------------------------------------------------------------------------
 * stereo_dft_config()
 *
 * DFT Stereo Configuration function
 *------------------------------------------------------------------------*/

#else
void stereo_dft_config(
    STEREO_DFT_CONFIG_DATA_HANDLE hConfig, /* o  : DFT stereo configuration                */
    const int32_t brate,                   /* i  : IVAS/CPE/nominal total bitrate          */
@@ -378,6 +305,7 @@ void stereo_dft_config(

    return;
}
#endif

/*-------------------------------------------------------------------------
 * stereo_dft_band_config()
@@ -385,6 +313,67 @@ void stereo_dft_config(
 * Stereo DFT bands condfiguration
 *------------------------------------------------------------------------*/

#ifdef IVAS_FLOAT_FIXED
Word16 stereo_dft_band_config_fx(
    Word16 *band_limits,   /* o  : DFT band limits                     */
    const Word16 band_res, /* i  : DFT band resolution                 */
    const Word16 NFFT,     /* i  : analysis/synthesis window length    */
    const Word16 enc_dec   /* i  : flag to indicate enc vs dec         */
)
{
    Word16 nbands;

    /*sanity check*/
    assert( ( EQ_16( band_res, 1 ) || EQ_16( band_res, 0 ) || EQ_16( band_res, 2 ) ) && "stereo DFT: Parameter band resolution not supported!\n" );

    band_limits[0] = 1;
    move16();
    nbands = 0;
    move16();
    WHILE( LT_16( band_limits[nbands++], shr( NFFT, 1 ) ) )
    {
        IF( EQ_16( band_res, 0 ) )
        {
            assert( 0 && "stereo DFT: band config failed!\n" );
        }
        ELSE IF( EQ_16( band_res, 1 ) )
        {
            IF( enc_dec == ENC )
            {
                band_limits[nbands] = round_fx( L_mult0( shl( dft_band_limits_erb4[nbands], 2 ), 26214 /* 1.60000002 in Q14 */ ) );
                move16();
            }
            ELSE
            {
                band_limits[nbands] = round_fx( L_mult0( shl( dft_band_limits_erb4[nbands], 1 ), 26214 /* 0.800000012 in Q14 */ ) );
                move16();
            }

            assert( ( LT_16( nbands, STEREO_DFT_ERB4_BANDS ) ) && "stereo DFT: band config failed!\n" );
        }
        ELSE
        {
            IF( enc_dec == ENC )
            {
                band_limits[nbands] = round_fx( L_mult0( shl( dft_band_limits_erb8[nbands], 2 ), 26214 /* 1.60000002 in Q14 */ ) );
                move16();
            }
            ELSE
            {
                band_limits[nbands] = round_fx( L_mult0( shl( dft_band_limits_erb8[nbands], 1 ), 26214 /* 0.800000012 in Q14 */ ) );
                move16();
            }

            assert( ( LT_16( nbands, STEREO_DFT_ERB8_BANDS ) ) && "stereo DFT: band config failed!\n" );
        }
    }
    nbands = sub( nbands, 1 );
    band_limits[nbands] = shr( NFFT, 1 ); /*Nyquist Freq*/
    move16();

    return ( nbands );
}
#else
int16_t stereo_dft_band_config(
    int16_t *band_limits,   /* o  : DFT band limits                     */
    const int16_t band_res, /* i  : DFT band resolution                 */
@@ -437,3 +426,4 @@ int16_t stereo_dft_band_config(

    return ( nbands );
}
#endif
+49 −31
Original line number Diff line number Diff line
@@ -84,47 +84,54 @@ void stereo_mdct_init_bands_fx(
    IF( tmp_tcx_mode > 0 )
    {
        tcx_mode = tmp_tcx_mode;
        L_frameTCX = ( tcx_mode == TCX_20_CORE ) ? L_frame : ( L_frame / 2 );
        move16();
        L_frameTCX = EQ_16( tcx_mode, TCX_20_CORE ) ? L_frame : ( L_frame / 2 );
        move16();
    }
    ELSE
    {
        /*transition frame*/
        L_frameTCX = L_frame + L_frame / 4;
        L_frameTCX = add( L_frame, L_frame / 4 );
        tcx_mode = TCX_20_CORE;
        move16();
    }

    /* select table */
    IF( L_frame == L_FRAME48k )
    IF( EQ_16( L_frame, L_FRAME48k ) )
    {
        sfbParam.steBands = mdctStereoBands_32000_640;

        cnt = ( tcx_mode == TCX_20_CORE ? sfbParam.steBands->bdnCnt_TCX20[0] : sfbParam.steBands->bndCnt_TCX10[0] );
        cnt = EQ_16( tcx_mode, TCX_20_CORE ) ? sfbParam.steBands->bdnCnt_TCX20[0] : sfbParam.steBands->bndCnt_TCX10[0];
        move16();

        sfbWidths = ( tcx_mode == TCX_20_CORE ? sfbParam.steBands->bandLengthsTCX20 : sfbParam.steBands->bandLengthsTCX10 );
        sfbWidths = EQ_16( tcx_mode, TCX_20_CORE ) ? sfbParam.steBands->bandLengthsTCX20 : sfbParam.steBands->bandLengthsTCX10;
    }
    ELSE
    {
        IF( element_brate < IVAS_96k )
        IF( LT_32( element_brate, IVAS_96k ) )
        {
            sfbParam.steBands = mdctStereoBands_32000_640;

            SWITCH( L_frame )
            {
                case L_FRAME32k:
                    cnt = ( tcx_mode == TCX_20_CORE ? sfbParam.steBands->bdnCnt_TCX20[1] : sfbParam.steBands->bndCnt_TCX10[1] );
                    cnt = EQ_16( tcx_mode, TCX_20_CORE ) ? sfbParam.steBands->bdnCnt_TCX20[1] : sfbParam.steBands->bndCnt_TCX10[1];
                    move16();
                    BREAK;
                case L_FRAME25_6k:
                    cnt = ( tcx_mode == TCX_20_CORE ? sfbParam.steBands->bdnCnt_TCX20[2] : sfbParam.steBands->bndCnt_TCX10[2] );
                    cnt = EQ_16( tcx_mode, TCX_20_CORE ) ? sfbParam.steBands->bdnCnt_TCX20[2] : sfbParam.steBands->bndCnt_TCX10[2];
                    move16();
                    BREAK;
                case L_FRAME16k:
                    cnt = ( tcx_mode == TCX_20_CORE ? sfbParam.steBands->bdnCnt_TCX20[3] : sfbParam.steBands->bndCnt_TCX10[3] );
                    cnt = EQ_16( tcx_mode, TCX_20_CORE ) ? sfbParam.steBands->bdnCnt_TCX20[3] : sfbParam.steBands->bndCnt_TCX10[3];
                    move16();
                    BREAK;
                default:
                    assert( !"Subband division not defined for this frame size" );
                    return;
            }

            sfbWidths = ( tcx_mode == TCX_20_CORE ? sfbParam.steBands->bandLengthsTCX20 : sfbParam.steBands->bandLengthsTCX10 );
            sfbWidths = EQ_16( tcx_mode, TCX_20_CORE ) ? sfbParam.steBands->bandLengthsTCX20 : sfbParam.steBands->bandLengthsTCX10;
        }
        ELSE
        {
@@ -145,33 +152,40 @@ void stereo_mdct_init_bands_fx(
                    return;
            }

            sfbWidths = ( tcx_mode == TCX_20_CORE ? sfbParam.lpcBndsParam->bandLengthsTCX20 : sfbParam.lpcBndsParam->bandLengthsTCX10 );
            sfbWidths = EQ_16( tcx_mode, TCX_20_CORE ) ? sfbParam.lpcBndsParam->bandLengthsTCX20 : sfbParam.lpcBndsParam->bandLengthsTCX10;
            cnt = 64;
            move16();
        }
    }

    /* calc sfb offsets */
    specStartOffset = 0;
    move16();

    FOR( i = 0; i < cnt; i++ )
    {
        sfbOffset[i] = min( specStartOffset, L_frameTCX );
        specStartOffset += sfbWidths[i];
        sfbOffset[i] = s_min( specStartOffset, L_frameTCX );
        move16();
        specStartOffset = add( specStartOffset, sfbWidths[i] );

        IF( sfbOffset[i] >= L_frameTCX )
        IF( GE_16( sfbOffset[i], L_frameTCX ) )
        {
            BREAK;
        }
    }

    *sfbCnt = i;
    sfbOffset[*sfbCnt] = min( specStartOffset, L_frameTCX );
    move16();
    sfbOffset[*sfbCnt] = s_min( specStartOffset, L_frameTCX );
    move16();

    IF( igf )
    {
        Word16 sfbOldCnt = *sfbCnt;
        Word16 igfSfbStep = hIgfGrid->infoIsRefined ? 2 : 1;
        Word16 k;
        move16();
        move16();

        /* modify sfb bands according to igf grid */
        assert( hIgfGrid != NULL );
@@ -179,44 +193,49 @@ void stereo_mdct_init_bands_fx(
        /* find sfb where IGF starts */
        FOR( i = 0; i <= *sfbCnt; i++ )
        {
            IF( sfbOffset[i] >= hIgfGrid->startLine )
            IF( GE_16( sfbOffset[i], hIgfGrid->startLine ) )
            {
                /* set band border to igf start line */
                sfbOffset[i] = hIgfGrid->startLine;
                move16();
                *sfbCnt = i;
                move16();
                BREAK;
            }
        }
        /* change bands above the igf start line to match igf bands */
        for ( i = 1, k = igfSfbStep; i < hIgfGrid->swb_offset_len; i++, k += igfSfbStep )
        FOR( ( i = 1, k = igfSfbStep ); i < hIgfGrid->swb_offset_len; ( i++, k += igfSfbStep ) )
        {
            sfbOffset[*sfbCnt + i] = hIgfGrid->swb_offset[k];
            sfbOffset[add( *sfbCnt, i )] = hIgfGrid->swb_offset[k];
            move16();
        }

        *sfbCnt += ( hIgfGrid->swb_offset_len - 1 );
        *sfbCnt = add( *sfbCnt, sub( hIgfGrid->swb_offset_len, 1 ) );
        move16();

        /* better save than sorry, overwrite anything that is left above */
        FOR( i = *sfbCnt + 1; i < sfbOldCnt + 1; i++ )
        {
            sfbOffset[i] = 0;
            move16();
        }
    }
    ELSE
    {
        IF( sfbOffset[*sfbCnt] < L_frameTCX )
        IF( LT_16( sfbOffset[*sfbCnt], L_frameTCX ) )
        {
            Word16 nMissingBins = L_frameTCX - sfbOffset[*sfbCnt];
            IF( sfbWidths[i] / 2 < nMissingBins )
            Word16 nMissingBins = sub( L_frameTCX, sfbOffset[*sfbCnt] );
            if ( LT_16( sfbWidths[i] / 2, nMissingBins ) )
            {
                ( *sfbCnt )++;
            }
            sfbOffset[*sfbCnt] = L_frameTCX;
            move16();
        }
    }
    return;
}
#endif

#else
void stereo_mdct_init_bands(
    const int16_t L_frame,       /* i  : frame length                                       */
    const int16_t tmp_tcx_mode,  /* i  : tcx mode (TCX10, TCX 20), -1 if transition frame   */
@@ -365,6 +384,7 @@ void stereo_mdct_init_bands(
    }
    return;
}
#endif

/*-------------------------------------------------------------------*
 *  stereo_mdct_init_igf_start_band()
@@ -389,20 +409,21 @@ void stereo_mdct_init_igf_start_band_fx(

    FOR( i = 0; i < stbParams->sfbCnt; i++ )
    {
        IF( igfStartLine == stbParams->sfbOffset[i] )
        IF( EQ_16( igfStartLine, stbParams->sfbOffset[i] ) )
        {
            stbParams->sfbIgfStart = i;
            move16();
            BREAK;
        }
    }

    stbParams->nBandsStereoCore = stbParams->sfbIgfStart;
    move16();


    return;
}
#endif

#else
void stereo_mdct_init_igf_start_band(
    STEREO_MDCT_BAND_PARAMETERS *stbParams, /* i/o: stereo frequency band parameters    */
    const float transFac,                   /* i  : transform factor                    */
@@ -413,11 +434,7 @@ void stereo_mdct_init_igf_start_band(
    int16_t i, bitRateIndex, igfStartLine;
    const int16_t *swb_offset;

#ifdef IVAS_FLOAT_FIXED
    bitRateIndex = IGF_MapBitRateToIndex( element_brate, bwidth, IVAS_CPE_MDCT, 0 );
#else
    bitRateIndex = IGF_MapBitRateToIndex_flt( element_brate, bwidth, IVAS_CPE_MDCT, 0 );
#endif
    swb_offset = &swb_offset_LB_new[bitRateIndex][1];
    igfStartLine = IGF_ApplyTransFac_flt( swb_offset[0], transFac );

@@ -435,3 +452,4 @@ void stereo_mdct_init_igf_start_band(

    return;
}
#endif
+12 −15
Original line number Diff line number Diff line
@@ -42,14 +42,13 @@
#include "ivas_prot_fx.h"
#endif

#ifdef IVAS_FLOAT_FIXED
#define POINT_2_Q15 6554
/*-------------------------------------------------------------------*
 *  splitAvailableBits()
 *
 *  split available bits between channels based on the split ratio
 *-------------------------------------------------------------------*/

#ifdef IVAS_FLOAT_FIXED
void splitAvailableBits_fx(
    const Word16 total_bits,      /* i  : total available bits for TCX coding   */
    const Word16 split_ratio,     /* i  : split ratio                           */
@@ -60,25 +59,22 @@ void splitAvailableBits_fx(
{
    assert( split_ratio >= 1 && split_ratio < SMDCT_BITRATE_RATIO_RANGE );

    *bits_ch0 = split_ratio * total_bits / SMDCT_BITRATE_RATIO_RANGE;
    /* *bits_ch0 = split_ratio * total_bits / SMDCT_BITRATE_RATIO_RANGE; */
    *bits_ch0 = extract_l( L_mult0( split_ratio, total_bits ) / SMDCT_BITRATE_RATIO_RANGE );
    move16();
    /* for SBA mode bias the distribution towards the W channel */
    if ( split_ratio < 7 && isSBAStereoMode )
    test();
    IF( LT_16( split_ratio, 7 ) && isSBAStereoMode )
    {
        //*bits_ch0 += (int16_t) ( 0.2 * *bits_ch0 );
        *bits_ch0 += (Word16) ( Mpy_32_16_1( 6554, *bits_ch0 ) ); // 0.2 in Q15
        *bits_ch0 = add( *bits_ch0, extract_l( Mpy_32_16_1( 6554 /* 0.2 in Q15 */, *bits_ch0 ) ) );
        move16();
    }
    *bits_ch1 = total_bits - *bits_ch0;
    *bits_ch1 = sub( total_bits, *bits_ch0 );
    move16();

    return;
}
#endif

/*-------------------------------------------------------------------*
 *  splitAvailableBits()
 *
 *  split available bits between channels based on the split ratio
 *-------------------------------------------------------------------*/

#else
void splitAvailableBits(
    const int16_t total_bits,      /* i  : total available bits for TCX coding   */
    const int16_t split_ratio,     /* i  : split ratio                           */
@@ -99,3 +95,4 @@ void splitAvailableBits(

    return;
}
#endif
Loading