当前位置: 首页 > news >正文

V4L2杂谈

V4L2的开发手册

  • 在做v4l2的开发的时候, 可以使用v4l2-ctl命令协助调试和软件开发。
  • 关于linux多媒体开发可以参考链接:https://www.linuxtv.org/wiki/index.php/Main_Page
  • 关于v4l2的api接口开发可以参考:https://linuxtv.org/docs.php
  • 在linux下开发,可以借助ffmplay命令或者YUViewer软件进行读取显示。

基于V4l2进行图像读取

进行图像格式配置
请求缓冲
配置mmap内存映射
填写缓冲下标并加入缓冲队列
启动视频流
弹出队列里就绪的缓冲
  • v4l2 中会将申请的缓冲加入到缓冲列表里面,通过下标来指示当前的缓冲标识, 将缓冲加入队列的时候, 必须要注明下标的值。 将缓冲弹出队列的时候, 下标会通过驱动赋值传递给用户。
  • v4l2 有mmap,pointer, dma buf等方法进行读取图像加速。 比如内存映射就可以有效地避免代码在用户态和内核态来回切换, 直接将设备文件的句柄偏移映射到用户态的地址。
  • v4l2 支持mplane 多图层开发, 常见的YUV格式, 通过uv的不同组合方式,可以分为nv12,nv21等多种图像格式, Y表示亮度层, U表示色度层, V表示浓度层。
  • 在V4l2下进行多图层开发的时候, 务必要重点学习struct v4l2_plane, 其中, v4l2_plane.m.planes指针的内存, 需要由用户进行开辟和释放。
  • 在调试v4l2的时候, 可以通过打印errno变量来获取当前V4L2的api接口执行失败的返回值。
  • 在调用芯片厂商的算子IP时, 需要理解Stride的概念, 即跨距, 该值大于等于图像的原有宽度, 用户加速内存读取和算子计算。
  • 用算子IP进行加速的时候, 会涉及虚拟地址和真实地址的概念。 操作系统里面代码能访问的,基本就是虚拟地址, 可以有效防止内存崩溃。 但是, 当我们需要传递数据给硬件IP, 如IVE,NPU等核心的时候, 就必须得传递真实地址给硬件。

v4l2常用的指令

v4l2-ctl -d /dev/video11 --stream-mmap //fps
v4l2-ctl -d /dev/video11 --set-fmt-video=width=352,height=288,pixelformat=NV12 --stream-mmap=3 --stream-skip=3 --stream-to=./output.yuv  --stream-count=10 --stream-poll
v4l2-ctl --list-formats-ext --device /dev/video11

v4l2-ctl --list-devices

build.sh clean media && build.sh media.

v4l2-ctl -d /dev/video12 --info

v4l2-ctl -d /dev/video12 --get-fmt-video --verbose
v4l2-ctl -d /dev/video11 --set-fmt-video=width=352,height=289,pixelformat=NV12 --verbose

//配置摄像头参数,比如帧率和曝光时间,但是瑞芯微的仅能在ISP中通过3A server配置。
v4l2-ctl -d /dev/video11 --list-ctrls

pixelformat = v4l2_fourcc
ffplay -f rawvideo -pixel_format nv12 -video_size 320x240 ./output.yuv #  gray 播放灰度视频
YUView
media-ctl -p -d /dev/media1 //列出所有设备entity name和node name(char device)。
entity name: mainpath
node name:  /dev/video11
 *        |--mainpath----[wrap]--------->enc(or ddr)
 *        |   |->mainpath_4x4sampling--->ddr
 *output->|->bypasspath----------------->ddr
 *        |   |->bypasspath_4x4sampling->ddr
 *        |->selfpath------------------->ddr
 *        |->lumapath------------------->ddr

------------------------
insmod ./oem/usr/ko/rve.ko
rk_rve_sample_test 1
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/124947.html

相关文章:

  • 【U-Boot】解决U-Boot的“Unknown command ‘help‘ - try ‘help‘”问题
  • 等保十问/等保相关基本问题解答
  • git日志规范
  • FastAPI + Vue3 对 SSE 通知机制的实现与进阶思考
  • Python----概率论与统计(贝叶斯,朴素贝叶斯 )
  • 青少年编程与数学 02-016 Python数据结构与算法 05课题、哈希表
  • 如何在Linux系统Docker部署Dashy并远程访问内网服务界面
  • ROS云课三分钟-差动移动机器人巡逻报告如何撰写-中等报告
  • 使用pip3安装PyTorch与PyG,实现NVIDIA CUDA GPU加速
  • LeetCode Hot100 刷题笔记(1)—— 哈希、双指针、滑动窗口
  • <component>用于挂载切换几个不同的组件
  • mobaxterm连接ssh提示sshpass: command not found
  • vmware、centos: 快照、redis集群克隆、虚拟机克隆后无法上网
  • 最简rnn_lstm模型python源码
  • 京存双活磁盘阵列助力国家交通指挥中心
  • Excel流式多线程带进度条功能的导入框架
  • 当开源邂逅AI,公益长出翅膀 | 回顾3.30 上海「开源×AI 赋能公益」Meetup
  • 如何更改wsl2中的ubuntu默认安装位置
  • 前端Js,检查一个字符串中是否出现高重复率
  • 理解Commit:版本控制的核心概念
  • 模拟的DDoS攻击网络数据样例,包含正常流量与不同类型攻击的对比数据
  • 室分系统(室内分布系统)详解
  • Springboot把外部jar包打包进最终的jar包,并实现上传服务器
  • JS小练习0.3——秒数转换为时分秒
  • Gerrit的安装与使用说明(Ubuntu)
  • QScrCpy源码解析(3)监听手机usb端口
  • Python数据分析及相关库(二)
  • 轻量级Java跨包调用(完全解耦)
  • vue 走马灯 纵向滚动
  • redis 延迟双删