简介

uvc_app实现了完整的uvc device的功能,包括配置、预览、切换、事件及指令响应等,通过采集摄像头的数据,通过MJPG编码或者H264编码通过ISOC模式传输。

使用方法

  • 使能uvcapp:make menuconfig,选择enable uvcapp或在buildroot对应产品defconfig中添加BR2_PACKAGEUVCAPP=y
  • 确认uvc_config.sh:确认usb设备配置,目前支持uvc和rndis复合。
  • 执行uvcconfig.sh,若需要使用复合设备如rndis,执行uvcconfig.sh rndis
  • 执行uvc_app默认将摄像头数据通过uvc传输

源码说明

  • 编译相关:/external/uvcapp/CMakeLists.txt、/buildroot/package/rockchip/uvcapp/Config.in uvc_app.mk

  • 入口:main.c

  • usb脚本配置相关:uvc_config.sh

  • process:camera初始化、PU处理、反初始化等处理

    • camera_control.cpp:camera线程处理实现
    • camerapucontrol.cpp:camera PU处理实现
  • 热拔插事件:uevent.c, uevent.h

  • uvc: uvc处理代码

    • 控制uvc,camera,编码线程的打开关闭:uvccontrol.c,uvccontrol.h
    • uvc编码传输处理:uvcencode.cpp,uvcencode.h
    • uvc主流程:uvc-gadget.c,uvc-gadget.h
    • uvc多节点操作,buffer管理:uvcvideo.cpp,uvcvideo.h
    • MJPG/H264编码:mpienc.c,mpienc.h
    • YUV格式转化:yuv.c,yuv.h
  • drm内存操作:drm.c,drm.h

代码demo目录:external/uvc_app
# uvc_app代码流程:
Main.c:main()   //初始化传入的长宽,运行模式flag等参数,申请buffer
    drm_open/drm_alloc/drm_handle_to_fd
->uvc_control_run(flags) //运行uvc控制接口,默认LOOP_ONCE,循环等待uvc驱动切换设置完成
    ->uvc_control.c:uevent_monitor_run //uvc事件监听线程启动,循环监听video4linux(v4l2)是否接入事件
        ->video_uevent //解析是否为add video接入事件,
            ->uvc_control_signal 识别到add video,通知uvc control线程,find_video设置为true;
    ->uvc_control_thread //创建并启动uvc control线程,循环判断uvc 是否连接
        ->check_uvc_video_id // 检测uvc 是否连接,通过循环读取cat /sys/class/video4linux/video%d/name,识别是否有名称带usb或gadget的uvc节点
        ->add_uvc_video //启动uvc连接
             ->uvc_video.cpp:uvc_video_id_add // 第一次进入初始化结构体uvc_video,启动uvc_gadget线程
                ->uvc_gadget_pthread_create //启动uvc_gadget线程
                    ->uvc-gadget.c:uvc_gadget_main //运行main,初始化uvc_device结构体,配置uvc各参数:名称 长宽 传输格式,速度,io模式配置等,打开uvc device,初始化event
                       ->uvc_open //ioctl控制驱动启动uvc设备 
                        ->uvc_events_init //根据传入fcc配置初始化uvc device相关event注册,接下来循环处理事件和数据
                        while循环
                        ->uvc_events_process //v4l2事件处理函数
                            ->uvc_events_process_setup //处理host请求的UVC_EVENT_SETUP事件
                            ->v4l2_stop_capturing
                            ->uvc_events_process_data -> uvc_events_process_control_data// 处理host请求的UVC_EVENT_DATA事件->像曝光、白平衡,亮度,对比度,等等
                            ->uvc_handle_streamon_event//处理host请求的UVC_EVENT_STREAMON事件,视频流传输启动
                                ->uvc_control.c:uvc_control_init //将获取的宽高信息等传入
                                    ->uvc_encode_init  
                                        ->mpi_enc.c:mpi_enc_cmd_config_mjpg //配置为MPP_VIDEO_CodingMJPEG编码类型,格式为MPP_FMT_YUV420SP( NV12、NV21)
                                        ->mpi_enc.c:mpi_enc_test_init
                                            ->test_ctx_init
                                            ->mpp_create //mpp接口
                                            ->mpp_init  /mpp接口
                                            ->test_mpp_setup// 编码配置与计算相关
                                            
                        ->uvc-gadget.c:uvc_video_process//在uvc 视频流开启的情况下,主要对v4l2 buffer队列的qbuffer和dqbuffer响应处理
