Mercurial > libavcodec.hg
diff sipr.h @ 10891:ff7c1c90b6f5 libavcodec
SIPR16k decoder
author | vitor |
---|---|
date | Sat, 16 Jan 2010 03:54:55 +0000 |
parents | de32bff741ea |
children | 34a65026fa06 |
line wrap: on
line diff
--- a/sipr.h Sat Jan 16 03:44:17 2010 +0000 +++ b/sipr.h Sat Jan 16 03:54:55 2010 +0000 @@ -28,6 +28,11 @@ #include "dsputil.h" #include "acelp_pitch_delay.h" +#define LP_FILTER_ORDER_16k 16 +#define L_SUBFR_16k 80 +#define PITCH_MIN 30 +#define PITCH_MAX 281 + #define LSFQ_DIFF_MIN (0.0125 * M_PI) #define LP_FILTER_ORDER 10 @@ -38,6 +43,8 @@ /** Subframe size for all modes except 16k */ #define SUBFR_SIZE 48 +#define SUBFRAME_COUNT_16k 2 + typedef enum { MODE_16k, MODE_8k5, @@ -53,9 +60,9 @@ SiprMode mode; float past_pitch_gain; - float lsf_history[LP_FILTER_ORDER]; + float lsf_history[LP_FILTER_ORDER_16k]; - float excitation[L_INTERPOL + PITCH_DELAY_MAX + 5*SUBFR_SIZE]; + float excitation[L_INTERPOL + PITCH_MAX + 2 * L_SUBFR_16k]; DECLARE_ALIGNED_16(float, synth_buf[LP_FILTER_ORDER + 5*SUBFR_SIZE + 6]); @@ -70,9 +77,19 @@ float postfilter_agc; float postfilter_mem5k0[PITCH_DELAY_MAX + LP_FILTER_ORDER]; float postfilter_syn5k0[LP_FILTER_ORDER + SUBFR_SIZE*5]; + + /* 16k */ + int pitch_lag_prev; + float iir_mem[LP_FILTER_ORDER_16k+1]; + float filt_buf[2][LP_FILTER_ORDER_16k+1]; + float *filt_mem[2]; + float mem_preemph[LP_FILTER_ORDER_16k]; + float synth[LP_FILTER_ORDER_16k]; + double lsp_history_16k[16]; } SiprContext; typedef struct { + int ma_pred_switch; ///< switched moving average predictor int vq_indexes[5]; int pitch_delay[5]; ///< pitch delay int gp_index[5]; ///< adaptive-codebook gain indexes @@ -80,4 +97,11 @@ int gc_index[5]; ///< fixed-codebook gain indexes } SiprParameters; +extern const float ff_pow_0_5[16]; + +void ff_sipr_init_16k(SiprContext *ctx); + +void ff_sipr_decode_frame_16k(SiprContext *ctx, SiprParameters *params, + float *out_data); + #endif /* AVCODEC_SIPR_H */