博客專欄

EEPW首頁 > 博客 > 征程 6E DISPLAY 功能介紹及上手實踐

征程 6E DISPLAY 功能介紹及上手實踐

發(fā)布人:地平線開發(fā)者 時間:2024-10-27 來源:工程師 發(fā)布文章
01 功能概述


本文將帶大家一起實現(xiàn)單路、多路 MIPI CSI TX 輸出、IDU 回寫、IDU oneshot 模式、綁定輸出 VPS 數(shù)據(jù)等功能,此處主要介紹各 sample 的實現(xiàn)與使用方法。



02 軟件架構(gòu)說明


本文中綁定 VPS 輸出功能基于 libvio API 實現(xiàn),調(diào)用 libvio 提供的 API,同時通過配置文件的方式,實現(xiàn) pym 數(shù)據(jù)回灌,輸出綁定 IDU 的輸入圖層,由 MIPI CSI TX 進(jìn)行輸出。


回環(huán) sample 需要調(diào)用 libcam 提供的 camera 初始化接口,用于初始化 MIPI RX 和加解串器,還需要調(diào)用 libvio 的接口,初始化 CIM 模塊將 MIPI RX 的數(shù)據(jù)存到 DDR 中。


其余 sample 都基于 libidu 實現(xiàn),同時通過配置文件,實現(xiàn) IDU 和 MIPI CSI TX 的初始化配置,調(diào)用 libidu 的 API 實現(xiàn) oneshot 觸發(fā)、獲取回寫 buffer 等功能。


圖片



2.1 硬件數(shù)據(jù)流說明


基于 Matrix 6E/M 硬件使用,各項功能硬件連接及數(shù)據(jù)流通路如下:


回寫 sample 硬件數(shù)據(jù)流:


圖片


上圖為 IDU 回寫和 oneshot sample 的簡要硬件結(jié)構(gòu)及數(shù)據(jù)流向圖,數(shù)據(jù)從 DRR 回灌到 IDU 輸入圖層,通過 IDU 回寫輸出到 DDR,可將輸出數(shù)據(jù)直接 dump 到文件系統(tǒng),通過查看數(shù)據(jù)文件驗證輸出正確性。


綁定通路 sample 硬件數(shù)據(jù)流:


圖片


上圖為綁定 VPS 輸出的 sample,數(shù)據(jù)從 DDR 回灌到 PYM,通過配置文件和 libvio 的接口實現(xiàn) PYM 輸出綁定 IDU 輸入圖層,將 PYM 的數(shù)據(jù)通過 IDU 和 MIPI CSI TX 進(jìn)行顯示輸出。


回環(huán) sample 硬件數(shù)據(jù)流:


圖片


上圖為 MIPI CSI TX 輸出回環(huán) sample,將 MIPI CSI TX 的輸出通過加串器、解串器接入 RX,通過 CIM 將數(shù)據(jù)輸出到 DDR,通過查看數(shù)據(jù)文件驗證輸出正確性。


此處僅標(biāo)注使用了 1 個 MIPI CSI TX 和 MIPI CSI RX 接口作為示意,但實際并不限于 1 條通路。


1V OVX8B 綁定 IDU 輸出硬件數(shù)據(jù)流:


圖片


上圖為 1V OVX8B 數(shù)據(jù),通過綁定配置,由 MIPI CSI TX 輸出的硬件數(shù)據(jù)流。


2.2 代碼位置與目錄結(jié)構(gòu)


圖片




2.3 API 流程說明


以下為 sample 內(nèi) API 調(diào)用流程:


圖片


上圖為綁定場景下 sample 的 API 調(diào)用流程。



圖片


上圖為回寫、oneshot、MIPI CSI TX 輸出等場景下的 API 調(diào)用流程。


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

編譯命令:

# 進(jìn)入 SDK 所有目錄{sdk_dir},并 source 構(gòu)建環(huán)境。
# 編譯本 sample:
bdm display-sample
# 輸出文件:
{sdk_dir}/out/debug-gcc_{gcc_version}/build/test/samples/platform_samples/source/S83_Sample/S83E04_Module/display_sample



03 運行


