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

征程 6E DISPLAY 功能介绍及上手实践

01 功能概述

本文将带大家一起实现单路、多路 MIPI CSI TX 输出、IDU 回写、IDU oneshot 模式、绑定输出 VPS 数据等功能,此处主要介绍各 sample 的实现与使用方法。

02 软件架构说明

本文中绑定 VPS 输出功能基于 libvio API 实现,调用 libvio 提供的 API,同时通过配置文件的方式,实现 pym 数据回灌,输出绑定 IDU 的输入图层,由 MIPI CSI TX 进行输出。

回环 sample 需要调用 libcam 提供的 camera 初始化接口,用于初始化 MIPI RX 和加解串器,还需要调用 libvio 的接口,初始化 CIM 模块将 MIPI RX 的数据存到 DDR 中。

其余 sample 都基于 libidu 实现,同时通过配置文件,实现 IDU 和 MIPI CSI TX 的初始化配置,调用 libidu 的 API 实现 oneshot 触发、获取回写 buffer 等功能。

图片

2.1 硬件数据流说明

基于 Matrix 6E/M 硬件使用,各项功能硬件连接及数据流通路如下:

回写 sample 硬件数据流:

图片

上图为 IDU 回写和 oneshot sample 的简要硬件结构及数据流向图,数据从 DRR 回灌到 IDU 输入图层,通过 IDU 回写输出到 DDR,可将输出数据直接 dump 到文件系统,通过查看数据文件验证输出正确性。

绑定通路 sample 硬件数据流:

图片

上图为绑定 VPS 输出的 sample,数据从 DDR 回灌到 PYM,通过配置文件和 libvio 的接口实现 PYM 输出绑定 IDU 输入图层,将 PYM 的数据通过 IDU 和 MIPI CSI TX 进行显示输出。

回环 sample 硬件数据流:

图片

上图为 MIPI CSI TX 输出回环 sample,将 MIPI CSI TX 的输出通过加串器、解串器接入 RX,通过 CIM 将数据输出到 DDR,通过查看数据文件验证输出正确性。

此处仅标注使用了 1 个 MIPI CSI TX 和 MIPI CSI RX 接口作为示意,但实际并不限于 1 条通路。

1V OVX8B 绑定 IDU 输出硬件数据流:

图片

上图为 1V OVX8B 数据,通过绑定配置,由 MIPI CSI TX 输出的硬件数据流。

2.2 代码位置与目录结构

图片

2.3 API 流程说明

以下为 sample 内 API 调用流程:

图片

上图为绑定场景下 sample 的 API 调用流程。

图片

上图为回写、oneshot、MIPI CSI TX 输出等场景下的 API 调用流程。

2.4 编译说明

本模块依赖 libvio 提供的 VIO API 头文件和 libidu 提供的 display API 头文件,并且需要依赖 libhbmem 头文件用于 buffer 申请:

#include "hb_mem_mgr.h"
#include "idu_interface.h"
#include "hbn_idu_cfg.h"
#include "hbn_vpf_interface.h"
#include "hb_camera_interface.h"
#include "hb_vio_interface.h"

编译依赖的库有如下:

LIBS += -lalog -lhbmem -lgdcbin -lcam -lvpf -lidu -lvio

编译命令:

# 进入 SDK 所有目录{sdk_dir},并 source 构建环境。
# 编译本 sample:
bdm display-sample
# 输出文件:
{sdk_dir}/out/debug-gcc_{gcc_version}/build/test/samples/platform_samples/source/S83_Sample/S83E04_Module/display_sample

03 运行

环境搭建:支持 Matrix 6E/M。

图片

上图左侧二合一端子为 TX 输出,右侧四合一端子为 RX0 输入

  • 回环 sample 连接方式:TX 输出 1 接 RX 输入 4,TX 输出 2 接 RX 输入 3;
  • 1V OVX8B 绑定 IDU 输出 sample 连接方式:OVX8B 接入 RX 输入 3,TX 输出任意端口外接 RX。

