xref: /onnv-gate/usr/src/uts/common/sys/usb/clients/video/usbvc/usbvc.h (revision 7492:2387323b838f)
13329Syz147069 /*
23329Syz147069  * CDDL HEADER START
33329Syz147069  *
43329Syz147069  * The contents of this file are subject to the terms of the
53329Syz147069  * Common Development and Distribution License (the "License").
63329Syz147069  * You may not use this file except in compliance with the License.
73329Syz147069  *
83329Syz147069  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
93329Syz147069  * or http://www.opensolaris.org/os/licensing.
103329Syz147069  * See the License for the specific language governing permissions
113329Syz147069  * and limitations under the License.
123329Syz147069  *
133329Syz147069  * When distributing Covered Code, include this CDDL HEADER in each
143329Syz147069  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
153329Syz147069  * If applicable, add the following below this CDDL HEADER, with the
163329Syz147069  * fields enclosed by brackets "[]" replaced with your own identifying
173329Syz147069  * information: Portions Copyright [yyyy] [name of copyright owner]
183329Syz147069  *
193329Syz147069  * CDDL HEADER END
203329Syz147069  */
213329Syz147069 /*
22*7232Slc152243  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
233329Syz147069  * Use is subject to license terms.
243329Syz147069  */
253329Syz147069 
263329Syz147069 #ifndef _SYS_USB_USBVC_H
273329Syz147069 #define	_SYS_USB_USBVC_H
283329Syz147069 
293329Syz147069 
303329Syz147069 #ifdef	__cplusplus
313329Syz147069 extern "C" {
323329Syz147069 #endif
333329Syz147069 
343329Syz147069 /* Video interface class code */
353329Syz147069 #define	CC_VIDEO			0x0e
363329Syz147069 
373329Syz147069 /* Video interface subclass code */
383329Syz147069 #define	SC_UNDEFINED			0x00
393329Syz147069 #define	SC_VIDEOCONTROL 		0x01
403329Syz147069 #define	SC_VIDEOSTREAMING		0x02
413329Syz147069 #define	SC_VIDEO_INTERFACE_COLLECTION	0x03
423329Syz147069 
433329Syz147069 #define	PC_PROTOCOL_UNDEFINED		0x00
443329Syz147069 
453329Syz147069 /* Video class specific interface descriptor types */
463329Syz147069 #define	CS_UNDEFINED			0x20
473329Syz147069 #define	CS_DEVICE			0x21
483329Syz147069 #define	CS_CONFIGURATION		0x22
493329Syz147069 #define	CS_STRING			0x23
503329Syz147069 #define	CS_INTERFACE			0x24
513329Syz147069 #define	CS_ENDPOINT			0x25
523329Syz147069 
533329Syz147069 /* Video class specific, video control interface descriptor subtypes */
543329Syz147069 #define	VC_DESCRIPTOR_UNDEFINED 	0x00
553329Syz147069 #define	VC_HEADER			0x01
563329Syz147069 #define	VC_INPUT_TERMINAL		0x02
573329Syz147069 #define	VC_OUTPUT_TERMINAL		0x03
583329Syz147069 #define	VC_SELECTOR_UNIT		0x04
593329Syz147069 #define	VC_PROCESSING_UNIT		0x05
603329Syz147069 #define	VC_EXTENSION_UNIT		0x06
613329Syz147069 
623329Syz147069 /* Video class specific, video stream interface descriptor subtypes */
633329Syz147069 #define	VS_UNDEFINED			0x00
643329Syz147069 #define	VS_INPUT_HEADER 		0x01
653329Syz147069 #define	VS_OUTPUT_HEADER		0x02
663329Syz147069 #define	VS_STILL_IMAGE_FRAME		0x03
673329Syz147069 #define	VS_FORMAT_UNCOMPRESSED		0x04
683329Syz147069 #define	VS_FRAME_UNCOMPRESSED		0x05
693329Syz147069 #define	VS_FORMAT_MJPEG 		0x06
703329Syz147069 #define	VS_FRAME_MJPEG			0x07
713329Syz147069 #define	VS_FORMAT_MPEG2TS		0x0a
723329Syz147069 #define	VS_FORMAT_DV			0x0c
733329Syz147069 #define	VS_COLORFORMAT			0x0d
743329Syz147069 #define	VS_FORMAT_FRAME_BASED		0x10
753329Syz147069 #define	VS_FRAME_FRAME_BASED		0x11
763329Syz147069 #define	VS_FORMAT_STREAM_BASED		0x12
773329Syz147069 
783329Syz147069 /* Endpoint type */
793329Syz147069 #define	EP_UNDEFINED			0x00
803329Syz147069 #define	EP_GENERAL			0x01
813329Syz147069 #define	EP_ENDPOINT			0x02
823329Syz147069 #define	EP_INTERRUPT			0x03
833329Syz147069 
843329Syz147069 /* Request codes, bRequest */
853329Syz147069 #define	RC_UNDEFINED			0x00
863329Syz147069 #define	SET_CUR 			0x01
873329Syz147069 #define	GET_CUR 			0x81
883329Syz147069 #define	GET_MIN 			0x82
893329Syz147069 #define	GET_MAX 			0x83
903329Syz147069 #define	GET_RES 			0x84
913329Syz147069 #define	GET_LEN 			0x85
923329Syz147069 #define	GET_INFO			0x86
933329Syz147069 #define	GET_DEF 			0x87
943329Syz147069 
953329Syz147069 /* Control types of Video Control interface */
963329Syz147069 #define	VC_CONTROL_UNDEFINED		0x00
973329Syz147069 #define	VC_VIDEO_POWER_MODE_CONTROL	0x01
983329Syz147069 #define	VC_REQUEST_ERROR_CODE_CONTROL	0x02
993329Syz147069 
1003329Syz147069 /* Terminal controls */
1013329Syz147069 #define	TE_CONTROL_UNDEFINED		0x00
1023329Syz147069 
1033329Syz147069 /* Selector Unit controls */
1043329Syz147069 #define	SU_CONTROL_UNDEFINED		0x00
1053329Syz147069 #define	SU_INPUT_SELECT_CONTROL 	0x01
1063329Syz147069 
1073329Syz147069 /* Camera Terminal controls */
1083329Syz147069 #define	CT_CONTROL_UNDEFINED				0x00
1093329Syz147069 #define	CT_SCANNING_MODE_CONTROL			0x01
1103329Syz147069 #define	CT_AE_MODE_CONTROL				0x02
1113329Syz147069 #define	CT_AE_PRIORITY_CONTROL				0x03
1123329Syz147069 #define	CT_EXPOSURE_TIME_ABSOLUTE_CONTROL		0x04
1133329Syz147069 #define	CT_EXPOSURE_TIME_RELATIVE_CONTROL		0x05
1143329Syz147069 #define	CT_FOCUS_ABSOLUTE_CONTROL			0x06
1153329Syz147069 #define	CT_FOCUS_RELATIVE_CONTROL			0x07
1163329Syz147069 #define	CT_FOCUS_AUTO_CONTROL				0x08
1173329Syz147069 #define	CT_IRIS_ABSOLUTE_CONTROL			0x09
1183329Syz147069 #define	CT_IRIS_RELATIVE_CONTROL			0x0a
1193329Syz147069 #define	CT_ZOOM_ABSOLUTE_CONTROL			0x0b
1203329Syz147069 #define	CT_ZOOM_RELATIVE_CONTROL			0x0c
1213329Syz147069 #define	CT_PANTILT_ABSOLUTE_CONTROL			0x0d
1223329Syz147069 #define	CT_PANTILT_RELATIVE_CONTROL			0x0e
1233329Syz147069 #define	CT_ROLL_ABSOLUTE_CONTROL			0x0f
1243329Syz147069 #define	CT_ROLL_RELATIVE_CONTROL			0x10
1253329Syz147069 #define	CT_PRIVACY_CONTROL				0x11
1263329Syz147069 
1273329Syz147069 /* Processing Unit controls */
1283329Syz147069 #define	PU_CONTROL_UNDEFINED				0x00
1293329Syz147069 #define	PU_BACKLIGHT_COMPENSATION_CONTROL		0x01
1303329Syz147069 #define	PU_BRIGHTNESS_CONTROL				0x02
1313329Syz147069 #define	PU_CONTRAST_CONTROL				0x03
1323329Syz147069 #define	PU_GAIN_CONTROL 				0x04
1333329Syz147069 #define	PU_POWER_LINE_FREQUENCY_CONTROL 		0x05
1343329Syz147069 #define	PU_HUE_CONTROL					0x06
1353329Syz147069 #define	PU_SATURATION_CONTROL				0x07
1363329Syz147069 #define	PU_SHARPNESS_CONTROL				0x08
1373329Syz147069 #define	PU_GAMMA_CONTROL				0x09
1383329Syz147069 #define	PU_WHITE_BALANCE_TEMPERATURE_CONTROL		0x0a
1393329Syz147069 #define	PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL	0x0b
1403329Syz147069 #define	PU_WHITE_BALANCE_COMPONENT_CONTROL		0x0c
1413329Syz147069 #define	PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL 	0x0d
1423329Syz147069 #define	PU_DIGITAL_MULTIPLIER_CONTROL			0x0e
1433329Syz147069 #define	PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL		0x0f
1443329Syz147069 #define	PU_HUE_AUTO_CONTROL				0x10
1453329Syz147069 #define	PU_ANALOG_VIDEO_STANDARD_CONTROL		0x11
1463329Syz147069 #define	PU_ANALOG_LOCK_STATUS_CONTROL			0x12
1473329Syz147069 
1483329Syz147069 /* VideoStreaming interface controls, wValue */
1493329Syz147069 #define	VS_CONTROL_UNDEFINED		0x00
1503329Syz147069 #define	VS_PROBE_CONTROL		0x01
1513329Syz147069 #define	VS_COMMIT_CONTROL		0x02
1523329Syz147069 #define	VS_STILL_PROBE_CONTROL		0x03
1533329Syz147069 #define	VS_STILL_COMMIT_CONTROL 	0x04
1543329Syz147069 #define	VS_STILL_IMAGE_TRIGGER_CONTROL	0x05
1553329Syz147069 #define	VS_STREAM_ERROR_CODE_CONTROL	0x06
1563329Syz147069 #define	VS_GENERATE_KEY_FRAME_CONTROL	0x07
1573329Syz147069 #define	VS_UPDATE_FRAME_SEGMENT_CONTROL 0x08
1583329Syz147069 #define	VS_SYNC_DELAY_CONTROL		0x09
1593329Syz147069 
1603329Syz147069 /* bmRequestType */
1613329Syz147069 #define	USBVC_SET_IF	0x21;
1623329Syz147069 #define	USBVC_GET_IF	0xA1;
1633329Syz147069 #define	USBVC_SET_EP	0x22;
1643329Syz147069 #define	USBVC_GET_EP	0xA2;
1653329Syz147069 
1663329Syz147069 /* Terminal types */
1673329Syz147069 #define	TT_VENDOR_SPECIFIC		0x0100
1683329Syz147069 #define	TT_STREAMING			0x0101
1693329Syz147069 
1703329Syz147069 /* Input Terminal types */
1713329Syz147069 #define	ITT_VENDOR_SPECIFIC		0x0200
1723329Syz147069 #define	ITT_CAMERA			0x0201
1733329Syz147069 #define	ITT_MEDIA_TRANSPORT_INPUT	0x0202
1743329Syz147069 
1753329Syz147069 /* Output Terminal types */
1763329Syz147069 #define	OTT_VENDOR_SPECIFIC		0x0300
1773329Syz147069 #define	OTT_DISPLAY			0x0301
1783329Syz147069 #define	OTT_MEDIA_TRANSPORT_OUTPUT	0x0302
1793329Syz147069 
1803329Syz147069 /* External terminal types */
1813329Syz147069 #define	EXTERNAL_VENDOR_SPECIFIC	0x0400
1823329Syz147069 #define	COMPOSITE_CONNECTOR		0x0401
1833329Syz147069 #define	SVIDEO_CONNECTOR		0x0402
1843329Syz147069 #define	COMPONENT_CONNECTOR		0x0403
1853329Syz147069 
1863329Syz147069 /*
1873329Syz147069  * usb video class descriptors
1883329Syz147069  */
1893329Syz147069 
1903329Syz147069 /* usb video class, video control interface, header descriptor */
1913329Syz147069 typedef struct usbvc_vc_header_descr {
1923329Syz147069 	uint8_t	bLength;
1933329Syz147069 	uint8_t	bDescriptorType;
1943329Syz147069 	uint8_t	bDescriptorSubtype;
1953329Syz147069 	uint8_t	bcdUVC[2];
1963329Syz147069 	uint8_t	wTotalLength[2];
1973329Syz147069 	uint8_t	dwClockFrequency[4];
1983329Syz147069 
1993329Syz147069 	/* Number of stream interfaces belong to this VC interface */
2003329Syz147069 	uint8_t	bInCollection;
2013329Syz147069 } usbvc_vc_header_descr_t;
2023329Syz147069 
2033329Syz147069 typedef struct usbvc_vc_header {
2043329Syz147069 	usbvc_vc_header_descr_t	*descr;
2053329Syz147069 
2063329Syz147069 	/* there might be multiple stream interface numbers */
2073329Syz147069 	uint8_t			*baInterfaceNr;
2083329Syz147069 } usbvc_vc_header_t;
2093329Syz147069 
2103329Syz147069 /* unit descriptor for all the three kinds of units */
2113329Syz147069 typedef struct usbvc_unit_descr {
2123329Syz147069 	uint8_t bLength;
2133329Syz147069 	uint8_t bDescriptorType;
2143329Syz147069 	uint8_t bDescriptorSubType;
2153329Syz147069 	uint8_t bUnitID;
2163329Syz147069 
2173329Syz147069 	union {
2183329Syz147069 		struct {
2193329Syz147069 			uint8_t bSourceID;
2203329Syz147069 			uint8_t wMaxMultiplier[2];
2213329Syz147069 			uint8_t bControlSize;
2223329Syz147069 		} processing;
2233329Syz147069 
2243329Syz147069 		struct {
2253329Syz147069 			uint8_t	bNrInPins;
2263329Syz147069 		} selector;
2273329Syz147069 
2283329Syz147069 		struct {
2293329Syz147069 			uint8_t	guidExtensionCode[16];
2303329Syz147069 			uint8_t	bNumControls;
2313329Syz147069 			uint8_t	bNrInPins;
2323329Syz147069 		} extension;
2333329Syz147069 	} unit;
2343329Syz147069 } usbvc_unit_descr_t;
2353329Syz147069 
2363329Syz147069 typedef struct usbvc_units {
2373329Syz147069 	/* Point to cvs_buf, for most elements of unit descriptor */
2383329Syz147069 	usbvc_unit_descr_t *descr;
2393329Syz147069 
2403329Syz147069 	uint8_t		*bmControls;	/* for processing or extention unit */
2413329Syz147069 	uint8_t		*baSourceID;	/* for selector or extention unit */
2423329Syz147069 	uint8_t		iSelector;	/* for selector  unit */
2433329Syz147069 	uint8_t		iProcessing;	/* for processing  unit */
2443329Syz147069 	uint8_t		bmVideoStandards; /* for processing unit */
2453329Syz147069 	uint8_t		bControlSize;	/* for extention unit */
2463329Syz147069 	uint8_t		iExtension;	/* for extention unit */
2473329Syz147069 	list_node_t	unit_node;
2483329Syz147069 } usbvc_units_t;
2493329Syz147069 
2503329Syz147069 /* Terminal descriptor for all the three kinds of video terminals */
2513329Syz147069 typedef struct		usbvc_term_descr {
2523329Syz147069 	uint8_t		bLength;
2533329Syz147069 	uint8_t		bDescriptorType;
2543329Syz147069 	uint8_t		bDescriptorSubType;
2553329Syz147069 	uint8_t		bTerminalID;
2563329Syz147069 	uint16_t	wTerminalType;
2573329Syz147069 	uint8_t		AssocTerminal;
2583329Syz147069 
2593329Syz147069 	union {
2603329Syz147069 		struct {
2613329Syz147069 			uint8_t iTerminal;
2623329Syz147069 		} input;
2633329Syz147069 
2643329Syz147069 		struct {
2653329Syz147069 			uint8_t	bSourceID;
2663329Syz147069 			uint8_t	iTerminal;
2673329Syz147069 		} output;
2683329Syz147069 
2693329Syz147069 		struct {
2703329Syz147069 			uint8_t		iTerminal;
2713329Syz147069 			uint16_t	wObjectiveFocalLengthMin;
2723329Syz147069 			uint16_t	wObjectiveFocalLengthMax;
2733329Syz147069 			uint16_t	wOcularFocalLength;
2743329Syz147069 			uint8_t		bControlSize;
2753329Syz147069 		} camera;
2763329Syz147069 	}term;
2773329Syz147069 } usbvc_term_descr_t;
2783329Syz147069 
2793329Syz147069 typedef struct usbvc_terms {
2803329Syz147069 	usbvc_term_descr_t	*descr;	/* interfaces for this cfg */
2813329Syz147069 
2823329Syz147069 	/* for input or output terminals, excluding camera terminals */
2833329Syz147069 	uint8_t			*bSpecific;
2843329Syz147069 
2853329Syz147069 	uint8_t			*bmControls;  /* for camera terminals only */
2863329Syz147069 	list_node_t		term_node;
2873329Syz147069 } usbvc_terms_t;
2883329Syz147069 
2893329Syz147069 /*
2903329Syz147069  * Stream interface descriptors
2913329Syz147069  */
2923329Syz147069 
2933329Syz147069 /* input header descriptor */
2943329Syz147069 typedef struct usbvc_input_header_descr {
2953329Syz147069 	uint8_t		bLength;
2963329Syz147069 	uint8_t		bDescriptorType;
2973329Syz147069 	uint8_t		bDescriptorSubType;
2983329Syz147069 	uint8_t		bNumFormats;
2993329Syz147069 	uint16_t	wTotalLength;
3003329Syz147069 	uint8_t		bEndpointAddress;
3013329Syz147069 	uint8_t		bmInfo;
3023329Syz147069 	uint8_t		bTerminalLink;
3033329Syz147069 	uint8_t		bStillCaptureMethod;
3043329Syz147069 	uint8_t		bTriggerSupport;
3053329Syz147069 	uint8_t		bTriggerUsage;
3063329Syz147069 	uint8_t		bControlSize;
3073329Syz147069 } usbvc_input_header_descr_t;
3083329Syz147069 
3093329Syz147069 /* UVC Spec: only one input header in one stream interface */
3103329Syz147069 typedef struct usbvc_input_header {
3113329Syz147069 	usbvc_input_header_descr_t	*descr;
3123329Syz147069 	uint8_t				*bmaControls;
3133329Syz147069 } usbvc_input_header_t;
3143329Syz147069 
3153329Syz147069 /* Do not support output video device at present */
3163329Syz147069 typedef struct usbvc_output_header_descr {
3173329Syz147069 	uint8_t		bLength;
3183329Syz147069 	uint8_t		bDescriptorType;
3193329Syz147069 	uint8_t		bDescriptorSubType;
3203329Syz147069 	uint8_t		bNumFormats;
3213329Syz147069 	uint16_t	wTotalLength;
3223329Syz147069 	uint8_t		bEndpointAddress;
3233329Syz147069 	uint8_t		bTerminalLink;
3243329Syz147069 	uint8_t		bControlSize;
3253329Syz147069 } usbvc_output_header_descr_t;
3263329Syz147069 
3273329Syz147069 typedef struct usbvc_output_header {
3283329Syz147069 	usbvc_output_header_descr_t	*descr;
3293329Syz147069 	uint8_t				*bmaControls;
3303329Syz147069 } usbvc_output_header_t;
3313329Syz147069 
3323329Syz147069 /*
3333329Syz147069  * Except bDescriptorSubType value, MJPEG and uncompressed frame descriptor are
3343329Syz147069  * all the same. So share one structure.
3353329Syz147069  */
3363329Syz147069 typedef struct usbvc_frame_descr {
3373329Syz147069 	uint8_t bLength;
3383329Syz147069 	uint8_t bDescriptorType;
3393329Syz147069 	uint8_t bDescriptorSubType;
3403329Syz147069 	uint8_t bFrameIndex;
3413329Syz147069 	uint8_t bmCapabilities;
3423329Syz147069 	uint8_t wWidth[2];
3433329Syz147069 	uint8_t wHeight[2];
3443329Syz147069 	uint8_t dwMinBitRate[4];
3453329Syz147069 	uint8_t dwMaxBitRate[4];
3463329Syz147069 	uint8_t dwMaxVideoFrameBufferSize[4];
3473329Syz147069 	uint8_t dwDefaultFrameInterval[4];
3483329Syz147069 	uint8_t bFrameIntervalType;
3493329Syz147069 } usbvc_frame_descr_t;
3503329Syz147069 
3513329Syz147069 /*
3523329Syz147069  * There may be several frame descriptors immediately follow a format
3533329Syz147069  * descriptor.
3543329Syz147069  */
3553329Syz147069 typedef struct usbvc_frames {
3563329Syz147069 	usbvc_frame_descr_t *descr;
3573329Syz147069 	uint32_t dwMinFrameInterval;	/* for continuous frame intervals */
3583329Syz147069 	uint32_t dwMaxFrameInterval;	/* for continuous frame intervals */
3593329Syz147069 	uint32_t dwFrameIntervalStep;	/* for continuous frame intervals */
360*7232Slc152243 	uint8_t *dwFrameInterval;	/* for discrete frame intervals */
3613329Syz147069 } usbvc_frames_t;
3623329Syz147069 
3633329Syz147069 /* The first several fixed length fields of still image frame descriptor */
3643329Syz147069 typedef struct usbvc_still_image_frame_descr {
3653329Syz147069 	uint8_t	bLength;
3663329Syz147069 	uint8_t	bDescriptorType;
3673329Syz147069 	uint8_t	bDescriptorSubType;
3683329Syz147069 	uint8_t	bEndpointAddress;
3693329Syz147069 	uint8_t	bNumImageSizePatterns;
3703329Syz147069 } usbvc_still_image_frame_descr_t;
3713329Syz147069 
3723329Syz147069 /*
3733329Syz147069  * Width and Hight of the still image.
3743329Syz147069  * There might be multiple such value pairs in one still image frame descr.
3753329Syz147069  */
3763329Syz147069 typedef struct width_height {
3773329Syz147069 	uint16_t wWidth;
3783329Syz147069 	uint16_t wHeight;
3793329Syz147069 } width_height_t;
3803329Syz147069 
3813329Syz147069 /*
3823329Syz147069  * The whole still image frame descriptor.
3833329Syz147069  * UVC Spec: only one still image descriptor for each format group.
3843329Syz147069  */
3853329Syz147069 typedef struct usbvc_still_image_frame {
3863329Syz147069 	usbvc_still_image_frame_descr_t	*descr;
3873329Syz147069 	width_height_t			*width_height;
3883329Syz147069 	uint8_t				bNumCompressionPattern;
3893329Syz147069 	uint8_t				*bCompression;
3903329Syz147069 } usbvc_still_image_frame_t;
3913329Syz147069 
3923329Syz147069 /*
3933329Syz147069  * All fields of this descr are fixed length.
3943329Syz147069  * UVC Spec: only one color_matching_descr is allowed for a given format.
3953329Syz147069  */
3963329Syz147069 typedef struct usbvc_color_matching_descr {
3973329Syz147069 	uint8_t	bLength;
3983329Syz147069 	uint8_t	bDescriptorType;
3993329Syz147069 	uint8_t	bDescriptorSubtype;
4003329Syz147069 	uint8_t	bColorPrimaries;
4013329Syz147069 	uint8_t	bTransferCharacteristics;
4023329Syz147069 	uint8_t	bMatrixCoefficients;
4033329Syz147069 } usbvc_color_matching_descr_t;
4043329Syz147069 
4053329Syz147069 /* Mjpeg and uncompressed format descriptor */
4063329Syz147069 typedef struct usbvc_format_descr {
4073329Syz147069 	uint8_t	bLength;
4083329Syz147069 	uint8_t	bDescriptorType;
4093329Syz147069 	uint8_t	bDescriptorSubType;
4103329Syz147069 	uint8_t	bFormatIndex;
4113329Syz147069 	uint8_t	bNumFrameDescriptors;
4123329Syz147069 	union {
4133329Syz147069 		struct {
4143329Syz147069 			uint8_t	bmFlags;
4153329Syz147069 			uint8_t	bDefaultFrameIndex;
4163329Syz147069 			uint8_t	bAspectRatioX;
4173329Syz147069 			uint8_t	bAspectRatioY;
4183329Syz147069 			uint8_t	bmInterlaceFlags;
4193329Syz147069 			uint8_t	bCopyProtect;
4203329Syz147069 		} mjpeg;
4213329Syz147069 
4223329Syz147069 		struct {
4233329Syz147069 			uint8_t	guidFormat[16];
4243329Syz147069 			uint8_t	bBitsPerPixel;
4253329Syz147069 			uint8_t	bDefaultFrameIndex;
4263329Syz147069 			uint8_t	bAspectRatioX;
4273329Syz147069 			uint8_t	bAspectRatioY;
4283329Syz147069 			uint8_t	bmInterlaceFlags;
4293329Syz147069 			uint8_t	bCopyProtect;
4303329Syz147069 		} uncompressed;
4313329Syz147069 	}fmt;
4323329Syz147069 } usbvc_format_descr_t;
4333329Syz147069 
4343329Syz147069 /*
4353329Syz147069  *  usb video class requests
4363329Syz147069  */
4373329Syz147069 typedef struct usbvc_vs_probe_commit {
4383329Syz147069 	uint8_t	bmHint[2];
4393329Syz147069 	uint8_t	bFormatIndex;
4403329Syz147069 	uint8_t	bFrameIndex;
4413329Syz147069 	uint8_t	dwFrameInterval[4];
4423329Syz147069 	uint8_t	wKeyFrameRate[2];
4433329Syz147069 	uint8_t	wPFrameRate[2];
4443329Syz147069 	uint8_t	wCompQuality[2];
4453329Syz147069 	uint8_t	wCompWindowSize[2];
4463329Syz147069 	uint8_t	wDelay[2];
4473329Syz147069 	uint8_t	dwMaxVideoFrameSize[4];
4483329Syz147069 	uint8_t	dwMaxPayloadTransferSize[4];
4493329Syz147069 	uint8_t	wClockFrequency[4];
4503329Syz147069 	uint8_t	bmFramingInfo;
4513329Syz147069 	uint8_t	bPreferedVersion;
4523329Syz147069 	uint8_t	bMinVersion;
4533329Syz147069 	uint8_t	bMaxVersion;
4543329Syz147069 } usbvc_vs_probe_commit_t;
4553329Syz147069 
4563329Syz147069 /* Table 2-1 of a sub video class spec: "uncompressed payload spec" */
4573329Syz147069 #define	USBVC_FORMAT_GUID_YUY2	{0x59, 0x55, 0x59, 0x32, 0x00, 0x00, 0x10, \
4583329Syz147069 				0x00, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, \
4593329Syz147069 				0x9b, 0x71}
4603329Syz147069 #define	USBVC_FORMAT_GUID_NV12	{0x4e, 0x56, 0x31, 0x32, 0x00, 0x00, 0x10, \
4613329Syz147069 				0x00, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, \
4623329Syz147069 				0x9b, 0x71}
4633329Syz147069 
4643329Syz147069 /* Stream frame's flag bits */
4653329Syz147069 #define	USBVC_STREAM_EOF	(1 << 1)
4663329Syz147069 #define	USBVC_STREAM_FID	(1 << 0)
4673329Syz147069 
4683329Syz147069 #ifdef __cplusplus
4693329Syz147069 }
4703329Syz147069 #endif
4713329Syz147069 
4723329Syz147069 #endif /* _SYS_USB_USBVC_H */
473