RV1126多線程獲取SMARTP的GOP模式數據和普通GOP模式數據

通過代碼的方式同時獲取SMARTP模式的VENC碼流數據和普通GOP模式的VENC碼流數據,并進行對比畫質。

一.RV1126 VI采集攝像頭數據并同時編碼SMARTP模式和普通GOP模式的編碼碼流流程

RV1126利用多線程同時獲取普通GOP的VENC碼流數據和SMARTP的碼流數據一般如上圖,分為8個步驟:分別是VI模塊初始化、普通GOP的VENC模塊初始化、智能SMARTP_GOP的VENC模塊初始化、VI綁定普通GOP的VENC編碼器節點、設置GOP屬性為SMARTP屬性、VI綁定SMARTP_GOP的VENC編碼器節點、創建多線程獲取普通GOP的VENC碼流數據并保存、創建多線程獲取SMART_GOP的VENC碼流數據并保存。

1.初始化VI模塊:

VI模塊的初始化實際上就是對VI_CHN_ATTR_S的參數進行設置、然后調用RK_MPI_VI_SetChnAttr設置VI模塊并使能RK_MPI_VI_EnableChn偽代碼如下:

VI_CHN_ATTR_S? vi_chn_attr;

。。。。。。。。。。。。。。。(這里是設置VI的屬性)

ret = RK_MPI_VI_SetChnAttr(CAMERA_ID, 0, &vi_chn_attr);

ret |= RK_MPI_VI_EnableChn(CAMERA_ID, 0);

2.兩種GOP模式VENC模塊初始化:

VENC_CHN_ATTR_S? common_gop_venc_chn_attr;

..................................

RK_MPI_VENC_CreateChn(COMMON_GOP_VENC_CHN, &common_gop_venc_chn_attr);

VENC_CHN_ATTR_S? smartp_gop_venc_chn_attr;

..................................

RK_MPI_VENC_CreateChn(SMARTP_VENC_CHN, &smartp_gop_venc_chn_attr);

注意:這里需要創建兩個編碼器層,分別是普通GOP模式編碼器和SMART的GOP模式編碼器。

???????3.設置SMARTPVENC模塊GOP參數調節

VENC_GOP_ATTR_S venc_gop_attr;

venc_gop_attr.enGopMode = VENC_GOPMODE_SMARTP; //設置GOP模式為SMARTP模式

venc_gop_attr.u32GopSize = 25; //設置短參考幀間隔是25

venc_gop_attr.s32IPQpDelta = 6; //設置I幀和P幀的差值是6

venc_gop_attr.s32ViQpDelta = 6;//設置虛擬I幀和P幀的差值是6

venc_gop_attr.u32BgInterval = 25 * 5; //設置長參考幀的長度是短參考幀的5倍

ret = RK_MPI_VENC_SetGopMode(SMARTP_GOP_VENC_CHN, &venc_gop_attr);

上面是SMARTPGOP模式一些參數的設置,設置完成調用RK_MPI_VENC_SetGopMode去調用

4.??????????????VI模塊綁定普通GOPVENC模塊和SMARTP_GOPVENC模塊,下面是偽代碼:

//VI模塊節點

MPP_CHN_S vi_chn_s;

vi_chn_s.enModId = RK_ID_VI;

vi_chn_s.s32ChnId = VI_CHN_ID;

//普通GOPVENC模塊節點

MPP_CHN_S common_gop_venc_chn_s;

common_gop_venc_chn_s.enModId = RK_ID_VENC;

common_gop_venc_chn_s.s32ChnId = COMMON_GOP_VENC_CHN;

ret = RK_MPI_SYS_Bind(&vi_chn_s, &common_gop_venc_chn_s);

//SMARTP_GOPVENC模塊

MPP_CHN_S smartp_gop_venc_chn_s;

smartp_gop_venc_chn_s_s.enModId = RK_ID_VENC;

smartp_gop_venc_chn_s.s32ChnId = SMARTP_GOP_VENC_CHN;

ret = RK_MPI_SYS_Bind(&vi_chn_s, &smartp_gop_venc_chn_s);

???????5.創建多線程獲取普通GOP的VENC碼流數據并保存

開啟一個線程去采集每一幀普通GOP的VENC模塊數據,使用的API是RK_MPI_SYS_GetMediaBuffer 模塊ID是RK_ID_VENC,通道號ID是普通GOP的 VENC創建ID號這個API偽代碼如下

while(1)

{

? .........................

? mb = RK_MPI_SYS_GetMediaBuffer(RK_ID_VENC, COMMON_GOP_VENC_CHN, -1);

? fwrite(RK_MPI_MB_GetPtr(mb), RK_MPI_MB_GetSize(mb), 1, common_gop_h264_file);

.......................

}

