~ubuntu-branches/ubuntu/precise/linux-lowlatency/precise

« back to all changes in this revision

Viewing changes to include/linux/usb/video.h

  • Committer: Package Import Robot
  • Author(s): Alessio Igor Bogani
  • Date: 2011-10-26 11:13:05 UTC
  • Revision ID: package-import@ubuntu.com-20111026111305-tz023xykf0i6eosh
Tags: upstream-3.2.0
ImportĀ upstreamĀ versionĀ 3.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * USB Video Class definitions.
 
3
 *
 
4
 * Copyright (C) 2009 Laurent Pinchart <laurent.pinchart@skynet.be>
 
5
 *
 
6
 * This file holds USB constants and structures defined by the USB Device
 
7
 * Class Definition for Video Devices. Unless otherwise stated, comments
 
8
 * below reference relevant sections of the USB Video Class 1.1 specification
 
9
 * available at
 
10
 *
 
11
 * http://www.usb.org/developers/devclass_docs/USB_Video_Class_1_1.zip
 
12
 */
 
13
 
 
14
#ifndef __LINUX_USB_VIDEO_H
 
15
#define __LINUX_USB_VIDEO_H
 
16
 
 
17
#include <linux/types.h>
 
18
 
 
19
/* --------------------------------------------------------------------------
 
20
 * UVC constants
 
21
 */
 
22
 
 
23
/* A.2. Video Interface Subclass Codes */
 
24
#define UVC_SC_UNDEFINED                                0x00
 
25
#define UVC_SC_VIDEOCONTROL                             0x01
 
26
#define UVC_SC_VIDEOSTREAMING                           0x02
 
27
#define UVC_SC_VIDEO_INTERFACE_COLLECTION               0x03
 
28
 
 
29
/* A.3. Video Interface Protocol Codes */
 
30
#define UVC_PC_PROTOCOL_UNDEFINED                       0x00
 
31
 
 
32
/* A.5. Video Class-Specific VC Interface Descriptor Subtypes */
 
33
#define UVC_VC_DESCRIPTOR_UNDEFINED                     0x00
 
34
#define UVC_VC_HEADER                                   0x01
 
35
#define UVC_VC_INPUT_TERMINAL                           0x02
 
36
#define UVC_VC_OUTPUT_TERMINAL                          0x03
 
37
#define UVC_VC_SELECTOR_UNIT                            0x04
 
38
#define UVC_VC_PROCESSING_UNIT                          0x05
 
39
#define UVC_VC_EXTENSION_UNIT                           0x06
 
40
 
 
41
/* A.6. Video Class-Specific VS Interface Descriptor Subtypes */
 
42
#define UVC_VS_UNDEFINED                                0x00
 
43
#define UVC_VS_INPUT_HEADER                             0x01
 
44
#define UVC_VS_OUTPUT_HEADER                            0x02
 
45
#define UVC_VS_STILL_IMAGE_FRAME                        0x03
 
46
#define UVC_VS_FORMAT_UNCOMPRESSED                      0x04
 
47
#define UVC_VS_FRAME_UNCOMPRESSED                       0x05
 
48
#define UVC_VS_FORMAT_MJPEG                             0x06
 
49
#define UVC_VS_FRAME_MJPEG                              0x07
 
50
#define UVC_VS_FORMAT_MPEG2TS                           0x0a
 
51
#define UVC_VS_FORMAT_DV                                0x0c
 
52
#define UVC_VS_COLORFORMAT                              0x0d
 
53
#define UVC_VS_FORMAT_FRAME_BASED                       0x10
 
54
#define UVC_VS_FRAME_FRAME_BASED                        0x11
 
55
#define UVC_VS_FORMAT_STREAM_BASED                      0x12
 
56
 
 
57
/* A.7. Video Class-Specific Endpoint Descriptor Subtypes */
 
58
#define UVC_EP_UNDEFINED                                0x00
 
59
#define UVC_EP_GENERAL                                  0x01
 
