diff --git a/src/filters/multifilter.cpp b/src/filters/multifilter.cpp new file mode 100644 index 00000000..620b9a02 --- /dev/null +++ b/src/filters/multifilter.cpp @@ -0,0 +1,98 @@ +/*********************************************************************** + * AUTHOR: Arthur Moore + * FILE: .//multifilter.cpp + * DATE: Wed Jun 17 13:02:51 2015 + * DESCR: + ***********************************************************************/ +#include "multifilter.hpp" +#include "filter_base.hpp" + +/*********************************************************************** + * Method: multifilter::multifilter + * Params: std::vector filters, unsigned int X, unsigned int, Y + * Effects: + ***********************************************************************/ +multifilter::multifilter(std::vector filters, unsigned int X, unsigned int, Y): + filterNames(filters),numFilters(filters.size()),inX(X),inY(Y) +{ + //Do the first one separate + filter_base * aFilter = filter_factory::createFilter(filters[0],X,Y); + filterPtrs.append(aFilter); + + for(unsigned int i=1;igetOutWidth(); + Y=aFilter->getOutHeight(); + //Create, and append the new filter + aFilter = filter_factory::createFilter(filters[i],X,Y); + filterPtrs.append(aFilter); + //Create and append the buffers + u32* aBuffer = new u32[X*Y]; + filterBuffers.append(aBuffer); + } +} + + +/*********************************************************************** + * Method: multifilter::getOutX + * Params: + * Effects: + ***********************************************************************/ +multifilter::getOutX() +{ + filterPtrs.back()->getOutWidth(); +} + + +/*********************************************************************** + * Method: multifilter::getOutY + * Params: + * Effects: + ***********************************************************************/ +multifilter::getOutY() +{ + filterPtrs.back()->getOutHeight(); +} + + +/*********************************************************************** + * Method: multifilter::setInImage + * Params: u32 *image + * Effects: + ***********************************************************************/ +multifilter::setInImage(u32 *image) +{ + inImage=image; +} + + +/*********************************************************************** + * Method: multifilter::setOutImage + * Params: u32 *image + * Effects: + ***********************************************************************/ +multifilter::setOutImage(u32 *image) +{ + outImage=image; +} + + +/*********************************************************************** + * Method: multifilter::run + * Params: + * Effects: + ***********************************************************************/ +multifilter::run() +{ + //Do the first one separate + filterPtrs[0]->run(inImage,filterBuffers[0]); + for(unsigned int i=1;i<(numFilters-1);i++) + { + filterPtrs[i]->run(filterBuffers[i-1],filterBuffers[i]); + } + //Do the last one separate + filterPtrs.back()->run(filterBuffers.back(),outImage); +} + + diff --git a/src/filters/multifilter.hpp b/src/filters/multifilter.hpp new file mode 100644 index 00000000..46184148 --- /dev/null +++ b/src/filters/multifilter.hpp @@ -0,0 +1,38 @@ + +class multifilter +{ +private: + ///Names of all the filters to be used + std::vector filterNames; + ///The actual filters themselves + std::vector filterPtrs; + ///The buffers between each filter (note that the first element is the buffer coming out of the first filter) + std::vector filterBuffers; + ///Number of filters + unsigned int numFilters; + ///Size of the input image + unsigned int inX, inY; + ///Size of the final output image + unsigned int outX, outY; + ///Input image buffer + u32* inImage; + ///Output image buffer + u32* outImage; +public: + multifilter(std::vector filters,unsigned int X,unsigned int, Y); + getOutX(); + getOutY(); + setInImage(u32* image); + setOutImage(u32* image); + run(); +}; + +/* + * Usage: + * std::vector filters = {"filter1","filter2","filter3"}; + * multifilter myFilters(filters,32,32); + * myFilters.setInImage(data); + * u32* outImage=new u32 [myFilters.getOutX()*myFilters.getOutY()]; + * myFilters.setOutImage(outImage); + * myFilters.run(); + */