板端部署及配置

  • 刷写系统软件镜像后,本 sample 的可执行文件位于板端:/app/sample/S83_Sample/S83E04_Module/display_sample/bin/display_sample;
  • 执行脚本位于板端:/app/sample/S83_Sample/S83E04_Module/display_sample/script/display_sample.sh;
  • 需要使用的配置文件位于板端:/app/sample/S83_Sample/S83E04_Module/display_sample/cfg;
  • 需要使用的图像文件位于板端:/app/sample/S83_Sample/S83E04_Module/display_sample/res。

运行方法

IDU 回写运行命令:display_writeback_sample,数据流参考 :ref:回写数据流 <writeback_flow>。

/app/sample/S83_Sample/S83E04_Module/display_sample/script/display_sample.sh display_writeback_sample

IDU oneshot 运行命令:display_oneshot_sample,数据流参考 :ref:回写数据流 <writeback_flow>。

/app/sample/S83_Sample/S83E04_Module/display_sample/script/display_sample.sh display_oneshot_sample

PYM 输出绑定 IDU 运行命令:display_bind_sample,数据流参考 :ref:绑定场景数据流 <bind_flow>。

/app/sample/S83_Sample/S83E04_Module/display_sample/script/display_sample.sh display_bind_sample

单路 Loopback 运行命令:matrix_display_loopback_sample_tx0\1,其中 matrix_display_loopback_sample_tx0 输出 IDU0 的 1080P 数据,matrix_display_loopback_sample_tx1 由 IDU1 两个图层拼接输出 1920x2160 数据,数据流参考 :ref:回环场景数据流 <loopback_flow>。

/app/sample/S83_Sample/S83E04_Module/display_sample/script/display_sample.sh matrix_display_loopback_sample_tx0
/app/sample/S83_Sample/S83E04_Module/display_sample/script/display_sample.sh matrix_display_loopback_sample_tx1

两路 Loopback 运行命令:matrix_display_loopback_sample_tx01,TX0 输出 1080P 数据,TX1 输出 1920x2160 数据,数据流参考 :ref:回环场景数据流 <loopback_flow>。

/app/sample/S83_Sample/S83E04_Module/display_sample/script/display_sample.sh matrix_display_loopback_sample_tx01

1V OVX8B 绑定输出运行命令:1v_ovx8b_rx0_cpe0_idu0_tx0_max9295e,数据流参考 :ref:1V绑定数据流 <1v_bind_flow>。

/app/sample/S83_Sample/S83E04_Module/display_sample/script/display_sample.sh 1v_ovx8b_rx0_cpe0_idu0_tx0_max9295e

运行参数说明

图片

可通过-h 参数查看帮助

Usage:

-v --version Display test case version

-l --loop Excute count

-V --vnode_cfg vnode config file

-D --dump_enable dump flag

-d --device idu hw device id

-p --Pattern pattern path

-M --md5 md5 check

-L --loop_back loop back

-B --vio_bind vio bind

-s --sensor with sensor

-T --tims time(s)

-m --pipe_mask pipeline mask

-g --debug enable debug log

-h --help help info

运行结果说明

以下为 display_writeback_sample 正常运行的 log:

[INFO] display: display device index = 1
[INFO] display: dump flag = 5
[INFO] display: loop = 5
[INFO] display: display cfg = /app/sample/S83_Sample/S83E04_Module/display_sample/cfg/idu_plane1_nv12_wb_nv12_1080p_30fps/
[INFO] display: display pattern = /app/sample/S83_Sample/S83E04_Module/display_sample/res/nv16_1920x1080.yuv
[INFO] display: Exit Display Sample[0].

运行结束后可以看到当前目录有五张 yuv 图片,格式为 NV12 1080P,可以通过看图软件查看,下图仅为示例,实际情况请结合输入图片进行确认:

图片

以下为 display_oneshot_sample 正常运行的 log:

[INFO] display: display device index = 1
[INFO] display: dump flag = 5
[INFO] display: loop = 5
[INFO] display: display cfg = /app/sample/S83_Sample/S83E04_Module/display_sample/cfg/idu_plane1_nv12_wb_nv12_1080p_oneshot/
[INFO] display: display pattern = /app/sample/S83_Sample/S83E04_Module/display_sample/res/nv16_1920x1080.yuv
[INFO] display: Exit Display Sample[0].