60
#define UVC_EP_ENDPOINT                                 0x02
 
61
#define UVC_EP_INTERRUPT                                0x03
 
62
 
 
63
/* A.8. Video Class-Specific Request Codes */
 
64
#define UVC_RC_UNDEFINED                                0x00
 
65
#define UVC_SET_CUR                                     0x01
 
66
#define UVC_GET_CUR                                     0x81
 
67
#define UVC_GET_MIN                                     0x82
 
68
#define UVC_GET_MAX                                     0x83
 
69
#define UVC_GET_RES                                     0x84
 
70
#define UVC_GET_LEN                                     0x85
 
71
#define UVC_GET_INFO                                    0x86
 
72
#define UVC_GET_DEF                                     0x87
 
73
 
 
74
/* A.9.1. VideoControl Interface Control Selectors */
 
75
#define UVC_VC_CONTROL_UNDEFINED                        0x00
 
76
#define UVC_VC_VIDEO_POWER_MODE_CONTROL                 0x01
 
77
#define UVC_VC_REQUEST_ERROR_CODE_CONTROL               0x02
 
78
 
 
79
/* A.9.2. Terminal Control Selectors */
 
80
#define UVC_TE_CONTROL_UNDEFINED                        0x00
 
81
 
 
82
/* A.9.3. Selector Unit Control Selectors */
 
83
#define UVC_SU_CONTROL_UNDEFINED                        0x00
 
84
#define UVC_SU_INPUT_SELECT_CONTROL                     0x01
 
85
 
 
86
/* A.9.4. Camera Terminal Control Selectors */
 
87
#define UVC_CT_CONTROL_UNDEFINED                        0x00
 
88
#define UVC_CT_SCANNING_MODE_CONTROL                    0x01
 
89
#define UVC_CT_AE_MODE_CONTROL                          0x02
 
90
#define UVC_CT_AE_PRIORITY_CONTROL                      0x03
 
91
#define UVC_CT_EXPOSURE_TIME_ABSOLUTE_CONTROL           0x04
 
92
#define UVC_CT_EXPOSURE_TIME_RELATIVE_CONTROL           0x05
 
93
#define UVC_CT_FOCUS_ABSOLUTE_CONTROL                   0x06
 
94
#define UVC_CT_FOCUS_RELATIVE_CONTROL                   0x07
 
95
#define UVC_CT_FOCUS_AUTO_CONTROL                       0x08
 
96
#define UVC_CT_IRIS_ABSOLUTE_CONTROL                    0x09
 
97
#define UVC_CT_IRIS_RELATIVE_CONTROL                    0x0a
 
98
#define UVC_CT_ZOOM_ABSOLUTE_CONTROL                    0x0b
 
99
#define UVC_CT_ZOOM_RELATIVE_CONTROL                    0x0c
 
100
#define UVC_CT_PANTILT_ABSOLUTE_CONTROL                 0x0d
 
101
#define UVC_CT_PANTILT_RELATIVE_CONTROL                 0x0e
 
102
#define UVC_CT_ROLL_ABSOLUTE_CONTROL                    0x0f
 
103
#define UVC_CT_ROLL_RELATIVE_CONTROL                    0x10
 
104
#define UVC_CT_PRIVACY_CONTROL                          0x11
 
105
 
 
106
/* A.9.5. Processing Unit Control Selectors */
 
107
#define UVC_PU_CONTROL_UNDEFINED                        0x00
 
108
#define UVC_PU_BACKLIGHT_COMPENSATION_CONTROL           0x01
 
109
#define UVC_PU_BRIGHTNESS_CONTROL                       0x02
 
110
#define UVC_PU_CONTRAST_CONTROL                         0x03
 
111
#define UVC_PU_GAIN_CONTROL                             0x04
 
112
#define UVC_PU_POWER_LINE_FREQUENCY_CONTROL             0x05
 
113
#define UVC_PU_HUE_CONTROL                              0x06
 
114
#define UVC_PU_SATURATION_CONTROL                       0x07
 
