| OLD | NEW | 
|    1 /* Copyright (c) 2014, Cisco Systems, INC |    1 /* Copyright (c) 2014, Cisco Systems, INC | 
|    2    Written by XiangMingZhu WeiZhou MinPeng YanWang |    2    Written by XiangMingZhu WeiZhou MinPeng YanWang | 
|    3  |    3  | 
|    4    Redistribution and use in source and binary forms, with or without |    4    Redistribution and use in source and binary forms, with or without | 
|    5    modification, are permitted provided that the following conditions |    5    modification, are permitted provided that the following conditions | 
|    6    are met: |    6    are met: | 
|    7  |    7  | 
|    8    - Redistributions of source code must retain the above copyright |    8    - Redistributions of source code must retain the above copyright | 
|    9    notice, this list of conditions and the following disclaimer. |    9    notice, this list of conditions and the following disclaimer. | 
|   10  |   10  | 
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  100     opus_int32          LF_shp_Q14,             /* I                            
                 */ |  100     opus_int32          LF_shp_Q14,             /* I                            
                 */ | 
|  101     opus_int32          Gain_Q16,               /* I                            
                 */ |  101     opus_int32          Gain_Q16,               /* I                            
                 */ | 
|  102     opus_int            Lambda_Q10,             /* I                            
                 */ |  102     opus_int            Lambda_Q10,             /* I                            
                 */ | 
|  103     opus_int            offset_Q10,             /* I                            
                 */ |  103     opus_int            offset_Q10,             /* I                            
                 */ | 
|  104     opus_int            length,                 /* I    Input length            
                 */ |  104     opus_int            length,                 /* I    Input length            
                 */ | 
|  105     opus_int            subfr,                  /* I    Subframe number         
                 */ |  105     opus_int            subfr,                  /* I    Subframe number         
                 */ | 
|  106     opus_int            shapingLPCOrder,        /* I    Shaping LPC filter order
                 */ |  106     opus_int            shapingLPCOrder,        /* I    Shaping LPC filter order
                 */ | 
|  107     opus_int            predictLPCOrder,        /* I    Prediction filter order 
                 */ |  107     opus_int            predictLPCOrder,        /* I    Prediction filter order 
                 */ | 
|  108     opus_int            warping_Q16,            /* I                            
                 */ |  108     opus_int            warping_Q16,            /* I                            
                 */ | 
|  109     opus_int            nStatesDelayedDecision, /* I    Number of states in deci
     sion tree   */ |  109     opus_int            nStatesDelayedDecision, /* I    Number of states in deci
     sion tree   */ | 
|  110     opus_int            *smpl_buf_idx,          /* I    Index to newest samples 
     in buffers  */ |  110     opus_int            *smpl_buf_idx,          /* I/O  Index to newest samples 
     in buffers  */ | 
|  111     opus_int            decisionDelay           /* I                            
                 */ |  111     opus_int            decisionDelay           /* I                            
                 */ | 
|  112 ); |  112 ); | 
|  113  |  113  | 
|  114 void silk_NSQ_del_dec_sse4_1( |  114 void silk_NSQ_del_dec_sse4_1( | 
|  115     const silk_encoder_state    *psEncC,                                    /* I
     /O  Encoder State                   */ |  115     const silk_encoder_state    *psEncC,                                    /* I
         Encoder State                   */ | 
|  116     silk_nsq_state              *NSQ,                                       /* I
     /O  NSQ state                       */ |  116     silk_nsq_state              *NSQ,                                       /* I
     /O  NSQ state                       */ | 
|  117     SideInfoIndices             *psIndices,                                 /* I
     /O  Quantization Indices            */ |  117     SideInfoIndices             *psIndices,                                 /* I
     /O  Quantization Indices            */ | 
|  118     const opus_int32            x_Q3[],                                     /* I
         Prefiltered input signal        */ |  118     const opus_int32            x_Q3[],                                     /* I
         Prefiltered input signal        */ | 
|  119     opus_int8                   pulses[],                                   /* O
         Quantized pulse signal          */ |  119     opus_int8                   pulses[],                                   /* O
         Quantized pulse signal          */ | 
|  120     const opus_int16            PredCoef_Q12[ 2 * MAX_LPC_ORDER ],          /* I
         Short term prediction coefs     */ |  120     const opus_int16            PredCoef_Q12[ 2 * MAX_LPC_ORDER ],          /* I
         Short term prediction coefs     */ | 
|  121     const opus_int16            LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ],    /* I
         Long term prediction coefs      */ |  121     const opus_int16            LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ],    /* I
         Long term prediction coefs      */ | 
