00001 #ifndef FCAM_SENSOR_H 00002 #define FCAM_SENSOR_H 00003 00006 00007 #include "Base.h" 00008 #include <vector> 00009 #include "Device.h" 00010 #include "Frame.h" 00011 00012 namespace FCam { 00013 00014 class Device; 00015 class Shot; 00016 00018 class Sensor : public Device { 00019 public: 00020 Sensor(); 00021 virtual ~Sensor(); 00022 00024 virtual void capture(const Shot &) = 0; 00026 virtual void capture(const std::vector<Shot> &) = 0; 00027 00029 virtual void stream(const Shot &s) = 0; 00030 00032 virtual void stream(const std::vector<Shot> &) = 0; 00033 00035 virtual bool streaming() = 0; 00036 00039 virtual void stopStreaming() = 0; 00040 00044 void setFrameLimit(int); 00045 00047 int getFrameLimit(); 00048 00050 enum DropPolicy {DropNewest = 0, 00051 DropOldest 00052 }; 00053 00055 void setDropPolicy(DropPolicy); 00056 00058 DropPolicy getDropPolicy(); 00059 00064 virtual Frame::Ptr getFrame() = 0; 00065 00069 virtual int framesPending() const = 0; 00070 00077 virtual int shotsPending() const = 0; 00078 00081 void attach(Device *); 00082 00085 virtual int maxExposure() const {return 1000000;} 00086 00088 virtual int minExposure() const {return 0;} 00089 00092 virtual int maxFrameTime() const {return 1000000;} 00093 00095 virtual int minFrameTime() const {return 1;} 00096 00098 virtual float maxGain() const {return 32.0f;} 00099 00101 virtual float minGain() const {return 1.0f;} 00102 00104 virtual Size minImageSize() const {return Size(160, 120);} 00105 00107 virtual Size maxImageSize() const {return Size(2592, 1968);} 00108 00110 virtual int maxHistogramRegions() const {return 4;} 00111 00114 virtual int getRollingShutterTime(const Shot &) const = 0; 00115 00119 enum BayerPattern {RGGB = 0, 00120 BGGR, 00121 GRBG, 00122 GBRG, 00123 NotBayer 00124 }; 00126 virtual BayerPattern getBayerPattern() const = 0; 00127 00132 virtual const float *getXYZToRawColorMatrixTungsten() const = 0; 00133 00137 virtual const float *getXYZToRawColorMatrixDaylight() const = 0; 00138 00140 virtual const std::string &getManufacturer() = 0; 00141 00143 virtual const std::string &getModel() = 0; 00144 00146 virtual unsigned short minRawValue() {return 0;} 00147 00149 virtual unsigned short maxRawValue() {return 1024;} 00150 00155 virtual void tagFrame(Frame *) {} 00156 00157 protected: 00158 std::vector<Device *> devices; 00159 00160 // enforce the specified drop policy 00161 virtual void enforceDropPolicy() = 0; 00162 00163 DropPolicy dropPolicy; 00164 size_t frameLimit; 00165 }; 00166 00167 } 00168 00169 #endif
1.5.6