精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

全志Tina Linux MPP開發(fā)指南

嵌入式Linux那些事 ? 來源:嵌入式Linux那些事 ? 作者:嵌入式Linux那些事 ? 2023-03-06 10:33 ? 次閱讀


全志Tina Linux MPP 開發(fā)指南支持百問網(wǎng)T113 D1-H哪吒DongshanPI-D1s V853-Pro等開發(fā)板

image-20221123145359081image-20221123145359081image-20221123145359081image-20221123145359081image-20221123145359081

1 簡述

整理 MPP sample 使用說明文檔的目的是:使 MPP sample 更好用。

2 簡介

MPP sample 一般存放在 MPP Middleware 的 sample 目錄下。此外,MPP Framework 的 demo 目錄下也有一些 sample。 本文檔主要介紹 MPP Middleware 各 sample 的基本使用方法:配置、編譯、測試以及 sample 類別、各平臺方案上的支持情況和測試方法等。 文末 FAQ 部分對音視頻編解碼功能的測試方法和測試工具的使用做了詳細介紹。

3 配置

本章節(jié)主要介紹 MPP sample 的配置方法。目前 Tina 和 Melis 上存在差異。

3.1 Tina 上 MPP sample 的配置方法

Tina V853、V833 和 V536 方案上,MPP sample 支持從 menuconfig 中配置。選中 [*] select mpp sample 之后,當前支持測試的 MPP sample 就會顯示出來,默認都是未選中的狀態(tài)。此時, 可以勾選想要測試的 sample,然后保存配置,重新編譯 MPP 即可。

$ make menuconfig

Allwinner ---> eyesee-mpp ---> [*] select mpp sample

Tina 其他方案(如:V316 等)上,目前 MPP sample 不支持從 menuconfig 中配置。若想開啟 或關(guān)閉 sample,只能修改 tina.mk 文件,然后重新編譯 MPP。

各 sample 對組件的依賴關(guān)系詳情,請參考文件 tinapackageallwinnereyesee-mppmiddleware Config.in。

因為每個 MPP sample 編譯時,依賴的 MPP 組件不一樣,所以,只有當支持的 MPP 組 件打開后,相關(guān)的 MPP sample 才會顯示出來。否則,不可見。

由于在編譯 MPP 基礎(chǔ)庫libaw_mpp.a 或 libmedia_mpp.so 時,mpi region 是默認開啟的, 且 mpi region 依賴 mpi_vi 和 mpi_venc,所以 mpi_vi 和 mpi_venc 是運行 MPP sample 的基礎(chǔ)組件,需要保持常開。

3.2 Melis 上 MPP sample 的配置方法

Melis 上各方案,目前 MPP sample 不支持從 menuconfig 中配置。若想開啟或關(guān)閉 sample,只 能修改 Makefile 文件,然后重新編譯 MPP。

4 編譯

本章節(jié)主要介紹 MPP sample 的編譯方法。

以下以 tina 為例。

編譯命令

cleanmpp && mkmpp

編譯后 MPP sample 測試程序和配置文件存放位置

有兩個位置:

(1)每個 MPP sample 的源碼目錄下tinaexternaleyesee-mppmiddlewaresun8iw21samplesample_xxx(2)統(tǒng)一存放到bin目錄下tinaexternaleyesee-mppmiddlewaresun8iw21samplebin

PS:由于 MPP sample 測試程序個數(shù)較多,且每個測試程序大小約 10M 左右,故不方便打包 到文件系統(tǒng)中,測試時需要接 SD 卡,同時把測試程序和配置文件放到 SD 卡中進行測試。

5 測試

本章節(jié)主要介紹 MPP sample 的測試方法。

5.1 在板端用串口測試

1.將測試程序和配置拷貝到 SD 卡,然后將 SD 卡接到板端。

2.將 SD 卡 mount 到/mnt/extsd 目錄,檢查測試程序和配置是否在路徑/mnt/extsd 下,然后準備測試。

mkdir -p /mnt/extsd

mount -t vfat /dev/mmcblk0p1 /mnt/extsd

5.2 在 PC 端用 adb shell 測試

前提,需要配置 sdk 支持 adb(一般默認都支持)。

在 PC 端啟動 Windows PowerShell 終端,然后切換到測試程序和配置所在路徑。

在 Windows PowerShell 終端,使用 adb push 命令將測試程序和配置推送到板端。

> adb push .sample_virvi2vencsample_virvi2venc /mnt/extsd/

.sample_virvi2vencsample_virvi2venc: 1 file pushed. 3.4 MB/s (8699676 bytes in 2.442s)>> adb push .sample_virvi2vencsample_virvi2venc.conf /mnt/extsd/.sample_virvi2vencsample_virvi2venc.conf: 1 file pushed. 0.1 MB/s (693 bytes in 0.005s)

在 Windows PowerShell 終端,使用 adb shell 命令登錄到板端,然后準備測試。

5.3 測試指令

以下分別以 sample_driverVipp 和 sample_virvi2venc 為例介紹沒有配置文件和有配置文件兩 種情況下,MPP sample 的測試指令。 【Tina】

# cd /mnt/extsd/

# ./sample_driverVipp # 需要逐個指定參數(shù)。或者一次性指定所有測試參數(shù)# ./sample_driverVipp 0 1920 1080 8 60 0 10 60 /mnt/extsd/

【Melis】

Melis上該sample的位置:

melissourceekernelsubsysavframeworkv4l2driversmediaplatformsunxi-vinsample_driverVipp測試方法:sample_driverVipp 0 1920 1080 8 60 0 10 60 /mnt/E/

【Tina】

# cd /mnt/extsd/

# ./sample_virvi2venc -path ./sample_virvi2venc.conf

【Melis】

# sample_virvi2venc -path ./mnt/E/sample_virvi2venc.conf

6 類別

本章節(jié)主要介紹 MPP sample 的分類情況。

參考 MPP Middleware sample 目錄下的文檔 SampleManual.md ,目前主要分成以下幾類:

? 視頻

? 音頻

? ISE 和 EIS

? 視頻顯示

? G2D

? CE

? UVC 和 UAC

? 多媒體文件

? AI demo

? 其他

【視頻】

? sample_driverVipp 演示直接調(diào)用 linux 內(nèi)核驅(qū)動獲取 frame

? sample_virvi 視頻采集

? sample_virvi2vo 演示視頻采集預覽

? sample_virvi2vo_zoom 演示縮放

? sample_vi_reset 演示 mpi_vi 組件的 reset 流程

? sample_isposd 測試 isp 相關(guān)

? sample_vin_isp_test 通過調(diào)用 isp 接口抓圖的 demo

? sample_region 測試 osd

? sample_venc 視頻編碼

? sample_venc2muxer 演示視頻編碼和封裝 mp4

? sample_virvi2venc 演示采集到編碼

? sample_timelapse 演示縮時錄影

? sample_virvi2venc2muxer 演示采集到編碼到封裝 mp4

? sample_multi_vi2venc2muxer 演示多路編碼

? sample_rtsp 演示視頻編碼后的 rtsp 傳輸

? sample_CodecParallel 演示同編同解

? sample_vdec 視頻解碼

? sample_demux2vdec 演示解封裝和解碼

? sample_demux2vdec_saveFrame 從原始文件中分離出視頻數(shù)據(jù)幀并解碼生成 yuv 文件

? sample_demux2vdec2vo 演示解碼顯示

? sample_vencQpMap 演示視頻編碼 QPMAP 模式

? sample_OnlineVenc 在線編碼

? sample_vencGdcZoom 編碼 GDC 數(shù)字變焦

? sample_takePicture 演示單拍和連拍

? sample_recorder 演示四路錄制編碼封裝或者預覽顯示

? sample_vencRecreate 演示動態(tài)配置編碼格式、幀率、碼率等功能

【音頻】

? sample_ai 演示音頻采集

? sample_ao 演示音頻輸出

? sample_aoSync 演示采用同步的方式 send pcm frame。而 sample_ao 是采用異步的方式

? sample_ao_resample_mixer 演示讀取 pcm 數(shù)據(jù),然后播放聲音,從耳機口輸出聲音

? sample_ao2ai_aec 回聲消除,初版

? sample_ao2ai_aec_rate_mixer 回聲消除,初版基礎(chǔ)上測試打開音頻輸出重采樣和混音功能 后,回聲消除是否正常

? sample_aec 回聲消除,修改版

? sample_aenc 音頻編碼

? sample_ai2aenc 音頻采集和編碼

? sample_ai2aenc2muxer 音頻采集、編碼和封裝

? sample_select 演示多路音頻編碼,用 select() 方式獲取編碼碼流

? sample_adec 音頻解碼

? sample_adec2ao 音頻解碼輸出

? sample_demux2adec 從原始文件中分離出音頻數(shù)據(jù)幀并解碼

? sample_demux2adec2ao 從原始文件中分離出音頻數(shù)據(jù)幀并解碼輸出音頻

【ISE 和 EIS】

? sample_fish 演示單目魚眼功能

? sample_virvi2fish2venc 演示魚眼圖像畸形校正后做編碼

? sample_virvi2fish2vo 演示魚眼圖像畸形校正后預覽

? sample_virvi2eis2venc 演示防抖功能

? sample_ise_dzoom 演示 ise 縮放功能

? sample_gdc_dzoom 演示 gdc 縮放功能

【視頻顯示】

? sample_vo 演示視頻 YUV 預覽

? sample_UILayer 驗證 UILayer 的格式

【G2D】

? sample_g2d 演示直接用 G2D 處理 YUV 文件做透明疊加、旋轉(zhuǎn)和鏡像、縮放等

? sample_vi_g2d 演示從 VI 獲取視頻幀,用 G2D 做旋轉(zhuǎn)、裁剪、縮放等處理后送 VO 顯示

【CE】

? sample_twinchn_virvi2venc2ce 兩路 ce 加解密測試

? sample_virvi2venc2ce 單路 ce 加解密測試

【UVC 和 UAC】

? sample_uvc2vdec_vo 做主,mjpeg 解碼顯示

? sample_uvc2vdenc2vo 做主,mjpeg 解碼顯示

? sample_uvc2vo 做主,yuv 顯示

? sample_uvc_vo 做主,yuv 顯示

? sample_uvcout 做從,mjpeg 編碼輸出

? sample_uac 演示 uac 測試

? sample_usbcamera 測試 UVC、UAC 復合設備

【多媒體文件】

? sample_demux 解復用 mp4 文件

? sample_file_repair 修復 mp4 文件

【AI demo】

? sample_odet_demo 目標檢測演示示例

? sample_RegionDetect 演示區(qū)域檢測

【其他】

? sample_glog 演示 glog 庫的用法

? sample_hello 演示 MPP helloworld 程序

? sample_pthread_cancel 測試 pthread_cancel()

? sample_motor 電機測試

? sample_sound_controler 語音識別

? sample_ai_Demo_0.9.2 智能算子 demo

? sample_ai_Demo_0.9.6 智能算子 demo

? sample_thumb 縮略圖

? sample_nna 人形檢測和人臉檢測

? sample_MotionDetect 移動偵測

? sample_PersonDetect 人形檢測

? sample_directIORead 演示使用 directIO 方式讀文件

7 狀態(tài)

本章節(jié)主要介紹當前各 MPP sample 的狀態(tài),即:分別在 Tina 和 Melis 各平臺方案上的支持情 況。

7.1 Tina 各平臺方案上 MPP sample 支持情況

說明

標注 “Y” 則表示該 sample 支持在該平臺方案上測試,未標注則表示不支持。

MPP sample V853 V833 V536 V533 V316
總數(shù) 61 54 39 45 33
視頻 26 19 13 17 11
sample_driverVipp Y Y Y
sample_virvi Y Y Y Y Y
sample_virvi2vo Y Y Y Y Y
sample_virvi2vo_zoom Y Y
sample_vi_reset Y Y Y
sample_isposd Y Y Y
sample_vin_isp_test Y Y Y
sample_region Y Y Y Y Y
sample_venc Y Y Y Y Y
sample_venc2muxer Y Y Y Y Y
sample_virvi2venc Y Y Y Y Y
sample_timelapse Y Y Y Y
sample_virvi2venc2muxer Y Y Y Y Y
sample_multi_vi2venc2muxer Y Y
sample_rtsp Y Y Y Y
sample_CodecParallel Y Y
sample_vdec Y Y Y Y Y
sample_demux2vdec Y Y Y Y Y
sample_demux2vdec_saveFrame Y Y Y Y Y
sample_demux2vdec2vo Y Y Y Y Y
sample_vencQpMap Y
sample_OnlineVenc Y
sample_vencGdcZoom Y
sample_takePicture Y
sample_recorder Y
音頻 14 14 9 10 9
sample_ai Y Y Y Y Y
sample_ao Y Y Y Y Y
sample_aoSync Y Y
sample_ao_resample_mixer Y Y
sample_ao2ai_aec Y Y Y
sample_ao2ai_aec_rate_mixer Y Y
sample_aec Y Y
sample_aenc Y Y Y Y Y
sample_ai2aenc Y Y Y Y Y
sample_ai2aenc2muxer Y Y Y Y Y
sample_select Y Y Y Y Y
sample_adec Y Y Y Y Y
sample_demux2adec Y Y Y Y Y
sample_demux2adec2ao Y Y Y Y Y
ISE 和 EIS 0 4 6 4 5
sample_fish Y Y Y Y
sample_virvi2fish2venc Y Y Y Y
sample_virvi2fish2vo Y Y Y Y
sample_virvi2eis2venc Y Y Y Y
sample_ise_dzoom Y
sample_gdc_dzoom Y Y
視頻顯示 2 2 1 2 1
sample_vo Y Y Y Y Y
sample_UILayer Y Y Y
G2D 2 2 1 1 1
sample_g2d Y Y Y Y Y
sample_vi_g2d Y Y
CE 2 2 0 2 0
sample_twinchn_virvi2venc2ce Y Y Y
sample_virvi2venc2ce Y Y Y
UVC 和 UAC 7 5 5 5 5
sample_uvc2vdec_vo Y Y Y Y Y
sample_uvc2vdenc2vo Y Y Y Y Y
sample_uvc2vo Y Y Y Y Y
sample_uvc_vo Y Y Y Y Y
sample_uvcout Y Y Y Y Y
sample_uac Y
sample_usbcamera Y
多媒體文件 2 2 2 1 1
sample_demux Y Y Y Y Y
sample_file_repair Y Y Y
AI demo 2 0 0 0 0
sample_odet_demo Y
sample_RegionDetect Y
其他 6 3 2 4 0
sample_glog Y Y Y Y
sample_hello Y Y Y Y
sample_pthread_cancel Y Y
sample_motor Y
sample_sound_controler Y
sample_ai_Demo_0.9.2
sample_ai_Demo_0.9.6
sample_thumb
sample_nna
sample_MotionDetect Y
sample_PersonDetect Y
sample_directIORead Y

7.2 Melis 各平臺方案上 MPP sample 支持情況

說明

標注 “Y” 則表示該 sample 支持在該平臺方案上測試,未標注則表示不支持。

MPP sample V459
總數(shù) 21
視頻 9
sample_driverVipp Y
sample_virvi Y
sample_virvi2vo Y
sample_virvi2vo_zoom Y
sample_vi_reset
sample_isposd
sample_vin_isp_test
sample_region Y
sample_venc
sample_venc2muxer
sample_virvi2venc Y
sample_timelapse
sample_virvi2venc2muxer Y
sample_multi_vi2venc2muxer Y
sample_rtsp
sample_CodecParallel
sample_vdec
sample_demux2vdec
sample_demux2vdec_saveFrame
sample_demux2vdec2vo Y
音頻 9
sample_ai Y
sample_ao Y
sample_ao_resample_mixer
sample_ao2ai_aec Y
sample_ao2ai_aec_rate_mixer
sample_aec Y
sample_aenc Y
sample_ai2aenc
sample_ai2aenc2muxer Y
sample_select
sample_adec Y
sample_demux2adec
sample_demux2adec2ao Y
sample_aoSync Y
ISE 和 EIS 1
sample_fish
sample_virvi2fish2venc
sample_virvi2fish2vo Y
sample_virvi2eis2venc
sample_ise_dzoom
sample_gdc_dzoom
視頻顯示 0
sample_vo
sample_UILayer
G2D 1
sample_g2d
sample_vi_g2d Y
CE 0
sample_twinchn_virvi2venc2ce
sample_virvi2venc2ce
UVC 0
sample_uvc2vdec_vo
sample_uvc2vdenc2vo
sample_uvc2vo
sample_uvc_vo
sample_uvcout
多媒體文件 00
sample_demux
sample_file_repair
其他 1
sample_glog
sample_hello
sample_pthread_cancel
sample_motor
sample_sound_controler
sample_ai_Demo_0.9.2
sample_ai_Demo_0.9.6
sample_thumb Y
sample_nna

8 正文

本章節(jié)具體介紹 MPP 各 sample 的測試方法。主要包括:測試目的、組件依賴、測試通路、源 文件、目標文件、參數(shù)配置、測試指令、退出測試、預期結(jié)果等。

8.1 視頻

8.1.1 sample_driverVipp

測試目的:

演示直接調(diào)用vin驅(qū)動接口獲取視頻幀。 該sample沒有使用任何mpp組件。

組件依賴:

測試通路:

image-20221120170233258

?

圖 8-1: MPP_sample 測試通路-sample_driverVipp

?

源文件:

目標文件:

每隔若干幀保存一幀到指定的output目錄。

參數(shù)配置:

video_device: 指定vipp設備節(jié)點,通常取值0、1、2、3(對于V853,通常取值0、4、8、12)。 capture_width: 指定camera采集的圖像寬度。 capture_height: 指定camera采集的圖像高度。 pixel_format: 指定camera采集的圖像格式。 fps: 指定camera采集的幀率。 test_frame_count: 指定測試采集的frame總數(shù),0表示無限。 store_count: 指定保存的圖像數(shù)量。 store_interval: 指定保存圖像的周期,即每n幀圖像保存1幀。 frame_saving_path: 指定保存圖像的目錄,該目錄要確保存在。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_driverVipp # 需要逐個指定參數(shù)。 或者一次性指定所有測試參數(shù) # ./sample_driverVipp 0 1920 1080 8 60 0 10 60 /mnt/extsd/

【Melis】

Melis上該sample的位置: melissourceekernelsubsysavframeworkv4l2driversmediaplatformsunxi-vin sample_driverVipp 測試方法: sample_driverVipp 0 1920 1080 8 60 0 10 60 /mnt/E/

8.1.2 sample_virvi

測試目的:

演示采集圖像幀,最多可支持4路vipp采集。 該sample測試mpi_vi組件。

組件依賴:

mpp_vi

測試通路:

image-20221120170355890

?

圖 8-2: MPP_sample 測試通路-sample_virvi

?

源文件:

目標文件:

1. 連續(xù)YUV文件 /mnt/extsd/test.yuv 2. 單幀YUV文件 存放在指定路徑/mnt/extsd 下面

參數(shù)配置:

最多支持4路vipp采集,這4路的參數(shù)可單獨配置。 第0路vipp的參數(shù)配置 dev_num_0: 指定vipp設備ID,通常取值0,表示vipp0(對于V853,通常也取值0,表示vipp0)。 isp_dev_num_0: 指定isp設備ID,通常取值0,表示isp0。 pic_width_0: 指定vipp采集圖像的寬度。 pic_height_0: 指定vipp采集圖像的高度。 frame_rate_0: 指定vipp采集圖像的幀率。 pic_format_0: 指定vipp采集圖像的像素格式。 color_space_0: 指定vipp采集圖像的顏色空間格式。 enable_wdr_mode_0: 指定vipp采集圖像是否開啟WDR。 drop_frm_num_0: 指定vipp開始前丟棄的幀數(shù)。 第1路vipp的參數(shù)配置 dev_num_1: 指定vipp設備ID,通常取值1,表示vipp1(對于V853,通常取值4,表示vipp4)。 isp_dev_num_1: 指定isp設備ID,通常取值0,表示isp0。 pic_width_1: 指定vipp采集圖像的寬度。 pic_height_1: 指定vipp采集圖像的高度。 frame_rate_1: 指定vipp采集圖像的幀率。 pic_format_1: 指定vipp采集圖像的像素格式。 color_space_1: 指定vipp采集圖像的顏色空間格式。 enable_wdr_mode_1: 指定vipp采集圖像是否開啟WDR。 drop_frm_num_1: 指定vipp開始前丟棄的幀數(shù)。 第2路vipp的參數(shù)配置 dev_num_2: 指定vipp設備ID,通常取值2,表示vipp2(對于V853,通常取值8,表示vipp8)。 isp_dev_num_2: 指定isp設備ID,通常取值0,表示isp0。 pic_width_2: 指定vipp采集圖像的寬度。 pic_height_2: 指定vipp采集圖像的高度。 frame_rate_2: 指定vipp采集圖像的幀率。 pic_format_2: 指定vipp采集圖像的像素格式。 color_space_2: 指定vipp采集圖像的顏色空間格式。 enable_wdr_mode_2: 指定vipp采集圖像是否開啟WDR。 drop_frm_num_2: 指定vipp開始前丟棄的幀數(shù)。 第3路vipp的參數(shù)配置 dev_num_3: 指定vipp設備ID,通常取值3,表示vipp3(對于V853,通常取值12,表示vipp12)。 isp_dev_num_3: 指定isp設備ID,通常取值0,表示isp0。 pic_width_3: 指定vipp采集圖像的寬度。 pic_height_3: 指定vipp采集圖像的高度。 frame_rate_3: 指定vipp采集圖像的幀率。 pic_format_3: 指定vipp采集圖像的像素格式。 color_space_3: 指定vipp采集圖像的顏色空間格式。 enable_wdr_mode_3: 指定vipp采集圖像是否開啟WDR。 drop_frm_num_3: 指定vipp開始前丟棄的幀數(shù)。 指定需要保存哪一路vipp的YUV數(shù)據(jù),以及保存的幀數(shù)和文件 save_pic_dev: 保存指定vipp的YUV數(shù)據(jù)。 yuv_frm_count: 指定保存的圖像幀數(shù)。 yuv_file: 指定保存的路徑和文件名。 保存 save_pic_dev 指定vipp的單幀YUV數(shù)據(jù)的總幀數(shù)、間隔和位置 raw_store_count: 指定保存單幀YUV數(shù)據(jù)的總幀數(shù)。 raw_store_interval: 指定保存單幀YUV數(shù)據(jù)的間隔,單位: 幀。 store_dir: 指定保存單幀YUV數(shù)據(jù)的位置。 指定保存 YUV 的 buffer 長度和個數(shù) save_pic_buffer_len: 指定保存 YUV 的 buffer 長度,默認值0,表示根據(jù)像素格式和分辨率自動換算 buffer 長 度。 save_pic_buffer_num: 指定保存 YUV 的 buffer 個數(shù)。 test_duration: 測試時間,單位: s。

測試指令:

【Tina】

# cd /mnt/extsd/ # # ./sample_virvi -path ./sample_virvi.conf

【Melis】

# sample_virvi -path ./mnt/E/sample_virvi.conf

退出測試:

測試達到設定的時間后自動退出測試,或者按 “ctrl + c” 提前結(jié)束測試。

預期結(jié)果:

1.測試程序運行正常,測試過程沒有異常打印。 2.使用 YUView 軟件查看測試生成的 YUV 文件正常。

8.1.3 sample_virvi2vo

測試目的:

演示采集+預覽。 該sample測試mpi_vi和mpi_vo組件的綁定組合。 創(chuàng)建mpi_vi和mpi_vo,將它們綁定,再分別啟動。mpi_vi采集圖像,直接傳輸給mpi_vo顯示。

組件依賴:

mpp_vi mpp_hw_display mpp_vo

測試通路:

image-20221120170432649

?

圖 8-3: MPP_sample 測試通路-sample_virvi2vo

?

源文件:

目標文件:

參數(shù)配置:

以下配置支持測試:3路vipp采集+vo不同layer同時預覽,再加上ui顯示。 vipp0采集 + vo layer0預覽的配置 capture_width: 指定vipp0采集圖像的寬度。 capture_height: 指定vipp0采集圖像的高度。 display_x: 指定vo顯示輸出圖像的x坐標。 display_y: 指定vo顯示輸出圖像的y坐標。 display_width: 指定vo顯示輸出圖像的寬度。 display_height: 指定vo顯示輸出圖像的高度。 layer_num: 指定vo顯示的層數(shù),通常取值為0,表示vo的layer0。 dev_num: 指定vipp設備號,通常取值為0,表示vipp0(對于V853,通常取值為0,表示vipp0)。 vipp4采集 + vo layer4預覽的配置 capture_width2: 指定vipp0采集圖像的寬度。 capture_height2: 指定vipp0采集圖像的高度。 display_x2: 指定vo顯示輸出圖像的x坐標。 display_y2: 指定vo顯示輸出圖像的y坐標。 display_width2: 指定vo顯示輸出圖像的寬度。 display_height2: 指定vo顯示輸出圖像的高度。 layer_num2: 指定vo顯示的層數(shù),通常取值為4,表示vo的layer4。 dev_num2: 指定vipp設備號,通常取值為1,表示vipp1(對于V853,通常取值為4,表示vipp4)。 vipp8采集 + vo layer8預覽的配置 capture_width3: 指定vipp0采集圖像的寬度。 capture_height3: 指定vipp0采集圖像的高度。 display_x3: 指定vo顯示輸出圖像的x坐標。 display_y3: 指定vo顯示輸出圖像的y坐標。 display_width3: 指定vo顯示輸出圖像的寬度。 display_height3: 指定vo顯示輸出圖像的高度。 layer_num3: 指定vo顯示的層數(shù),通常取值為8,表示vo的layer8。 dev_num3: 指定vipp設備號,通常取值為2,表示vipp2(對于V853,通常取值為8,表示vipp8)。 add_ui_layer: 是否增加UI層,默認0,表示不增加。 ui_test_layer: 指定UI顯示的layer。 ui_display_width: 指定UI顯示的寬度。 ui_display_height: 指定UI顯示的高度。 disp_type: 指定顯示設備類型,比如:lcd、hdmi、cvbs。 pic_format: 指定像素格式。 frame_rate: 指定幀率,單位: fps。 test_duration: 測試時間,單位: s。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_virvi2vo -path ./sample_virvi2vo.conf

