在上一篇文章RKMEDIA使用简介中简单的介绍了rkmedia的组成部分,本章主要聊聊VI模块。

rkmedia中的VI模块主要可以从两个方式获取流:直接打开video节点的方式、使用rk平台的rkaiq。

1、直接打开video节点的方式 顾名思义只需要在vi初始化中配置VI_CHN_ATTR_S参数中pcVideoNode成对应的/dev/video*节点

  VI_CHN_ATTR_S vi_chn_attr;vi_chn_attr.pcVideoNode = "/dev/video0";vi_chn_attr.u32BufCnt = 3;vi_chn_attr.u32Width = u32Width;vi_chn_attr.u32Height = u32Height;vi_chn_attr.enPixFmt = IMAGE_TYPE_NV12;vi_chn_attr.enWorkMode = VI_WORK_MODE_NORMAL;vi_chn_attr.enBufType = VI_CHN_BUF_TYPE_MMAP;ret = RK_MPI_VI_SetChnAttr(s32CamId, 0, &vi_chn_attr);ret |= RK_MPI_VI_EnableChn(s32CamId, 0);if (ret) {printf("Create VI[0] failed! ret=%d\n", ret);return -1;}

2、使用rkaiq方式,rkaiq是对ispp的实现。 ispp支持分辨率的缩放。

  VI_CHN_ATTR_S vi_chn_attr;vi_chn_attr.pcVideoNode = "rkispp_scale0";vi_chn_attr.u32BufCnt = 3;vi_chn_attr.u32Width = u32Width;vi_chn_attr.u32Height = u32Height;vi_chn_attr.enPixFmt = IMAGE_TYPE_NV12;vi_chn_attr.enWorkMode = VI_WORK_MODE_NORMAL;vi_chn_attr.enBufType = VI_CHN_BUF_TYPE_MMAP;ret = RK_MPI_VI_SetChnAttr(s32CamId, 0, &vi_chn_attr);ret |= RK_MPI_VI_EnableChn(s32CamId, 0);if (ret) {printf("Create VI[0] failed! ret=%d\n", ret);return -1;}

在使用sensor作为输入的时候,一般都是采用rkaiq的方式;使用hdmi或者是模拟高清RX芯片(NVP6188等)这种作为输入,是采用直接打开video节点的方式。

rkmedia的demo中,默认是使用ispp节点作为输入。所以在使用demo时需要在后台执行ispserver& 程序,或者在输入参数加上-a 选项指定iqfiles文件路径(默认路径是在/etc/iqfiles下面)。

以下是rv1126/rv1109ispp节点的能力:

ps:缩放只支持缩小不支持放大,倍数是等比关系,不是分辨率的关系(长宽要同时缩放1-8倍之间)。比如输入的分辨率是1920*1080 那么缩放范围在960*540~240*135,缩放的倍率不要求是整数倍,但是分辨率需要16字节对齐

rkmedia_vi_get_frame_test 提供了获取yuv数据的demo,在使用demo前要确保可以在命令行用v4l2命令可以获取数据。

v4l2抓取命令如下

v4l2-ctl -d /dev/video19 --set-fmt-video=width=1920,height=1080,pixelformat=NV12 --stream-mmap=3

在配置多路输入的时候,需要注意VI_CHN 是不可以重复的。

在接入两个sensor的时候使用ispp时,VI_PIPE是用来选择对应的sensor的,对应关系是在设备树中设置的。如果是hdmi和RX芯片接入,则无需考虑VI_PIPE的设置,随便怎么设置。

在使用vi模块最常见的问题是在初始化时,配置VI_CHN_BUF_TYPE_DMA ,程序执行会错误。

主要是有两点:

1、输入节点是video0, 目前的经验得出video0是不支持DMA申请内存

2、rkmedia的DMA内存是去通过DRM去申请的,所以有些无屏设备在设备树中把display_subsystem节点禁用了,所以需要开启。

&display_subsystem {status = "okay";
};

常用VI查看信息的命令:

media-ctl -p -d /dev/media3  //用来查看media节点的拓扑结构v4l2-ctl --list-formats-ext -d /dev/video25  //用来查看video节点支持的分辨率以及格式等信息cat /proc/rkispp0  //查看ispp的信息(在ispp使用的时候用,否则只能查看频率和版本)

在使用uvc作为输入的时候需要做一下操作:

​​​​​​​1、修改kernel的配置,(Device Drivers > Multimedia support > Media USB Adapters >Media USB Adapters>USB Video Class(UVC))   
其实只需在arch/arm/cofnigs/下对应的配置文件中添加:CONFIG_MEDIA_USB_SUPPORT=y CONFIG_USB_VIDEO_CLASS=y
2、插上uvc摄像头后,通过media-ctl -p -d /dev/media*找到对应的video节点
3、v4l2-ctl --list-formats-ext -d /dev/video*  通过这个命令可以得到节点支持的分辨率以及输入格式
4、修改demo中vi的配置,改成对应的节点、支持的分辨率、支持的格式

暂时关于VI部分写这么多,有新的建议后续加上来。

文章汇总:RKMEDIA使用简介_未_定的博客-CSDN博客

