RK3588編解碼之mpp解碼demo解析: mpi_dec_test(1)
mpi_dec_test 是rockchip官方解碼 demo
本篇文章進(jìn)行mpi_dec_test 的代碼解析,解碼流程解析
2. 環(huán)境介紹
硬件環(huán)境:ArmSoM-W3 RK3588開發(fā)板
軟件版本:OS:ArmSoM-W3 Debian11

mpp_create :獲取 MppCtx 實(shí)例以及 MppApi 結(jié)構(gòu)體
mpp_init: 初始化MppCtx 的編解碼類型與格式
mpi->control:通過相應(yīng)的命令來配置解碼參數(shù)
decode_put_packet:輸入碼流:編碼數(shù)據(jù) MppPacke,例如264、265數(shù)據(jù)
decode_get_frame: 獲取解碼的數(shù)據(jù)存放到MppFrame,例如YUV、RGB數(shù)據(jù)
mpi->reset:使解碼器恢復(fù)為正常初始化后的狀態(tài)。
mpp_destroy:釋放申請的內(nèi)存空間,做銷毀善后工作
4. 重要函數(shù)解析
mpp_init函數(shù):初始化MppCtx 的編解碼類型與格式
mpp_init函數(shù)原型:
mpp_init函數(shù)調(diào)用實(shí)例:
mpp_init函數(shù)參數(shù)解析:
MppCtxType 參數(shù):初始化編碼還是解碼
MppCodingType 參數(shù):編解碼的格式
5. mpi_dec_test 流程解析
mpi_dec_test 解碼命令舉例:
mpi_dec_test 流程解析:
main函數(shù)根據(jù)傳進(jìn)來的參數(shù)(參數(shù)char **argv 對應(yīng)命令中的 -i /oem/200frames_count.h264 -t 7 -n 200 -o /oem/decode.yuv -w 1920 -h 1080)對參數(shù)進(jìn)行解析保存到 ?MpiDecTestCmd * cmd?結(jié)構(gòu)體中
dec_decode(cmd)?函數(shù)是封裝好的解碼函數(shù),傳入?MpiDecTestCmd * cmd 結(jié)構(gòu)體即可完成解碼
dec_decode 函數(shù)執(zhí)行了一些MPP的初始化操作:mpp_create() mpp_init() ?,mpp_dec_cfg_init() , mpi->control。初始化之后創(chuàng)建解碼線程:?thread_decode 進(jìn)行解碼。
解碼線程:?thread_decode 線程根據(jù)?cmd->simple 變量判斷是使用?dec_simple?解碼還是?dec_advanced?解碼
解碼完最后一幀之后執(zhí)行?pthread_join() 函數(shù)等待解碼線程:?thread_decode 結(jié)束后做線程釋放工作
線程釋放完畢之后執(zhí)行reset復(fù)位操作:mpi->reset(ctx)把解碼器恢復(fù)為正常初始化后的狀態(tài)。
解碼器復(fù)位之后通過mpp_destroy()釋放申請的內(nèi)存空間,進(jìn)行一些銷毀操作防止內(nèi)存泄漏。
6. mpi_dec_test使用實(shí)例
終端執(zhí)行解碼命令:
其中,-t 7 表示是輸入 H.264 碼流,-i 表示輸入文件,-n 200 表示解碼 200 幀 -w 圖像寬度 -h 圖像高度
解碼輸出如下: