Go to the documentation of this file.00001 #ifndef FCAM_N900_SENSOR_H
00002 #define FCAM_N900_SENSOR_H
00003
00010 #include "../Sensor.h"
00011 #include <vector>
00012 #include <pthread.h>
00013 #include "Frame.h"
00014 #include "Platform.h"
00015
00016 namespace FCam {
00017 namespace N900 {
00018
00019 class Daemon;
00020
00043 class Sensor : public FCam::Sensor {
00044 public:
00045
00046 Sensor();
00047 ~Sensor();
00048
00049 void capture(const FCam::Shot &);
00050 void capture(const std::vector<FCam::Shot> &);
00051 void stream(const FCam::Shot &s);
00052 void stream(const std::vector<FCam::Shot> &);
00053 bool streaming();
00054 void stopStreaming();
00055 void start();
00056 void stop();
00057
00061 virtual int maxExposure() const {return 2489140;}
00062
00066 virtual int minExposure() const {return 38;}
00067
00071 virtual int maxFrameTime() const {return 2490072;}
00072
00076 virtual int minFrameTime() const {return 33414;}
00077
00079 virtual float maxGain() const {return 32.0f;}
00080
00082 virtual float minGain() const {return 1.0f;}
00083
00085 virtual Size minImageSize() const {return Size(160, 120);}
00086
00090 virtual Size maxImageSize() const {return Size(2592, 1968);}
00091
00093 virtual int maxHistogramRegions() const {return 4;}
00094
00095
00099 int rollingShutterTime(const Shot &) const;
00100
00101 int framesPending() const;
00102 int shotsPending() const;
00103
00104 virtual const Platform &platform() {return N900::Platform::instance();}
00105
00106 FCam::N900::Frame getFrame();
00107
00108 protected:
00109
00110 FCam::Frame getBaseFrame() {return getFrame();}
00111
00112 private:
00113
00114 std::vector<Shot> streamingShot;
00115
00116
00117 friend class Daemon;
00118 Daemon *daemon;
00119
00120
00121 void generateRequest();
00122
00123 pthread_mutex_t requestMutex;
00124
00125
00126 void enforceDropPolicy();
00127
00128
00129 int shotsPending_;
00130
00131
00132
00133
00134 void decShotsPending();
00135 };
00136
00137 }
00138 }
00139
00140
00141 #endif