115
#define UVC_PU_SHARPNESS_CONTROL                        0x08
 
116
#define UVC_PU_GAMMA_CONTROL                            0x09
 
117
#define UVC_PU_WHITE_BALANCE_TEMPERATURE_CONTROL        0x0a
 
118
#define UVC_PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL   0x0b
 
119
#define UVC_PU_WHITE_BALANCE_COMPONENT_CONTROL          0x0c
 
120
#define UVC_PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL     0x0d
 
121
#define UVC_PU_DIGITAL_MULTIPLIER_CONTROL               0x0e
 
122
#define UVC_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL         0x0f
 
123
#define UVC_PU_HUE_AUTO_CONTROL                         0x10
 
124
#define UVC_PU_ANALOG_VIDEO_STANDARD_CONTROL            0x11
 
125
#define UVC_PU_ANALOG_LOCK_STATUS_CONTROL               0x12
 
126
 
 
127
/* A.9.7. VideoStreaming Interface Control Selectors */
 
128
#define UVC_VS_CONTROL_UNDEFINED                        0x00
 
129
#define UVC_VS_PROBE_CONTROL                            0x01
 
130
#define UVC_VS_COMMIT_CONTROL                           0x02
 
131
#define UVC_VS_STILL_PROBE_CONTROL                      0x03
 
132
#define UVC_VS_STILL_COMMIT_CONTROL                     0x04
 
133
#define UVC_VS_STILL_IMAGE_TRIGGER_CONTROL              0x05
 
134
#define UVC_VS_STREAM_ERROR_CODE_CONTROL                0x06
 
135
#define UVC_VS_GENERATE_KEY_FRAME_CONTROL               0x07
 
136
#define UVC_VS_UPDATE_FRAME_SEGMENT_CONTROL             0x08
 
137
#define UVC_VS_SYNC_DELAY_CONTROL                       0x09
 
138
 
 
139
/* B.1. USB Terminal Types */
 
140
#define UVC_TT_VENDOR_SPECIFIC                          0x0100
 
141
#define UVC_TT_STREAMING                                0x0101
 
142
 
 
143
/* B.2. Input Terminal Types */
 
144
#define UVC_ITT_VENDOR_SPECIFIC                         0x0200
 
145
#define UVC_ITT_CAMERA                                  0x0201
 
146
#define UVC_ITT_MEDIA_TRANSPORT_INPUT                   0x0202
 
147
 
 
148
/* B.3. Output Terminal Types */
 
149
#define UVC_OTT_VENDOR_SPECIFIC                         0x0300
 
150
#define UVC_OTT_DISPLAY                                 0x0301
 
151
#define UVC_OTT_MEDIA_TRANSPORT_OUTPUT                  0x0302
 
152
 
 
153
/* B.4. External Terminal Types */
 
154
#define UVC_EXTERNAL_VENDOR_SPECIFIC                    0x0400
 
155
#define UVC_COMPOSITE_CONNECTOR                         0x0401
 
156
#define UVC_SVIDEO_CONNECTOR                            0x0402
 
157
#define UVC_COMPONENT_CONNECTOR                         0x0403
 
158
 
 
159
/* 2.4.2.2. Status Packet Type */
 
160
#define UVC_STATUS_TYPE_CONTROL                         1
 
161
#define UVC_STATUS_TYPE_STREAMING                       2
 
162
 
 
163
/* 2.4.3.3. Payload Header Information */
 
164
#define UVC_STREAM_EOH                                  (1 << 7)
 
165
#define UVC_STREAM_ERR                                  (1 << 6)
 
166
#define UVC_STREAM_STI                                  (1 << 5)
 
167
#define UVC_STREAM_RES                                  (1 << 4)
 
168
#define UVC_STREAM_SCR                                  (1 << 3)
 
169
#define UVC_STREAM_PTS                                  (1 << 2)
 
170
#define UVC_STREAM_EOF                                  (1 << 1)
 
