Index | Thread | Search

From:
Kirill A. Korinsky <kirill@korins.ky>
Subject:
Re: sys/uvideo: drop duplicated usb_video_format_XXX_desc
To:
OpenBSD tech <tech@openbsd.org>, Marcus Glocker <mglocker@openbsd.org>
Date:
Mon, 01 Sep 2025 10:42:46 +0200

Download raw body.

Thread
On Tue, 26 Aug 2025 11:41:52 +0200,
Kirill A. Korinsky <kirill@korins.ky> wrote:
> 
> tech@,
> 
> I'd like future simplify uvideo and remove duplicated defintion of
> formats. Everything goes into one union, like we already have for frames.
>

Just discovered that had sent it into ports@ not tech@, resend it right.

Ok?

Index: sys/dev/usb/uvideo.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/uvideo.c,v
diff -u -p -r1.263 uvideo.c
--- sys/dev/usb/uvideo.c	26 Aug 2025 09:34:52 -0000	1.263
+++ sys/dev/usb/uvideo.c	26 Aug 2025 09:37:56 -0000
@@ -1138,9 +1138,9 @@ void
 uvideo_vs_parse_desc_format_mjpeg(struct uvideo_softc *sc,
     const usb_descriptor_t *desc)
 {
-	struct usb_video_format_mjpeg_desc *d;
+	struct usb_video_format_desc *d;
 
-	d = (struct usb_video_format_mjpeg_desc *)(uint8_t *)desc;
+	d = (struct usb_video_format_desc *)(uint8_t *)desc;
 
 	if (d->bNumFrameDescriptors == 0) {
 		printf("%s: no MJPEG frame descriptors available!\n",
@@ -1153,15 +1153,14 @@ uvideo_vs_parse_desc_format_mjpeg(struct
 		return;
 	}
 
-	sc->sc_fmtgrp[sc->sc_fmtgrp_idx].format =
-	    (struct uvideo_format_desc *)d;
-	if (d->bDefaultFrameIndex > d->bNumFrameDescriptors ||
-	    d->bDefaultFrameIndex < 1) {
+	sc->sc_fmtgrp[sc->sc_fmtgrp_idx].format = d;
+	if (d->u.mjpeg.bDefaultFrameIndex > d->bNumFrameDescriptors ||
+	    d->u.mjpeg.bDefaultFrameIndex < 1) {
 		/* sanitize wrong bDefaultFrameIndex value */
 		sc->sc_fmtgrp[sc->sc_fmtgrp_idx].format_dfidx = 1;
 	} else {
 		sc->sc_fmtgrp[sc->sc_fmtgrp_idx].format_dfidx =
-		    d->bDefaultFrameIndex;
+		    d->u.mjpeg.bDefaultFrameIndex;
 	}
 	sc->sc_fmtgrp[sc->sc_fmtgrp_idx].pixelformat = V4L2_PIX_FMT_MJPEG;
 
@@ -1177,9 +1176,9 @@ void
 uvideo_vs_parse_desc_format_h264(struct uvideo_softc *sc,
     const usb_descriptor_t *desc)
 {
-	struct usb_video_format_h264_desc *d;
+	struct usb_video_format_desc *d;
 
-	d = (struct usb_video_format_h264_desc *)(uint8_t *)desc;
+	d = (struct usb_video_format_desc *)(uint8_t *)desc;
 
 	if (d->bNumFrameDescriptors == 0) {
 		printf("%s: no H264 frame descriptors available!\n",
@@ -1192,15 +1191,14 @@ uvideo_vs_parse_desc_format_h264(struct 
 		return;
 	}
 
-	sc->sc_fmtgrp[sc->sc_fmtgrp_idx].format =
-	    (struct uvideo_format_desc *)d;
-	if (d->bDefaultFrameIndex > d->bNumFrameDescriptors ||
-	    d->bDefaultFrameIndex < 1) {
+	sc->sc_fmtgrp[sc->sc_fmtgrp_idx].format = d;
+	if (d->u.h264.bDefaultFrameIndex > d->bNumFrameDescriptors ||
+	    d->u.h264.bDefaultFrameIndex < 1) {
 		/* sanitize wrong bDefaultFrameIndex value */
 		sc->sc_fmtgrp[sc->sc_fmtgrp_idx].format_dfidx = 1;
 	} else {
 		sc->sc_fmtgrp[sc->sc_fmtgrp_idx].format_dfidx =
-		    d->bDefaultFrameIndex;
+		    d->u.h264.bDefaultFrameIndex;
 	}
 	sc->sc_fmtgrp[sc->sc_fmtgrp_idx].pixelformat = V4L2_PIX_FMT_H264;
 
@@ -1216,10 +1214,10 @@ void
 uvideo_vs_parse_desc_format_frame_based(struct uvideo_softc *sc,
     const usb_descriptor_t *desc)
 {
-	struct usb_video_format_frame_based_desc *d;
+	struct usb_video_format_desc *d;
 	int i, j, nent;
 
-	d = (struct usb_video_format_frame_based_desc *)(uint8_t *)desc;
+	d = (struct usb_video_format_desc *)(uint8_t *)desc;
 
 	if (d->bNumFrameDescriptors == 0) {
 		printf("%s: no Frame Based frame descriptors available!\n",
@@ -1232,15 +1230,14 @@ uvideo_vs_parse_desc_format_frame_based(
 		return;
 	}
 
-	sc->sc_fmtgrp[sc->sc_fmtgrp_idx].format =
-	    (struct uvideo_format_desc *)d;
-	if (d->bDefaultFrameIndex > d->bNumFrameDescriptors ||
-	    d->bDefaultFrameIndex < 1) {
+	sc->sc_fmtgrp[sc->sc_fmtgrp_idx].format = d;
+	if (d->u.fb.bDefaultFrameIndex > d->bNumFrameDescriptors ||
+	    d->u.fb.bDefaultFrameIndex < 1) {
 		/* sanitize wrong bDefaultFrameIndex value */
 		sc->sc_fmtgrp[sc->sc_fmtgrp_idx].format_dfidx = 1;
 	} else {
 		sc->sc_fmtgrp[sc->sc_fmtgrp_idx].format_dfidx =
-		    d->bDefaultFrameIndex;
+		    d->u.fb.bDefaultFrameIndex;
 	}
 
 	i = sc->sc_fmtgrp_idx;
@@ -1272,10 +1269,10 @@ void
 uvideo_vs_parse_desc_format_uncompressed(struct uvideo_softc *sc,
     const usb_descriptor_t *desc)
 {
-	struct usb_video_format_uncompressed_desc *d;
+	struct usb_video_format_desc *d;
 	int i, j, nent;
 
-	d = (struct usb_video_format_uncompressed_desc *)(uint8_t *)desc;
+	d = (struct usb_video_format_desc *)(uint8_t *)desc;
 
 	if (d->bNumFrameDescriptors == 0) {
 		printf("%s: no UNCOMPRESSED frame descriptors available!\n",
@@ -1288,15 +1285,14 @@ uvideo_vs_parse_desc_format_uncompressed
 		return;
 	}
 
-	sc->sc_fmtgrp[sc->sc_fmtgrp_idx].format =
-	    (struct uvideo_format_desc *)d;
-	if (d->bDefaultFrameIndex > d->bNumFrameDescriptors ||
-	    d->bDefaultFrameIndex < 1) {
+	sc->sc_fmtgrp[sc->sc_fmtgrp_idx].format = d;
+	if (d->u.uc.bDefaultFrameIndex > d->bNumFrameDescriptors ||
+	    d->u.uc.bDefaultFrameIndex < 1) {
 		/* sanitize wrong bDefaultFrameIndex value */
 		sc->sc_fmtgrp[sc->sc_fmtgrp_idx].format_dfidx = 1;
 	} else {
 		sc->sc_fmtgrp[sc->sc_fmtgrp_idx].format_dfidx =
-		    d->bDefaultFrameIndex;
+		    d->u.uc.bDefaultFrameIndex;
 	}
 
 	i = sc->sc_fmtgrp_idx;
@@ -3264,21 +3260,21 @@ void
 uvideo_dump_desc_format_mjpeg(struct uvideo_softc *sc,
     const usb_descriptor_t *desc)
 {
-	struct usb_video_format_mjpeg_desc *d;
+	struct usb_video_format_desc *d;
 
-	d = (struct usb_video_format_mjpeg_desc *)(uint8_t *)desc;
+	d = (struct usb_video_format_desc *)(uint8_t *)desc;
 
 	printf("bLength=%d\n", d->bLength);
 	printf("bDescriptorType=0x%02x\n", d->bDescriptorType);
 	printf("bDescriptorSubtype=0x%02x\n", d->bDescriptorSubtype);
 	printf("bFormatIndex=0x%02x\n", d->bFormatIndex);
 	printf("bNumFrameDescriptors=0x%02x\n", d->bNumFrameDescriptors);
-	printf("bmFlags=0x%02x\n", d->bmFlags);
-	printf("bDefaultFrameIndex=0x%02x\n", d->bDefaultFrameIndex);
-	printf("bAspectRatioX=0x%02x\n", d->bAspectRatioX);
-	printf("bAspectRatioY=0x%02x\n", d->bAspectRatioY);
-	printf("bmInterlaceFlags=0x%02x\n", d->bmInterlaceFlags);
-	printf("bCopyProtect=0x%02x\n", d->bCopyProtect);
+	printf("bmFlags=0x%02x\n", d->u.mjpeg.bmFlags);
+	printf("bDefaultFrameIndex=0x%02x\n", d->u.mjpeg.bDefaultFrameIndex);
+	printf("bAspectRatioX=0x%02x\n", d->u.mjpeg.bAspectRatioX);
+	printf("bAspectRatioY=0x%02x\n", d->u.mjpeg.bAspectRatioY);
+	printf("bmInterlaceFlags=0x%02x\n", d->u.mjpeg.bmInterlaceFlags);
+	printf("bCopyProtect=0x%02x\n", d->u.mjpeg.bCopyProtect);
 }
 
 void
@@ -3339,45 +3335,45 @@ void
 uvideo_dump_desc_format_uncompressed(struct uvideo_softc *sc,
     const usb_descriptor_t *desc)
 {
-	struct usb_video_format_uncompressed_desc *d;
+	struct usb_video_format_desc *d;
 
-	d = (struct usb_video_format_uncompressed_desc *)(uint8_t *)desc;
+	d = (struct usb_video_format_desc *)(uint8_t *)desc;
 
 	printf("bLength=%d\n", d->bLength);
 	printf("bDescriptorType=0x%02x\n", d->bDescriptorType);
 	printf("bDescriptorSubtype=0x%02x\n", d->bDescriptorSubtype);
 	printf("bFormatIndex=0x%02x\n", d->bFormatIndex);
 	printf("bNumFrameDescriptors=0x%02x\n", d->bNumFrameDescriptors);
-	printf("guidFormat=%s\n", d->guidFormat);
-	printf("bBitsPerPixel=0x%02x\n", d->bBitsPerPixel);
-	printf("bDefaultFrameIndex=0x%02x\n", d->bDefaultFrameIndex);
-	printf("bAspectRatioX=0x%02x\n", d->bAspectRatioX);
-	printf("bAspectRatioY=0x%02x\n", d->bAspectRatioY);
-	printf("bmInterlaceFlags=0x%02x\n", d->bmInterlaceFlags);
-	printf("bCopyProtect=0x%02x\n", d->bCopyProtect);
+	printf("guidFormat=%s\n", d->u.uc.guidFormat);
+	printf("bBitsPerPixel=0x%02x\n", d->u.uc.bBitsPerPixel);
+	printf("bDefaultFrameIndex=0x%02x\n", d->u.uc.bDefaultFrameIndex);
+	printf("bAspectRatioX=0x%02x\n", d->u.uc.bAspectRatioX);
+	printf("bAspectRatioY=0x%02x\n", d->u.uc.bAspectRatioY);
+	printf("bmInterlaceFlags=0x%02x\n", d->u.uc.bmInterlaceFlags);
+	printf("bCopyProtect=0x%02x\n", d->u.uc.bCopyProtect);
 }
 
 void
 uvideo_dump_desc_format_frame_based(struct uvideo_softc *sc,
     const usb_descriptor_t *desc)
 {
-	struct usb_video_format_frame_based_desc *d;
+	struct usb_video_format_desc *d;
 
-	d = (struct usb_video_format_frame_based_desc *)(uint8_t *)desc;
+	d = (struct usb_video_format_desc *)(uint8_t *)desc;
 
 	printf("bLength=%d\n", d->bLength);
 	printf("bDescriptorType=0x%02x\n", d->bDescriptorType);
 	printf("bDescriptorSubtype=0x%02x\n", d->bDescriptorSubtype);
 	printf("bFormatIndex=0x%02x\n", d->bFormatIndex);
 	printf("bNumFrameDescriptors=0x%02x\n", d->bNumFrameDescriptors);
-	printf("guidFormat=%s\n", d->guidFormat);
-	printf("bBitsPerPixel=0x%02x\n", d->bBitsPerPixel);
-	printf("bDefaultFrameIndex=0x%02x\n", d->bDefaultFrameIndex);
-	printf("bAspectRatioX=0x%02x\n", d->bAspectRatioX);
-	printf("bAspectRatioY=0x%02x\n", d->bAspectRatioY);
-	printf("bmInterlaceFlags=0x%02x\n", d->bmInterlaceFlags);
-	printf("bCopyProtect=0x%02x\n", d->bCopyProtect);
-	printf("bVariableSize=0x%02x\n", d->bVariableSize);
+	printf("guidFormat=%s\n", d->u.fb.guidFormat);
+	printf("bBitsPerPixel=0x%02x\n", d->u.fb.bBitsPerPixel);
+	printf("bDefaultFrameIndex=0x%02x\n", d->u.fb.bDefaultFrameIndex);
+	printf("bAspectRatioX=0x%02x\n", d->u.fb.bAspectRatioX);
+	printf("bAspectRatioY=0x%02x\n", d->u.fb.bAspectRatioY);
+	printf("bmInterlaceFlags=0x%02x\n", d->u.fb.bmInterlaceFlags);
+	printf("bCopyProtect=0x%02x\n", d->u.fb.bCopyProtect);
+	printf("bVariableSize=0x%02x\n", d->u.fb.bVariableSize);
 }
 
 void
@@ -3438,62 +3434,62 @@ void
 uvideo_dump_desc_format_h264(struct uvideo_softc *sc,
     const usb_descriptor_t *desc)
 {
-	struct usb_video_format_h264_desc *d;
+	struct usb_video_format_desc *d;
 
-	d = (struct usb_video_format_h264_desc *)(uint8_t *)desc;
+	d = (struct usb_video_format_desc *)(uint8_t *)desc;
 
 	printf("bLength=%d\n", d->bLength);
 	printf("bDescriptorType=0x%02x\n", d->bDescriptorType);
 	printf("bDescriptorSubtype=0x%02x\n", d->bDescriptorSubtype);
 	printf("bFormatIndex=0x%02x\n", d->bFormatIndex);
 	printf("bNumFrameDescriptors=0x%02x\n", d->bNumFrameDescriptors);
-	printf("bDefaultFrameIndex=0x%02x\n", d->bDefaultFrameIndex);
-	printf("bMaxCodecConfigDelay=0x%02x\n", d->bMaxCodecConfigDelay);
-	printf("bmSupportedSliceModes=0x%02x\n", d->bmSupportedSliceModes);
+	printf("bDefaultFrameIndex=0x%02x\n", d->u.h264.bDefaultFrameIndex);
+	printf("bMaxCodecConfigDelay=0x%02x\n", d->u.h264.bMaxCodecConfigDelay);
+	printf("bmSupportedSliceModes=0x%02x\n", d->u.h264.bmSupportedSliceModes);
 	printf("bmSupportedSyncFrameTypes=0x%02x\n",
-	    d->bmSupportedSyncFrameTypes);
+	    d->u.h264.bmSupportedSyncFrameTypes);
 	printf("bmSupportedRateControlModes=0x%02x\n",
-	    d->bmSupportedRateControlModes);
+	    d->u.h264.bmSupportedRateControlModes);
 	printf("wMaxMBperSecOneResolutionNoScalability=%d\n",
-	    UGETW(d->wMaxMBperSecOneResolutionNoScalability));
+	    UGETW(d->u.h264.wMaxMBperSecOneResolutionNoScalability));
 	printf("wMaxMBperSecTwoResolutionsNoScalability=%d\n",
-	    UGETW(d->wMaxMBperSecTwoResolutionsNoScalability));
+	    UGETW(d->u.h264.wMaxMBperSecTwoResolutionsNoScalability));
 	printf("wMaxMBperSecThreeResolutionsNoScalability=%d\n",
-	    UGETW(d->wMaxMBperSecThreeResolutionsNoScalability));
+	    UGETW(d->u.h264.wMaxMBperSecThreeResolutionsNoScalability));
 	printf("wMaxMBperSecFourResolutionsNoScalability=%d\n",
-	    UGETW(d->wMaxMBperSecFourResolutionsNoScalability));
+	    UGETW(d->u.h264.wMaxMBperSecFourResolutionsNoScalability));
 	printf("wMaxMBperSecOneResolutionTemporalScalability=%d\n",
-	    UGETW(d->wMaxMBperSecOneResolutionTemporalScalability));
+	    UGETW(d->u.h264.wMaxMBperSecOneResolutionTemporalScalability));
 	printf("wMaxMBperSecTwoResolutionsTemporalScalablility=%d\n",
-	    UGETW(d->wMaxMBperSecTwoResolutionsTemporalScalablility));
+	    UGETW(d->u.h264.wMaxMBperSecTwoResolutionsTemporalScalablility));
 	printf("wMaxMBperSecThreeResolutionsTemporalScalability=%d\n",
-	    UGETW(d->wMaxMBperSecThreeResolutionsTemporalScalability));
+	    UGETW(d->u.h264.wMaxMBperSecThreeResolutionsTemporalScalability));
 	printf("wMaxMBperSecFourResolutionsTemporalScalability=%d\n",
-	    UGETW(d->wMaxMBperSecFourResolutionsTemporalScalability));
+	    UGETW(d->u.h264.wMaxMBperSecFourResolutionsTemporalScalability));
 	printf("wMaxMBperSecOneResolutionTemporalQualityScalability=%d\n",
-	    UGETW(d->wMaxMBperSecOneResolutionTemporalQualityScalability));
+	    UGETW(d->u.h264.wMaxMBperSecOneResolutionTemporalQualityScalability));
 	printf("wMaxMBperSecTwoResolutionsTemporalQualityScalability=%d\n",
-	    UGETW(d->wMaxMBperSecTwoResolutionsTemporalQualityScalability));
+	    UGETW(d->u.h264.wMaxMBperSecTwoResolutionsTemporalQualityScalability));
 	printf("wMaxMBperSecThreeResolutionsTemporalQualityScalablity=%d\n",
-	    UGETW(d->wMaxMBperSecThreeResolutionsTemporalQualityScalablity));
+	    UGETW(d->u.h264.wMaxMBperSecThreeResolutionsTemporalQualityScalablity));
 	printf("wMaxMBperSecFourResolutionsTemporalQualityScalability=%d\n",
-	    UGETW(d->wMaxMBperSecFourResolutionsTemporalQualityScalability));
+	    UGETW(d->u.h264.wMaxMBperSecFourResolutionsTemporalQualityScalability));
 	printf("wMaxMBperSecOneResolutionTemporalSpatialScalability=%d\n",
-	    UGETW(d->wMaxMBperSecOneResolutionTemporalSpatialScalability));
+	    UGETW(d->u.h264.wMaxMBperSecOneResolutionTemporalSpatialScalability));
 	printf("wMaxMBperSecTwoResolutionsTemporalSpatialScalability=%d\n",
-	    UGETW(d->wMaxMBperSecTwoResolutionsTemporalSpatialScalability));
+	    UGETW(d->u.h264.wMaxMBperSecTwoResolutionsTemporalSpatialScalability));
 	printf("wMaxMBperSecThreeResolutionsTemporalSpatialScalablity=%d\n",
-	    UGETW(d->wMaxMBperSecThreeResolutionsTemporalSpatialScalablity));
+	    UGETW(d->u.h264.wMaxMBperSecThreeResolutionsTemporalSpatialScalablity));
 	printf("wMaxMBperSecFourResolutionsTemporalSpatialScalability=%d\n",
-	    UGETW(d->wMaxMBperSecFourResolutionsTemporalSpatialScalability));
+	    UGETW(d->u.h264.wMaxMBperSecFourResolutionsTemporalSpatialScalability));
 	printf("wMaxMBperSecOneResolutionFullScalability=%d\n",
-	    UGETW(d->wMaxMBperSecOneResolutionFullScalability));
+	    UGETW(d->u.h264.wMaxMBperSecOneResolutionFullScalability));
 	printf("wMaxMBperSecTwoResolutionsFullScalability=%d\n",
-	    UGETW(d->wMaxMBperSecTwoResolutionsFullScalability));
+	    UGETW(d->u.h264.wMaxMBperSecTwoResolutionsFullScalability));
 	printf("wMaxMBperSecThreeResolutionsFullScalability=%d\n",
-	    UGETW(d->wMaxMBperSecThreeResolutionsFullScalability));
+	    UGETW(d->u.h264.wMaxMBperSecThreeResolutionsFullScalability));
 	printf("wMaxMBperSecFourResolutionsFullScalability=%d\n",
-	    UGETW(d->wMaxMBperSecFourResolutionsFullScalability));
+	    UGETW(d->u.h264.wMaxMBperSecFourResolutionsFullScalability));
 }
 
 void