|  122     const opus_int16            AR2_Q13[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ], /
     * I Noise shaping coefs             */ |  122     const opus_int16            AR2_Q13[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ], /
     * I Noise shaping coefs             */ | 
|  123     const opus_int              HarmShapeGain_Q14[ MAX_NB_SUBFR ],          /* I
         Long term shaping coefs         */ |  123     const opus_int              HarmShapeGain_Q14[ MAX_NB_SUBFR ],          /* I
         Long term shaping coefs         */ | 
|  124     const opus_int              Tilt_Q14[ MAX_NB_SUBFR ],                   /* I
         Spectral tilt                   */ |  124     const opus_int              Tilt_Q14[ MAX_NB_SUBFR ],                   /* I
         Spectral tilt                   */ | 
|  125     const opus_int32            LF_shp_Q14[ MAX_NB_SUBFR ],                 /* I
         Low frequency shaping coefs     */ |  125     const opus_int32            LF_shp_Q14[ MAX_NB_SUBFR ],                 /* I
         Low frequency shaping coefs     */ | 
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  227                         if( i != Winner_ind ) { |  227                         if( i != Winner_ind ) { | 
|  228                             psDelDec[ i ].RD_Q10 += ( silk_int32_MAX >> 4 ); |  228                             psDelDec[ i ].RD_Q10 += ( silk_int32_MAX >> 4 ); | 
|  229                             silk_assert( psDelDec[ i ].RD_Q10 >= 0 ); |  229                             silk_assert( psDelDec[ i ].RD_Q10 >= 0 ); | 
|  230                         } |  230                         } | 
|  231                     } |  231                     } | 
|  232  |  232  | 
|  233                     /* Copy final part of signals from winner state to output an
     d long-term filter states */ |  233                     /* Copy final part of signals from winner state to output an
     d long-term filter states */ | 
