这段时间开始搞安卓camera底层驱动了,把以前的的Linux视频驱动回顾一下,本篇主要概述一下vfl2(video for linux 2).
一. V4L2框架: video for linux version 2
虚拟视频驱动vivi.c分析:
1.分配video_device
2.设置
3.注册:video_register_device
vivi_init
vivi_create_instance
v4l2_device_register // 不是主要, 只是用于初始化一些东西,比如自旋锁、引用计数
video_device_alloc
// 设置
1. vfd:
.fops = &vivi_fops,
.ioctl_ops = &vivi_ioctl_ops,
.release = video_device_release,
2.
vfd->v4l2_dev = &dev->v4l2_dev;
3. 设置"ctrl属性"(用于APP的ioctl):
v4l2_ctrl_handler_init(hdl, 11);
dev->volume = v4l2_ctrl_new_std(hdl, &vivi_ctrl_ops,
V4L2_CID_AUDIO_VOLUME, 0, 255, 1, 200);
dev->brightness = v4l2_ctrl_new_std(hdl, &vivi_ctrl_ops,
V4L2_CID_BRIGHTNESS, 0, 255, 1, 127);
dev->contrast = v4l2_ctrl_new_std(hdl, &vivi_ctrl_ops,
V4L2_CID_CONTRAST, 0, 255, 1, 16);
video_register_device(video_device, type:VFL_TYPE_GRABBER, nr)
__video_register_device
vdev->cdev = cdev_alloc();
vdev->cdev->ops = &v4l2_fops;
cdev_add
video_device[vdev->minor] = vdev;
if (vdev->ctrl_handler == NULL)
vdev->ctrl_handler = vdev-

本文深入探讨Linux视频驱动中的V4L2(Video for Linux version 2)框架,分析vivi.c虚拟视频驱动的分配、设置、注册过程,包括video_device的初始化和ioctl操作。讲解了v4l2_device、video_device的结构及其在open、read、write、ioctl操作中的角色,以及如何处理设备控制属性。此外,还提及了USB摄像头插入时的dmesg打印信息,为后续的驱动编写提供指导。
最低0.47元/天 解锁文章
V4L2_框架分析&spm=1001.2101.3001.5002&articleId=116696802&d=1&t=3&u=38960a7581be4b35a7eb2990a3672efd)

被折叠的 条评论
为什么被折叠?