【Melis】

# sample_virvi2vo -path ./mnt/E/sample_virvi2vo.conf

退出測試:

測試達到設定的時間后自動退出測試,或者按 “ctrl + c” 提前結(jié)束測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 屏幕實時顯示視頻圖像正常,無卡頓、花屏等。

8.1.4 sample_virvi2vo_zoom

測試目的:

演示直接使用pi_vi和mpi_vo組件實現(xiàn)圖像的縮放,可支持4K圖像縮放。 該sample測試mpi_vi和mpi_vo組件的非綁定。 mpi_vi采集圖像,經(jīng)過縮放算法處理后,把指定區(qū)域送給mpi_vo顯示。

組件依賴:

mpp_vi mpp_hw_display mpp_vo

測試通路:

image-20221120170458268

?

圖 8-4: MPP_sample 測試通路-sample_virvi2vo_zoom

?

源文件:

目標文件:

參數(shù)配置:

capture_width: 指定camera采集圖像的寬度。 capture_height: 指定camera采集圖像的高度。 display_width: 指定vo顯示輸出圖像的寬度。 display_height: 指定vo顯示輸出圖像的高度。 dev_num: 指定vipp設備號。 disp_type: 指定vo顯示設備類型(hdmi, lcd, cvbs)。 pic_format: 指定camera采集的圖像像素格式。 frame_rate: 指定camera采集的幀率,單位: fps。 test_duration: 指定測試時間,單位: s。 zoom_speed: 縮放的速度,一般建議設置為10。值越小,速度越快。 zoom_max_cnt: 縮放的次數(shù)。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_virvi2vo_zoom -path ./sample_virvi2vo_zoom.conf

【Melis】

# sample_virvi2vo_zoom -path /mnt/E/sample_virvi2vo_zoom.conf

結(jié)束測試:

達到縮放次數(shù)或指定測試時間后自動退出測試,或者按 “ctrl + c” 提前結(jié)束測試

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 屏幕實時顯示視頻圖像縮放效果正常,無卡頓、花屏等。

8.1.5 sample_vi_reset

測試目的:

該sample 演示vi 組件的reset 流程。

組件依賴:

測試通路:

image-20221120172327049

?

圖 8-5: MPP_sample 測試通路-sample_vi_reset

?

源文件:

目標文件:

參數(shù)配置:

test_count: 指定測試的次數(shù)。 指定測試vipp id的起止范圍 vipp_id_start: 指定測試起始的vipp id,通常取值0,表示vipp0(對于V853,表示vipp0)。 vipp_id_end: 指定測試結(jié)束的vipp id,通常取值3,表示vipp3(對于V853,表示vipp12)。對于V853,由于當前 vipp12被LDC(直方圖均衡)功能占用,無法測試,故實測時取值2。即測試前3個vipp。 注:通過修改isp配置,關(guān)閉LDC功能后,可以測試全部4個vipp。

測試指令: 【Tina】

# cd /mnt/extsd/ # ./sample_vi_reset

【Melis】

暫不支持。

退出測試:

到達測試次數(shù)后自動退出測試,或者按 “ctrl + c” 提前結(jié)束測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。

8.1.6 sample_isposd

測試目的:

該sample測試mpi_vi和mpi_venc組件綁定。 創(chuàng)建mpi_vi和mpi_venc,將它們綁定,再分別啟動。mpi_vi采集圖像,調(diào)用mpi_vi相關(guān)接口獲取實時的ISP參數(shù)添加overlay到VENC通道。

組件依賴:

mpp_vi mpp_venc mpp_system_rgb_ctrl

測試通路:

image-20221120172512591

?

圖 8-6: MPP_sample 測試通路-sample_isposd

?

源文件:

目標文件:

/mnt/extsd/testRegion.h264

參數(shù)配置:

capture_width: 指定camera采集圖像的寬度。 capture_height: 指定camera采集圖像的高度。 pic_format: 指定camera采集圖像的像素格式。 frame_rate: 指定camera采集的幀率。 test_duration: 指定測試時間,單位: s。 overlay_x,overlay_y,overlay_w,overlay_h: 指定overlay類型的region參數(shù)。 cover_x,cover_y,cover_w,cover_h: 指定cover類型的region參數(shù)。 add_venc_channel: 指定是否選擇VENC通道,默認0,表示不選擇編碼通道。 encoder_count: 保存編碼視頻的幀數(shù)。 bit_rate: 指定編碼的碼率,單位: bps。 encoder_type: 指定編碼類型(H.265、H.264、MJPEG)。 output_file_path: 指定編碼視頻的保存路徑。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_isposd -path ./sample_isposd.conf

【Melis】

暫不支持。

退出測試:

到達測試時間后自動退出測試,或者按 “ctrl + c” 提前結(jié)束測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 生成的編碼文件 testRegion.h264 的osd效果正常,且位置正確。

8.1.7 sample_vin_isp_test

測試目的:

該sample 用于測試ISP通路,是通過調(diào)用 isp 接口抓圖的 demo

組件依賴:

測試通路:

image-20221120172530947

?

圖 8-7: MPP_sample 測試通路-sample_vin_isp_test

?

源文件:

目標文件:

參數(shù)配置:

參數(shù)1:選擇通道 參數(shù)2:分辨率寬 參數(shù)3:分辨率高 參數(shù)4:保存路徑 參數(shù)5:保存幀數(shù) 參數(shù)6:測試次數(shù) 參數(shù)7:FPS 參數(shù)8:WDR開關(guān)

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_vin_isp_test

【Melis】

暫不支持。

退出測試:

測試達到指定次數(shù)后自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 使用YUView 軟件分析生成的YUV文件正常。

8.1.8 sample_region

測試目的:

演示vipp和venc的osd功能。對于V459和V833,vipp只支持orl,venc只支持overlay和cover。 該sample測試mpi_vi和mpi_vo組件或者mpi_vi和mpi_venc組件綁定。 創(chuàng)建mpi_vi和mpi_vo,將它們綁定,再分別啟動。mpi_vi采集圖像,添加overlay和cover不同的region到VI通道,傳輸給mpi_vo顯示。 也可以選擇加入mpi_vi和mpi_venc組件綁定,把region添加到VENC通道上,保存編碼后的視頻數(shù)據(jù)文件,可以用VLC播放。

組件依賴:

測試通路:

image-20221120172548521

?

圖 8-8: MPP_sample 測試通路-sample_regio

?

源文件:

目標文件:

/mnt/extsd/testRegion.h264

參數(shù)配置:

online_en: 指定是否開啟在線編碼,默認0,表示不開啟在線編碼,即當前為離線編碼。 online_share_buf_num: 指定在線編碼的共享buffer個數(shù)(1或2),默認2,表示2個buffer。注意該配置僅當配置在 線模式時才生效。 vipp_dev: 指定vipp設備號,默認0,表示vipp0。 ve_ch_id: 指定編碼通道,默認0,表示venc ch0。 rgn_attach_to_vi: 指定是否測試vipp的osd,默認1,表示測試vipp的osd,其實主要是測試vipp orl功能。 add_venc_channel: 指定是否進行編碼,默認yes,表示vipp采集后圖像后送給venc編碼。 rgn_attach_to_ve: 指定是否測試編碼osd,默認1,表示測試編碼osd。注意該配置僅當配置add_venc_channel=yes 時才生效。 change_disp_attr_enable: 指定開啟/關(guān)閉改變osd顯示位置測試,默認1,表示開啟該測試。 以下編碼相關(guān)參數(shù)僅當配置add_venc_channel=yes時生效 encoder_count: 指定編碼的總幀數(shù)。 bit_rate: 指定編碼的碼率,單位: bps。 encoder_type: 指定編碼格式(H.264、H265)。 output_file_path: 指定編碼文件的存放路徑。 配置vipp采集參數(shù) capture_width: 指定camera采集圖像的寬度。 capture_height: 指定camera采集圖像的高度。 pic_format: 指定像素格式(nv21,nv12,yu12,yv12; aw_lbc_2_5x,aw_lbc_2_0x,aw_lbc_1_5x,aw_lbc_1_0x )。 frame_rate: 指定幀率,單位: fps。 注:當設置以下顯示的寬度和高度為0時,表示不顯示。 disp_width: 指定顯示的寬度。 disp_height: 指定顯示的高度。 bitmap_format: 指定位圖的格式(ARGB8888、ARGB1555)。 注:當設置以下overlay、cover、orl的寬度和高度為0時,表示不進行該項測試。 overlay_x: 指定overlay的x坐標。 overlay_y: 指定overlay的y坐標。 overlay_w: 指定overlay的寬度。 overlay_h: 指定overlay的高度。 cover_x: 指定cover的x坐標。 cover_y: 指定cover的y坐標。 cover_w: 指定cover的寬度。 cover_h: 指定cover的高度。 orl_x: 指定orl矩形的x坐標。 orl_y: 指定orl矩形的y坐標。 orl_w: 指定orl矩形的寬度。 orl_h: 指定orl矩形的高度。 orl_thick: 指定orl線條的寬度,單位: 像素個數(shù),默認2,表示2個像素的寬度。 test_duration: 指定測試時間,單位: s。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_region -path ./sample_region.conf

【Melis】

# sample_region -path ./mnt/E/sample_region.conf

退出測試:

測試達到設定的時間后自動退出測試,或者按 “ctrl + c” 提前結(jié)束測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 生成的編碼文件 testRegion.h264 的osd效果正常,且位置正確。 3. 屏幕實時顯示Camera 采集的視頻圖像,同時,顯示一個綠色的框。

8.1.9 sample_venc

測試目的:

該sample 演示從yuv(sample中格式限定為yuv420p)原始數(shù)據(jù)文件xxx.yuv中讀取視頻幀,編碼,將取得的編碼往輸出 文件里面直接寫。生成裸碼流視頻文件。 注意: 如果是h264或h265編碼sample會自動在目標文件的開始加上spspps信息,其他格式則不加。

組件依賴:

mpp_venc

測試通路:

image-20221120172626867

?

圖 8-9: MPP_sample 測試通路-sample_venc

?

源文件:

/mnt/extsd/test.yuv

目標文件:

/mnt/extsd/test.raw

參數(shù)配置:

src_file: 指定原始yuv文件的路徑。 src_width: 指定原始視頻的寬度。 src_height: 指定原始視頻的高度。 dst_file: 指定生成的裸碼流視頻文件路徑。 dst_width: 指定生成的裸碼流視頻的寬度。 dst_height: 指定生成的裸碼流視頻的高度。 src_pixfmt: 指定像素格式(YUV類型: nv21(yvu420sp), yu12(yuv420p), yv12, nv12。LBC壓縮類型: aw_lbc_2_0x, aw_lbc_2_5x, aw_lbc_1_5x, aw_lbc_1_0x)。 color_space: 指定顏色空間(jpeg, rec709, rec709_part_range)。 encoder: 指定編碼格式(H.264、H.265、MJPEG)。 profile: 指定編碼質(zhì)量,對于H264,建議配置High(2),對于H265,建議配置Main(0)。 framerate: 指定幀率,單位: fps。 bitrate: 指定編碼的碼率,單位: bps。 rotate: 指定編碼旋轉(zhuǎn)角度(0, 90, 180, 270),順時針方向。 rc_mode: 指定碼率控制模式(0:CBR, 1:VBR, 2:FIXQP, 3:QPMAP)。 gop_mode: 指定GOP模式(0:NormalP, 1:DualP, 2:SmartP)。 gop_size: 指定GOP大小,當前只針對H265有效,取值范圍[1, 63]。 product_mode: 指定產(chǎn)品類型(0:Normal, 1:IPC)。 sensor_type: 指定sensor類型(0:DisWdr, 1:EnWdr)。 key_frame_interval: 指定I幀間隔。 VBR、CBR模式,編碼參數(shù)。 init_qp: 指定初始QP值,取值范圍(0, 51)。 min_i_qp: 指定I幀最小QP值,取值范圍(0, 51)。 max_i_qp: 指定I幀最大QP值,取值范圍(0, 51)。 min_p_qp: 指定P幀最小QP值,取值范圍(0, 51)。 max_p_qp: 指定P幀最大QP值,取值范圍(0, 51)。 FIXQP模式,編碼參數(shù) i_qp: 指定I幀的QP值,取值范圍(0, 51) p_qp: 指定P幀的QP值,取值范圍(0, 51) VBR模式,編碼參數(shù) moving_th:指定mb16x16中MAD的閾值,取值范圍[0, 31]。 quality: 指定靜態(tài)P幀的位系數(shù),取值范圍[1, 20]。 p_bits_coef: 指定移動P幀的位系數(shù),取值范圍[1, 50]。 i_bits_coef: 指定I幀的位系數(shù),取值范圍[1, 20]。 test_duration: 測試時間,單位: s。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_venc -path ./sample_venc.conf

【Melis】

暫不支持。

退出測試:

測試達到設定的時間后自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 使用VLC 軟件播放裸碼流文件test.raw正常。

8.1.10 sample_venc2muxer

測試目的:

從yuv原始數(shù)據(jù)文件xxx.yuv中讀取視頻幀,編碼,并由muxer進行封裝生成相應的視頻輸出文件。

組件依賴:

mpp_venc mpp_muxer

測試通路:

image-20221120172643094

?

圖 8-10: MPP_sample 測試通路-sample_venc2muxer

?

源文件:

/mnt/extsd/1080p.yuv

目標文件:

/mnt/extsd/1080p.mp4

參數(shù)配置:

yuv_src_file: 指定原始yuv文件的路徑。 yuv_src_size: 指定原始視頻文件的視頻大小,如1080p。 視頻源的region區(qū)域,當設置region_w=0時,不開啟該功能。 以下寬高和坐標要求16對齊。 region_x: 指定region區(qū)域的x坐標。 region_y: 指定region區(qū)域的y坐標。 region_w: 指定region區(qū)域的寬度。 region_h: 指定region區(qū)域的高度。 yuv_src_pixfmt: 指定像素格式(nv21)。 video_dst_file: 指定生成的視頻文件路徑。 video_size: 指定生成的視頻文件視頻大小,如1080p。 video_encoder: 指定視頻編碼格式(H.264、H.265、MJPEG)。 profile: 指定編碼質(zhì)量,對于H264,建議配置High(2),對于H265,建議配置Main(0)。 rc_mode: 指定碼率控制模式(0:CBR, 1:VBR, 2:FIXQP, 3:QPMAP)。 video_framerate: 指定生成視頻文件的幀率,單位: fps。 video_bitrate: 指定生成視頻文件的碼率,單位: bps。 video_duration: 指定生成一個視頻文件的最大持續(xù)時間(如:每個視頻文件長度一分鐘),單位: s。 media_file_format: 指定視頻文件的封裝格式,支持mp4和ts。 test_duration: 指定測試時間,單位: s。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_venc2muxer -path ./sample_venc2muxer.conf

【Melis】

暫不支持。

退出測試:

測試達到設定的時間后自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 使用VLC 軟件播放生成的mp4文件正常。

8.1.11 sample_virvi2venc

測試目的:

該sample測試mpi_vi和mpi_venc組件的綁定組合。創(chuàng)建mpi_vi和mpi_venc,將它們綁定,再分別啟動。 mpi_vi采集圖像,直接傳輸給mpi_venc進行編碼。

組件依賴:

mpp_vi mpp_venc

測試通路:

image-20221120172701504

?

圖 8-11: MPP_sample 測試通路-sample_virvi2venc

?

源文件:

目標文件:

/mnt/extsd/test.raw

參數(shù)配置:

online_en: 指定是否開啟在線編碼,默認0,表示不開啟在線編碼,即當前為離線編碼。 online_share_buf_num: 指定在線編碼的共享buffer個數(shù)(1或2),默認2,表示2個buffer。注意該配置僅當配置在 線模式時才生效。 vipp_id: 指定vipp設備號,默認0,表示vipp0。 wdr_en: 指定是否開啟WDR,默認0,表示不開WDR。 drop_frm_num: 指定丟幀個數(shù),對于離線編碼是vipp丟幀,對于在線編碼是ve編碼前丟幀。 src_width: 指定原始視頻的寬度。 src_height: 指定原始視頻的高度。 vi_buffer_num: 指定VI的buffer個數(shù),僅對離線編碼有效。 saturation_change: 指定飽和度改變的值,默認0,表示不調(diào)整。取值范圍[-256, 512]。 src_pixfmt: 指定像素格式(YUV類型: nv21(yvu420sp), yu12(yuv420p), yv12, nv12。LBC壓縮類型: aw_lbc_2_0x, aw_lbc_2_5x, aw_lbc_1_5x, aw_lbc_1_0x)。 color_space: 指定顏色空間(jpeg, rec709, rec709_part_range)。 venc_ch_id: 指定編碼通道,默認0,表示venc ch0。 video_dst_file: 指定編碼文件的存放路徑。 video_framerate: 指定幀率,單位: fps。 video_bitrate: 指定編碼的碼率,單位: bps。 video_width: 指定生成的裸碼流視頻的寬度。 video_height: 指定生成的裸碼流視頻的高度。 video_encoder: 指定編碼格式(H.264、H.265、MJPEG)。 profile: 指定編碼質(zhì)量,對于H264,建議配置High(2),對于H265,建議配置Main(0)。 ve_freq: 指定VE的頻率,默認0,表示300MHz,單位: MHz。 product_mode: 指定產(chǎn)品類型(0:Normal, 1:IPC)。 sensor_type: 指定sensor類型(0:DisWdr, 1:EnWdr)。 key_frame_interval: 指定I幀間隔。 enable_gdc: 指定是否開啟GDC功能,默認0,表示不開GDC。 rc_mode: 指定碼率控制模式(0:CBR, 1:VBR, 2:FIXQP, 3:QPMAP)。 VBR、CBR模式,編碼參數(shù) init_qp: 指定初始QP值,取值范圍(0, 51)。 min_i_qp: 指定I幀最小QP值,取值范圍(0, 51)。FIXQP模式時,取其值為i_qp。 max_i_qp: 指定I幀最大QP值,取值范圍(0, 51)。 min_p_qp: 指定P幀最小QP值,取值范圍(0, 51)。FIXQP模式時,取其值為p_qp。 max_p_qp: 指定P幀最大QP值,取值范圍(0, 51)。 mb_qp_limit_en: 指定是否開啟mb qp限制,默認0,表示不開啟。 VBR模式,編碼參數(shù) moving_th:指定mb16x16中MAD的閾值,取值范圍[0, 31]。 quality: 指定靜態(tài)P幀的位系數(shù),取值范圍[1, 20]。 p_bits_coef: 指定移動P幀的位系數(shù),取值范圍[1, 50]。 i_bits_coef: 指定I幀的位系數(shù),取值范圍[1, 20]。 gop_mode: 指定GOP模式(0:NormalP, 1:DualP, 2:SmartP)。 gop_size: 指定GOP大小,當前只針對H265有效,取值范圍[1, 63]。 高級跳幀參數(shù) AdvancedRef_Base: 設置該值大于0表示開啟高級跳幀功能,等于0表示關(guān)閉高級跳幀功能。 AdvancedRef_Enhance: 設置Enhance為5。 AdvancedRef_RefBaseEn: 設置該值為1表示開啟參考幀,等于0表示關(guān)閉參考幀。 enable_fast_enc: 指定是否開啟快速編碼,默認0,表示不開啟。 encode_rotate: 指定編碼旋轉(zhuǎn)角度(0, 90, 180, 270),順時針方向。 mirror: 指定編碼鏡像是否開啟,默認0,表示不開啟。取值范圍[0, 1]。 video_duration: 指定生成一個視頻文件的最大持續(xù)時間(如:每個視頻文件長度一分鐘),單位: s。 test_duration: 指定測試時間,單位: s。 color2grey: 指定是否開啟彩轉(zhuǎn)灰功能,默認"no",表示不開啟。取值范圍[“no”, "yes"]。 2D降噪?yún)?shù)配置 2dnr_en: 編碼器2DNR使能,默認1,表示開啟。取值范圍[0, 1]。 2dnr_strength_y: 亮度降噪強度系數(shù)。該值越大,濾波強度越高。默認127,取值范圍[0, 255]。 2dnr_strength_c: 色度降噪強度系數(shù)。該值越大,濾波強度越高。默認127,取值范圍[0, 255]。 2dnr_threshold_y: 亮度鄰域像素降噪開關(guān)閾值。該值越大,越容易觸發(fā)2d濾波。默認7,取值范圍[0, 15]。 2dnr_threshold_c: 色度鄰域像素降噪開關(guān)閾值。該值越大,越容易觸發(fā)2d濾波。默認7,取值范圍[0, 15]。 3D降噪?yún)?shù)配置 3dnr_en: 編碼器3DNR使能,默認1,表示開啟。取值范圍[0, 1]。 3dnr_pix_level_en: 3d濾波權(quán)重系數(shù)自適應修正開關(guān)。默認0,表示不開啟。取值范圍[0, 1]。 3dnr_smooth_en: 像素級3x3平滑濾波使能。默認1,表示開啟。取值范圍[0, 1]。 3dnr_pix_diff_th: 僅當3d_adjust_pix_level_enable為1時生效,自適應修正幅度閾值。該值越大,濾波強度越 高。默認6,取值范圍[0, 31]。 3dnr_max_mv_th: 源圖像素塊運動矢量最大閾值,單個像素塊僅當其水平和垂直MV皆小于該閾值,才會進行3d濾波。該值 越大,越容易觸發(fā)3d濾波。默認2,取值范圍[0, 63]。 3dnr_max_mad_th: 源圖與參考圖之間像素塊的MAD最大閾值,單個像素塊僅當其MAD值小于該閾值,才會進行3d濾波。該 值越大,越容易觸發(fā)3d濾波。默認11,取值范圍[0, 63]。 3dnr_min_coef: 3d濾波權(quán)重系數(shù)的最小閾值。該值越小,自適應3d濾波的強度上限越高。默認14,取值范圍[0, 3 dnr_max_coef]。 3dnr_max_coef: 3d濾波權(quán)重系數(shù)的最大閾值。該值越大,自適應3d濾波的強度下限越低。默認16,取值范圍[3 dnr_min_coef, 16]。 ROI測試參數(shù)配置 roi_num: 指定ROI的個數(shù),默認0,表示不開啟ROI測試。取值范圍[0, 8]。 roi_qp: 指定ROI區(qū)域的QP值,默認50,表示最差質(zhì)量。取值范圍(0, 51)。 roi_BgFrameRateEnable: 指定是否開啟非ROI區(qū)域低幀率編碼,默認0,表示不開啟。 roi_BgFrameRateAttenuation: 指定非ROI區(qū)域的幀率衰減比例,默認3,表示非ROI區(qū)域的幀率是正常幀率的1/3。 IntraRefresh_BlockNum: 指定P幀幀內(nèi)刷新的block個數(shù),默認0,表示不開啟P幀幀內(nèi)刷新功能。 orl_num: 指定ORL(Object Rectangle Label)的個數(shù),取值范圍[0,16]。 配置vbv buffer大小和vbv buffer閾值大小 vbvBufferSize: 指定vbv buffer大小,默認0,表示由mpp middleware自行計算并設置給編碼器,大于0,表示由 app設置。 vbvThreshSize: 指定vbv buffer閾值大小,默認0,表示由mpp middleware自行計算并設置給編碼器,大于0,表示 由app設置。 裁剪編碼參數(shù)設置 crop_en: 指定是否開啟裁剪編碼,默認0,表示不開啟。 crop_rect_x: 指定裁剪區(qū)域的x坐標。 crop_rect_y: 指定裁剪區(qū)域的y坐標。 crop_rect_w: 指定裁剪區(qū)域的寬度。 crop_rect_h: 指定裁剪區(qū)域的高度。 vui_timing_info_present_flag: 指定是否添加VUI信息,默認0,表示不添加。 encpp_disable: 指定是否禁用encpp新通路,默認0,表示不禁用。 super_frm_mode: 指定超級幀模式,默認0,表示不啟用。(0:none, 1:discarded, 2:re-encode)。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_virvi2venc -path ./sample_virvi2venc.conf

【Melis】

# sample_virvi2venc -path ./mnt/E/sample_virvi2venc.conf

退出測試:

測試達到設定的時間后自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 使用VLC 軟件播放生成的裸碼流文件/mnt/extsd/test.raw正常。

8.1.12 sample_timelapse

測試目的:

演示縮時錄影。 從camera節(jié)點取vi輸入數(shù)據(jù),對venc組件設置取幀間隔,設置編碼幀率,并對數(shù)據(jù)進行編碼封裝,生成對應的視頻輸出文件。

組件依賴:

mpp_vi mpp_venc mpp_muxer

測試通路:

image-20221120172720694

?

圖 8-12: MPP_sample 測試通路-sample_timelapse

?

源文件:

目標文件:

/mnt/extsd/timelapse.mp4

參數(shù)配置:

vipp_index: 獲取視頻數(shù)據(jù)的VIPP設備號,默認0,表示vipp0。通常取值0/1/2/3,(對于V853,通常取值0/4/8/12)。 vipp_width: vipp輸出視頻圖像的寬度。 vipp_height: vipp輸出視頻圖像的高度。 vipp_frame_rate: vipp的采集幀率,單位: fps。 timelapse: 縮時錄影模式下取幀的幀間隔,單位: us。 video_frame_rate: 編碼幀率,即設置編碼文件的播放幀率。 video_duration: 編碼文件的播放時長。 video_bitrate: 編碼碼率,單位: Mbps。 video_file_path: 編碼文件的存儲路徑。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_timelapse -path ./sample_timelapse.conf

【Melis】

暫不支持。

