📄 uvcvideo.h
字号:
#ifndef _USB_VIDEO_H_#define _USB_VIDEO_H_#include <linux/kernel.h>#include <linux/videodev2.h>/* * Dynamic controls *//* Data types for UVC control data */#define UVC_CTRL_DATA_TYPE_RAW 0#define UVC_CTRL_DATA_TYPE_SIGNED 1#define UVC_CTRL_DATA_TYPE_UNSIGNED 2#define UVC_CTRL_DATA_TYPE_BOOLEAN 3#define UVC_CTRL_DATA_TYPE_ENUM 4#define UVC_CTRL_DATA_TYPE_BITMASK 5/* Control flags */#define UVC_CONTROL_SET_CUR (1 << 0)#define UVC_CONTROL_GET_CUR (1 << 1)#define UVC_CONTROL_GET_MIN (1 << 2)#define UVC_CONTROL_GET_MAX (1 << 3)#define UVC_CONTROL_GET_RES (1 << 4)#define UVC_CONTROL_GET_DEF (1 << 5)/* Control should be saved at suspend and restored at resume. */#define UVC_CONTROL_RESTORE (1 << 6)/* Control can be updated by the camera. */#define UVC_CONTROL_AUTO_UPDATE (1 << 7)#define UVC_CONTROL_GET_RANGE (UVC_CONTROL_GET_CUR | UVC_CONTROL_GET_MIN | \ UVC_CONTROL_GET_MAX | UVC_CONTROL_GET_RES | \ UVC_CONTROL_GET_DEF)struct uvc_xu_control_info { __u8 entity[16]; __u8 index; __u8 selector; __u16 size; __u32 flags;};struct uvc_xu_control_mapping { __u32 id; __u8 name[32]; __u8 entity[16]; __u8 selector; __u8 size; __u8 offset; enum v4l2_ctrl_type v4l2_type; __u32 data_type;};struct uvc_xu_control { __u8 unit; __u8 selector; __u16 size; __u8 __user *data;};#define UVCIOC_CTRL_ADD _IOW('U', 1, struct uvc_xu_control_info)#define UVCIOC_CTRL_MAP _IOWR('U', 2, struct uvc_xu_control_mapping)#define UVCIOC_CTRL_GET _IOWR('U', 3, struct uvc_xu_control)#define UVCIOC_CTRL_SET _IOW('U', 4, struct uvc_xu_control)#ifdef __KERNEL__#include <linux/poll.h>/* -------------------------------------------------------------------------- * UVC constants */#define SC_UNDEFINED 0x00#define SC_VIDEOCONTROL 0x01#define SC_VIDEOSTREAMING 0x02#define SC_VIDEO_INTERFACE_COLLECTION 0x03#define PC_PROTOCOL_UNDEFINED 0x00#define CS_UNDEFINED 0x20#define CS_DEVICE 0x21#define CS_CONFIGURATION 0x22#define CS_STRING 0x23#define CS_INTERFACE 0x24#define CS_ENDPOINT 0x25/* VideoControl class specific interface descriptor */#define VC_DESCRIPTOR_UNDEFINED 0x00#define VC_HEADER 0x01#define VC_INPUT_TERMINAL 0x02#define VC_OUTPUT_TERMINAL 0x03#define VC_SELECTOR_UNIT 0x04#define VC_PROCESSING_UNIT 0x05#define VC_EXTENSION_UNIT 0x06/* VideoStreaming class specific interface descriptor */#define VS_UNDEFINED 0x00#define VS_INPUT_HEADER 0x01#define VS_OUTPUT_HEADER 0x02#define VS_STILL_IMAGE_FRAME 0x03#define VS_FORMAT_UNCOMPRESSED 0x04#define VS_FRAME_UNCOMPRESSED 0x05#define VS_FORMAT_MJPEG 0x06#define VS_FRAME_MJPEG 0x07#define VS_FORMAT_MPEG2TS 0x0a#define VS_FORMAT_DV 0x0c#define VS_COLORFORMAT 0x0d#define VS_FORMAT_FRAME_BASED 0x10#define VS_FRAME_FRAME_BASED 0x11#define VS_FORMAT_STREAM_BASED 0x12/* Endpoint type */#define EP_UNDEFINED 0x00#define EP_GENERAL 0x01#define EP_ENDPOINT 0x02#define EP_INTERRUPT 0x03/* Request codes */#define RC_UNDEFINED 0x00#define SET_CUR 0x01#define GET_CUR 0x81#define GET_MIN 0x82#define GET_MAX 0x83#define GET_RES 0x84#define GET_LEN 0x85#define GET_INFO 0x86#define GET_DEF 0x87/* VideoControl interface controls */#define VC_CONTROL_UNDEFINED 0x00#define VC_VIDEO_POWER_MODE_CONTROL 0x01#define VC_REQUEST_ERROR_CODE_CONTROL 0x02/* Terminal controls */#define TE_CONTROL_UNDEFINED 0x00/* Selector Unit controls */#define SU_CONTROL_UNDEFINED 0x00#define SU_INPUT_SELECT_CONTROL 0x01/* Camera Terminal controls */#define CT_CONTROL_UNDEFINED 0x00#define CT_SCANNING_MODE_CONTROL 0x01#define CT_AE_MODE_CONTROL 0x02#define CT_AE_PRIORITY_CONTROL 0x03#define CT_EXPOSURE_TIME_ABSOLUTE_CONTROL 0x04#define CT_EXPOSURE_TIME_RELATIVE_CONTROL 0x05#define CT_FOCUS_ABSOLUTE_CONTROL 0x06#define CT_FOCUS_RELATIVE_CONTROL 0x07#define CT_FOCUS_AUTO_CONTROL 0x08#define CT_IRIS_ABSOLUTE_CONTROL 0x09#define CT_IRIS_RELATIVE_CONTROL 0x0a#define CT_ZOOM_ABSOLUTE_CONTROL 0x0b#define CT_ZOOM_RELATIVE_CONTROL 0x0c#define CT_PANTILT_ABSOLUTE_CONTROL 0x0d#define CT_PANTILT_RELATIVE_CONTROL 0x0e#define CT_ROLL_ABSOLUTE_CONTROL 0x0f#define CT_ROLL_RELATIVE_CONTROL 0x10#define CT_PRIVACY_CONTROL 0x11/* Processing Unit controls */#define PU_CONTROL_UNDEFINED 0x00#define PU_BACKLIGHT_COMPENSATION_CONTROL 0x01#define PU_BRIGHTNESS_CONTROL 0x02#define PU_CONTRAST_CONTROL 0x03#define PU_GAIN_CONTROL 0x04#define PU_POWER_LINE_FREQUENCY_CONTROL 0x05#define PU_HUE_CONTROL 0x06#define PU_SATURATION_CONTROL 0x07#define PU_SHARPNESS_CONTROL 0x08#define PU_GAMMA_CONTROL 0x09#define PU_WHITE_BALANCE_TEMPERATURE_CONTROL 0x0a#define PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL 0x0b#define PU_WHITE_BALANCE_COMPONENT_CONTROL 0x0c#define PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL 0x0d#define PU_DIGITAL_MULTIPLIER_CONTROL 0x0e#define PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL 0x0f#define PU_HUE_AUTO_CONTROL 0x10#define PU_ANALOG_VIDEO_STANDARD_CONTROL 0x11#define PU_ANALOG_LOCK_STATUS_CONTROL 0x12#define LXU_MOTOR_PANTILT_RELATIVE_CONTROL 0x01#define LXU_MOTOR_PANTILT_RESET_CONTROL 0x02#define LXU_MOTOR_FOCUS_MOTOR_CONTROL 0x03/* VideoStreaming interface controls */#define VS_CONTROL_UNDEFINED 0x00#define VS_PROBE_CONTROL 0x01#define VS_COMMIT_CONTROL 0x02#define VS_STILL_PROBE_CONTROL 0x03#define VS_STILL_COMMIT_CONTROL 0x04#define VS_STILL_IMAGE_TRIGGER_CONTROL 0x05#define VS_STREAM_ERROR_CODE_CONTROL 0x06#define VS_GENERATE_KEY_FRAME_CONTROL 0x07#define VS_UPDATE_FRAME_SEGMENT_CONTROL 0x08#define VS_SYNC_DELAY_CONTROL 0x09#define TT_VENDOR_SPECIFIC 0x0100#define TT_STREAMING 0x0101/* Input Terminal types */#define ITT_VENDOR_SPECIFIC 0x0200#define ITT_CAMERA 0x0201#define ITT_MEDIA_TRANSPORT_INPUT 0x0202/* Output Terminal types */#define OTT_VENDOR_SPECIFIC 0x0300#define OTT_DISPLAY 0x0301#define OTT_MEDIA_TRANSPORT_OUTPUT 0x0302/* External Terminal types */#define EXTERNAL_VENDOR_SPECIFIC 0x0400#define COMPOSITE_CONNECTOR 0x0401#define SVIDEO_CONNECTOR 0x0402#define COMPONENT_CONNECTOR 0x0403#define UVC_TERM_INPUT 0x0000#define UVC_TERM_OUTPUT 0x8000#define UVC_ENTITY_TYPE(entity) ((entity)->type & 0x7fff)#define UVC_ENTITY_IS_UNIT(entity) (((entity)->type & 0xff00) == 0)#define UVC_ENTITY_IS_TERM(entity) (((entity)->type & 0xff00) != 0)#define UVC_ENTITY_IS_ITERM(entity) \ (((entity)->type & 0x8000) == UVC_TERM_INPUT)#define UVC_ENTITY_IS_OTERM(entity) \ (((entity)->type & 0x8000) == UVC_TERM_OUTPUT)#define UVC_STATUS_TYPE_CONTROL 1#define UVC_STATUS_TYPE_STREAMING 2/* ------------------------------------------------------------------------ * GUIDs */#define UVC_GUID_UVC_CAMERA \ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}#define UVC_GUID_UVC_OUTPUT \ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02}#define UVC_GUID_UVC_MEDIA_TRANSPORT_INPUT \ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03}#define UVC_GUID_UVC_PROCESSING \ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01}#define UVC_GUID_UVC_SELECTOR \ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02}#define UVC_GUID_LOGITECH_DEV_INFO \ {0x82, 0x06, 0x61, 0x63, 0x70, 0x50, 0xab, 0x49, \ 0xb8, 0xcc, 0xb3, 0x85, 0x5e, 0x8d, 0x22, 0x1e}#define UVC_GUID_LOGITECH_USER_HW \ {0x82, 0x06, 0x61, 0x63, 0x70, 0x50, 0xab, 0x49, \ 0xb8, 0xcc, 0xb3, 0x85, 0x5e, 0x8d, 0x22, 0x1f}#define UVC_GUID_LOGITECH_VIDEO \ {0x82, 0x06, 0x61, 0x63, 0x70, 0x50, 0xab, 0x49, \ 0xb8, 0xcc, 0xb3, 0x85, 0x5e, 0x8d, 0x22, 0x50}#define UVC_GUID_LOGITECH_MOTOR \ {0x82, 0x06, 0x61, 0x63, 0x70, 0x50, 0xab, 0x49, \ 0xb8, 0xcc, 0xb3, 0x85, 0x5e, 0x8d, 0x22, 0x56}#define UVC_GUID_FORMAT_MJPEG \ { 'M', 'J', 'P', 'G', 0x00, 0x00, 0x10, 0x00, \ 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}#define UVC_GUID_FORMAT_YUY2 \ { 'Y', 'U', 'Y', '2', 0x00, 0x00, 0x10, 0x00, \ 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}#define UVC_GUID_FORMAT_NV12 \ { 'N', 'V', '1', '2', 0x00, 0x00, 0x10, 0x00, \ 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}#define UVC_GUID_FORMAT_YV12 \ { 'Y', 'V', '1', '2', 0x00, 0x00, 0x10, 0x00, \ 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}#define UVC_GUID_FORMAT_I420 \ { 'I', '4', '2', '0', 0x00, 0x00, 0x10, 0x00, \ 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}#define UVC_GUID_FORMAT_UYVY \ { 'U', 'Y', 'V', 'Y', 0x00, 0x00, 0x10, 0x00, \ 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}#define UVC_GUID_FORMAT_Y800 \ { 'Y', '8', '0', '0', 0x00, 0x00, 0x10, 0x00, \ 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}#define UVC_GUID_FORMAT_BY8 \ { 'B', 'Y', '8', ' ', 0x00, 0x00, 0x10, 0x00, \ 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}/* ------------------------------------------------------------------------ * Driver specific constants. */#define DRIVER_VERSION_NUMBER KERNEL_VERSION(0, 1, 0)/* Number of isochronous URBs. */#define UVC_URBS 5/* Maximum number of packets per isochronous URB. */#define UVC_MAX_ISO_PACKETS 40/* Maximum frame size in bytes, for sanity checking. */#define UVC_MAX_FRAME_SIZE (16*1024*1024)/* Maximum number of video buffers. */#define UVC_MAX_VIDEO_BUFFERS 32/* Maximum status buffer size in bytes of interrupt URB. */#define UVC_MAX_STATUS_SIZE 16#define UVC_CTRL_CONTROL_TIMEOUT 300#define UVC_CTRL_STREAMING_TIMEOUT 1000/* Devices quirks */#define UVC_QUIRK_STATUS_INTERVAL 0x00000001#define UVC_QUIRK_PROBE_MINMAX 0x00000002#define UVC_QUIRK_PROBE_EXTRAFIELDS 0x00000004#define UVC_QUIRK_BUILTIN_ISIGHT 0x00000008#define UVC_QUIRK_STREAM_NO_FID 0x00000010#define UVC_QUIRK_IGNORE_SELECTOR_UNIT 0x00000020/* Format flags */#define UVC_FMT_FLAG_COMPRESSED 0x00000001#define UVC_FMT_FLAG_STREAM 0x00000002/* ------------------------------------------------------------------------ * Structures. */struct uvc_device;/* TODO: Put the most frequently accessed fields at the beginning of * structures to maximize cache efficiency. */struct uvc_streaming_control { __u16 bmHint; __u8 bFormatIndex; __u8 bFrameIndex; __u32 dwFrameInterval; __u16 wKeyFrameRate; __u16 wPFrameRate; __u16 wCompQuality; __u16 wCompWindowSize; __u16 wDelay; __u32 dwMaxVideoFrameSize; __u32 dwMaxPayloadTransferSize; __u32 dwClockFrequency; __u8 bmFramingInfo; __u8 bPreferedVersion; __u8 bMinVersion; __u8 bMaxVersion;};struct uvc_menu_info { __u32 value; __u8 name[32];};struct uvc_control_info { struct list_head list; struct list_head mappings; __u8 entity[16]; __u8 index; __u8 selector; __u16 size; __u32 flags;};struct uvc_control_mapping { struct list_head list; struct uvc_control_info *ctrl; __u32 id; __u8 name[32]; __u8 entity[16]; __u8 selector; __u8 size; __u8 offset; enum v4l2_ctrl_type v4l2_type; __u32 data_type; struct uvc_menu_info *menu_info; __u32 menu_count;};struct uvc_control { struct uvc_entity *entity; struct uvc_control_info *info; __u8 index; /* Used to match the uvc_control entry with a uvc_control_info. */ __u8 dirty : 1, loaded : 1, modified : 1; __u8 *data;};struct uvc_format_desc {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -