usb host 驱动 - UVC 掉包

1. issue description

yavta 是一款测试APP,测试UVC 摄像头的数据采集回传。

yavta -f YUYV -s 1280x720 -t 1/60 -c100 /dev/video0 -F/data/yua

帧率60FPS 不能正常运行,blocked, all frame fail。

yavta -f YUYV -s 1280x720 -t 1/30 -c100 /dev/video0 -F/data/yua

帧率30FPS 能正常运行,但中间也会有一些丢包。

1.1 图像的一些参数

帧率:FPS(每秒钟要多少帧画面); 以及Gop(表示多少秒一个I帧),影响流畅度。

-t 1/60		// 帧率60,一秒钟传输60 帧

分辨率:单位英寸中所包含的像素点数; VGA:Video Graphics Array(视频图像分辨率),影响清晰度。

-s 1280x720		// 分辨率720P

视频大小:分辨率 x 2(每个像素占多少字节) x 8 x 帧率 x 时间(s) /1024/1024
YUV422 格式帧大小:分辨率 x 2 Byte

对于YUV422 格式的 1080P 视频而言,一帧图像是 1920x1080x2x8/1024/1024 = 31.64Mbit,1秒钟30帧图像的话,则有949.2Mb/s。

1.2 yavta 控制流程

root@:/# strace yavta -f YUYV -s 1280x720 -t 1/60 -c100 /dev/video0
// 解析参数
execve("/usr/bin/yavta", ["yavta", "-f", "YUYV", "-s", "1280x720", "-t", "1/60", "-c100", "/dev/video0"], 0x7fc5203a80 /* 16 vars */) = 0
// 打开设备节点
openat(AT_FDCWD, "/dev/video0", O_RDWR) = 3
// 回显显示
write(1, "Device /dev/video0 opened.\n", 27Device /dev/video0 opened.) = 27
// 设备节点的ioctl
ioctl(3, VIDIOC_QUERYCAP, {driver="uvcvideo", card="KS2A418: KS2A418", bus_info="usb-xhci-hcd.0.auto-1.3", version=4.19.125, ...) = 0
// 回显显示
write(1, "Device `KS2A418: KS2A418' on `us"..., 117Device `KS2A418: KS2A418' on `usb-xhci-hcd.0.auto-1.3' (driver 'uvcvideo') supports video, capture, without mplanes.) = 117
// ioctl 设置参数
ioctl(3, VIDIOC_G_PARM, {type=V4L2_BUF_TYPE_VIDEO_CAPTURE, parm.capture={capability=V4L2_CAP_TIMEPERFRAME, capturemode=0, timeperframe=1/60, extendedmode=0, readbuffers=0}}) = 0
write(1, "Current frame rate: 1/60\n", 25Current frame rate: 1/60) = 25
write(1, "Setting frame rate to: 1/60\n", 28Setting frame rate to: 1/60) = 28
...

这些ioctl 对应驱动的接口为:

// \drivers\media\usb\uvc\uvc_v4l2.c
const struct v4l2_ioctl_ops uvc_ioctl_ops = {
	.vidioc_querycap = uvc_ioctl_querycap,
	...
	.vidioc_reqbufs = uvc_ioctl_reqbufs,
	.vidioc_querybuf = uvc_ioctl_querybuf,
	.vidioc_qbuf = uvc_ioctl_qbuf,
	.vidioc_expbuf = uvc_ioctl_expbuf,
	.vidioc_dqbuf = uvc_ioctl_dqbuf,
	.vidioc_create_bufs = uvc_ioctl_create_bufs,
	.vidioc_streamon = uvc_ioctl_streamon,
	.vidioc_streamoff = uvc_ioctl_streamoff,
	...
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
General UVC摄像头驱动是一种通用视频类设备驱动程序,用于支持各种品牌和型号的UVCUSB Video Class)摄像头在计算机上的正常工作。UVC是一个通用的摄像头驱动标准,它可以使摄像头设备在不同的操作系统和平台上使用相同的驱动程序,并且无需另行安装驱动程序。 General UVC摄像头驱动具有以下几个重要特点: 1. 通用性:该驱动适用于大多数UVC兼容的摄像头设备,因此用户无需为每个品牌和型号的摄像头安装不同的驱动程序。这使得使用和管理摄像头设备变得更加简便。 2. 兼容性:该驱动可以与多种操作系统和平台兼容,包括Windows、Mac和Linux等。这意味着用户可以在不同的平台上使用同一款摄像头,而无需为每个平台安装单独的驱动程序。 3. 稳定性:这种驱动经过精心设计和测试,具有较高的稳定性和可靠性。它能够确保摄像头设备在各种操作环境下都可以正常工作,并提供稳定的视频和音频传输。 4. 简易安装:安装General UVC摄像头驱动非常简单,通常只需将驱动程序插入计算机的USB接口并按照驱动安装向导的指示进行操作即可。这使得用户能够快速地将摄像头设备连接到计算机上并投入使用。 综上所述,General UVC摄像头驱动是一种通用、兼容、稳定且易于安装的摄像头设备驱动程序,使用户能够方便地使用各种品牌和型号的UVC摄像头设备。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值