00001
00002 #ifndef INCLUDED_BufferedImageGenerator_h_
00003 #define INCLUDED_BufferedImageGenerator_h_
00004
00005 #include "FilterBankGenerator.h"
00006 #include "RawCameraGenerator.h"
00007
00008 class MessageReceiver;
00009
00010
00011 class BufferedImageGenerator : public FilterBankGenerator {
00012 public:
00013
00014 struct ImageSource {
00015
00016 ImageSource() : width(0), height(0), channels(0), frameIndex(0), layer(0), receiver(NULL), img(NULL) {}
00017
00018 ImageSource(const ImageSource& src) : width(src.width), height(src.height), channels(src.channels), frameIndex(src.frameIndex), layer(src.layer), receiver(src.receiver), img(src.img) {}
00019
00020 ImageSource& operator=(const ImageSource& src) { width=src.width; height=src.height; channels=src.channels; frameIndex=src.frameIndex; layer=src.layer; receiver=src.receiver; img=src.img; return *this; }
00021 unsigned int width;
00022 unsigned int height;
00023 unsigned int channels;
00024 unsigned int frameIndex;
00025
00026
00027
00028
00029 unsigned int layer;
00030
00031
00032
00033 MessageReceiver * receiver;
00034
00035
00036
00037 unsigned char * img;
00038 };
00039
00040
00041 BufferedImageGenerator(const std::string& name,EventBase::EventGeneratorID_t mgid, unsigned int msid, unsigned int nLayers, EventBase::EventGeneratorID_t srcgid, unsigned int srcsid)
00042 : FilterBankGenerator("BufferedImageGenerator",name,mgid,msid,srcgid,srcsid), imgsrc(), isAllocated(NULL), accessed(true)
00043 {
00044
00045
00046
00047
00048
00049 unsetAutoListen();
00050
00051 setNumImages(nLayers,RawCameraGenerator::NUM_CHANNELS);
00052 }
00053 virtual ~BufferedImageGenerator() { destruct(); }
00054
00055
00056 virtual void DoStart() { FilterBankGenerator::DoStart(); addSrcListener(); }
00057
00058 virtual void processEvent(const EventBase & event);
00059
00060 virtual unsigned int getBinSize() const;
00061
00062 virtual unsigned int LoadBuffer(const char buf[], unsigned int len);
00063
00064 virtual unsigned int SaveBuffer(char buf[], unsigned int len) const;
00065
00066 virtual unsigned int SaveFileStream(FILE* f) const;
00067
00068 virtual unsigned char * getImage(unsigned int layer, unsigned int channel);
00069 virtual void freeCaches();
00070 virtual void invalidateCaches();
00071
00072 protected:
00073
00074 BufferedImageGenerator(const std::string& classname,const std::string& instancename,EventBase::EventGeneratorID_t mgid, unsigned int msid, unsigned int nLayers,EventBase::EventGeneratorID_t srcgid, unsigned int srcsid)
00075 : FilterBankGenerator(classname,instancename,mgid,msid,srcgid,srcsid), imgsrc(), isAllocated(NULL), accessed(true)
00076 {setNumImages(nLayers,RawCameraGenerator::NUM_CHANNELS);}
00077
00078 virtual unsigned char * createImageCache(unsigned int layer, unsigned int channel) const;
00079 virtual void calcImage(unsigned int layer, unsigned int channel) ;
00080 virtual void setDimensions();
00081 virtual void destruct();
00082 virtual void setNumImages(unsigned int nLayers, unsigned int nChannels);
00083
00084
00085
00086 virtual void upsampleImage(unsigned int srcLayer, unsigned int chan, unsigned int destLayer);
00087
00088 ImageSource imgsrc;
00089 bool ** isAllocated;
00090 bool accessed;
00091
00092 private:
00093 BufferedImageGenerator(const BufferedImageGenerator&);
00094 BufferedImageGenerator& operator=(const BufferedImageGenerator&);
00095 };
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108 #endif