博客
关于我
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/

    你可能感兴趣的文章
    .NET微信网页开发之使用微信JS-SDK调用微信扫一扫功能
    查看>>
    解决Spirng注入时名称下的红色波浪线
    查看>>
    EntityFramework 6.x和EntityFramework Core关系映射中导航属性必须是public?
    查看>>
    使用mybatis-generator生成底层
    查看>>
    Android APK 重签名
    查看>>
    Mybatis【3】-- Mybatis使用工具类读取配置文件以及从属性读取DB信息
    查看>>
    Mybatis【5】-- Mybatis多种增删改查那些你会了么?
    查看>>
    Mybatis【7】-- Mybatis如何知道增删改是否成功执行?
    查看>>
    计算输入的一句英文语句中单词数
    查看>>
    zabbix系列之十——添加短信告警
    查看>>
    docker复制文件到宿主机
    查看>>
    lvs+keepalive构建高可用集群
    查看>>
    Mysql高可用架构(主从同步)
    查看>>
    mysql主从延迟高的原因
    查看>>
    ATS缓存数据结构
    查看>>
    glob模块
    查看>>
    6 个 Linux 运维典型问题
    查看>>
    Failed to get D-Bus connection: Operation not permitted解决
    查看>>
    oracle无法启动asm实例记录
    查看>>
    取消vim打开文件全是黄色方法
    查看>>