基於聯詠平台NT985XX 編碼配置及常見問題解析

關鍵字 :videoencbitratebs 緩衝區

一、概述

 

hd_videoenc 的主要目的是從上層單元獲取影像原始資料,並控制影片編碼器對該影像進行編碼,輸出碼流後可用於保存檔案或進行線上串流。

 

二、HDAL介面介紹

 

這部分可以直接參考 video_record.c 這支範例程式碼,

開啟與關閉一路的 venc 模組的順序如下:

hd_videoenc_init: 對編碼進行初始化。

hd_videoenc_open: 開啟編碼通道。

hd_videoenc_set: 設定 config參數與編碼參數。

hd_videoenc_start: 用於生效videoenc模組的參數設定與綁定關係。

hd_videoenc_stop: 停止編碼通道。

hd_videoenc_close: 關閉編碼通道。

hd_videoenc_uninit:對編碼進行解除初始化。

hd_videoenc_push_in_buf:在非綁定模式下將 YUV 輸入給 VENC 進行編碼。

hd_videoenc_pull_out_buf:取出碼流。

hd_videoenc_release_out_buf:釋放kflow bs緩衝區空間。

 

三、hd_videoenc_set 模組說明:

 

參數設定 hd_videoenc_set 可以分為兩部分,一是設定 Config 參數,二是設定編碼參數。

 

3.1、設定config參數:

video_record.c 中的 set_enc_cfg()

hd_videoenc_set(path,高清視頻編碼參數路徑配置, &config);

 

3.2、設定編碼參數:

參考 video_record.c 中的 set_enc_param()

3.2.1in參數

hd_videoenc_set(path, 高清視頻編碼參數輸入句子: , &param);

3.2.2out參數

hd_videoenc_set(path,高清_視頻編碼_參數_輸出_編碼_參數, &param);

3.2.3rc參數

hd_videoenc_set(path,HD_視頻編碼參數_輸出_速率控制, &rc_param

 

四、cat /proc/hdal/venc/info

 

編碼模組最常用的指令就是 cat /proc/hdal/venc/info,在板端執行完AP之後,下此指令可以列印與其他模組的綁定狀態、編碼器配置設定、編碼參數設定值等等。

 

4.1、檢視綁定狀態

可以看到這裡是綁定模式,videoenc_0_in_0與videoproc_0_out_0綁定:

 

手机屏幕截图

AI 生成的内容可能不正确。

 

若是非綁定模式,bind_src顯示null

 

文本

AI 生成的内容可能不正确。

 

4.2、venc 最大記憶體大小

 

文本

AI 生成的内容可能不正确。

 

Venc 的 max_mem size 可以對應到 sample code path config 中的參數設定,

其大小則取決於 max_w、max_h、svc、ltr、bitrate、enc_ms、sout。

max_mem 大小 = codec_size + bs_buff_size + srcout_size。

 

五、常見問題 (FAQ)

 

5.1、hd_videoenc_start 這支 API 在流程中起到什麼作用?

答:分配 kflow 和 kdrv 所需的記憶體,並將編碼參數值設定給 kdrv。

 

5.2、hd_videoenc_start 會配置 kflow 和 kdrv 所需的記憶體,那會在什麼階段釋放?

答:會在 hd_videoenc_close 釋放記憶體。

 

5.3、Videoenc部分各個模組的參數該如何理解?

答:參考文件《Novatek_HDAL_Videoenc_Programming_Guide_zh.pdf》,該文件對 videoenc 的參數和 API 都有詳細的解釋。

 

5.4、如何理解報錯WRN:_NMR_VdoTrig_TrigAndWait() [VDOTRIG][1] queue frame count >= 90, time = 3180304963 us。

答:此錯誤表示 videoenc path1 沒有拉出,導致 bs 滿了會發出 WRN 作為警告。

解法:可以下指令echo vdoenc encinfo 1 > /proc/hdal/venc/cmd看到 Bque 的值是不是很滿,若是 90,就要檢查流程是否有 pull out 來解決問題。

 

5.5、警告:_NMR_VdoTrig_TrigAndwait() [vDoTRIG][2] 輸入幀索引 = 410,大小不足,丟棄幀,時間 = 325564535 微秒。

答:表示videoenc path2沒有釋放out,導致bs緩衝區沒有釋放空間而報錯。

解法:下指令 echo vdoenc encinfo 2 > /proc/hdal/venc/cmd 查看 Bque 值,

下指令echo isfve showmsg 2 2048 > /proc/hdal/venc/cmd 查看幀間隔時間是否過長或不穩定,若執行此指令後沒有任何輸出,代表沒有取流,確認後需自行檢查取流執行緒是否有問題。

 

參考文獻:Novatek HDAL 設計規範 - hd_videoenc

NT9852x_BRC_使用者指南_中文

技術文檔

類型標題檔案
軟件基于联咏平台NT985XX编码配置及常见问题解析

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

參考來源

:

評論