退出測試:

最終自動退出測試,默認測試時間有點長,可以按“ctrl + c”退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 使用VLC 軟件播放生成的mp4文件/mnt/extsd/timelapse.mp4正常。

8.1.13 sample_virvi2venc2muxer

測試目的:

從camera 節(jié)點取vi 輸入數(shù)據(jù),并對數(shù)據(jù)進行編碼封裝,生成對應的視頻輸出文件。

組件依賴:

mpi_vi mpp_venc mpp_muxer

測試通路:

image-20221120172731258

?

圖 8-13: MPP_sample 測試通路-sample_virvi2venc2muxer

?

源文件:

目標文件:

/mnt/extsd/test.mp4

參數(shù)配置:

online_en: 指定是否開啟在線編碼,默認0,表示不開啟在線編碼,即當前為離線編碼。 online_share_buf_num: 指定在線編碼的共享buffer個數(shù)(1或2),默認2,表示2個buffer。注意該配置僅當配置在 線模式時才生效。 vipp_id: 指定vipp設備號,默認0,表示vipp0。 wdr_en: 指定是否開啟WDR,默認0,表示不開WDR。 drop_frm_num: 指定丟幀個數(shù),對于離線編碼是vipp丟幀,對于在線編碼是ve編碼前丟幀。 src_width: 指定原始視頻的寬度。 src_height: 指定原始視頻的高度。 vi_buffer_num: 指定VI的buffer個數(shù),僅對離線編碼有效。 saturation_change: 指定飽和度改變的值,默認0,表示不調(diào)整。取值范圍[-256, 512]。 src_pixfmt: 指定像素格式(YUV類型: nv21(yvu420sp), yu12(yuv420p), yv12, nv12。LBC壓縮類型: aw_lbc_2_0x, aw_lbc_2_5x, aw_lbc_1_5x, aw_lbc_1_0x)。 color_space: 指定顏色空間(jpeg, rec709, rec709_part_range)。 venc_ch_id: 指定編碼通道,默認0,表示venc ch0。 video_dst_file: 指定編碼文件的存放路徑。 add_repair_info: 指定是否為mp4文件添加文件修復信息。默認0,表示不添加。 frmsTag_backup_interval: 指定mp4文件修復的frame tag備份的時間間隔,單位:us。 dst_file_max_cnt: 指定muxer封裝mp4文件,最多保留的文件個數(shù)。默認3,表示最多只允許保留3個mp4文件。 video_framerate: 指定幀率,單位: fps。 video_bitrate: 指定編碼的碼率,單位: bps。 video_width: 指定生成的裸碼流視頻的寬度。 video_height: 指定生成的裸碼流視頻的高度。 video_encoder: 指定編碼格式(H.264、H.265、MJPEG)。 profile: 指定編碼質(zhì)量,對于H264,建議配置High(2),對于H265,建議配置Main(0)。 ve_freq: 指定VE的頻率,默認0,表示300MHz,單位: MHz。 product_mode: 指定產(chǎn)品類型(0:Normal, 1:IPC)。 sensor_type: 指定sensor類型(0:DisWdr, 1:EnWdr)。 key_frame_interval: 指定I幀間隔。 enable_gdc: 指定是否開啟GDC功能,默認0,表示不開GDC。 rc_mode: 指定碼率控制模式(0:CBR, 1:VBR, 2:FIXQP, 3:QPMAP)。 VBR、CBR模式,編碼參數(shù) init_qp: 指定初始QP值,取值范圍(0, 51)。 min_i_qp: 指定I幀最小QP值,取值范圍(0, 51)。FIXQP模式時,取其值為i_qp。 max_i_qp: 指定I幀最大QP值,取值范圍(0, 51)。 min_p_qp: 指定P幀最小QP值,取值范圍(0, 51)。FIXQP模式時,取其值為p_qp。 max_p_qp: 指定P幀最大QP值,取值范圍(0, 51)。 mb_qp_limit_en: 指定是否開啟mb qp限制,默認0,表示不開啟。 VBR模式,編碼參數(shù) moving_th:指定mb16x16中MAD的閾值,取值范圍[0, 31]。 quality: 指定靜態(tài)P幀的位系數(shù),取值范圍[1, 20]。 p_bits_coef: 指定移動P幀的位系數(shù),取值范圍[1, 50]。 i_bits_coef: 指定I幀的位系數(shù),取值范圍[1, 20]。 gop_mode: 指定GOP模式(0:NormalP, 1:DualP, 2:SmartP)。 gop_size: 指定GOP大小,當前只針對H265有效,取值范圍[1, 63]。 高級跳幀參數(shù) AdvancedRef_Base: 設置該值大于0表示開啟高級跳幀功能,等于0表示關(guān)閉高級跳幀功能。 AdvancedRef_Enhance: 設置Enhance為5。 AdvancedRef_RefBaseEn: 設置該值為1表示開啟參考幀,等于0表示關(guān)閉參考幀。 enable_fast_enc: 指定是否開啟快速編碼,默認0,表示不開啟。 encode_rotate: 指定編碼旋轉(zhuǎn)角度(0, 90, 180, 270),順時針方向。 mirror: 指定編碼鏡像是否開啟,默認0,表示不開啟。取值范圍[0, 1]。 video_duration: 指定生成一個視頻文件的最大持續(xù)時間(如:每個視頻文件長度一分鐘),單位: s。 test_duration: 指定測試時間,單位: s。 color2grey: 指定是否開啟彩轉(zhuǎn)灰功能,默認"no",表示不開啟。取值范圍[“no”, "yes"]。 2D降噪?yún)?shù)配置。 2dnr_en: 編碼器2DNR使能,默認1,表示開啟。取值范圍[0, 1]。 2dnr_strength_y: 亮度降噪強度系數(shù)。該值越大,濾波強度越高。默認127,取值范圍[0, 255]。 2dnr_strength_c: 色度降噪強度系數(shù)。該值越大,濾波強度越高。默認127,取值范圍[0, 255]。 2dnr_threshold_y: 亮度鄰域像素降噪開關(guān)閾值。該值越大,越容易觸發(fā)2d濾波。默認7,取值范圍[0, 15]。 2dnr_threshold_c: 色度鄰域像素降噪開關(guān)閾值。該值越大,越容易觸發(fā)2d濾波。默認7,取值范圍[0, 15]。 3D降噪?yún)?shù)配置 3dnr_en: 編碼器3DNR使能,默認1,表示開啟。取值范圍[0, 1]。 3dnr_pix_level_en: 3d濾波權(quán)重系數(shù)自適應修正開關(guān)。默認0,表示不開啟。取值范圍[0, 1]。 3dnr_smooth_en: 像素級3x3平滑濾波使能。默認1,表示開啟。取值范圍[0, 1]。 3dnr_pix_diff_th: 僅當3d_adjust_pix_level_enable為1時生效,自適應修正幅度閾值。該值越大,濾波強度越 高。默認6,取值范圍[0, 31]。 3dnr_max_mv_th: 源圖像素塊運動矢量最大閾值,單個像素塊僅當其水平和垂直MV皆小于該閾值,才會進行3d濾波。該值 越大,越容易觸發(fā)3d濾波。默認2,取值范圍[0, 63]。 3dnr_max_mad_th: 源圖與參考圖之間像素塊的MAD最大閾值,單個像素塊僅當其MAD值小于該閾值,才會進行3d濾波。該 值越大,越容易觸發(fā)3d濾波。默認11,取值范圍[0, 63]。 3dnr_min_coef: 3d濾波權(quán)重系數(shù)的最小閾值。該值越小,自適應3d濾波的強度上限越高。默認14,取值范圍[0, 3 dnr_max_coef]。 3dnr_max_coef: 3d濾波權(quán)重系數(shù)的最大閾值。該值越大,自適應3d濾波的強度下限越低。默認16,取值范圍[3 dnr_min_coef, 16]。 ROI測試參數(shù)配置 roi_num: 指定ROI的個數(shù),默認0,表示不開啟ROI測試。取值范圍[0, 8]。 roi_qp: 指定ROI區(qū)域的QP值,默認50,表示最差質(zhì)量。取值范圍(0, 51)。 roi_BgFrameRateEnable: 指定是否開啟非ROI區(qū)域低幀率編碼,默認0,表示不開啟。 roi_BgFrameRateAttenuation: 指定非ROI區(qū)域的幀率衰減比例,默認3,表示非ROI區(qū)域的幀率是正常幀率的1/3。 IntraRefresh_BlockNum: 指定P幀幀內(nèi)刷新的block個數(shù),默認0,表示不開啟P幀幀內(nèi)刷新功能。 orl_num: 指定ORL(Object Rectangle Label)的個數(shù),取值范圍[0,16]。 配置vbv buffer大小和vbv buffer閾值大小 vbvBufferSize: 指定vbv buffer大小,默認0,表示由mpp middleware自行計算并設置給編碼器,大于0,表示由 app設置。 vbvThreshSize: 指定vbv buffer閾值大小,默認0,表示由mpp middleware自行計算并設置給編碼器,大于0,表示 由app設置。 裁剪編碼參數(shù)設置 crop_en: 指定是否開啟裁剪編碼,默認0,表示不開啟。 crop_rect_x: 指定裁剪區(qū)域的x坐標。 crop_rect_y: 指定裁剪區(qū)域的y坐標。 crop_rect_w: 指定裁剪區(qū)域的寬度。 crop_rect_h: 指定裁剪區(qū)域的高度。 vui_timing_info_present_flag: 指定是否添加VUI信息,默認0,表示不添加。 encpp_disable: 指定是否禁用encpp新通路,默認0,表示不禁用。 super_frm_mode: 指定超級幀模式,默認0,表示不啟用。(0:none, 1:discarded, 2:re-encode)。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_virvi2venc2muxer -path ./sample_virvi2venc2muxer.conf

【Melis】

# sample_virvi2venc2muxer -path ./mnt/E/sample_virvi2venc2muxer.conf

退出測試:

測試達到設定的時間后自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 使用VLC 軟件播放生成的mp4文件正常。

8.1.14 sample_multi_vi2venc2muxer

測試目的:

最多允許4路編碼加1路jpeg拍照。每個編碼通道都可以選擇vipp,以及timelapse模式等。 默認的配置如下: VIPP0->venc0->muxerGrp0:bufferNum=5,采集分辨率1920x1080,格式LBC2.5,h264編碼幀率30,碼率1Mbit/ s,threshSize:w*h/10, 普通NormalP編碼,vbv緩存1秒。 VIPP1->venc1->muxerGrp1: bufferNum=5,采集分辨率640x480,格式NV21,h264編碼幀率30,碼率500Kbit/s ,threshSize:w*h/10, 普通NormalP編碼,vbv緩存1秒。 VIPP1->venc2->muxerGrp2: h264編碼幀率30,碼率500Kbit/s,threshSize:w*h/10,普通NormalP編碼,vbv 緩存1秒,timelapse = 200ms。 VIPP1->venc3->muxerGrp3: h264編碼幀率30,碼率500Kbit/s,threshSize:w*h/10,普通NormalP編碼,vbv 緩存1秒,timelapse = 1000ms。 VIPP0->venc_jpeg:每隔30秒拍照一張。

組件依賴:

mpp_vi mpp_venc mpp_muxer

測試通路:

image-20221120173040894

?

圖 8-14: MPP_sample 測試通路-sample_multi_vi2venc2muxer

?

源文件:

目標文件:

/mnt/extsd/1080p_1.mp4 /mnt/extsd/1080p_2.mp4 /mnt/extsd/1080p_3.mp4 /mnt/extsd/1080p_4.mp4 /mnt/extsd/360p_1.mp4 /mnt/extsd/360p_2.mp4 /mnt/extsd/360p_3.mp4 /mnt/extsd/360p_4.mp4 /mnt/extsd/timelapse_first.mp4 /mnt/extsd/timelapse_second.mp4 /mnt/extsd/1080p_1.jpeg /mnt/extsd/1080p_2.jpeg /mnt/extsd/1080p_3.jpeg

參數(shù)配置:

vipp0:第1條vpp通路的vipp設備號。 vipp0_format:圖像采集格式。 vipp0_capture_width:圖像采集寬度。 vipp0_capture_height:圖像采集高度。 vipp0_framerate:圖像采集幀率,單位: fps。 vipp1:第2條vpp通路的vipp設備號。 vipp1_format:圖像采集格式。 vipp1_capture_width:圖像采集寬度。 vipp1_capture_height:圖像采集高度。 vipp1_framerate:圖像采集幀率,單位: fps。 主碼流 videoA_vipp:視頻編碼通路連接的vipp設備號。 videoA_file:錄制的視頻文件路徑。 videoA_file_cnt:循環(huán)錄制允許的最大文件數(shù)目,超過就開始刪除最早的文件。 videoA_framerate:編碼目標幀率,單位: fps。 videoA_bitrate:編碼碼率,單位: bps。 videoA_width;編碼輸出寬度。 videoA_height:編碼輸出高度。 videoA_encoder:編碼格式。 videoA_rc_mode;碼率模式,0:CBR 1:VBR。 videoA_duration:文件時長。 videoA_timelapse:timelapse模式,-1:禁止timelapse; 0:慢攝影; >0:timelapse模式, 數(shù)值為采集幀的幀間 隔,單位us。 子碼流 videoB_vipp:視頻編碼通路連接的vipp設備號。 videoB_file:錄制的視頻文件路徑。 videoB_file_cnt:循環(huán)錄制允許的最大文件數(shù)目,超過就開始刪除最早的文件。 videoB_framerate:編碼目標幀率,單位: fps。 videoB_bitrate:編碼碼率,單位: bps。 videoB_width;編碼輸出寬度。 videoB_height:編碼輸出高度。 videoB_encoder:編碼格式。 videoB_rc_mode;碼率模式,0:CBR 1:VBR。 videoB_duration:文件時長。 videoB_timelapse:timelapse模式,-1:禁止timelapse; 0:慢攝影; >0:timelapse模式, 數(shù)值為采集幀的幀間 隔,單位us。 縮時錄影1 videoC_vipp:視頻編碼通路連接的vipp設備號。 videoC_file:錄制的視頻文件路徑。 videoC_file_cnt:循環(huán)錄制允許的最大文件數(shù)目,超過就開始刪除最早的文件。 videoC_framerate:編碼目標幀率,單位: fps。 videoC_bitrate:編碼碼率,單位: bps。 videoC_width;編碼輸出寬度。 videoC_height:編碼輸出高度。 videoC_encoder:編碼格式。 videoC_rc_mode;碼率模式,0:CBR 1:VBR。 videoC_duration:文件時長。 videoC_timelapse:timelapse模式,-1:禁止timelapse; 0:慢攝影; >0:timelapse模式, 數(shù)值為采集幀的幀間 隔,單位us。 縮時錄影2 videoD_vipp:視頻編碼通路連接的vipp設備號。 videoD_file:錄制的視頻文件路徑。 videoD_file_cnt:循環(huán)錄制允許的最大文件數(shù)目,超過就開始刪除最早的文件。 videoD_framerate:編碼目標幀率,單位: fps。 videoD_bitrate:編碼碼率,單位: bps。 videoD_width;編碼輸出寬度。 videoD_height:編碼輸出高度。 videoD_encoder:編碼格式。 videoD_rc_mode;碼率模式,0:CBR 1:VBR。 videoD_duration:文件時長。 videoD_timelapse:timelapse模式,-1:禁止timelapse; 0:慢攝影; >0:timelapse模式, 數(shù)值為采集幀的幀間 隔,單位us。 JPEG拍照 videoE_vipp: 拍照通路連接的vipp設備號。 videoE_file_jpeg: 拍照的圖片路徑。 videoE_file_jpeg_cnt: 拍照的圖片張數(shù)。 videoE_width:編碼輸出寬度。 videoE_height:編碼輸出高度。 videoE_encoder:編碼格式。 videoE_photo_interval:拍照時間間隔,單位: s。 test_duration:測試時間,單位: s。0表示無限時長。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_multi_vi2venc2muxer -path ./sample_multi_vi2venc2muxer.conf

【Melis】

# sample_multi_vi2venc2muxer -path ./mnt/E/sample_multi_vi2venc2muxer.conf

退出測試:

到達設定的測試時長后會自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 使用VLC 軟件播放生成的mp4文件正常。

8.1.15 sample_rtsp

測試目的:

演示視頻編碼后的rtsp傳輸?shù)膱鼍啊?/p>

組件依賴:

mpp_vi mpp_venc mpp_system_rtsp

測試通路:

image-20221120173139208

?

圖 8-15: MPP_sample 測試通路-sample_rtsp

?

源文件:

目標文件:

AW_VirviEncoder.H26

參數(shù)配置:

主碼流 main_vipp: 指定vipp設備號,默認0,表示vipp0。 main_src_width: 指定原始視頻的寬度。 main_src_height: 指定原始視頻的高度。 main_pixel_format: 指定像素格式(YUV類型: nv21(yvu420sp), yu12(yuv420p), yv12, nv12。LBC壓縮類型 : aw_lbc_2_0x, aw_lbc_2_5x, aw_lbc_1_5x, aw_lbc_1_0x)。 main_wdr_enable: 指定是否開啟WDR,默認0,表示不開WDR。 main_vi_buf_num: 指定VI的buffer個數(shù),僅對離線編碼有效。 main_src_frame_rate: 指定vipp采集的幀率,單位: fps。 main_viChn: 指定vi虛通道號,默認0,表示vi ch0。配置為-1表示不測試主碼流。 main_venc_chn: 指定ve通道號,默認0,表示ve ch0。配置為-1表示不測試主碼流。 main_encode_type: 指定編碼格式(H.264、H.265)。 main_encode_width: 指定生成的裸碼流視頻的寬度。 main_encode_height: 指定生成的裸碼流視頻的高度。 main_encode_frame_rate: 指定編碼視頻的幀率,單位: fps。 main_encode_bitrate: 指定編碼的碼率,單位: bps。 main_file_path: 指定編碼裸流文件的存放路徑。若不指定,則不會保存到文件。 main_online_en: 指定是否開啟在線編碼,默認0,表示不開啟在線編碼,即當前為離線編碼。 main_online_share_buf_num: 指定在線編碼的共享buffer個數(shù)(1或2),默認2,表示2個buffer。注意該配置僅當 配置在線模式時才生效。 main_encpp_disable: 指定是否禁用encpp新通路,默認0,表示不禁用。 子碼流 sub_vipp: 指定vipp設備號,默認1,表示vipp1(對于V853,表示vipp4)。 sub_vipp_crop_en: 指定是否開啟vipp crop功能。默認1,表示開啟。 sub_vipp_crop_rect_x: 指定vipp crop的x坐標。 sub_vipp_crop_rect_y: 指定vipp crop的y坐標。 sub_vipp_crop_rect_w: 指定vipp crop的寬度。 sub_vipp_crop_rect_h: 指定vipp crop的高度。 sub_src_width: 指定原始視頻的寬度。 sub_src_height: 指定原始視頻的高度。 sub_pixel_format: 指定像素格式(YUV類型: nv21(yvu420sp), yu12(yuv420p), yv12, nv12。LBC壓縮類型: aw_lbc_2_0x, aw_lbc_2_5x, aw_lbc_1_5x, aw_lbc_1_0x)。 sub_wdr_enable: 指定是否開啟WDR,默認0,表示不開WDR。 sub_vi_buf_num: 指定VI的buffer個數(shù),僅對離線編碼有效。 sub_src_frame_rate: 指定vipp采集的幀率,單位: fps。 sub_viChn: 指定vi虛通道號,默認0,表示vi ch0。配置為-1表示不測試子碼流。 sub_venc_chn: 指定ve通道號,默認1,表示ve ch1。配置為-1表示不測試子碼流。 sub_encode_type: 指定編碼格式(H.264、H.265)。 sub_encode_width: 指定生成的裸碼流視頻的寬度。 sub_encode_height: 指定生成的裸碼流視頻的高度。 sub_encode_frame_rate: 指定編碼視頻的幀率,單位: fps。 sub_encode_bitrate: 指定編碼的碼率,單位: bps。 sub_file_path: 指定編碼裸流文件的存放路徑。若不指定,則不會保存到文件。 sub_encpp_disable: 指定是否禁用encpp新通路,默認0,表示不禁用。 縮時錄影 lapse_viChn: 指定vi虛通道號,默認1,表示vi ch1。配置為-1表示不測試子碼流。 lapse_venc_chn: 指定ve通道號,默認2,表示ve ch2。配置為-1表示不測試子碼流。 lapse_encode_type: 指定編碼格式(H.264、H.265)。 lapse_encode_width: 指定生成的裸碼流視頻的寬度。 lapse_encode_height: 指定生成的裸碼流視頻的高度。 lapse_encode_frame_rate: 指定編碼視頻的幀率,單位: fps。 lapse_encode_bitrate: 指定編碼的碼率,單位: bps。 lapse_file_path: 指定編碼裸流文件的存放路徑。若不指定,則不會保存到文件。 lapse_time: 指定縮時錄影的幀間隔時間,單位: ms。 lapse_encpp_disable: 指定是否禁用encpp新通路,默認0,表示不禁用。 ISP2VE聯(lián)動機制參數(shù)配置 isp_ve_linkage_enable: 指定是否開啟ISP2VE聯(lián)動機制。默認0,表示不開啟。 isp_ve_linkage_test_stream: 指定ISP2VE聯(lián)動機制應用到哪一路,默認0,表示主碼流。(0:main stream, 1: sub stream, 2:lapse stream) ve2isp_param_update_interval: 指定ISP2VE聯(lián)動參數(shù)更新的時間間隔,單位: ms。 rtsp_net_type: 指定RTSP網(wǎng)絡類型。默認1,表示以太網(wǎng)。(0: "lo", 1: "eth0", 2: "br0", 3: "wlan0") test_duration: 測試時間,單位: s。0表示無限時長。

測試指令:

【Tina】

1. 將sample_rtsp和sample_rtsp.conf放到sd卡根目錄。 2. 將sd卡掛載到機器上。 3. 執(zhí)行測試指令 cd /mnt/extsd/ ./sample_rtsp -path ./sample_rtsp.conf 打印中會提示播放鏈接。 4. 在PC 上使用VLC 播放rtsp 鏈接 rtsp://192.168.10.1:8554/ch0 rtsp://192.168.10.1:8554/ch1

【Melis】

暫不支持。

退出測試:

按“ctrl + c”退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 通過VLC 可以正常播放rtsp 鏈接。

8.1.16 sample_CodecParallel

測試目的:

演示同編同解。

組件依賴:

mpp_vi mpp_venc mpp_demuxer mpp_vdec mpp_muxer mpp_hw_display mpp_vo

測試通路:

image-20221120173547722

?

圖 8-16: MPP_sample 測試通路-sample_CodecParallel

?

源文件:

/mnt/extsd/test.mp4

目標文件:

/mnt/extsd/1080p.mp4

參數(shù)配置:

# 通用配置 test_duration:指定測試時間 # 錄制配置 record_vipp_id:指定VIPP設備號 record_vipp_format:指定camera采集的圖像格式 record_vipp_capture_width:指定camera采集的圖像寬度 record_vipp_capture_height:指定camera采集的圖像高度 record_vipp_frame_rate:指定camera采集的幀率 record_dest_file:指定錄制文件的路徑 record_video_file_format:指定視頻封裝格式 record_video_frame_rate:指定視頻編碼的幀率 record_video_bitrate:指定視頻編碼的碼率 record_video_width:指定視頻編碼的圖像寬度 record_video_heigth:指定視頻編碼的圖像高度 record_video_encoder_type:指定視頻編碼格式 record_video_rc_mode:指定視頻編碼的碼率控制模式 record_video_duration:指定視頻編碼的圖像寬度 # 預覽配置 preview_vipp_id:指定VIPP設備號 preview_vipp_format:指定camera采集的圖像格式 preview_vipp_capture_width:指定camera采集的圖像寬度 preview_vipp_capture_height:指定camera采集的圖像高度 preview_vipp_frame_rate:指定camera采集的幀率 preview_vo_dev_id:指定VO設備號 preview_vo_display_x:指定輸出圖像的X 軸位置 preview_vo_display_y:指定輸出圖像的Y 軸位置 preview_vo_display_width:指定輸出圖像寬度 preview_vo_display_height:指定輸出圖像高度 preview_vo_layer_num:指定圖像顯示的圖層 preview_vo_disp_type:指定顯示設備(hdmi, lcd, cvbs) # 播放配置 play_src_file:指定原始視頻文件的路徑 play_vo_dev_id:指定VO設備號 play_vo_display_x:指定輸出圖像的X 軸位置 play_vo_display_y:指定輸出圖像的Y 軸位置 play_vo_display_width:指定輸出圖像寬度 play_vo_display_height:指定輸出圖像高度 play_vo_layer_num:指定圖像顯示的圖層 play_vo_disp_type:指定顯示設備(hdmi, lcd, cvbs)

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_CodecParallel -path ./sample_CodecParallel.conf

【Melis】

暫不支持。

結(jié)束測試:

1. 達到設定的測試時間后,自動退出測試。 2. 播放完test.mp4 文件后,自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. LCD屏幕一半顯示預覽畫面,一半顯示播放畫面,同時會生成編碼文件1080p.mp4。

8.1.17 sample_vdec

測試目的:

連續(xù)解碼jpg格式圖片或者h264裸碼流,然后保存為yuv格式文件。

組件依賴:

mpp_vdec

測試通路:

image-20221120173607272

?

圖 8-17: MPP_sample 測試通路-sample_vdec

?

源文件:

/mnt/extsd/vbs1.h264 /mnt/extsd/vbs1.len /mnt/extsd/vbs2.h265 /mnt/extsd/vbs2.len

目標文件:

/mnt/extsd/h264.yuv /mnt/extsd/h265.yuv

參數(shù)配置:

