Windows 10 相机无法调整至正确分辨率

Windows 10 相机无法调整至正确分辨率

不久前,我制作了一款基于 Omnivision 的相机。OV7251图像传感器,以及赛普拉斯 CX3USB3.0 摄像头控制器。我自己编写了固件,因此我知道该摄像头仅支持 640x480 x 16 位/像素的分辨率。

背景: 直到最近,Windows 才乐意以正确的分辨率支持此相机。相机应用程序会错误地显示颜色,因为它们是每像素 16 位灰度,但至少它可以看到正确的分辨率。要正确显示图像,需要使用 numpy 的 OpenCV Python 脚本将像素整理为正确的显示格式。

问题: 突然之间,无需对相机固件进行任何更改,Windows 现在报告分辨率为 320x240。这在相机应用程序中和我的 Python 脚本中都是相同的。OpenCV 也报告了错误的分辨率。相机应用程序在可用分辨率列表中没有提供正确的分辨率。

问题:

  • 最近的 Windows 更新是否导致了这个问题?
  • 注册表中是否存在一些深层设置,我可以更改这些设置以强制 Windows 接受正确的分辨率。

Windows 10 家庭版:19045.3693
版本:22H2
Windows 功能体验包 1000.19053.1000.0

一个想法: 由于我的相机仅支持 640x480,所以大概 Windows 实际上正在某处重新缩放图像!

添加: 查看 USB 信息,似乎相机实际上报告的分辨率是 320x240!?!?!

        -------- VS Uncompressed Frame Type Descriptor --------
---> This is the Default (optimum) Frame index
bLength                  : 0x1E (30 bytes)
bDescriptorType          : 0x24 (Video Streaming Interface)
bDescriptorSubtype       : 0x05 (Uncompressed Frame Type)
bFrameIndex              : 0x01
bmCapabilities           : 0x00
wWidth                   : 0x0140 (320)
wHeight                  : 0x00F0 (240)
dwMinBitRate             : 0x0EA60000 (245760000 bps -> 30.720 MB/s)
dwMaxBitRate             : 0x0EA60000 (245760000 bps -> 30.720 MB/s)
dwMaxVideoFrameBufferSize: 0x00025800 (153600 bytes)
dwDefaultFrameInterval   : 0x0000C34F (4.9999 ms -> 200.000 fps)
bFrameIntervalType       : 0x01 (1 discrete frame interval supported)
adwFrameInterval[1]      : 0x0000C34F (4.9999 ms -> 200.000 fps)

在另一台 Windows 10 PC(版本 1909,内部版本 18363.1556)上,相机工作正常。有趣的是,USB 描述符是正确的:

        -------- VS Uncompressed Frame Type Descriptor --------
---> This is the Default (optimum) Frame index
bLength                  : 0x1E (30 bytes)
bDescriptorType          : 0x24 (Video Streaming Interface)
bDescriptorSubtype       : 0x05 (Uncompressed Frame Type)
bFrameIndex              : 0x01
bmCapabilities           : 0x00
wWidth                   : 0x0280 (640)
wHeight                  : 0x01E0 (480)
dwMinBitRate             : 0x1D4C0000 (491520000 bps -> 61.440 MB/s)
dwMaxBitRate             : 0x1D4C0000 (491520000 bps -> 61.440 MB/s)
dwMaxVideoFrameBufferSize: 0x00096000 (614400 bytes)
dwDefaultFrameInterval   : 0x0001869F (9.9999 ms -> 100.000 fps)
bFrameIntervalType       : 0x01 (1 discrete frame interval supported)
adwFrameInterval[1]      : 0x0001869F (9.9999 ms -> 100.000 fps)

我还注意到不同机器的相机名称不同:

正常工作的机器报出正确的名称:Cypress CX3-UVC - Camera
非正常工作的机器报出错误的名称:USB Composite Device - Camera

我想知道问题的根源是否是某种 USB 描述符缓存?

答案1

解决方法是使用设备管理器卸载 USB 设备,然后断开并重新连接相机。

据推测这会导致 Windows 清除某种缓存,并用正确的 USB 描述符重新填充它。

相关内容