->while(1) { ...
      uvc_read_camera_buffer  //循环将相机原始数据编码后信息写到uvc buffer队列
    }
    ->uvc_encode.cpp:uvc_encode_process  //按格式编码处理函数
        (->mpi_enc.c:mpi_enc_test_run // mjpeg格式下先调用该函数编码)
        ->uvc_video.cpp:uvc_buffer_write 
            ->_uvc_buffer_write//数据的格式转换部分
                ->uvc_buffer_push_back(&v->uvc->read, buffer);//将转换后的数据push到read队列,后续传输给host
代码简单流程分析到此,总结如下:uvc 模组端运行步骤:
    1.usb uvc与AP端需要连接并配置ready,代码可通过循环读取cat /sys/class/video4linux/video%d/name,识别是否有名称带usb或gadget的uvc节点;
    2.运行uvc_control_run,启动uvc_control线程来初始化uvc相关服务与事件监听处理接口;
    3.uvc_read_camera_buffer ,循环读取相机数据按设置格式编码转换后传入uvc buffer队列供host端处理。
三部同事整理的旧版video demo流程如下,与uvc_app主流程一致:
                                                                            

UVC app流程图相关推荐

  1. rp软件app流程图_如何开发app软件,流程怎样

    好的APP开发公司有哪些 手机app开发分为Android客户端开发.iOS客户端开发.Symbian客户端开发.Windows Phone和BlackBerry OS等定制开发.如果找公司做的话,和 ...

  2. rp软件app流程图_Axure RP 9 for Mac交互原型设计软件

    Axure RP 9是一款快速原型设计软件,主要用于WEB界面.APP界面.软件界面产品的交互原型设计.是互联网产品经理必备的软件之一,主流科技公司都在用.Axure RP 9 是专为UX专业人员和业 ...

  3. rp软件app流程图_app开发流程图_app的制作流程图

    开发一个APP的详细流程有什么? 在接到客户咨询后,我们策划这边需要给出几套方案,客服选择方案之后签订合同开始开发. 第一步设计界面流程图.这个一般要在3天之内完成.我们这边是使用RP软件设计的. 第 ...

  4. rp软件app流程图_AxureRP介绍–架构图和流程图

    1.绘制架构图 每一个网站的规划,少不了要绘制树状的网站架构,架构图能够以可视化的方式呈现网页层级.在Axure RP的站点地图面板定义好网站结构,只要点击一下就可以转成树状架构图.开启一个空白页面, ...

  5. java做app流程图,Android App 构建流程分析

    我们平时在android studio中点击run ,就能把代码编译成一个apk文件并安装到手机上.那么这个过程中都具体发生了什么 ?我们是怎么把代码和资源文件打包成一个apk文件,并安装到手机上的呢 ...

  6. app软件流程图 如何做app软件流程图

    在采集大量的数据之后,还要把数据汇成图表和客户汇报.产品逻辑架构或者任务流程. 而是认真的分析需求. 分析现有的解决方案,我们将要提供的解决方案会比现有的号多少?用户为什么要用我们的产品?因此,这时候 ...

  7. rp_rv1126开发板UVC XU扩展协议功能验证

    enum XuCmd {CMD_TOOLS_CTRL_1 = 0x01, //RK工具通信指令,如loader切换功能 CMD_GET_CAMERA_VERSION , //获取摄像头版本 CMD_S ...

  8. 物联网毕设(基于STM32的蓝牙检测心率+步数+手机APP)

    目录 流程图 开发所需平台 keil5+Android studio 需要的元器件 线路连接图 stm32F103C8T6 蓝牙模块 心率模块(MAX30102) 震动开关(SW-18015P) 手机 ...

  9. H5 移动APP - 面包店

    使用jquerymobile.html5.css3实现移动APP 流程图 打包 用hbuilder实现打包 效果截图展示 图2-1 APP图标 图2-2 主页 图2-3 面包列表&详细信息 图 ...

  10. 全网最全、最新App测试流程及要点梳理

    前言 1985年,加拿大的Therac-25放射治疗机由于软件Bug而发生故障,向患者提供了致命的辐射剂量,造成3人死亡,3人严重受伤. 1994年4月26日,中国航空公司空中客车A300因软件故障而 ...

最新文章

  1. springcloud分布式事务_Springcloud 分布式事务集成Naco Seata
  2. 姚期智施尧耘获FOCS 2021时间检验奖,MIT华人学霸毛啸摘最佳学生论文奖
  3. 简述网卡的作用和工作原理_凯狄简述抽芯铆钉的作用原理
  4. mysql PREPARE用法_PHP5 mysqli的
  5. WordCount处理过程
  6. ASP.NET MVC5 之 分部页
  7. 持续集成及部署利器:Go
  8. Oracle 11g SQL基础入门系列培训-小布作品
  9. 二层交换机与三层交换机区别
  10. 各双拼输入方案之间有明显的优劣之分吗?
  11. 零基础学习scala_从0-60开始学习Scala:基础知识
  12. maven jar坐标和doc引入中央创库没有的jar
  13. git push 时出现错误error: failed to push some refs to ‘https://gitee.com/**.git‘
  14. 宝塔面板 安装与使用教程
  15. Java集合类ArrayList线程不安全验证和解决
  16. python是哪个国家的品牌,爬取全国12个热门城市奶茶店铺情况,看看你的城市哪个品牌最多...
  17. AJAX处理返回的XML字符串
  18. 财务共享中心计件需求
  19. 基于微信小程序奶茶店在线点单管理系统#毕业设计
  20. 老程序员教你如何提高开发效率、成为大神1——人文思维进化与信众

热门文章

  1. 浅谈在线IDE的搭建,配置,体验
  2. 《我的青春谁做主》经典搞笑台词
  3. 你可能知道“道哥”,但你一定不知道“道哥”...
  4. wps ppt, 版式与母版
  5. 如何画出频谱图 matlab
  6. python安装包时报错Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools
  7. 每日方法分享:手机识别图片文字怎么弄?
  8. Django模型层(2)
  9. 佛系 vue -01
  10. excel等额本息计算房贷公式