|  234                     psDD = &psDelDec[ Winner_ind ]; |  234                     psDD = &psDelDec[ Winner_ind ]; | 
|  235                     last_smple_idx = smpl_buf_idx + decisionDelay; |  235                     last_smple_idx = smpl_buf_idx + decisionDelay; | 
|  236                     for( i = 0; i < decisionDelay; i++ ) { |  236                     for( i = 0; i < decisionDelay; i++ ) { | 
|  237                         last_smple_idx = ( last_smple_idx - 1 ) & DECISION_DELAY
     _MASK; |  237                         last_smple_idx = ( last_smple_idx - 1 ) % DECISION_DELAY
     ; | 
 |  238                         if( last_smple_idx < 0 ) last_smple_idx += DECISION_DELA
     Y; | 
|  238                         pulses[   i - decisionDelay ] = (opus_int8)silk_RSHIFT_R
     OUND( psDD->Q_Q10[ last_smple_idx ], 10 ); |  239                         pulses[   i - decisionDelay ] = (opus_int8)silk_RSHIFT_R
     OUND( psDD->Q_Q10[ last_smple_idx ], 10 ); | 
|  239                         pxq[ i - decisionDelay ] = (opus_int16)silk_SAT16( silk_
     RSHIFT_ROUND( |  240                         pxq[ i - decisionDelay ] = (opus_int16)silk_SAT16( silk_
     RSHIFT_ROUND( | 
|  240                             silk_SMULWW( psDD->Xq_Q14[ last_smple_idx ], Gains_Q
     16[ 1 ] ), 14 ) ); |  241                             silk_SMULWW( psDD->Xq_Q14[ last_smple_idx ], Gains_Q
     16[ 1 ] ), 14 ) ); | 
|  241                         NSQ->sLTP_shp_Q14[ NSQ->sLTP_shp_buf_idx - decisionDelay
      + i ] = psDD->Shape_Q14[ last_smple_idx ]; |  242                         NSQ->sLTP_shp_Q14[ NSQ->sLTP_shp_buf_idx - decisionDelay
      + i ] = psDD->Shape_Q14[ last_smple_idx ]; | 
|  242                     } |  243                     } | 
|  243  |  244  | 
|  244                     subfr = 0; |  245                     subfr = 0; | 
|  245                 } |  246                 } | 
|  246  |  247  | 
|  247                 /* Rewhiten with new A coefs */ |  248                 /* Rewhiten with new A coefs */ | 
| (...skipping 30 matching lines...) Expand all  Loading... | 
|  278             Winner_ind = k; |  279             Winner_ind = k; | 
|  279         } |  280         } | 
|  280     } |  281     } | 
|  281  |  282  | 
|  282     /* Copy final part of signals from winner state to output and long-term filt
     er states */ |  283     /* Copy final part of signals from winner state to output and long-term filt
     er states */ | 
|  283     psDD = &psDelDec[ Winner_ind ]; |  284     psDD = &psDelDec[ Winner_ind ]; | 
|  284     psIndices->Seed = psDD->SeedInit; |  285     psIndices->Seed = psDD->SeedInit; | 
|  285     last_smple_idx = smpl_buf_idx + decisionDelay; |  286     last_smple_idx = smpl_buf_idx + decisionDelay; | 
|  286     Gain_Q10 = silk_RSHIFT32( Gains_Q16[ psEncC->nb_subfr - 1 ], 6 ); |  287     Gain_Q10 = silk_RSHIFT32( Gains_Q16[ psEncC->nb_subfr - 1 ], 6 ); | 
|  287     for( i = 0; i < decisionDelay; i++ ) { |  288     for( i = 0; i < decisionDelay; i++ ) { | 
|  288         last_smple_idx = ( last_smple_idx - 1 ) & DECISION_DELAY_MASK; |  289         last_smple_idx = ( last_smple_idx - 1 ) % DECISION_DELAY; | 
 |  290         if( last_smple_idx < 0 ) last_smple_idx += DECISION_DELAY; | 
|  289         pulses[   i - decisionDelay ] = (opus_int8)silk_RSHIFT_ROUND( psDD->Q_Q1
     0[ last_smple_idx ], 10 ); |  291         pulses[   i - decisionDelay ] = (opus_int8)silk_RSHIFT_ROUND( psDD->Q_Q1
     0[ last_smple_idx ], 10 ); | 
|  290         pxq[ i - decisionDelay ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( |  292         pxq[ i - decisionDelay ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( | 
|  291             silk_SMULWW( psDD->Xq_Q14[ last_smple_idx ], Gain_Q10 ), 8 ) ); |  293             silk_SMULWW( psDD->Xq_Q14[ last_smple_idx ], Gain_Q10 ), 8 ) ); | 
|  292         NSQ->sLTP_shp_Q14[ NSQ->sLTP_shp_buf_idx - decisionDelay + i ] = psDD->S
     hape_Q14[ last_smple_idx ]; |  294         NSQ->sLTP_shp_Q14[ NSQ->sLTP_shp_buf_idx - decisionDelay + i ] = psDD->S
     hape_Q14[ last_smple_idx ]; | 
|  293     } |  295     } | 
|  294     silk_memcpy( NSQ->sLPC_Q14, &psDD->sLPC_Q14[ psEncC->subfr_length ], NSQ_LPC
     _BUF_LENGTH * sizeof( opus_int32 ) ); |  296     silk_memcpy( NSQ->sLPC_Q14, &psDD->sLPC_Q14[ psEncC->subfr_length ], NSQ_LPC
     _BUF_LENGTH * sizeof( opus_int32 ) ); | 
