Fawkes API  Fawkes Development Version
v4l2.h
1 
2 /***************************************************************************
3  * v4l2.h - Video4Linux 2 camera access
4  *
5  * Generated: Sat Jul 5 20:40:20 2008
6  * Copyright 2008 Tobias Kellner
7  * 2010-2014 Tim Niemueller
8  ****************************************************************************/
9 
10 /* This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version. A runtime exception applies to
14  * this software (see LICENSE.GPL_WRE file mentioned below for details).
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  * GNU Library General Public License for more details.
20  *
21  * Read the full text in the LICENSE.GPL_WRE file in the doc directory.
22  */
23 
24 #ifndef __FIREVISION_CAMS_V4L2_H_
25 #define __FIREVISION_CAMS_V4L2_H_
26 
27 #include <fvcams/camera.h>
28 
29 #include <linux/types.h>
30 #include <linux/videodev2.h>
31 
32 #include <fvcams/control/color.h>
33 #include <fvcams/control/image.h>
34 
35 /* Number of buffers to use for memory mapped IO */
36 #define MMAP_NUM_BUFFERS 4;
37 
38 namespace firevision {
39 #if 0 /* just to make Emacs auto-indent happy */
40 }
41 #endif
42 
43 class CameraArgumentParser;
44 class V4L2CameraData;
45 
46 class V4L2Camera:
47  public Camera,
48  public CameraControlColor,
49  public CameraControlImage
50 {
51  friend class V4LCamera;
52 
53  public:
54  V4L2Camera(const char *device_name = "/dev/video0");
55  V4L2Camera(const CameraArgumentParser *cap);
56  virtual ~V4L2Camera();
57 
58  virtual void open();
59  virtual void start();
60  virtual void stop();
61  virtual void close();
62  virtual void flush();
63  virtual void capture();
64  virtual void print_info();
65  virtual bool ready();
66 
67  virtual unsigned char *buffer();
68  virtual unsigned int buffer_size();
69  virtual void dispose_buffer();
70 
71  virtual unsigned int pixel_width();
72  virtual unsigned int pixel_height();
73  virtual colorspace_t colorspace();
74  virtual fawkes::Time * capture_time();
75 
76  virtual void set_image_number(unsigned int n);
77 
78  virtual bool auto_gain();
79  virtual void set_auto_gain(bool enabled);
80  virtual bool auto_white_balance();
81  virtual void set_auto_white_balance(bool enabled);
82  virtual unsigned int exposure_auto();
83  virtual void set_exposure_auto(unsigned int exposure_auto);
84  virtual int red_balance();
85  virtual void set_red_balance(int red_balance);
86  virtual int blue_balance();
87  virtual void set_blue_balance(int blue_balance);
88  virtual int u_balance();
89  virtual void set_u_balance(int u_balance);
90  virtual int v_balance();
91  virtual void set_v_balance(int v_balance);
92  virtual unsigned int brightness();
93  virtual void set_brightness(unsigned int brightness);
94  virtual unsigned int contrast();
95  virtual void set_contrast(unsigned int contrast);
96  virtual unsigned int saturation();
97  virtual void set_saturation(unsigned int saturation);
98  virtual int hue();
99  virtual void set_hue(int hue);
100  virtual unsigned int exposure();
101  virtual void set_exposure(unsigned int exposure);
102  virtual unsigned int gain();
103  virtual void set_gain(unsigned int gain);
104 
105  virtual const char * format();
106  virtual void set_format(const char *format);
107  virtual unsigned int width();
108  virtual unsigned int height();
109  virtual void set_size(unsigned int width,
110  unsigned int height);
111  virtual bool horiz_mirror();
112  virtual bool vert_mirror();
113  virtual void set_horiz_mirror(bool enabled);
114  virtual void set_vert_mirror(bool enabled);
115  virtual unsigned int fps();
116  virtual void set_fps(unsigned int fps);
117  virtual unsigned int lens_x_corr();
118  virtual unsigned int lens_y_corr();
119  virtual void set_lens_x_corr(unsigned int x_corr);
120  virtual void set_lens_y_corr(unsigned int y_corr);
121 
122  virtual bool exposure_auto_priority();
123  virtual void set_exposure_auto_priority(bool enabled);
124  virtual unsigned int white_balance_temperature();
125  virtual void set_white_balance_temperature(unsigned int white_balance_temperature);
126  virtual unsigned int exposure_absolute();
127  virtual void set_exposure_absolute(unsigned int exposure_absolute);
128  virtual unsigned int sharpness();
129  virtual void set_sharpness(unsigned int sharpness);
130 
131 
132  protected:
133  V4L2Camera(const char *device_name, int dev);
134  virtual void set_one_control(const char *ctrl, unsigned int id, int value);
135  virtual int get_one_control(const char *ctrl, unsigned int id);
136 
137  private:
138  virtual void post_open();
139  virtual void select_read_method();
140  virtual void select_standard();
141  virtual void select_input();
142  virtual void select_format();
143  virtual void set_fps();
144  virtual void set_controls();
145  virtual void create_buffer();
146  virtual void reset_cropping();
147 
148  protected:
149  char *_device_name; ///< Device name
150 
151  private:
152  enum ReadMethod
153  {
154  READ, ///< read() input
155  MMAP, ///< Memory mapping input
156  UPTR ///< User pointer input
157  };
158 
159  enum TriState
160  {
161  NOT_SET, ///< parameter not set
162  TRUE, ///< parameter set to true
163  FALSE ///< parameter set to false
164  };
165 
166  struct FrameBuffer
167  {
168  unsigned char *buffer; ///< buffer
169  unsigned int size; ///< buffer size
170  };
171 
172  struct ControlParameterInt
173  {
174  bool set; ///< true if set
175  int value; ///< value
176  };
177 
178  int _dev; ///< Device file descriptor
179 
180  V4L2CameraData *_data;
181 
182  ReadMethod _read_method; ///< Used read method
183  bool _opened; ///< Device has been open()ed
184  bool _started; ///< Device has been start()ed
185  char *_standard; ///< Desired video standard
186  char *_input; ///< Desired video input
187  char _format[5]; ///< FourCC of the image format
188  colorspace_t _colorspace; ///< Used colorspace_t
189 
190  unsigned int _width; ///< Image width
191  unsigned int _height; ///< Image height
192  unsigned int _bytes_per_line; ///< Image bytes per line
193  FrameBuffer *_frame_buffers; ///< Image buffers
194  unsigned int _buffers_length; ///< Image buffer size
195  int _current_buffer; ///< Current Image buffer (-1 if not set)
196  fawkes::Time *_capture_time; ///< Time when last picture was captured
197 
198  bool _switch_u_v; ///< Switch U and V channels
199  unsigned int _fps; ///< Capture FPS
200 
201  TriState _awb; ///< Auto White Balance enabled
202  TriState _agc; ///< Auto Gain enabled
203  TriState _h_flip; ///< Horizontal mirror
204  TriState _v_flip; ///< Vertical mirror
205  ControlParameterInt _brightness; ///< Brightness [0-255] (def. 128)
206  ControlParameterInt _contrast; ///< Contrast [0-127] (def. 64)
207  ControlParameterInt _saturation; ///< Saturation [0-256] (def. 128)
208  ControlParameterInt _hue; ///< Hue [-180-180] (def. 0)
209  ControlParameterInt _red_balance; ///< Red Balance [0-255] (def. 128)
210  ControlParameterInt _blue_balance; ///< Blue Balance [0-255] (def. 128)
211  ControlParameterInt _exposure; ///< Exposure [0-65535] (def. 60)
212  ControlParameterInt _gain; ///< Gain [0-255] (def. 0)
213  ControlParameterInt _lens_x; ///< Lens Correction X [0-255] (def. 0)
214  ControlParameterInt _lens_y; ///< Lens Correction Y [0-255] (def. 0)
215 
216  ControlParameterInt _white_balance_temperature;
217  TriState _exposure_auto_priority;
218  ControlParameterInt _exposure_auto;
219  ControlParameterInt _exposure_absolute;
220  ControlParameterInt _sharpness;
221 
222 
223  bool _nao_hacks; ///< Nao-specific hacks (bad driver)
224 
225 };
226 
227 } // end namespace firevision
228 
229 #endif //__FIREVISION_CAMS_V4L2_H_
char * _device_name
Device name.
Definition: v4l2.h:149
virtual fawkes::Time * capture_time()
Get the Time of the last successfully captured image.
Definition: v4l2.cpp:1257
virtual void set_lens_y_corr(unsigned int y_corr)
Set lens y correction.
Definition: v4l2.cpp:1623
Camera interface for image aquiring devices in FireVision.
Definition: camera.h:35
virtual void set_brightness(unsigned int brightness)
Set new brightness.
Definition: v4l2.cpp:1453
virtual void close()
Close camera.
Definition: v4l2.cpp:993
virtual void stop()
Stop image transfer from the camera.
Definition: v4l2.cpp:1083
virtual unsigned int lens_y_corr()
Get current lens y correction.
Definition: v4l2.cpp:1610
virtual void print_info()
Print out camera information.
Definition: v4l2.cpp:1631
virtual bool auto_gain()
Return whether auto gain is enabled.
Definition: v4l2.cpp:1358
virtual void set_white_balance_temperature(unsigned int white_balance_temperature)
Set white balance.
Definition: v4l2.cpp:1309
virtual bool horiz_mirror()
Return whether the camera image is horizontally mirrored.
Definition: v4l2.cpp:1561
virtual void set_fps(unsigned int fps)
Set the number of frames per second the camera tries to deliver.
Definition: v4l2.cpp:1597
virtual const char * format()
Get the image format the camera currently uses.
Definition: v4l2.cpp:1526
Camera color control interface.
Definition: color.h:35
Video4Linux 2 camera access implementation.
Definition: v4l2.h:46
virtual void set_horiz_mirror(bool enabled)
Set whether the camera should mirror images horizontally.
Definition: v4l2.cpp:1573
virtual void set_auto_white_balance(bool enabled)
Enable/disable auto white balance.
Definition: v4l2.cpp:1377
A class for handling time.
Definition: time.h:91
Camera image control interface.
Definition: image.h:35
virtual unsigned int white_balance_temperature()
Get absolute white balance setting.
Definition: v4l2.cpp:1299
virtual void set_hue(int hue)
Set new hue.
Definition: v4l2.cpp:1492
Camera argument parser.
Definition: camargp.h:38
virtual colorspace_t colorspace()
Colorspace of returned image.
Definition: v4l2.cpp:1246
virtual void set_format(const char *format)
Set the image format the camera should use.
Definition: v4l2.cpp:1532
virtual int v_balance()
Get current v balance.
Definition: v4l2.cpp:1435
virtual void set_auto_gain(bool enabled)
Enable/disable auto gain.
Definition: v4l2.cpp:1364
virtual int u_balance()
Get current u balance.
Definition: v4l2.cpp:1423
virtual unsigned int brightness()
Get current brightness.
Definition: v4l2.cpp:1447
virtual void set_size(unsigned int width, unsigned int height)
Set the image size the camera should use.
Definition: v4l2.cpp:1552
virtual unsigned int buffer_size()
Size of buffer.
Definition: v4l2.cpp:1184
virtual unsigned int exposure_absolute()
Get absolute exposure time.
Definition: v4l2.cpp:1320
virtual void set_lens_x_corr(unsigned int x_corr)
Set lens x correction.
Definition: v4l2.cpp:1616
General Video4Linux camera implementation.
Definition: v4l.h:37
virtual int red_balance()
Get current red balance.
Definition: v4l2.cpp:1397
virtual unsigned int exposure_auto()
Return whether auto exposure is enabled.
Definition: v4l2.cpp:1384
V4L2Camera(const char *device_name="/dev/video0")
Constructor.
Definition: v4l2.cpp:89
virtual unsigned int contrast()
Get current contrast.
Definition: v4l2.cpp:1460
virtual bool exposure_auto_priority()
Get exposure_auto_priority V4L2 control.
Definition: v4l2.cpp:1278
virtual unsigned int pixel_width()
Width of image in pixels.
Definition: v4l2.cpp:1230
virtual unsigned char * buffer()
Get access to current image buffer.
Definition: v4l2.cpp:1176
virtual void set_contrast(unsigned int contrast)
Set new contrast.
Definition: v4l2.cpp:1466
virtual bool ready()
Camera is ready for taking pictures.
Definition: v4l2.cpp:1111
virtual unsigned int fps()
Get the number of frames per second that have been requested from the camera.
Definition: v4l2.cpp:1591
virtual ~V4L2Camera()
Destructor.
Definition: v4l2.cpp:401
virtual unsigned int height()
Get the current height of the image.
Definition: v4l2.cpp:1546
virtual unsigned int exposure()
Get current exposure.
Definition: v4l2.cpp:1499
virtual bool vert_mirror()
Return whether the camera image is vertically mirrored.
Definition: v4l2.cpp:1567
virtual void set_one_control(const char *ctrl, unsigned int id, int value)
Set one Camera control value.
Definition: v4l2.cpp:824
virtual void set_exposure_auto(unsigned int exposure_auto)
Enable/disable auto exposure.
Definition: v4l2.cpp:1390
virtual int get_one_control(const char *ctrl, unsigned int id)
Get one Camera control value.
Definition: v4l2.cpp:863
virtual void set_exposure(unsigned int exposure)
Set new exposure.
Definition: v4l2.cpp:1505
virtual void size(unsigned int &width, unsigned int &height)
Get the current image size.
Definition: image.cpp:96
virtual void set_saturation(unsigned int saturation)
Set new saturation.
Definition: v4l2.cpp:1479
virtual void set_vert_mirror(bool enabled)
Set whether the camera should mirror images vertically.
Definition: v4l2.cpp:1580
virtual void set_exposure_auto_priority(bool enabled)
Set exposure_auto_priority V4L2 control.
Definition: v4l2.cpp:1288
virtual void set_blue_balance(int blue_balance)
Set blue balance.
Definition: v4l2.cpp:1416
virtual void open()
Open the camera.
Definition: v4l2.cpp:413
virtual void set_red_balance(int red_balance)
Set red balance.
Definition: v4l2.cpp:1403
virtual void capture()
Capture an image.
Definition: v4l2.cpp:1124
virtual unsigned int width()
Get the current width of the image.
Definition: v4l2.cpp:1540
virtual void dispose_buffer()
Dispose current buffer.
Definition: v4l2.cpp:1192
virtual int hue()
Get current hue.
Definition: v4l2.cpp:1486
virtual unsigned int gain()
Get current gain.
Definition: v4l2.cpp:1512
virtual void set_gain(unsigned int gain)
Set new gain.
Definition: v4l2.cpp:1518
virtual int blue_balance()
Get current blue balance.
Definition: v4l2.cpp:1410
virtual void set_u_balance(int u_balance)
Set u balance.
Definition: v4l2.cpp:1429
virtual unsigned int sharpness()
Get sharpness value.
Definition: v4l2.cpp:1341
virtual bool auto_white_balance()
Return whether auto white balance is enabled.
Definition: v4l2.cpp:1371
virtual unsigned int saturation()
Get current saturation.
Definition: v4l2.cpp:1473
virtual void set_exposure_absolute(unsigned int exposure_absolute)
set absolute exposure time (1/s)
Definition: v4l2.cpp:1330
virtual void start()
Start image transfer from the camera.
Definition: v4l2.cpp:1037
virtual void flush()
Flush image queue.
Definition: v4l2.cpp:1117
virtual void set_image_number(unsigned int n)
Set image number to retrieve.
Definition: v4l2.cpp:1263
virtual void set_v_balance(int v_balance)
Set v balance.
Definition: v4l2.cpp:1441
virtual void set_sharpness(unsigned int sharpness)
Set sharpness.
Definition: v4l2.cpp:1351
virtual unsigned int pixel_height()
Height of image in pixels.
Definition: v4l2.cpp:1238
virtual unsigned int lens_x_corr()
Get current lens x correction.
Definition: v4l2.cpp:1604