vdecoder_format: 指定解碼格式,jpeg或者h264。 yuv_file_path: 指定解碼后生成的yuv文件的路徑。 jpeg_file_path: 指定原jpg圖片路徑,該文件必須為jpeg格式的文件。 h264_vbs_path: 指定原264裸碼流路徑。 h264_len_path: 指定原264裸碼流禎大小描述文件路徑。 h265_vbs_path: 指定原265裸碼流路徑。 h265_len_path: 指定原265裸碼流禎大小描述文件路徑。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_vdec -path ./sample_vdec.conf

【Melis】

暫不支持。

退出測試:

文件解碼完后會自動結(jié)束測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 使用YUView 軟件查看生成的YUV文件正常。

8.1.18 sample_demux2vdec

測試目的:

該sample演示從原始視頻文件(如:xxx.mp4)中分離出視頻數(shù)據(jù)幀并解碼生成yuv文件。

組件依賴:

mpp_demuxer mpp_vdec

測試通路:

image-20221120173635176

?

圖 8-18: MPP_sample 測試通路-sample_demux2vdec

?

源文件:

/mnt/extsd/test.mp4

目標文件:

/mnt/extsd/y.yuv /mnt/extsd/u.yuv /mnt/extsd/v.yuv /mnt/extsd/yuv.yuv

參數(shù)配置:

src_file: 指定原始視頻文件的路徑。 src_size: 指定原始視頻文件的視頻大小,如1080p。 seek_position: 指定原始視頻文件的開始解析位置,單位: ms。 y_dst_file: 視頻數(shù)據(jù)幀解碼出來y數(shù)據(jù)分量。 u_dst_file: 視頻數(shù)據(jù)幀解碼出來u數(shù)據(jù)分量。 v_dst_file: 視頻數(shù)據(jù)幀解碼出來v數(shù)據(jù)分量。 yuv_dst_file: 視頻數(shù)據(jù)幀解碼出來對應的yuv數(shù)據(jù)文件。 test_duration: 測試時間,單位: s。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_demux2vdec -path ./sample_demux2vdec.conf

【Melis】

暫不支持。

退出測試:

測試完文件test.mp4,可以自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 使用YUView 軟件查看生成的YUV文件正常。

8.1.19 sample_demux2vdec_saveFrame

測試目的:

該sample演示從原始視頻文件(如:264.mp4)中分離出視頻數(shù)據(jù)幀并解碼生成yuv文件。

組件依賴:

mpp_demuxer mpp_vdec

測試通路:

image-20221120173657904

?

圖 8-19: MPP_sample 測試通路-sample_demux2vdec_saveFrame

?

源文件:

/mnt/extsd/test.mp4

目標文件:

/mnt/extsd/sample_demux2vdec_saveFrame_Files/frame[1920x1088][00].nv21 /mnt/extsd/sample_demux2vdec_saveFrame_Files/frame[1920x1088][01].nv21 /mnt/extsd/sample_demux2vdec_saveFrame_Files/frame[1920x1088][02].nv21 /mnt/extsd/sample_demux2vdec_saveFrame_Files/frame[1920x1088][03].nv21 /mnt/extsd/sample_demux2vdec_saveFrame_Files/frame[1920x1088][04].nv21

參數(shù)配置:

src_file: 指定原始視頻文件的路徑。 seek_position: 指定原始視頻文件的開始解析位置,單位: ms。 save_num: 保存視頻幀的數(shù)量。 dst_dir: 保存視頻幀的目錄。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_demux2vdec_saveFrame -path ./sample_demux2vdec_saveFrame.conf

【Melis】

暫不支持。

退出測試:

測試完文件test.mp4,可以自動退出測試。測試時間會比較長,可以按“ctrl + c” 退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 使用YUView 軟件查看生成的YUV文件正常。

8.1.20 sample_demux2vdec2vo

測試目的:

該sample演示解碼視頻文件(如:xxx.mp4)并從LCD上顯示出來。

組件依賴:

mpp_demuxer mpp_vdec mpp_hw_display mpp_vo

測試通路:

image-20221120173714067

?

圖 8-20: MPP_sample 測試通路-sample_demux2vdec2vo

?

源文件:

/mnt/extsd/test.mp4

目標文件:

參數(shù)配置:

src_file: 指定原始視頻文件的路徑。 seek_position: 指定原始視頻文件的開始解析位置,單位: ms。 test_duration: 測試時間,單位: s。 display_x: 顯示區(qū)域的x坐標。 display_y: 顯示區(qū)域的y坐標。 display_width: 顯示區(qū)域的寬度。 display_height: 顯示區(qū)域的高度。 ve_freq: 指定VE的頻率,默認0,表示300MHz,單位: MHz。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_demux2vdec2vo -path ./sample_demux2vdec2vo.conf

【Melis】

# sample_demux2vdec2vo -path ./mnt/E/sample_demux2vdec2vo.conf

退出測試:

測試完文件test.mp4,可以自動退出測試。可以按“ctrl + c” 退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. LCD 顯示視頻播放正常。

8.1.21 sample_vencQpMap

測試目的:

演示調(diào)用VENC MPI 接口,測試視頻編碼QpMap模式。 從yuv原始數(shù)據(jù)文件xxx.yuv中讀取視頻幀,編碼,將取得的編碼往輸出文件里面直接寫,生成裸碼流視頻文件。開啟QpMap 模式下,在編碼完一幀后到編碼下一幀前,獲取上一幀(剛已編碼完成)的編碼統(tǒng)計信息,用戶需要自己處理這個信 息,然后設定下一幀(即將送去編碼)的編碼方式(QP、skip和en等)。如果是H264或H265編碼sample會自動在生 成文件的開始加上spspps信息,其他格式則不加。QpMap模式只有H264和H265兩種編碼格式支持。

組件依賴:

mpp_venc

測試通路:

源文件:

/mnt/extsd/test.yuv

目標文件:

/mnt/extsd/test.raw

參數(shù)配置:

test_duration: 指定測試時間。 src_file: 指定原始yuv文件的路徑。 src_width: 指定原始視頻文件的寬度。 src_height: 指定原始視頻文件的高度。 src_pixfmt: 指定原始視頻圖像的像素格式。 color_space: 指定顏色空間(jpeg, rec709, rec709_part_range)。 dst_file: 指定生成的裸碼流視頻文件路徑。 dest_width: 指定視頻編碼輸出圖像的寬度。 dest_height: 指定視頻編碼輸出圖像的高度。 dest_pixfmt: 指定視頻編碼輸出圖像的像素格式。 encoder: 指定視頻編碼的類型。 profile: 指定視頻編碼質(zhì)量等級。 framerate: 指定視頻編碼的幀率。 bitrate: 指定視頻編碼的碼率。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_vencQpMap -path ./sample_vencQpMap.conf

【Melis】

暫不支持。

結(jié)束測試:

達到設定的測試時間后,自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 使用VLC 軟件播放生成的raw文件正常。

8.1.22 sample_OnlineVenc

測試目的:

該sample演示IPC在線編碼使用場景:主碼流在線編碼、子碼流離線編碼。 針對主碼流和子碼流分別創(chuàng)建mpi_vi和mpi_venc,將它們綁定,再分別啟動。mpi_vi采集圖像,直接傳輸給mpi_venc進 行編碼。

組件依賴:

mpp_venc

測試通路:

image-20221120173754294

?

圖 8-21: MPP_sample 測試通路-sample_OnlineVenc

?

源文件:

目標文件:

/mnt/extsd/mainStream.raw /mnt/extsd/subStream.raw /mnt/extsd/lapseStream.raw

參數(shù)配置:

主碼流 main_vipp: 指定vipp設備號,默認0,表示vipp0。 main_src_width: 指定原始視頻的寬度。 main_src_height: 指定原始視頻的高度。 main_pixel_format: 指定像素格式(YUV類型: nv21(yvu420sp), yu12(yuv420p), yv12, nv12。LBC壓縮類型 : aw_lbc_2_0x, aw_lbc_2_5x, aw_lbc_1_5x, aw_lbc_1_0x)。 main_wdr_enable: 指定是否開啟WDR,默認0,表示不開WDR。 main_vi_buf_num: 指定VI的buffer個數(shù),僅對離線編碼有效。 main_src_frame_rate: 指定vipp采集的幀率,單位: fps。 main_viChn: 指定vi虛通道號,默認0,表示vi ch0。配置為-1表示不測試主碼流。 main_venc_chn: 指定ve通道號,默認0,表示ve ch0。配置為-1表示不測試主碼流。 main_encode_type: 指定編碼格式(H.264、H.265)。 main_encode_width: 指定生成的裸碼流視頻的寬度。 main_encode_height: 指定生成的裸碼流視頻的高度。 main_encode_frame_rate: 指定編碼視頻的幀率,單位: fps。 main_encode_bitrate: 指定編碼的碼率,單位: bps。 main_file_path: 指定編碼裸流文件的存放路徑。若不指定,則不會保存到文件。 main_online_en: 指定是否開啟在線編碼,默認0,表示不開啟在線編碼,即當前為離線編碼。 main_online_share_buf_num: 指定在線編碼的共享buffer個數(shù)(1或2),默認2,表示2個buffer。注意該配置僅當 配置在線模式時才生效。 main_encpp_disable: 指定是否禁用encpp新通路,默認0,表示不禁用。 子碼流 sub_vipp: 指定vipp設備號,默認1,表示vipp1(對于V853,表示vipp4)。 sub_vipp_crop_en: 指定是否開啟vipp crop功能。默認1,表示開啟。 sub_vipp_crop_rect_x: 指定vipp crop的x坐標。 sub_vipp_crop_rect_y: 指定vipp crop的y坐標。 sub_vipp_crop_rect_w: 指定vipp crop的寬度。 sub_vipp_crop_rect_h: 指定vipp crop的高度。 sub_src_width: 指定原始視頻的寬度。 sub_src_height: 指定原始視頻的高度。 sub_pixel_format: 指定像素格式(YUV類型: nv21(yvu420sp), yu12(yuv420p), yv12, nv12。LBC壓縮類型: aw_lbc_2_0x, aw_lbc_2_5x, aw_lbc_1_5x, aw_lbc_1_0x)。 sub_wdr_enable: 指定是否開啟WDR,默認0,表示不開WDR。 sub_vi_buf_num: 指定VI的buffer個數(shù),僅對離線編碼有效。 sub_src_frame_rate: 指定vipp采集的幀率,單位: fps。 sub_viChn: 指定vi虛通道號,默認0,表示vi ch0。配置為-1表示不測試子碼流。 sub_venc_chn: 指定ve通道號,默認1,表示ve ch1。配置為-1表示不測試子碼流。 sub_encode_type: 指定編碼格式(H.264、H.265)。 sub_encode_width: 指定生成的裸碼流視頻的寬度。 sub_encode_height: 指定生成的裸碼流視頻的高度。 sub_encode_frame_rate: 指定編碼視頻的幀率,單位: fps。 sub_encode_bitrate: 指定編碼的碼率,單位: bps。 sub_file_path: 指定編碼裸流文件的存放路徑。若不指定,則不會保存到文件。 sub_encpp_disable: 指定是否禁用encpp新通路,默認0,表示不禁用。 縮時錄影 lapse_viChn: 指定vi虛通道號,默認1,表示vi ch1。配置為-1表示不測試子碼流。 lapse_venc_chn: 指定ve通道號,默認2,表示ve ch2。配置為-1表示不測試子碼流。 lapse_encode_type: 指定編碼格式(H.264、H.265)。 lapse_encode_width: 指定生成的裸碼流視頻的寬度。 lapse_encode_height: 指定生成的裸碼流視頻的高度。 lapse_encode_frame_rate: 指定編碼視頻的幀率,單位: fps。 lapse_encode_bitrate: 指定編碼的碼率,單位: bps。 lapse_file_path: 指定編碼裸流文件的存放路徑。若不指定,則不會保存到文件。 lapse_time: 指定縮時錄影的幀間隔時間,單位: ms。 lapse_encpp_disable: 指定是否禁用encpp新通路,默認0,表示不禁用。 ISP2VE聯(lián)動機制參數(shù)配置 isp_ve_linkage_enable: 指定是否開啟ISP2VE聯(lián)動機制。默認0,表示不開啟。 isp_ve_linkage_test_stream: 指定ISP2VE聯(lián)動機制應用到哪一路,默認0,表示主碼流。(0:main stream, 1: sub stream, 2:lapse stream) ve2isp_param_update_interval: 指定ISP2VE聯(lián)動參數(shù)更新的時間間隔,單位: ms。 wb_yuv_enable: 指定是否開啟存儲回寫yuv功能。默認0,表示不開啟。 wb_yuv_buf_num: 指定存儲回寫yuv的buffer個數(shù),單位: 一幀圖像的大小。 wb_yuv_start_index: 指定存儲回寫yuv從第幾幀開始保存。 wb_yuv_total_cnt: 指定存儲回寫yuv一共保存多少幀。 wb_yuv_stream_channel: 指定存儲回寫yuv的編碼通道號,默認0,表示主碼流。(0:main stream, 1:sub stream, 2:sub lapse stream) wb_yuv_file_path: 指定存儲回寫yuv的文件路徑。 test_duration: 測試時間,單位: s。0表示無限時長。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_OnlineVenc -path ./sample_OnlineVenc.conf

【Melis】

暫不支持。

結(jié)束測試:

達到設定的測試時間后,自動退出測試

預期結(jié)果:

1.測試程序運行正常,測試過程沒有異常打印。 2.使用PC軟件VLC播放測試生成的視頻文件正常。 3.使用MediaInfo軟件檢查編碼參數(shù)符合預期。 4.觀察實際幀率打印,主碼流和子碼流均符合預期。

8.1.23 sample_vencGdcZoom

測試目的:

演示編碼GDC數(shù)字變焦功能。

組件依賴:

mpp_venc

測試通路:

image-20221120173816522

?

圖 8-22: MPP_sample 測試通路-sample_vencGdcZoom

?

源文件:

目標文件:

/mnt/extsd/test.raw

參數(shù)配置:

online_en: 指定是否開啟在線編碼,默認0,表示不開啟在線編碼,即當前為離線編碼。 online_share_buf_num: 指定在線編碼的共享buffer個數(shù)(1或2),默認2,表示2個buffer。注意該配置僅當配置在 線模式時才生效。 vipp_id: 指定vipp設備號,默認0,表示vipp0。 wdr_en: 指定是否開啟WDR,默認0,表示不開WDR。 drop_frm_num: 指定丟幀個數(shù),對于離線編碼是vipp丟幀,對于在線編碼是ve編碼前丟幀。 src_width: 指定原始視頻的寬度。 src_height: 指定原始視頻的高度。 vi_buffer_num: 指定CSI的buffer個數(shù),僅對離線編碼有效。 saturation_change: 指定飽和度改變的值,默認0,表示不調(diào)整。取值范圍[-256, 512]。 src_pixfmt: 指定像素格式(YUV類型: nv21(yvu420sp), yu12(yuv420p), yv12, nv12。LBC壓縮類型: aw_lbc_2_0x, aw_lbc_2_5x, aw_lbc_1_5x, aw_lbc_1_0x)。 color_space: 指定顏色空間(jpeg, rec709, rec709_part_range)。 venc_ch_id: 指定編碼通道,默認0,表示venc ch0。 video_dst_file: 指定編碼文件的存放路徑。 video_framerate: 指定幀率,單位: fps。 video_bitrate: 指定編碼的碼率,單位: bps。 video_width: 指定生成的裸碼流視頻的寬度。 video_height: 指定生成的裸碼流視頻的高度。 video_encoder: 指定編碼格式(H.264、H.265、MJPEG)。 profile: 指定編碼質(zhì)量,對于H264,建議配置High(2),對于H265,建議配置Main(0)。 ve_freq: 指定VE的頻率,默認0,表示300MHz,單位: MHz。 product_mode: 指定產(chǎn)品類型(0:Normal, 1:IPC)。 sensor_type: 指定sensor類型(0:DisWdr, 1:EnWdr)。 key_frame_interval: 指定I幀間隔。 enable_gdc: 指定是否開啟GDC功能,默認1,表示開啟。 enable_gdc_zoom: 指定是否開啟GDC zoom功能,默認1,表示開啟。 rc_mode: 指定碼率控制模式(0:CBR, 1:VBR, 2:FIXQP, 3:QPMAP)。 VBR、CBR模式,編碼參數(shù) init_qp: 指定初始QP值,取值范圍(0, 51)。 min_i_qp: 指定I幀最小QP值,取值范圍(0, 51)。FIXQP模式時,取其值為i_qp。 max_i_qp: 指定I幀最大QP值,取值范圍(0, 51)。 min_p_qp: 指定P幀最小QP值,取值范圍(0, 51)。FIXQP模式時,取其值為p_qp。 max_p_qp: 指定P幀最大QP值,取值范圍(0, 51)。 mb_qp_limit_en: 指定是否開啟mb qp限制,默認0,表示不開啟。 VBR模式,編碼參數(shù) moving_th:指定mb16x16中MAD的閾值,取值范圍[0, 31]。 quality: 指定靜態(tài)P幀的位系數(shù),取值范圍[1, 20]。 p_bits_coef: 指定移動P幀的位系數(shù),取值范圍[1, 50]。 i_bits_coef: 指定I幀的位系數(shù),取值范圍[1, 20]。 gop_mode: 指定GOP模式(0:NormalP, 1:DualP, 2:SmartP)。 gop_size: 指定GOP大小,當前只針對H265有效,取值范圍[1, 63]。 高級跳幀參數(shù) AdvancedRef_Base: 設置該值大于0表示開啟高級跳幀功能,等于0表示關(guān)閉高級跳幀功能。 AdvancedRef_Enhance: 設置Enhance為5。 AdvancedRef_RefBaseEn: 設置該值為1表示開啟參考幀,等于0表示關(guān)閉參考幀。 enable_fast_enc: 指定是否開啟快速編碼,默認0,表示不開啟。 encode_rotate: 指定編碼旋轉(zhuǎn)角度(0, 90, 180, 270),順時針方向。 mirror: 指定編碼鏡像是否開啟,默認0,表示不開啟。取值范圍[0, 1]。 video_duration: 指定生成一個視頻文件的最大持續(xù)時間(如:每個視頻文件長度一分鐘),單位: s。 test_duration: 指定測試時間,單位: s。 color2grey: 指定是否開啟彩轉(zhuǎn)灰功能,默認"no",表示不開啟。取值范圍[“no”, "yes"]。 2D降噪?yún)?shù)配置 2dnr_en: 編碼器2DNR使能,默認1,表示開啟。取值范圍[0, 1]。 2dnr_strength_y: 亮度降噪強度系數(shù)。該值越大,濾波強度越高。默認127,取值范圍[0, 255]。 2dnr_strength_c: 色度降噪強度系數(shù)。該值越大,濾波強度越高。默認127,取值范圍[0, 255]。 2dnr_threshold_y: 亮度鄰域像素降噪開關(guān)閾值。該值越大,越容易觸發(fā)2d濾波。默認7,取值范圍[0, 15]。 2dnr_threshold_c: 色度鄰域像素降噪開關(guān)閾值。該值越大,越容易觸發(fā)2d濾波。默認7,取值范圍[0, 15]。 3D降噪?yún)?shù)配置 3dnr_en: 編碼器3DNR使能,默認1,表示開啟。取值范圍[0, 1]。 3dnr_pix_level_en: 3d濾波權(quán)重系數(shù)自適應修正開關(guān)。默認0,表示不開啟。取值范圍[0, 1]。 3dnr_smooth_en: 像素級3x3平滑濾波使能。默認1,表示開啟。取值范圍[0, 1]。 3dnr_pix_diff_th: 僅當3d_adjust_pix_level_enable為1時生效,自適應修正幅度閾值。該值越大,濾波強度越 高。默認6,取值范圍[0, 31]。 3dnr_max_mv_th: 源圖像素塊運動矢量最大閾值,單個像素塊僅當其水平和垂直MV皆小于該閾值,才會進行3d濾波。該值 越大,越容易觸發(fā)3d濾波。默認2,取值范圍[0, 63]。 3dnr_max_mad_th: 源圖與參考圖之間像素塊的MAD最大閾值,單個像素塊僅當其MAD值小于該閾值,才會進行3d濾波。該 值越大,越容易觸發(fā)3d濾波。默認11,取值范圍[0, 63]。 3dnr_min_coef: 3d濾波權(quán)重系數(shù)的最小閾值。該值越小,自適應3d濾波的強度上限越高。默認14,取值范圍[0, 3 dnr_max_coef]。 3dnr_max_coef: 3d濾波權(quán)重系數(shù)的最大閾值。該值越大,自適應3d濾波的強度下限越低。默認16,取值范圍[3 dnr_min_coef, 16]。 ROI測試參數(shù)配置 roi_num: 指定ROI的個數(shù),默認0,表示不開啟ROI測試。取值范圍[0, 8]。 roi_qp: 指定ROI區(qū)域的QP值,默認50,表示最差質(zhì)量。取值范圍(0, 51)。 roi_BgFrameRateEnable: 指定是否開啟非ROI區(qū)域低幀率編碼,默認0,表示不開啟。 roi_BgFrameRateAttenuation: 指定非ROI區(qū)域的幀率衰減比例,默認3,表示非ROI區(qū)域的幀率是正常幀率的1/3。 IntraRefresh_BlockNum: 指定P幀幀內(nèi)刷新的block個數(shù),默認0,表示不開啟P幀幀內(nèi)刷新功能。 orl_num: 指定ORL(Object Rectangle Label)的個數(shù),取值范圍[0,16]。 配置vbv buffer大小和vbv buffer閾值大小 vbvBufferSize: 指定vbv buffer大小,默認0,表示由mpp middleware自行計算并設置給編碼器,大于0,表示由 app設置。 vbvThreshSize: 指定vbv buffer閾值大小,默認0,表示由mpp middleware自行計算并設置給編碼器,大于0,表示 由app設置。 裁剪編碼參數(shù)設置 crop_en: 指定是否開啟裁剪編碼,默認0,表示不開啟。 crop_rect_x: 指定裁剪區(qū)域的x坐標。 crop_rect_y: 指定裁剪區(qū)域的y坐標。 crop_rect_w: 指定裁剪區(qū)域的寬度。 crop_rect_h: 指定裁剪區(qū)域的高度。 vui_timing_info_present_flag: 指定是否添加VUI信息,默認0,表示不添加。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_vencGdcZoom -path ./sample_vencGdcZoom.conf

【Melis】

暫不支持。

結(jié)束測試:

達到設定的測試時間后,自動退出測試。

預期結(jié)果:

1.測試程序運行正常,測試過程沒有異常打印。 2.使用PC軟件VLC播放測試生成的視頻文件正常。注意觀察視頻是否有縮放效果。 3.使用MediaInfo軟件檢查編碼參數(shù)符合預期。

8.1.24 sample_takePicture

測試目的:

演示拍照功能。支持通過配置開啟單拍和連拍測試。

組件依賴:

mpp_vi mpp_venc

測試通路:

image-20221120173840435

?

圖 8-23: MPP_sample 測試通路-sample_takePicture

?

源文件:

目標文件:

照片文件,單拍:圖片編號pic[n][0].jpg,連拍:圖片編號pic[0][n].jpg

參數(shù)配置:

dev_num: 指定VI Dev設備節(jié)點。 src_width: 指定camera采集的圖像寬度。 src_height: 指定camera采集的圖像高度。 frame_rate: 指定camera采集圖像的幀率。 src_format: 指定camera采集圖像像素格式。 color_space:指定顏色空間類型。 drop_frm_num:指定VIPP丟幀的幀數(shù)。 take_picture_mode:拍照模式(0:不拍,1:單拍,2:連拍)。 take_picture_num:拍照的圖片張數(shù)。 take_picture_interval:拍照時間間隔,單位: ms。 jpeg_width: jpeg拍照圖片的寬度。 jpeg_height: jpeg拍照圖片的高度。 store_dir: jpeg拍照文件的存儲路徑(單拍:圖片編號pic[n][0],連拍:圖片編號pic[0][n])。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_takePicture -path ./sample_takePicture.conf

【Melis】

暫不支持。

結(jié)束測試:

達到設定的測試時間后,自動退出測試。

預期結(jié)果:

1.測試程序運行正常,測試過程沒有異常打印。 2.使用PC圖片查看工具檢查拍照圖片顯示正常。 單拍模式下,拍照后,圖片的編號是:pic[0][0]、pic[1][0]、pic[1][0] ... pic[n][0]。 3.使用MediaInfo軟件檢查編碼參數(shù)符合預期。 檢查拍照的圖片格式和分辨率: 格式: JPEG 寬度: 1 920 像素 高度: 1 080 像素

8.1.25 sample_recorder

測試目的:

支持最大四路錄制編碼封裝或者預覽顯示。 每路創(chuàng)建一個vipp和虛通道,根據(jù)參數(shù)的不同與編碼器綁定測試錄制編碼,與VO綁定測試預覽顯示。

組件依賴:

mpp_vi mpp_venc mpp_vo

測試通路:

image-20221120173856514

?

圖 8-24: MPP_sample 測試通路-sample_recorder

?

源文件:

目標文件:

recorder1_1080p@20.mp4 recorder2_1080p@20.mp4 recorder3_1080p@20.mp4 recorder4_1080p@20.mp4

參數(shù)配置:

