Visual Servoing Platform version 3.6.0
Loading...
Searching...
No Matches
vp1394TwoGrabber.h
1/****************************************************************************
2 *
3 * ViSP, open source Visual Servoing Platform software.
4 * Copyright (C) 2005 - 2023 by Inria. All rights reserved.
5 *
6 * This software is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 * See the file LICENSE.txt at the root directory of this source
11 * distribution for additional information about the GNU GPL.
12 *
13 * For using ViSP with software that can not be combined with the GNU
14 * GPL, please contact Inria about acquiring a ViSP Professional
15 * Edition License.
16 *
17 * See https://visp.inria.fr for more information.
18 *
19 * This software was developed at:
20 * Inria Rennes - Bretagne Atlantique
21 * Campus Universitaire de Beaulieu
22 * 35042 Rennes Cedex
23 * France
24 *
25 * If you have questions regarding the use of this file, please contact
26 * Inria at visp@inria.fr
27 *
28 * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
29 * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
30 *
31 * Description:
32 * Firewire cameras video capture.
33 *
34*****************************************************************************/
35
52#ifndef vp1394TwoGrabber_h
53#define vp1394TwoGrabber_h
54
55#include <visp3/core/vpConfig.h>
57#include <list>
58
59#if defined(VISP_HAVE_DC1394)
60
170/*
171 * Interface with libdc1394 2.x
172 */
173#include <string.h>
174
175#include <dc1394/control.h>
176#include <dc1394/utils.h>
177#include <dc1394/vendor/avt.h>
178
179#include <visp3/core/vpFrameGrabber.h>
180#include <visp3/core/vpImage.h>
181#include <visp3/core/vpRGBa.h>
182
183class VISP_EXPORT vp1394TwoGrabber : public vpFrameGrabber
184{
185
186public:
187 static const char *strVideoMode[DC1394_VIDEO_MODE_NUM];
188 static const char *strFramerate[DC1394_FRAMERATE_NUM];
189 static const char *strColorCoding[DC1394_COLOR_CODING_NUM];
190
195 typedef enum {
196 vpISO_SPEED_100 = DC1394_ISO_SPEED_100,
197 vpISO_SPEED_200 = DC1394_ISO_SPEED_200,
198 vpISO_SPEED_400 = DC1394_ISO_SPEED_400,
199 vpISO_SPEED_800 = DC1394_ISO_SPEED_800,
200 vpISO_SPEED_1600 = DC1394_ISO_SPEED_1600,
201 vpISO_SPEED_3200 = DC1394_ISO_SPEED_3200
202 } vp1394TwoIsoSpeedType;
203
208 typedef enum {
209 vpVIDEO_MODE_160x120_YUV444 = DC1394_VIDEO_MODE_160x120_YUV444,
210 vpVIDEO_MODE_320x240_YUV422 = DC1394_VIDEO_MODE_320x240_YUV422,
211 vpVIDEO_MODE_640x480_YUV411 = DC1394_VIDEO_MODE_640x480_YUV411,
212 vpVIDEO_MODE_640x480_YUV422 = DC1394_VIDEO_MODE_640x480_YUV422,
213 vpVIDEO_MODE_640x480_RGB8 = DC1394_VIDEO_MODE_640x480_RGB8,
214 vpVIDEO_MODE_640x480_MONO8 = DC1394_VIDEO_MODE_640x480_MONO8,
215 vpVIDEO_MODE_640x480_MONO16 = DC1394_VIDEO_MODE_640x480_MONO16,
216 vpVIDEO_MODE_800x600_YUV422 = DC1394_VIDEO_MODE_800x600_YUV422,
217 vpVIDEO_MODE_800x600_RGB8 = DC1394_VIDEO_MODE_800x600_RGB8,
218 vpVIDEO_MODE_800x600_MONO8 = DC1394_VIDEO_MODE_800x600_MONO8,
219 vpVIDEO_MODE_1024x768_YUV422 = DC1394_VIDEO_MODE_1024x768_YUV422,
220 vpVIDEO_MODE_1024x768_RGB8 = DC1394_VIDEO_MODE_1024x768_RGB8,
221 vpVIDEO_MODE_1024x768_MONO8 = DC1394_VIDEO_MODE_1024x768_MONO8,
222 vpVIDEO_MODE_800x600_MONO16 = DC1394_VIDEO_MODE_800x600_MONO16,
223 vpVIDEO_MODE_1024x768_MONO16 = DC1394_VIDEO_MODE_1024x768_MONO16,
224 vpVIDEO_MODE_1280x960_YUV422 = DC1394_VIDEO_MODE_1280x960_YUV422,
225 vpVIDEO_MODE_1280x960_RGB8 = DC1394_VIDEO_MODE_1280x960_RGB8,
226 vpVIDEO_MODE_1280x960_MONO8 = DC1394_VIDEO_MODE_1280x960_MONO8,
227 vpVIDEO_MODE_1600x1200_YUV422 = DC1394_VIDEO_MODE_1600x1200_YUV422,
228 vpVIDEO_MODE_1600x1200_RGB8 = DC1394_VIDEO_MODE_1600x1200_RGB8,
229 vpVIDEO_MODE_1600x1200_MONO8 = DC1394_VIDEO_MODE_1600x1200_MONO8,
230 vpVIDEO_MODE_1280x960_MONO16 = DC1394_VIDEO_MODE_1280x960_MONO16,
231 vpVIDEO_MODE_1600x1200_MONO16 = DC1394_VIDEO_MODE_1600x1200_MONO16,
232 vpVIDEO_MODE_EXIF = DC1394_VIDEO_MODE_EXIF,
233 vpVIDEO_MODE_FORMAT7_0 = DC1394_VIDEO_MODE_FORMAT7_0,
234 vpVIDEO_MODE_FORMAT7_1 = DC1394_VIDEO_MODE_FORMAT7_1,
235 vpVIDEO_MODE_FORMAT7_2 = DC1394_VIDEO_MODE_FORMAT7_2,
236 vpVIDEO_MODE_FORMAT7_3 = DC1394_VIDEO_MODE_FORMAT7_3,
237 vpVIDEO_MODE_FORMAT7_4 = DC1394_VIDEO_MODE_FORMAT7_4,
238 vpVIDEO_MODE_FORMAT7_5 = DC1394_VIDEO_MODE_FORMAT7_5,
239 vpVIDEO_MODE_FORMAT7_6 = DC1394_VIDEO_MODE_FORMAT7_6,
240 vpVIDEO_MODE_FORMAT7_7 = DC1394_VIDEO_MODE_FORMAT7_7
241 } vp1394TwoVideoModeType;
242
247 typedef enum {
248 vpFRAMERATE_1_875 = DC1394_FRAMERATE_1_875,
249 vpFRAMERATE_3_75 = DC1394_FRAMERATE_3_75,
250 vpFRAMERATE_7_5 = DC1394_FRAMERATE_7_5,
251 vpFRAMERATE_15 = DC1394_FRAMERATE_15,
252 vpFRAMERATE_30 = DC1394_FRAMERATE_30,
253 vpFRAMERATE_60 = DC1394_FRAMERATE_60,
254 vpFRAMERATE_120 = DC1394_FRAMERATE_120,
255 vpFRAMERATE_240 = DC1394_FRAMERATE_240
256 } vp1394TwoFramerateType;
257
262 typedef enum {
263 vpCOLOR_CODING_MONO8 = DC1394_COLOR_CODING_MONO8,
264 vpCOLOR_CODING_YUV411 = DC1394_COLOR_CODING_YUV411,
265 vpCOLOR_CODING_YUV422 = DC1394_COLOR_CODING_YUV422,
266 vpCOLOR_CODING_YUV444 = DC1394_COLOR_CODING_YUV444,
267 vpCOLOR_CODING_RGB8 = DC1394_COLOR_CODING_RGB8,
268 vpCOLOR_CODING_MONO16 = DC1394_COLOR_CODING_MONO16,
269 vpCOLOR_CODING_RGB16 = DC1394_COLOR_CODING_RGB16,
270 vpCOLOR_CODING_MONO16S = DC1394_COLOR_CODING_MONO16S,
271 vpCOLOR_CODING_RGB16S = DC1394_COLOR_CODING_RGB16S,
272 vpCOLOR_CODING_RAW8 = DC1394_COLOR_CODING_RAW8,
273 vpCOLOR_CODING_RAW16 = DC1394_COLOR_CODING_RAW16
274 } vp1394TwoColorCodingType;
275
280 typedef enum {
281 vpFEATURE_BRIGHTNESS = DC1394_FEATURE_BRIGHTNESS,
282 vpFEATURE_EXPOSURE = DC1394_FEATURE_EXPOSURE,
283 vpFEATURE_SHARPNESS = DC1394_FEATURE_SHARPNESS,
284 // vpFEATURE_WHITE_BALANCE = DC1394_FEATURE_WHITE_BALANCE,
285 vpFEATURE_HUE = DC1394_FEATURE_HUE,
286 vpFEATURE_SATURATION = DC1394_FEATURE_SATURATION,
287 vpFEATURE_GAMMA = DC1394_FEATURE_GAMMA,
288 vpFEATURE_SHUTTER = DC1394_FEATURE_SHUTTER,
289 vpFEATURE_GAIN = DC1394_FEATURE_GAIN,
290 vpFEATURE_IRIS = DC1394_FEATURE_IRIS,
291 // vpFEATURE_FOCUS = DC1394_FEATURE_FOCUS,
292 // vpFEATURE_TEMPERATURE = DC1394_FEATURE_TEMPERATURE,
293 // vpFEATURE_TRIGGER = DC1394_FEATURE_TRIGGER,
294 // vpFEATURE_TRIGGER_DELAY = DC1394_FEATURE_TRIGGER_DELAY,
295 // vpFEATURE_WHITE_SHADING = DC1394_FEATURE_WHITE_SHADING,
296 // vpFEATURE_FRAME_RATE = DC1394_FEATURE_FRAME_RATE,
297 // vpFEATURE_ZOOM = DC1394_FEATURE_ZOOM,
298 // vpFEATURE_PAN = DC1394_FEATURE_PAN,
299 // vpFEATURE_TILT = DC1394_FEATURE_TILT,
300 // vpFEATURE_OPTICAL_FILTER = DC1394_FEATURE_OPTICAL_FILTER,
301 // vpFEATURE_CAPTURE_SIZE = DC1394_FEATURE_CAPTURE_SIZE,
302 // vpFEATURE_CAPTURE_QUALITY = DC1394_FEATURE_CAPTURE_QUALITY
303 } vp1394TwoParametersType;
304
305private:
309 typedef struct {
310 uint32_t brightness;
311 uint32_t exposure;
312 uint32_t sharpness;
313 // uint32_t whiteBalance;
314 uint32_t hue;
315 uint32_t saturation;
316 uint32_t gamma;
317 uint32_t shutter;
318 uint32_t gain;
319 uint32_t iris;
320 // uint32_t focus;
321 // uint32_t temperature ;
322 // uint32_t trigger ;
323 // uint32_t triggerDelay ;
324 // uint32_t whiteShadding ;
325 // uint32_t frameRate ;
326 // uint32_t zoom;
327 // uint32_t pan;
328 // uint32_t tilt ;
329 // uint32_t opticalFilter ;
330 // uint32_t captureSize;
331 // uint32_t captureQuality ;
332 } vpDc1394TwoCameraParametersData;
333
334 // private:
335 //#ifndef DOXYGEN_SHOULD_SKIP_THIS
336 // vp1394TwoGrabber(const vp1394TwoGrabber &)
337 // : camera(NULL), cameras(NULL), num_cameras(0), camera_id(0),
338 // verbose(false), camIsOpen(NULL),
339 // num_buffers(4), // ring buffer size
340 // isDataModified(NULL), initialShutterMode(NULL), dataCam(NULL)
341 // #ifdef VISP_HAVE_DC1394_CAMERA_ENUMERATE // new API >
342 // libdc1394-2.0.0-rc7 , d(NULL),
343 // list(NULL)
344 // #endif
345 // {
346 // throw vpException(vpException::functionNotImplementedError,"Not
347 // implemented!");
348 // }
349 // vp1394TwoGrabber &operator=(const vp1394TwoGrabber &){
350 // throw vpException(vpException::functionNotImplementedError,"Not
351 // implemented!"); return *this;
352 // }
353 //#endif
354
355public:
356 explicit vp1394TwoGrabber(bool reset = true);
357 virtual ~vp1394TwoGrabber();
358
360 void acquire(vpImage<unsigned char> &I, uint64_t &timestamp, uint32_t &id);
361 void acquire(vpImage<vpRGBa> &I);
362 void acquire(vpImage<vpRGBa> &I, uint64_t &timestamp, uint32_t &id);
363
364 void close();
365
366 static std::string colorCoding2string(vp1394TwoColorCodingType colorcoding);
367
368 dc1394video_frame_t *dequeue();
369 dc1394video_frame_t *dequeue(vpImage<unsigned char> &I);
370 dc1394video_frame_t *dequeue(vpImage<unsigned char> &I, uint64_t &timestamp, uint32_t &id);
371 dc1394video_frame_t *dequeue(vpImage<vpRGBa> &I);
372 dc1394video_frame_t *dequeue(vpImage<vpRGBa> &I, uint64_t &timestamp, uint32_t &id);
373 void enqueue(dc1394video_frame_t *frame);
374
375 static std::string framerate2string(vp1394TwoFramerateType fps);
376
377 void getAutoGain(unsigned int &minvalue, unsigned int &maxvalue);
378 void getAutoShutter(unsigned int &minvalue, unsigned int &maxvalue);
379
380 uint64_t getCamera();
381 void getCamera(uint64_t &camera);
382 void getColorCoding(vp1394TwoColorCodingType &coding);
383 uint32_t getColorCodingSupported(vp1394TwoVideoModeType videomode, std::list<vp1394TwoColorCodingType> &codings);
384 void getFramerate(vp1394TwoFramerateType &fps);
385 uint32_t getFramerateSupported(vp1394TwoVideoModeType videomode, std::list<vp1394TwoFramerateType> &fps);
386 uint64_t getGuid();
387 void getGuid(uint64_t &guid);
388 void getHeight(unsigned int &height);
389 unsigned int getHeight();
390 void getNumCameras(unsigned int &ncameras) const;
391 unsigned int getNumCameras() const;
392 unsigned int getParameterValue(vp1394TwoParametersType param);
393 unsigned int getRingBufferSize() const;
394 void getVideoMode(vp1394TwoVideoModeType &videomode);
395 uint32_t getVideoModeSupported(std::list<vp1394TwoVideoModeType> &videomodes);
396 void getWidth(unsigned int &width);
397 unsigned int getWidth();
398
399 bool isColor();
400 bool isColorCodingSupported(vp1394TwoVideoModeType videomode, vp1394TwoColorCodingType coding);
401 bool isFramerateSupported(vp1394TwoVideoModeType videomode, vp1394TwoFramerateType fps);
402 bool isVideoModeSupported(vp1394TwoVideoModeType videomode);
403 bool isVideoModeFormat7(vp1394TwoVideoModeType videomode);
404
406 void open(vpImage<vpRGBa> &I);
407
409 vp1394TwoGrabber &operator>>(vpImage<vpRGBa> &I);
410
411 void printCameraInfo();
412
413 void resetBus();
414
415 void setAutoGain(bool enable = true);
416 void setAutoGain(unsigned int minvalue, unsigned int maxvalue);
417 void setAutoShutter(bool enable = true);
418 void setAutoShutter(unsigned int minvalue, unsigned int maxvalue);
419 void setCamera(uint64_t camera);
420 void setColorCoding(vp1394TwoColorCodingType coding);
421 void setFormat7ROI(unsigned int left = 0, unsigned int top = 0, unsigned int width = 0, unsigned int height = 0);
422 void setFramerate(vp1394TwoFramerateType fps);
423 void setIsoTransmissionSpeed(vp1394TwoIsoSpeedType isospeed);
424 void setPanControl(unsigned int panControlValue);
425 void setParameterValue(vp1394TwoParametersType param, unsigned int val);
426 void setRingBufferSize(unsigned int size);
427 void setVideoMode(vp1394TwoVideoModeType videomode);
428
429 static vp1394TwoVideoModeType string2videoMode(std::string videomode);
430 static vp1394TwoFramerateType string2framerate(std::string fps);
431 static vp1394TwoColorCodingType string2colorCoding(std::string colorcoding);
432
433 static std::string videoMode2string(vp1394TwoVideoModeType videomode);
434
435private:
436 void open();
437 void initialize(bool reset);
438 void setCapture(dc1394switch_t _switch);
439 void setTransmission(dc1394switch_t _switch);
440 inline void updateDataCamToStruct();
441 inline void updateDataStructToCam();
442
443private:
444 dc1394camera_t *camera, **cameras;
445 unsigned int num_cameras;
446 unsigned int camera_id;
447
448 bool verbose;
449 bool *camIsOpen;
450 unsigned int num_buffers;
451
452 /* parameters for the cameras */
453 bool *isDataModified;
454 dc1394feature_mode_t *initialShutterMode;
455 vpDc1394TwoCameraParametersData *dataCam;
456
457#ifdef VISP_HAVE_DC1394_CAMERA_ENUMERATE
458 dc1394_t *d;
459 dc1394camera_list_t *list;
460#endif
461};
462
463#endif
464#endif
Class for firewire ieee1394 video devices using libdc1394-2.x api.
Base class for all video devices. It is designed to provide a front end to video sources.
virtual void open(vpImage< unsigned char > &I)=0
unsigned int getWidth() const
Return the number of columns in the image.
virtual void acquire(vpImage< unsigned char > &I)=0
unsigned int getHeight() const
Return the number of rows in the image.
virtual void close()=0
Definition of the vpImage class member functions.
Definition vpImage.h:135