Index: sys/dev/usb/uvideo.h
===================================================================
RCS file: /cvs/src/sys/dev/usb/uvideo.h,v
diff -u -p -r1.69 uvideo.h
--- sys/dev/usb/uvideo.h	26 Aug 2025 09:34:52 -0000	1.69
+++ sys/dev/usb/uvideo.h	26 Aug 2025 09:37:56 -0000
@@ -431,21 +431,6 @@ struct usb_video_colorformat_desc {
 	uByte	bMatrixCoefficients;
 } __packed;
 
-/* Table 3-1: Motion-JPEG Video Format Descriptor */
-struct usb_video_format_mjpeg_desc {
-	uByte	bLength;
-	uByte	bDescriptorType;
-	uByte	bDescriptorSubtype;
-	uByte	bFormatIndex;
-	uByte	bNumFrameDescriptors;
-	uByte	bmFlags;
-	uByte	bDefaultFrameIndex;
-	uByte	bAspectRatioX;
-	uByte	bAspectRatioY;
-	uByte	bmInterlaceFlags;
-	uByte	bCopyProtect;
-} __packed;
-
 struct usb_video_frame_desc {
 	uByte	bLength;
 	uByte	bDescriptorType;
@@ -533,89 +518,14 @@ struct usb_video_frame_desc {
 	/* uDWord ivals[]; frame intervals, length varies */
 } __packed;
 
-/*
- * USB Video Payload Uncompressed
- */
-/* Table 3-1: Uncompressed Video Format Descriptor */
-struct usb_video_format_uncompressed_desc {
-	uByte	bLength;
-	uByte	bDescriptorType;
-	uByte	bDescriptorSubtype;
-	uByte	bFormatIndex;
-	uByte	bNumFrameDescriptors;
-	uByte	guidFormat[16];
-	uByte	bBitsPerPixel;
-	uByte	bDefaultFrameIndex;
-	uByte	bAspectRatioX;
-	uByte	bAspectRatioY;
-	uByte	bmInterlaceFlags;
-	uByte	bCopyProtect;
-} __packed;
-
-/* Table 3-1: H.264 Payload Video Format Descriptor */
-struct usb_video_format_h264_desc {
-	uByte	bLength;
-	uByte	bDescriptorType;
-	uByte	bDescriptorSubtype;
-	uByte	bFormatIndex;
-	uByte	bNumFrameDescriptors;
-	uByte	bDefaultFrameIndex;
-	uByte	bMaxCodecConfigDelay;
-	uByte	bmSupportedSliceModes;
-	uByte	bmSupportedSyncFrameTypes;
-	uByte	bResolutionScaling;
-	uByte	_reserved1;
-	uByte	bmSupportedRateControlModes;
-	uWord	wMaxMBperSecOneResolutionNoScalability;
-	uWord	wMaxMBperSecTwoResolutionsNoScalability;
-	uWord	wMaxMBperSecThreeResolutionsNoScalability;
-	uWord	wMaxMBperSecFourResolutionsNoScalability;
-	uWord	wMaxMBperSecOneResolutionTemporalScalability;
-	uWord	wMaxMBperSecTwoResolutionsTemporalScalablility;
-	uWord	wMaxMBperSecThreeResolutionsTemporalScalability;
-	uWord	wMaxMBperSecFourResolutionsTemporalScalability;
-	uWord	wMaxMBperSecOneResolutionTemporalQualityScalability;
-	uWord	wMaxMBperSecTwoResolutionsTemporalQualityScalability;
-	uWord	wMaxMBperSecThreeResolutionsTemporalQualityScalablity;
-	uWord	wMaxMBperSecFourResolutionsTemporalQualityScalability;
-	uWord	wMaxMBperSecOneResolutionTemporalSpatialScalability;
-	uWord	wMaxMBperSecTwoResolutionsTemporalSpatialScalability;
-	uWord	wMaxMBperSecThreeResolutionsTemporalSpatialScalablity;
-	uWord	wMaxMBperSecFourResolutionsTemporalSpatialScalability;
-	uWord	wMaxMBperSecOneResolutionFullScalability;
-	uWord	wMaxMBperSecTwoResolutionsFullScalability;
-	uWord	wMaxMBperSecThreeResolutionsFullScalability;
-	uWord	wMaxMBperSecFourResolutionsFullScalability;
-} __packed;
-
-/* Table 3-1: Frame Based Payload Video Format Descriptor */
-struct usb_video_format_frame_based_desc {
-	uByte	bLength;
-	uByte	bDescriptorType;
-	uByte	bDescriptorSubtype;
-	uByte	bFormatIndex;
-	uByte	bNumFrameDescriptors;
-	uByte	guidFormat[16];
-	uByte	bBitsPerPixel;
-	uByte	bDefaultFrameIndex;
-	uByte	bAspectRatioX;
-	uByte	bAspectRatioY;
-	uByte	bmInterlaceFlags;
-	uByte	bCopyProtect;
-	uByte	bVariableSize;
-} __packed;
-
-/*
- * Driver specific private definitions.
- */
-struct uvideo_format_desc {
+struct usb_video_format_desc {
 	uByte	bLength;
 	uByte	bDescriptorType;
 	uByte	bDescriptorSubtype;
 	uByte	bFormatIndex;
 	uByte	bNumFrameDescriptors;
 	union {
-		/* mjpeg */
+		/* Table 3-1: Motion-JPEG Video Format Descriptor */
 		struct {
 			uByte	bmFlags;
 			uByte	bDefaultFrameIndex;
@@ -625,7 +535,7 @@ struct uvideo_format_desc {
 			uByte	bCopyProtect;
 		} mjpeg;
 
-		/* uncompressed */
+		/* Table 3-1: Uncompressed Video Format Descriptor */
 		struct {
 			uByte	guidFormat[16];
 			uByte	bBitsPerPixel;
@@ -636,7 +546,7 @@ struct uvideo_format_desc {
 			uByte	bCopyProtect;
 		} uc;
 
-		/* frame based */
+		/* Table 3-1: Frame Based Payload Video Format Descriptor */
 		struct {
 			uByte	guidFormat[16];
 			uByte	bBitsPerPixel;
@@ -648,7 +558,7 @@ struct uvideo_format_desc {
 			uByte	bVariableSize;
 		} fb;
 
-		/* h264 */
+		/* Table 3-1: H.264 Payload Video Format Descriptor */
 		struct {
 			uByte	bDefaultFrameIndex;
 			uByte	bMaxCodecConfigDelay;
@@ -681,6 +591,9 @@ struct uvideo_format_desc {
 	} u;
 } __packed;
 
+/*
+ * Driver specific private definitions.
+ */
 #define UVIDEO_NFRAMES_MAX	40
 struct uvideo_isoc_xfer {
 	struct uvideo_softc	*sc;
@@ -742,7 +655,7 @@ struct uvideo_format_group {
 	uint32_t				 xfer_func;
 	uint32_t				 ycbcr_enc;
 	uint8_t					 format_dfidx;
-	struct uvideo_format_desc		*format;
+	struct usb_video_format_desc		*format;
 	/* frame descriptors for mjpeg and uncompressed are identical */
 #define UVIDEO_MAX_FRAME			 32
 	struct usb_video_frame_desc		*frame_cur;