最多支持4路錄像和預覽,以下是第1路的參數(shù)配置,其他路與其類似。 recorder1_vi_dev: VIPP設備號。 recorder1_isp_dev: ISP設備號。 recorder1_cap_width: 錄制分辨率寬度。 recorder1_cap_height: 錄制分辨率高度。 recorder1_cap_frmrate: 錄制幀率。 recorder1_cap_format: 錄制視頻格式。 recorder1_vi_bufnum: 配置VIPP設備buffer數(shù)量。 recorder1_enable_WDR: 是否啟用WDR模式(0:不啟用 1:啟用)。 recorder1_enc_online: 是否啟用在線編碼模式(0:不啟用 1:啟用)。 recorder1_enc_online_share_bufbum: 在線編碼共享buffer個數(shù)。 recorder1_enc_type: 編碼器類型。 recorder1_enc_width: 編碼視頻分辨率寬度。 recorder1_enc_height: 編碼視頻分辨率高度。 recorder1_enc_frmrate: 編碼視頻幀率。 recorder1_enc_bitrate: 編碼視頻碼率。 recorder1_enc_rcmode: 編碼碼率控制模式。 recorder1_disp_x: 顯示區(qū)域X坐標。 recorder1_disp_y: 顯示區(qū)域y坐標。 recorder1_disp_width: 顯示區(qū)域?qū)挾取?recorder1_disp_height: 顯示區(qū)域高度。 recorder1_disp_dev: 顯示設備類型。 recorder1_rec_duration: 視頻文件錄制時長。 recorder1_rec_file_cnt: 視頻文件最大分片數(shù)。 recorder1_rec_file: 視頻文件保存路徑。 參數(shù)配置說明: 1. 支持錄制格式:nv21、yv12、nv12、yu12、aw_fbc、aw_lbc_2_0x、aw_lbc_2_5x、aw_lbc_1_5x、 aw_lbc_1_0x 2. 支持編碼格式:H.264、 H.265、MJPEG 3. 支持封裝格式:MP4、TS 4. 特殊參數(shù)配置 - 將recordern_vi_dev設置為 -1 ,表示不啟用這組配置測試。 - 將recordern_enc_width 或者 recordern_enc_height設置為 0,表示不測試這組配置的視頻編碼與封裝。 - 將recordern_disp_width 或 recordern_disp_width設置為0,表示不測試這組配置的預覽顯示。 - 視頻編碼與預覽顯示不可在同一組配置中同時使用。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_recorder -path ./sample_recorder.conf

【Melis】

暫不支持。

結(jié)束測試:

達到設定的測試時間后,自動退出測試。

預期結(jié)果:

1.測試程序運行正常,測試過程沒有異常打印。 2.使用PC軟件VLC播放測試生成的視頻文件正常。 3.使用MediaInfo軟件檢查編碼參數(shù)符合預期。

8.1.26 sample_vencRecreate

測試目的:

演示動態(tài)配置編碼格式、幀率、碼率等功能。 該sample測試mpi_vi和mpi_venc組件的綁定組合。創(chuàng)建mpi_vi和mpi_venc,將它們綁定,再分別啟動。 mpi_vi采集圖像,直接傳輸給mpi_venc進行編碼。

組件依賴:

測試通路:

image-20221120173914767

?

圖 8-25: MPP_sample 測試通路-sample_vencRecreate

?

源文件:

目標文件:

/mnt/extsd/test.raw

參數(shù)配置:

online_en: 指定是否開啟在線編碼,默認0,表示不開啟在線編碼,即當前為離線編碼。 online_share_buf_num: 指定在線編碼的共享buffer個數(shù)(1或2),默認2,表示2個buffer。注意該配置僅當配置在 線模式時才生效。 vipp_id: 指定vipp設備號,默認0,表示vipp0。 wdr_en: 指定是否開啟WDR,默認0,表示不開WDR。 drop_frm_num: 指定丟幀個數(shù),對于離線編碼是vipp丟幀,對于在線編碼是ve編碼前丟幀。 src_width: 指定原始視頻的寬度。 src_height: 指定原始視頻的高度。 vi_buffer_num: 指定CSI的buffer個數(shù),僅對離線編碼有效。 saturation_change: 指定飽和度改變的值,默認0,表示不調(diào)整。取值范圍[-256, 512]。 src_pixfmt: 指定像素格式(YUV類型: nv21(yvu420sp), yu12(yuv420p), yv12, nv12。LBC壓縮類型: aw_lbc_2_0x, aw_lbc_2_5x, aw_lbc_1_5x, aw_lbc_1_0x)。 color_space: 指定顏色空間(jpeg, rec709, rec709_part_range)。 venc_ch_id: 指定編碼通道,默認0,表示venc ch0。 video_dst_file: 指定編碼文件的存放路徑。 video_framerate: 指定幀率,單位: fps。 video_bitrate: 指定編碼的碼率,單位: bps。 video_width: 指定生成的裸碼流視頻的寬度。 video_height: 指定生成的裸碼流視頻的高度。 video_encoder: 指定編碼格式(H.264、H.265、MJPEG)。 profile: 指定編碼質(zhì)量,對于H264,建議配置High(2),對于H265,建議配置Main(0)。 ve_freq: 指定VE的頻率,默認0,表示300MHz,單位: MHz。 product_mode: 指定產(chǎn)品類型(0:Normal, 1:IPC)。 sensor_type: 指定sensor類型(0:DisWdr, 1:EnWdr)。 key_frame_interval: 指定I幀間隔。 enable_gdc: 指定是否開啟GDC功能,默認0,表示不開GDC。 rc_mode: 指定碼率控制模式(0:CBR, 1:VBR, 2:FIXQP, 3:QPMAP)。 VBR、CBR模式,編碼參數(shù) init_qp: 指定初始QP值,取值范圍(0, 51)。 min_i_qp: 指定I幀最小QP值,取值范圍(0, 51)。FIXQP模式時,取其值為i_qp。 max_i_qp: 指定I幀最大QP值,取值范圍(0, 51)。 min_p_qp: 指定P幀最小QP值,取值范圍(0, 51)。FIXQP模式時,取其值為p_qp。 max_p_qp: 指定P幀最大QP值,取值范圍(0, 51)。 mb_qp_limit_en: 指定是否開啟mb qp限制,默認0,表示不開啟。 VBR模式,編碼參數(shù) moving_th:指定mb16x16中MAD的閾值,取值范圍[0, 31]。 quality: 指定靜態(tài)P幀的位系數(shù),取值范圍[1, 20]。 p_bits_coef: 指定移動P幀的位系數(shù),取值范圍[1, 50]。 i_bits_coef: 指定I幀的位系數(shù),取值范圍[1, 20]。 gop_mode: 指定GOP模式(0:NormalP, 1:DualP, 2:SmartP)。 gop_size: 指定GOP大小,當前只針對H265有效,取值范圍[1, 63]。 高級跳幀參數(shù) AdvancedRef_Base: 設置該值大于0表示開啟高級跳幀功能,等于0表示關(guān)閉高級跳幀功能。 AdvancedRef_Enhance: 設置Enhance為5。 AdvancedRef_RefBaseEn: 設置該值為1表示開啟參考幀,等于0表示關(guān)閉參考幀。 enable_fast_enc: 指定是否開啟快速編碼,默認0,表示不開啟。 encode_rotate: 指定編碼旋轉(zhuǎn)角度(0, 90, 180, 270),順時針方向。 mirror: 指定編碼鏡像是否開啟,默認0,表示不開啟。取值范圍[0, 1]。 color2grey: 指定是否開啟彩轉(zhuǎn)灰功能,默認"no",表示不開啟。取值范圍[“no”, "yes"]。 2D降噪?yún)?shù)配置 2dnr_en: 編碼器2DNR使能,默認1,表示開啟。取值范圍[0, 1]。 2dnr_strength_y: 亮度降噪強度系數(shù)。該值越大,濾波強度越高。默認127,取值范圍[0, 255]。 2dnr_strength_c: 色度降噪強度系數(shù)。該值越大,濾波強度越高。默認127,取值范圍[0, 255]。 2dnr_threshold_y: 亮度鄰域像素降噪開關(guān)閾值。該值越大,越容易觸發(fā)2d濾波。默認7,取值范圍[0, 15]。 2dnr_threshold_c: 色度鄰域像素降噪開關(guān)閾值。該值越大,越容易觸發(fā)2d濾波。默認7,取值范圍[0, 15]。 3D降噪?yún)?shù)配置 3dnr_en: 編碼器3DNR使能,默認1,表示開啟。取值范圍[0, 1]。 3dnr_pix_level_en: 3d濾波權(quán)重系數(shù)自適應修正開關(guān)。默認0,表示不開啟。取值范圍[0, 1]。 3dnr_smooth_en: 像素級3x3平滑濾波使能。默認1,表示開啟。取值范圍[0, 1]。 3dnr_pix_diff_th: 僅當3d_adjust_pix_level_enable為1時生效,自適應修正幅度閾值。該值越大,濾波強度越 高。默認6,取值范圍[0, 31]。 3dnr_max_mv_th: 源圖像素塊運動矢量最大閾值,單個像素塊僅當其水平和垂直MV皆小于該閾值,才會進行3d濾波。該值 越大,越容易觸發(fā)3d濾波。默認2,取值范圍[0, 63]。 3dnr_max_mad_th: 源圖與參考圖之間像素塊的MAD最大閾值,單個像素塊僅當其MAD值小于該閾值,才會進行3d濾波。該 值越大,越容易觸發(fā)3d濾波。默認11,取值范圍[0, 63]。 3dnr_min_coef: 3d濾波權(quán)重系數(shù)的最小閾值。該值越小,自適應3d濾波的強度上限越高。默認14,取值范圍[0, 3 dnr_max_coef]。 3dnr_max_coef: 3d濾波權(quán)重系數(shù)的最大閾值。該值越大,自適應3d濾波的強度下限越低。默認16,取值范圍[3 dnr_min_coef, 16]。 ROI測試參數(shù)配置 roi_num: 指定ROI的個數(shù),默認0,表示不開啟ROI測試。取值范圍[0, 8]。 roi_qp: 指定ROI區(qū)域的QP值,默認50,表示最差質(zhì)量。取值范圍(0, 51)。 roi_BgFrameRateEnable: 指定是否開啟非ROI區(qū)域低幀率編碼,默認0,表示不開啟。 roi_BgFrameRateAttenuation: 指定非ROI區(qū)域的幀率衰減比例,默認3,表示非ROI區(qū)域的幀率是正常幀率的1/3。 IntraRefresh_BlockNum: 指定P幀幀內(nèi)刷新的block個數(shù),默認0,表示不開啟P幀幀內(nèi)刷新功能。 orl_num: 指定ORL(Object Rectangle Label)的個數(shù),取值范圍[0,16]。 配置vbv buffer大小和vbv buffer閾值大小 vbvBufferSize: 指定vbv buffer大小,默認0,表示由mpp middleware自行計算并設置給編碼器,大于0,表示由 app設置。 vbvThreshSize: 指定vbv buffer閾值大小,默認0,表示由mpp middleware自行計算并設置給編碼器,大于0,表示 由app設置。 裁剪編碼參數(shù)設置 crop_en: 指定是否開啟裁剪編碼,默認0,表示不開啟。 crop_rect_x: 指定裁剪區(qū)域的x坐標。 crop_rect_y: 指定裁剪區(qū)域的y坐標。 crop_rect_w: 指定裁剪區(qū)域的寬度。 crop_rect_h: 指定裁剪區(qū)域的高度。 vui_timing_info_present_flag: 指定是否添加VUI信息,默認0,表示不添加。 normal_test_duration: 指定正常測試時間,單位: s。 編碼recreate參數(shù)配置 venc_recreate_enable: 指定是否開啟編碼recreate,默認1,表示開啟。 dynamic_video_encoder: 指定編碼格式(H.264、H.265)。 dynamic_video_framerate: 指定幀率,單位: fps。 dynamic_video_bitrate: 指定編碼的碼率,單位: bps。 dynamic_video_width: 指定生成的裸碼流視頻的寬度。 dynamic_video_height: 指定生成的裸碼流視頻的高度。 dynamic_key_frame_interval: 指定I幀間隔。 dynamic_rc_mode: 指定碼率控制模式(0:CBR, 1:VBR)。 venc_recreate_test_duration: 指定recreate測試時間,單位: s。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_vencRecreate -path ./sample_vencRecreate.conf

【Melis】

不支持

退出測試:

測試達到設定的時間后自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 使用VLC 軟件播放生成的raw文件正常。

8.2 音頻

8.2.1 sample_ai

測試目的:

根據(jù)配置參數(shù)采集對應的pcm數(shù)據(jù),并寫入到文件中保存。

組件依賴:

mpp_aio

測試通路:

image-20221120173947583

?

圖 8-26: MPP_sample 測試通路-sample_ai

?

源文件:

目標文件:

/mnt/extsd/test.wav

參數(shù)配置:

pcm_file_path:指定目標pcm文件的路徑,該文件是包含wave頭的wav格式文件。 pcm_sample_rate:指定采樣率,通常設置為8000。 pcm_channel_cnt:指定通道數(shù)目,通常為1或2。 pcm_bit_width:指定位寬,必須設置為16。 pcm_frame_size:指定frame_size,此值可不指定。 pcm_cap_duration:指定測試時間。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_ai -path ./sample_ai.conf

【Melis】

# sample_ai -path ./mnt/E/sample_ai.conf

退出測試:

測試時間達到指定時間后,自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 生成pcm 文件test.wav播放正常。

8.2.2 sample_ao

測試目的:

根據(jù)配置參數(shù)讀取pcm數(shù)據(jù),然后播放聲音,從耳機口或喇叭輸出聲音。

組件依賴:

mpp_aio

測試通路:

image-20221120174006397

?

圖 8-27: MPP_sample 測試通路-sample_ao

?

源文件:

/mnt/extsd/test.wav

目標文件:

/mnt/extsd/SampleAo_AoSaveFile.pcm

參數(shù)配置:

pcm_file_path:指定音頻pcm文件的路徑,該文件是包含wave頭(大小為44Bytes)的wav格式文件,如果找不到這種格 式文件,可以用sample_ai生成一個。 pcm_sample_rate:指定采樣率,設置為文件中的采樣率的值。 pcm_channel_cnt:指定通道數(shù)目,設置為文件中的通道數(shù)。 pcm_bit_width:指定位寬,設置為文件中的位寬。 pcm_frame_size:固定指定為1024。 ao_volume:輸出的音量,范圍:0~100。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_ao -path ./sample_ao.conf

【Melis】

# sample_ao -path ./mnt/E/sample_ao.conf

退出測試:

播放完wav 文件后會自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 喇叭播放聲音正常。同時,抓取pcm 文件SampleAo_AoSaveFile.pcm。

8.2.3 sample_aoSync

測試目的:

演示接口AW_MPI_AO_SendFrameSync 的使用方法,采用同步的方式send pcm frame。而sample_ao 是采用異步的方 式。 根據(jù)配置參數(shù)讀取pcm數(shù)據(jù),然后播放聲音,從耳機口輸出聲音。

組件依賴:

mpp_aio

測試通路:

image-20221120174032703

?

圖 8-28: MPP_sample 測試通路-sample_aoSync

?

源文件:

/mnt/extsd/test.wav

目標文件:

參數(shù)配置:

pcm_file_path:指定音頻pcm文件的路徑,該文件是包含wave頭(大小為44Bytes)的wav格式文件,如果找不到這種格 式文件,可以用sample_ai生成一個。 pcm_frame_size:指定每次取pcm 的幀數(shù),用來與其他參數(shù)配合決定分配pcm frame buf 的大小。 ao_volume:指定音量大小。 test_duration:指定測試時間,單位:秒。 parse_wav_header_enable:指定是否使用sample 內(nèi)部wav header 的解析。 注意:如果使能,wav 文件在sample 內(nèi)部會自己解析這些參數(shù),并覆蓋下面指定的參數(shù)值(pcm_sample_rate、 pcm_channel_cnt、pcm_bit_width)。 pcm_sample_rate:指定采樣率,設置為文件中的采樣率的值。 pcm_channel_cnt:指定通道數(shù)目,設置為文件中的通道數(shù)。 pcm_bit_width:指定位寬,設置為文件中的位寬。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_aoSync -path ./sample_aoSync.conf

【Melis】

# sample_aoSync -path ./mnt/E/sample_aoSync.conf

退出測試:

播放完wav 文件后會自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 喇叭播放聲音正常。

8.2.4 sample_ao_resample_mixer

測試目的:

根據(jù)配置參數(shù)讀取pcm數(shù)據(jù),然后播放聲音,從耳機口或喇叭輸出聲音。 可以測試resample及混音功能。

組件依賴:

mpp_aio

測試通路:

image-20221120174053936

?

圖 8-29: MPP_sample 測試通路-sample_ao_resample_mixer

?

源文件:

/mnt/extsd/speech.wav /mnt/extsd/48000_ch2_bit16.wav

目標文件:

參數(shù)配置:

pcm_file_path:指定音頻pcm文件的路徑,該文件是包含wave頭(大小為44Bytes)的wav格式文件,如果找不到這種格 式文件,可以用sample_ai生成一個。 pcm_sample_rate:指定采樣率,設置為文件中的采樣率的值。 pcm_channel_cnt:指定通道數(shù)目,設置為文件中的通道數(shù)。 pcm_bit_width:指定位寬,設置為文件中的位寬。 pcm_frame_size:固定指定為1024。 pcm_second_chl_en: 是否啟動第二路ao,以測試resample及混音功能。 pcm_file_path_slave:指定音頻pcm文件的路徑,該文件是包含wave頭(大小為44Bytes)的wav格式文件,如果找不到 這種格式文件,可以用sample_ai生成一個。 pcm_sample_rate_slave:指定采樣率,設置為文件中的采樣率的值。 pcm_channel_cnt_slave:指定通道數(shù)目,設置為文件中的通道數(shù)。 pcm_bit_width_slave:指定位寬,設置為文件中的位寬。 pcm_frame_size_slave:固定指定為1024。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_ao_resample_mixer -path ./sample_ao_resample_mixer.conf

【Melis】

暫不支持。

退出測試:

播放完wav 文件后會自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 喇叭播放聲音正常。

8.2.5 sample_ao2ai_aec

測試目的:

本sample主要用來演示aec功能的使用。 sample創(chuàng)建兩路ai,一路通過tunnel mode 綁定于audio enc,直接aac編碼,并保存編碼后的數(shù)據(jù);一路采用非 tunnel模式,由app獲取ai數(shù)據(jù),做其他處理。 sample運行過程如下: 根據(jù)配置參數(shù)讀取pcm數(shù)據(jù),然后播放聲音。同時ai采集音頻數(shù)據(jù),并做aec回聲消除處理,后送aac編碼或直接獲取aec后 的數(shù)據(jù)用做他用。

組件依賴:

mpp_aenc mpp_aio

測試通路:

image-20221120174112839

?

圖 8-30: MPP_sample 測試通路-sample_ao2ai_aec

?

源文件:

/mnt/extsd/sample_ai/sample_ai_16000_ch1_bit16_aec_20.wav

目標文件:

/mnt/extsd/sample_ao2ai/tmp/ai_cap.pcm /mnt/extsd/sample_ao2ai/tmp/ai_cap.aac

參數(shù)配置:

pcm_src_path:指定音頻pcm文件的路徑,該文件是包含wave頭(大小為44Bytes)的wav格式文件,如果找不到這種格式 文件,可以用sample_ai生成一個。 pcm_dst_path:指定目標文件的路徑,該文件是ai組件采集音頻生成的文件,不帶wav頭,如果想聽該音頻,需手動加上 wave頭。 aac_dst_path: 指定編碼后aac目標文件路徑,該文件為aac raw data。 pcm_sample_rate:指定采樣率,設置為文件中的采樣率的值,啟用aec后,sample rate須為8000. pcm_channel_cnt:指定通道數(shù)目,設置為文件中的通道數(shù),啟用aec后,sample rate須為1. pcm_bit_width:指定位寬,設置為文件中的位寬,啟用aec后,bit_width須為16. pcm_frame_size:幀大小,固定指定為1024。 aec_en:是否啟動aec回聲消除功能。1:啟動;0:不啟用。 aec_delay_ms: 啟用aec回聲消除功能時,設置的延遲時間,主要給aec回聲消除算法使用,建議先設置為0。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_ao2ai_aec -path ./sample_ao2ai_aec.conf

【Melis】

# sample_ao2ai_aec -path ./mnt/E/sample_ao2ai_aec.conf

退出測試:

按“crtl + c”退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 喇叭播放沒有回聲。

8.2.6 sample_ao2ai_aec_rate_mixer

測試目的:

演示回聲消除功能。 sample創(chuàng)建兩路ai,一路通過tunnel mode 綁定于audio enc,直接aac編碼,并保存編碼后的數(shù)據(jù);一路采用非 tunnel模式,由app獲取ai數(shù)據(jù),做其他處理。 sample運行過程如下: 根據(jù)配置參數(shù)讀取pcm數(shù)據(jù),然后播放聲音。同時ai采集音頻數(shù)據(jù),并做aec回聲消除處理,后送aac編碼或直接獲取aec后 的數(shù)據(jù)用做他用。

組件依賴:

mpp_aenc mpp_aio

測試通路:

image-20221120174131348

?

圖 8-31: MPP_sample 測試通路-sample_ao2ai_aec_rate_mixer

?

源文件:

第一路:/mnt/extsd/speech.wav 第二路:/mnt/extsd/48000_ch2_bit16.wav

目標文件:

/mnt/extsd/ai_cap.pcm /mnt/extsd/ai_cap.aac

參數(shù)配置:

第一路音頻數(shù)據(jù)文件及對應參數(shù): pcm_src_path:指定音頻pcm文件的路徑,該文件是包含wave頭(大小為44Bytes)的wav格式文件,如果找不到這種格式 文件,可以用sample_ai生成一個。 pcm_dst_path:指定目標文件的路徑,該文件是ai組件采集音頻生成的文件,不帶wav頭,如果想聽該音頻,需手動加上 wave頭。 aac_dst_path: 指定編碼后aac目標文件路徑,該文件為aac raw data。 pcm_sample_rate:指定采樣率,設置為文件中的采樣率的值,啟用aec后,sample rate須為8000. pcm_channel_cnt:指定通道數(shù)目,設置為文件中的通道數(shù),啟用aec后,sample rate須為1. pcm_bit_width:指定位寬,設置為文件中的位寬,啟用aec后,bit_width須為16. pcm_frame_size:固定指定為1024。 aec_en: 1:啟動aec回聲消除功能;0:不啟用aec回聲消除功能; aec_delay_ms: 啟用aec回聲消除功能時,設置的延遲時間,主要給aec回聲消除算法使用,建議先設置為0。 第二路音頻數(shù)據(jù)文件及對應參數(shù): pcm_src_path_slave:指定音頻pcm文件的路徑。 pcm_sample_rate_slave:指定采樣率。 pcm_channel_cnt_slave:指定通道數(shù)目。 pcm_bit_width_slave:指定位寬。 pcm_frame_size_slave:指定幀大小,固定指定為1024。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_ao2ai_aec_rate_mixer -path ./sample_ao2ai_aec_rate_mixer.conf

【Melis】

暫不支持。

退出測試:

按“crtl + c”退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 喇叭播放沒有回聲。

8.2.7 sample_aec

測試目的:

本sample主要用來演示aec(回聲消除)功能的使用。 sample創(chuàng)建ao,播放音頻文件作為回聲。 sample創(chuàng)建ai,接收外界聲音(其中必然包括ao播放出的音頻)。mpi_ai啟動回聲消除功能。 sample從mpi_ai組件獲取采集的數(shù)據(jù)保存為wav文件,在mpi_ai打開回聲消除的情況下,wav文件應已過濾了ao播放的音 樂。如果沒有打開回聲消除,wav文件會混合外界說話聲和ao播放的音樂。 sample也包含了DRC(軟件增強音量)的測試。 啟用aec功能的方式如下: 啟用aec功能并不復雜,相比于不啟用aec功能的操作,只是在設置ai dev屬性時多了兩個屬性參數(shù): 1) ai_aec_en:是否使能aec。1:enable;0:disable。 2) aec_delay_ms: aec算法用delay參數(shù)。單位:ms,建議先設為0。 然后調(diào)用api:AW_MPI_AI_SetPubAttr()。 音頻回聲消除(參考MPP媒體開發(fā)指南文檔) 內(nèi)核驅(qū)動采集播放出的音頻數(shù)據(jù),提供接口供獲取。AI 通道獲取播放的音頻數(shù)據(jù)作為音頻參考幀,利用回聲消除算法,消除 采集的音頻數(shù)據(jù)中的相同音頻幀。

組件依賴:

mpp_aio

測試通路:

image-20221120174326973

?

圖 8-32: MPP_sample 測試通路-sample_aec

?

源文件:

/mnt/extsd/sample_aoref_8000_ch1_bit16_aec_30s.wav

目標文件:

/mnt/extsd/ai_cap.wav

參數(shù)配置:

pcm_src_path:指定音頻pcm文件的路徑,該文件是包含wave頭(大小為44Bytes)的wav格式文件,如果找不到這種格式 文件,可以用sample_ai生成一個。 pcm_dst_path:指定目標文件的路徑,該文件是ai組件采集音頻生成的文件,可配置是否帶wav頭,如果想在PC上播放音 頻文件,需帶wav頭。 pcm_sample_rate:指定采樣率,設置為文件中的采樣率的值,啟用aec后,sample rate須為8000. pcm_channel_cnt:指定通道數(shù)目,設置為文件中的通道數(shù),啟用aec后,sample rate須為1. pcm_bit_width:指定位寬,設置為文件中的位寬,啟用aec后,bit_width須為16. pcm_frame_size:固定指定為1024。 aec_en: 1:啟動aec回聲消除功能;0:不啟用aec回聲消除功能; aec_delay_ms: 啟用aec回聲消除功能時,設置的延遲時間,主要給aec回聲消除算法使用,建議先設置為0; add_wav_header:保存pcm文件是否需要加wav頭。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_aec -path ./sample_aec.conf

【Melis】

# sample_aec -path ./mnt/E/sample_aec.conf

退出測試:

按“crtl + c”退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 喇叭播放沒有回聲。

8.2.8 sample_aenc

測試目的:

從pcm文件(如:test.wav)中讀取每一楨的數(shù)據(jù),進行編碼,然后保存為aac/mp3/adpcm/pcm/g711a/g711u/g726格 式的壓縮文件。

組件依賴:

mpp_aenc mpp_aio

測試通路:

image-20221120174354642

?

圖 8-33: MPP_sample 測試通路-sample_aenc