171
#define UVC_STREAM_FID                                  (1 << 0)
 
172
 
 
173
/* 4.1.2. Control Capabilities */
 
174
#define UVC_CONTROL_CAP_GET                             (1 << 0)
 
175
#define UVC_CONTROL_CAP_SET                             (1 << 1)
 
176
#define UVC_CONTROL_CAP_DISABLED                        (1 << 2)
 
177
#define UVC_CONTROL_CAP_AUTOUPDATE                      (1 << 3)
 
178
#define UVC_CONTROL_CAP_ASYNCHRONOUS                    (1 << 4)
 
179
 
 
180
/* ------------------------------------------------------------------------
 
181
 * UVC structures
 
182
 */
 
183
 
 
184
/* All UVC descriptors have these 3 fields at the beginning */
 
185
struct uvc_descriptor_header {
 
186
        __u8  bLength;
 
187
        __u8  bDescriptorType;
 
188
        __u8  bDescriptorSubType;
 
189
} __attribute__((packed));
 
190
 
 
191
/* 3.7.2. Video Control Interface Header Descriptor */
 
192
struct uvc_header_descriptor {
 
193
        __u8  bLength;
 
194
        __u8  bDescriptorType;
 
195
        __u8  bDescriptorSubType;
 
196
        __u16 bcdUVC;
 
197
        __u16 wTotalLength;
 
198
        __u32 dwClockFrequency;
 
199
        __u8  bInCollection;
 
200
        __u8  baInterfaceNr[];
 
201
} __attribute__((__packed__));
 
202
 
 
203
#define UVC_DT_HEADER_SIZE(n)                           (12+(n))
 
204
 
 
205
#define UVC_HEADER_DESCRIPTOR(n) \
 
206
        uvc_header_descriptor_##n
 
207
 
 
208
#define DECLARE_UVC_HEADER_DESCRIPTOR(n)                \
 
209
struct UVC_HEADER_DESCRIPTOR(n) {                       \
 
210
        __u8  bLength;                                  \
 
211
        __u8  bDescriptorType;                          \
 
212
        __u8  bDescriptorSubType;                       \
 
213
        __u16 bcdUVC;                                   \
 
214
        __u16 wTotalLength;                             \
 
215
        __u32 dwClockFrequency;                         \
 
216
        __u8  bInCollection;                            \
 
217
        __u8  baInterfaceNr[n];                         \
 
218
} __attribute__ ((packed))
 
219
 
 
220
/* 3.7.2.1. Input Terminal Descriptor */
 
221
struct uvc_input_terminal_descriptor {
 
222
        __u8  bLength;
 
223
        __u8  bDescriptorType;
 
224
        __u8  bDescriptorSubType;
 
225
        __u8  bTerminalID;
 
226
        __u16 wTerminalType;
 
227
        __u8  bAssocTerminal;
 
228
        __u8  iTerminal;
 
229
} __attribute__((__packed__));
 
230
 
 
231
#define UVC_DT_INPUT_TERMINAL_SIZE                      8
 
232
 
 
233
/* 3.7.2.2. Output Terminal Descriptor */
 
234
struct uvc_output_terminal_descriptor {
 
235
        __u8  bLength;
 
236
        __u8  bDescriptorType;
 
237
        __u8  bDescriptorSubType;
 
238
        __u8  bTerminalID;
 
239
        __u16 wTerminalType;
 
240
        __u8  bAssocTerminal;
 
241
        __u8  bSourceID;
 
242
        __u8  iTerminal;
 
243
} __attribute__((__packed__));
 
244
 
 
245
#define UVC_DT_OUTPUT_TERMINAL_SIZE                     9
 
246
 
 
247
/* 3.7.2.3. Camera Terminal Descriptor */
 
