ffmpeg實踐系列之--硬件解碼實現框架

閒話

知道ffmpeg很久了,可是一直沒有深入研究。最近在研究SM768的ffmpeg下的硬解,因此想記錄下自己研究所得。關於ffmpeg的基本知識,推薦雷神博客,感謝雷神。廢話少說,開始填坑。

思路

1.ffmpeg中如何實現硬件解碼接口;
2.編譯deb包;
3.編譯sm768硬解驅動庫;
4.測試總結;

ffmpeg硬解框架

開始幹之前一定要有一個總體框架,有了指導思想,方向就不會錯。sm768支持硬件解碼,怎麼將硬件解碼接口提供給ffmpeg,讓其支持硬件解碼。接下來用smi_h264爲例,梳理下流程。如下圖所示,一開始將smi_h264註冊成h264,那麼一旦格式是h264的視頻就會調用sm768的硬解。隨後打開解碼器對其初始化,就會調用ff_smi_h264_init對硬解初始化。讀入視頻包後,開始調用硬件解碼smi_decode_frame,最後解碼器關閉後,也會對硬件解碼關閉。梳理完整個流程後,對硬件解碼一定會豁然開朗。
在這裏插入圖片描述

開始編包

既然思路方向有了,just do it。我的需求是將smi硬件接口封裝成庫,供ffmpeg調用,最後生成deb包供用戶使用。由於ffmpeg的源碼製作成了deb的方式,所以採用dpkg去編包。
1.解壓源碼:dpkg-source -x
2.安裝依賴:
sudo apt-get update
sudo apt-get install fakeroot
安裝依賴的包在安裝的時候會有提示,照提示安裝。
3.編包:dpkg-buildpackage -b -j4
在編包的時候會遇到test過不去,折騰了好久,最後才發現編包的時候不能插sm768顯卡,不然測試通不過,在此記錄下,希望大家可以避免踩坑。如下圖,生成如下的包。dev的包是開發者除了有庫還會有有些頭文件,開發者可以用此包。
在這裏插入圖片描述
4.安裝包:dpkg -i

製作庫

需要將以下文件打包成一個庫,打包時一定要將另外一個庫libVideoDecoderLib64.a打入新庫中,否則程序運行時會找不到定義的函數。最後形成新的庫libsm768.a, 放入ffmpeg源碼中編譯。
在這裏插入圖片描述

測試

最後用mplayer 播放視頻測試,可以看出當硬件解碼時CPU佔用率較低。在這裏插入圖片描述

參考

製作DEB包的方法.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章