?

源文件:

/mnt/extsd/test.wav

目標文件:

/mnt/extsd/test.aac

參數(shù)配置:

sample_aenc_src_file:指定原始pcm文件的路徑,該文件是包含wave頭的wav格式文件。 sample_aenc_dst_file:指定編碼后生成的aac或mp3或其它格式文件的路徑。注意指定的后綴名必須小寫,用于指定編 碼方式,否則按aac格式來編碼。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_aenc -path ./sample_aenc.conf

【Melis】

# sample_aenc -path ./mnt/E/sample_aenc.conf

退出測試:

處理完wav 文件后,會自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 音頻編碼生成文件test.aac 播放正常。

8.2.9 sample_ai2aenc

測試目的:

mic錄音送入編碼器,取得每一幀數(shù)據(jù)的編碼,寫到文件中。

組件依賴:

mpp_aenc mpp_aio

測試通路:

image-20221120174615324

?

圖 8-34: MPP_sample 測試通路-sample_ai2aenc

?

源文件:

目標文件:

/mnt/extsd/test.aac

參數(shù)配置:

dst_file:生成文件路徑 encoder_type:編碼類型,如“aac” sample_rate:mic錄音采樣值 channel_cnt: 錄音通道數(shù) (1 or 2) bit_width:錄音采樣位寬 frame_size: 幀大小 (如:1024 / 2048) test_duration: sample一次測試時間(單位:s)

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_ai2aenc -path ./sample_ai2aenc.conf

【Melis】

暫不支持。

退出測試:

測試時間達到指定時間后,自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 生成編碼文件test.aac播放正常。

8.2.10 sample_ai2aenc2muxer

測試目的:

根據(jù)配置參數(shù)采集對應的pcm數(shù)據(jù),然后根據(jù)配置信息將pcm數(shù)據(jù)編碼,最后寫入到文件中進行保存。

組件依賴:

mpp_aenc mpp_aio

測試通路:

image-20221120180717015

?

圖 8-35: MPP_sample 測試通路-sample_ai2aenc2muxer

?

源文件:

目標文件:

/mnt/extsd/SampleAi2Aenc2Muxer_AiSaveFile.pcm /mnt/extsd/sample_ai2aenc2muxer_mono_16000.aac

參數(shù)配置:

dst_file:指定目標pcm文件的路徑,該文件是包含wave頭的wav格式文件。 cap_dura:指定采集時間長度,單位:s。 chn_cnt:指定通道數(shù)目,通常為1或2。 bit_width:指定位寬,必須設置為16。 smp_rate:指定采樣率,通常設置為8000。 bitRate:編碼的碼率,單位:bps。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_ai2aenc2muxer -path ./sample_ai2aenc2muxer.conf

【Melis】

# sample_ai2aenc2muxer -path ./mnt/E/sample_ai2aenc2muxer.conf

退出測試:

測試時間達到指定時間后,自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 生成文件sample_ai2aenc2muxer_mono_16000.aac 播放正常,同時抓取pcm 文件 SampleAi2Aenc2Muxer_AiSaveFile.pcm。

8.2.11 sample_select

測試目的:

演示AW_MPI_SYS_HANDLE_Select()的用法。 從pcm文件(如:sample_aenc.wav)中讀取每一楨的數(shù)據(jù),進行不同編碼類型同時編碼,然后保存為aac/mp3/adpcm/ pcm/g711a/g711u/g726格式的壓縮文件。

組件依賴:

mpp_aenc

測試通路:

image-20221120180958916

?

圖 8-36: MPP_sample 測試通路-sample_select

?

源文件:

/mnt/extsd/sample_select.wav

目標文件:

/mnt/extsd/sample_select.aac

參數(shù)配置:

sample_select_asrc_file:指定原始pcm文件的路徑,該文件是包含wave頭的wav格式文件。 sample_select_adst_file:指定編碼后生成的aac/mp3/adpcm/pcm/g711a/g711u/g726格式文件的路徑。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_select -path ./sample_select.conf

【Melis】

暫不支持。

退出測試:

測試完wav文件會自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 生成aac 文件sample_select.aac 播放正常。

8.2.12 sample_adec

測試目的:

從已編碼的ADTS格式的AAC文件(如:test.aac)中讀取每一楨的數(shù)據(jù),進行解碼,然后保存為WAV格式的pcm文件

組件依賴:

mpp_adec mpp_aio

測試通路:

image-20221120181038350

?

圖 8-37: MPP_sample 測試通路-sample_adec

?

源文件:

/mnt/extsd/test.aac

目標文件:

/mnt/extsd/test.wav

參數(shù)配置:

aac_file_path:指定原始已壓縮的音頻文件的路徑,該文件必須為aac格式的文件。 pcm_file_path:指定解碼aac后生成的pcm文件的路徑。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_adec -path ./sample_adec.conf

【Melis】

# sample_adec -path ./mnt/E/sample_adec.conf

退出測試:

aac 文件處理完,會自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 音頻解碼生成目標文件test.wav 播放正常。

8.2.13 sample_adec2ao

測試目的:

從已編碼的ADTS格式的AAC文件(如:test.aac)中讀取每一楨的數(shù)據(jù),進行解碼,然后通過ao輸出。

組件依賴:

mpp_adec mpp_aio

測試通路:

image-20221120181343452

?

圖 8-38: MPP_sample 測試通路-sample_adec2ao

?

源文件:

/mnt/extsd/test.aac

目標文件:

參數(shù)配置:

audio_file_path: 指定音頻文件路徑。 pcm_sample_rate: 指定pcm的采樣率,單位: Hz。默認16000,表示16000Hz。對于g711和g726需要配置該值。 pcm_channel_cnt: 指定pcm通道數(shù),默認1,表示單通道。對于g711和g726需要配置該值。 audio_data_type: 指定音頻數(shù)據(jù)類型(g711a:19;g711u:20;aac:37;g726a:21,g726u:2000)。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_adec2ao -path ./sample_adec2ao.con

【Melis】

不支持

退出測試:

音頻文件處理完,會自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 音頻解碼后,輸出聲音正常。

8.2.14 sample_demux2adec

測試目的:

根據(jù)配置參數(shù)讀取視頻文件,解封裝,獲取到音頻數(shù)據(jù)后,送解碼器,保存為wav文件。

組件依賴:

mpp_demuxer mpp_adec

測試通路:

image-20221120181400905

?

圖 8-39: MPP_sample 測試通路-sample_demux2adec

?

源文件:

/mnt/extsd/test.mp4

目標文件:

/mnt/extsd/output.wav

參數(shù)配置:

src_file:指定mp4視頻文件的路徑。 dst_file:指定wav音頻文件的路徑。

測試指令: 【Tina】

# cd /mnt/extsd/ # ./sample_demux2adec -path ./sample_demux2adec.con

【Melis】

暫不支持。

退出測試:

測試完文件test.mp4,可以自動退出測試

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 生成音頻文件output.wav 播放正常。

8.2.15 sample_demux2adec2ao

測試目的:

根據(jù)配置參數(shù)讀取視頻文件,解封裝,獲取到音頻數(shù)據(jù)后,送解碼器,然后播放出聲音,從耳機口或喇叭輸出聲

組件依賴:

mpp_demuxer mpp_adec mpp_aio

測試通路:

image-20221120181418259

?

圖 8-40: MPP_sample 測試通路-sample_demux2adec2ao

?

源文件:

/mnt/extsd/test.mp4

目標文件:

參數(shù)配置:

src_file:指定mp4視頻文件的路徑

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_demux2adec2ao -path ./sample_demux2adec2ao.con

【Melis】

# sample_demux2adec2ao -path ./mnt/E/sample_demux2adec2ao.con

退出測試:

測試完文件test.mp4,可以自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 喇叭播放聲音,聲音正常。

8.3 ISE 和 EIS

8.3.1 sample_fish

測試目的:

該sample測試mpi_ise組件單目魚眼功能。 創(chuàng)建ise組件,將圖像傳輸給mpi_ise,ISE組件對圖像進行校正,通過調(diào)用mpi獲取ISE組件處理后的數(shù)據(jù),到達指定次數(shù)后,停止運行并銷毀ISE組件。也可以手動按ctrl-c,終止測試。 如果需要獲取ISE組件處理后的YUV數(shù)據(jù),需要將sample_fish.c中的Save_Picture宏打開;如果需要在Normal模式下對PTZ參數(shù)進行調(diào)節(jié),需要將sample_fish.c中的Dynamic_PTZ宏打開。 ISE GDC補充說明: 對于新增的ISE GDC算法,由于Warp_Ptz4In1這個模式要求輸出分辨率是輸入分辨率的兩倍,而現(xiàn)有的2048原圖對于內(nèi)存以及硬件方面性能有所增加,所以針對Warp_Ptz4In1增加了一張1024原圖以及sample_fish_ptz4in1.conf,若需要運行Warp_Ptz4In1這個模式可以使用fisheye_1024x1024.yuv420這張圖像以及sample_fish_ptz4in1.conf。

組件依賴:

mpp_ise mpp_vdec mpp_hw_display mpp_vo mpp_adec mpp_demuxer

測試通路:

源文件:

/mnt/extsd/fisheye_2048x2048.yuv42

目標文件:

參數(shù)配置:

在C源文件里面的ISE_GROUP_INS_CNT宏可以控制測試開啟的Ise 實例數(shù)量,目前默認為2 1.auto_test_count:指定自動化測試次數(shù) 2.process_count: 指定ISE組件處理次數(shù) 3.pic_width:指定源圖像寬度 4.pic_height:指定源圖像高度 5.pic_stride:指定源圖像的stride值,該值必須是32的倍數(shù) 6.pic_frame_rate:指定發(fā)送源圖像的幀率 7.pic_file_path:指定源圖像的路徑 8.ise_dewarp_mode:指定單目魚眼校正的模式,包括180模式(WARP_PANO180)/360度左右展開模式(WARP_PANO360 )/PTZ模式(WARP_NORMAL)/畸變校正模式(WARP_UNDISTORT)/360度上下展開模式(WARP_180WITH2) 9.ise_mount_mode:指定PTZ模式下鏡頭的安裝方式,包括頂裝(MOUNT_TOP)/壁裝(MOUNT_WALL)/地裝( MOUNT_BOTTOM)指定360度上下展開模式下鏡頭的安裝方式,包括頂裝(MOUNT_TOP)/壁裝(MOUNT_WALL)指定360 度左右展開模式下鏡頭的安裝方式,包括頂裝(MOUNT_TOP)/壁裝(MOUNT_WALL) 10.ise_normal_pan:左右移動的角度 11.ise_normal_tilt:上下移動的角度 12.ise_normal_zoom:鏡頭變焦倍數(shù) 13.ise_port_num:指定ISE組件端口個數(shù) 14.ise_output_file_path:指定ISE組件輸出圖像的路徑 15.ise_portx_width:指定校正處理后圖像的寬度 16.ise_portx_height:指定校正處理后圖像的高度 17.ise_portx_stride:指定校正處理后圖像的stride值,該值必須是32的倍數(shù) 18.ise_portx_flip_enable:指定是否使能圖像翻轉(zhuǎn) 19.ise_portx_mirror_enable:指定是否使能圖像鏡像 注:每個ISE端口圖像翻轉(zhuǎn)和鏡像只能使能其中一個,測試時需要拷貝yuv文件到測試路徑下面,程序默認打開程序所在文件夾 的yuv文件。

測試指令: 【Tina】

# cd /mnt/extsd/ # ./sample_fish -path ./sample_fish.con

【Melis】

暫不支持。

退出測試:

自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印

8.3.2 sample_virvi2fish2venc

測試目的:

該sample測試mpi_vi、mpi_ise、mpi_venc組件的綁定組合。創(chuàng)建mpi_vi、mpi_ise和mpi_venc,將它們綁定,再分 別啟動。mpi_vi采集圖像,傳輸給mpi_ise對魚眼圖像進行校正,mpi_ise將校正后的圖像傳給mpi_venc進行編 碼,同時保存裸碼流視頻文件

組件依賴:

mpp_ise

測試通路:

image-20221120181530045

?

圖 8-41: MPP_sample 測試通路-sample_virvi2fish2venc

?

源文件:

目標文件:

/mnt/extsd/AW_FishEncoderVideoChn0.H26

參數(shù)配置:

1.auto_test_count:指定自動測試次數(shù) 2.dev_id:指定VI Dev設備節(jié)點 3.src_width:指定camera采集的圖像寬度,由于VI模塊硬件設計的原因,src_width必須是32的倍數(shù) 4.src_height:指定camera采集的圖像高度 5.src_frame_rate:指定camera采集圖像的幀率 6.ISEPortNum:指定ISE組件端口個數(shù) 7.ise_dewarp_mode:指定單目魚眼校正的模式,包括180模式(WARP_PANO180)/360度左右展開模式(WARP_PANO360 )/PTZ模式(WARP_NORMAL)/ 畸變校正模式(WARP_UNDISTORT)/360度上下展開模式( WARP_180WITH2) 8.ise_mount_mode:指定PTZ模式下鏡頭的安裝方式,包括頂裝(MOUNT_TOP)/壁裝(MOUNT_WALL)/地裝( MOUNT_BOTTOM) 指定360度上下展開模式下鏡頭的安裝方式,包括頂裝(MOUNT_TOP)/壁裝( MOUNT_WALL) 指定360度左右展開模式下鏡頭的安裝方式,包括頂裝(MOUNT_TOP)/壁裝( MOUNT_WALL) 9.ise_normal_pan:左右移動的角度 10.ise_normal_tilt:上下移動的角度 11.ise_normal_zoom:鏡頭變焦倍數(shù) 12.ise_portx_width:指定校正后圖像的寬度 13.ise_portx_height:指定校正后圖像的高度 14.ise_portx_stride:指定校正后圖像的stride值,該值必須是32的倍數(shù) 15.ise_portx_flip_enable:指定是否使能圖像翻轉(zhuǎn) 16.ise_portx_mirror_enable:指定是否使能圖像鏡像 17.VencChnNum:指定VENC組件通道個數(shù) 18.encoder_type:指定編碼格式 19.encoder_count:指定每次測試編碼幀數(shù),-1為循環(huán)編碼,不退出sample_virvi2fish2venc 20.picture_format:指定編碼后圖像的格式 21.venc_chnx_dest_width:指定編碼后圖像的寬度 22.venc_chnx_dest_height:指定編碼后圖像的高度 23.venc_chnx_dest_frame_rate:指定編碼幀率 24.venc_chnx_dest_bit_rate:指定編碼碼率 25.venc_chnx_output_file_path:指定編碼后視頻文件的路徑 注:每個ISE端口圖像翻轉(zhuǎn)和鏡像只能使能一個其中一個

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_virvi2fish2venc -path ./sample_virvi2fish2venc.con

【Melis】

暫不支持。

退出測試:

測試達到設定的時間后自動退出測試

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 使用VLC播放測試生成的目標文件/mnt/extsd/AW_FishEncoderVideoChn0.H264 正常。

測試說明:

由于硬件設計的原因,一個ISE組件對應一個Group,一個Group最多可以創(chuàng)建4個Port,其中Port 0為ISE硬件模塊處理后 輸出的圖像,Port 1~Port 3是對Port 0輸出的圖像進行縮放而得到的。 Group創(chuàng)建完后必須創(chuàng)建Port 0,Port 1~ Port3可以根據(jù)實際需要依次創(chuàng)建,Port 1~Port 3支持無極縮放,圖像縮 放的范圍為Port 0寬高的1/8 ~ 1,各個Port之間相互獨立,互不影響。 ISE組件端口ID號和VENC組件通道ID號一一對應,ISE組件端口個數(shù)必須與VENC組件通道個數(shù)相等。

8.3.3 sample_virvi2fish2vo

測試目的:

該sample測試mpi_vi、mpi_ise、mpi_vo組件的綁定組合。創(chuàng)建mpi_vi、mpi_ise和mpi_vo,將它們綁定,再分別啟 動。mpi_vi采集圖像,傳輸給mpi_ise對魚眼圖像進行校正,mpi_ise將校正后的圖像傳給mpi_vo進行顯示預覽。

組件依賴:

mpp_hw_display mpp_vo mpp_ise

測試通路:

image-20221120181611709

?

圖 8-42: MPP_sample 測試通路-sample_virvi2fish2vo

?

源文件:

目標文件:

/mnt/extsd/isp0_1920_1080_60_ctx_saved.bi

參數(shù)配置:

1.auto_test_count:指定自動化測試次數(shù) 2.dev_id:指定VI Dev設備節(jié)點 3.src_width:指定camera采集的圖像寬度,由于VI模塊硬件設計的原因,src_width必須是32的倍數(shù) 4.src_height:指定camera采集的圖像高度 5.src_frame_rate:指定camera采集圖像的幀率 6.ise_dewarp_mode:指定單目魚眼校正的模式,包括180模式(WARP_PANO180)/360度左右展開模式(WARP_PANO360 )/Normal模式(WARP_NORMAL)/畸變校正模式(WARP_UNDISTORT)/360度上下展開模式(WARP_180WITH2) 7.ise_mount_mode:指定Normal模式下鏡頭的安裝方式,包括頂裝(MOUNT_TOP)/壁裝(MOUNT_WALL)/地裝( MOUNT_BOTTOM)指定360度上下展開模式下鏡頭的安裝方式,包括頂裝(MOUNT_TOP)/壁裝(MOUNT_WALL)指定360 度左右展開模式下鏡頭的安裝方式,包括頂裝(MOUNT_TOP)/壁裝(MOUNT_WALL) 8.ise_normal_pan:左右移動的角度 9.ise_normal_tilt:上下移動的角度 10.ise_normal_zoom:鏡頭變焦倍數(shù) 11.ise_width:指定校正后圖像的寬度 12.ise_height:指定校正后圖像的高度 13.ise_stride:指定校正后圖像的stride值,該值必須是32的倍數(shù) 14.ise_flip_enable:指定是否使能圖像翻轉(zhuǎn) 15.ise_mirror_enable:指定是否使能圖像鏡像 16.display_width:指定顯示寬度 17.display_height:指定顯示高度 18.vo_test_duration:指定測試時間,0為循環(huán)顯示,不退出sample_virvi2fish2vo

測試指令: 【Tina】

# cd /mnt/extsd/ # ./sample_virvi2fish2vo -path ./sample_virvi2fish2vo.con

【Melis】

# sample_virvi2fish2vo -path ./mnt/E/sample_virvi2fish2vo.con

退出測試:

不自動退出測試,需要“ctrl + c” 退出測試

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. LCD屏幕實時顯示Camera 采集的視頻圖像正常

8.3.4 sample_virvi2eis2venc

測試目的:

該例程用于測試防抖相關(guān)功能。支持離線仿真、在線調(diào)試模式,支持綁定、非綁定的組件形式。 1. 使用 config.mk 文件里面的 EIS_OFFLINE_SIMU = Y/N 來控制是否使用離線仿真模式。 2. 使用 config.mk 文件里面的 EIS_MULTI_INSTANCE = Y/N 來控制是否使用防抖多實例模式。 3. Bypass 模式需要修改根目錄下的下面注釋(用于旁路防抖輸出的視頻數(shù)據(jù),通常用于防抖調(diào)試或者仿真的數(shù)據(jù)采集): #if 0 ViEisVencCfg.EisCfg.stEisAttr.eEisAlgoMode = EIS_ALGO_MODE_B ViEisVencCfg.EisCfg.stEisAttr.pBPDataSavePath = "/tmp"; ViEisVencCfg.EisCfg.stEisAttr.bSaveYUV = 0; #endif 并且該模式必須全部關(guān)閉 VO 打開編碼,也就是 use_vo = 0,use_venc = 1 4. 使用 #define EIS_BYPASS_VENC 宏定義來控制是否開啟離線模式下的編碼,如果定義了該宏,那么會直接輸出 YUV 文件。

組件依賴:

mpp_eis mpp_hw_display mpp_vo

測試通路:

image-20221120181719046

?

圖 8-43: MPP_sample 測試通路-sample_virvi2eis2venc

?

源文件:

目標文件:

參數(shù)配置:

reboot_cnt = 1000 #僅用于在線模式,控制重啟測試的次數(shù) frame_cnt = 150 #控制采集的視頻幀數(shù) input_bufnum = 10 #輸入 buffer 的數(shù)量,目前調(diào)試階段建議值至少為 11 output_bufnum = 5 #輸出 buffer 的數(shù)量,目前調(diào)試階段建議值至少為 10 time_delay = 0 #控制陀螺儀與視頻幀的時間戳對齊偏移,目前推薦 -33 sync_tolerance = 1 #時間戳對齊的容忍度,建議值 5 以內(nèi),不能為 0 # src parameter # dev number:0(CSI0)/1(CSI1) # cap_width * cap_height:720p/1080p; # fps: 30 video_dev = 1 #僅用于在線模式,控制采集視頻的節(jié)點 cap_width = 1920 #僅用于在線模式,控制采集視頻的分辨率 cap_height = 1080 fps = 30 Vo 如果與編碼同時打開,則 Vo 是優(yōu)先的,也就是編碼的使能選項會被 VO 的使能選項覆蓋掉。 # VO, type: [lcd][hdmi] use_vo = 1 # 僅用于在線模式,控制是否開啟視頻實時預覽(在多實例模式下該選項無效,強制打開) disp_w = 1920 # 僅用于在線模式,控制視頻顯示的分辨率 disp_h = 1080 disp_type = "hdmi" # 僅用于在線模式,視頻顯示的終端類型 # VENC: default use EIS output size use_venc = 0 # 在多實例模式下該選項無效,強制打開,離線仿真模式下該選項使用 EIS_BYPASS_VENC 來控 制。 # VENC save file and offline simulation mode save file path. save_file = "/mnt/extsd/SampleEis2Venc.H264" # 控制編碼輸出文件的保存位置(離線模式如果不開編碼則默 認保存在 /tmp 目錄下,路徑為:/tmp/SampleEis2File.yuv) gyro_file = "/mnt/extsd/SampleEis2VencGyro.txt" #僅用于離線模式,指定輸入的陀螺儀數(shù)據(jù)文件 video_file = "/mnt/extsd/SampleEis2VencVideo.yuv" #僅用于離線模式,指定輸入的視頻數(shù)據(jù)文件 timestamp_file = "/mnt/extsd/SampleEis2VencTs.txt" #僅用于離線模式,指定輸入的視頻的時間戳數(shù)據(jù)文件

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_virvi2eis2venc -path ./sample_virvi2eis2venc.co

【Melis】

暫不支持。

退出測試:

按“ctrl + c”退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 測試防抖功能正常。

8.3.5 sample_ise_dzoom

測試目的:

該sample測試使用ise實現(xiàn)dzoom功能。 需要注意的是,此功能需要使用gdc算法庫,因此必須在啟用mpp ise組件時,勾選gdc算法庫。在此sample中,VI組件與 ISE通過綁定的方式,向ISE組件輸入YUV數(shù)據(jù)。ISE組件的輸出使用非綁定模式,手動獲取ISE數(shù)據(jù)送入VO組件。通過 設置配置文件中的display_rotation可設置g2d旋轉(zhuǎn)。通過設置set_crop,sample會起一個線程取測試動態(tài)設置 crop到ISE組件。

組件依賴:

mpp_vi mpp_hw_display mpp_vo mpp_ise

測試通路:

源文件:

目標文件:

參數(shù)配置:

dev_id:指定VI Dev設備節(jié)點 src_width:指定camera采集的圖像寬度,由于VI模塊硬件設計的原因,src_width必須是32的倍數(shù) src_height:指定camera采集的圖像高度 src_frame_rate:指定camera采集圖像的幀率 display_width:指定顯示寬度 display_height:指定顯示高度 display_rotation: 圖像旋轉(zhuǎn)角度 ise_width:指定校正后圖像的寬度 ise_height:指定校正后圖像的高度 ise_stride:指定校正后圖像的stride值,該值必須是32的倍數(shù) ise_ldc_zoom_h:水平視場角的縮放尺度 ise_ldc_zoom_v:垂直視角場的縮放尺度 ise_ldc_center_offset_x:圖像中心點相對物理中心點的水平偏移 ise_ldc_center_offset_y:圖像中心點相對物理中心點的豎直偏移 test_crop:測試動態(tài)設置crop test_duration:指定測試時間,0為循環(huán)顯示,不退出sample_ise_dzoom

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_ise_dzoom -path ./sample_ise_dzoom.con

【Melis】

暫不支持。

結(jié)束測試:

達到設定的測試時間后,自動退出測試

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 通過VO設備查看縮放效果正常

8.3.6 sample_gdc_dzoom

測試目的:

該sample測試使用gdc算法庫實現(xiàn)dzoom功能。 需要內(nèi)核打開ISE硬件驅(qū)動,并在menuconfig中勾選gdc算法庫。

組件依賴:

mpp_gdc

測試通路:

源文件:

目標文件:

參數(shù)配置:

src_pic_width: 源圖片寬度 src_pic_height:源圖片高度 src_pic_format:源圖片格式 src_pic_stride: 源圖片Y分量存儲寬度 src_file_path: 原圖片文件路徑 dst_pic_width: 輸出圖片寬度(需32位對齊) dst_pic_height: 輸出圖片高度 dst_pic_format: 輸出圖片格式 dst_pic_stride: 輸出圖片Y分量存儲寬度 dst_file_path: 輸出圖片文件路徑 crop_x: crop區(qū)域橫坐標 crop_y: crop區(qū)域縱坐標 crop_w:crop區(qū)域?qū)挾?crop_h:crop區(qū)域高度 warp_mode: gdc工作模式

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_gdc_dzoom -path ./sample_gdc_dzoom.con

【Melis】

暫不支持。

結(jié)束測試:

達到設定的測試時間后,自動退出測試

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 通過VO設備查看縮放效果正常。

8.4 視頻顯示

8.4.1 sample_vo

測試目的:

