专栏算法工具链J6E DISPLAY功能介绍

J6E DISPLAY功能介绍

费小财2024-08-16
173
0

display sample

功能概述

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

软件架构说明

本文中绑定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等功能。

硬件数据流说明

基于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输出的硬件数据流。

代码位置与目录结构

代码位置如下:

\     描述                                           备注

sample名称 display_sample

代码位置  {sdk_dir}/test/samples/platform_samples/source/S83_Sample/S83E04_Module/display_sample

代码结构  display_sample                                      Kconfig为编译系统配置,可配置加入整体编译;


      ├── Kconfig                                        Makefile为编译规则,包括部署;


      ├── Makefile                                       src下为sample源码,入口为main();


      ├── Makefile.in                                      cfg下为sample需要的配置文件;


      ├── src                                          res下为sample需要的图像文件;


      ├── cfg                                          display_sample.sh为sample运行脚本;


      ├── res                                          weston下为显示服务deb包和环境脚本;


      ├── weston


      └── display_sample.sh

板上部署  /app/sample/S83_Sample/S83E04_Module/display_sample/bin/

示例配置  /app/sample/S83_Sample/S83E04_Module/display_sample/cfg/

API流程说明

以下为sample内API调用流程:

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


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

编译说明

本模块依赖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

运行

环境搭建:支持 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:`回写数据流 `。

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

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

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

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

    /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:`回环场景数据流 `。

   /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:`回环场景数据流 `。

   /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绑定数据流 `。

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


运行参数说明:

+--------+----------------------------------------------+----------+---------------------+

| 参数名 | 说明                     | 是否必须 | 备注        |

+========+==============================================+==========+=====================+

| -l   | 指定sample运行循环次数            | 否    | 默认1次       |

+--------+----------------------------------------------+----------+---------------------+

| -V   | 指定配置文件目录               | 是    | 需指定       |

+--------+----------------------------------------------+----------+---------------------+

| -D   | 使能dump功能                 | 否    | -D 5,dump 5帧图片 |

+--------+----------------------------------------------+----------+---------------------+

| -d   | 指定显示硬件设备id              | 是    | 1:idu0,2:idu1  |

+--------+----------------------------------------------+----------+---------------------+

| -p   | 指定输入图片路径               | 否    |           |

+--------+----------------------------------------------+----------+---------------------+

| -L   | 使能Loopback,需要配合camera初始化      | 否    |           |

+--------+----------------------------------------------+----------+---------------------+

| -B   | 使能VIO绑定功能,需配合VPS初始化       | 否    |           |

+--------+----------------------------------------------+----------+---------------------+

| -s   | 带sensor输入,需配合camera初始化       | 否    |           |

+--------+----------------------------------------------+----------+---------------------+

| -T   | 运行时长,单位秒               | 否    |           |

+--------+----------------------------------------------+----------+---------------------+

| -m   | pipeline mask                | 否    |           |

+--------+----------------------------------------------+----------+---------------------+

| -g   | 使能debug打印                | 否    |           |

+--------+----------------------------------------------+----------+---------------------+

| -h   | 查看帮助信息                 | 否    |           |

+--------+----------------------------------------------+----------+---------------------+

| -v   | 查看版本信息                 | 否    |           |

+--------+----------------------------------------------+----------+---------------------+

可通过-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  0 | och2  0 |

算法工具链
技术深度解析社区征文征程6官方教程
评论0
0/1000