???????6.多線程獲取SMARTP_GOPVENC模塊數據:

開啟一個線程去采集每一幀SMARTP_GOP的VENC模塊數據,使用的API是RK_MPI_SYS_GetMediaBuffer 模塊ID是RK_ID_VENC,通道號ID是SMARTP_GOP的VENC層。這個API偽代碼如下

while(1)

{

? .........................

? mb = RK_MPI_SYS_GetMediaBuffer(RK_ID_VENC, SMARTP_GOP_VENC_CHN, -1);

? fwrite(RK_MPI_MB_GetPtr(mb), RK_MPI_MB_GetSize(mb), 1, smartp_gop_h264_file);

.......................

}

二.代碼實戰

1.VI模塊初始化

???????2.兩種GOP模式VENC模塊初始化:

???????3.設置SMARTPVENC模塊GOP參數調節

4.??????????????VI模塊綁定普通GOPVENC模塊和SMARTP_GOPVENC模塊

???????5.創建多線程獲取普通GOP的VENC碼流數據并保存與

???????6.多線程獲取SMARTP_GOPVENC模塊數據:

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

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

相關文章

在Ubuntu使用 Ansible 配置 Azure 資源的動態清單

使用 Ansible 配置 Azure 資源的動態清單 簡介1.安裝pipx2.通過 pipx 安裝 Ansible3.安裝azure.azcollection4.安裝集合所需的依賴項5.生成動態庫存 簡介 在主機變化不定的云環境中,Ansible 的動態清單功能可以消除維護靜態清單文件的負擔 本教程將帶你使用 Azure…

車載診斷架構 ---車載總線對于功能尋址的處理策略

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 鈍感力的“鈍”,不是木訥、遲鈍,而是直面困境的韌勁和耐力,是面對外界噪音的通透淡然。 生活中有兩種人,一種人格外在意別人的眼光;另一種人無論…

Github 2025-05-16 Java開源項目日報 Top9

根據Github Trendings的統計,今日(2025-05-16統計)共有9個項目上榜。根據開發語言中項目的數量,匯總情況如下: 開發語言項目數量Java項目9Netty:異步事件驅動的網絡應用程序框架 創建周期:5043 天開發語言:Java協議類型:Apache License 2.0Star數量:33219 個Fork數量:…

大語言模型(LLM)如何通過“思考時間”(即推理時的計算資源)提升推理能力

大語言模型(LLM)如何通過“思考時間”(即推理時的計算資源)提升推理能力 核心圍繞人類思維機制、模型架構改進、訓練方法優化等展開 一、人類思維的啟發:快思考與慢思考 類比心理學: 人類思維分兩種模式: 快思考(系統1):直覺驅動,快速但易出錯(如估算簡單問題)。…

【ubuntu24.04】pycharm 死機結束進程

windows 遠程pycharm到ubuntu執行程序 pycharm 在調試過程中,內存耗盡,然后死機了 pycharm 進程 (base) rootk8s-master-pfsrv:/home/zhangbin/下載# ps -ef | grep pycharm root 121245 3230568 0 5月14 pts/8 00:00:00 /bin/bash --rcfile …

從虛擬仿真到行業實訓再到具身智能--華清遠見嵌入式物聯網人工智能全鏈路教學方案

2025年5月23-25日,第63屆中國高等教育博覽會(高博會)將在長春中鐵東北亞國際博覽中心舉辦。作為國內高等教育領域規模大、影響力廣的綜合性展會,高博會始終聚焦教育科技前沿,吸引全國高校管理者、一線教師、教育科技企…

本地部署dify+ragflow+deepseek ,結合小模型實現故障預測,并結合本地知識庫和大模型給出維修建議

1.準備工作 使用ollama 拉取deepseek-r1:7b 官網下載ollama ollama run deepseek-r1:7b ollama list Ragflow專注于構建基于檢索增強生成(RAG)的工作流,強調模塊化和輕量化,適合處理復雜文檔格式和需要高精度檢索的場景。Dify…

https://api.ipify.org/?format=json 不好使

https://api.ipify.org/?formatjson 打不開,用下面新地址 https://api64.ipify.org/?formatjson

Linux基礎開發工具三(git,gdb/cgdb)

不知道你?作或學習時,有沒有遇到這樣的情況:我們在編寫各種?檔時,為了防??檔丟失,更改 失誤,失誤后能恢復到原來的版本,不得不復制出?個副本,?如: “報告-v1” “報告-v2” …

