From d140b025819c7a9e6d451732e9fcd73b2d1756ea Mon Sep 17 00:00:00 2001 From: Vitor Sessak Date: Sat, 16 Jan 2010 03:54:55 +0000 Subject: SIPR16k decoder Originally committed as revision 21234 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/sipr.h | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) (limited to 'libavcodec/sipr.h') diff --git a/libavcodec/sipr.h b/libavcodec/sipr.h index 02a2916abf..95d895f77b 100644 --- a/libavcodec/sipr.h +++ b/libavcodec/sipr.h @@ -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 @@ typedef struct { 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 @@ typedef struct { 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 @@ typedef struct { 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 */ -- cgit v1.2.3