ViSP  2.7.0
vp1394TwoGrabber.h
1 /****************************************************************************
2  *
3  * $Id: vp1394TwoGrabber.h 4056 2013-01-05 13:04:42Z fspindle $
4  *
5  * This file is part of the ViSP software.
6  * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
7  *
8  * This software is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * ("GPL") version 2 as published by the Free Software Foundation.
11  * See the file LICENSE.txt at the root directory of this source
12  * distribution for additional information about the GNU GPL.
13  *
14  * For using ViSP with software that can not be combined with the GNU
15  * GPL, please contact INRIA about acquiring a ViSP Professional
16  * Edition License.
17  *
18  * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
19  *
20  * This software was developed at:
21  * INRIA Rennes - Bretagne Atlantique
22  * Campus Universitaire de Beaulieu
23  * 35042 Rennes Cedex
24  * France
25  * http://www.irisa.fr/lagadic
26  *
27  * If you have questions regarding the use of this file, please contact
28  * INRIA at visp@inria.fr
29  *
30  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
31  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
32  *
33  *
34  * Description:
35  * Firewire cameras video capture.
36  *
37  * Authors:
38  * Fabien Spindler
39  *
40  *****************************************************************************/
41 
60 #ifndef vp1394TwoGrabber_h
61 #define vp1394TwoGrabber_h
62 
63 #include <visp/vpConfig.h>
64 
65 #include <list>
66 
67 #if defined(VISP_HAVE_DC1394_2)
68 
69 
193 /*
194  * Interface with libdc1394 2.x
195  */
196 #include <string.h>
197 
198 #include <dc1394/control.h>
199 #include <dc1394/utils.h>
200 #include <dc1394/vendor/avt.h>
201 
202 #include <visp/vpImage.h>
203 #include <visp/vpFrameGrabber.h>
204 #include <visp/vpRGBa.h>
205 #ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
206 # include <visp/vpList.h>
207 #endif
208 
209 
210 class VISP_EXPORT vp1394TwoGrabber : public vpFrameGrabber
211 {
212 
213  public:
214  static const char * strVideoMode[DC1394_VIDEO_MODE_NUM];
215  static const char * strFramerate[DC1394_FRAMERATE_NUM];
216  static const char * strColorCoding[DC1394_COLOR_CODING_NUM];
217 
222  typedef enum {
223  vpISO_SPEED_100 = DC1394_ISO_SPEED_100,
224  vpISO_SPEED_200 = DC1394_ISO_SPEED_200,
225  vpISO_SPEED_400 = DC1394_ISO_SPEED_400,
226  vpISO_SPEED_800 = DC1394_ISO_SPEED_800,
227  vpISO_SPEED_1600 = DC1394_ISO_SPEED_1600,
228  vpISO_SPEED_3200 = DC1394_ISO_SPEED_3200
229  } vp1394TwoIsoSpeedType;
230 
235  typedef enum {
236  vpVIDEO_MODE_160x120_YUV444 = DC1394_VIDEO_MODE_160x120_YUV444,
237  vpVIDEO_MODE_320x240_YUV422 = DC1394_VIDEO_MODE_320x240_YUV422,
238  vpVIDEO_MODE_640x480_YUV411 = DC1394_VIDEO_MODE_640x480_YUV411,
239  vpVIDEO_MODE_640x480_YUV422 = DC1394_VIDEO_MODE_640x480_YUV422,
240  vpVIDEO_MODE_640x480_RGB8 = DC1394_VIDEO_MODE_640x480_RGB8,
241  vpVIDEO_MODE_640x480_MONO8 = DC1394_VIDEO_MODE_640x480_MONO8,
242  vpVIDEO_MODE_640x480_MONO16 = DC1394_VIDEO_MODE_640x480_MONO16,
243  vpVIDEO_MODE_800x600_YUV422 = DC1394_VIDEO_MODE_800x600_YUV422,
244  vpVIDEO_MODE_800x600_RGB8 = DC1394_VIDEO_MODE_800x600_RGB8,
245  vpVIDEO_MODE_800x600_MONO8 = DC1394_VIDEO_MODE_800x600_MONO8,
246  vpVIDEO_MODE_1024x768_YUV422 = DC1394_VIDEO_MODE_1024x768_YUV422,
247  vpVIDEO_MODE_1024x768_RGB8 = DC1394_VIDEO_MODE_1024x768_RGB8,
248  vpVIDEO_MODE_1024x768_MONO8 = DC1394_VIDEO_MODE_1024x768_MONO8,
249  vpVIDEO_MODE_800x600_MONO16 = DC1394_VIDEO_MODE_800x600_MONO16,
250  vpVIDEO_MODE_1024x768_MONO16 = DC1394_VIDEO_MODE_1024x768_MONO16,
251  vpVIDEO_MODE_1280x960_YUV422 = DC1394_VIDEO_MODE_1280x960_YUV422,
252  vpVIDEO_MODE_1280x960_RGB8 = DC1394_VIDEO_MODE_1280x960_RGB8,
253  vpVIDEO_MODE_1280x960_MONO8 = DC1394_VIDEO_MODE_1280x960_MONO8,
254  vpVIDEO_MODE_1600x1200_YUV422 = DC1394_VIDEO_MODE_1600x1200_YUV422,
255  vpVIDEO_MODE_1600x1200_RGB8 = DC1394_VIDEO_MODE_1600x1200_RGB8,
256  vpVIDEO_MODE_1600x1200_MONO8 = DC1394_VIDEO_MODE_1600x1200_MONO8,
257  vpVIDEO_MODE_1280x960_MONO16 = DC1394_VIDEO_MODE_1280x960_MONO16,
258  vpVIDEO_MODE_1600x1200_MONO16 = DC1394_VIDEO_MODE_1600x1200_MONO16,
259  vpVIDEO_MODE_EXIF = DC1394_VIDEO_MODE_EXIF,
260  vpVIDEO_MODE_FORMAT7_0 = DC1394_VIDEO_MODE_FORMAT7_0,
261  vpVIDEO_MODE_FORMAT7_1 = DC1394_VIDEO_MODE_FORMAT7_1,
262  vpVIDEO_MODE_FORMAT7_2 = DC1394_VIDEO_MODE_FORMAT7_2,
263  vpVIDEO_MODE_FORMAT7_3 = DC1394_VIDEO_MODE_FORMAT7_3,
264  vpVIDEO_MODE_FORMAT7_4 = DC1394_VIDEO_MODE_FORMAT7_4,
265  vpVIDEO_MODE_FORMAT7_5 = DC1394_VIDEO_MODE_FORMAT7_5,
266  vpVIDEO_MODE_FORMAT7_6 = DC1394_VIDEO_MODE_FORMAT7_6,
267  vpVIDEO_MODE_FORMAT7_7 = DC1394_VIDEO_MODE_FORMAT7_7
268  } vp1394TwoVideoModeType;
269 
274  typedef enum {
275  vpFRAMERATE_1_875 = DC1394_FRAMERATE_1_875,
276  vpFRAMERATE_3_75 = DC1394_FRAMERATE_3_75,
277  vpFRAMERATE_7_5 = DC1394_FRAMERATE_7_5,
278  vpFRAMERATE_15 = DC1394_FRAMERATE_15,
279  vpFRAMERATE_30 = DC1394_FRAMERATE_30,
280  vpFRAMERATE_60 = DC1394_FRAMERATE_60,
281  vpFRAMERATE_120 = DC1394_FRAMERATE_120,
282  vpFRAMERATE_240 = DC1394_FRAMERATE_240
283  } vp1394TwoFramerateType;
284 
289  typedef enum {
290  vpCOLOR_CODING_MONO8 = DC1394_COLOR_CODING_MONO8,
291  vpCOLOR_CODING_YUV411 = DC1394_COLOR_CODING_YUV411,
292  vpCOLOR_CODING_YUV422 = DC1394_COLOR_CODING_YUV422,
293  vpCOLOR_CODING_YUV444 = DC1394_COLOR_CODING_YUV444,
294  vpCOLOR_CODING_RGB8 = DC1394_COLOR_CODING_RGB8,
295  vpCOLOR_CODING_MONO16 = DC1394_COLOR_CODING_MONO16,
296  vpCOLOR_CODING_RGB16 = DC1394_COLOR_CODING_RGB16,
297  vpCOLOR_CODING_MONO16S = DC1394_COLOR_CODING_MONO16S,
298  vpCOLOR_CODING_RGB16S = DC1394_COLOR_CODING_RGB16S,
299  vpCOLOR_CODING_RAW8 = DC1394_COLOR_CODING_RAW8,
300  vpCOLOR_CODING_RAW16 = DC1394_COLOR_CODING_RAW16
301  } vp1394TwoColorCodingType;
302 
307  typedef enum {
308  vpFEATURE_BRIGHTNESS = DC1394_FEATURE_BRIGHTNESS,
309  vpFEATURE_EXPOSURE = DC1394_FEATURE_EXPOSURE,
310  vpFEATURE_SHARPNESS = DC1394_FEATURE_SHARPNESS,
311 // vpFEATURE_WHITE_BALANCE = DC1394_FEATURE_WHITE_BALANCE,
312  vpFEATURE_HUE = DC1394_FEATURE_HUE,
313  vpFEATURE_SATURATION = DC1394_FEATURE_SATURATION,
314  vpFEATURE_GAMMA = DC1394_FEATURE_GAMMA,
315  vpFEATURE_SHUTTER = DC1394_FEATURE_SHUTTER,
316  vpFEATURE_GAIN = DC1394_FEATURE_GAIN,
317  vpFEATURE_IRIS = DC1394_FEATURE_IRIS,
318 // vpFEATURE_FOCUS = DC1394_FEATURE_FOCUS,
319 // vpFEATURE_TEMPERATURE = DC1394_FEATURE_TEMPERATURE,
320 // vpFEATURE_TRIGGER = DC1394_FEATURE_TRIGGER,
321 // vpFEATURE_TRIGGER_DELAY = DC1394_FEATURE_TRIGGER_DELAY,
322 // vpFEATURE_WHITE_SHADING = DC1394_FEATURE_WHITE_SHADING,
323 // vpFEATURE_FRAME_RATE = DC1394_FEATURE_FRAME_RATE,
324 // vpFEATURE_ZOOM = DC1394_FEATURE_ZOOM,
325 // vpFEATURE_PAN = DC1394_FEATURE_PAN,
326 // vpFEATURE_TILT = DC1394_FEATURE_TILT,
327 // vpFEATURE_OPTICAL_FILTER = DC1394_FEATURE_OPTICAL_FILTER,
328 // vpFEATURE_CAPTURE_SIZE = DC1394_FEATURE_CAPTURE_SIZE,
329 // vpFEATURE_CAPTURE_QUALITY = DC1394_FEATURE_CAPTURE_QUALITY
330  } vp1394TwoParametersType;
331 
332 
333  private:
334 
338  typedef struct{
339  uint32_t brightness ;
340  uint32_t exposure;
341  uint32_t sharpness;
342 // uint32_t whiteBalance;
343  uint32_t hue;
344  uint32_t saturation;
345  uint32_t gamma;
346  uint32_t shutter ;
347  uint32_t gain ;
348  uint32_t iris;
349 // uint32_t focus;
350 // uint32_t temperature ;
351 // uint32_t trigger ;
352 // uint32_t triggerDelay ;
353 // uint32_t whiteShadding ;
354 // uint32_t frameRate ;
355 // uint32_t zoom;
356 // uint32_t pan;
357 // uint32_t tilt ;
358 // uint32_t opticalFilter ;
359 // uint32_t captureSize;
360 // uint32_t captureQuality ;
361  } vpDc1394TwoCameraParametersData;
362 
363 
364  public:
365  vp1394TwoGrabber(bool reset=true);
366  virtual ~vp1394TwoGrabber();
367 
369  void acquire(vpImage<unsigned char> &I, uint64_t &timestamp, uint32_t &id);
370  void acquire(vpImage<vpRGBa> &I);
371  void acquire(vpImage<vpRGBa> &I, uint64_t &timestamp, uint32_t &id);
372 
373  void close();
374 
375  static std::string colorCoding2string(vp1394TwoColorCodingType colorcoding);
376 
377  dc1394video_frame_t *dequeue();
378  dc1394video_frame_t *dequeue(vpImage<unsigned char> &I);
379  dc1394video_frame_t *dequeue(vpImage<unsigned char> &I, uint64_t &timestamp, uint32_t &id);
380  dc1394video_frame_t *dequeue(vpImage<vpRGBa> &I);
381  dc1394video_frame_t *dequeue(vpImage<vpRGBa> &I, uint64_t &timestamp, uint32_t &id);
382  void enqueue(dc1394video_frame_t *frame);
383 
384  static std::string framerate2string(vp1394TwoFramerateType fps);
385 
386  uint64_t getCamera();
387  void getCamera(uint64_t &camera);
388  void getColorCoding(vp1394TwoColorCodingType & coding);
389  uint32_t getColorCodingSupported(vp1394TwoVideoModeType videomode,
390  std::list<vp1394TwoColorCodingType> & codings);
391  void getFramerate(vp1394TwoFramerateType & fps);
392  uint32_t getFramerateSupported(vp1394TwoVideoModeType videomode,
393  std::list<vp1394TwoFramerateType> & fps);
394  uint64_t getGuid();
395  void getGuid(uint64_t &guid);
396  void getHeight(unsigned int &height);
397  unsigned int getHeight();
398  void getNumCameras(unsigned int &ncameras);
399  unsigned int getNumCameras();
400  unsigned int getParameterValue(vp1394TwoParametersType param);
401  unsigned int getRingBufferSize();
402  void getVideoMode(vp1394TwoVideoModeType & videomode);
403  uint32_t getVideoModeSupported(std::list<vp1394TwoVideoModeType> & videomodes);
404  void getWidth(unsigned int &width);
405  unsigned int getWidth();
406 
407  bool isColor();
408  bool isColorCodingSupported(vp1394TwoVideoModeType videomode,
409  vp1394TwoColorCodingType coding);
410  bool isFramerateSupported(vp1394TwoVideoModeType videomode,
411  vp1394TwoFramerateType fps);
412  bool isVideoModeSupported(vp1394TwoVideoModeType videomode) ;
413  bool isVideoModeFormat7(vp1394TwoVideoModeType videomode);
414 
415  void open(vpImage<unsigned char> &I);
416  void open(vpImage<vpRGBa> &I);
417 
418  void printCameraInfo();
419 
420  void resetBus();
421 
422  void setAutoShutter(unsigned int minvalue, unsigned int maxvalue);
423  void setCamera(uint64_t camera);
424  void setColorCoding(vp1394TwoColorCodingType coding);
425  void setFormat7ROI(unsigned int left=0, unsigned int top=0,
426  unsigned int width=0, unsigned int height=0);
427  void setFramerate(vp1394TwoFramerateType fps);
428  void setIsoTransmissionSpeed(vp1394TwoIsoSpeedType isospeed);
429  void setPanControl(unsigned int panControlValue);
430  void setParameterValue(vp1394TwoParametersType param, unsigned int val);
431  void setRingBufferSize(unsigned int size);
432  void setVideoMode(vp1394TwoVideoModeType videomode);
433 
434  static vp1394TwoVideoModeType string2videoMode(std::string videomode);
435  static vp1394TwoFramerateType string2framerate(std::string fps);
436  static vp1394TwoColorCodingType string2colorCoding(std::string colorcoding);
437 
438  static std::string videoMode2string(vp1394TwoVideoModeType videomode);
439 
440 #ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
441 
444  vp_deprecated uint32_t getColorCodingSupported(vp1394TwoVideoModeType videomode,
446  vp_deprecated uint32_t getFramerateSupported(vp1394TwoVideoModeType videomode,
448  vp_deprecated uint32_t getVideoModeSupported(vpList<vp1394TwoVideoModeType> & videomodes);
449 
450 #endif
451 
452  private:
453  void open();
454  void initialize(bool reset);
455  void setCapture(dc1394switch_t _switch);
456  void setTransmission(dc1394switch_t _switch);
457  inline void updateDataCamToStruct();
458  inline void updateDataStructToCam();
459 
460  private:
461  dc1394camera_t *camera, **cameras;
462  unsigned int num_cameras;
463  unsigned int camera_id;
464 
465  bool verbose;
466  bool *camIsOpen;
467  unsigned int num_buffers;
468 
469  /* parameters for the cameras */
470  bool* isDataModified;
471  dc1394feature_mode_t* initialShutterMode;
472  vpDc1394TwoCameraParametersData* dataCam;
473 
474 #ifdef VISP_HAVE_DC1394_2_CAMERA_ENUMERATE
475  dc1394_t * d;
476  dc1394camera_list_t * list;
477 #endif
478 };
479 
480 
481 #endif
482 #endif
483 
Provide simple list management.
Definition: vpList.h:112
virtual void open(vpImage< unsigned char > &I)=0
unsigned int getWidth() const
Return the number of columns in the image.
Base class for all video devices. It is designed to provide a front end to video sources.
virtual void close()=0
Class for firewire ieee1394 video devices using libdc1394-2.x api.
virtual void acquire(vpImage< unsigned char > &I)=0
unsigned int getHeight() const
Return the number of rows in the image.