00001 #include "FilterBankGenerator.h"
00002 #include "Events/EventRouter.h"
00003
00004 unsigned char *
00005 FilterBankGenerator::getImage(unsigned int layer, unsigned int channel) const {
00006
00007
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
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
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140