00001 #ifndef _VU_FVR_FILTER_H_ 00002 #define _VU_FVR_FILTER_H_ 00003 00004 #include "vuLinAlg/vuVector.h" 00005 #include "vuSimpleTypes.h" 00006 #include "vuMisc/vuFilter.h" 00007 00008 #define VU_FVR_FILTER_TABLE_SIZE 20 00009 #define VU_FVR_FILTER_TABLE_MAX 19 00010 00011 class vuFourierFilter : public vuFilter 00012 { 00013 public: 00014 inline vuFourierFilter(); 00015 inline vuFourierFilter(const vuString& filterName); 00016 inline vuFourierFilter(vuFourierFilter& f); 00017 virtual ~vuFourierFilter(); 00018 00019 inline float* getWeights(vuVector& t); 00020 virtual dword getWidth(void) = 0; 00021 00022 inline vuFourierFilter& operator=(vuFourierFilter& rhs); 00023 00024 protected: 00025 float* m_Weights; // A table of weights 00026 dword m_FilterSize; 00027 }; 00028 00029 inline vuFourierFilter::vuFourierFilter() : m_Weights(0) 00030 { 00031 } 00032 00033 inline vuFourierFilter::vuFourierFilter(const vuString& filterName) 00034 : vuFilter(filterName), m_Weights(0) 00035 { 00036 } 00037 00038 inline vuFourierFilter::vuFourierFilter(vuFourierFilter& f) 00039 { 00040 } 00041 00042 inline vuFourierFilter::~vuFourierFilter() 00043 { 00044 if (m_Weights) 00045 delete [] m_Weights; 00046 } 00047 00048 inline vuFourierFilter& vuFourierFilter::operator=(vuFourierFilter& rhs) 00049 { 00050 return *this; 00051 } 00052 00053 inline float* vuFourierFilter::getWeights(vuVector& t) 00054 { 00055 int i = (int)((t[0] * VU_FVR_FILTER_TABLE_MAX) + 0.5); 00056 int j = (int)((t[1] * VU_FVR_FILTER_TABLE_MAX) + 0.5); 00057 int k = (int)((t[2] * VU_FVR_FILTER_TABLE_MAX) + 0.5); 00058 return &m_Weights[((k * VU_FVR_FILTER_TABLE_SIZE + j) * 00059 VU_FVR_FILTER_TABLE_SIZE + i) * m_FilterSize]; 00060 }; 00061 00062 00063 #endif