当前位置:网站首页>USB host driver - UVC swap

USB host driver - UVC swap

2022-07-06 19:19:00 Be good to me

1. issue description

yavta It's a test APP, test UVC Data acquisition and return of camera .

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

Frame rate 60FPS Not working properly ,blocked, all frame fail.

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

Frame rate 30FPS Normal operation , But there will also be some packet losses .

1.1 Some parameters of the image

Frame rate :FPS( How many frames per second ); as well as Gop( Indicates how many seconds a I frame ), Affect fluency .

-t 1/60		//  Frame rate 60, One second transmission 60  frame 

The resolution of the : The number of pixels contained in an inch ; VGA:Video Graphics Array( Video image resolution ), Affect clarity .

-s 1280x720		//  The resolution of the 720P

Video size : The resolution of the x 2( How many bytes does each pixel occupy ) x 8 x Frame rate x Time (s) /1024/1024
YUV422 Format frame size : The resolution of the x 2 Byte

about YUV422 Format 1080P In terms of video , An image is 1920x1080x2x8/1024/1024 = 31.64Mbit,1 Second 30 Frame images , Then there are 949.2Mb/s.

1.2 yavta Control process

[email protected]-rb5:/# strace yavta -f YUYV -s 1280x720 -t 1/60 -c100 /dev/video0
//  Analytical parameters 
execve("/usr/bin/yavta", ["yavta", "-f", "YUYV", "-s", "1280x720", "-t", "1/60", "-c100", "/dev/video0"], 0x7fc5203a80 /* 16 vars */) = 0
//  Open the device node 
openat(AT_FDCWD, "/dev/video0", O_RDWR) = 3
//  Echo display 
write(1, "Device /dev/video0 opened.\n", 27Device /dev/video0 opened.) = 27
//  Device node ioctl
ioctl(3, VIDIOC_QUERYCAP, {
    driver="uvcvideo", card="KS2A418: KS2A418", bus_info="usb-xhci-hcd.0.auto-1.3", version=4.19.125, ...) = 0
//  Echo display 
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  Set parameters 
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
...

these ioctl The interface of the corresponding drive is :

// \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,
	...
};
原网站

版权声明
本文为[Be good to me]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/187/202207061124164527.html