|  295     silk_memcpy( NSQ->sAR2_Q14, psDD->sAR2_Q14, sizeof( psDD->sAR2_Q14 ) ); |  297     silk_memcpy( NSQ->sAR2_Q14, psDD->sAR2_Q14, sizeof( psDD->sAR2_Q14 ) ); | 
|  296  |  298  | 
|  297     /* Update states */ |  299     /* Update states */ | 
|  298     NSQ->sLF_AR_shp_Q14 = psDD->LF_AR_Q14; |  300     NSQ->sLF_AR_shp_Q14 = psDD->LF_AR_Q14; | 
|  299     NSQ->lagPrev        = pitchL[ psEncC->nb_subfr - 1 ]; |  301     NSQ->lagPrev        = pitchL[ psEncC->nb_subfr - 1 ]; | 
|  300  |  302  | 
|  301     /* Save quantized speech signal */ |  303     /* Save quantized speech signal */ | 
|  302     /* DEBUG_STORE_DATA( enc.pcm, &NSQ->xq[psEncC->ltp_mem_length], psEncC->fram
     e_length * sizeof( opus_int16 ) ) */ |  | 
|  303     silk_memmove( NSQ->xq,           &NSQ->xq[           psEncC->frame_length ],
      psEncC->ltp_mem_length * sizeof( opus_int16 ) ); |  304     silk_memmove( NSQ->xq,           &NSQ->xq[           psEncC->frame_length ],
      psEncC->ltp_mem_length * sizeof( opus_int16 ) ); | 
|  304     silk_memmove( NSQ->sLTP_shp_Q14, &NSQ->sLTP_shp_Q14[ psEncC->frame_length ],
      psEncC->ltp_mem_length * sizeof( opus_int32 ) ); |  305     silk_memmove( NSQ->sLTP_shp_Q14, &NSQ->sLTP_shp_Q14[ psEncC->frame_length ],
      psEncC->ltp_mem_length * sizeof( opus_int32 ) ); | 
