iirfilter.c File Reference

different IIR filters implementation More...

#include "iirfilter.h"
#include <math.h>
#include "libavutil/common.h"
Include dependency graph for iirfilter.c:

Go to the source code of this file.

Data Structures

struct  FFIIRFilterCoeffs
 IIR filter global parameters. More...
 
struct  FFIIRFilterState
 IIR filter state. More...
 

Macros

#define MAXORDER   30
 maximum supported filter order More...
 
#define CONV_S16(dest, source)   dest = av_clip_int16(lrintf(source));
 
#define CONV_FLT(dest, source)   dest = source;
 
#define FILTER_BW_O4_1(i0, i1, i2, i3, fmt)
 
#define FILTER_BW_O4(type, fmt)
 
#define FILTER_DIRECT_FORM_II(type, fmt)
 
#define FILTER_O2(type, fmt)
 

Typedefs

typedef struct FFIIRFilterCoeffs FFIIRFilterCoeffs
 IIR filter global parameters. More...
 
typedef struct FFIIRFilterState FFIIRFilterState
 IIR filter state. More...
 

Functions

static int butterworth_init_coeffs (void *avc, struct FFIIRFilterCoeffs *c, enum IIRFilterMode filt_mode, int order, float cutoff_ratio, float stopband)
 
static int biquad_init_coeffs (void *avc, struct FFIIRFilterCoeffs *c, enum IIRFilterMode filt_mode, int order, float cutoff_ratio, float stopband)
 
av_cold struct FFIIRFilterCoeffsff_iir_filter_init_coeffs (void *avc, enum IIRFilterType filt_type, enum IIRFilterMode filt_mode, int order, float cutoff_ratio, float stopband, float ripple)
 Initialize filter coefficients. More...
 
av_cold struct FFIIRFilterStateff_iir_filter_init_state (int order)
 Create new filter state. More...
 
void ff_iir_filter (const struct FFIIRFilterCoeffs *c, struct FFIIRFilterState *s, int size, const int16_t *src, int sstep, int16_t *dst, int dstep)
 Perform IIR filtering on signed 16-bit input samples. More...
 
void ff_iir_filter_flt (const struct FFIIRFilterCoeffs *c, struct FFIIRFilterState *s, int size, const float *src, int sstep, float *dst, int dstep)
 Perform IIR filtering on floating-point input samples. More...
 
av_cold void ff_iir_filter_free_state (struct FFIIRFilterState *state)
 Free filter state. More...
 
av_cold void ff_iir_filter_free_coeffs (struct FFIIRFilterCoeffs *coeffs)
 Free filter coefficients. More...
 
void ff_iir_filter_init (FFIIRFilterContext *f)
 Initialize FFIIRFilterContext. More...
 

Detailed Description

different IIR filters implementation

Definition in file iirfilter.c.

Macro Definition Documentation

#define CONV_FLT (   dest,
  source 
)    dest = source;

Definition at line 209 of file iirfilter.c.

#define CONV_S16 (   dest,
  source 
)    dest = av_clip_int16(lrintf(source));

Definition at line 207 of file iirfilter.c.

#define FILTER_BW_O4 (   type,
  fmt 
)
Value:
{ \
int i; \
const type *src0 = src; \
type *dst0 = dst; \
for (i = 0; i < size; i += 4) { \
float in, res; \
FILTER_BW_O4_1(0, 1, 2, 3, fmt); \
FILTER_BW_O4_1(1, 2, 3, 0, fmt); \
FILTER_BW_O4_1(2, 3, 0, 1, fmt); \
FILTER_BW_O4_1(3, 0, 1, 2, fmt); \
} \
}
const char * fmt
Definition: avisynth_c.h:669
About Git write you should know how to use GIT properly Luckily Git comes with excellent documentation git help man git shows you the available git< command > help man git< command > shows information about the subcommand< command > The most comprehensive manual is the website Git Reference visit they are quite exhaustive You do not need a special username or password All you need is to provide a ssh public key to the Git server admin What follows now is a basic introduction to Git and some FFmpeg specific guidelines Read it at least if you are granted commit privileges to the FFmpeg project you are expected to be familiar with these rules I if not You can get git from etc no matter how small Every one of them has been saved from looking like a fool by this many times It s very easy for stray debug output or cosmetic modifications to slip in
Definition: git-howto.txt:5
int size
#define FILTER_BW_O4_1(i0, i1, i2, i3, fmt)
Definition: iirfilter.c:211
AVS_Value src
Definition: avisynth_c.h:523
synthesis window for stochastic i
#define type
else dst[i][x+y *dst_stride[i]]
Definition: vf_mcdeint.c:160
for(j=16;j >0;--j)

