編譯支持 RKmpp 和 RGA 的 ffmpeg 源碼

一、前言

? ? ? ? RK3588 支持VPU硬件解碼,需要rkmpp進行調用;支持2D圖像加速,需要 RGA 進行調用。

? ? ? ? 這兩個庫均能通過 ffmpeg-rockchip 進行間接調用,編譯時需要開啟對應的功能。

二、依賴安裝

? ? ? ? 編譯ffmpeg前需要編譯 rkmpp 和 RGA,我嘗試直接調用板端的庫,ffmpeg 編譯可以通過,但是使用 rkmpp 解碼時會導致段錯誤,debug 發現是庫調用相關的報錯,應該是版本差距較大,所以建議下載最新的 rkmpp 和 RGA 進行編譯。

1、編譯RKmpp

源碼來自大佬的GitHub:

https://github.com/nyanmisaka

git clone -b jellyfin-mpp --depth=1 https://github.com/nyanmisaka/mpp.git rkmpp
cd rkmmp
mkdir install
cmake . \-DCMAKE_INSTALL_PREFIX=$PWD/install \-DCMAKE_BUILD_TYPE=Release \-DBUILD_SHARED_LIBS=ON \-DBUILD_TEST=OFFmake -j $(nproc)
make install

我個人喜歡將編譯后的庫與板端隔離,防止破壞系統庫的依賴,所以安裝到當前 install 目錄下。配置參數與源碼的 WIKI 保持一致,省去了 pushd 指令。

2、編譯RGA

編譯 RGA 需要用到 meson 和 ninja,如果沒有,可以直接安裝:

sudo apt-get install meson
sudo apt install ninja-build

如果想編譯 ninja 的最新源碼,我這里也提供方法:

git clone git://github.com/ninja-build/ninja.git
cd ninja
./configure.py --bootstrap
(optional) cp ninja /usr/bin

編譯 RGA:

git clone -b jellyfin-rga --depth=1 https://github.com/nyanmisaka/rk-mirrors.git rkrga
cd rkrga
mkdir install rkrga_build
# . 源代碼目錄,rkrga_build 是構建目錄
meson setup . rkrga_build \--prefix=$PWD/install \--libdir=lib \--buildtype=release \--default-library=shared \-Dcpp_args=-fpermissive \-Dlibdrm=false \-Dlibrga_demo=false
meson configure rkrga_build
ninja -C rkrga_build install

源碼也是出自?nyanmisaka 大佬。大佬的 WIKI 在源碼的父目錄進行編譯,我這里改成了在源碼下編譯,看個人喜好。

3、編譯 ffmpeg

git clone --depth=1 https://github.com/nyanmisaka/ffmpeg-rockchip.git ffmpeg
cd ffmpeg
mkdir install
./configure --prefix=$PWD/install --enable-gpl --enable-version3 \
--enable-libdrm --enable-rkmpp --enable-rkrga \
--extra-cflags="-I$(pwd)/../rkmpp/install/include/rockchip -I$(pwd)/../rkrga/install/include/rga" \
--extra-ldflags="-L$(pwd)/../rkmpp/install/lib -L$(pwd)/../rkrga/install/lib -Wl,-rpath,$(pwd)/../rkmpp/install/lib:$(pwd)/../rkrga/install/lib -lrockchip_mpp -lrga"make -j $(nproc)
make install

????????這里我主要是增加了動態庫和頭文件的搜索路徑,指定為剛剛編譯的 RKmpp 和 RGA。另外使用-Wl,-rpath指定了運行時庫的搜索路徑,防止使用系統的庫。

三、驗證

? ? ? ? (1)在 ffmpeg 源碼目錄下,查看編譯后的支持情況:

./ffmpeg -decoders | grep rkmpp # 查看是否有 rk 的解碼器
./ffmpeg -encoders | grep rkmpp # 查看是否有 rk 的編碼器
./ffmpeg -filters | grep rkrga # 查看是否有 rk 的 rga

輸出分別為:

V..... av1_rkmpp            Rockchip MPP (Media Process Platform) AV1 decoder (codec av1)V..... h263_rkmpp           Rockchip MPP (Media Process Platform) H263 decoder (codec h263)V..... h264_rkmpp           Rockchip MPP (Media Process Platform) H264 decoder (codec h264)V..... hevc_rkmpp           Rockchip MPP (Media Process Platform) HEVC decoder (codec hevc)V..... mpeg1_rkmpp          Rockchip MPP (Media Process Platform) MPEG1VIDEO decoder (codec mpeg1video)V..... mpeg2_rkmpp          Rockchip MPP (Media Process Platform) MPEG2VIDEO decoder (codec mpeg2video)V..... mpeg4_rkmpp          Rockchip MPP (Media Process Platform) MPEG4 decoder (codec mpeg4)V..... vp8_rkmpp            Rockchip MPP (Media Process Platform) VP8 decoder (codec vp8)V..... vp9_rkmpp            Rockchip MPP (Media Process Platform) VP9 decoder (codec vp9)
V..... h264_rkmpp           Rockchip MPP (Media Process Platform) H264 encoder (codec h264)V..... hevc_rkmpp           Rockchip MPP (Media Process Platform) HEVC encoder (codec hevc)V..... mjpeg_rkmpp          Rockchip MPP (Media Process Platform) MJPEG encoder (codec mjpeg)
 ... overlay_rkrga     VV->V      Rockchip RGA (2D Raster Graphic Acceleration) video compositor... scale_rkrga       V->V       Rockchip RGA (2D Raster Graphic Acceleration) video resizer and format converter... vpp_rkrga         V->V       Rockchip RGA (2D Raster Graphic Acceleration) video post-process (scale/crop/transpose)

