Commit d716d99f authored by vaclav's avatar vaclav
Browse files

remove redundant code under IVAS_CODE_FCB

parent e46fb7a4
Loading
Loading
Loading
Loading
+0 −235
Original line number Diff line number Diff line
@@ -793,242 +793,7 @@ void D_ACELP_decode_43bit_fx( UWord16 idxs[], Word16 code[], Word16 *pulsestrack

    return;
}
#ifdef IVAS_CODE_FCB

/*-------------------------------------------------------*
 * dec_1p_N1()
 *
 * Decode 1 pulse with N+1 bits
 *-------------------------------------------------------*/

static void dec_1p_N1_L_subfr(
    const int32_t index,  /* i  : quantization index    */
    const int16_t nb_pos, /* i  : number of positions   */
    const int16_t N,      /* i  : nb. of bits           */
    int16_t pos[]         /* o  : pulse position        */
)
{
    int16_t i, pos1;
    int32_t mask;

    mask = ( ( 1 << N ) - 1 );
    pos1 = (int16_t) ( index & mask );
    i = (int16_t) ( index >> N ) & 1;

    if ( i == 1 )
    {
        pos1 += nb_pos;
    }

    pos[0] = pos1;

    return;
}

/*-------------------------------------------------------*
 * add_pulses()
 *
 * Add decoded pulses to the codeword
 *-------------------------------------------------------*/

static void add_pulses_L_subfr(
    const int16_t nb_pos,   /* i  : number of positions */
    const int16_t pos[],    /* i  : pulse position      */
    const int16_t nb_pulse, /* i  : nb. of pulses       */
    const int16_t track,    /* i  : no. of the tracks   */
    float code[]            /* i/o: decoded codevector  */
)
{
    int16_t i, k;

    for ( k = 0; k < nb_pulse; k++ )
    {
        i = ( ( pos[k] & ( nb_pos - 1 ) ) * NB_TRACK_FCB_4T ) + track;
        if ( ( pos[k] & nb_pos ) == 0 )
        {
            code[i] += 1.0f;
        }
        else
        {
            code[i] -= 1.0f;
        }
    }

    return;
}

/*----------------------------------------------------------------------------------*
 * dec_acelp_fast()
 *
 * fast algebraic codebook decoder
 *----------------------------------------------------------------------------------*/

