4343 ITF_NUM_TOTAL
4444};
4545
46- #define TUD_VIDEO_CAPTURE_DESC_LEN (\
46+ #define TUD_VIDEO_CAPTURE_DESC_UNCOMPR_LEN (\
4747 TUD_VIDEO_DESC_IAD_LEN\
4848 /* control */ \
4949 + TUD_VIDEO_DESC_STD_VC_LEN \
@@ -61,6 +61,24 @@ enum {
6161 + 7 /* Endpoint */ \
6262 )
6363
64+ #define TUD_VIDEO_CAPTURE_DESC_MJPEG_LEN (\
65+ TUD_VIDEO_DESC_IAD_LEN \
66+ /* control */ \
67+ + TUD_VIDEO_DESC_STD_VC_LEN \
68+ + (TUD_VIDEO_DESC_CS_VC_LEN + 1 /*bInCollection*/ )\
69+ + TUD_VIDEO_DESC_CAMERA_TERM_LEN \
70+ + TUD_VIDEO_DESC_OUTPUT_TERM_LEN \
71+ /* Interface 1, Alternate 0 */ \
72+ + TUD_VIDEO_DESC_STD_VS_LEN \
73+ + (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1 /*bNumFormats x bControlSize*/ )\
74+ + TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN \
75+ + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN \
76+ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN \
77+ /* Interface 1, Alternate 1 */ \
78+ + TUD_VIDEO_DESC_STD_VS_LEN \
79+ + 7 /* Endpoint */ \
80+ )
81+
6482/* Windows support YUY2 and NV12
6583 * https://docs.microsoft.com/en-us/windows-hardware/drivers/stream/usb-video-class-driver-overview */
6684
7391#define TUD_VIDEO_DESC_CS_VS_FMT_I420 (_fmtidx , _numfmtdesc , _frmidx , _asrx , _asry , _interlace , _cp ) \
7492 TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_I420, 12, _frmidx, _asrx, _asry, _interlace, _cp)
7593
76- #define TUD_VIDEO_CAPTURE_DESCRIPTOR (_stridx , _epin , _width , _height , _fps , _epsize ) \
94+ #define TUD_VIDEO_CAPTURE_DESCRIPTOR_UNCOMPR (_stridx , _epin , _width , _height , _fps , _epsize ) \
7795 TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02 , _stridx ), \
7896 /* Video control 0 */ \
7997 TUD_VIDEO_DESC_STD_VC (ITF_NUM_VIDEO_CONTROL , 0 , _stridx ), \
@@ -110,4 +128,41 @@ enum {
110128 /* EP */ \
111129 TUD_VIDEO_DESC_EP_ISO (_epin , _epsize , 1 )
112130
131+ #define TUD_VIDEO_CAPTURE_DESCRIPTOR_MJPEG (_stridx , _epin , _width , _height , _fps , _epsize ) \
132+ TUD_VIDEO_DESC_IAD (ITF_NUM_VIDEO_CONTROL , /* 2 Interfaces */ 0x02 , _stridx ), \
133+ /* Video control 0 */ \
134+ TUD_VIDEO_DESC_STD_VC (ITF_NUM_VIDEO_CONTROL , 0 , _stridx ), \
135+ TUD_VIDEO_DESC_CS_VC ( /* UVC 1.5*/ 0x0150 , \
136+ /* wTotalLength - bLength */ \
137+ TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN , \
138+ UVC_CLOCK_FREQUENCY , ITF_NUM_VIDEO_STREAMING ), \
139+ TUD_VIDEO_DESC_CAMERA_TERM (UVC_ENTITY_CAP_INPUT_TERMINAL , 0 , 0 ,\
140+ /*wObjectiveFocalLengthMin*/ 0 , /*wObjectiveFocalLengthMax*/ 0 ,\
141+ /*wObjectiveFocalLength*/ 0 , /*bmControls*/ 0 ), \
142+ TUD_VIDEO_DESC_OUTPUT_TERM (UVC_ENTITY_CAP_OUTPUT_TERMINAL , VIDEO_TT_STREAMING , 0 , 1 , 0 ), \
143+ /* Video stream alt. 0 */ \
144+ TUD_VIDEO_DESC_STD_VS (ITF_NUM_VIDEO_STREAMING , 0 , 0 , _stridx ), \
145+ /* Video stream header for without still image capture */ \
146+ TUD_VIDEO_DESC_CS_VS_INPUT ( /*bNumFormats*/ 1 , \
147+ /*wTotalLength - bLength */ \
148+ TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN \
149+ + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN \
150+ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN ,\
151+ _epin , /*bmInfo*/ 0 , /*bTerminalLink*/ UVC_ENTITY_CAP_OUTPUT_TERMINAL , \
152+ /*bStillCaptureMethod*/ 0 , /*bTriggerSupport*/ 0 , /*bTriggerUsage*/ 0 , \
153+ /*bmaControls(1)*/ 0 ), \
154+ /* Video stream format */ \
155+ TUD_VIDEO_DESC_CS_VS_FMT_MJPEG (/*bFormatIndex*/ 1 , /*bNumFrameDescriptors*/ 1 , \
156+ /*bmFlags*/ 0 , /*bDefaultFrameIndex*/ 1 , 0 , 0 , 0 , /*bCopyProtect*/ 0 ), \
157+ /* Video stream frame format */ \
158+ TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT (/*bFrameIndex */ 1 , 0 , _width , _height , \
159+ _width * _height * 16 , _width * _height * 16 * _fps , \
160+ _width * _height * 16 / 8 , \
161+ (10000000 /_fps ), (10000000 /_fps ), (10000000 /_fps )* _fps , (10000000 /_fps )), \
162+ TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING (VIDEO_COLOR_PRIMARIES_BT709 , VIDEO_COLOR_XFER_CH_BT709 , VIDEO_COLOR_COEF_SMPTE170M ), \
163+ /* VS alt 1 */ \
164+ TUD_VIDEO_DESC_STD_VS (ITF_NUM_VIDEO_STREAMING , 1 , 1 , _stridx ), \
165+ /* EP */ \
166+ TUD_VIDEO_DESC_EP_ISO (_epin , _epsize , 1 )
167+
113168#endif
0 commit comments