? ? ? ? (2)如果有視頻文件,可以執行以下指令測試硬件解碼:

./ffmpeg -c:v h264_rkmpp -i 720p60hz.mp4 -f null -

在?Stream mapping 部分可以查看使用的解碼方式,輸出為(h264_rkmpp)。

Stream mapping:Stream #0:0 -> #0:0 (h264 (h264_rkmpp) -> wrapped_avframe (native))Stream #0:1 -> #0:1 (aac (native) -> pcm_s16le (native))

? ? ? ? (3)測試 RGA 需要初始化硬件設備,不能只設置過濾器。

ffmpeg -init_hw_device rkmpp=hw -filter_hw_device hw \
-c:v h264_rkmpp -i 720p60hz.mp4 \
-vf "hwupload,scale_rkrga=w=1920:h=1080:format=nv12" \
-f null -

-init_hw_device rkmpp=hw?初始化一個名為hw的 RKMPP 硬件設備;

-filter_hw_device hw指定過濾器鏈使用之前初始化的硬件設備hw;

-vf hwupload,scale_rkrga=w=1920:h=1080:format=nv12 將輸入的視頻幀上傳到硬件設備(RKMPP),使用 RKMP 提供的 scale_rkrga?過濾器將視頻幀縮放到 1920x1080 分辨率,并轉換像素格式為 NV12。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/73450.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/73450.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/73450.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據科學/數據分析暑期實習題目匯總

文章目錄 1. 孤立森林算法2. python私有屬性代碼解釋1. 類的定義2. 構造方法 `__init__`3. 創建類的實例4. 訪問私有屬性總結python列表拷貝代碼示例與分析內存地址不同的原因驗證對其中一個列表修改不會影響另一個列表記錄一些值得記錄的題目。 1. 孤立森林算法 異常點判斷的…

Java多線程與高并發專題——原子類和 volatile、synchronized 有什么異同?

原子類和 volatile異同 首先,通過我們對原子類和的了解,原子類和volatile 都能保證多線程環境下的數據可見性。在多線程程序中,每個線程都有自己的工作內存,當多個線程訪問共享變量時,可能會出現一個線程修改了共享變…

207、【圖論】孤島的總面積

