00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifdef WIN32
00016 #pragma warning (disable:4786)
00017 #endif
00018
00019 #include "echofilter_generic.h"
00020 #include <memory.h>
00021
00022 CL_EchoFilter::CL_EchoFilter(int buffer_size, int shift_factor)
00023 {
00024 impl = new CL_EchoFilter_Generic;
00025 impl->buffer_size = buffer_size;
00026 impl->shift_factor = shift_factor;
00027 impl->pos = 0;
00028
00029 impl->buffer = new int[buffer_size*2];
00030 memset(impl->buffer, 0, sizeof(int)*buffer_size*2);
00031 }
00032
00033 CL_EchoFilter::~CL_EchoFilter()
00034 {
00035 delete[] impl->buffer;
00036 delete impl;
00037 }
00038
00039 void CL_EchoFilter::filter(int *data, int size)
00040 {
00041 int *buffer = impl->buffer;
00042 int &pos = impl->pos;
00043 int &buffer_size = impl->buffer_size;
00044 int &shift_factor = impl->shift_factor;
00045
00046 for (int i=0; i<size*2; i++)
00047 {
00048 buffer[pos] /= shift_factor;
00049 buffer[pos] += data[i];
00050 data[i] = buffer[pos];
00051 pos++;
00052 if (pos == buffer_size) pos = 0;
00053 }
00054 }