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


2 
* IIR filter

3 
* Copyright (c) 2008 Konstantin Shishkov

4 
*

5 
* This file is part of Libav.

6 
*

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

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

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

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

11 
*

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

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

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

15 
* Lesser General Public License for more details.

16 
*

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

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

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

20 
*/

21  
22 
/**

23 
* @file

24 
* IIR filter interface

25 
*/

26  
27 
#ifndef AVCODEC_IIRFILTER_H

28 
#define AVCODEC_IIRFILTER_H

29  
30 
#include "avcodec.h" 
31  
32 
struct FFIIRFilterCoeffs;

33 
struct FFIIRFilterState;

34  
35 
enum IIRFilterType{

36 
FF_FILTER_TYPE_BESSEL, 
37 
FF_FILTER_TYPE_BIQUAD, 
38 
FF_FILTER_TYPE_BUTTERWORTH, 
39 
FF_FILTER_TYPE_CHEBYSHEV, 
40 
FF_FILTER_TYPE_ELLIPTIC, 
41 
}; 
42  
43 
enum IIRFilterMode{

44 
FF_FILTER_MODE_LOWPASS, 
45 
FF_FILTER_MODE_HIGHPASS, 
46 
FF_FILTER_MODE_BANDPASS, 
47 
FF_FILTER_MODE_BANDSTOP, 
48 
}; 
49  
50 
/**

51 
* Initialize filter coefficients.

52 
*

53 
* @param avc a pointer to an arbitrary struct of which the first

54 
* field is a pointer to an AVClass struct

55 
* @param filt_type filter type (e.g. Butterworth)

56 
* @param filt_mode filter mode (e.g. lowpass)

57 
* @param order filter order

58 
* @param cutoff_ratio cutoff to input frequency ratio

59 
* @param stopband stopband to input frequency ratio (used by bandpass and bandstop filter modes)

60 
* @param ripple ripple factor (used only in Chebyshev filters)

61 
*

62 
* @return pointer to filter coefficients structure or NULL if filter cannot be created

63 
*/

64 
struct FFIIRFilterCoeffs* ff_iir_filter_init_coeffs(void *avc, 
65 
enum IIRFilterType filt_type,

66 
enum IIRFilterMode filt_mode,

67 
int order, float cutoff_ratio, 
68 
float stopband, float ripple); 
69  
70 
/**

71 
* Create new filter state.

72 
*

73 
* @param order filter order

74 
*

75 
* @return pointer to new filter state or NULL if state creation fails

76 
*/

77 
struct FFIIRFilterState* ff_iir_filter_init_state(int order); 
78  
79 
/**

80 
* Free filter coefficients.

81 
*

82 
* @param coeffs pointer allocated with ff_iir_filter_init_coeffs()

83 
*/

84 
void ff_iir_filter_free_coeffs(struct FFIIRFilterCoeffs *coeffs); 
85  
86 
/**

87 
* Free filter state.

88 
*

89 
* @param state pointer allocated with ff_iir_filter_init_state()

90 
*/

91 
void ff_iir_filter_free_state(struct FFIIRFilterState *state); 
92  
93 
/**

94 
* Perform IIR filtering on signed 16bit input samples.

95 
*

96 
* @param coeffs pointer to filter coefficients

97 
* @param state pointer to filter state

98 
* @param size input length

99 
* @param src source samples

100 
* @param sstep source stride

101 
* @param dst filtered samples (destination may be the same as input)

102 
* @param dstep destination stride

103 
*/

104 
void ff_iir_filter(const struct FFIIRFilterCoeffs *coeffs, struct FFIIRFilterState *state, 
105 
int size, const int16_t *src, int sstep, int16_t *dst, int dstep); 
106  
107 
/**

108 
* Perform IIR filtering on floatingpoint input samples.

109 
*

110 
* @param coeffs pointer to filter coefficients

111 
* @param state pointer to filter state

112 
* @param size input length

113 
* @param src source samples

114 
* @param sstep source stride

115 
* @param dst filtered samples (destination may be the same as input)

116 
* @param dstep destination stride

117 
*/

118 
void ff_iir_filter_flt(const struct FFIIRFilterCoeffs *coeffs, 
119 
struct FFIIRFilterState *state, int size, 
120 
const float *src, int sstep, float *dst, int dstep); 
121  
122 
#endif /* AVCODEC_IIRFILTER_H */ 