运行结束后可以看到当前目录有五张 yuv 图片,格式为 NV12 1080P,可以通过看图软件查看,下图仅为示例,实际情况请结合输入图片进行确认:

图片

以下为 display_bind_sample 正常运行的 log:

[INFO] display: display device index = 1
[INFO] display: loop = 10000
[INFO] display: display cfg = /app/sample/S83_Sample/S83E04_Module/display_sample/cfg/vnode_hbn_ddr_pym_idu_mipitx_1080p/
[INFO] display: Exit Display Sample[0].

本文通过 MIPI CSI TX 发送 10000 帧数据,可以通过 RX 收图查看。

以下为 matrix_display_loopback_sample_tx0 正常运行的 log:

[INFO] display: display device index = 1
[INFO] display: dump flag = 5
[INFO] display: loop = 5
[INFO] display: display cfg = /app/sample/S83_Sample/S83E04_Module/display_sample/cfg/matrix_idu0_plane1_nv12_csi0_yuv422_max9295_max96712_rx0_1080p_30fps/
[INFO] display: display pattern = /app/sample/S83_Sample/S83E04_Module/display_sample/res/nv16_1920x1080.yuv
[INFO] display: Exit Display Sample[0].

本文通过 MIPI CSI TX0 发送 5 帧数据,通过 MAX9295E->MAX96712 回环到 RX0,通过 CIM 将数据存到 DDR,然后存成文件,可以通过看图软件查看,下图仅为示例,实际情况请结合输入图片进行确认:

图片

以下为 matrix_display_loopback_sample_tx1 正常运行的 log:

[INFO] display: display device index = 2
[INFO] display: dump flag = 5
[INFO] display: loop = 5
[INFO] display: display cfg = /app/sample/S83_Sample/S83E04_Module/display_sample/cfg/matrix_idu1_plane1_nv12_csi1_yuv422_max9295_max96712_rx0_1080p_30fps/
[INFO] display: display pattern = /app/sample/S83_Sample/S83E04_Module/display_sample/res/nv16_1920x1080.yuv
[INFO] display: Exit Display Sample[0].

本文通过 MIPI CSI TX1 发送 5 帧数据,通过 MAX9295E->MAX96712 回环到 RX0,

通过 CIM 将数据存到 DDR,然后存成文件,可以通过看图软件查看,下图仅为示例,实际情况请结合输入图片进行确认:

图片

以下为 matrix_display_loopback_sample_tx01 正常运行的 log:

[INFO] display: display device index = 3
[INFO] display: dump flag = 5
[INFO] display: loop = 5
[INFO] display: display cfg = /app/sample/S83_Sample/S83E04_Module/display_sample/cfg/matrix_idu01_plane1_nv12_csi01_yuv422_max9295_max96712_rx0_1080p_30fps/
[INFO] display: display pattern = /app/sample/S83_Sample/S83E04_Module/display_sample/res/nv16_1920x1080.yuv
[INFO] display: Exit Display Sample[0].

本文通过两路 MIPI CSI TX 发送 5 帧数据,通过 MAX9295E->MAX96712 回环到 RX0,通过 CIM 将数据存到 DDR,然后存成文件,可以通过看图软件查看,本 sample 效果和 TX0、TX1 单路输出相同,实际情况请结合输入图片进行确认。

以下为 1v_ovx8b_rx0_cpe0_idu0_tx0_max9295e 正常运行的 log,sample 运行时长为 100 秒,可以通过脚本中的-T 参数进行时长设置:

[INFO] display: display cfg = /app/sample/S83_Sample/S83E04_Module/display_sample/cfg/1v_ovx8b_rx0_cpe0_idu0_tx0_max9295e/
[INFO] display: Exit Display Sample[0].

本文通过 MIPI CSI TX 将 OVX8B 的输入数据进行发送,可以接入 MIPI RX 查看数据。在运行时可以通过命令“cat /sys/class/vps/flow/fps”查看 fps 是否正常,可以看到 idu0 的 ichn0 的输入帧率为 30:

