Homepage Demos Overview Downloads Tutorials Reference
Credits

FilterBankGenerator.cc

Go to the documentation of this file.
00001 #include "FilterBankGenerator.h"
00002 #include "Events/EventRouter.h"
00003 
00004 unsigned char *
00005 FilterBankGenerator::getImage(unsigned int layer, unsigned int channel) const {
00006   //for(int i=0;i<1000;i++)
00007   //std::cout << i << " FBG::getImage(" << layer<<'/'<<numLayers  << ',' << channel<<'/'<<numChannels << ");" << std::endl;
00008   if(!imageValids[layer][channel]) {
00009     if(images[layer][channel]==NULL)
00010       images[layer][channel]=createImageCache(layer,channel);
00011     calcImage(layer,channel);
00012   }
00013   return images[layer][channel];
00014 }
00015 
00016 void 
00017 FilterBankGenerator::freeCaches() {
00018   invalidateCaches();
00019   for(unsigned int i=0; i<numLayers; i++)
00020     for(unsigned int j=0; j<numChannels; j++) {
00021       delete [] images[i][j];
00022       images[i][j]=NULL;
00023     }
00024 }
00025 
00026 void
00027 FilterBankGenerator::invalidateCaches() {
00028   for(unsigned int i=0; i<numLayers; i++)
00029     for(unsigned int j=0; j<numChannels; j++)
00030       imageValids[i][j]=false;
00031 }
00032 
00033 
00034 unsigned int FilterBankGenerator::getBinSize() const {
00035   unsigned int used=0;
00036   used+=creatorSize("FbkImage");
00037   used+=sizeof(widths[selectedSaveLayer]);
00038   used+=sizeof(heights[selectedSaveLayer]);
00039   used+=sizeof(selectedSaveLayer);
00040   used+=sizeof(selectedSaveChannel);
00041   return used;
00042 }
00043 
00044 /*! The LoadBuffer() functions of the included subclasses aren't tested, so don't assume they'll work without a little debugging... */
00045 unsigned int FilterBankGenerator::LoadBuffer(const char buf[], unsigned int len) {
00046   unsigned int origlen=len;
00047   unsigned int used=0;
00048   if(0==(used=checkCreator("FbkImage",buf,len,true))) return 0;
00049   len-=used; buf+=used;
00050   if(0==(used=decode(widths[selectedSaveLayer],buf,len))) return 0;
00051   len-=used; buf+=used;
00052   if(0==(used=decode(heights[selectedSaveLayer],buf,len))) return 0;
00053   len-=used; buf+=used;
00054   if(0==(used=decode(selectedSaveLayer,buf,len))) return 0;
00055   len-=used; buf+=used;
00056   if(0==(used=decode(selectedSaveChannel,buf,len))) return 0;
00057   len-=used; buf+=used;
00058   return origlen-len; 
00059 }
00060 
00061 unsigned int FilterBankGenerator::SaveBuffer(char buf[], unsigned int len) const {
00062   unsigned int origlen=len;
00063   unsigned int used=0;
00064   if(0==(used=saveCreator("FbkImage",buf,len))) return 0;
00065   len-=used; buf+=used;
00066   if(0==(used=encode(widths[selectedSaveLayer],buf,len))) return 0;
00067   len-=used; buf+=used;
00068   if(0==(used=encode(heights[selectedSaveLayer],buf,len))) return 0;
00069   len-=used; buf+=used;
00070   if(0==(used=encode(selectedSaveLayer,buf,len))) return 0;
00071   len-=used; buf+=used;
00072   if(0==(used=encode(selectedSaveChannel,buf,len))) return 0;
00073   len-=used; buf+=used;
00074   return origlen-len;
00075 }
00076 
00077 void
00078 FilterBankGenerator::setNumImages(unsigned int nLayers, unsigned int nChannels) {
00079   freeCaches();
00080   destruct();
00081   numLayers=nLayers;
00082   numChannels=nChannels;
00083   widths=new unsigned int[numLayers];
00084   heights=new unsigned int[numLayers];
00085   skips=new unsigned int[numLayers];
00086   strides=new unsigned int[numLayers];
00087   increments=new unsigned int[numLayers];
00088   for(unsigned int res=0; res<numLayers; res++) {
00089     widths[res]=heights[res]=skips[res]=strides[res]=0;
00090     increments[res]=1;
00091   }
00092   images=new unsigned char**[numLayers];
00093   imageValids=new bool*[numLayers];
00094   for(unsigned int i=0; i<numLayers; i++) {
00095     widths[i]=heights[i]=0;
00096     images[i]=new unsigned char*[numChannels];
00097     imageValids[i]=new bool[numChannels];
00098     for(unsigned int j=0; j<numChannels; j++) {
00099       images[i][j]=NULL;
00100       imageValids[i][j]=false;
00101     }
00102   }
00103 }
00104 
00105 void
00106 FilterBankGenerator::destruct() {
00107   delete [] widths;
00108   widths=NULL;
00109   delete [] heights;
00110   heights=NULL;
00111   delete [] skips;
00112   skips=NULL;
00113   delete [] strides;
00114   strides=NULL;
00115   delete [] increments;
00116   increments=NULL;
00117   for(unsigned int i=0; i<numLayers; i++) {
00118     delete [] images[i];
00119     delete [] imageValids[i];
00120   }
00121   delete [] images;
00122   images=NULL;
00123   delete [] imageValids;
00124   imageValids=NULL;
00125   numLayers=numChannels=0;
00126 }
00127 
00128 
00129 
00130 /*! @file
00131  * @brief Implements abstract base class for generators of FilterBankEvents
00132  * @author ejt (Creator)
00133  *
00134  * $Author: ejt $
00135  * $Name: tekkotsu-2_0 $
00136  * $Revision: 1.4 $
00137  * $State: Exp $
00138  * $Date: 2003/12/08 00:21:06 $
00139  */
00140 

Tekkotsu v2.0
Generated Wed Jan 21 03:20:28 2004 by Doxygen 1.3.4