RKMEDIA--VI的使用相关推荐

  1. RKMEDIA--VP使用

    本章描述rkmedia vp模块 即视频一入四处功能的介绍. 使用场景:主要用在DVR/DMS产品上,需要多路视频节点的输入和获取. 可以rv1126/rv1109可以外接模拟高清RX芯片(NVP61 ...

  2. 瑞芯微RV1126使用官方sdk进行音频编码

    记录一下在使用1126进行音频编码中遇到的一个问题,根据官方文档:Rockchip RKMedia Development Guide 参考sdk目录external/rkmedia/examples ...

  3. RV1126笔记二:rkmedia测试

    若该文为原创文章,转载请注明原文出处 一.简介 RKMedia提供了一种媒体处理方案,可支持应用软件快速开发.RKMedia在各模块基础API上做进一步封装,简化了应用开发难度.该平台支持以下功能: ...

  4. 【正点原子Linux连载】第五章 RKMedia编译和使用 摘自【正点原子】ATK-DLRV1126系统开发手册

    第五章 RKMedia编译和使用 5.1 RKMedia编译 Rkmedia是RK官方封装一层简易的API,把RGA.MPP.RKNN等等这些接口封装成高级的接口.在SDK官方的源码目录下,运行以下命 ...

  5. rkmedia 调试笔记

    rkmedia 框架 RKMedia提供了一种媒体处理方案,可支持应用软件快速开发.RKMedia在各模块基础API上做进一步封装,简化了应用开发难度.该平台支持以下功能:VI(输入视频捕获).VEN ...

  6. rv1126 rkmedia调试

    rv1126 rkmedia调试 rv1126的rkmedia基本把媒体这块封装起来,简单调用其中的API就能快速开发媒体相关的应用, 具体文档见 docs\RV1126_RV1109\Multime ...

  7. linux vi编辑器中的复制粘贴快捷键

    在使用vi有时会想直接复制一行数据,然后粘贴若干行进行修改 复制一行数据的方法 把光标放到要复制的一行前面,然后按两下yy字母键 yy # 复制光标所在的那一行 然后把光标放到要复制到的地方去,按键盘 ...

  8. Linux 运维常用命令 find、awk、sed、grep、vi、ps、lsof、rpm

    先用一个脚本,模拟创建 14 个测试文件: #!/bin/bash for ((i=1;i<=10;i++)); do if [ $i -lt 3 ] thentouch /home/mysql ...

  9. linux vi编辑 整理

    :w 保存文件但不退出vi :w file 将修改另外保存到file中,不退出vi :w! 强制保存,不推出vi :wq 保存文件并退出vi :wq! 强制保存文件,并退出vi q: 不保存文件,退出 ...

  10. 《学习vi编辑器》的学习笔记1

    第一章 vi文本编辑器 打开文件vi [filename] 输入:q在缓冲区中内容和磁盘内容一致的时候退出,否则就需要输入:q!来忽略这个限制,不保存缓冲区,直接退出 命令模式:每次输入都表示一个命令 ...

最新文章

  1. CXF wsdl2java 生成java代码供客户端使用
  2. maven 简易入门笔记
  3. 【PAT乙级】1028 人口普查 (20 分)
  4. 字节面试必须拿下的十道算法题,你会几道?
  5. 我是如何实用:before :after
  6. Linux crontab定时执行任务
  7. JVM第五部分 高效并发
  8. asp.core api 通过socket和服务器通信发送udp_读懂Java中的Socket编程
  9. Linux命令之MD5校验md5sum
  10. pads铺铜不能开启drp_PADS2007 layout设置和基本操作步骤.ppt
  11. rk3399 rt5640 录音调试记录
  12. PX4固件通过UART连接串口读取超声波,和树莓派3通信(似乎讲了怎么添加驱动程序,添加自定义msg,还有uORB消息订阅,佩服,感觉做了我想做的!)
  13. 微信缓存dat怎么转图片_PC微信dat文件如何转换为图片?
  14. 教程篇(7.0) 07. FortiGate基础架构 高可用性(HA) ❀ Fortinet 网络安全专家 NSE 4
  15. matlab 中偏微分符号,一阶、二阶偏微分方程符号运算
  16. 如何将几个pdf合并成一个pdf?教你pdf合并最快速的方法
  17. MC辨析(蒙特卡洛)
  18. macbook上好用的解压软件_全能解压 Mac下最好用的解压缩软件
  19. 【病毒】【CPU使用率为100%】Linux 被 kdevtmpfsi 挖矿病毒入侵
  20. 真实业务场景展现CAS原理的ABA问题及解决方案

热门文章

  1. Scipy.sparse模块中的coo_matrix、csc_matrix、csr_matrix函数
  2. 2021年G2电站锅炉司炉免费试题及G2电站锅炉司炉考试试卷
  3. 2020交友聊天PHP代码 社交网络网站源代码 聊天即时通源代码送APP源码
  4. A类核心芯片的质量管理(连载二)
  5. 使用cpolar发布群晖NAS上的网页(2)
  6. 走在时代前沿的移动应用安全技术,拿来吧你
  7. latex设置页边距和行距
  8. React配合axios请求拦截校验session,403跳转至登陆页面
  9. 傅里叶变换对称性质MATLAB,利用共轭对称和反对称性质做离散傅里叶变换求相关性问题...
  10. WIN+方向键不能用