Commit 9ae2ae46 authored by Sandesh Venkatesh's avatar Sandesh Venkatesh
Browse files

Merge branch '1283-remove-basop_util_add_mant32exp-from-accontextmapping_enc_fx-c' into 'main'

Resolve "Remove BASOP_Util_Add_Mant32Exp() from ACcontextMapping_enc_fx.c"

Closes #1283

See merge request !1109
parents b77708ca e7adcd90
Loading
Loading
Loading
Loading
+64 −76
Original line number Diff line number Diff line
@@ -16,6 +16,9 @@
#include "prot_fx_enc.h"
#include "ivas_prot.h" /* Range coder header file */

#define MAKE_NUMBER_QX( number, QX )     ( ( number ) << ( QX ) )                                      /* evaulated at compile time */
#define MAKE_VARIABLE_QX( variable, QX ) W_shl( W_deposit32_l( L_deposit_l( ( variable ) ) ), ( QX ) ) /* evaluated at run time */

/*-------------------------------------------------------------------*
 * ACcontextMapping_encode2_no_mem_s17_LC_fx()
 *
@@ -1231,23 +1234,18 @@ Word16 RCcontextMapping_encode2_estimate_no_mem_s17_LCS_fx(
    UWord16 t;
    Word16 lastnz, lastnz2;
    Word16 rateFlag;
    Word32 bit_estimate_fx;
    Word16 bit_estimate_e;
    Word64 bit_estimate_fx; /* Q23 */

    Word16 symbol;
    const UWord8 *lookup;
    Word32 nbits2_fx; // Q23
    Word16 nbits2_e;
    Word64 nbits2_fx;

    /* Initialization */
    bit_estimate_fx = 2 * ONE_IN_Q29;
    bit_estimate_e = 2;
    move32();
    move16();
    bit_estimate_fx = MAKE_NUMBER_QX( 2, Q23 );
    move64();

    nbits2_fx = 0;
    nbits2_e = 0;
    move32();
    move16();
    move64();

    /* bits to encode lastnz */
    k = 1;
