如何限制 UVC 小工具的 FPS?

Posted

技术标签:

【中文标题】如何限制 UVC 小工具的 FPS?【英文标题】:How to limit FPS for UVC gadget? 【发布时间】:2019-02-14 16:32:19 【问题描述】:

我正在开发一个基于g_webcam 类型的模板代码的应用程序,该模板代码可在git://git.ideasonboard.org/uvc-gadget.git 获得。我注意到 USB 设备配置结构中提供的 FPS 设置不受尊重。事实上,小工具会尝试尽可能快的帧速率。此外,由于机会主义 FPS 选择可能导致低级 USB 接口泛滥,主机往往会松动到 UVC 设备的管道。

那么,我们如何为 UVC 小工具设置 FPS 硬限制?

谢谢!

内核模块来源:

/* Uncompressed Payload - 3.1.2. Uncompressed Video Frame Descriptor */
static const struct UVC_FRAME_UNCOMPRESSED(1) 
uvc_frame_uncompressed_360p = 
    .bLength        = UVC_DT_FRAME_UNCOMPRESSED_SIZE(1),
    .bDescriptorType    = USB_DT_CS_INTERFACE,
    .bDescriptorSubType = UVC_VS_FRAME_UNCOMPRESSED,
    .bFrameIndex        = 1,
    .bmCapabilities     = 0,
    .wWidth         = cpu_to_le16(FRAME_WIDTH),
    .wHeight        = cpu_to_le16(FRAME_HEIGHT),
    .dwMinBitRate       = cpu_to_le32(FRAME_WIDTH * FRAME_HEIGHT * 8 * FRAME_RATE),
    .dwMaxBitRate       = cpu_to_le32(FRAME_WIDTH * FRAME_HEIGHT * 8 * FRAME_RATE),
    .dwMaxVideoFrameBufferSize  = cpu_to_le32(FRAME_WIDTH * FRAME_HEIGHT),
    .dwDefaultFrameInterval = cpu_to_le32(FRAME_RATE_USEC),
    .bFrameIntervalType = 1,
    .dwFrameInterval[0] = cpu_to_le32(FRAME_RATE_USEC),
;

UVC 小工具来源:

static const struct uvc_frame_info uvc_frames_grey[] = 
      FRAME_WIDTH, FRAME_HEIGHT, FRAME_RATE_USEC, ,
     0, 0, 0, ,
;

通用标题:

#define STREAMING_MAXPACKET 1024
#define FRAME_WIDTH 160
#define FRAME_HEIGHT 90
#define FRAME_RATE 330 /* 330 FPS */
#define FRAME_RATE_USEC 30303 /* 330 FPS */

【问题讨论】:

【参考方案1】:

我相信 Paul 添加了对 USB-gadget 中的 FPS 设置限制的支持,该功能最近已上传到上游。

请考虑查看最新版本的存储库。

如果您对此有任何进一步的问题,请告诉我们。

【讨论】:

以上是关于如何限制 UVC 小工具的 FPS?的主要内容,如果未能解决你的问题,请参考以下文章

怎样在linux 3.0内核加载uvc摄像头

微信小程序如何查看是不是超过2m

Confluence 6 外部小工具在其他应用中设置可信关系

Blender中调整工具架和小部件的大小[关闭]

android app 如何与uvc摄像头通讯

Android Studio中如何设置颜色拾色器工具