----------------------------------------------------
Flow10 FPS
----------------------------------------------------
vin0 ctx 0: | ich0 30 | och0  0 | och1 30 | och3  0 | och4  0 |
isp0 ctx 0: | ich0 30 | och0 30 |
pym0 ctx 0: | ich0 30 | och0 30 |
idu0 ctx 0: | ich0 30 | ich1  0 | ich2  0 | ich3  0 | ich4  0 | ich5  0 | och0  0 | och1

相关文章:

征程 6E DISPLAY 功能介绍及上手实践

01 功能概述 本文将带大家一起实现单路、多路 MIPI CSI TX 输出、IDU 回写、IDU oneshot 模式、绑定输出 VPS 数据等功能&#xff0c;此处主要介绍各 sample 的实现与使用方法。 02 软件架构说明 本文中绑定 VPS 输出功能基于 libvio API 实现&#xff0c;调用 libvio 提供的…...

安卓窗口wms/input小知识NO_INPUT_CHANNEL剖析

背景&#xff1a; 经常在学员的vip技术群里经常有很多学员会提问一些不太常见的窗口和input的相关的问题&#xff0c;虽然不太常见&#xff0c;但确实是工作中会遇到的一些问题&#xff0c;所以马哥有必要进行一下记录这些窗口技术知识点。 具体分享技术点&#xff1a; input中…...

【2024最新版】Win10下 Java环境变量配置----适合入门小白

首先&#xff0c;你应该已经安装了 Java 的 JDK 了&#xff08;如果没有安装JDK&#xff0c;请跳转到此网址&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html&#xff09; 笔者安装的是 jdk-8u91-windows-x64 接下来主要讲怎么配…...

Servlet 生命周期详解及案例演示(SpringMVC底层实现)

文章目录 什么是Servlet&#xff1f;Servlet生命周期简介1. 初始化阶段&#xff1a;init()方法示例代码&#xff1a; 2. 请求处理阶段&#xff1a;service() 和 doGet()、doPost()方法示例代码&#xff1a; 3. 销毁阶段&#xff1a;destroy()方法示例代码&#xff1a; Servlet生…...

2024 kali系统2024版本,可视化界面汉化教程(需要命令行更改),英文版切换为中文版,基于Debian创建的kali虚拟机

我的界面如下所示 1. 安装 locales sudo apt install locales 2. 生成中文语言环境 sudo locale-gen zh_CN.UTF-8 如果你希望安装繁体中文&#xff0c;可以加入&#xff1a; sudo locale-gen zh_TW.UTF-8 3. 修改 /etc/default/locale 文件 确保有以下内容 LANGzh_CN.UT…...

深入理解 CMake 中的 INCLUDE_DIRECTORIES 与 target_include_directories

在使用 CMake 构建系统时&#xff0c;指定头文件的包含路径是非常常见的一步。对于这个任务&#xff0c;CMake 提供了两种主要的命令&#xff1a;INCLUDE_DIRECTORIES 和 target_include_directories。虽然它们看似类似&#xff0c;但它们的作用范围、应用方式以及适用场景却有…...

【不知道原因的问题】java.lang.AbstractMethodError

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 遇到了一个问题&#xff1a; java.lang.AbstractMethodError 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 在Java开发中&#xff0c;java.lang.AbstractMethodError是一个常见…...

分布式篇(分布式事务)(持续更新迭代)

一、事务 1. 什么是事务 2. 事务目的 3. 事务的流程 4. 事务四大特性 原子性&#xff08;Atomicity&#xff09; 一致性&#xff08;Consistency&#xff09; 持久性&#xff08;Durability&#xff09; 隔离性&#xff08;Isolation&#xff09; 5. MySQL VS Oracle …...

[Linux] 逐层深入理解文件系统 (2)—— 文件重定向

标题&#xff1a;[Linux] 逐层深入理解文件系统 &#xff08;2&#xff09;—— 文件重定向 个人主页水墨不写bug &#xff08;图片来源于网络&#xff09; 目录 一、文件的读取和写入 二、文件重定向的本质 1.手动模拟重定向的过程——把标准输出重定向到redir.txt 2.重定向…...

html+css+js实现Badge 标记