從yuv原始數(shù)據(jù)文件xxx.yuv中讀取視頻幀,標記時間戳,送給mpi_vo組件顯示。 sample_vo也負責視頻幀的幀管理,接收mpi_vo組件歸還的視頻幀,重裝新幀,再送入mpi_vo組件顯示。

組件依賴:

mpp_hw_display mpp_vo

測試通路:

image-20221120181754900

?

圖 8-44: MPP_sample 測試通路-sample_vo

?

源文件:

/mnt/extsd/resources/Tennis_1920x1080_24.yuv 測試需要的yuv 文件,可以用ffmpeg 轉(zhuǎn)換得到,轉(zhuǎn)換指令: ./ffmpeg -i two_video.mp4 Tennis_1920x1080_24.yu

目標文件:

參數(shù)配置:

yuv_file_path:指定yuv原始數(shù)據(jù)文件的路徑。 pic_width:指明yuv原始數(shù)據(jù)文件的視頻幀的寬度 pic_height:指明yuv原始數(shù)據(jù)文件的視頻幀的高度 display_width:指定輸出圖像的寬度 display_height:指定輸出圖像的高度 pic_format:指明yuv原始數(shù)據(jù)文件的視頻幀的像素格式 disp_type:指定顯示設備類型(hdmi, lcd, cvbs) frame_rate:指定播放yuv原始數(shù)據(jù)文件的幀率

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_vo -path ./sample_vo.con

【Melis】

暫不支持。

退出測試:

播放完yuv 文件后自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. LCD屏幕顯示播放yuv 文件的視頻圖像正常。

8.4.2 sample_UILayer

測試目的:

測試UILayer的格式。 sample自己創(chuàng)建指定格式的RGB圖,設置給UILayer。

組件依賴:

mpp_hw_display mpp_vo

測試通路:

image-20221120181823704

?

圖 8-45: MPP_sample 測試通路-sample_UILayer

?

源文件:

目標文件:

參數(shù)配置:

pic_width:源圖的寬度 pic_height:源圖的高度 display_width:指定輸出圖像的寬度 display_height:指定輸出圖像的高度 bitmap_format:源圖格式

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_UILayer -path ./sample_UILayer.con

【Melis】

暫不支持。

退出測試:

一直顯示,需要“ctrl+c”手動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. LCD屏幕顯示綠色和藍色矩形填充

8.5 G2D

8.5.1 sample_g2d

測試目的:

該sample 通過直接處理image圖片來演示g2d模塊常用功能的使用方式。g2d模塊支持最大2K輸入輸出。

組件依賴:

測試通路:

源文件:

/mnt/extsd/sample_g2d/board_1920x1080.nv1

目標文件:

/mnt/extsd/sample_g2d/dst.yuv

參數(shù)配置:

g2d 模塊功能的選擇主要通過參數(shù)的組合來實現(xiàn),如: 1) rotate 配置conf文件中的dst_rotate 配置項,設置要旋轉(zhuǎn)的角度:0:none,1:90,2:180,3:270. Note: 此時 dst_width 及 dst_height配置項要分別與src_width及src_height一致,否則 會同時啟動scale功能,但此時會產(chǎn)生錯誤結(jié)果(g2d模塊不能同時做rotation及scaling). 2) scale 配置conf文件中的dst_rotate為0(disable rotation), 配置dst_width dst_height目標大小。 3) cut cut功能用來截取部分src內(nèi)容,具體區(qū)域由 src_rect_x = src_rect_y = src_rect_w = src_rect_h = 設定,注意:若無效啟動rotation, dst_rotate = 0 4) pixel format格式轉(zhuǎn)換 該功能通過參數(shù): pic_format = nv21 dst_format = nv12 來實現(xiàn)。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_g2d -path ./sample_g2d.con

【Melis】

暫不支持。

退出測試:

測試完后可以自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 使用YUView 軟件分析生成的YUV文件正常。

8.5.2 sample_vi_g2d

測試目的:

該sample從mpi_vi組件獲取視頻幀,調(diào)用g2d驅(qū)動做旋轉(zhuǎn)、剪切、縮放等處理,處理后的圖像送mpi_vo顯示,也可保存為 原始圖片供分析。g2d模塊支持最大2K輸入輸出。

組件依賴:

mpp_hw_display mpp_vo

測試通路:

image-20221120181909528

?

圖 8-46: MPP_sample 測試通路-sample_vi_g2d

?

源文件:

目標文件:

/mnt/extsd/pic[0].nv21 /mnt/extsd/pic[1].nv21

參數(shù)配置:

dev_num:指定VI Dev設備節(jié)點 frame_rate: 指定camera采集圖像的幀率 pic_format: 指定camera采集圖像像素格式 drop_frame_num:指定vi組件丟棄的幀數(shù) src_width,src_height:指定camera采集的源圖寬度和高度 src_rect_x,src_rect_y,src_rect_w,src_rect_h:指定g2d處理的源圖區(qū)域 dst_rotate:指定g2d旋轉(zhuǎn)角度 dst_width,dst_height:指定g2d處理后的目標buffer的寬度和高度 dst_rect_x,dst_rect_y,dst_rect_w,dst_rect_h:指定g2d處理的目標圖區(qū)域 dst_store_count:指定保存的圖片數(shù)量 dst_store_interval:指定保存圖片的幀間隔 store_dir:指定保存目錄,目錄必須已經(jīng)存在 display_flag:是否VO顯示 display_x,display_y,display_w,display_h:指定VO的顯示區(qū)域 test_duration:指定測試時間,單位:秒。0表示無限時長。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_vi_g2d -path ./sample_vi_g2d.conf

【Melis】

# sample_vi_g2d -path ./mnt/E/sample_vi_g2d.conf

退出測試:

不自動退出測試,需要“ctrl + c” 退出測試

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 使用YUView 軟件分析生成的YUV文件正常。 3. LCD屏幕實時顯示Camera 采集的視頻圖像正常。

8.6 CE

8.6.1 sample_twinchn_virvi2venc2ce

測試目的:

該sample 同時測試兩路編碼的加解密。 兩路mpi_vi 和mpi_venc 組件分別綁定組合。mpi_vi采集圖像,直接傳輸給mpi_venc 進行編碼,在進行ce加密解密。

組件依賴:

PACKAGE_libopenssl

測試通路:

image-20221120181928952

?

圖 8-47: MPP_sample 測試通路-sample_twinchn_virvi2venc2ce

?

源文件:

目標文件:

/mnt/extsd/isp0_1920_1080_60_ctx_saved.bin

參數(shù)配置:

dev_node_main:指定主路vipp 設備號。 dev_node_sub:指定子路vipp 設備號。 src_size_main:指定主路源大小。3840:3840x2160,1080:1920x1080,720:1280x720,640:640x360。 src_size_sub:指定子路源大小。3840:3840x2160,1080:1920x1080,720:1280x720,640:640x360。 video_dst_file_main:指定主路目標文件路徑。 video_dst_file_sub:指定子路目標文件路徑。 video_framerate_main:指定主路視頻幀率,單位:fps。 video_framerate_sub:指定子路視頻幀率,單位:fps。 video_bitrate_main:指定主路視頻碼率,單位:bps。 video_bitrate_sub:指定子路視頻碼率,單位:bps。 video_size_main:指定主路視頻目標大小。3840:3840x2160,1080:1920x1080,720:1280x720,640: 640x360。 video_size_sub指定子路視頻目標大小。3840:3840x2160,1080:1920x1080,720:1280x720,640:640x360 。 video_encoder_main:指定主路編碼格式。"H.264","H.265"。 video_encoder_sub:指定子路編碼格式。"H.264","H.265"。 rc_mode_main:指定主路rc mode。0:CBR,1:VBR,2:FIXQP,3:QPMAP。 rc_mode_sub:指定子路rc mode。0:CBR,1:VBR,2:FIXQP,3:QPMAP。 enable_fast_enc_main:指定主路fast enc 是否開啟。1:enable,0:disable。 enable_fast_enc_sub:指定子路fast enc 是否開啟。1:enable,0:disable。 enable_roi_main:指定主路roi 是否開啟。1:enable,0:disable。 enable_roi_sub:指定子路roi 是否開啟。1:enable,0:disable。 video_duration_main:指定主路視頻時長,單位:s。 video_duration_sub:指定子路視頻時長,單位:s。 test_duration:指定測試時長,單位:s。 color2grey:彩轉(zhuǎn)灰。yes:開啟,no:關(guān)閉。 3dnr:3D去噪聲。yes:開啟,no:關(guān)閉。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_twinchn_virvi2venc2ce -path ./sample_twinchn_virvi2venc2ce.conf

【Melis】

暫不支持。

退出測試:

測試達到設定的時間后自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 使用VLC 軟件分析生成的raw文件正常。

8.6.2 sample_virvi2venc2ce

測試目的:

該sample 測試一路編碼的加解密。 mpi_vi 和mpi_venc 組件綁定組合。mpi_vi采集圖像,直接傳輸給mpi_venc 進行編碼,在進行ce加密解密。

組件依賴:

PACKAGE_libopenssl

測試通路:

image-20221120181941799

?

圖 8-48: MPP_sample 測試通路-sample_virvi2venc2ce

?

源文件:

目標文件:

/mnt/extsd/AW_VirviEncoder.H264

參數(shù)配置:

auto_test_count:指定自動測試次數(shù) encoder_count:指定每次測試編碼幀數(shù) dev_num:指定VI Dev設備節(jié)點 src_width:指定camera采集的圖像寬度 src_height:指定camera采集的圖像高度 src_frame_rate:指定camera采集圖像的幀率 dest_encoder_type:指定編碼格式 dest_width:指定編碼后圖像的寬度 dest_height:指定編碼后圖像的高度 dest_frame_rate:指定編碼幀率 dest_bit_rate:指定編碼碼率 dest_pic_format:指定編碼后圖像的格式 output_file_path:指定編碼后視頻文件的路徑

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_virvi2venc2ce -path ./sample_virvi2venc2ce.conf

【Melis】

暫不支持。

退出測試:

達到指定測試次數(shù)后自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 使用VLC 軟件分析生成的raw文件正常。

8.7 UVC 和 UAC

8.7.1 sample_uvc2vdec_vo

測試目的:

測試mpi_uvc->mpi_vdec的綁定方式傳輸數(shù)據(jù),mpi_vdec->mpi_vo采用非綁定方式。 從mpi_uvc組件獲取mjpeg編碼格式圖片,交給mpi_vdec組件解碼,配置vdec解碼縮小,并且大小圖兩路輸出, mpi_vdec的輸出采用非綁定方式,app主動獲取大小圖,再交給mpi_vo組件的兩個圖層分別顯示。

組件依賴:

mpp_uvc mpp_hw_display mpp_vo mpp_vdec

測試通路:

image-20221120182000288

?

圖 8-49: MPP_sample 測試通路-sample_uvc2vdec_vo

?

源文件:

目標文件:

參數(shù)配置:

dev_name: uvc設備字符串 pic_format: uvc輸出圖像格式 capture_width: uvc輸出圖像寬度 capture_height: uvc輸出圖像高度 capture_framerate: uvc采集幀率 decode_sub_out_width: vdec解碼輸出的小圖寬度 decode_sub_out_height: vdec解碼輸出的小圖高度 display_main_x: 主圖顯示區(qū)域的左上角起點坐標x display_main_y: 主圖顯示區(qū)域的左上角起點坐標y display_main_width: 主圖顯示區(qū)域?qū)挾?display_main_height: 主圖顯示區(qū)域高度 display_sub_x: 子圖顯示區(qū)域的左上角起點坐標x display_sub_y: 子圖顯示區(qū)域的左上角起點坐標y display_sub_width: 子圖顯示區(qū)域?qū)挾?display_sub_height: 子圖顯示區(qū)域高度 test_frame_count: 測試幀數(shù),0代表無限。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_uvc2vdec_vo -path ./sample_uvc2vdec_vo.conf

【Melis】

暫不支持。

退出測試:

達到測試幀數(shù)后自動退出測試,或者按“ctrl + c”退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. LCD屏幕正常顯示。

8.7.2 sample_uvc2vdenc2vo

測試目的:

測試mpi_uvc->mpi_vdec的綁定方式傳輸數(shù)據(jù),mpi_vdec->mpi_vo也采用綁定方式。 從mpi_uvc組件獲取mjpeg編碼格式圖片,交給mpi_vdec組件解碼,再傳給mpi_vo組件顯示。

組件依賴:

mpp_uvc mpp_hw_display mpp_vo mpp_vdec

測試通路:

image-20221120183915416

?

圖 8-50: MPP_sample 測試通路-sample_uvc2vdenc2vo

?

源文件:

目標文件:

參數(shù)配置:

dev_name: uvc設備字符串 pic_format: uvc輸出圖像格式 capture_width: uvc輸出圖像寬度 capture_height: uvc輸出圖像高度 capture_framerate: uvc采集幀率 decode_out_width: vdec解碼輸出圖像的寬度 decode_out_height: vdec解碼輸出圖像的高度 display_width:顯示寬度 display_height:顯示高度 test_duration:測試時間,0代表無限。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_uvc2vdenc2vo -path ./sample_uvc2vdenc2vo.conf

【Melis】

暫不支持。

退出測試:

達到測試幀數(shù)后自動退出測試,或者按“ctrl + c”退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. LCD屏幕正常顯示。

8.7.3 sample_uvc2vo

測試目的:

測試mpi_uvc組件的綁定方式輸出。 mpi_uvc組件輸出yuyv格式(或其他raw格式)到mpi_vo組件顯示。mpi_uvc和mpi_vo組件采用綁定方式連接。

組件依賴:

mpp_uvc mpp_hw_display mpp_vo

測試通路:

image-20221120184430678

?

圖 8-51: MPP_sample 測試通路-sample_uvc2vo

?

源文件:

目標文件:

參數(shù)配置:

dev_name: uvc設備字符串 pic_format: uvc輸出圖像格式 capture_width: uvc輸出圖像寬度 capture_height: uvc輸出圖像高度 display_width:顯示寬度 display_height:顯示高度 test_duration:測試時間,單位秒 brightness:uvc亮度設置 contrast:uvc對比度設置 hue:uvc色度設置 saturation:uvc飽和度設置 sharpness:uvc銳度設置

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_uvc2vo -path ./sample_uvc2vo.conf

【Melis】

暫不支持。

退出測試:

達到測試幀數(shù)后自動退出測試,或者按“ctrl + c”退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. LCD屏幕正常顯示。

8.7.4 sample_uvc_vo

測試目的:

測試mpi_uvc組件的非綁定方式輸出。 從mpi_uvc組件獲取yuyv格式(或其他raw格式),交給mpi_vo組件顯示。mpi_uvc和mpi_vo組件采用非綁定方式運行。

組件依賴:

mpp_uvc mpp_hw_display mpp_vo

測試通路:

image-20221120184455995

?

圖 8-52: MPP_sample 測試通路-sample_uvc_vo

?

源文件:

目標文件:

參數(shù)配置:

dev_name: uvc設備字符串 pic_format: uvc輸出圖像格式 capture_width: uvc輸出圖像寬度 capture_height: uvc輸出圖像高度 display_width:顯示寬度 display_height:顯示高度 test_frame_count:測試幀數(shù),0代表無限幀數(shù)。 brightness:uvc亮度設置 contrast:uvc對比度設置 hue:uvc色度設置 saturation:uvc飽和度設置 sharpness:uvc銳度設置

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_uvc_vo -path ./sample_uvc_vo.conf

【Melis】

暫不支持。

退出測試:

達到測試幀數(shù)后自動退出測試,或者按“ctrl + c”退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. LCD屏幕正常顯示。

8.7.5 sample_uvcout

測試目的:

讀取jpg文件,反復送由UVC設備輸出到電腦(注意:不是獲取UVC攝像頭的數(shù)據(jù),而是把整個板子當作UVC攝像頭,將圖像送 由電腦顯示)電腦端使用VLC工具查看。

組件依賴:

mpp_uvc

測試通路:

image-20221120184516051

?

圖 8-53: MPP_sample 測試通路-sample_uvcout

?

源文件:

目標文件:

參數(shù)配置:

uvc_dev:uvc設備號 vin_dev:攝像頭數(shù)據(jù)采集設備號 cap_format:數(shù)據(jù)采集格式,nv21, nv12, yu12, yv12 cap_width:圖像采集寬度 cap_height:圖像采集高度 cap_frame_rate:圖像采集幀率 encoder_type:編碼類型 enc_frame_quarity:編碼質(zhì)量 enc_width:編碼寬度 enc_height:編碼高度 enc_frame_rate:編碼幀率 enc_bit_rate:編碼bit率 4M(4194304) 8M(8388608) use_eve:是否使用人臉識別,1-使用,0-不使用

測試指令:

【Tina】

1. 執(zhí)行命令生成video設備節(jié)點 執(zhí)行run_otg腳本生成設備節(jié)點 ./run_otg 2. 啟動數(shù)據(jù)傳輸(uvc設備號要改為上述步驟生成的video節(jié)點) cd /mnt/extsd/ ./sample_uvcout -path ./sample_uvcout.conf 3. 使用VLC進行查看

【Melis】

暫不支持。

退出測試:

按“ctrl + c”退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. PC端使用VLC工具播放正常。

詳細配置步驟:

==>內(nèi)核配置: make kernel_menuconfig [*] Device Driver ---> [*] USB support ---> [*] USB Gadget Support ---> [*] USB functions configuarble through configfs [*] USB Webcam function ==>刪除掉adb 的初始化,防止adb 影響webcam 的功能 rm target/allwinner/v459-perf1/busbox-init-base-files/etc/init.d/S50usb ==>編譯sample_uvcout vim softwinner/eyesee-mpp/middleware/v459/tina.mk #去掉下面行的注釋: make -c sample/sample_uvcout -f tina.mk all 編譯mkmpp, sample_uvcout目錄生成sample_uvcout。 ==>拷貝sample_uvcout/run_otg 腳本到小機 ==>確定小機生成新的video節(jié)點 ls /dev/video* /dev/video0 /dev/video1 /dev/video2 #初始化usb webcam 驅(qū)動,生成新的video節(jié)點,用于傳輸數(shù)據(jù) ./run_otg ==>#查看新增vidoe節(jié)點 ls /dev/video* /dev/video0 /dev/video1 /dev/video2 /dev/video3 ==>#確定新節(jié)點,是video4 ==>修改sample_uvcout.conf 配置文件 vi sample/sample_uvcout/sample_uvcout.conf [parameter] uvc_dev = 2 #將新增節(jié)點的序號加入這里。 在小機上運行sample ==>./sample_uvcout -path ./sample_uvcout.conf ==>電腦查看,可使用VLC [媒體] --> [打開捕獲設備] --> 捕獲模式[DirectShow] 適配器設備名稱 [UVC camera]

8.7.6 sample_uac

測試目的:

測試UAC功能。

組件依賴:

測試通路:

源文件:

sample_ai_pcm.wav

目標文件:

參數(shù)配置:

pcm_file_path = "/mnt/extsd/sample_ai_pcm.wav" pcm_sample_rate = 48000 pcm_channel_cnt = 1 pcm_bit_width = 16 pcm_frame_size = pcm_cap_duration = 60 pcm_ai_gain = 23 uac_audio_card_name = "hw:UAC1Gadget" 環(huán)境準備和測試步驟: 1. 需要開啟內(nèi)核配置 CONFIG_USB_CONFIGFS_F_UAC1 CONFIG_SND_PROC_FS 2. 執(zhí)行以下命令打開USB的UAC功能 ./setusbconfig-configfs uac1 3. 此時,PC上將會創(chuàng)建一個新的audio(AC接口),同時板端將創(chuàng)建一個新的聲卡。 檢查聲卡的方法: ------------------ cat /proc/asound/cards 0 [sun8iw19codec ]: sun8iw19-codec - sun8iw19-codec sun8iw19-codec 1 [snddaudio0 ]: snddaudio0 - snddaudio0 snddaudio0 2 [UAC1Gadget ]: UAC1_Gadget - UAC1_Gadget UAC1_Gadget 0 ------------------ 其中,“2 [UAC1Gadget ]”就是UAC聲卡。 此時,需要修改配置文件sample_uac.conf中uac_audio_card_name為"hw:UAC1Gadget"。 4. 執(zhí)行sample,測試通路是:mic --> uac --> PC ./sample_uac -path ./sample_uac.conf 5. 在PC上使用音頻工具抓取UAC的PCM數(shù)據(jù)驗證測試結(jié)果。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_uac -path ./sample_uac.conf

【Melis】

暫不支持。

結(jié)束測試:

達到設定的測試時間后,自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 按以上方法在PC上使用音頻工具抓取UAC的PCM數(shù)據(jù)驗證測試結(jié)果符合預期。

8.7.7 sample_usbcamera

測試目的:

測試UVC、UAC復合設備。

組件依賴:

測試通路:

源文件:

目標文件:

參數(shù)配置:

uvc_dev:uvc設備號 vin_dev:攝像頭數(shù)據(jù)采集設備號 enc_bit_rate:JPEG、H264模式編碼碼率 enable_uac:是否啟用測試uac功能 uac_dev:uac設備號 uac_sample_rate:音頻采樣率 uac_chn_cnt:音頻通道號 uac_bit_width:音頻位寬 uac_ai_gain:采集音頻音量 測試使用步驟 uvc內(nèi)核配置: CONFIG_USB_CONFIGFS_F_UVC=y uac內(nèi)核配置: CONFIG_USB_CONFIGFS_F_UAC1=y CONFIG_SND_PROC_FS=y 初始化uvc、uac復合設備: setusbconfig uvc,uac1 確認生成節(jié)點: ==>#查看新增vidoe節(jié)點 ls /dev/video* /dev/video0 /dev/video1 /dev/video2 /dev/video3 ==>#確定新節(jié)點,是video4 ==>修改sample_uvcout.conf 配置文件 vi sample/sample_uvcout/sample_uvcout.conf [parameter] uvc_dev = 2 #將新增節(jié)點的序號加入這里。 cat /proc/asound/cards 0 [sun8iw19codec ]: sun8iw19-codec - sun8iw19-codec sun8iw19-codec 1 [snddaudio0 ]: snddaudio0 - snddaudio0 snddaudio0 2 [UAC1Gadget ]: UAC1_Gadget - UAC1_Gadget UAC1_Gadget 0 enable_uac = 1 uac_audio_card_name = "hw:UAC1Gadget" 運行sample ./sample_usbcamera -path /mnt/extsd/sample_usbcamera.conf 注: uvc、uac復合設備只能在uvc bulk模式下使用,sample已改為usb bulk模式。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_usbcamera -path ./sample_usbcamera.conf

【Melis】

暫不支持。

結(jié)束測試:

達到設定的測試時間后,自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 測試UVC、UAC復合設備功能正常。

8.8 多媒體文件

8.8.1 sample_demux

測試目的:

從視頻文件(如:test.mp4)中分離出所有的視頻、音頻、subtitle數(shù)據(jù),分別組成對應文件。

組件依賴:

mpp_demuxer

測試通路:

image-20221120184602005

?

圖 8-54: MPP_sample 測試通路-sample_demux

?

源文件:

/mnt/extsd/two_video.mp4

目標文件:

/mnt/extsd/video.bin /mnt/extsd/audio.bin

參數(shù)配置:

src_file:指定原始視頻文件的路徑 src_size:指定原始視頻文件的視頻大小,如1080p seek_position:指定原始視頻文件的開始解析位置(ms) video_dst_file:解析出來的視頻數(shù)據(jù)生成的文件路徑 audio_dst_file:解析出來的音頻數(shù)據(jù)生成的文件路徑 subtitle_dst_file:解析出來的文字數(shù)據(jù)生成的文件路徑 test_duration: sample一次測試時間(單位:s)

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_demux -path ./sample_demux.conf

【Melis】

暫不支持。

退出測試:

測試完文件two_video.mp4,可以自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 生成解析文件 video.bin 和audio.bin。

8.8.2 sample_file_repair

測試目的:

該sample 用來修復mp4 文件。

組件依賴:

mpp_muxer

測試通路:

源文件:

/mnt/extsd/1080p.mp4

目標文件:

覆蓋原文件 /mnt/extsd/1080p.mp4

參數(shù)配置:

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_file_repair 1080p.mp4

【Melis】

暫不支持。

退出測試:

修復完源文件,會自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 使用VLC 軟件播放修復后的mp4文件正常。

8.9 AI demo

8.9.1 sample_odet_demo

測試目的:

演示AI demo方案。 該方案共有四路主應用,分別為: 第一路: 支持H265高清編碼存盤。 第二路: 支持640*480預覽。 第三路: 支持NPU檢測,返回坐標給其它兩路繪框。 第四路: 支持抓拍。

組件依賴:

mpp_vi mpp_venc mpp_vo

測試通路:

源文件:

目標文件:

參數(shù)配置:

環(huán)境準備 1. 準備TF卡存儲模型 TF卡的作用是存儲模型文件和保存H265編碼數(shù)據(jù)。 AI Demo用例對模型文件的存儲位置有要求,需要將模型文件存儲在TF的指定位置,在本用例中,這個位置是: /mnt/extsd/object_det/model/ 2. 掛載存儲卡到系統(tǒng) 執(zhí)行如下命令將其掛載到 /mnt/extsd目錄下: 掛載命令: mount -t vfat /dev/mmcblk1p1 /mnt/extsd 掛載成功后,執(zhí)行 ls -l /mnt/extsd/object_det/model/可以看到模型文件 3. AI應用放入TF卡 有兩種辦法將測試AI應用放入SD卡,分別介紹: 第一種,即使用讀卡器手動將應用拷貝到TF卡根目錄。 第二種,通過ADB將測試AI應用推到平臺端系統(tǒng),這種方式不需要將TF卡從平臺端取下來,在線即可完成。

測試指令:

【Tina】