void dec_acelp_fast(
    Decoder_State *st,       /* i/o: decoder state structure                 */
    const int16_t cdk_index, /* i  : codebook index                          */
    float code[],            /* o  : algebraic (fixed) codebook excitation   */
    const int16_t L_subfr    /* i  : subframe length                         */
)
{
    int16_t k, pos[7], skip_track;
    int32_t L_index;
    PulseConfig config;

    skip_track = -1;
    set_f( code, 0.0f, L_subfr );

    if ( L_subfr == L_SUBFR )
    {
        config = PulseConfTable[cdk_index];

        if ( cdk_index == 2 )
        {
            dec_acelp_2t32( st, code );
        }
        else if ( config.nb_pulse == 2 )
        {
            /* 10 bits,  2 pulses, 4 tracks  1010 (used only even tracks) */
            for ( k = 0; k < NB_TRACK_FCB_4T - 1; k += 2 )
            {
                L_index = get_next_indice( st, 5 );
                dec_1p_N1( L_index, 4, 0, pos );
                add_pulses( pos, 1, k, code );
            }
        }
        else if ( config.nb_pulse == 3 )
        {
            if ( config.codetrackpos == TRACKPOS_FIXED_FIRST )
            {
                /* 15 bits,  3 pulses, 4 tracks  1110 fixed track to first  ? */
                for ( k = 0; k < NB_TRACK_FCB_4T - 1; k++ )
                {
                    L_index = get_next_indice( st, 5 );
                    dec_1p_N1( L_index, 4, 0, pos );
                    add_pulses( pos, 1, k, code );
                }
            }
            else if ( config.codetrackpos == TRACKPOS_FREE_THREE )
            {
                /* 17 bits,  3 pulses, 4 tracks  (used all tracks) - 1110, 1101, 1011, 0111 */
                skip_track = get_next_indice( st, 2 );
                for ( k = 0; k < NB_TRACK_FCB_4T; k++ )
                {
                    if ( k != skip_track )
                    {
                        L_index = get_next_indice( st, 5 );
                        dec_1p_N1( L_index, 4, 0, pos );
                        add_pulses( pos, 1, k, code );
                    }
                }
            }
        }
        else
        {
            if ( config.bits == 20 )
            {
                skip_track = -1;
            }
            else if ( config.codetrackpos == TRACKPOS_FIXED_FIRST )
            {
                skip_track = 0;
            }
            else if ( config.codetrackpos == TRACKPOS_FREE_ONE )
            {
                skip_track = get_next_indice( st, 2 );
            }

            for ( k = 0; k < NB_TRACK_FCB_4T; k++ )
            {
                if ( k == skip_track )
                {
                    L_index = get_next_indice( st, 9 );
                    dec_2p_2N1( L_index, 4, 0, pos );
                    add_pulses( pos, 2, k, code );
                }
                else
                {
                    L_index = get_next_indice( st, 5 );
                    dec_1p_N1( L_index, 4, 0, pos );
                    add_pulses( pos, 1, k, code );
                }
            }
        }
    }
    else /* L_subfr == 2*L_SUBFR */
    {
        config.bits = cdk_index;

        if ( cdk_index == 14 )
        {
            /* 14 bits, 2 pulses, 2 tracks: 11 (used all tracks) */
            int16_t index, i0, i1;

            index = get_next_indice( st, 14 );

            i0 = ( ( index >> 7 ) & ( NB_POS_FCB_2T_128 - 1 ) ) * NB_TRACK_FCB_2T;
            i1 = ( ( index & ( NB_POS_FCB_2T_128 - 1 ) ) * NB_TRACK_FCB_2T ) + 1;

            code[i0] = -1.0f;
            if ( ( index & 0x2000 ) == 0 )
            {
                code[i0] = 1.0f;
            }

            code[i1] = -1.0f;
            if ( ( index & 0x40 ) == 0 )
            {
                code[i1] = 1.0f;
            }
        }
        else if ( cdk_index == 12 )
        {
            /* 12 bits, 2 pulses, 4 tracks: 1010 (used only even tracks) */
            for ( k = 0; k < NB_TRACK_FCB_4T - 1; k += 2 )
            {
                L_index = get_next_indice( st, 6 );
                dec_1p_N1_L_subfr( L_index, NB_POS_FCB_4T_128, 5, pos );
                add_pulses_L_subfr( NB_POS_FCB_4T_128, pos, 1, k, code );
            }
        }
        else if ( cdk_index == 18 )
        {
            /* 18 bits, 3 pulses, 4 tracks: 1110 (used first three tracks) */
            for ( k = 0; k < NB_TRACK_FCB_4T - 1; k++ )
            {
                L_index = get_next_indice( st, 6 );
                dec_1p_N1_L_subfr( L_index, NB_POS_FCB_4T_128, 5, pos );
                add_pulses_L_subfr( NB_POS_FCB_4T_128, pos, 1, k, code );
            }
        }
        else if ( cdk_index == 20 )
        {
            /* 20 bits, 3 pulses, 4 tracks (used all tracks): 1110, 1101, 1011, 0111 */
            skip_track = get_next_indice( st, 2 );
            for ( k = 0; k < NB_TRACK_FCB_4T; k++ )
            {
                if ( k != skip_track )
                {
                    L_index = get_next_indice( st, 6 );
                    dec_1p_N1_L_subfr( L_index, NB_POS_FCB_4T_128, 5, pos );
                    add_pulses_L_subfr( NB_POS_FCB_4T_128, pos, 1, k, code );
                }
            }
        }
        else if ( cdk_index == 24 )
        {
            /* 24 bits, 4 pulses, 4 tracks: 1111 */
            for ( k = 0; k < NB_TRACK_FCB_4T; k++ )
            {
                L_index = get_next_indice( st, 6 );
                dec_1p_N1_L_subfr( L_index, NB_POS_FCB_4T_128, 5, pos );
                add_pulses_L_subfr( NB_POS_FCB_4T_128, pos, 1, k, code );
            }
        }
    }

    return;
}
#endif

/*-------------------------------------------------------*
 * dec_1p_N1()