@@ -1255,15 +1253,13 @@ Word16 RCcontextMapping_encode2_estimate_no_mem_s17_LCS_fx(

    WHILE( LT_16( k, nt / 2 ) )
    {
        bit_estimate_fx = BASOP_Util_Add_Mant32Exp( bit_estimate_fx, bit_estimate_e, ONE_IN_Q30, 1, &bit_estimate_e );
        k = k << 1;
        bit_estimate_fx = W_add( bit_estimate_fx, MAKE_NUMBER_QX( 1, Q23 ) );
        k = shl( k, 1 );
        /* check while condition */
    }

    nbits2_fx = bit_estimate_fx; /* exp(bit_estimate_e) */
    nbits2_e = bit_estimate_e;
    move32();
    move16();
    nbits2_fx = bit_estimate_fx;
    move64();

    IF( hm_cfg )
    {
@@ -1350,9 +1346,8 @@ Word16 RCcontextMapping_encode2_estimate_no_mem_s17_LCS_fx(
            b1 = (Word16) abs( x[b1_i] );
            lev1 = -( 1 << ( NBITS_CONTEXT + NBITS_RATEQ ) );

            bit_estimate_fx = BASOP_Util_Add_Mant32Exp( bit_estimate_fx, bit_estimate_e, s_min( a1, 1 ) * ONE_IN_Q30, 1, &bit_estimate_e ); /* exp(bit_estimate_e) */
            bit_estimate_fx = BASOP_Util_Add_Mant32Exp( bit_estimate_fx, bit_estimate_e, s_min( b1, 1 ) * ONE_IN_Q30, 1, &bit_estimate_e ); /* exp(bit_estimate_e) */

            bit_estimate_fx = W_add( bit_estimate_fx, MAKE_VARIABLE_QX( s_min( a1, 1 ), Q23 ) );
            bit_estimate_fx = W_add( bit_estimate_fx, MAKE_VARIABLE_QX( s_min( b1, 1 ), Q23 ) );
            /* pre-compute address of ari_pk_s17_LC_ext[0][Val_esc] to avoid doing it multiple times inside the loop */
            lookup = &ari_lookup_s17_LC[t] + ( 1 << ( NBITS_CONTEXT + NBITS_RATEQ ) );

@@ -1362,9 +1357,8 @@ Word16 RCcontextMapping_encode2_estimate_no_mem_s17_LCS_fx(
            {
                pki = lookup[lev1]; /* ESC symbol */

                bit_estimate_fx = BASOP_Util_Add_Mant32Exp( bit_estimate_fx, bit_estimate_e, ari_bit_estimate_s17_LC_fx[pki][VAL_ESC], 8, &bit_estimate_e ); /* exp(bit_estimate_e) */
                bit_estimate_fx = BASOP_Util_Add_Mant32Exp( bit_estimate_fx, bit_estimate_e, 2 * ONE_IN_Q29, 2, &bit_estimate_e );                           /* Add 2 LSB bits corresponding to the bit-plane		exp(bit_estimate_e) */

                bit_estimate_fx = W_add( bit_estimate_fx, ari_bit_estimate_s17_LC_fx[pki][VAL_ESC] );
                bit_estimate_fx = W_add( bit_estimate_fx, MAKE_VARIABLE_QX( 2, Q23 ) );
                a1 = shr( a1, 1 );
                b1 = shr( b1, 1 );

@@ -1376,10 +1370,10 @@ Word16 RCcontextMapping_encode2_estimate_no_mem_s17_LCS_fx(
            pki = lookup[lev1];

            symbol = add( a1, i_mult( A_THRES, b1 ) ); /* Q0 */
            bit_estimate_fx = BASOP_Util_Add_Mant32Exp( bit_estimate_fx, bit_estimate_e, ari_bit_estimate_s17_LC_fx[pki][symbol], 8, &bit_estimate_e ); /* exp(bit_estimate_e) */
            bit_estimate_fx = W_add( bit_estimate_fx, ari_bit_estimate_s17_LC_fx[pki][symbol] );

            /* Should we truncate? */
            IF( GT_32( L_shr( bit_estimate_fx, sub( Q16, bit_estimate_e ) ), L_shl( target, Q15 ) ) )
            IF( GT_32( W_extract_l( W_shr( bit_estimate_fx, Q8 ) ), L_shl( target, Q15 ) ) )
            {
                stop2 = 1;
                move16();
@@ -1393,9 +1387,7 @@ Word16 RCcontextMapping_encode2_estimate_no_mem_s17_LCS_fx(
            {
                lastnz2 = add( b1_i, 1 );
                nbits2_fx = bit_estimate_fx;
                move32();
                nbits2_e = bit_estimate_e;
                move16();
                move64();
            }

            /* Update context for next 2-tuple */
@@ -1436,11 +1428,11 @@ Word16 RCcontextMapping_encode2_estimate_no_mem_s17_LCS_fx(

        } /*end of the 2-tuples loop*/

        total_output_bits = round_fx( L_shr( bit_estimate_fx, sub( Q15, bit_estimate_e ) ) ); /* Q0 */
        total_output_bits = round_fx( W_extract_l( W_shr( bit_estimate_fx, Q7 ) ) ); /* Q23 -> Q16 -> Q0 */

        IF( *stop )
        {
            total_output_bits = round_fx( L_shr( nbits2_fx, sub( Q15, nbits2_e ) ) ); /* Q0 */
            total_output_bits = round_fx( W_extract_l( W_shr( nbits2_fx, Q7 ) ) ); /* Q23 -> Q16 -> Q0 */
        }

        IF( stop2 )
@@ -1465,7 +1457,8 @@ Word16 RCcontextMapping_encode2_estimate_no_mem_s17_LCS_fx(
        hm_cfg->numPeakIndices = numPeakIndicesOrig; /* Q0 */
        move16();

        return round_fx( L_add( L_shr( nbits2_fx, sub( Q15, nbits2_e ) ), ONE_IN_Q14 ) ); /* Q0 */

        return round_fx( L_add( W_extract_l( W_shr( nbits2_fx, Q7 ) ), ONE_IN_Q14 ) ); /* Q0 */
    }
    ELSE /* if (!hm_cfg) */
    {
@@ -1531,8 +1524,8 @@ Word16 RCcontextMapping_encode2_estimate_no_mem_s17_LCS_fx(
            move16();
            rateQ = add( rateFlag, extract_l( GT_16( k, shr( nt, 1 ) ) ) ); /* Q0 */

            bit_estimate_fx = BASOP_Util_Add_Mant32Exp( bit_estimate_fx, bit_estimate_e, s_min( a1, 1 ) * ONE_IN_Q30, 1, &bit_estimate_e ); /* exp(bit_estimate_e) */
            bit_estimate_fx = BASOP_Util_Add_Mant32Exp( bit_estimate_fx, bit_estimate_e, s_min( b1, 1 ) * ONE_IN_Q30, 1, &bit_estimate_e ); /* exp(bit_estimate_e) */
            bit_estimate_fx = W_add( bit_estimate_fx, MAKE_VARIABLE_QX( s_min( a1, 1 ), Q23 ) );
            bit_estimate_fx = W_add( bit_estimate_fx, MAKE_VARIABLE_QX( s_min( b1, 1 ), Q23 ) );

            /* pre-compute address of ari_pk_s17_LC_ext[0][Val_esc] to avoid doing it multiple times inside the loop */
            lookup = &ari_lookup_s17_LC[t + shl( rateQ, NBITS_CONTEXT )]; /* Q0 */
@@ -1544,8 +1537,8 @@ Word16 RCcontextMapping_encode2_estimate_no_mem_s17_LCS_fx(
                pki = lookup[( esc_nb << ( NBITS_CONTEXT + NBITS_RATEQ ) )]; /* Q0 */
                move16();

                bit_estimate_fx = BASOP_Util_Add_Mant32Exp( bit_estimate_fx, bit_estimate_e, ari_bit_estimate_s17_LC_fx[pki][VAL_ESC], 8, &bit_estimate_e ); /* exp(bit_estimate_e) */
                bit_estimate_fx = BASOP_Util_Add_Mant32Exp( bit_estimate_fx, bit_estimate_e, 2 * ONE_IN_Q29, 2, &bit_estimate_e );                           /* Add 2 LSB bits corresponding to the bit-plane  exp(bit_estimate_e) */
                bit_estimate_fx = W_add( bit_estimate_fx, ari_bit_estimate_s17_LC_fx[pki][VAL_ESC] );
                bit_estimate_fx = W_add( bit_estimate_fx, MAKE_NUMBER_QX( 2, Q23 ) );

                a1 = shr( a1, 1 );
                b1 = shr( b1, 1 );
@@ -1560,10 +1553,10 @@ Word16 RCcontextMapping_encode2_estimate_no_mem_s17_LCS_fx(
            move16();

            symbol = add( a1, i_mult( A_THRES, b1 ) ); /* Q0 */
            bit_estimate_fx = BASOP_Util_Add_Mant32Exp( bit_estimate_fx, bit_estimate_e, ari_bit_estimate_s17_LC_fx[pki][symbol], 8, &bit_estimate_e ); /* exp(bit_estimate_e) */
            bit_estimate_fx = W_add( bit_estimate_fx, ari_bit_estimate_s17_LC_fx[pki][symbol] );

            /* Should we truncate? */
            IF( GT_32( L_shr( bit_estimate_fx, sub( Q16, bit_estimate_e ) ), L_shl( target, Q15 ) ) ) /* Overflow occured */
            IF( GT_32( W_extract_l( W_shr( bit_estimate_fx, Q8 ) ), L_shl( target, Q15 ) ) )
            {
                overflow_flag = 1;
                move16();
@@ -1573,9 +1566,8 @@ Word16 RCcontextMapping_encode2_estimate_no_mem_s17_LCS_fx(
                IF( abs_s( x[k] ) || abs_s( x[k + 1] ) ) /* No overflow & non-zero tuple */
                {
                    nbits2_fx = bit_estimate_fx; /* exp(bit_estimate_e) */
                    nbits2_e = bit_estimate_e;
                    move32();
                    move16();
                    move64();

                    lastnz2 = add( k, 2 );
                }
            }
@@ -1595,7 +1587,7 @@ Word16 RCcontextMapping_encode2_estimate_no_mem_s17_LCS_fx(

        } /*end of the 2-tuples loop*/

        tot_bits2 = round_fx( L_shr( nbits2_fx, sub( Q15, nbits2_e ) ) );
        tot_bits2 = round_fx( W_extract_l( W_shr( nbits2_fx, Q7 ) ) ); /* Q23 -> Q16 -> Q0 */
        IF( LT_16( lastnz2, lastnz ) )                                 /* Overflow occured because unable to code all tuples */
        {
            overflow_flag = 1;
@@ -1603,7 +1595,7 @@ Word16 RCcontextMapping_encode2_estimate_no_mem_s17_LCS_fx(
        }
        IF( EQ_16( mode, -1 ) )
        {
            tot_bits2 = round_fx( L_shr( bit_estimate_fx, sub( Q15, bit_estimate_e ) ) ); /* Q0 */
            tot_bits2 = round_fx( W_extract_l( W_shr( bit_estimate_fx, Q7 ) ) ); /* Q23 -> Q16 -> Q0 */
        }
        IF( overflow_flag == 0 ) /* No overflow */
        {
@@ -1618,7 +1610,7 @@ Word16 RCcontextMapping_encode2_estimate_no_mem_s17_LCS_fx(
    }
    ELSE
    {
        *stop = round_fx( L_shr( bit_estimate_fx, sub( Q15, bit_estimate_e ) ) ); /* Q0 */
        *stop = round_fx( W_extract_l( W_shr( bit_estimate_fx, Q7 ) ) ); /* Q23 -> Q16 -> Q0 */
        move16();
    }
}
@@ -1669,10 +1661,8 @@ Word16 RCcontextMapping_encode2_estimate_bandWise_start_fx(
        move16();
    }

    hContextMem->bit_estimate_fx = 2; /* Q0 */
    move32();
    hContextMem->bit_estimate_e = Q31;
    move16();
    hContextMem->bit_estimate_fx = MAKE_NUMBER_QX( 2, Q23 );
    move64();


    /* Init */
@@ -1685,15 +1675,15 @@ Word16 RCcontextMapping_encode2_estimate_bandWise_start_fx(

    WHILE( LT_16( k, hContextMem->nt_half ) )
    {
        hContextMem->bit_estimate_fx = L_add( hContextMem->bit_estimate_fx, 1 ); /* exp(bit_estimate_e) */
        move32();
        hContextMem->bit_estimate_fx = W_add( hContextMem->bit_estimate_fx, MAKE_NUMBER_QX( 1, Q23 ) );
        move64();

        k = shl( k, 1 );
        /* check while condition */
    }

    /* bits to encode lastnz */
    hContextMem->nbits_old = extract_l( hContextMem->bit_estimate_fx ); /* Q0 */
    hContextMem->nbits_old = round_fx( W_extract_l( W_shr( hContextMem->bit_estimate_fx, Q7 ) ) ); /* Q0 */
    move16();

    hContextMem->ctx = 0;
@@ -1713,14 +1703,8 @@ Word16 RCcontextMapping_encode2_estimate_bandWise_start_fx(
            BREAK;
        }
    }
    Word16 tmp2 = extract_l( hContextMem->bit_estimate_fx );
    Word16 tmp = norm_l( hContextMem->bit_estimate_fx );
    hContextMem->bit_estimate_e = sub( Q31, tmp );
    move16();
    hContextMem->bit_estimate_fx = L_shl( hContextMem->bit_estimate_fx, tmp ); /* exp(bit_estimate_e) */
    move32();

    return tmp2;
    return hContextMem->nbits_old;
}

/*-------------------------------------------------------------------*
@@ -1777,8 +1761,9 @@ Word16 RCcontextMapping_encode2_estimate_bandWise_fx(
        lev1 = -( 1 << ( NBITS_CONTEXT + NBITS_RATEQ ) ); /* Q0 */

        /* Signs Bits */
        hContextMem->bit_estimate_fx = BASOP_Util_Add_Mant32Exp( hContextMem->bit_estimate_fx, hContextMem->bit_estimate_e, imult3216( ONE_IN_Q30, s_min( a1, 1 ) ), Q1, &hContextMem->bit_estimate_e ); /* exp(hContextMem->bit_estimate_e) */
        hContextMem->bit_estimate_fx = BASOP_Util_Add_Mant32Exp( hContextMem->bit_estimate_fx, hContextMem->bit_estimate_e, imult3216( ONE_IN_Q30, s_min( b1, 1 ) ), Q1, &hContextMem->bit_estimate_e ); /* exp(hContextMem->bit_estimate_e) */
        hContextMem->bit_estimate_fx = W_add( hContextMem->bit_estimate_fx, MAKE_VARIABLE_QX( s_min( a1, 1 ), Q23 ) );
        hContextMem->bit_estimate_fx = W_add( hContextMem->bit_estimate_fx, MAKE_VARIABLE_QX( s_min( b1, 1 ), Q23 ) );

        move32();
        move32();

@@ -1792,11 +1777,12 @@ Word16 RCcontextMapping_encode2_estimate_bandWise_fx(
            pki = lookup[lev1]; /* Q0 */
            move16();

            hContextMem->bit_estimate_fx = BASOP_Util_Add_Mant32Exp( hContextMem->bit_estimate_fx, hContextMem->bit_estimate_e, ari_bit_estimate_s17_LC_fx[pki][VAL_ESC], Q8, &hContextMem->bit_estimate_e ); /* exp(hContextMem->bit_estimate_e) */
            hContextMem->bit_estimate_fx = BASOP_Util_Add_Mant32Exp( hContextMem->bit_estimate_fx, hContextMem->bit_estimate_e, 2 * ONE_IN_Q29, Q2, &hContextMem->bit_estimate_e );                           /* Add the 2 LSB bits that were shifted out	exp(hContextMem->bit_estimate_e) */
            hContextMem->bit_estimate_fx = W_add( hContextMem->bit_estimate_fx, ari_bit_estimate_s17_LC_fx[pki][VAL_ESC] );
            hContextMem->bit_estimate_fx = W_add( hContextMem->bit_estimate_fx, MAKE_NUMBER_QX( 2, Q23 ) );
            move32();
            move32();


            // hContextMem->bit_estimate = hContextMem->bit_estimate + ari_bit_estimate_s17_LC[pki][VAL_ESC];
            // hContextMem->bit_estimate += 2; /* Add the 2 LSB bits that were shifted out */

@@ -1810,7 +1796,8 @@ Word16 RCcontextMapping_encode2_estimate_bandWise_fx(
        pki = lookup[lev1]; /* Q0 */
        move16();
        symbol = add( a1, i_mult( A_THRES, b1 ) ); /* MSB symbol    Q0*/
        hContextMem->bit_estimate_fx = BASOP_Util_Add_Mant32Exp( hContextMem->bit_estimate_fx, hContextMem->bit_estimate_e, ari_bit_estimate_s17_LC_fx[pki][symbol], Q8, &hContextMem->bit_estimate_e ); /* exp(bit_estimate_e) */
        hContextMem->bit_estimate_fx = W_add( hContextMem->bit_estimate_fx, ari_bit_estimate_s17_LC_fx[pki][symbol] );

        move32();
        // hContextMem->bit_estimate = hContextMem->bit_estimate + ari_bit_estimate_s17_LC[pki][symbol];

@@ -1830,9 +1817,10 @@ Word16 RCcontextMapping_encode2_estimate_bandWise_fx(
        move16();

    }                                                                                         /*end of the 2-tuples loop*/
    total_output_bits = round_fx( L_shr( hContextMem->bit_estimate_fx, sub( Q15, hContextMem->bit_estimate_e ) ) ); /* Q0 */
    total_output_bits = round_fx( W_extract_l( W_shr( hContextMem->bit_estimate_fx, Q7 ) ) ); /* Q0 */
    // total_output_bits = (Word16) ( hContextMem->bit_estimate + 0.5f );


    bandBits = sub( total_output_bits, hContextMem->nbits_old ); /* Q0 */
    hContextMem->nbits_old = total_output_bits;                  /* Q0 */
    move16();
+1 −2
Original line number Diff line number Diff line
@@ -2348,8 +2348,7 @@ typedef struct context_rc_mem_struct
{
    int16_t nbits_old;
    int16_t ctx;
    Word32 bit_estimate_fx;
    Word16 bit_estimate_e;
    Word64 bit_estimate_fx; /* Q23 */
    int16_t rateFlag;
    int16_t lastnz;
    int16_t nt_half;