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