ffmpeg / libavcodec / sipr.h @ 2912e87a
History  View  Annotate  Download (3 KB)
1 
/*


2 
* SIPR / ACELP.NET decoder

3 
*

4 
* Copyright (c) 2008 Vladimir Voroshilov

5 
* Copyright (c) 2009 Vitor Sessak

6 
*

7 
* This file is part of Libav.

8 
*

9 
* Libav is free software; you can redistribute it and/or

10 
* modify it under the terms of the GNU Lesser General Public

11 
* License as published by the Free Software Foundation; either

12 
* version 2.1 of the License, or (at your option) any later version.

13 
*

14 
* Libav is distributed in the hope that it will be useful,

15 
* but WITHOUT ANY WARRANTY; without even the implied warranty of

16 
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU

17 
* Lesser General Public License for more details.

18 
*

19 
* You should have received a copy of the GNU Lesser General Public

20 
* License along with Libav; if not, write to the Free Software

21 
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 021101301 USA

22 
*/

23  
24 
#ifndef AVCODEC_SIPR_H

25 
#define AVCODEC_SIPR_H

26  
27 
#include "avcodec.h" 
28 
#include "dsputil.h" 
29 
#include "acelp_pitch_delay.h" 
30  
31 
#define LP_FILTER_ORDER_16k 16 
32 
#define L_SUBFR_16k 80 
33 
#define PITCH_MIN 30 
34 
#define PITCH_MAX 281 
35  
36 
#define LSFQ_DIFF_MIN (0.0125 * M_PI) 
37  
38 
#define LP_FILTER_ORDER 10 
39  
40 
/** Number of past samples needed for excitation interpolation */

41 
#define L_INTERPOL (LP_FILTER_ORDER + 1) 
42  
43 
/** Subframe size for all modes except 16k */

44 
#define SUBFR_SIZE 48 
45  
46 
#define SUBFRAME_COUNT_16k 2 
47  
48 
typedef enum { 
49 
MODE_16k, 
50 
MODE_8k5, 
51 
MODE_6k5, 
52 
MODE_5k0, 
53 
MODE_COUNT 
54 
} SiprMode; 
55  
56 
typedef struct { 
57 
AVCodecContext *avctx; 
58 
DSPContext dsp; 
59  
60 
SiprMode mode; 
61  
62 
float past_pitch_gain;

63 
float lsf_history[LP_FILTER_ORDER_16k];

64  
65 
float excitation[L_INTERPOL + PITCH_MAX + 2 * L_SUBFR_16k]; 
66  
67 
DECLARE_ALIGNED(16, float, synth_buf)[LP_FILTER_ORDER + 5*SUBFR_SIZE + 6]; 
68  
69 
float lsp_history[LP_FILTER_ORDER];

70 
float gain_mem;

71 
float energy_history[4]; 
72 
float highpass_filt_mem[2]; 
73 
float postfilter_mem[PITCH_DELAY_MAX + LP_FILTER_ORDER];

74  
75 
/* 5k0 */

76 
float tilt_mem;

77 
float postfilter_agc;

78 
float postfilter_mem5k0[PITCH_DELAY_MAX + LP_FILTER_ORDER];

79 
float postfilter_syn5k0[LP_FILTER_ORDER + SUBFR_SIZE*5]; 
80  
81 
/* 16k */

82 
int pitch_lag_prev;

83 
float iir_mem[LP_FILTER_ORDER_16k+1]; 
84 
float filt_buf[2][LP_FILTER_ORDER_16k+1]; 
85 
float *filt_mem[2]; 
86 
float mem_preemph[LP_FILTER_ORDER_16k];

87 
float synth[LP_FILTER_ORDER_16k];

88 
double lsp_history_16k[16]; 
89 
} SiprContext; 
90  
91 
typedef struct { 
92 
int ma_pred_switch; ///< switched moving average predictor 
93 
int vq_indexes[5]; 
94 
int pitch_delay[5]; ///< pitch delay 
95 
int gp_index[5]; ///< adaptivecodebook gain indexes 
96 
int16_t fc_indexes[5][10]; ///< fixedcodebook indexes 
97 
int gc_index[5]; ///< fixedcodebook gain indexes 
98 
} SiprParameters; 
99  
100 
extern const float ff_pow_0_5[16]; 
101  
102 
void ff_sipr_init_16k(SiprContext *ctx);

103  
104 
void ff_sipr_decode_frame_16k(SiprContext *ctx, SiprParameters *params,

105 
float *out_data);

106  
107 
#endif /* AVCODEC_SIPR_H */ 