博客
关于我
Linux摄像头UVC驱动第五篇--启动传输之设置摄像头参数
阅读量:341 次
发布时间:2019-03-04

本文共 1314 字,大约阅读时间需要 4 分钟。

本章主要实现myuvc_vidioc_streamon()函数,即启动视频传输的功能,其中涉及到对USB摄像头的参数设置。具体来说,向USB摄像头设置参数分为以下三部分:测试参数、获取参数和设置参数。

参数设置流程

1. 测试参数

调用myuvc_try_streaming_params()函数,测试需要设置的参数。该函数通过向USB摄像头发送特定的控制消息(SET_CUR),测试设备是否能够接收并处理这些参数。由于并非真正设置参数,而是用于枚举和验证,函数中使用VS_PROBE_CONTROL标志。

2. 获取参数

调用myuvc_get_streaming_params()函数,获取USB摄像头当前使用的参数。该函数通过发送GET_CUR控制消息,读取设备发送的当前参数信息,并存储到data缓存空间中,最后将这些信息填充到myuvc_streaming_control结构体中。

3. 设置参数

调用myuvc_set_streaming_params()函数,将获取到的参数重新设置到USB摄像头。与获取参数函数类似,该函数发送SET_CUR控制消息,但使用VS_COMMIT_CONTROL标志,表示对参数的正式设置。

VideoStreaming Interface设置

每个USB接口中有多个设置(setting),需要根据端点能传输的最大带宽容量选择合适的设置。具体步骤如下:

  • 确定带宽:从myuvc_params结构体中获取dwMaxPayloadTransferSize,通常为1024字节。
  • 选择合适的设置:通过lsusb -v -d deviceid命令,查看能满足dwMaxPayloadTransferSize的最大包大小。例如,某USB摄像头的VideoStreaming Interface的第八个设置满足要求。
  • USB传输实现

    myuvc_try_streaming_params()、myuvc_get_streaming_params()和myuvc_set_streaming_params()函数均通过usb_control_msg()函数发送控制消息,实现参数的测试、获取和设置。具体操作如下:

    • 获取当前参数:使用GET_CUR标志,读取设备发送的当前参数信息。
    • 设置测试参数:使用SET_CUR标志,向设备发送测试参数,设备根据返回信息确认是否支持这些参数。
    • 正式设置参数:使用VS_COMMIT_CONTROL标志,向设备发送正式的参数设置。

    其他实现细节

  • 缓冲区管理:实现了myuvc_free_buffers()、myuvc_alloc_init_urbs()和myuvc_uninit_urbs()函数,用于管理USB缓冲区的分配和释放。
  • 数据处理:通过myuvc_video_complete()函数处理接收到的数据,完成视频流的接收和存储。
  • 设备注册与释挂:实现了myuvc_probe()和myuvc_disconnect()函数,负责USB设备的注册和释挂。
  • 通过以上实现,完成了从参数设置到视频流传输的完整流程,确保了USB摄像头的稳定工作和高效数据传输。

    转载地址:http://rqme.baihongyu.com/

    你可能感兴趣的文章
    Java集合总结系列2:Collection接口
    查看>>
    Linux学习总结(九)—— CentOS常用软件安装:中文输入法、Chrome
    查看>>
    比技术还重要的事
    查看>>
    linux线程调度策略
    查看>>
    软中断和实时性
    查看>>
    Linux探测工具BCC(可观测性)
    查看>>
    流量控制--2.传统的流量控制元素
    查看>>
    SNMP介绍及使用,超有用,建议收藏!
    查看>>
    51nod 1596 搬货物(二进制处理)
    查看>>
    来自星星的祝福(容斥+排列组合)
    查看>>
    Hmz 的女装(递推)
    查看>>
    HDU5589:Tree(莫队+01字典树)
    查看>>
    不停机替换线上代码? 你没听错,Arthas它能做到
    查看>>
    分库分表的 9种分布式主键ID 生成方案,挺全乎的
    查看>>
    MySQL不会丢失数据的秘密,就藏在它的 7种日志里
    查看>>
    Python开发之序列化与反序列化:pickle、json模块使用详解
    查看>>
    回顾-生成 vs 判别模型-和图
    查看>>
    采坑 - 字符串的 "" 与 pd.isnull()
    查看>>
    无序列表 - 链表
    查看>>
    SQL 查询强化 - 数据准备
    查看>>