Definition at line 223 of file iirfilter.c.

Referenced by ff_iir_filter(), and ff_iir_filter_flt().

#define FILTER_BW_O4_1 (   i0,
  i1,
  i2,
  i3,
  fmt 
)
Value:
in = *src0 * c->gain \
+ c->cy[0]*s->x[i0] + c->cy[1]*s->x[i1] \
+ c->cy[2]*s->x[i2] + c->cy[3]*s->x[i3]; \
res = (s->x[i0] + in )*1 \
+ (s->x[i1] + s->x[i3])*4 \
+ s->x[i2] *6; \
CONV_##fmt(*dst0, res) \
s->x[i0] = in; \
src0 += sstep; \
dst0 += dstep;
const char * s
Definition: avisynth_c.h:668
const char * fmt
Definition: avisynth_c.h:669
About Git write you should know how to use GIT properly Luckily Git comes with excellent documentation git help man git shows you the available git< command > help man git< command > shows information about the subcommand< command > The most comprehensive manual is the website Git Reference visit they are quite exhaustive You do not need a special username or password All you need is to provide a ssh public key to the Git server admin What follows now is a basic introduction to Git and some FFmpeg specific guidelines Read it at least if you are granted commit privileges to the FFmpeg project you are expected to be familiar with these rules I if not You can get git from etc no matter how small Every one of them has been saved from looking like a fool by this many times It s very easy for stray debug output or cosmetic modifications to slip in
Definition: git-howto.txt:5
static double c[64]

Definition at line 211 of file iirfilter.c.

#define FILTER_DIRECT_FORM_II (   type,
  fmt 
)
Value:
{ \
int i; \
const type *src0 = src; \
type *dst0 = dst; \
for (i = 0; i < size; i++) { \
int j; \
float in, res; \
in = *src0 * c->gain; \
for(j = 0; j < c->order; j++) \
in += c->cy[j] * s->x[j]; \
res = s->x[0] + in + s->x[c->order >> 1] * c->cx[c->order >> 1]; \
for(j = 1; j < c->order >> 1; j++) \
res += (s->x[j] + s->x[c->order - j]) * c->cx[j]; \
for(j = 0; j < c->order - 1; j++) \
s->x[j] = s->x[j + 1]; \
CONV_##fmt(*dst0, res) \
s->x[c->order - 1] = in; \
src0 += sstep; \
dst0 += dstep; \
} \
}
const char * s
Definition: avisynth_c.h:668
const char * fmt
Definition: avisynth_c.h:669
About Git write you should know how to use GIT properly Luckily Git comes with excellent documentation git help man git shows you the available git< command > help man git< command > shows information about the subcommand< command > The most comprehensive manual is the website Git Reference visit they are quite exhaustive You do not need a special username or password All you need is to provide a ssh public key to the Git server admin What follows now is a basic introduction to Git and some FFmpeg specific guidelines Read it at least if you are granted commit privileges to the FFmpeg project you are expected to be familiar with these rules I if not You can get git from etc no matter how small Every one of them has been saved from looking like a fool by this many times It s very easy for stray debug output or cosmetic modifications to slip in
Definition: git-howto.txt:5
int size
AVS_Value src
Definition: avisynth_c.h:523
synthesis window for stochastic i
#define type
static double c[64]
else dst[i][x+y *dst_stride[i]]
Definition: vf_mcdeint.c:160
for(j=16;j >0;--j)

Definition at line 236 of file iirfilter.c.

Referenced by ff_iir_filter(), and ff_iir_filter_flt().

#define FILTER_O2 (   type,
  fmt 
)
Value:
{ \
int i; \
const type *src0 = src; \
type *dst0 = dst; \
for (i = 0; i < size; i++) { \
float in = *src0 * c->gain + \
s->x[0] * c->cy[0] + \
s->x[1] * c->cy[1]; \
CONV_##fmt(*dst0, s->x[0] + in + s->x[1] * c->cx[1]) \
s->x[0] = s->x[1]; \
s->x[1] = in; \
src0 += sstep; \
dst0 += dstep; \
} \
}
const char * s
Definition: avisynth_c.h:668
const char * fmt
Definition: avisynth_c.h:669
About Git write you should know how to use GIT properly Luckily Git comes with excellent documentation git help man git shows you the available git< command > help man git< command > shows information about the subcommand< command > The most comprehensive manual is the website Git Reference visit they are quite exhaustive You do not need a special username or password All you need is to provide a ssh public key to the Git server admin What follows now is a basic introduction to Git and some FFmpeg specific guidelines Read it at least if you are granted commit privileges to the FFmpeg project you are expected to be familiar with these rules I if not You can get git from etc no matter how small Every one of them has been saved from looking like a fool by this many times It s very easy for stray debug output or cosmetic modifications to slip in
Definition: git-howto.txt:5
int size
AVS_Value src
Definition: avisynth_c.h:523
synthesis window for stochastic i
#define type
static double c[64]
else dst[i][x+y *dst_stride[i]]
Definition: vf_mcdeint.c:160
for(j=16;j >0;--j)

