Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
media
usb
uvc
uvcvideo.h
Go to the documentation of this file.
1
#ifndef _USB_VIDEO_H_
2
#define _USB_VIDEO_H_
3
4
#ifndef __KERNEL__
5
#error "The uvcvideo.h header is deprecated, use linux/uvcvideo.h instead."
6
#endif
/* __KERNEL__ */
7
8
#include <linux/kernel.h>
9
#include <linux/poll.h>
10
#include <
linux/usb.h
>
11
#include <
linux/usb/video.h
>
12
#include <
linux/uvcvideo.h
>
13
#include <linux/videodev2.h>
14
#include <
media/media-device.h
>
15
#include <
media/v4l2-device.h
>
16
#include <
media/v4l2-event.h
>
17
#include <
media/v4l2-fh.h
>
18
#include <
media/videobuf2-core.h
>
19
20
/* --------------------------------------------------------------------------
21
* UVC constants
22
*/
23
24
#define UVC_TERM_INPUT 0x0000
25
#define UVC_TERM_OUTPUT 0x8000
26
#define UVC_TERM_DIRECTION(term) ((term)->type & 0x8000)
27
28
#define UVC_ENTITY_TYPE(entity) ((entity)->type & 0x7fff)
29
#define UVC_ENTITY_IS_UNIT(entity) (((entity)->type & 0xff00) == 0)
30
#define UVC_ENTITY_IS_TERM(entity) (((entity)->type & 0xff00) != 0)
31
#define UVC_ENTITY_IS_ITERM(entity) \
32
(UVC_ENTITY_IS_TERM(entity) && \
33
((entity)->type & 0x8000) == UVC_TERM_INPUT)
34
#define UVC_ENTITY_IS_OTERM(entity) \
35
(UVC_ENTITY_IS_TERM(entity) && \
36
((entity)->type & 0x8000) == UVC_TERM_OUTPUT)
37
38
39
/* ------------------------------------------------------------------------
40
* GUIDs
41
*/
42
#define UVC_GUID_UVC_CAMERA \
43
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
44
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}
45
#define UVC_GUID_UVC_OUTPUT \
46
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
47
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02}
48
#define UVC_GUID_UVC_MEDIA_TRANSPORT_INPUT \
49
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
50
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03}
51
#define UVC_GUID_UVC_PROCESSING \
52
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
53
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01}
54
#define UVC_GUID_UVC_SELECTOR \
55
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
56
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02}
57
58
#define UVC_GUID_FORMAT_MJPEG \
59
{ 'M', 'J', 'P', 'G', 0x00, 0x00, 0x10, 0x00, \
60
0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
61
#define UVC_GUID_FORMAT_YUY2 \
62
{ 'Y', 'U', 'Y', '2', 0x00, 0x00, 0x10, 0x00, \
63
0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
64
#define UVC_GUID_FORMAT_YUY2_ISIGHT \
65
{ 'Y', 'U', 'Y', '2', 0x00, 0x00, 0x10, 0x00, \
66
0x80, 0x00, 0x00, 0x00, 0x00, 0x38, 0x9b, 0x71}
67
#define UVC_GUID_FORMAT_NV12 \
68
{ 'N', 'V', '1', '2', 0x00, 0x00, 0x10, 0x00, \
69
0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
70
#define UVC_GUID_FORMAT_YV12 \
71
{ 'Y', 'V', '1', '2', 0x00, 0x00, 0x10, 0x00, \
72
0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
73
#define UVC_GUID_FORMAT_I420 \
74
{ 'I', '4', '2', '0', 0x00, 0x00, 0x10, 0x00, \
75
0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
76
#define UVC_GUID_FORMAT_UYVY \
77
{ 'U', 'Y', 'V', 'Y', 0x00, 0x00, 0x10, 0x00, \
78
0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
79
#define UVC_GUID_FORMAT_Y800 \
80
{ 'Y', '8', '0', '0', 0x00, 0x00, 0x10, 0x00, \
81
0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
82
#define UVC_GUID_FORMAT_Y8 \
83
{ 'Y', '8', ' ', ' ', 0x00, 0x00, 0x10, 0x00, \
84
0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
85
#define UVC_GUID_FORMAT_Y10 \
86
{ 'Y', '1', '0', ' ', 0x00, 0x00, 0x10, 0x00, \
87
0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
88
#define UVC_GUID_FORMAT_Y12 \
89
{ 'Y', '1', '2', ' ', 0x00, 0x00, 0x10, 0x00, \
90
0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
91
#define UVC_GUID_FORMAT_Y16 \
92
{ 'Y', '1', '6', ' ', 0x00, 0x00, 0x10, 0x00, \
93
0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
94
#define UVC_GUID_FORMAT_BY8 \
95
{ 'B', 'Y', '8', ' ', 0x00, 0x00, 0x10, 0x00, \
96
0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
97
#define UVC_GUID_FORMAT_RGBP \
98
{ 'R', 'G', 'B', 'P', 0x00, 0x00, 0x10, 0x00, \
99
0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
100
#define UVC_GUID_FORMAT_M420 \
101
{ 'M', '4', '2', '0', 0x00, 0x00, 0x10, 0x00, \
102
0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
103
104
#define UVC_GUID_FORMAT_H264 \
105
{ 'H', '2', '6', '4', 0x00, 0x00, 0x10, 0x00, \
106
0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
107
108
/* ------------------------------------------------------------------------
109
* Driver specific constants.
110
*/
111
112
#define DRIVER_VERSION "1.1.1"
113
114
/* Number of isochronous URBs. */
115
#define UVC_URBS 5
116
/* Maximum number of packets per URB. */
117
#define UVC_MAX_PACKETS 32
118
/* Maximum number of video buffers. */
119
#define UVC_MAX_VIDEO_BUFFERS 32
120
/* Maximum status buffer size in bytes of interrupt URB. */
121
#define UVC_MAX_STATUS_SIZE 16
122
123
#define UVC_CTRL_CONTROL_TIMEOUT 300
124
#define UVC_CTRL_STREAMING_TIMEOUT 5000
125
126
/* Maximum allowed number of control mappings per device */
127
#define UVC_MAX_CONTROL_MAPPINGS 1024
128
#define UVC_MAX_CONTROL_MENU_ENTRIES 32
129
130
/* Devices quirks */
131
#define UVC_QUIRK_STATUS_INTERVAL 0x00000001
132
#define UVC_QUIRK_PROBE_MINMAX 0x00000002
133
#define UVC_QUIRK_PROBE_EXTRAFIELDS 0x00000004
134
#define UVC_QUIRK_BUILTIN_ISIGHT 0x00000008
135
#define UVC_QUIRK_STREAM_NO_FID 0x00000010
136
#define UVC_QUIRK_IGNORE_SELECTOR_UNIT 0x00000020
137
#define UVC_QUIRK_FIX_BANDWIDTH 0x00000080
138
#define UVC_QUIRK_PROBE_DEF 0x00000100
139
#define UVC_QUIRK_RESTRICT_FRAME_RATE 0x00000200
140
141
/* Format flags */
142
#define UVC_FMT_FLAG_COMPRESSED 0x00000001
143
#define UVC_FMT_FLAG_STREAM 0x00000002
144
145
/* ------------------------------------------------------------------------
146
* Structures.
147
*/
148
149
struct
uvc_device
;
150
151
/* TODO: Put the most frequently accessed fields at the beginning of
152
* structures to maximize cache efficiency.
153
*/
154
struct
uvc_control_info
{
155
struct
list_head
mappings
;
156
157
__u8
entity
[16];
158
__u8
index
;
/* Bit index in bmControls */
159
__u8
selector
;
160
161
__u16
size
;
162
__u32
flags
;
163
};
164
165
struct
uvc_control_mapping
{
166
struct
list_head
list
;
167
struct
list_head
ev_subs
;
168
169
__u32
id
;
170
__u8
name
[32];
171
__u8
entity
[16];
172
__u8
selector
;
173
174
__u8
size
;
175
__u8
offset
;
176
enum
v4l2_ctrl_type
v4l2_type
;
177
__u32
data_type
;
178
179
struct
uvc_menu_info
*
menu_info
;
180
__u32
menu_count
;
181
182
__u32
master_id
;
183
__s32
master_manual
;
184
__u32
slave_ids
[2];
185
186
__s32
(*
get
) (
struct
uvc_control_mapping
*
mapping
,
__u8
query
,
187
const
__u8
*
data
);
188
void
(*
set
) (
struct
uvc_control_mapping
*
mapping
,
__s32
value
,
189
__u8
*
data
);
190
};
191
192
struct
uvc_control
{
193
struct
uvc_entity
*
entity
;
194
struct
uvc_control_info
info
;
195
196
__u8
index
;
/* Used to match the uvc_control entry with a
197
uvc_control_info. */
198
__u8
dirty
:1,
199
loaded
:1,
200
modified
:1,
201
cached
:1,
202
initialized
:1;
203
204
__u8
*
uvc_data
;
205
};
206
207
struct
uvc_format_desc
{
208
char
*
name
;
209
__u8
guid
[16];
210
__u32
fcc
;
211
};
212
213
/* The term 'entity' refers to both UVC units and UVC terminals.
214
*
215
* The type field is either the terminal type (wTerminalType in the terminal
216
* descriptor), or the unit type (bDescriptorSubtype in the unit descriptor).
217
* As the bDescriptorSubtype field is one byte long, the type value will
218
* always have a null MSB for units. All terminal types defined by the UVC
219
* specification have a non-null MSB, so it is safe to use the MSB to
220
* differentiate between units and terminals as long as the descriptor parsing
221
* code makes sure terminal types have a non-null MSB.
222
*
223
* For terminals, the type's most significant bit stores the terminal
224
* direction (either UVC_TERM_INPUT or UVC_TERM_OUTPUT). The type field should
225
* always be accessed with the UVC_ENTITY_* macros and never directly.
226
*/
227
228
struct
uvc_entity
{
229
struct
list_head
list
;
/* Entity as part of a UVC device. */
230
struct
list_head
chain
;
/* Entity as part of a video device
231
* chain. */
232
__u8
id
;
233
__u16
type
;
234
char
name
[64];
235
236
/* Media controller-related fields. */
237
struct
video_device
*
vdev
;
238
struct
v4l2_subdev
subdev
;
239
unsigned
int
num_pads
;
240
unsigned
int
num_links
;
241
struct
media_pad
*
pads
;
242
243
union
{
244
struct
{
245
__u16
wObjectiveFocalLengthMin
;
246
__u16
wObjectiveFocalLengthMax
;
247
__u16
wOcularFocalLength
;
248
__u8
bControlSize
;
249
__u8
*
bmControls
;
250
}
camera
;
251
252
struct
{
253
__u8
bControlSize
;
254
__u8
*
bmControls
;
255
__u8
bTransportModeSize
;
256
__u8
*
bmTransportModes
;
257
}
media
;
258
259
struct
{
260
}
output
;
261
262
struct
{
263
__u16
wMaxMultiplier
;
264
__u8
bControlSize
;
265
__u8
*
bmControls
;
266
__u8
bmVideoStandards
;
267
}
processing
;
268
269
struct
{
270
}
selector
;
271
272
struct
{
273
__u8
guidExtensionCode
[16];
274
__u8
bNumControls
;
275
__u8
bControlSize
;
276
__u8
*
bmControls
;
277
__u8
*
bmControlsType
;
278
}
extension
;
279
};
280
281
__u8
bNrInPins
;
282
__u8
*
baSourceID
;
283
284
unsigned
int
ncontrols
;
285
struct
uvc_control
*
controls
;
286
};
287
288
struct
uvc_frame
{
289
__u8
bFrameIndex
;
290
__u8
bmCapabilities
;
291
__u16
wWidth
;
292
__u16
wHeight
;
293
__u32
dwMinBitRate
;
294
__u32
dwMaxBitRate
;
295
__u32
dwMaxVideoFrameBufferSize
;
296
__u8
bFrameIntervalType
;
297
__u32
dwDefaultFrameInterval
;
298
__u32
*
dwFrameInterval
;
299
};
300
301
struct
uvc_format
{
302
__u8
type
;
303
__u8
index
;
304
__u8
bpp
;
305
__u8
colorspace
;
306
__u32
fcc
;
307
__u32
flags
;
308
309
char
name
[32];
310
311
unsigned
int
nframes
;
312
struct
uvc_frame
*
frame
;
313
};
314
315
struct
uvc_streaming_header
{
316
__u8
bNumFormats
;
317
__u8
bEndpointAddress
;
318
__u8
bTerminalLink
;
319
__u8
bControlSize
;
320
__u8
*
bmaControls
;
321
/* The following fields are used by input headers only. */
322
__u8
bmInfo
;
323
__u8
bStillCaptureMethod
;
324
__u8
bTriggerSupport
;
325
__u8
bTriggerUsage
;
326
};
327
328
enum
uvc_buffer_state
{
329
UVC_BUF_STATE_IDLE
= 0,
330
UVC_BUF_STATE_QUEUED
= 1,
331
UVC_BUF_STATE_ACTIVE
= 2,
332
UVC_BUF_STATE_READY
= 3,
333
UVC_BUF_STATE_DONE
= 4,
334
UVC_BUF_STATE_ERROR
= 5,
335
};
336
337
struct
uvc_buffer
{
338
struct
vb2_buffer
buf
;
339
struct
list_head
queue
;
340
341
enum
uvc_buffer_state
state
;
342
unsigned
int
error
;
343
344
void
*
mem
;
345
unsigned
int
length
;
346
unsigned
int
bytesused
;
347
348
u32
pts
;
349
};
350
351
#define UVC_QUEUE_DISCONNECTED (1 << 0)
352
#define UVC_QUEUE_DROP_CORRUPTED (1 << 1)
353
354
struct
uvc_video_queue
{
355
struct
vb2_queue
queue
;
356
struct
mutex
mutex
;
/* Protects queue */
357
358
unsigned
int
flags
;
359
unsigned
int
buf_used
;
360
361
spinlock_t
irqlock
;
/* Protects irqqueue */
362
struct
list_head
irqqueue
;
363
};
364
365
struct
uvc_video_chain
{
366
struct
uvc_device
*
dev
;
367
struct
list_head
list
;
368
369
struct
list_head
entities
;
/* All entities */
370
struct
uvc_entity
*
processing
;
/* Processing unit */
371
struct
uvc_entity
*
selector
;
/* Selector unit */
372
373
struct
mutex
ctrl_mutex
;
/* Protects ctrl.info */
374
};
375
376
struct
uvc_stats_frame
{
377
unsigned
int
size
;
/* Number of bytes captured */
378
unsigned
int
first_data
;
/* Index of the first non-empty packet */
379
380
unsigned
int
nb_packets
;
/* Number of packets */
381
unsigned
int
nb_empty
;
/* Number of empty packets */
382
unsigned
int
nb_invalid
;
/* Number of packets with an invalid header */
383
unsigned
int
nb_errors
;
/* Number of packets with the error bit set */
384
385
unsigned
int
nb_pts
;
/* Number of packets with a PTS timestamp */
386
unsigned
int
nb_pts_diffs
;
/* Number of PTS differences inside a frame */
387
unsigned
int
last_pts_diff
;
/* Index of the last PTS difference */
388
bool
has_initial_pts
;
/* Whether the first non-empty packet has a PTS */
389
bool
has_early_pts
;
/* Whether a PTS is present before the first non-empty packet */
390
u32
pts
;
/* PTS of the last packet */
391
392
unsigned
int
nb_scr
;
/* Number of packets with a SCR timestamp */
393
unsigned
int
nb_scr_diffs
;
/* Number of SCR.STC differences inside a frame */
394
u16
scr_sof
;
/* SCR.SOF of the last packet */
395
u32
scr_stc
;
/* SCR.STC of the last packet */
396
};
397
398
struct
uvc_stats_stream
{
399
struct
timespec
start_ts
;
/* Stream start timestamp */
400
struct
timespec
stop_ts
;
/* Stream stop timestamp */
401
402
unsigned
int
nb_frames
;
/* Number of frames */
403
404
unsigned
int
nb_packets
;
/* Number of packets */
405
unsigned
int
nb_empty
;
/* Number of empty packets */
406
unsigned
int
nb_invalid
;
/* Number of packets with an invalid header */
407
unsigned
int
nb_errors
;
/* Number of packets with the error bit set */
408
409
unsigned
int
nb_pts_constant
;
/* Number of frames with constant PTS */
410
unsigned
int
nb_pts_early
;
/* Number of frames with early PTS */
411
unsigned
int
nb_pts_initial
;
/* Number of frames with initial PTS */
412
413
unsigned
int
nb_scr_count_ok
;
/* Number of frames with at least one SCR per non empty packet */
414
unsigned
int
nb_scr_diffs_ok
;
/* Number of frames with varying SCR.STC */
415
unsigned
int
scr_sof_count
;
/* STC.SOF counter accumulated since stream start */
416
unsigned
int
scr_sof
;
/* STC.SOF of the last packet */
417
unsigned
int
min_sof
;
/* Minimum STC.SOF value */
418
unsigned
int
max_sof
;
/* Maximum STC.SOF value */
419
};
420
421
struct
uvc_streaming
{
422
struct
list_head
list
;
423
struct
uvc_device
*
dev
;
424
struct
video_device
*
vdev
;
425
struct
uvc_video_chain
*
chain
;
426
atomic_t
active
;
427
428
struct
usb_interface
*
intf
;
429
int
intfnum
;
430
__u16
maxpsize
;
431
432
struct
uvc_streaming_header
header
;
433
enum
v4l2_buf_type
type
;
434
435
unsigned
int
nformats
;
436
struct
uvc_format
*
format
;
437
438
struct
uvc_streaming_control
ctrl
;
439
struct
uvc_format
*
cur_format
;
440
struct
uvc_frame
*
cur_frame
;
441
/* Protect access to ctrl, cur_format, cur_frame and hardware video
442
* probe control.
443
*/
444
struct
mutex
mutex
;
445
446
/* Buffers queue. */
447
unsigned
int
frozen
: 1;
448
struct
uvc_video_queue
queue
;
449
void
(*
decode
) (
struct
urb
*
urb
,
struct
uvc_streaming
*video,
450
struct
uvc_buffer
*
buf
);
451
452
/* Context data used by the bulk completion handler. */
453
struct
{
454
__u8
header
[256];
455
unsigned
int
header_size
;
456
int
skip_payload
;
457
__u32
payload_size
;
458
__u32
max_payload_size
;
459
}
bulk
;
460
461
struct
urb
*
urb
[
UVC_URBS
];
462
char
*
urb_buffer
[
UVC_URBS
];
463
dma_addr_t
urb_dma
[
UVC_URBS
];
464
unsigned
int
urb_size
;
465
466
__u32
sequence
;
467
__u8
last_fid
;
468
469
/* debugfs */
470
struct
dentry
*
debugfs_dir
;
471
struct
{
472
struct
uvc_stats_frame
frame
;
473
struct
uvc_stats_stream
stream
;
474
}
stats
;
475
476
/* Timestamps support. */
477
struct
uvc_clock
{
478
struct
uvc_clock_sample
{
479
u32
dev_stc
;
480
u16
dev_sof
;
481
struct
timespec
host_ts
;
482
u16
host_sof
;
483
} *
samples
;
484
485
unsigned
int
head
;
486
unsigned
int
count
;
487
unsigned
int
size
;
488
489
u16
last_sof
;
490
u16
sof_offset
;
491
492
spinlock_t
lock
;
493
}
clock
;
494
};
495
496
enum
uvc_device_state
{
497
UVC_DEV_DISCONNECTED
= 1,
498
};
499
500
struct
uvc_device
{
501
struct
usb_device *
udev
;
502
struct
usb_interface
*
intf
;
503
unsigned
long
warnings
;
504
__u32
quirks
;
505
int
intfnum
;
506
char
name
[32];
507
508
enum
uvc_device_state
state
;
509
atomic_t
users
;
510
atomic_t
nmappings
;
511
512
/* Video control interface */
513
#ifdef CONFIG_MEDIA_CONTROLLER
514
struct
media_device
mdev;
515
#endif
516
struct
v4l2_device
vdev
;
517
__u16
uvc_version
;
518
__u32
clock_frequency
;
519
520
struct
list_head
entities
;
521
struct
list_head
chains
;
522
523
/* Video Streaming interfaces */
524
struct
list_head
streams
;
525
atomic_t
nstreams
;
526
527
/* Status Interrupt Endpoint */
528
struct
usb_host_endpoint *
int_ep
;
529
struct
urb
*
int_urb
;
530
__u8
*
status
;
531
struct
input_dev *
input
;
532
char
input_phys
[64];
533
};
534
535
enum
uvc_handle_state
{
536
UVC_HANDLE_PASSIVE
= 0,
537
UVC_HANDLE_ACTIVE
= 1,
538
};
539
540
struct
uvc_fh
{
541
struct
v4l2_fh
vfh
;
542
struct
uvc_video_chain
*
chain
;
543
struct
uvc_streaming
*
stream
;
544
enum
uvc_handle_state
state
;
545
};
546
547
struct
uvc_driver
{
548
struct
usb_driver
driver
;
549
};
550
551
/* ------------------------------------------------------------------------
552
* Debugging, printing and logging
553
*/
554
555
#define UVC_TRACE_PROBE (1 << 0)
556
#define UVC_TRACE_DESCR (1 << 1)
557
#define UVC_TRACE_CONTROL (1 << 2)
558
#define UVC_TRACE_FORMAT (1 << 3)
559
#define UVC_TRACE_CAPTURE (1 << 4)
560
#define UVC_TRACE_CALLS (1 << 5)
561
#define UVC_TRACE_IOCTL (1 << 6)
562
#define UVC_TRACE_FRAME (1 << 7)
563
#define UVC_TRACE_SUSPEND (1 << 8)
564
#define UVC_TRACE_STATUS (1 << 9)
565
#define UVC_TRACE_VIDEO (1 << 10)
566
#define UVC_TRACE_STATS (1 << 11)
567
#define UVC_TRACE_CLOCK (1 << 12)
568
569
#define UVC_WARN_MINMAX 0
570
#define UVC_WARN_PROBE_DEF 1
571
#define UVC_WARN_XU_GET_RES 2
572
573
extern
unsigned
int
uvc_clock_param
;
574
extern
unsigned
int
uvc_no_drop_param
;
575
extern
unsigned
int
uvc_trace_param
;
576
extern
unsigned
int
uvc_timeout_param
;
577
578
#define uvc_trace(flag, msg...) \
579
do { \
580
if (uvc_trace_param & flag) \
581
printk(KERN_DEBUG "uvcvideo: " msg); \
582
} while (0)
583
584
#define uvc_warn_once(dev, warn, msg...) \
585
do { \
586
if (!test_and_set_bit(warn, &dev->warnings)) \
587
printk(KERN_INFO "uvcvideo: " msg); \
588
} while (0)
589
590
#define uvc_printk(level, msg...) \
591
printk(level "uvcvideo: " msg)
592
593
/* --------------------------------------------------------------------------
594
* Internal functions.
595
*/
596
597
/* Core driver */
598
extern
struct
uvc_driver
uvc_driver
;
599
600
extern
struct
uvc_entity
*
uvc_entity_by_id
(
struct
uvc_device
*
dev
,
int
id
);
601
602
/* Video buffers queue management. */
603
extern
int
uvc_queue_init
(
struct
uvc_video_queue
*
queue
,
604
enum
v4l2_buf_type
type
,
int
drop_corrupted);
605
extern
int
uvc_alloc_buffers
(
struct
uvc_video_queue
*
queue
,
606
struct
v4l2_requestbuffers
*
rb
);
607
extern
void
uvc_free_buffers
(
struct
uvc_video_queue
*
queue
);
608
extern
int
uvc_query_buffer
(
struct
uvc_video_queue
*
queue
,
609
struct
v4l2_buffer
*v4l2_buf);
610
extern
int
uvc_queue_buffer
(
struct
uvc_video_queue
*
queue
,
611
struct
v4l2_buffer
*v4l2_buf);
612
extern
int
uvc_dequeue_buffer
(
struct
uvc_video_queue
*
queue
,
613
struct
v4l2_buffer
*v4l2_buf,
int
nonblocking);
614
extern
int
uvc_queue_enable
(
struct
uvc_video_queue
*
queue
,
int
enable
);
615
extern
void
uvc_queue_cancel
(
struct
uvc_video_queue
*
queue
,
int
disconnect
);
616
extern
struct
uvc_buffer
*
uvc_queue_next_buffer
(
struct
uvc_video_queue
*
queue
,
617
struct
uvc_buffer
*
buf
);
618
extern
int
uvc_queue_mmap
(
struct
uvc_video_queue
*
queue
,
619
struct
vm_area_struct
*vma);
620
extern
unsigned
int
uvc_queue_poll
(
struct
uvc_video_queue
*
queue
,
621
struct
file
*
file
,
poll_table
*
wait
);
622
#ifndef CONFIG_MMU
623
extern
unsigned
long
uvc_queue_get_unmapped_area
(
struct
uvc_video_queue
*
queue
,
624
unsigned
long
pgoff);
625
#endif
626
extern
int
uvc_queue_allocated
(
struct
uvc_video_queue
*
queue
);
627
static
inline
int
uvc_queue_streaming(
struct
uvc_video_queue
*
queue
)
628
{
629
return
vb2_is_streaming(&queue->
queue
);
630
}
631
632
/* V4L2 interface */
633
extern
const
struct
v4l2_file_operations
uvc_fops
;
634
635
/* Media controller */
636
extern
int
uvc_mc_register_entities
(
struct
uvc_video_chain
*
chain
);
637
extern
void
uvc_mc_cleanup_entity
(
struct
uvc_entity
*entity);
638
639
/* Video */
640
extern
int
uvc_video_init
(
struct
uvc_streaming
*stream);
641
extern
int
uvc_video_suspend
(
struct
uvc_streaming
*stream);
642
extern
int
uvc_video_resume
(
struct
uvc_streaming
*stream,
int
reset);
643
extern
int
uvc_video_enable
(
struct
uvc_streaming
*stream,
int
enable
);
644
extern
int
uvc_probe_video
(
struct
uvc_streaming
*stream,
645
struct
uvc_streaming_control
*probe);
646
extern
int
uvc_query_ctrl
(
struct
uvc_device
*
dev
,
__u8
query
,
__u8
unit
,
647
__u8
intfnum,
__u8
cs
,
void
*
data
,
__u16
size
);
648
void
uvc_video_clock_update
(
struct
uvc_streaming
*stream,
649
struct
v4l2_buffer
*v4l2_buf,
650
struct
uvc_buffer
*
buf
);
651
652
/* Status */
653
extern
int
uvc_status_init
(
struct
uvc_device
*
dev
);
654
extern
void
uvc_status_cleanup
(
struct
uvc_device
*
dev
);
655
extern
int
uvc_status_start
(
struct
uvc_device
*
dev
);
656
extern
void
uvc_status_stop
(
struct
uvc_device
*
dev
);
657
extern
int
uvc_status_suspend
(
struct
uvc_device
*
dev
);
658
extern
int
uvc_status_resume
(
struct
uvc_device
*
dev
);
659
660
/* Controls */
661
extern
const
struct
v4l2_subscribed_event_ops
uvc_ctrl_sub_ev_ops
;
662
663
extern
int
uvc_query_v4l2_ctrl
(
struct
uvc_video_chain
*
chain
,
664
struct
v4l2_queryctrl
*
v4l2_ctrl
);
665
extern
int
uvc_query_v4l2_menu
(
struct
uvc_video_chain
*
chain
,
666
struct
v4l2_querymenu
*query_menu);
667
668
extern
int
uvc_ctrl_add_mapping
(
struct
uvc_video_chain
*
chain
,
669
const
struct
uvc_control_mapping
*
mapping
);
670
extern
int
uvc_ctrl_init_device
(
struct
uvc_device
*
dev
);
671
extern
void
uvc_ctrl_cleanup_device
(
struct
uvc_device
*
dev
);
672
extern
int
uvc_ctrl_resume_device
(
struct
uvc_device
*
dev
);
673
674
extern
int
uvc_ctrl_begin
(
struct
uvc_video_chain
*
chain
);
675
extern
int
__uvc_ctrl_commit
(
struct
uvc_fh
*
handle
,
int
rollback,
676
const
struct
v4l2_ext_control
*xctrls,
677
unsigned
int
xctrls_count);
678
static
inline
int
uvc_ctrl_commit(
struct
uvc_fh
*
handle
,
679
const
struct
v4l2_ext_control
*xctrls,
680
unsigned
int
xctrls_count)
681
{
682
return
__uvc_ctrl_commit
(handle, 0, xctrls, xctrls_count);
683
}
684
static
inline
int
uvc_ctrl_rollback(
struct
uvc_fh
*
handle
)
685
{
686
return
__uvc_ctrl_commit
(handle, 1,
NULL
, 0);
687
}
688
689
extern
int
uvc_ctrl_get
(
struct
uvc_video_chain
*
chain
,
690
struct
v4l2_ext_control
*xctrl);
691
extern
int
uvc_ctrl_set
(
struct
uvc_video_chain
*
chain
,
692
struct
v4l2_ext_control
*xctrl);
693
694
extern
int
uvc_xu_ctrl_query
(
struct
uvc_video_chain
*
chain
,
695
struct
uvc_xu_control_query
*xqry);
696
697
/* Utility functions */
698
extern
void
uvc_simplify_fraction
(
uint32_t
*numerator,
uint32_t
*denominator,
699
unsigned
int
n_terms,
unsigned
int
threshold
);
700
extern
uint32_t
uvc_fraction_to_interval
(
uint32_t
numerator,
701
uint32_t
denominator);
702
extern
struct
usb_host_endpoint *
uvc_find_endpoint
(
703
struct
usb_host_interface *alts,
__u8
epaddr);
704
705
/* Quirks support */
706
void
uvc_video_decode_isight
(
struct
urb
*
urb
,
struct
uvc_streaming
*stream,
707
struct
uvc_buffer
*
buf
);
708
709
/* debugfs and statistics */
710
int
uvc_debugfs_init
(
void
);
711
void
uvc_debugfs_cleanup
(
void
);
712
int
uvc_debugfs_init_stream
(
struct
uvc_streaming
*stream);
713
void
uvc_debugfs_cleanup_stream
(
struct
uvc_streaming
*stream);
714
715
size_t
uvc_video_stats_dump
(
struct
uvc_streaming
*stream,
char
*
buf
,
716
size_t
size
);
717
718
#endif
Generated on Thu Jan 10 2013 13:52:43 for Linux Kernel by
1.8.2