環(huán)境搭建:支持 Matrix 6E/M。


圖片


上圖左側(cè)二合一端子為 TX 輸出,右側(cè)四合一端子為 RX0 輸入


  • 回環(huán) sample 連接方式:TX 輸出 1 接 RX 輸入 4,TX 輸出 2 接 RX 輸入 3;

  • 1V OVX8B 綁定 IDU 輸出 sample 連接方式:OVX8B 接入 RX 輸入 3,TX 輸出任意端口外接 RX。



板端部署及配置


  • 刷寫系統(tǒng)軟件鏡像后,本 sample 的可執(zhí)行文件位于板端:/app/sample/S83_Sample/S83E04_Module/display_sample/bin/display_sample;

  • 執(zhí)行腳本位于板端:/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,數(shù)據(jù)流參考 :ref:回寫數(shù)據(jù)流 <writeback_flow>。

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


IDU oneshot 運行命令:display_oneshot_sample,數(shù)據(jù)流參考 :ref:回寫數(shù)據(jù)流 <writeback_flow>。

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


PYM 輸出綁定 IDU 運行命令:display_bind_sample,數(shù)據(jù)流參考 :ref:綁定場景數(shù)據(jù)流 <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 數(shù)據(jù),matrix_display_loopback_sample_tx1 由 IDU1 兩個圖層拼接輸出 1920x2160 數(shù)據(jù),數(shù)據(jù)流參考 :ref:回環(huán)場景數(shù)據(jù)流 <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 數(shù)據(jù),TX1 輸出 1920x2160 數(shù)據(jù),數(shù)據(jù)流參考 :ref:回環(huán)場景數(shù)據(jù)流 <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,數(shù)據(jù)流參考 :ref:1V綁定數(shù)據(jù)流 <1v_bind_flow>。

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



運行參數(shù)說明


圖片


可通過-h 參數(shù)查看幫助

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



運行結(jié)果說明

以下為 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].


運行結(jié)束后可以看到當(dāng)前目錄有五張 yuv 圖片,格式為 NV12 1080P,可以通過看圖軟件查看,下圖僅為示例,實際情況請結(jié)合輸入圖片進(jìn)行確認(rèn):


圖片


以下為 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].


運行結(jié)束后可以看到當(dāng)前目錄有五張 yuv 圖片,格式為 NV12 1080P,可以通過看圖軟件查看,下圖僅為示例,實際情況請結(jié)合輸入圖片進(jìn)行確認(rèn):


圖片


以下為 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 發(fā)送 10000 幀數(shù)據(jù),可以通過 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 發(fā)送 5 幀數(shù)據(jù),通過 MAX9295E->MAX96712 回環(huán)到 RX0,通過 CIM 將數(shù)據(jù)存到 DDR,然后存成文件,可以通過看圖軟件查看,下圖僅為示例,實際情況請結(jié)合輸入圖片進(jìn)行確認(rèn):


圖片


以下為 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 發(fā)送 5 幀數(shù)據(jù),通過 MAX9295E->MAX96712 回環(huán)到 RX0,


通過 CIM 將數(shù)據(jù)存到 DDR,然后存成文件,可以通過看圖軟件查看,下圖僅為示例,實際情況請結(jié)合輸入圖片進(jìn)行確認(rèn):


圖片


以下為 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 發(fā)送 5 幀數(shù)據(jù),通過 MAX9295E->MAX96712 回環(huán)到 RX0,通過 CIM 將數(shù)據(jù)存到 DDR,然后存成文件,可以通過看圖軟件查看,本 sample 效果和 TX0、TX1 單路輸出相同,實際情況請結(jié)合輸入圖片進(jìn)行確認(rèn)。


以下為 1v_ovx8b_rx0_cpe0_idu0_tx0_max9295e 正常運行的 log,sample 運行時長為 100 秒,可以通過腳本中的-T 參數(shù)進(jìn)行時長設(shè)置:

[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 的輸入數(shù)據(jù)進(jìn)行發(fā)送,可以接入 MIPI RX 查看數(shù)據(jù)。在運行時可以通過命令“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


*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。



關(guān)鍵詞: 算法 自動駕駛

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