征程 6E DISPLAY 功能介紹及上手實(shí)踐
本文中綁定 VPS 輸出功能基于 libvio API 實(shí)現,調用 libvio 提供的 API,同時(shí)通過(guò)配置文件的方式,實(shí)現 pym 數據回灌,輸出綁定 IDU 的輸入圖層,由 MIPI CSI TX 進(jìn)行輸出。
回環(huán) sample 需要調用 libcam 提供的 camera 初始化接口,用于初始化 MIPI RX 和加解串器,還需要調用 libvio 的接口,初始化 CIM 模塊將 MIPI RX 的數據存到 DDR 中。
其余 sample 都基于 libidu 實(shí)現,同時(shí)通過(guò)配置文件,實(shí)現 IDU 和 MIPI CSI TX 的初始化配置,調用 libidu 的 API 實(shí)現 oneshot 觸發(fā)、獲取回寫(xiě) buffer 等功能。
基于 Matrix 6E/M 硬件使用,各項功能硬件連接及數據流通路如下:
回寫(xiě) sample 硬件數據流:
上圖為 IDU 回寫(xiě)和 oneshot sample 的簡(jiǎn)要硬件結構及數據流向圖,數據從 DRR 回灌到 IDU 輸入圖層,通過(guò) IDU 回寫(xiě)輸出到 DDR,可將輸出數據直接 dump 到文件系統,通過(guò)查看數據文件驗證輸出正確性。
綁定通路 sample 硬件數據流:
上圖為綁定 VPS 輸出的 sample,數據從 DDR 回灌到 PYM,通過(guò)配置文件和 libvio 的接口實(shí)現 PYM 輸出綁定 IDU 輸入圖層,將 PYM 的數據通過(guò) IDU 和 MIPI CSI TX 進(jìn)行顯示輸出。
回環(huán) sample 硬件數據流:
上圖為 MIPI CSI TX 輸出回環(huán) sample,將 MIPI CSI TX 的輸出通過(guò)加串器、解串器接入 RX,通過(guò) CIM 將數據輸出到 DDR,通過(guò)查看數據文件驗證輸出正確性。
此處僅標注使用了 1 個(gè) MIPI CSI TX 和 MIPI CSI RX 接口作為示意,但實(shí)際并不限于 1 條通路。
1V OVX8B 綁定 IDU 輸出硬件數據流:
上圖為 1V OVX8B 數據,通過(guò)綁定配置,由 MIPI CSI TX 輸出的硬件數據流。
以下為 sample 內 API 調用流程:
上圖為綁定場(chǎng)景下 sample 的 API 調用流程。
上圖為回寫(xiě)、oneshot、MIPI CSI TX 輸出等場(chǎng)景下的 API 調用流程。
本模塊依賴(lài) libvio 提供的 VIO API 頭文件和 libidu 提供的 display API 頭文件,并且需要依賴(lài) 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"
編譯依賴(lài)的庫有如下:
LIBS += -lalog -lhbmem -lgdcbin -lcam -lvpf -lidu -lvio
編譯命令:
# 進(jìn)入 SDK 所有目錄{sdk_dir},并 source 構建環(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
環(huán)境搭建:支持 Matrix 6E/M。
上圖左側二合一端子為 TX 輸出,右側四合一端子為 RX0 輸入
回環(huán) sample 連接方式:TX 輸出 1 接 RX 輸入 4,TX 輸出 2 接 RX 輸入 3;
1V OVX8B 綁定 IDU 輸出 sample 連接方式:OVX8B 接入 RX 輸入 3,TX 輸出任意端口外接 RX。
板端部署及配置:
刷寫(xiě)系統軟件鏡像后,本 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 回寫(xiě)運行命令:display_writeback_sample,數據流參考 :ref:回寫(xiě)數據流 <writeback_flow>。
/app/sample/S83_Sample/S83E04_Module/display_sample/script/display_sample.sh display_writeback_sample
IDU oneshot 運行命令:display_oneshot_sample,數據流參考 :ref:回寫(xiě)數據流 <writeback_flow>。
/app/sample/S83_Sample/S83E04_Module/display_sample/script/display_sample.sh display_oneshot_sample
PYM 輸出綁定 IDU 運行命令:display_bind_sample,數據流參考 :ref:綁定場(chǎng)景數據流 <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 兩個(gè)圖層拼接輸出 1920x2160 數據,數據流參考 :ref:回環(huán)場(chǎng)景數據流 <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:回環(huán)場(chǎng)景數據流 <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
運行參數說(shuō)明:
可通過(guò)-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
運行結果說(shuō)明:
以下為 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,可以通過(guò)看圖軟件查看,下圖僅為示例,實(shí)際情況請結合輸入圖片進(jì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].
運行結束后可以看到當前目錄有五張 yuv 圖片,格式為 NV12 1080P,可以通過(guò)看圖軟件查看,下圖僅為示例,實(shí)際情況請結合輸入圖片進(jì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].
本文通過(guò) MIPI CSI TX 發(fā)送 10000 幀數據,可以通過(guò) 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].
本文通過(guò) MIPI CSI TX0 發(fā)送 5 幀數據,通過(guò) MAX9295E->MAX96712 回環(huán)到 RX0,通過(guò) CIM 將數據存到 DDR,然后存成文件,可以通過(guò)看圖軟件查看,下圖僅為示例,實(shí)際情況請結合輸入圖片進(jì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].
本文通過(guò) MIPI CSI TX1 發(fā)送 5 幀數據,通過(guò) MAX9295E->MAX96712 回環(huán)到 RX0,
通過(guò) CIM 將數據存到 DDR,然后存成文件,可以通過(guò)看圖軟件查看,下圖僅為示例,實(shí)際情況請結合輸入圖片進(jì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].
本文通過(guò)兩路 MIPI CSI TX 發(fā)送 5 幀數據,通過(guò) MAX9295E->MAX96712 回環(huán)到 RX0,通過(guò) CIM 將數據存到 DDR,然后存成文件,可以通過(guò)看圖軟件查看,本 sample 效果和 TX0、TX1 單路輸出相同,實(shí)際情況請結合輸入圖片進(jìn)行確認。
以下為 1v_ovx8b_rx0_cpe0_idu0_tx0_max9295e 正常運行的 log,sample 運行時(shí)長(cháng)為 100 秒,可以通過(guò)腳本中的-T 參數進(jìn)行時(shí)長(cháng)設置:
[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].
本文通過(guò) MIPI CSI TX 將 OVX8B 的輸入數據進(jìn)行發(fā)送,可以接入 MIPI RX 查看數據。在運行時(shí)可以通過(guò)命令“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
*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。