camera_usb
cam_usb.h
Go to the documentation of this file.
1 /*
2  * \file cam_usb.h
3  *
4  * \brief USB-Camera driver using 4vl2 and GStreamer.
5  *
6  * \details Based on the Rock-CameraInterface. Can be used
7  * for the Gumstix Camera as well.
8  *
9  * German Research Center for Artificial Intelligence\n
10  * Project: Rimres
11  *
12  * \date 23.11.11
13  *
14  * \author Stefan.Haase@dfki.de
15  */
16 
17 #ifndef _CAM_USB_CONFIG_H_
18 #define _CAM_USB_CONFIG_H_
19 
20 #include <sys/time.h>
21 
22 #include "camera_interface/CamInterface.h"
23 
24 #include "cam_gst.h"
25 #include "cam_config.h"
26 
27 namespace camera
28 {
29 
30  enum CAM_USB_MODE {
34  };
35 
36  static const std::string ModeTxt[] = { "CAM_USB_NONE", "CAM_USB_V4L2", "CAM_USB_GST" };
55 class CamUsb : public CamInterface {
56 
57  public: // STATICS
58  static const uint32_t CAM_ID = 0;
59 
60  public: // CAM USB
61  CamUsb(std::string const& device);
62 
63  ~CamUsb();
64 
73  void fastInit(int width, int height);
74 
80  virtual int listCameras(std::vector<CamInfo> &cam_infos)const;
81 
86  virtual bool open(const CamInfo &cam,const AccessMode mode=Master);
87 
88  bool isOpen()const;
89 
93  virtual const CamInfo* getCameraInfo()const;
94 
100  virtual bool close();
101 
110  virtual bool grab(const GrabMode mode = SingleFrame, const int buffer_len=1);
111 
116  virtual bool retrieveFrame(base::samples::frame::Frame &frame,const int timeout=1000);
117 
121  bool storeFrame(base::samples::frame::Frame& frame, std::string const& file_name);
122 
126  virtual bool isFrameAvailable();
127 
132  virtual int skipFrames();
133 
134  virtual bool setIpSettings(const CamInfo &cam, const IPSettings &ip_settings)const;
135 
139  virtual bool setAttrib(const int_attrib::CamAttrib attrib, const int value);
140 
146  virtual bool setAttrib(const double_attrib::CamAttrib attrib, const double value);
147 
148  virtual bool setAttrib(const str_attrib::CamAttrib attrib,const std::string value) {
149  throw std::runtime_error("setAttrib str_attrib is not yet implemented for the camera interface!");
150  return 0;
151  }
152 
156  virtual bool setAttrib(const enum_attrib::CamAttrib attrib);
157 
163  virtual bool isAttribAvail(const int_attrib::CamAttrib attrib);
164 
168  virtual bool isAttribAvail(const double_attrib::CamAttrib attrib);
169 
170  virtual bool isAttribAvail(const str_attrib::CamAttrib attrib) {
171  throw std::runtime_error("isAttribAvail str_attrib is not yet implemented for the camera interface!");
172  return 0;
173  }
174 
178  virtual bool isAttribAvail(const enum_attrib::CamAttrib attrib);
179 
183  virtual int getAttrib(const int_attrib::CamAttrib attrib);
184 
188  virtual double getAttrib(const double_attrib::CamAttrib attrib);
189 
190  virtual std::string getAttrib(const str_attrib::CamAttrib attrib) {
191  throw std::runtime_error("getAttrib str_attrib is not yet implemented for the camera interface!");
192  return 0;
193  }
194 
198  virtual bool isAttribSet(const enum_attrib::CamAttrib attrib);
199 
207  bool isV4L2AttribAvail(const int control_id, std::string name = "");
208 
216  int getV4L2Attrib(const int control_id);
217 
226  bool setV4L2Attrib(const int control_id, const int value);
227 
232  bool setFrameSettings(const base::samples::frame::frame_size_t size,
233  const base::samples::frame::frame_mode_t mode,
234  const uint8_t color_depth,
235  const bool resize_frames = true);
236 
237  /*
238  virtual bool setFrameSettings(const base::samples::frame::Frame &frame,
239  const bool resize_frames = true);
240  */
241 
245  virtual bool getFrameSettings(base::samples::frame::frame_size_t &size,
246  base::samples::frame::frame_mode_t &mode,
247  uint8_t &color_depth);
248 
252  virtual bool triggerFrame();
253 
259  virtual bool setToDefault();
260 
265 
266  //virtual bool setFrameToCameraFrameSettings(base::samples::frame::Frame &frame);
267 
268  virtual bool setCallbackFcn(void (*pcallback_function)(const void* p),void *p) {
269 
270  if(!pcallback_function)
271  throw std::runtime_error ("You can not set the callback function to null!!! "
272  "Otherwise CamUsb::callUserCallbackFcn would not be thread safe.");
273 
274  mpCallbackFunction = pcallback_function;
275  mpPassThroughPointer = p;
276 
277  return true;
278  }
279 
280  virtual void synchronizeWithSystemTime(uint32_t time_interval)
281  {
282  throw std::runtime_error("This camerea does not support synchronizeWithSystemTime. "
283  "The timestamp of the camera frame will be invalid.");
284  };
285 
286  virtual void saveConfiguration(uint8_t index) {
287  throw std::runtime_error("This camerea does not support saveConfiguration.");
288  }
289 
290  virtual void loadConfiguration(uint8_t index) {
291  throw std::runtime_error("This camerea does not support loadConfiguration.");
292  }
293 
294  virtual void getRange(const double_attrib::CamAttrib attrib,double &dmin,double &dmax) {
295  throw std::runtime_error("This camerea does not support getRange for double_attrib.");
296  }
297 
298  virtual void getRange(const int_attrib::CamAttrib attrib,int &imin,int &imax);
299 
304  virtual int getFileDescriptor() const;
305 
306  inline enum CAM_USB_MODE getCamMode() {
307  return mCamMode;
308  }
309 
310  double calculateFPS() {
311  if(act_grab_mode_ == Stop) {
312  return 0;
313  }
314  timeval stop_time_grabbing;
315  gettimeofday(&stop_time_grabbing, 0);
316  double sec = stop_time_grabbing.tv_sec - mStartTimeGrabbing.tv_sec;
317  if(sec == 0)
318  return 0;
319  else
320  return mReceivedFrameCounter / sec;
321  }
322 
323  private:
324  CamUsb(){};
325 
326  enum CAM_USB_MODE mCamMode;
327 
334  void changeCameraMode(enum CAM_USB_MODE cam_usb_mode);
335 
336  CamGst* mCamGst;
337  CamConfig* mCamConfig;
338  std::string mDevice;
339 
340  // Pipeline has been created and is running. No further configuration possible.
341  bool mIsOpen;
342 
343  struct CamInfo mCamInfo;
344 
345  std::map<int_attrib::CamAttrib, int> mMapAttrsCtrlsInt;
346 
347  // Framerate set on the camera internally. If available it will set to > 0 during startup.
348  // Will be set if the pipeline is not running and the fps of the camera is requested.
349  float mFps;
350  int mBpp;
351  timeval mStartTimeGrabbing;
352  int mReceivedFrameCounter;
353 
354  // FD driven image receiving (?).
355  void (*mpCallbackFunction)(const void* p);
356  void* mpPassThroughPointer;
357 
358  void createAttrsCtrlMaps(CamConfig* cam_config);
359 };
360 
361 } // end namespace camera
362 
363 #endif
virtual const CamInfo * getCameraInfo() const
Definition: cam_usb.cpp:75
virtual bool setToDefault()
Definition: cam_usb.cpp:624
virtual void getRange(const double_attrib::CamAttrib attrib, double &dmin, double &dmax)
Definition: cam_usb.h:294
virtual void loadConfiguration(uint8_t index)
Definition: cam_usb.h:290
bool setFrameSettings(const base::samples::frame::frame_size_t size, const base::samples::frame::frame_mode_t mode, const uint8_t color_depth, const bool resize_frames=true)
Definition: cam_usb.cpp:569
bool isOpen() const
Definition: cam_usb.cpp:71
virtual bool getFrameSettings(base::samples::frame::frame_size_t &size, base::samples::frame::frame_mode_t &mode, uint8_t &color_depth)
Definition: cam_usb.cpp:607
virtual bool grab(const GrabMode mode=SingleFrame, const int buffer_len=1)
Definition: cam_usb.cpp:97
Definition: cam_usb.h:32
Definition: cam_usb.h:55
virtual bool close()
Definition: cam_usb.cpp:85
bool isV4L2AttribAvail(const int control_id, std::string name="")
Definition: cam_usb.cpp:517
virtual bool setCallbackFcn(void(*pcallback_function)(const void *p), void *p)
Definition: cam_usb.h:268
virtual bool open(const CamInfo &cam, const AccessMode mode=Master)
Definition: cam_usb.cpp:50
virtual bool setAttrib(const int_attrib::CamAttrib attrib, const int value)
Definition: cam_usb.cpp:238
enum CAM_USB_MODE getCamMode()
Definition: cam_usb.h:306
virtual bool setAttrib(const str_attrib::CamAttrib attrib, const std::string value)
Definition: cam_usb.h:148
virtual bool isAttribAvail(const int_attrib::CamAttrib attrib)
Definition: cam_usb.cpp:355
virtual bool retrieveFrame(base::samples::frame::Frame &frame, const int timeout=1000)
Definition: cam_usb.cpp:152
~CamUsb()
Definition: cam_usb.cpp:15
virtual bool isAttribSet(const enum_attrib::CamAttrib attrib)
Definition: cam_usb.cpp:470
double calculateFPS()
Definition: cam_usb.h:310
virtual bool setIpSettings(const CamInfo &cam, const IPSettings &ip_settings) const
Definition: cam_usb.cpp:232
int getV4L2Attrib(const int control_id)
Definition: cam_usb.cpp:542
void fastInit(int width, int height)
Definition: cam_usb.cpp:20
virtual bool isFrameAvailable()
Definition: cam_usb.cpp:208
bool storeFrame(base::samples::frame::Frame &frame, std::string const &file_name)
Definition: cam_usb.cpp:204
virtual int listCameras(std::vector< CamInfo > &cam_infos) const
Definition: cam_usb.cpp:28
Definition: cam_usb.h:33
Definition: cam_usb.h:31
virtual int skipFrames()
Definition: cam_usb.cpp:219
virtual bool triggerFrame()
Definition: cam_usb.cpp:620
CAM_USB_MODE
Definition: cam_usb.h:30
virtual int getAttrib(const int_attrib::CamAttrib attrib)
Definition: cam_usb.cpp:429
virtual bool isAttribAvail(const str_attrib::CamAttrib attrib)
Definition: cam_usb.h:170
bool setV4L2Attrib(const int control_id, const int value)
Definition: cam_usb.cpp:558
virtual std::string getAttrib(const str_attrib::CamAttrib attrib)
Definition: cam_usb.h:190
virtual void saveConfiguration(uint8_t index)
Definition: cam_usb.h:286
virtual void synchronizeWithSystemTime(uint32_t time_interval)
Definition: cam_usb.h:280
static const uint32_t CAM_ID
Definition: cam_usb.h:58
virtual int getFileDescriptor() const
Definition: cam_usb.cpp:667
bool printCameraInformations()
Definition: cam_usb.cpp:636