00001 #ifndef FCAM_FRAME_H
00002 #define FCAM_FRAME_H
00003
00007 #include "Base.h"
00008 #include "Device.h"
00009 #include "Time.h"
00010 #include "Image.h"
00011 #include <map>
00012 #include <vector>
00013 #include "Shot.h"
00014 #include <set>
00015 #include <tr1/memory>
00016
00017 namespace FCam {
00018
00019 class Action;
00020 class Sensor;
00021
00029 class Frame {
00030 public:
00031
00036 typedef std::tr1::shared_ptr<Frame> Ptr;
00037
00040 Image image;
00041
00043 Time exposureStartTime;
00044
00047 Time exposureEndTime;
00048
00050 Time processingDoneTime;
00051
00053 Sensor *sensor;
00054
00058 int exposure;
00059
00066 int frameTime;
00067
00072 float gain;
00073
00074
00077 Histogram histogram;
00078
00081 SharpnessMap sharpness;
00082
00083 ~Frame();
00084
00093 const Shot &shot() const {
00094 return *request;
00095 }
00096
00102 template<typename T>
00103 const typename T::Tags *tags(T *device) const {
00104 TagMap::const_iterator t = _tags.find(device);
00105 if (t == _tags.end()) return NULL;
00106 else return ((const typename T::Tags *)(t->second));
00107 }
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118 template<typename T>
00119 void addTags(T *d, typename T::Tags *t) {
00120 _tags[d] = (Device::Tags *)t;
00121 }
00122
00123 protected:
00124 typedef std::map<Device *, Device::Tags *> TagMap;
00125 TagMap _tags;
00126
00127 friend class Sensor;
00128 Frame();
00129 Shot *request;
00130 };
00131
00132 }
00133
00134 #endif