248
struct uvc_camera_terminal_descriptor {
 
249
        __u8  bLength;
 
250
        __u8  bDescriptorType;
 
251
        __u8  bDescriptorSubType;
 
252
        __u8  bTerminalID;
 
253
        __u16 wTerminalType;
 
254
        __u8  bAssocTerminal;
 
255
        __u8  iTerminal;
 
256
        __u16 wObjectiveFocalLengthMin;
 
257
        __u16 wObjectiveFocalLengthMax;
 
258
        __u16 wOcularFocalLength;
 
259
        __u8  bControlSize;
 
260
        __u8  bmControls[3];
 
261
} __attribute__((__packed__));
 
262
 
 
263
#define UVC_DT_CAMERA_TERMINAL_SIZE(n)                  (15+(n))
 
264
 
 
265
/* 3.7.2.4. Selector Unit Descriptor */
 
266
struct uvc_selector_unit_descriptor {
 
267
        __u8  bLength;
 
268
        __u8  bDescriptorType;
 
269
        __u8  bDescriptorSubType;
 
270
        __u8  bUnitID;
 
271
        __u8  bNrInPins;
 
272
        __u8  baSourceID[0];
 
273
        __u8  iSelector;
 
274
} __attribute__((__packed__));
 
275
 
 
276
#define UVC_DT_SELECTOR_UNIT_SIZE(n)                    (6+(n))
 
277
 
 
278
#define UVC_SELECTOR_UNIT_DESCRIPTOR(n) \
 
279
        uvc_selector_unit_descriptor_##n
 
280
 
 
281
#define DECLARE_UVC_SELECTOR_UNIT_DESCRIPTOR(n) \
 
282
struct UVC_SELECTOR_UNIT_DESCRIPTOR(n) {                \
 
283
        __u8  bLength;                                  \
 
284
        __u8  bDescriptorType;                          \
 
285
        __u8  bDescriptorSubType;                       \
 
286
        __u8  bUnitID;                                  \
 
287
        __u8  bNrInPins;                                \
 
288
        __u8  baSourceID[n];                            \
 
289
        __u8  iSelector;                                \
 
290
} __attribute__ ((packed))
 
291
 
 
292
/* 3.7.2.5. Processing Unit Descriptor */
 
293
struct uvc_processing_unit_descriptor {
 
294
        __u8  bLength;
 
295
        __u8  bDescriptorType;
 
296
        __u8  bDescriptorSubType;
 
297
        __u8  bUnitID;
 
298
        __u8  bSourceID;
 
299
        __u16 wMaxMultiplier;
 
300
        __u8  bControlSize;
 
301
        __u8  bmControls[2];
 
302
        __u8  iProcessing;
 
303
} __attribute__((__packed__));
 
304
 
 
305
#define UVC_DT_PROCESSING_UNIT_SIZE(n)                  (9+(n))
 
306
 
 
307
/* 3.7.2.6. Extension Unit Descriptor */
 
308
struct uvc_extension_unit_descriptor {
 
309
        __u8  bLength;
 
310
        __u8  bDescriptorType;
 
311
        __u8  bDescriptorSubType;
 
312
        __u8  bUnitID;
 
313
        __u8  guidExtensionCode[16];
 
314
        __u8  bNumControls;
 
315
        __u8  bNrInPins;
 
316
        __u8  baSourceID[0];
 
317
        __u8  bControlSize;
 
318
        __u8  bmControls[0];
 
319
        __u8  iExtension;
 
320
} __attribute__((__packed__));
 
321
 
 
322
#define UVC_DT_EXTENSION_UNIT_SIZE(p, n)                (24+(p)+(n))
 
323
 
 
324
#define UVC_EXTENSION_UNIT_DESCRIPTOR(p, n) \
 
325
        uvc_extension_unit_descriptor_##p_##n
 
326
 
 
327
#define DECLARE_UVC_EXTENSION_UNIT_DESCRIPTOR(p, n)     \
 
