summaryrefslogtreecommitdiff
path: root/src/class/video/video.h
diff options
context:
space:
mode:
authorkkitayam <[email protected]>2021-08-15 18:07:53 +0900
committerkkitayam <[email protected]>2021-09-29 21:23:16 +0900
commit2b4e02f192446f4fdf92c7e83ab260ae743503e9 (patch)
tree7bddcc6487da1706aa2f7b134c6fc94657387800 /src/class/video/video.h
parent4995d9cbd2022b703edf4ca4bdef8ee43724fd99 (diff)
Implement some mandatory requests on streaming interface
Diffstat (limited to 'src/class/video/video.h')
-rw-r--r--src/class/video/video.h92
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