UVC摄像头视频流原理解析

本文详细介绍了UVC摄像头从插入到加载驱动的过程,包括关键函数uvc_register_chains、uvc_register_terms、uvc_register_video等的作用。同时,还深入探讨了视频数据解析的核心函数uvc_video_decode_isoc的工作原理。

1.UVC摄像i头从插入到加载驱动,看我前面的文章分析过程

2.UVC摄像头驱动加载时在kernel\drivers\media\usb\uvc\uvc_driver.c uvc_probe->函数中完成的
整个流程如下

  uvc_register_chains->
          uvc_register_terms->
                uvc_register_video->
                        vdev->v4l2_dev = &dev->vdev;
                        vdev->fops = &uvc_fops;
                        vdev->ioctl_ops = &uvc_ioctl_ops;
                        video_register_device->
                                  __video_register_device->   H:\RK3399\kernel\drivers\media\v4l2-core\v4l2-dev.c
                                              case VFL_TYPE_GRABBER:
                                                               name_base = "video";

//这个字符串就是我们在/dev/下面看到的vido0,video1等设备,按摄像头
3.应用层app打开camera,最后必然调用open("/dev/video0") 打开设备
uvc_v4l2_open-> kernel\drivers\media\usb\uvc\uvc_v4l2.c
4.摄像头打开的同时就开始操作摄像头,进行抓取视频流的初始化工作
从uvc_start_streaming-> drivers/media/usb/uvc/uvc_queue.c 开始
uvc_init_video_isoc->urb->complete = uvc_video_complete;
重要的就是注册了一个uvc_video_complete一个urb完成函数,这个就是我们视频数据解析的开始
完成的时候注册了一个视频解析函数uvc_video_decode_isoc

uvc_video_decode_isoc   分析
static void uvc_video_decode_isoc(struct urb *urb, struct uvc_streaming *stream,
    struct uvc_buffer *buf)
{
   
   
    u8 *mem;
    int ret, i;

    for (i = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术求索者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值