1. 啟動OSD顯示應用 OSD顯示應用的主要作用是對當前的目標檢測應用的統(tǒng)計信息進行顯示,主要包括檢測類別,目標檢測個數(shù),NPU檢測幀率等 等,受限于LCD尺寸的限制,部分信息,比如檢測概率通過串口輸出。 OSD應用已經(jīng)隨Tina系統(tǒng)打包進固件里面,不需要像AI用例一樣手工拷貝或者adb推入,所以可以直接在控制臺下執(zhí)行 df_andi& 即可。 2. 啟動AI Demo應用 # cd /mnt/extsd/ # ./sample_odet_demo

【Melis】

暫不支持。

結(jié)束測試:

按"ctrl + c"退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 錄制寫卡功能正常。 3. 拍照功能正常。 4. LCD屏幕預覽正常,同時顯示人臉識別正常。

8.9.2 sample_RegionDetect

測試目的:

演示區(qū)域檢測功能。

組件依賴:

mpp_vi mpp_venc

測試通路:

源文件:

目標文件:

參數(shù)配置:

環(huán)境準備 1. 板端接好camera和屏幕。 2. 將motion目錄復制到tf卡中。 motion目錄的文件: aw-pdet.nb:模型文件(在mpp sample_RegionDetect目錄下) libpdet.so:網(wǎng)絡級運行庫(在mpp sample_RegionDetect目錄下) libVIPlite.so:NPU用戶態(tài)運行庫(單獨申請?zhí)峁?libVIPuser.so:NPU用戶態(tài)BSP運行庫(單獨申請?zhí)峁?run.sh:demo執(zhí)行腳本(見下面的備注) sample_RegionDetect:編譯生成的demo程序 備注: run.sh腳本的內(nèi)容: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD ./sample_RegionDetect $@

測試指令:

【Tina】

demo演示 1. shell進入/mnt/extsd/motion目錄。 2. 執(zhí)行./run.sh N開始區(qū)域檢測demo演示,其中N∈{0,1,2,3}。分別為:移動偵測,區(qū)域檢測,越界檢測,人形檢 測。 3. 檢測demo會顯示預覽界面,其中紅色為配置區(qū)域或界線,綠色正方形小框顯示移動偵測區(qū)域,綠色矩形框為人形區(qū)域,中 心為綠色小點。越界算法以人形中心點為準計算,藍色點為越界坐標。 4. 錄像自動保存為motion.h265。 5. 查看log打印,區(qū)域檢測打印為: on_cross_callback: RECT[0] type: 1;其中RECT[0]表示第0個區(qū)域,type: 1表示進入?yún)^(qū)域,2表示離開區(qū) 域。越界檢測打印為: on_cross_callback: LINE[0] type: 1。其中LINE[0]表示第 一條線,type:1表示從左到右,2表示從右到左。

【Melis】

暫不支持。

結(jié)束測試:

按"ctrl + c" 退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 查看預覽界面,其中紅色為配置區(qū)域或界線,綠色正方形小框顯示移動偵測區(qū)域,綠色矩形框為人形區(qū)域,中心為綠色小 點。

8.10 其他

8.10.1 sample_glog

測試目的:

該sample 演示glog (Google Logging Library) 的使用方法。

組件依賴:

測試通路:

源文件:

目標文件:

參數(shù)配置:

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_glog

【Melis】

暫不支持。

退出測試:

測試完后可以自動退出測試。

預期結(jié)果:

alogd、alogw、aloge 可以正常打印。

8.10.2 sample_hello

測試目的:

該sample 用來驗證mpp middleware sample 運行基本環(huán)境是否正常。

組件依賴:

測試通路:

源文件:

目標文件:

參數(shù)配置:

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_hello

【Melis】

暫不支持。

退出測試:

測試完后可以自動退出測試。

預期結(jié)果:

運行正常,不死機。

8.10.3 sample_pthread_cancel

測試目的:

該sample測試pthread_cancel()對目標線程發(fā)送cancel信號后,目標線程接收cancel信號的處理過程。

組件依賴:

測試通路:

源文件:

目標文件:

參數(shù)配置:

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_pthread_cancel

【Melis】

暫不支持。

退出測試:

按“Enter”可以正常退出測試。

預期結(jié)果:

線程可以正常退出測試。

8.10.4 sample_motor

測試目的:

【說明:該項測試暫不支持】 該sample 演示電機motor 測試。

組件依賴:

測試通路:

源文件:

目標文件:

參數(shù)配置:

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_motor

【Melis】

暫不支持。

退出測試:

自動結(jié)束測試。

預期結(jié)果:

8.10.5 sample_sound_controler

測試目的

說明:該項測試暫不支持】 演示語音識別。 1.聲控:支持的命令詞: { "小志開始錄像", "小志停止錄像", "小志拍照", "小志連拍", "小志關(guān)機" } 2.每次送給音頻320個字節(jié)音頻數(shù)據(jù) 3.包含的庫和頭文件在external/sound_controler 目錄下 4.音頻要求: pcm_sample_rate = 16000 pcm_bit_width = 16

組件依賴:

mpp_external_sound_controler mpp_aio

測試通路:

image-20221120184942099

?

圖 8-55: MPP_sample 測試通路-sample_sound_controler

?

源文件:

目標文件:

/mnt/extsd/sample_sound_controler.pcm

參數(shù)配置:

pcm_file_path:指定pcm 文件路徑。 pcm_sample_rate:指定采樣率。 pcm_channel_cnt:指定通道數(shù)。 pcm_bit_width:指定位寬,必須設置為16。 pcm_frame_size:指定pcm 幀的大小,單位:bytes。 pcm_cap_duration:指定測試時間,單位:s。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_sound_controler -path ./sample_sound_controler.conf

【Melis】

暫不支持。

退出測試:

達到設定測試時長后可以自動結(jié)束測試。

預期結(jié)果:

可以獲得正確的控制指令,同時生成pcm 文件sample_sound_controler.pcm。

8.10.6 sample_ai_Demo_0.9.2

智能算子demo

8.10.7 sample_ai_Demo_0.9.6

智能算子demo

8.10.8 sample_thumb

測試目的:

演示抓取縮略圖。

組件依賴:

mpp_vi mpp_venc

測試通路:

image-20221120185002099

?

圖 8-56: MPP_sample 測試通路-sample_thumb

?

源文件:

目標文件:

參數(shù)配置:

測試指令:

【Tina】

暫不支持。

【Melis】

# sample_thumb

結(jié)束測試:

自動結(jié)束測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 打印縮略圖的大小等信息符合預期。

8.10.9 sample_nna

測試目的:

演示人形檢測、人臉檢測。 1.將編譯出來的sample_nna放到nna_g2d文件夾中 2.run ./sample_nna 人形檢測 3.run ./sample_nna xx 人臉檢測 4.識別結(jié)果 nna_g2d/out/nna.h264

組件依賴:

mpp_vi mpp_venc

測試通路:

源文件:

圖片源文件:nna_g2d/c1080.jpg

目標文件:

生成的編碼文件:nna_g2d/out/nna.h264

參數(shù)配置:

測試指令:

【Tina】

暫不支持。

【Melis】

暫不支持。

結(jié)束測試:

檢測完成后會自動結(jié)束測試。

預期結(jié)果:

生成編碼文件nna_g2d/out/nna.h264,標注人臉位置。

8.10.10 sample_MotionDetect

測試目的:

該sample演示視頻編碼庫的移動偵測功能的使用。 創(chuàng)建mpi_vi和mpi_venc,將它們綁定,再分別啟動。mpi_vi采集圖像,直接傳輸給mpi_venc進行編碼。 編碼過程中獲取移動偵測信息,可保存裸碼流視頻文件。支持手動按ctrl-c,終止測試。 注意:視頻編碼驅(qū)動只支持在VBR, IPC-MODE模式下做移動偵測。

組件依賴:

mpp_vi mpp_venc

測試通路:

源文件:

目標文件:

/mnt/extsd/md.h265

參數(shù)配置:

online_en: 指定是否開啟在線編碼,默認0,表示不開啟在線編碼,即當前為離線編碼。 online_share_buf_num: 指定在線編碼的共享buffer個數(shù)(1或2),默認2,表示2個buffer。注意該配置僅當配置在 線模式時才生效。 encoder_count: 指定每次測試編碼幀數(shù)。 dev_num: 指定VI Dev設備節(jié)點。 src_pic_format: 指定采集圖像的格式。 src_width: 指定camera采集的圖像寬度。 src_height: 指定camera采集的圖像高度。 src_frame_rate: 指定camera采集圖像的幀率。 dst_encoder_type: 指定編碼格式。 dst_width: 指定編碼后圖像的寬度。 dst_height: 指定編碼后圖像的高度。 dst_frame_rate: 指定編碼幀率。 dst_bit_rate: 指定編碼碼率。 output_file_path: 指定編碼后視頻文件的路徑。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_MotionDetect -path ./sample_MotionDetect.conf

【Melis】

暫不支持。

結(jié)束測試:

達到設定的測試時間后,自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 使用VLC 軟件分析生成的raw文件正常。

8.10.11 sample_PersonDetect

測試目的:

該sample演示使用人形檢測庫,將檢測的人形區(qū)域在主碼流和子碼流上分別畫框、編碼。 針對主碼流和子碼流分別創(chuàng)建mpi_vi和mpi_venc,將它們綁定,再分別啟動。mpi_vi采集圖像,直接傳輸給mpi_venc進 行編碼。 子碼流的mpi_vi再開一路虛通道用于人形檢測,再開一路虛通道進行預覽。

組件依賴:

mpp_vi mpp_venc

測試通路:

源文件:

目標文件:

/mnt/extsd/mainStreamPd.raw /mnt/extsd/subStreamPd.raw

參數(shù)配置:

main_vipp: 主碼流VIPP號。 main_src_width: 主VIPP輸出圖像寬度。 main_src_height: 主VIPP輸出圖像高度。 main_pixel_format: 主VIPP輸出圖像格式。nv21, lbc25等。 sub_vipp: 子碼流VIPP號。 sub_src_width: 子VIPP輸出圖像寬度。 sub_src_height: 子VIPP輸出圖像高度。 sub_pixel_format: 子VIPP輸出圖像格式。nv21, lbc25等。 src_frame_rate: 采集幀率。 orl_color: 指定畫人形框的顏色。 enable_main_vipp_orl: 是否在主VIPP畫人形框。 enable_sub_vipp_orl: 是否在子VIPP畫人形框。 preview_vipp:用于預覽的vipp通道號。 preview_width: 預覽的顯示寬度,0表示不預覽。 preview_height: 預覽的顯示高度,0表示不預覽。 main_encode_type: 主碼流編碼類型, H.265, H.264等。 main_encode_width: 主碼流的編碼目標寬度。 main_encode_height: 主碼流的編碼目標高度。 main_encode_frame_rate: 主碼流的編碼目標幀率。 main_encode_bitrate: 主碼流的編碼目標碼率,單位: bps。 main_file_path: 保存主碼流的文件路徑,空表示不保存主碼流。 sub_encode_type: 子碼流編碼類型, H.265, H.264等。 sub_encode_width: 子碼流的編碼目標寬度。 sub_encode_height: 子碼流的編碼目標高度。 sub_encode_frame_rate: 子碼流的編碼目標幀率。 sub_encode_bitrate: 子碼流的編碼目標碼率,單位: bps。 sub_file_path: 保存子碼流的文件路徑,空表示不保存子碼流。 test_duration: 測試時間,0表示無限。單位:秒。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_PersonDetect -path ./sample_PersonDetect.conf

【Melis】

暫不支持。

結(jié)束測試:

達到設定的測試時間后,自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 使用VLC 軟件分析生成的raw文件正常。

8.10.12 sample_directIORead

測試目的:

該sample演示使用directIO方式讀文件。理論上不占內(nèi)存作為緩存。

組件依賴:

測試通路:

源文件:

/mnt/extsd/1080p.mp4

目標文件:

/mnt/extsd/1080p_rewrite.mp4

參數(shù)配置:

src_file: 指定被讀取的源文件。 dst_file: 讀出的內(nèi)容寫入目標文件,可以在測試結(jié)束后和源文件比對。判斷是否讀取正確。如果為空,則讀取內(nèi)容不寫入 目標文件。 read_size: 指定一次讀取的長度,單位字節(jié)。 read_interval: 指定讀取的間隔時間,單位: ms。 loop_cnt: 指定循環(huán)讀取文件的次數(shù),0表示無限次。

測試指令:

【Tina】

# cd /mnt/extsd/ # ./sample_directIORead -path ./sample_directIORead.conf

【Melis】

暫不支持。

結(jié)束測試:

達到設定測試次數(shù)后,自動退出測試。

預期結(jié)果:

1. 測試程序運行正常,測試過程沒有異常打印。 2. 使用VLC 軟件分析生成的mp4文件正常。

9 FAQ

本章節(jié)主要匯總 MPP sample 使用過程中可能遇到的一些問題及對應的解決方法。

9.1 某些方案上開機后執(zhí)行某些 MPP sample 會運行失敗

在某些客戶分支方案上運行 MPP sample 之前,需要先 kill 掉客戶的應用程序(比如:/usr/bin /sdvcam),否則,可能出現(xiàn)與 MPP sample 測試的資源沖突而導致其運行失敗。

9.2 MPP sample 測試時 SD 卡識別異常

情況一:

在測試一些錄流的 MPP sample 之前,由于系統(tǒng)存儲空間不足,需要準備 SD 卡。但是,有時會 碰到識別到的 SD 卡空間太小,格式化 SD 卡也沒用。此時,需要在 Linux 環(huán)境下用 dd 命令刪 除前面的分區(qū)。

情況二:

某些客戶方案上,SD 卡默認沒有 mount。mount 的方法:

# mkdir /mnt/extsd/ # mount -t vfat /dev/mmcblk0 /mnt/extsd/ 或 # mount -t vfat /dev/mmcblk0p1 /mnt/extsd/

9.3 視頻編解碼常用功能檢查方法

9.3.1 常用檢測工具介紹

9.3.1.1 碼流播放軟件

測試時,檢查編碼后的文件是否正常,一般需要使用 VLC 等播放軟件看下是否有花屏、馬賽克、 卡頓等問題。

image-20221120185053786

?

圖 9-1: VLC 播放碼流

?

9.3.1.2 碼流分析軟件

測試時,檢查編碼參數(shù)是否符合預期,一般需要使用 MediaInfo 軟件。

image-20221120185136099

?

圖 9-2: MediaInfo 分析碼流

?

提取 MediaInfo 分析碼流的信息如下:

概覽 完整名稱 : Y:toolsffmpeg1-編碼格式1-1080p-H264.mp4 格式 : MPEG-4 格式配置 (Profile) : Base Media 編解碼器 ID : isom (isom/iso2/mp41) 文件大小 : 15.5 MiB 時長 : 57 秒 648 毫秒 總體碼率 : 2 252 kb/s 視頻 ID : 1 格式 : AVC 格式/信息 : Advanced Video Codec 格式配置 (Profile) : High@L5.1 格式設置 : CABAC / 1 Ref Frames 格式設置, CABAC : 是 格式設置, 參考幀 : 1 幀 格式設置, GOP : M=1, N=50 編解碼器 ID : avc1 編解碼器 ID/信息 : Advanced Video Coding 時長 : 57 秒 648 毫秒 源, 時長 : 57 秒 599 毫秒 碼率 : 2 106 kb/s 寬度 : 1 920 像素 高度 : 1 080 像素 畫面比例 : 16:9 幀率 : 20.018 FPS 色彩空間 : YUV 色度抽樣 : 4:2:0 位深 : 8 位 掃描類型 : 逐行掃描 (連續(xù)) 數(shù)據(jù)密度 [碼率/(像素*幀率)] : 0.051 流大小 : 14.5 MiB (94%) 源, 流大小 : 14.5 MiB (94%) 語言 : 英語 (English) 色彩范圍 : Limited 色彩原色 : BT.709 傳輸特性 : BT.709 矩陣系數(shù) : BT.709 mdhd_Duration : 57648 編碼配置區(qū)塊 (box) : avcC

9.3.1.3 YUV 文件分析軟件

分析 YUV 文件一般使用 YUView 軟件。

為使工具分析能力更強,需要配置 ffmpeg 動態(tài)庫。

YUView 工具配置 ffmpeg 動態(tài)庫的方式:

image-20221120185203405

?

圖 9-3: YUView 軟件配置 ffmpeg 動態(tài)庫

?

9.3.1.4 H264 碼流分析工具

常用的 H264 碼流分析工具:Elescard StreamEye。 該工具可解析幀類型信息、流的信息等,支持逐幀播放和分析編碼層內(nèi)容等。

9.3.2 典型的視頻編解碼功能檢測示例

9.3.2.1 編碼格式

使用 MediaInfo 軟件檢查編碼格式。

? 格式: HEVC

9.3.2.2 彩轉(zhuǎn)灰

使用 PC 軟件 VLC 播放彩轉(zhuǎn)灰測試生成的視頻文件,效果如下:

image-20221120185237306

?

圖 9-4: 彩轉(zhuǎn)灰效果

?

9.3.2.3 旋轉(zhuǎn)編碼

使用 PC 軟件 VLC 播放測試生成的視頻文件,效果如下:

第一組

? 不旋轉(zhuǎn)、不翻轉(zhuǎn)的效果

? 不旋轉(zhuǎn)、翻轉(zhuǎn)的效果

? 旋轉(zhuǎn) 90 度、不翻轉(zhuǎn)的效果

? 旋轉(zhuǎn) 90 度、翻轉(zhuǎn)的效果

image-20221120185305801

?

圖 9-5: 旋轉(zhuǎn)-1

?

第二組

? 旋轉(zhuǎn) 180 度、不翻轉(zhuǎn)的效果

? 旋轉(zhuǎn) 180 度、翻轉(zhuǎn)的效果

? 旋轉(zhuǎn) 270 度、不翻轉(zhuǎn)的效果

? 旋轉(zhuǎn) 270 度、翻轉(zhuǎn)的效果

image-20221120185325320

?

圖 9-6: 旋轉(zhuǎn)-2

?

9.3.2.4 P 幀幀內(nèi)刷新

H264:

使用 Elescard StreamEye 4.6 工具(只支持 H264),按如下截圖配置后,開啟 P 幀幀內(nèi)刷 新后,圖像看到一個橙色的豎狀矩形條,同時逐幀往后查看時矩形條會從左往右移動;關(guān)閉 P 幀 幀內(nèi)刷新后,則無此矩形條。

image-20221120185345891

?

圖 9-7: H264-開啟 P 幀幀內(nèi)刷新

?

image-20221120185407387

?

圖 9-8: H264-關(guān)閉 P 幀幀內(nèi)刷新

?

H265:

使用 YUView 工具(需要配置 ffmpeg 動態(tài)庫)可分析 H265 文件,勾選 Pred Mode 后,可顯 示一個藍色的豎狀矩形條,同時逐幀往后查看時矩形條會從左往右移動;關(guān)閉 P 幀幀內(nèi)刷新后, 則無此矩形條。

image-20221120185425260

?

圖 9-9: H265-開啟 P 幀幀內(nèi)刷新

?

image-20221120185502545

?

圖 9-10: H265-關(guān)閉 P 幀幀內(nèi)刷新

?

9.3.2.5 視頻編碼 OSD

使用 PC 軟件 VLC 播放測試生成的視頻文件,效果如下:

1.顯示 OSD 的效果:

image-20221120185520358

?

圖 9-11: 編碼 OSD-1

?

2.改變 Region 位置后,顯示 OSD 的效果:

image-20221120185539487

?

圖 9-12: 編碼 OSD-2

?

3.OSD 坐標和大小示意圖

image-20221120185558887

?

圖 9-13: OSD 坐標和大小示意圖

?

9.4 音頻編解碼常用功能檢查方法

9.4.1 常用檢測工具介紹

1.普通效果測試 將測試生成的 wav 文件拷貝到 PC 端使用 Windows Media Player 播放。

2.專業(yè)波形測試 專業(yè)的音頻波形分析軟件:Audacity。 比如測試回聲消除效果時,可借助該工具分析。

使用說明: 檢測采集通道的數(shù)據(jù)和回采通道的數(shù)據(jù)的延遲關(guān)系是否正確。 需要特殊的正弦波文件 tone_16k_accurate.wav,tone_8k_accurate.wav。 一般采集通道的數(shù)據(jù)應該稍微延遲一些。

操作步驟:

為進行專業(yè)波形測試,需修改代碼,audio_hw.c 中打開宏 #define AI_HW_AEC_DEBUG_EN。

然后編譯 sample_aec,這樣底層模塊在運行過程中會保存采集通道的數(shù)據(jù)和回采通道的數(shù) 據(jù)。

再用軟件 Audacity 進行分析,從波形上看延遲時間是否正常。

image-20221120185621911

?

圖 9-14: 通道波形對比圖

?審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11230

    瀏覽量

    208934
  • 開發(fā)指南
    +關(guān)注

    關(guān)注

    0

    文章

    34

    瀏覽量

    7531
  • Tina
    +關(guān)注

    關(guān)注

    2

    文章

    45

    瀏覽量

    16957
  • MPP
    MPP
    +關(guān)注

    關(guān)注

    0

    文章

    24

    瀏覽量

    10582
收藏 人收藏

    評論

    相關(guān)推薦

    Tina_Linux系統(tǒng)裁剪開發(fā)指南

    Tina_Linux系統(tǒng)裁剪開發(fā)指南1 概述2 Tina系統(tǒng)裁剪簡介2.1 boot0裁剪2.2 uboot裁剪2.3 內(nèi)核裁剪2.3.1 刪除不使用的功能2.3.2 刪除不使用的驅(qū)動2.3.3
    的頭像 發(fā)表于 03-06 09:52 ?1516次閱讀

    全新Tina Linux v5.0釋放!帶來全新AIoT產(chǎn)品開發(fā)體驗

    Tina Linux基于linux內(nèi)核深度定制開發(fā)的AIoT系統(tǒng)。“
    發(fā)表于 07-12 18:25

    V853開發(fā)板試用】編譯 Tina Linux部分之buildroot 編譯

    繼【V853開發(fā)板試用】編譯 Tina Linux部分之openWrt 編譯之后,開始buildroot 編譯buildroot 的編譯
    發(fā)表于 09-01 22:57

    V853如何實現(xiàn)mpp sample外編?

    V853開發(fā)板購買鏈接:https://item.hqchip.com/2500385672.html1.主題V系列多媒體mpp sample外編方法2.問題背景用戶希望
    發(fā)表于 01-29 10:42

    V853芯片 如何在Tina V85x平臺切換sensor?

    V853開發(fā)板購買鏈接:https://item.hqchip.com/2500386536.html目的V85x某方案目前默認Sensor是GC2053。實際使用時若需要用到GC4663(比如
    發(fā)表于 02-13 11:03

    v85x 在 eyesee-mpp 中添加一個hello_world sample 的流程

    V853開發(fā)板購買鏈接:https://item.hqchip.com/2500386536.html1. 為什么要在eyesee-mpp 中添加sample?1)保持整個open
    發(fā)表于 04-12 09:28

    Tiny6410 Linux開發(fā)指南詳解

    Tiny6410 Linux 開發(fā)指南
    發(fā)表于 07-08 17:12 ?210次下載
    Tiny6410 <b class='flag-5'>Linux</b><b class='flag-5'>開發(fā)指南</b>詳解

    Rockchip Linux SDK的開發(fā)指南的詳細資料說明

    本文檔的主要內(nèi)容詳細介紹的是Rockchip Linux SDK的開發(fā)指南的詳細資料說明。
    發(fā)表于 01-10 17:17 ?74次下載
    Rockchip <b class='flag-5'>Linux</b> SDK的<b class='flag-5'>開發(fā)指南</b>的詳細資料說明

    Tina_Linux_系統(tǒng)軟件開發(fā)指南

    Tina_Linux_系統(tǒng)軟件開發(fā)指南
    的頭像 發(fā)表于 03-02 15:25 ?1776次閱讀
    <b class='flag-5'>Tina_Linux</b>_系統(tǒng)軟件<b class='flag-5'>開發(fā)指南</b>

    Tina Linux配置開發(fā)指南

    Tina Linux配置開發(fā)指南
    的頭像 發(fā)表于 03-02 15:28 ?1.6w次閱讀
    <b class='flag-5'>Tina</b> <b class='flag-5'>Linux</b>配置<b class='flag-5'>開發(fā)指南</b>

    Linux NOR開發(fā)指南

    Linux NOR開發(fā)指南
    的頭像 發(fā)表于 03-06 09:55 ?925次閱讀
    <b class='flag-5'>Linux</b> NOR<b class='flag-5'>開發(fā)指南</b>

    Tina Linux圖形系統(tǒng)開發(fā)指南

    本文檔將介紹 Allwinner Tina Linux 中已經(jīng)移植好的窗口系統(tǒng),以及怎么使用,包括 MiniGUI、QT5、EFL、GTK+(WebkitGtk、Midori)、DirectFB、Wayland,整體結(jié)構(gòu) 。
    的頭像 發(fā)表于 03-06 11:00 ?3055次閱讀
    <b class='flag-5'>Tina</b> <b class='flag-5'>Linux</b>圖形系統(tǒng)<b class='flag-5'>開發(fā)指南</b>

    Tina Linux音頻開發(fā)指南

    介紹Tina平臺音頻模塊的使用方法。
    的頭像 發(fā)表于 03-06 11:02 ?6254次閱讀
    <b class='flag-5'>Tina</b> <b class='flag-5'>Linux</b>音頻<b class='flag-5'>開發(fā)指南</b>

    Tina Linux PMU開發(fā)指南

    介紹使用Tina PMU 驅(qū)動的使用方法。
    的頭像 發(fā)表于 03-06 11:05 ?2016次閱讀
    <b class='flag-5'>Tina</b> <b class='flag-5'>Linux</b> PMU<b class='flag-5'>開發(fā)指南</b>

    AW_R329_Tina_Linux_開發(fā)入門_v0.5

    AW_R329_Tina_Linux_開發(fā)入門_v0.5
    發(fā)表于 10-19 15:11 ?3次下載