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 */