tech@,

I'd like future simplify uvideo and remove duplicated defintion of
formats. Everything goes into one union, like we already have for frames.

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;

Reply via email to