328
struct UVC_EXTENSION_UNIT_DESCRIPTOR(p, n) {            \
 
329
        __u8  bLength;                                  \
 
330
        __u8  bDescriptorType;                          \
 
331
        __u8  bDescriptorSubType;                       \
 
332
        __u8  bUnitID;                                  \
 
333
        __u8  guidExtensionCode[16];                    \
 
334
        __u8  bNumControls;                             \
 
335
        __u8  bNrInPins;                                \
 
336
        __u8  baSourceID[p];                            \
 
337
        __u8  bControlSize;                             \
 
338
        __u8  bmControls[n];                            \
 
339
        __u8  iExtension;                               \
 
340
} __attribute__ ((packed))
 
341
 
 
342
/* 3.8.2.2. Video Control Interrupt Endpoint Descriptor */
 
343
struct uvc_control_endpoint_descriptor {
 
344
        __u8  bLength;
 
345
        __u8  bDescriptorType;
 
346
        __u8  bDescriptorSubType;
 
347
        __u16 wMaxTransferSize;
 
348
} __attribute__((__packed__));
 
349
 
 
350
#define UVC_DT_CONTROL_ENDPOINT_SIZE                    5
 
351
 
 
352
/* 3.9.2.1. Input Header Descriptor */
 
353
struct uvc_input_header_descriptor {
 
354
        __u8  bLength;
 
355
        __u8  bDescriptorType;
 
356
        __u8  bDescriptorSubType;
 
357
        __u8  bNumFormats;
 
358
        __u16 wTotalLength;
 
359
        __u8  bEndpointAddress;
 
360
        __u8  bmInfo;
 
361
        __u8  bTerminalLink;
 
362
        __u8  bStillCaptureMethod;
 
363
        __u8  bTriggerSupport;
 
364
        __u8  bTriggerUsage;
 
365
        __u8  bControlSize;
 
366
        __u8  bmaControls[];
 
367
} __attribute__((__packed__));
 
368
 
 
369
#define UVC_DT_INPUT_HEADER_SIZE(n, p)                  (13+(n*p))
 
370
 
 
371
#define UVC_INPUT_HEADER_DESCRIPTOR(n, p) \
 
372
        uvc_input_header_descriptor_##n_##p
 
373
 
 
374
#define DECLARE_UVC_INPUT_HEADER_DESCRIPTOR(n, p)       \
 
375
struct UVC_INPUT_HEADER_DESCRIPTOR(n, p) {              \
 
376
        __u8  bLength;                                  \
 
377
        __u8  bDescriptorType;                          \
 
378
        __u8  bDescriptorSubType;                       \
 
379
        __u8  bNumFormats;                              \
 
380
        __u16 wTotalLength;                             \
 
381
        __u8  bEndpointAddress;                         \
 
382
        __u8  bmInfo;                                   \
 
383
        __u8  bTerminalLink;                            \
 
384
        __u8  bStillCaptureMethod;                      \
 
385
        __u8  bTriggerSupport;                          \
 
386
        __u8  bTriggerUsage;                            \
 
387
        __u8  bControlSize;                             \
 
388
        __u8  bmaControls[p][n];                        \
 
389
} __attribute__ ((packed))
 
390
 
 
391
/* 3.9.2.2. Output Header Descriptor */
 
392
struct uvc_output_header_descriptor {
 
393
        __u8  bLength;
 
394
        __u8  bDescriptorType;
 
395
        __u8  bDescriptorSubType;
 
396
        __u8  bNumFormats;
 
397
        __u16 wTotalLength;
 
398
        __u8  bEndpointAddress;
 
399
        __u8  bTerminalLink;
 
400
        __u8  bControlSize;
 
401
        __u8  bmaControls[];
 
402
} __attribute__((__packed__));
 
403
 
 
404
#define UVC_DT_OUTPUT_HEADER_SIZE(n, p)                 (9+(n*p))
 
405
 
 
406
#define UVC_OUTPUT_HEADER_DESCRIPTOR(n, p) \
 
407
        uvc_output_header_descriptor_##n_##p
 
408
 
 
409
#define DECLARE_UVC_OUTPUT_HEADER_DESCRIPTOR(n, p)      \
 