|  305     RESTORE_STACK; |  306     RESTORE_STACK; | 
|  306 } |  307 } | 
|  307  |  308  | 
|  308 /******************************************/ |  309 /******************************************/ | 
|  309 /* Noise shape quantizer for one subframe */ |  310 /* Noise shape quantizer for one subframe */ | 
|  310 /******************************************/ |  311 /******************************************/ | 
|  311 static OPUS_INLINE void silk_noise_shape_quantizer_del_dec_sse4_1( |  312 static OPUS_INLINE void silk_noise_shape_quantizer_del_dec_sse4_1( | 
|  312     silk_nsq_state      *NSQ,                   /* I/O  NSQ state               
                 */ |  313     silk_nsq_state      *NSQ,                   /* I/O  NSQ state               
                 */ | 
| (...skipping 13 matching lines...) Expand all  Loading... | 
|  326     opus_int32          LF_shp_Q14,             /* I                            
                 */ |  327     opus_int32          LF_shp_Q14,             /* I                            
                 */ | 
|  327     opus_int32          Gain_Q16,               /* I                            
                 */ |  328     opus_int32          Gain_Q16,               /* I                            
                 */ | 
|  328     opus_int            Lambda_Q10,             /* I                            
                 */ |  329     opus_int            Lambda_Q10,             /* I                            
                 */ | 
|  329     opus_int            offset_Q10,             /* I                            
                 */ |  330     opus_int            offset_Q10,             /* I                            
                 */ | 
|  330     opus_int            length,                 /* I    Input length            
                 */ |  331     opus_int            length,                 /* I    Input length            
                 */ | 
|  331     opus_int            subfr,                  /* I    Subframe number         
                 */ |  332     opus_int            subfr,                  /* I    Subframe number         
                 */ | 
|  332     opus_int            shapingLPCOrder,        /* I    Shaping LPC filter order
                 */ |  333     opus_int            shapingLPCOrder,        /* I    Shaping LPC filter order
                 */ | 
|  333     opus_int            predictLPCOrder,        /* I    Prediction filter order 
                 */ |  334     opus_int            predictLPCOrder,        /* I    Prediction filter order 
                 */ | 
|  334     opus_int            warping_Q16,            /* I                            
                 */ |  335     opus_int            warping_Q16,            /* I                            
                 */ | 
|  335     opus_int            nStatesDelayedDecision, /* I    Number of states in deci
     sion tree   */ |  336     opus_int            nStatesDelayedDecision, /* I    Number of states in deci
     sion tree   */ | 
|  336     opus_int            *smpl_buf_idx,          /* I    Index to newest samples 
     in buffers  */ |  337     opus_int            *smpl_buf_idx,          /* I/O  Index to newest samples 
     in buffers  */ | 
|  337     opus_int            decisionDelay           /* I                            
                 */ |  338     opus_int            decisionDelay           /* I                            
                 */ | 
|  338 ) |  339 ) | 
|  339 { |  340 { | 
|  340     opus_int     i, j, k, Winner_ind, RDmin_ind, RDmax_ind, last_smple_idx; |  341     opus_int     i, j, k, Winner_ind, RDmin_ind, RDmax_ind, last_smple_idx; | 
|  341     opus_int32   Winner_rand_state; |  342     opus_int32   Winner_rand_state; | 
|  342     opus_int32   LTP_pred_Q14, LPC_pred_Q14, n_AR_Q14, n_LTP_Q14; |  343     opus_int32   LTP_pred_Q14, LPC_pred_Q14, n_AR_Q14, n_LTP_Q14; | 
|  343     opus_int32   n_LF_Q14, r_Q10, rr_Q10, rd1_Q10, rd2_Q10, RDmin_Q10, RDmax_Q10
     ; |  344     opus_int32   n_LF_Q14, r_Q10, rr_Q10, rd1_Q10, rd2_Q10, RDmin_Q10, RDmax_Q10
     ; | 
|  344     opus_int32   q1_Q0, q1_Q10, q2_Q10, exc_Q14, LPC_exc_Q14, xq_Q14, Gain_Q10; |  345     opus_int32   q1_Q0, q1_Q10, q2_Q10, exc_Q14, LPC_exc_Q14, xq_Q14, Gain_Q10; | 
|  345     opus_int32   tmp1, tmp2, sLF_AR_shp_Q14; |  346     opus_int32   tmp1, tmp2, sLF_AR_shp_Q14; | 
|  346     opus_int32   *pred_lag_ptr, *shp_lag_ptr, *psLPC_Q14; |  347     opus_int32   *pred_lag_ptr, *shp_lag_ptr, *psLPC_Q14; | 
| (...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  631                 xq_Q14      = silk_ADD32( LPC_exc_Q14, LPC_pred_Q14 ); |  632                 xq_Q14      = silk_ADD32( LPC_exc_Q14, LPC_pred_Q14 ); | 
|  632  |  633  | 
|  633                 /* Update states */ |  634                 /* Update states */ | 
|  634                 sLF_AR_shp_Q14         = silk_SUB32( xq_Q14, n_AR_Q14 ); |  635                 sLF_AR_shp_Q14         = silk_SUB32( xq_Q14, n_AR_Q14 ); | 
|  635                 psSS[ 1 ].sLTP_shp_Q14 = silk_SUB32( sLF_AR_shp_Q14, n_LF_Q14 ); |  636                 psSS[ 1 ].sLTP_shp_Q14 = silk_SUB32( sLF_AR_shp_Q14, n_LF_Q14 ); | 
|  636                 psSS[ 1 ].LF_AR_Q14    = sLF_AR_shp_Q14; |  637                 psSS[ 1 ].LF_AR_Q14    = sLF_AR_shp_Q14; | 
|  637                 psSS[ 1 ].LPC_exc_Q14  = LPC_exc_Q14; |  638                 psSS[ 1 ].LPC_exc_Q14  = LPC_exc_Q14; | 
|  638                 psSS[ 1 ].xq_Q14       = xq_Q14; |  639                 psSS[ 1 ].xq_Q14       = xq_Q14; | 
|  639             } |  640             } | 
|  640         } |  641         } | 
|  641         *smpl_buf_idx  = ( *smpl_buf_idx - 1 ) & DECISION_DELAY_MASK;           
             /* Index to newest samples              */ |  642         *smpl_buf_idx  = ( *smpl_buf_idx - 1 ) % DECISION_DELAY; | 