如何優化 Elasticsearch 磁盤空間和使用情況

作者:來自 Elastic Kofi Bartlett 解釋如何防止和處理磁盤過滿(過度使用)以及磁盤容量未被充分利用的情況。 想獲得 Elastic 認證?了解下一次 Elasticsearch Engineer 培訓的時間吧! Elasticsearch 擁有許多新功能&am…

itop-3568開發板驅動開發指南-實驗程序的編寫

本實驗對應的網盤路徑為:iTOP-RK3568 開發板【底板 V1.7 版本】\03_【iTOP-RK3568開發板】指南教程\02_Linux 驅動配套資料\04_Linux 驅動例程\02。 本章實驗將編寫 Linux 下的驅動傳參實例代碼,通過“insmod”命令進行參數的傳遞,并將相應的…

lesson03-簡單回歸案例(理論+代碼)

一、梯度下降 二、 線性方程怎么樣? 三、有噪音嗎? 四、讓我們看一個列子 五、如何優化 啟發式搜索 學習進度 六、線性回歸、邏輯回歸、分類 總結、 簡單線性回歸是一種統計方法,用于確定兩個變量之間的關系。具體來說,它試圖…

【C語言】易錯題 經典題型

出錯原因&#xff1a;之前運行起來的可執行程序沒有關閉 關閉即可 平均數&#xff08;average&#xff09; 輸入3個整數&#xff0c;輸出它們的平均值&#xff0c;保留3位小數。 #include <stdio.h> int main() {int a, b, c;scanf("%d %d %d", &a, &…

修改樣式還能影響功能?是的!

最常見的幾種樣式導致按鈕點擊無效的情況&#xff1a; 1. pointer-events: none; &#x1f449; 點擊被徹底屏蔽 癥狀&#xff1a;按鈕完全不能點擊&#xff0c;事件不會觸發。 可能原因&#xff1a;這個樣式讓元素“無法響應鼠標事件”。 button {pointer-events: none; }…

ai決策平臺:AnKo如何推動引領智能化未來?

ai決策平臺&#xff1a;AnKo如何推動引領智能化未來&#xff1f; ai決策平臺正在改變企業運營模式&#xff0c;AnKo作為ai決策平臺的代表&#xff0c;為智能管理提供新方向。借助ai決策平臺&#xff0c;組織在效率與準確性上實現飛躍。ai決策平臺的力量正被廣泛認可。 ai決策…

開疆智能Profient轉ModbusTCP網關連接ABB機器人MODBUS TCP通訊案例

本案例是通過開疆智能Profinet轉ModbusTCP網關將西門子PLC與ABB機器人進行通訊 因西門子PLC采用Profinet協議&#xff0c;而ABB機器人采用的是ModbusTCP通訊。故采取此種方案。 配置過程&#xff1a; 1.MODBUS/TCP基于以太網&#xff0c;故ABB機器人在使用時需要有616-1PCIN…

2089. 找出數組排序后的目標下標——O(n)做法!

本題要求在一個已排序的數組 nums 中&#xff0c;找出所有等于目標值 target 的元素下標。若不存在這樣的元素&#xff0c;則返回 {-1, -1}。解決該問題有兩種主要方法&#xff1a;二分查找法和統計計數法。 二分查找法&#xff1a;首先對數組進行排序&#xff0c;然后通過二分…

pyspark測試樣例

from pyspark.sql import SparkSession from pyspark.sql.functions import col, lit, concat 創建 SparkSession spark SparkSession.builder.appName(“SparkSQLExample”).getOrCreate() 創建 DataFrame&#xff08;可以是從 CSV、JSON 等文件讀取&#xff09; data […

【AWS入門】AWS身份驗證和訪問管理(IAM)

【AWS入門】AWS身份驗證和訪問管理&#xff08;IAM&#xff09; [AWS Essentials] AWS Identity and Access Management (IAM) By JacksonML 眾所周知&#xff0c;AWS亞馬遜云科技位列全球云計算服務第一位&#xff0c;并且持續為廣大客戶提供安全、穩定的各類云產品和服務。…

HarmonyOS NEXT 適配高德地圖FlutterSDK實現地圖展示,添加覆蓋物和移動Camera

HarmonyOS NEXT 適配高德地圖 Flutter SDK 實現地圖展示&#xff0c;添加覆蓋物和移動 Camera 在現代移動應用開發中&#xff0c;地圖功能是許多應用的核心組成部分之一。HarmonyOS NEXT 提供了強大的跨平臺開發能力&#xff0c;而高德地圖 Flutter SDK 則為開發者提供了豐富的…