1 /* 2 * Copyright (C) 2001 Anders Johansson ajh@atri.curtin.edu.au 3 * 4 * This file is part of MPlayer. 5 * 6 * MPlayer is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * MPlayer is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License along 17 * with MPlayer; if not, write to the Free Software Foundation, Inc., 18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19 */ 20 21 #ifndef MPLAYER_FILTER_H 22 #define MPLAYER_FILTER_H 23 24 #include "dsp.h" 25 26 27 // Design and implementation of different types of digital filters 28 29 30 // Flags used for filter design 31 32 // Filter characteristics 33 #define LP 0x00010000 // Low pass 34 #define HP 0x00020000 // High pass 35 #define BP 0x00040000 // Band pass 36 #define BS 0x00080000 // Band stop 37 #define TYPE_MASK 0x000F0000 38 39 // Window types 40 #define BOXCAR 0x00000001 41 #define TRIANG 0x00000002 42 #define HAMMING 0x00000004 43 #define HANNING 0x00000008 44 #define BLACKMAN 0x00000010 45 #define FLATTOP 0x00000011 46 #define KAISER 0x00000012 47 #define WINDOW_MASK 0x0000001F 48 49 // Parallel filter design 50 #define FWD 0x00000001 // Forward indexing of polyphase filter 51 #define REW 0x00000002 // Reverse indexing of polyphase filter 52 #define ODD 0x00000010 // Make filter HP 53 54 // Exported functions 55 FLOAT_TYPE af_filter_fir(unsigned int n, const FLOAT_TYPE* w, const FLOAT_TYPE* x); 56 57 FLOAT_TYPE* af_filter_pfir(unsigned int n, unsigned int k, 58 unsigned int xi, const FLOAT_TYPE** w, 59 const FLOAT_TYPE** x, FLOAT_TYPE* y, 60 unsigned int s); 61 62 //int af_filter_updateq(unsigned int n, unsigned int xi, 63 // FLOAT_TYPE* xq, FLOAT_TYPE* in); 64 int af_filter_updatepq(unsigned int n, unsigned int k, unsigned int xi, 65 FLOAT_TYPE** xq, const FLOAT_TYPE* in, unsigned int s); 66 67 int af_filter_design_fir(unsigned int n, FLOAT_TYPE* w, const FLOAT_TYPE* fc, 68 unsigned int flags, FLOAT_TYPE opt); 69 70 int af_filter_design_pfir(unsigned int n, unsigned int k, const FLOAT_TYPE* w, 71 FLOAT_TYPE** pw, FLOAT_TYPE g, unsigned int flags); 72 73 int af_filter_szxform(const FLOAT_TYPE* a, const FLOAT_TYPE* b, FLOAT_TYPE Q, 74 FLOAT_TYPE fc, FLOAT_TYPE fs, FLOAT_TYPE *k, 75 FLOAT_TYPE *coef); 76 77 /* Add new data to circular queue designed to be used with a FIR 78 filter. xq is the circular queue, in pointing at the new sample, xi 79 current index for xq and n the length of the filter. xq must be n*2 80 long. 81 */ 82 #define af_filter_updateq(n,xi,xq,in)\ 83 xq[xi]=(xq)[(xi)+(n)]=*(in);\ 84 xi=(++(xi))&((n)-1); 85 86 #endif /* MPLAYER_FILTER_H */ 87