|  642         last_smple_idx = ( *smpl_buf_idx + decisionDelay ) & DECISION_DELAY_MASK
     ;       /* Index to decisionDelay old samples   */ |  643         if( *smpl_buf_idx < 0 ) *smpl_buf_idx += DECISION_DELAY; | 
 |  644         last_smple_idx = ( *smpl_buf_idx + decisionDelay ) % DECISION_DELAY; | 
|  643  |  645  | 
|  644         /* Find winner */ |  646         /* Find winner */ | 
|  645         RDmin_Q10 = psSampleState[ 0 ][ 0 ].RD_Q10; |  647         RDmin_Q10 = psSampleState[ 0 ][ 0 ].RD_Q10; | 
|  646         Winner_ind = 0; |  648         Winner_ind = 0; | 
|  647         for( k = 1; k < nStatesDelayedDecision; k++ ) { |  649         for( k = 1; k < nStatesDelayedDecision; k++ ) { | 
|  648             if( psSampleState[ k ][ 0 ].RD_Q10 < RDmin_Q10 ) { |  650             if( psSampleState[ k ][ 0 ].RD_Q10 < RDmin_Q10 ) { | 
|  649                 RDmin_Q10  = psSampleState[ k ][ 0 ].RD_Q10; |  651                 RDmin_Q10  = psSampleState[ k ][ 0 ].RD_Q10; | 
|  650                 Winner_ind = k; |  652                 Winner_ind = k; | 
|  651             } |  653             } | 
|  652         } |  654         } | 
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  848                     psDD->sAR2_Q14[ i ] = silk_SMULWW( gain_adj_Q16, psDD->sAR2_
     Q14[ i ] ); |  850                     psDD->sAR2_Q14[ i ] = silk_SMULWW( gain_adj_Q16, psDD->sAR2_
     Q14[ i ] ); | 
|  849                 } |  851                 } | 
|  850                 for( i = 0; i < DECISION_DELAY; i++ ) { |  852                 for( i = 0; i < DECISION_DELAY; i++ ) { | 
|  851                     psDD->Pred_Q15[  i ] = silk_SMULWW( gain_adj_Q16, psDD->Pred
     _Q15[  i ] ); |  853                     psDD->Pred_Q15[  i ] = silk_SMULWW( gain_adj_Q16, psDD->Pred
     _Q15[  i ] ); | 
|  852                     psDD->Shape_Q14[ i ] = silk_SMULWW( gain_adj_Q16, psDD->Shap
     e_Q14[ i ] ); |  854                     psDD->Shape_Q14[ i ] = silk_SMULWW( gain_adj_Q16, psDD->Shap
     e_Q14[ i ] ); | 
|  853                 } |  855                 } | 
|  854             } |  856             } | 
|  855         } |  857         } | 
|  856     } |  858     } | 
|  857 } |  859 } | 
| OLD | NEW |