"); //-->
解碼 h264/h265 視頻或 jpg 圖片,生成 yuv 圖像。
1.1. 軟件架構采用 MediaCodec 的 poll 模式來解耦輸入和輸出,可使解碼幀率性能達到最優。 在主線程中灌碼流數據:取出一個空的 input buffer,配置碼流數據的地址信息(如 phys addr),再 queue input buffer 并通知解碼器處理該幀數據; 另一個線程取輸出 YUV 圖像:通過 select 接收硬件解碼完成通知,取出一個硬件填滿輸出圖像的 output buffer,將解碼結果寫到文件中后歸還 output buffer。
sample 代碼位置在工程目錄{sdk_dir}/test/samples/platform_samples/source/S83_Sample/S83E04_Module/codec_sample。
目錄結構如下:
. ├── codec_sample.sh ├── Kconfig ├── Makefile ├── Makefile.in └── src ├── Makefile ├── sample.c ├── sample_common.c ├── sample.h
根目錄包含 Kconfig、codec_sample.sh 和外部接口的 makefile,Kconfig 用于控制該 demo 是否加入整體編譯;codec_sample.sh 提供幾種編解碼執行腳本。
src 目錄下的 makefile 用于 src 目錄下的編譯。src 目錄下的 sample.c 是 main 入口的所在文件,sample_common 包含了一些共用的 api,sample_venc.c 包含編碼相關函數,sample_vdec.c 包含解碼相關函數。
2. 編譯2.1. 編譯環境本 sample 的編譯環境使用 SDK 中的 build 工具,請參考: Build 環境建立 。
2.2. 編譯說明本 sample 主要依賴 libmm 提供的 API 頭文件:
#include "hb_media_codec.h" #include "hb_media_error.h"
編譯依賴的庫有如下:
LIBS += -lpthread -ldl -lhbmem -lalog -lmultimedia LIBS += -lavformat -lavcodec -lavutil -lswresample
編譯命令:
# 進入SDK所有目錄{sdk_dir},并source構建環境(參見上)。
# 編譯本sample:
bdm libmm-sample
# 輸出文件:
{sdk_dir}/out/debug-gcc_{gcc_version}/build/test/samples/platform_samples/source/S83_Sample/S83E04_Module/codec_sample3. 運行3.1. 支持平臺Matrix 6P/H
3.2. 板端部署及配置刷寫系統軟件鏡像后,本 sample 的可執行文件位于板端:/app/sample/S83_Sample/S83E04_Module/codec_sample/bin/。
可能需要用到的資源:
執行腳本 codec_sample.sh 位于板端:/app/sample/S83_Sample/S83E04_Module/codec_sample/bin/;
輸入 H264、H265、JPG 文件可使用腳本或者用戶自行準備。
codec_sample : 應用程序名字。
下面的表格是具體參數的說明:

