diff options
| author | kkitayam <[email protected]> | 2021-08-15 18:07:53 +0900 |
|---|---|---|
| committer | kkitayam <[email protected]> | 2021-09-29 21:23:16 +0900 |
| commit | 2b4e02f192446f4fdf92c7e83ab260ae743503e9 (patch) | |
| tree | 7bddcc6487da1706aa2f7b134c6fc94657387800 /src/class/video/video.h | |
| parent | 4995d9cbd2022b703edf4ca4bdef8ee43724fd99 (diff) | |
Implement some mandatory requests on streaming interface
Diffstat (limited to 'src/class/video/video.h')
| -rw-r--r-- | src/class/video/video.h | 92 |
1 files changed, 62 insertions, 30 deletions
diff --git a/src/class/video/video.h b/src/class/video/video.h index 773c87845..17e1658b5 100644 --- a/src/class/video/video.h +++ b/src/class/video/video.h @@ -81,15 +81,13 @@ typedef enum { } video_subclass_type_t; /* A.3 */ -typedef enum -{ +typedef enum { VIDEO_INT_PROTOCOL_CODE_UNDEF = 0x00, VIDEO_INT_PROTOCOL_CODE_15, } video_interface_protocol_code_t; /* A.5 */ -typedef enum -{ +typedef enum { VIDEO_CS_VC_INTERFACE_VC_DESCRIPTOR_UNDEF = 0x00, VIDEO_CS_VC_INTERFACE_HEADER, VIDEO_CS_VC_INTERFACE_INPUT_TERMINAL, @@ -98,11 +96,11 @@ typedef enum VIDEO_CS_VC_INTERFACE_PROCESSING_UNIT, VIDEO_CS_VC_INTERFACE_EXTENSION_UNIT, VIDEO_CS_VC_INTERFACE_ENCODING_UNIT, + VIDEO_CS_VC_INTERFACE_MAX, } video_cs_vc_interface_subtype_t; /* A.6 */ -typedef enum -{ +typedef enum { VIDEO_CS_VS_INTERFACE_VS_DESCRIPTOR_UNDEF = 0x00, VIDEO_CS_VS_INTERFACE_INPUT_HEADER, VIDEO_CS_VS_INTERFACE_OUTPUT_HEADER, @@ -126,8 +124,7 @@ typedef enum } video_cs_vs_interface_subtype_t; /* A.8 */ -typedef enum -{ +typedef enum { VIDEO_REQUEST_UNDEF = 0x00, VIDEO_REQUEST_SET_CUR, VIDEO_REQUEST_SET_CUR_ALL = 0x11, @@ -147,16 +144,14 @@ typedef enum } video_control_request_t; /* A.9.1 */ -typedef enum -{ +typedef enum { VIDEO_VC_CTL_UNDEF = 0x00, VIDEO_VC_CTL_VIDEO_POWER_MODE, VIDEO_VC_CTL_REQUEST_ERROR_CODE, } video_interface_control_selector_t; /* A.9.8 */ -typedef enum -{ +typedef enum { VIDEO_VS_CTL_UNDEF = 0x00, VIDEO_VS_CTL_PROBE, VIDEO_VS_CTL_COMMIT, @@ -170,8 +165,7 @@ typedef enum } video_interface_streaming_selector_t; /* B. Terminal Types */ -typedef enum -{ +typedef enum { VIDEO_TT_VENDOR_SPECIFIC = 0x0100, VIDEO_TT_STREAMING, VIDEO_ITT_VENDOR_SPECIFIC = 0x0200, @@ -254,20 +248,53 @@ typedef struct TU_ATTR_PACKED { }; } tusb_desc_cs_video_stm_itf_hdr_t; +typedef struct TU_ATTR_PACKED { + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFormatIndex; + uint8_t bNumFrameDescriptors; + uint8_t guidFormat[16]; + uint8_t bBitsPerPixel; + uint8_t bDefaultFrameIndex; + uint8_t bAspectRatioX; + uint8_t bAspectRatioY; + uint8_t bmInterlaceFlags; + uint8_t bCopyProtect; +} tusb_desc_cs_video_fmt_uncompressed_t; + +typedef struct TU_ATTR_PACKED { + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFrameIndex; + uint8_t bNumFrameDescriptors; + uint8_t guidFormat[16]; + uint8_t bBitsPerPixel; + uint8_t bDefaultFrameIndex; + uint8_t bAspectRatioX; + uint8_t bAspectRatioY; + uint8_t bmInterlaceFlags; + uint8_t bCopyProtect; +} tusb_desc_cs_video_frm_uncompressed_t; + //--------------------------------------------------------------------+ // Requests //--------------------------------------------------------------------+ /* 4.3.1.1 */ typedef struct TU_ATTR_PACKED { - struct TU_ATTR_PACKEDt { - uint16_t dwFrameInterval: 1; - uint16_t wKeyFrameRatel : 1; - uint16_t wPFrameRate : 1; - uint16_t wCompQuality : 1; - uint16_t wCompWindowSize: 1; - uint16_t : 0; - } bmHint; + union { + uint8_t bmHint; + struct TU_ATTR_PACKED { + uint16_t dwFrameInterval: 1; + uint16_t wKeyFrameRatel : 1; + uint16_t wPFrameRate : 1; + uint16_t wCompQuality : 1; + uint16_t wCompWindowSize: 1; + uint16_t : 0; + } Hint; + }; uint8_t bFormatIndex; uint8_t bFrameIndex; uint32_t dwFrameInterval; @@ -279,22 +306,27 @@ typedef struct TU_ATTR_PACKED { uint32_t dwMaxVideoFrameSize; uint32_t dwMaxPayloadTransferSize; uint32_t dwClockFrequency; - struct TU_ATTR_PACKED { - uint8_t FrameID : 1; - uint8_t EndOfFrame: 1; - uint8_t EndOfSlice: 1; - uint8_t : 0; - } bmFramingInfo; + union { + uint8_t bmFramingInfo; + struct TU_ATTR_PACKED { + uint8_t FrameID : 1; + uint8_t EndOfFrame: 1; + uint8_t EndOfSlice: 1; + uint8_t : 0; + } FramingInfo; + }; uint8_t bPreferedVersion; uint8_t bMinVersion; uint8_t bMaxVersion; uint8_t bUsage; - uint8_t bBitDepthLum; + uint8_t bBitDepthLuma; uint8_t bmSettings; uint8_t bMaxNumberOfRefFramesPlus1; uint16_t bmRateControlModes; uint64_t bmLayoutPerStream; -} video_probe_and_commit_t; +} video_probe_and_commit_control_t; + +TU_VERIFY_STATIC( sizeof(video_probe_and_commit_control_t) == 48, "size is not correct"); #define TUD_VIDEO_DESC_IAD_LEN 8 #define TUD_VIDEO_DESC_STD_VC_LEN 9 |