題目 思路 相比于 206、【圖論】島嶼數量,就是在這個代碼的基礎上。先遍歷邊界,將邊界連接的島嶼變為0,然后再計算一遍當前為1的島嶼面積。 代碼實現 import collectionsn, m list(map(int, input().split())) graph []for _ in range(n…

大模型最新面試題系列:微調篇之微調基礎知識

一、全參數微調(Full-Finetune) vs 參數高效微調(PEFT)對比 1. 顯存使用差異 全參數微調:需存儲所有參數的梯度(如GPT-3 175B模型全量微調需約2.3TB顯存)PEFT:以LoRA為例&#xff…

【GPT入門】第21課 langchain核心組件

【GPT入門】第21課 langchain核心組件 1. langchain 核心組件2.文檔加載器 Document loader3.文檔處理器3.1 langchain_text_splitters3.3 FAISS向量數據庫和向量檢索主要作用應用場景4. 對話歷史管理1. langchain 核心組件 模型 I/O 封裝 LLMs:大語言模型 Chat Models:一般…

應急響應靶機練習-Linux2

1.背景 前景需要:看監控的時候發現webshell告警,領導讓你上機檢查你可以救救安服仔嗎!! 挑戰內容: (1)提交攻擊者IP (2)提交攻擊者修改的管理員密碼(明文) (…

分享一個免費的CKA認證學習資料

關于CKA考試 CKA(Certified Kubernetes Administrator)是CNCF基金會(Cloud Native Computing Foundation)官方推出的Kubernetes管理員認證計劃,用于證明持有人有履行Kubernetes管理的知識,技能等相關的能力…

【PTA題目解答】7-2 簡化的插入排序(15分)

1.題目 本題要求編寫程序&#xff0c;將一個給定的整數插到原本有序的整數序列中&#xff0c;使結果序列仍然有序。 輸入格式&#xff1a; 輸入在第一行先給出非負整數N&#xff08;<10&#xff09;&#xff1b;第二行給出N個從小到大排好順序的整數&#xff1b;第三行給…

【最新】 ubuntu24安裝 1panel 保姆級教程

系統&#xff1a;ubuntu24.04.1 安裝軟件 &#xff1a;1panel 第一步&#xff1a;更新系統 sudo apt update sudo apt upgrade 如下圖 第二步&#xff1a;安裝1panel&#xff0c;運行如下命令 curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o …

UE4-UE5虛幻引擎,前置學習一--Console日志輸出經常崩潰,有什么好的解決辦法

有些差異 這么牛逼的引擎&#xff0c;居然有這種入門級別的問題&#xff0c;一觸發清理&#xff0c;大概率(80%)會崩潰 無論虛幻5還是UE4都有這個問題&#xff0c;挺煩人的 實在忍不了了&#xff0c;這次&#xff0c;今天 就想問問有什么好的處理方法么&#xff1f;&#x…

【微服務】Nacos 配置動態刷新(簡易版)(附配置)

文章目錄 1、實現方法2、配置依賴 yaml3、驗證效果 1、實現方法 環境&#xff1a;Nacos、Java、SpringBoot等 主要是在boostrap.yaml中的data-id屬性下配置refresh:true來實現動態更新 2、配置依賴 yaml 具體的版本參考官方的說明&#xff1a;官方版本說明 <!--讀取boo…

設計模式之備忘錄設計模式

備忘錄設計模式&#xff08;Memento Pattern&#xff09; 在不破壞封閉的前提下&#xff0c;捕獲一個對象的內部狀態&#xff0c;保存對象的某個狀態&#xff0c;以便在適當的時候恢復對象&#xff0c;又叫做快照模式&#xff0c;屬于行為模式備忘錄模式實現的方式需要保證被保…

pytest 框架學習總結

視頻&#xff1a;pytest01-快速上手_嗶哩嗶哩_bilibili 資料&#xff1a;pytest 框架 - 白月黑羽 基于 Python 語言的自動化測試框架 最知名的 有如下 3 款unittest、pytest、robotframework 前兩款框架主要&#xff08;或者說很大程度上&#xff09;是 聚焦 在 白盒單元測試…

Day16:最小的k個數

倉庫管理員以數組 stock 形式記錄商品庫存表&#xff0c;其中 stock[i] 表示對應商品庫存余量。請返回庫存余量最少的 cnt 個商品余量&#xff0c;返回 順序不限。 示例 1&#xff1a; 輸入&#xff1a;stock [2,5,7,4], cnt 1 輸出&#xff1a;[2]示例 2&#xff1a; 輸入…

【最后203篇系列】016 Q201架構思考

前言 Q200已經達到了我既定的目標&#xff0c;在最近的3個月&#xff0c;我需要進一步完善&#xff0c;達到可以試產的程度。 在這個過程當中&#xff0c;許多知識和體會一直在變。 qtv200到目前&#xff0c;雖然通過習慣(每晚運行離線策略和比對)方式維持了注意力的集中&…

音視頻入門基礎:RTP專題(20)——通過FFprobe顯示RTP流每個packet的信息

通過FFprobe命令&#xff1a; ffprobe -protocol_whitelist "file,rtp,udp" -of json -show_packets XXX.sdp 可以顯示SDP描述的RTP流每個packet&#xff08;數據包&#xff09;的信息&#xff1a; 對于RTP流&#xff0c;上述的“packet”&#xff08;數據包&#…

信息系統運行管理員教程6--信息系統安全

信息系統運行管理員教程6–信息系統安全 第1節 信息系統安全概述 1.信息系統安全的概念 信息系統安全是指保障計算機及其相關設備、設施&#xff08;含網絡&#xff09;的安全&#xff0c;運行環境的安全&#xff0c;信息的安全&#xff0c;實現信息系統的正常運行。信息系統…

LLM后訓練:解鎖大型語言模型推理能力的關鍵路徑

引言&#xff1a;從語言生成到邏輯推理的躍遷 大型語言模型&#xff08;LLMs&#xff09;通過預訓練掌握了海量語言模式&#xff0c;但其核心缺陷——幻覺、邏輯斷裂、價值觀偏差——暴露了單純預訓練的局限性。后訓練&#xff08;Post-Training&#xff09;作為預訓練后的精修…

9.貪心算法

簡單貪心 1.P10452 貨倉選址 - 洛谷 #include<iostream> #include<algorithm> using namespace std;typedef long long LL; const int N 1e510; LL a[N]; LL n;int main() {cin>>n;for(int i 1;i < n;i)cin>>a[i];sort(a1,a1n);//排序 LL sum 0…

Linux 網絡:skb 數據管理

文章目錄 1. 前言2. skb 數據管理2.1 初始化2.2 數據的插入2.2.1 在頭部插入數據2.2.2 在尾部插入數據 2.2 數據的移除 3. 小結 1. 前言 限于作者能力水平&#xff0c;本文可能存在謬誤&#xff0c;因此而給讀者帶來的損失&#xff0c;作者不做任何承諾。 2. skb 數據管理 數…