uvc_cam.h
Go to the documentation of this file.
1 // The uvc_cam package provides a simple interface to webcams visible through
2 // the uvcvideo driver. It includes code adapted from 'guvcview', which in
3 // turn adapted some code from 'luvcview'.
4 // Copyright (C) 2009 Morgan Quigley
5 //
6 // This program is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU General Public License
8 // as published by the Free Software Foundation; either version 2
9 // of the License, or (at your option) any later version.
10 
11 // This program is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
15 
16 // You should have received a copy of the GNU General Public License
17 // along with this program; if not, write to the Free Software
18 // Foundation, Inc.,
19 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21 
22 #ifndef UVC_CAM_H
23 #define UVC_CAM_H
24 
25 #include <string>
26 #include <libv4l2.h>
27 #include <linux/videodev2.h>
28 
29 #include <stdint.h>
30 
31 namespace uvc_cam
32 {
33 
35 {
40 };
41 
42 
43 static const int exp_vals[]=
44 {
49 };
50 
51 
52 
53 #define CSU32 const static uint32_t
54 
55 class Cam
56 {
57 public:
59  Cam(const char *device, mode_t _mode = MODE_RGB,
60  int _width = 640, int _height = 480, int _fps = 30);
61  ~Cam();
62  static void enumerate();
63  int grab(unsigned char **frame, uint32_t &bytes_used);
64  void release(unsigned buf_idx);
65  bool set_auto_white_balance(bool on);
66  void set_motion_thresholds(int lum, int count);
67  void set_control(uint32_t id, int val);
68  bool v4l2_query(int id, const std::string& name);
69  bool set_v4l2_control(int id, int value, const std::string& name);
70 private:
71  std::string device;
73  unsigned width, height, fps;
74  v4l2_format fmt;
75  v4l2_capability cap;
76  v4l2_streamparm streamparm;
77  v4l2_requestbuffers rb;
78  v4l2_buffer buf;
79  v4l2_timecode timecode;
80  static const unsigned NUM_BUFFER = 2;
81  void *mem[NUM_BUFFER];
82  unsigned buf_length;
83  unsigned char *rgb_frame, *last_yuv_frame;
84 
85  /*------------------------- new camera class controls ---------------------*/
87  CSU32 V4L2_CID_BASE_NEW = V4L2_CTRL_CLASS_USER_NEW | 0x900;
88  CSU32 V4L2_CID_POWER_LINE_FREQUENCY_NEW = V4L2_CID_BASE_NEW + 24;
89  CSU32 V4L2_CID_HUE_AUTO_NEW = V4L2_CID_BASE_NEW + 25;
91  CSU32 V4L2_CID_SHARPNESS_NEW = V4L2_CID_BASE_NEW + 27;
92  CSU32 V4L2_CID_BACKLIGHT_COMPENSATION_NEW = V4L2_CID_BASE_NEW + 28;
93  CSU32 V4L2_CID_LAST_NEW = V4L2_CID_BASE_NEW + 29;
94 
95  CSU32 V4L2_CTRL_CLASS_CAMERA_NEW = 0x009A0000; /* Camera class controls */
96  CSU32 V4L2_CID_CAMERA_CLASS_BASE_NEW = V4L2_CTRL_CLASS_CAMERA_NEW | 0x900;
97  CSU32 V4L2_CID_EXPOSURE_AUTO_NEW = V4L2_CID_CAMERA_CLASS_BASE_NEW + 1;
98  CSU32 V4L2_CID_EXPOSURE_ABSOLUTE_NEW = V4L2_CID_CAMERA_CLASS_BASE_NEW + 2;
99  CSU32 V4L2_CID_EXPOSURE_AUTO_PRIORITY_NEW = V4L2_CID_CAMERA_CLASS_BASE_NEW+3;
100  CSU32 V4L2_CID_PAN_RELATIVE_NEW = V4L2_CID_CAMERA_CLASS_BASE_NEW + 4;
101  CSU32 V4L2_CID_TILT_RELATIVE_NEW = V4L2_CID_CAMERA_CLASS_BASE_NEW + 5;
102  CSU32 V4L2_CID_PAN_RESET_NEW = V4L2_CID_CAMERA_CLASS_BASE_NEW + 6;
103  CSU32 V4L2_CID_TILT_RESET_NEW = V4L2_CID_CAMERA_CLASS_BASE_NEW + 7;
104  CSU32 V4L2_CID_PAN_ABSOLUTE_NEW = V4L2_CID_CAMERA_CLASS_BASE_NEW + 8;
105  CSU32 V4L2_CID_TILT_ABSOLUTE_NEW = V4L2_CID_CAMERA_CLASS_BASE_NEW + 9;
106  CSU32 V4L2_CID_FOCUS_ABSOLUTE_NEW = V4L2_CID_CAMERA_CLASS_BASE_NEW + 10;
107  CSU32 V4L2_CID_FOCUS_RELATIVE_NEW = V4L2_CID_CAMERA_CLASS_BASE_NEW + 11;
108  CSU32 V4L2_CID_FOCUS_AUTO_NEW = V4L2_CID_CAMERA_CLASS_BASE_NEW + 12;
109  CSU32 V4L2_CID_CAMERA_CLASS_LAST = V4L2_CID_CAMERA_CLASS_BASE_NEW + 13;
110 
111  /*--------------- old private class controls ------------------------------*/
113  CSU32 V4L2_CID_BACKLIGHT_COMPENSATION_OLD = V4L2_CID_PRIVATE_BASE_OLD + 0;
114  CSU32 V4L2_CID_POWER_LINE_FREQUENCY_OLD = V4L2_CID_PRIVATE_BASE_OLD + 1;
115  CSU32 V4L2_CID_SHARPNESS_OLD = V4L2_CID_PRIVATE_BASE_OLD + 2;
116  CSU32 V4L2_CID_HUE_AUTO_OLD = V4L2_CID_PRIVATE_BASE_OLD + 3;
117  CSU32 V4L2_CID_FOCUS_AUTO_OLD = V4L2_CID_PRIVATE_BASE_OLD + 4;
118  CSU32 V4L2_CID_FOCUS_ABSOLUTE_OLD = V4L2_CID_PRIVATE_BASE_OLD + 5;
119  CSU32 V4L2_CID_FOCUS_RELATIVE_OLD = V4L2_CID_PRIVATE_BASE_OLD + 6;
120  CSU32 V4L2_CID_PAN_RELATIVE_OLD = V4L2_CID_PRIVATE_BASE_OLD + 7;
121  CSU32 V4L2_CID_TILT_RELATIVE_OLD = V4L2_CID_PRIVATE_BASE_OLD + 8;
122  CSU32 V4L2_CID_PANTILT_RESET_OLD = V4L2_CID_PRIVATE_BASE_OLD + 9;
123  CSU32 V4L2_CID_EXPOSURE_AUTO_OLD = V4L2_CID_PRIVATE_BASE_OLD + 10;
124  CSU32 V4L2_CID_EXPOSURE_ABSOLUTE_OLD = V4L2_CID_PRIVATE_BASE_OLD + 11;
125  CSU32 V4L2_CID_WHITE_BALANCE_TEMP_AUTO_OLD = V4L2_CID_PRIVATE_BASE_OLD+12;
126  CSU32 V4L2_CID_WHITE_BALANCE_TEMP_OLD = V4L2_CID_PRIVATE_BASE_OLD + 13;
127  CSU32 V4L2_CID_PRIVATE_LAST = V4L2_CID_WHITE_BALANCE_TEMP_OLD + 1;
128  // dynamic controls
137  //CSU32 V4L2_CID_PAN_RELATIVE_LOGITECH = V4L2_CID_BASE_LOGITECH;
138  //CSU32 V4L2_CID_TILT_RELATIVE_LOGITECH = V4L2_CID_BASE_LOGITECH + 1;
139  CSU32 V4L2_CID_PANTILT_RESET_LOGITECH = V4L2_CID_BASE_LOGITECH + 2;
140  CSU32 V4L2_CID_FOCUS_LOGITECH = V4L2_CID_BASE_LOGITECH + 3;
141  CSU32 V4L2_CID_LED1_MODE_LOGITECH = V4L2_CID_BASE_LOGITECH + 4;
142  CSU32 V4L2_CID_LED1_FREQUENCY_LOGITECH = V4L2_CID_BASE_LOGITECH + 5;
143  CSU32 V4L2_CID_DISABLE_PROCESSING_LOGITECH = V4L2_CID_BASE_LOGITECH + 0x70;
144  CSU32 V4L2_CID_RAW_BITS_PER_PIXEL_LOGITECH = V4L2_CID_BASE_LOGITECH + 0x71;
146 
147 };
148 
149 }
150 
151 #endif
152 
CSU32 UVC_CTRL_DATA_TYPE_UNSIGNED
Definition: uvc_cam.h:131
CSU32 V4L2_CID_LED1_MODE_LOGITECH
Definition: uvc_cam.h:141
unsigned char * rgb_frame
Definition: uvc_cam.h:83
CSU32 V4L2_CID_RAW_BITS_PER_PIXEL_LOGITECH
Definition: uvc_cam.h:144
CSU32 V4L2_CID_TILT_RELATIVE_NEW
Definition: uvc_cam.h:101
CSU32 V4L2_CID_LAST_EXTCTR
Definition: uvc_cam.h:145
void release(unsigned buf_idx)
Definition: uvc_cam.cpp:416
CSU32 V4L2_CID_EXPOSURE_ABSOLUTE_NEW
Definition: uvc_cam.h:98
CSU32 V4L2_CTRL_CLASS_USER_NEW
Definition: uvc_cam.h:86
CSU32 V4L2_CID_HUE_AUTO_OLD
Definition: uvc_cam.h:116
std::string device
Definition: uvc_cam.h:71
CSU32 V4L2_CID_EXPOSURE_AUTO_OLD
Definition: uvc_cam.h:123
static void enumerate()
Definition: uvc_cam.cpp:240
CSU32 V4L2_CID_BASE_NEW
Definition: uvc_cam.h:87
CSU32 V4L2_CID_EXPOSURE_AUTO_NEW
Definition: uvc_cam.h:97
CSU32 V4L2_CID_PRIVATE_LAST
Definition: uvc_cam.h:127
CSU32 V4L2_CID_PAN_RELATIVE_NEW
Definition: uvc_cam.h:100
bool set_v4l2_control(int id, int value, const std::string &name)
Definition: uvc_cam.cpp:447
CSU32 V4L2_CID_SHARPNESS_OLD
Definition: uvc_cam.h:115
CSU32 V4L2_CID_EXPOSURE_AUTO_PRIORITY_NEW
Definition: uvc_cam.h:99
v4l2_buffer buf
Definition: uvc_cam.h:78
CSU32 V4L2_CID_LAST_NEW
Definition: uvc_cam.h:93
unsigned fps
Definition: uvc_cam.h:73
unsigned width
Definition: uvc_cam.h:73
int motion_threshold_count
Definition: uvc_cam.h:72
void set_control(uint32_t id, int val)
Definition: uvc_cam.cpp:471
CSU32 V4L2_CID_PANTILT_RESET_OLD
Definition: uvc_cam.h:122
unsigned height
Definition: uvc_cam.h:73
CSU32 V4L2_CID_FOCUS_AUTO_NEW
Definition: uvc_cam.h:108
#define CSU32
Definition: uvc_cam.h:53
v4l2_requestbuffers rb
Definition: uvc_cam.h:77
CSU32 UVC_CTRL_DATA_TYPE_ENUM
Definition: uvc_cam.h:133
bool set_auto_white_balance(bool on)
CSU32 V4L2_CID_CAMERA_CLASS_BASE_NEW
Definition: uvc_cam.h:96
CSU32 V4L2_CID_FOCUS_AUTO_OLD
Definition: uvc_cam.h:117
CSU32 UVC_CTRL_DATA_TYPE_BITMASK
Definition: uvc_cam.h:134
CSU32 V4L2_CID_CAMERA_CLASS_LAST
Definition: uvc_cam.h:109
void * mem[NUM_BUFFER]
Definition: uvc_cam.h:81
CSU32 UVC_CTRL_DATA_TYPE_RAW
Definition: uvc_cam.h:129
CSU32 V4L2_CID_FOCUS_ABSOLUTE_OLD
Definition: uvc_cam.h:118
CSU32 V4L2_CID_TILT_RESET_NEW
Definition: uvc_cam.h:103
CSU32 V4L2_CID_EXPOSURE_ABSOLUTE_OLD
Definition: uvc_cam.h:124
CSU32 V4L2_CID_PAN_ABSOLUTE_NEW
Definition: uvc_cam.h:104
v4l2_timecode timecode
Definition: uvc_cam.h:79
unsigned buf_length
Definition: uvc_cam.h:82
enum uvc_cam::Cam::mode_t mode
v4l2_format fmt
Definition: uvc_cam.h:74
CSU32 V4L2_CID_BASE_LOGITECH
Definition: uvc_cam.h:136
CSU32 V4L2_CID_FOCUS_ABSOLUTE_NEW
Definition: uvc_cam.h:106
CSU32 V4L2_CID_WHITE_BALANCE_TEMP_OLD
Definition: uvc_cam.h:126
static const int exp_vals[]
Definition: uvc_cam.h:43
CSU32 UVC_CTRL_DATA_TYPE_BOOLEAN
Definition: uvc_cam.h:132
CSU32 V4L2_CID_PANTILT_RESET_LOGITECH
Definition: uvc_cam.h:139
void set_motion_thresholds(int lum, int count)
Definition: uvc_cam.cpp:492
CSU32 V4L2_CID_PAN_RELATIVE_OLD
Definition: uvc_cam.h:120
CSU32 UVC_CTRL_DATA_TYPE_SIGNED
Definition: uvc_cam.h:130
CSU32 V4L2_CID_BACKLIGHT_COMPENSATION_OLD
Definition: uvc_cam.h:113
CSU32 V4L2_CID_DISABLE_PROCESSING_LOGITECH
Definition: uvc_cam.h:143
Cam(const char *device, mode_t _mode=MODE_RGB, int _width=640, int _height=480, int _fps=30)
Definition: uvc_cam.cpp:21
CSU32 V4L2_CID_POWER_LINE_FREQUENCY_NEW
Definition: uvc_cam.h:88
unsigned char * last_yuv_frame
Definition: uvc_cam.h:83
int motion_threshold_luminance
Definition: uvc_cam.h:72
CSU32 V4L2_CID_PRIVATE_BASE_OLD
Definition: uvc_cam.h:112
CSU32 V4L2_CID_TILT_ABSOLUTE_NEW
Definition: uvc_cam.h:105
CSU32 V4L2_CID_SHARPNESS_NEW
Definition: uvc_cam.h:91
bool v4l2_query(int id, const std::string &name)
Definition: uvc_cam.cpp:424
CSU32 V4L2_CID_WHITE_BALANCE_TEMPERATURE_NEW
Definition: uvc_cam.h:90
CSU32 V4L2_CID_BACKLIGHT_COMPENSATION_NEW
Definition: uvc_cam.h:92
CSU32 V4L2_CID_POWER_LINE_FREQUENCY_OLD
Definition: uvc_cam.h:114
CSU32 V4L2_CID_FOCUS_LOGITECH
Definition: uvc_cam.h:140
v4l2_capability cap
Definition: uvc_cam.h:75
CSU32 V4L2_CID_PAN_RESET_NEW
Definition: uvc_cam.h:102
CSU32 V4L2_CTRL_CLASS_CAMERA_NEW
Definition: uvc_cam.h:95
v4l2_streamparm streamparm
Definition: uvc_cam.h:76
CSU32 V4L2_CID_FOCUS_RELATIVE_NEW
Definition: uvc_cam.h:107
CSU32 V4L2_CID_BASE_EXTCTR
Definition: uvc_cam.h:135
static const unsigned NUM_BUFFER
Definition: uvc_cam.h:80
int grab(unsigned char **frame, uint32_t &bytes_used)
Definition: uvc_cam.cpp:333
v4l2_uvc_exposure_auto_type
Definition: uvc_cam.h:34
CSU32 V4L2_CID_HUE_AUTO_NEW
Definition: uvc_cam.h:89
CSU32 V4L2_CID_FOCUS_RELATIVE_OLD
Definition: uvc_cam.h:119
CSU32 V4L2_CID_WHITE_BALANCE_TEMP_AUTO_OLD
Definition: uvc_cam.h:125
CSU32 V4L2_CID_TILT_RELATIVE_OLD
Definition: uvc_cam.h:121
CSU32 V4L2_CID_LED1_FREQUENCY_LOGITECH
Definition: uvc_cam.h:142


uvc_camera
Author(s): Ken Tossell
autogenerated on Mon Jun 10 2019 12:51:49