410
struct UVC_OUTPUT_HEADER_DESCRIPTOR(n, p) {             \
 
411
        __u8  bLength;                                  \
 
412
        __u8  bDescriptorType;                          \
 
413
        __u8  bDescriptorSubType;                       \
 
414
        __u8  bNumFormats;                              \
 
415
        __u16 wTotalLength;                             \
 
416
        __u8  bEndpointAddress;                         \
 
417
        __u8  bTerminalLink;                            \
 
418
        __u8  bControlSize;                             \
 
419
        __u8  bmaControls[p][n];                        \
 
420
} __attribute__ ((packed))
 
421
 
 
422
/* 3.9.2.6. Color matching descriptor */
 
423
struct uvc_color_matching_descriptor {
 
424
        __u8  bLength;
 
425
        __u8  bDescriptorType;
 
426
        __u8  bDescriptorSubType;
 
427
        __u8  bColorPrimaries;
 
428
        __u8  bTransferCharacteristics;
 
429
        __u8  bMatrixCoefficients;
 
430
} __attribute__((__packed__));
 
431
 
 
432
#define UVC_DT_COLOR_MATCHING_SIZE                      6
 
433
 
 
434
/* 4.3.1.1. Video Probe and Commit Controls */
 
435
struct uvc_streaming_control {
 
436
        __u16 bmHint;
 
437
        __u8  bFormatIndex;
 
438
        __u8  bFrameIndex;
 
439
        __u32 dwFrameInterval;
 
440
        __u16 wKeyFrameRate;
 
441
        __u16 wPFrameRate;
 
442
        __u16 wCompQuality;
 
443
        __u16 wCompWindowSize;
 
444
        __u16 wDelay;
 
445
        __u32 dwMaxVideoFrameSize;
 
446
        __u32 dwMaxPayloadTransferSize;
 
447
        __u32 dwClockFrequency;
 
448
        __u8  bmFramingInfo;
 
449
        __u8  bPreferedVersion;
 
450
        __u8  bMinVersion;
 
451
        __u8  bMaxVersion;
 
452
} __attribute__((__packed__));
 
453
 
 
454
/* Uncompressed Payload - 3.1.1. Uncompressed Video Format Descriptor */
 
455
struct uvc_format_uncompressed {
 
456
        __u8  bLength;
 
457
        __u8  bDescriptorType;
 
458
        __u8  bDescriptorSubType;
 
459
        __u8  bFormatIndex;
 
460
        __u8  bNumFrameDescriptors;
 
461
        __u8  guidFormat[16];
 
462
        __u8  bBitsPerPixel;
 
463
        __u8  bDefaultFrameIndex;
 
464
        __u8  bAspectRatioX;
 
465
        __u8  bAspectRatioY;
 
466
        __u8  bmInterfaceFlags;
 
467
        __u8  bCopyProtect;
 
468
} __attribute__((__packed__));
 
469
 
 
470
#define UVC_DT_FORMAT_UNCOMPRESSED_SIZE                 27
 
471
 
 
472
/* Uncompressed Payload - 3.1.2. Uncompressed Video Frame Descriptor */
 
473
struct uvc_frame_uncompressed {
 
474
        __u8  bLength;
 
475
        __u8  bDescriptorType;
 
476
        __u8  bDescriptorSubType;
 
477
        __u8  bFrameIndex;
 
478
        __u8  bmCapabilities;
 
479
        __u16 wWidth;
 
480
        __u16 wHeight;
 
481
        __u32 dwMinBitRate;
 
482
        __u32 dwMaxBitRate;
 
483
        __u32 dwMaxVideoFrameBufferSize;
 
484
        __u32 dwDefaultFrameInterval;
 
485
        __u8  bFrameIntervalType;
 
486
        __u32 dwFrameInterval[];
 
487
} __attribute__((__packed__));
 
488
 
 
489
#define UVC_DT_FRAME_UNCOMPRESSED_SIZE(n)               (26+4*(n))
 
490
 
 
491
#define UVC_FRAME_UNCOMPRESSED(n) \
 