Definition at line 258 of file iirfilter.c.

Referenced by ff_iir_filter(), and ff_iir_filter_flt().

#define MAXORDER   30

maximum supported filter order

Definition at line 49 of file iirfilter.c.

Referenced by butterworth_init_coeffs(), and ff_iir_filter_init_coeffs().

Typedef Documentation

IIR filter global parameters.

IIR filter state.

Function Documentation

static int biquad_init_coeffs ( void avc,
struct FFIIRFilterCoeffs c,
enum IIRFilterMode  filt_mode,
int  order,
float  cutoff_ratio,
float  stopband 
)
static

Definition at line 116 of file iirfilter.c.

Referenced by ff_iir_filter_init_coeffs().

static int butterworth_init_coeffs ( void avc,
struct FFIIRFilterCoeffs c,
enum IIRFilterMode  filt_mode,
int  order,
float  cutoff_ratio,
float  stopband 
)
static

Definition at line 51 of file iirfilter.c.

Referenced by ff_iir_filter_init_coeffs().

void ff_iir_filter ( const struct FFIIRFilterCoeffs coeffs,
struct FFIIRFilterState state,
int  size,
const int16_t *  src,
int  sstep,
int16_t *  dst,
int  dstep 
)

Perform IIR filtering on signed 16-bit input samples.

Parameters
coeffspointer to filter coefficients
statepointer to filter state
sizeinput length
srcsource samples
sstepsource stride
dstfiltered samples (destination may be the same as input)
dstepdestination stride

Definition at line 274 of file iirfilter.c.

Referenced by ff_iir_filter_init().

void ff_iir_filter_flt ( const struct FFIIRFilterCoeffs coeffs,
struct FFIIRFilterState state,
int  size,
const float *  src,
int  sstep,
float *  dst,
int  dstep 
)

Perform IIR filtering on floating-point input samples.

Parameters
coeffspointer to filter coefficients
statepointer to filter state
sizeinput length
srcsource samples
sstepsource stride
dstfiltered samples (destination may be the same as input)
dstepdestination stride

Definition at line 287 of file iirfilter.c.

Referenced by ff_iir_filter_init().

av_cold void ff_iir_filter_free_coeffs ( struct FFIIRFilterCoeffs coeffs)

Free filter coefficients.

Parameters
coeffspointer allocated with ff_iir_filter_init_coeffs()

Definition at line 305 of file iirfilter.c.

Referenced by ff_iir_filter_init(), ff_iir_filter_init_coeffs(), and ff_psy_preprocess_end().

av_cold void ff_iir_filter_free_state ( struct FFIIRFilterState state)

Free filter state.

Parameters
statepointer allocated with ff_iir_filter_init_state()

Definition at line 300 of file iirfilter.c.

Referenced by ff_iir_filter_init(), and ff_psy_preprocess_end().

void ff_iir_filter_init ( FFIIRFilterContext f)

Initialize FFIIRFilterContext.

Definition at line 314 of file iirfilter.c.

Referenced by ff_psy_preprocess_init().

av_cold struct FFIIRFilterCoeffs* ff_iir_filter_init_coeffs ( void avc,
enum IIRFilterType  filt_type,
enum IIRFilterMode  filt_mode,
int  order,
float  cutoff_ratio,
float  stopband,
float  ripple 
)

Initialize filter coefficients.

Parameters
avca pointer to an arbitrary struct of which the first field is a pointer to an AVClass struct
filt_typefilter type (e.g. Butterworth)
filt_modefilter mode (e.g. lowpass)
orderfilter order
cutoff_ratiocutoff to input frequency ratio
stopbandstopband to input frequency ratio (used by bandpass and bandstop filter modes)
rippleripple factor (used only in Chebyshev filters)
Returns
pointer to filter coefficients structure or NULL if filter cannot be created

Definition at line 159 of file iirfilter.c.

Referenced by ff_iir_filter_init(), and ff_psy_preprocess_init().

av_cold struct FFIIRFilterState* ff_iir_filter_init_state ( int  order)

Create new filter state.

Parameters
orderfilter order
Returns
pointer to new filter state or NULL if state creation fails

Definition at line 201 of file iirfilter.c.

Referenced by ff_iir_filter_init(), and ff_psy_preprocess_init().