首页 > 其他分享 >RKMEDIA--VI的使用

RKMEDIA--VI的使用

时间:2023-04-14 09:02:26浏览次数:33  
标签:attr -- VI chn RKMEDIA ret vi 节点

在上一篇文章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部分写这么多,有新的建议后续加上来。

标签:attr,--,VI,chn,RKMEDIA,ret,vi,节点
From: https://www.cnblogs.com/kn-zheng/p/17317201.html

相关文章

  • 一统天下 flutter - widget 容器类(只能有一个子): AspectRatio - 按比例
    一统天下flutterhttps://github.com/webabcd/flutter_demo作者webabcd一统天下flutter-widget容器类(只能有一个子):AspectRatio-按比例示例如下:lib\widget\container\aspect_ratio.dart/**AspectRatio-按比例*/import'package:flutter/material.dart';......
  • Linux中使用ntpdate同步失败报错:14 Apr 08:42:12 ntpdate[1255]: the NTP socket is i
    报错信息: 报错原因:1、可能是因为同步的域名信息没有解析到。2、可能是因为服务的问题导致没有同步成功。 解决方法:1、先关闭ntpd服务。[root@k8s-master01~]#servicentpdstopRedirectingto/bin/systemctlstopntpd.service 2、重新同步。[root@k8s-maste......
  • 一统天下 flutter - 输入: Draggable/DragTarget - 拖拽
    一统天下flutterhttps://github.com/webabcd/flutter_demo作者webabcd一统天下flutter-输入:Draggable/DragTarget-拖拽示例如下:lib\input\drag.dart/**Draggable/DragTarget-拖拽**Draggable-按下后可拖拽的对象*LongPressDraggable-长按后可......
  • 一统天下 flutter - widget 滚动类: ScrollNotification - 滚动通知
    一统天下flutterhttps://github.com/webabcd/flutter_demo作者webabcd一统天下flutter-widget滚动类:ScrollNotification-滚动通知示例如下:lib\widget\scroll\scroll_notification.dart/**ScrollNotification-滚动通知*/import'package:flutter/mater......
  • python 操作csv
    python操作csv 写csvimportcsvwithopen('path/to/file.csv','w',newline='')ascsvfile:writer=csv.writer(csvfile,delimiter=',',quotechar='"',quoting=csv.QUOTE_MINIMAL)writer.writero......
  • 一统天下 flutter - widget 滚动类: DraggableScrollableSheet - 可滚动组件,并且支持
    一统天下flutterhttps://github.com/webabcd/flutter_demo作者webabcd一统天下flutter-widget滚动类:DraggableScrollableSheet-可滚动组件,并且支持通过拖拽的方式上下展开示例如下:lib\widget\scroll\draggable_scrollable_sheet.dart/**DraggableScrollable......
  • 一统天下 flutter - widget 状态管理: 状态管理 - 在树上,父监听子的通知
    一统天下flutterhttps://github.com/webabcd/flutter_demo作者webabcd一统天下flutter-widget状态管理:状态管理-在树上,父监听子的通知示例如下:lib\state\notification_listener.dart/**状态管理-在树上,父监听子的通知**在树上,子通过Notification触......
  • 一统天下 flutter - widget 列表类: GridView - 网格
    一统天下flutterhttps://github.com/webabcd/flutter_demo作者webabcd一统天下flutter-widget列表类:GridView-网格示例如下:lib\widget\list\grid_view.dart/**GridView-网格*/import'dart:math';import'package:flutter/material.dart';im......
  • 一般在服务器场景中,可能不止有一个Tomcat,比如一个服务器上面有两个Tomcat:Tomcat1、Tomcat2分别部署了应用1、应用2但是应用1用的是Java7编译的,应用2用的是Java8编译的版本为了保证应用正常运行(比如应用1使用的某某jar包不支持Java8的版本),我们就需要在Tomcat中分别指定使用的Jav......
  • SQLite performance tuning
    SQLiteperformancetuning-ScalingSQLitedatabasestomanyconcurrentreadersandmultiplegigabyteswhilemaintaining100kSELECTspersecond-phiresky'sblog ScalingSQLitedatabasestomanyconcurrentreadersandmultiplegigabyteswhilemain......