实现效果&#xff1a; 代码实现&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Badge…...

纯css 轮播图片,鼠标移入暂停 移除继续

核心 滚动&#xff1a; animation: 动画名称 20s linear infinite normal;停止&#xff1a; animation: 动画名称 20s linear infinite paused; 完整例子&#xff1a; html: <div class"carousel-wrapper"><div class"carousel"><div cl…...

iOS GCD的基本使用

一:什么是GCD GCD的全程是:Grand Central Dispatch, 直白的用汉语翻译就是:厉害的中枢调度器. GCD 是iOS 的多线程技术的实现方案,但是它并不是多线程技术,它是“并发解决技术”,是苹果公司研发的,会自动管理线程(这一段定义有点拗口,简单了解就行) GCD会自动管理线程的生命…...

如何设计开发RTSP直播播放器?

技术背景 我们在对接RTSP直播播放器相关技术诉求的时候&#xff0c;好多开发者&#xff0c;除了选用成熟的RTSP播放器外&#xff0c;还想知其然知其所以然&#xff0c;对RTSP播放器的整体开发有个基础的了解&#xff0c;方便方案之作和技术延伸。本文抛砖引玉&#xff0c;做个…...

Java基础系列-一文搞懂自定义排序

java自定义排序 自定义排序的理解&#xff1a; 我们首先看需求&#xff1a;一个二维数组 [[1,3],[8,10],[15,18],[2,6]] 我们的需求是根据集合&#xff08;二维数组取出来的数据&#xff09; 左边小的左边这种方式排序 例如1<8 排序方式就是[1,3],[8,10] 此时我们就需…...

扫普通链接二维码打开小程序

1. 2.新增规则&#xff08;注意下载文件到跟目录下&#xff0c;需要建个文件夹放下载的校验文件&#xff09; 3.发布 ps&#xff1a;发布后&#xff0c;只能访问正式版本。体验版本如果加了 测试链接http://xxx/xsc/10 那么http://xxx/xsc/aa.....应该都能访问 例如aa101 aa…...

计算机储存与分区

Disk partitioning 盘分区是在辅助储存上创建一个或多个区域&#xff0c;以便可以单独管理每个区域。而这些区域称为分区&#xff08;partition&#xff09;。这通常是在为新盘选择分区方案后&#xff0c;需要做的事。 MBR and GPT 分区方案&#xff08;分区表&#xff09;有…...

OpenCV之换脸技术:一场面部识别的奇妙之旅

在这个数字化与智能化并进的时代&#xff0c;图像处理技术日益成为连接现实与虚拟世界的桥梁。其中&#xff0c;换脸技术作为一项颇受欢迎且富有挑战性的应用&#xff0c;不仅让人惊叹于技术的魔力&#xff0c;更在娱乐、影视制作等领域展现了无限可能。今天&#xff0c;我们就…...

Linux学习笔记9 文件系统的基础

一、查看文件组织结构 Linux中一切都是文件。 Linux和Win的文件系统不是一个结构&#xff0c;Linux存在的根目录是所有目录的起点。 所有的存储空间和设备共享一个根目录&#xff0c;不同的磁盘块和分区挂载在其下&#xff0c;成为某个子目录的子目录&#xff0c;甚至设备也挂…...

Android OpenGL粒子特效

在本篇&#xff0c;我们将开启一个新的项目&#xff0c;探索粒子的世界。粒子是一种基本的图形元素&#xff0c;它们通常被表示为一组点。通过巧妙地组合一些基础的物理效果&#xff0c;我们能够创造出许多令人惊叹的视觉效果。想象一下&#xff0c;我们可以模拟一个水滴从喷泉…...

5 -《本地部署开源大模型》在Ubuntu 22.04系统下ChatGLM3-6B高效微调实战

在Ubuntu 22.04系统下ChatGLM3-6B高效微调实战 无论是在单机单卡&#xff08;一台机器上只有一块GPU&#xff09;还是单机多卡&#xff08;一台机器上有多块GPU&#xff09;的硬件配置上启动ChatGLM3-6B模型&#xff0c;其前置环境配置和项目文件是相同的。如果大家对配置过程还…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...