492
        uvc_frame_uncompressed_##n
 
493
 
 
494
#define DECLARE_UVC_FRAME_UNCOMPRESSED(n)               \
 
495
struct UVC_FRAME_UNCOMPRESSED(n) {                      \
 
496
        __u8  bLength;                                  \
 
497
        __u8  bDescriptorType;                          \
 
498
        __u8  bDescriptorSubType;                       \
 
499
        __u8  bFrameIndex;                              \
 
500
        __u8  bmCapabilities;                           \
 
501
        __u16 wWidth;                                   \
 
502
        __u16 wHeight;                                  \
 
503
        __u32 dwMinBitRate;                             \
 
504
        __u32 dwMaxBitRate;                             \
 
505
        __u32 dwMaxVideoFrameBufferSize;                \
 
506
        __u32 dwDefaultFrameInterval;                   \
 
507
        __u8  bFrameIntervalType;                       \
 
508
        __u32 dwFrameInterval[n];                       \
 
509
} __attribute__ ((packed))
 
510
 
 
511
/* MJPEG Payload - 3.1.1. MJPEG Video Format Descriptor */
 
512
struct uvc_format_mjpeg {
 
513
        __u8  bLength;
 
514
        __u8  bDescriptorType;
 
515
        __u8  bDescriptorSubType;
 
516
        __u8  bFormatIndex;
 
517
        __u8  bNumFrameDescriptors;
 
518
        __u8  bmFlags;
 
519
        __u8  bDefaultFrameIndex;
 
520
        __u8  bAspectRatioX;
 
521
        __u8  bAspectRatioY;
 
522
        __u8  bmInterfaceFlags;
 
523
        __u8  bCopyProtect;
 
524
} __attribute__((__packed__));
 
525
 
 
526
#define UVC_DT_FORMAT_MJPEG_SIZE                        11
 
527
 
 
528
/* MJPEG Payload - 3.1.2. MJPEG Video Frame Descriptor */
 
529
struct uvc_frame_mjpeg {
 
530
        __u8  bLength;
 
531
        __u8  bDescriptorType;
 
532
        __u8  bDescriptorSubType;
 
533
        __u8  bFrameIndex;
 
534
        __u8  bmCapabilities;
 
535
        __u16 wWidth;
 
536
        __u16 wHeight;
 
537
        __u32 dwMinBitRate;
 
538
        __u32 dwMaxBitRate;
 
539
        __u32 dwMaxVideoFrameBufferSize;
 
540
        __u32 dwDefaultFrameInterval;
 
541
        __u8  bFrameIntervalType;
 
542
        __u32 dwFrameInterval[];
 
543
} __attribute__((__packed__));
 
544
 
 
545
#define UVC_DT_FRAME_MJPEG_SIZE(n)                      (26+4*(n))
 
546
 
 
547
#define UVC_FRAME_MJPEG(n) \
 
548
        uvc_frame_mjpeg_##n
 
549
 
 
550
#define DECLARE_UVC_FRAME_MJPEG(n)                      \
 
551
struct UVC_FRAME_MJPEG(n) {                             \
 
552
        __u8  bLength;                                  \
 
553
        __u8  bDescriptorType;                          \
 
554
        __u8  bDescriptorSubType;                       \
 
555
        __u8  bFrameIndex;                              \
 
556
        __u8  bmCapabilities;                           \
 
557
        __u16 wWidth;                                   \
 
558
        __u16 wHeight;                                  \
 
559
        __u32 dwMinBitRate;                             \
 
560
        __u32 dwMaxBitRate;                             \
 
561
        __u32 dwMaxVideoFrameBufferSize;                \
 
562
        __u32 dwDefaultFrameInterval;                   \
 
563
        __u8  bFrameIntervalType;                       \
 
564
        __u32 dwFrameInterval[n];                       \
 
565
} __attribute__ ((packed))
 
566
 
 
567
#endif /* __LINUX_USB_VIDEO_H */
 
568