### NAME

Snack_CreateFilterType - define new filter type

### SYNOPSIS

#include <snack.h>
Snack_CreateFilterType(filterType)

### ARGUMENTS

Snack_FilterType *filterType

struct Snack_FilterType {
char *name;
createProc *createProc;
configProc *configProc;
startProc *startProc;
flowProc *flowProc;
freeProc *freeProc;
struct Snack_FilterType *nextPtr;
} Snack_FilterType;

char *name

Snack_Filter createProc (Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])

int configProc (Snack_Filter f, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])

int startProc (Snack_Filter f, Snack_StreamInfo si)

int flowProc (Snack_Filter f, Snack_StreamInfo si, float *inBuffer, float *outBuffer, int *inFrames, int *outFrames)

void freeProc (Snack_Filter f)

### DESCRIPTION

Snack_CreateFilterType is used to define a new kind of filter type. Everything regarding filters is still under development. The source code itself is currently the only source of information.

Some helpful notes on the current implementation:

inFrames specifies how many samples exist in inBuffer. This value can be modified to specify how many samples were actually consumed.

outFrames is an upper bound on how many samples that may be written to outBuffer.

flowProc should start to drain out any samples as soon as inFrames < outFrames.

If the return value of outFrames is less than the original, the procedure will not be called again. Internal clean-up can be performed in this case.

The parameters inBuffer and outBuffer may point to the same memory. In some cases it might be neccessary to make local copies of samples during calculations.

configProc can be called at any time.

inBuffer can be NULL if inSize is 0.