Usage: ./codec_sample
-m --samplemode sample mode, default encoder, {0-encoder, 1-decoder}
-c --codecid codec id, default h264, {0-h264, 1-h265, 2-mjpeg, 3-jpeg}
-w --width width, default 3840
-h --height height, default 2160
-p --pixfmt pix fmt, default nv12, {0-yuv420p, 1-nv12, ..}
-n --threadnum test thread number, default 1
-i --inputfile input file name, default ./input_${w}x${h}_${pixfmt}.yuv
-o --outputfile output file name, default ./output_${w}x${h}_${pixfmt}.{code_type}
-u --core unit, default 03.3.3. 運行方法輸入源準備:
執行如下腳本,此腳本的作用是把測試用的源文件拷貝到/map/路徑下,然后用-i 指定文件路徑;
/app/sample/S83_Sample/S83E04_Module/codec_sample/bin/decoder_resoure_prepare.sh
用戶也可以不執行腳本,自行準備源文件,拷貝到/map/路徑下,然后用-i 指定文件路徑。
解碼一路 3840x2160 的 h264 視頻, 生成 yuv 圖像。
/app/sample/S83_Sample/S83E04_Module/codec_sample/bin/codec_sample -m 1 -i /map/input_3840x2160_nv12.h264
解碼一路 1920x1080 的 h265 視頻, 生成 yuv 圖像。
/app/sample/S83_Sample/S83E04_Module/codec_sample/bin/codec_sample -m 1 -c 1 -w 1920 -h 1080 -i /map/input_1920x1080_nv12.h265
解碼一張 1920x1088 的 jpg 圖片, 生成 yuv 圖像。
/app/sample/S83_Sample/S83E04_Module/codec_sample/bin/codec_sample -m 1 -c 3 -w 1920 -h 1088 -i /map/input_1920x1088_nv12.jpg
解碼兩路 3840x2160 的 h264 視頻, 生成 yuv 圖像。
/app/sample/S83_Sample/S83E04_Module/codec_sample/bin/codec_sample -m 1 -n 2 -i /map/input_3840x2160_nv12.h264
解碼四路 1920x1080 的 h265 視頻, 生成 yuv 圖像。
/app/sample/S83_Sample/S83E04_Module/codec_sample/bin/codec_sample -m 1 -c 1 -n 4 -w 1920 -h 1080 -i /map/input_1920x1080_nv12.h265
上面的命令默認跑 VPU 或者 JPU 硬件核 0,可通過-u 參數調整,加入-u 1 表示指定運行 VPU 核 1 或者 JPU 核 1,加入-u 2 表示指定運行 VPU 核 2 或者 JPU 核 2。
例如跑 VPU 核 1,解碼一路 3840x2160 的 h264 視頻,生成 yuv 圖像。
/app/sample/S83_Sample/S83E04_Module/codec_sample/bin/codec_sample -u 1 -m 1 -i /map/input_3840x2160_nv12.h264
例如跑 JPU 核 2,解碼一張 1920x1088 的 jpg 圖片,生成 yuv 圖像。
/app/sample/S83_Sample/S83E04_Module/codec_sample/bin/codec_sample -u 2 -m 1 -c 3 -w 1920 -h 1088 -i /map/input_1920x1088_nv12.jpg3.3.4. 運行結果說明
如下圖所示為運行成功:
使用 yuvplayer 查看生成的 yuv 圖像文件是否正常:
*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。
相關推薦
[轉帖]us/os就緒表的維護算法分析
無線傳感器網絡低功耗分簇路由算法設計
數字PID控制算法之一
ADI:傳感技術助力未來自動駕駛的發展
采用Mean-Shift和Camshift算法相結合的火焰視頻圖像跟蹤設計
英偉達宣布與比亞迪、吉利展開自動駕駛業務合作
物理人工智能如何在自動駕駛和電動汽車中應用?
PID算法
基于LPC2138的血壓測量算法開發平臺電路圖
地平線HSD引領智能駕駛普惠新時代
英偉達 “全天候” 芯片實現毫秒級人臉檢測
日產聯手優步與 Wayve,計劃在東京推出自動駕駛出租車服務
vxwokrs下靜態圖像壓縮算法(上)
自動駕駛的現狀與未來(節選)
簡單實用的單片機CRC 快速算法
攜手ADI贏得未來
加快實現自動駕駛(完整小組討論)
采埃孚與SiliconAuto推出自動駕駛實時I/O接口芯片
數字PID控制及其改進算法的應用
加密算法之MD5算法
賦能自動駕駛和機器人感知,讀懂二維可尋址VCSEL | 硬科技有點意思
計算機科學與技術反思錄(2)
自動駕駛的時代,呼喚線控底盤
求FSK信號的解調算法,主要是鐵路上的移頻信號!
ZF與SiliconAuto推出用于自動駕駛的實時I/O芯片
76-81GHz自動駕駛CMOS RADAR
目標跟蹤算法在紅外熱成像跟蹤技術上的應用
CRC算法原理及C語言實現
為什么可擴展高性能 SoC 是自動駕駛汽車的未來
有關指紋算法