介紹
在有些應用中,發現I幀不夠大。MPSoC VCU CtrlSW可以設置每一幀的QP大小。因此,可以通過設置I幀的QP,提高I幀的大小,從而提高I幀的質量。
代碼
下面是設置I幀的QP的示例代碼。
GOP長度變量
在struct EncoderSink : IFrameSink的定義里添加GOP的成員變量,記錄GOP長度。
#if USER_I_FRAME_QP
// USER_I_FRAME_QP changes START
float uFrameRate = 0.0f;
int uGopLength = 0;
// USER_I_FRAME_QP changes END
#endif // USER_I_FRAME_QP
記錄GOP長度
在EncoderSink 的EncoderSink函數設置GOP的變量的值。
struct EncoderSink : IFrameSink { EncoderSink(ConfigFile const& cfg, AL_IEncScheduler* pScheduler, AL_TAllocator* pAllocator ) : CmdFile(cfg.sCmdFileName, false), EncCmd(CmdFile.fp, cfg.RunInfo.iScnChgLookAhead, cfg.Settings.tChParam[0].tGopParam.uFreqLT), twoPassMngr(cfg.sTwoPassFileName, cfg.Settings.TwoPass, cfg.Settings.bEnableFirstPassSceneChangeDetection, cfg.Settings.tChParam[0].tGopParam.uGopLength, cfg.Settings.tChParam[0].tRCParam.uCPBSize / 90, cfg.Settings.tChParam[0].tRCParam.uInitialRemDelay / 90, cfg.MainInput.FileInfo.FrameRate), qpBuffers{cfg.Settings, cfg.RunInfo.eGenerateQpMode}, pAllocator{pAllocator}, pSettings{&cfg.Settings} { #if USER_I_FRAME_QP // USER_I_FRAME_QP changes STARTED ---------------------------------- uFrameRate = cfg.Settings.tChParam.tRCParam.uFrameRate; uGopLength = cfg.Settings.tChParam.tGopParam.uGopLength; // USER_I_FRAME_QP changes END -------------------------------------- #endif // USER_I_FRAME_QP }
設置QP
在EncoderSink 的ProcessFrame函數里,根據GOP長度,確定每個GOP開始的I幀。然后再設置QP的值。可以試試20-35之間的QP值。QP值是20時,能帶來很好的圖像質量。
void ProcessFrame(AL_TBuffer* Src) override
{
if(m_picCount == 0)
m_StartTime = GetPerfTime();
if(!Src)
{
LogVerbose("Flushing...
");
if(!AL_Encoder_Process(hEnc, nullptr, nullptr))
throw std::runtime_error("Failed");
return;
}
DisplayFrameStatus(m_picCount);
if(twoPassMngr.iPass)
{
auto pPictureMetaTP = AL_TwoPassMngr_CreateAndAttachTwoPassMetaData(Src);
if(twoPassMngr.iPass == 2)
twoPassMngr.GetFrame(pPictureMetaTP);
}
AL_TBuffer* QpBuf = qpBuffers.getBuffer(m_picCount);
std::shared_ptr QpBufShared(QpBuf, [&](AL_TBuffer* pBuf) { qpBuffers.releaseBuffer(pBuf); });
if(pSettings->hRcPluginDmaContext != NULL)
RCPlugin_SetNextFrameQP(pSettings, pAllocator);
#if USER_I_FRAME_QP
if( 0 == (m_picCount%uGopLength) )
{
AL_Encoder_SetQP(hEnc, 20 );
}
#endif // USER_I_FRAME_QP
if(!AL_Encoder_Process(hEnc, Src, QpBuf))
throw std::runtime_error("Failed");
m_picCount++;
m_picGopCount++;
}
責任編輯:haq
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
代碼
+關注
關注
30文章
4968瀏覽量
73974 -
變量
+關注
關注
0文章
616瀏覽量
29506
原文標題:設置I幀的QP,提高I幀的質量
文章出處:【微信號:FPGA-EETrend,微信公眾號:FPGA開發圈】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
熱點推薦
基于Matter over Thread的照明應用示例簡要設置步驟
在Silicon Labs(芯科科技)近期更新的技術支持文檔頁面中,我們詳細描述了運行一個基于Matter over Thread的照明應用示例的簡要設置步驟。
TE Connectivity推出QP 6.5多色電源連接器
在追求高密度集成的設計中,如何避免線路錯配和簡化后續調試與維修,是一大挑戰。TE Connectivity (以下簡稱“TE”)近期推出的QP 6.5 多色電源連接器,正是應對這一挑戰的關鍵解決方案。
MCU軟件核心庫及示例代碼速覽 !
為加速嵌入式項目開發,本文對MCU軟件核心庫進行整體速覽,涵蓋初始化、外設控制與中斷處理等關鍵部分,并結合簡潔示例代碼,幫助開發者快速理解與應用庫功能。 一、MCU核心庫函數功能 MCU核心庫
基于芯源CW32 MCU的LED閃爍示例及代碼分析
最近我在項目中使用了芯源的CW32 MCU,這是一款非常適合物聯網和低功耗應用的微控制器。在初步學習和使用中,我做了一個簡單的LED閃爍實驗,通過這篇帖子給大家分享一下代碼及相關的配置步驟。
硬件
發表于 12-04 06:52
淘寶京東API商品詳情接口示例參考
。 is_promotion:是否獲取促銷價,可選參數,根據需求設置。 其他參數可能包括返回字段列表、API密鑰等,具體以API文檔為準。 請求示例: ? http復制代碼GET https://eco.taobao.com
如何使用20829 can-fd發送64字節擴展標識符數據幀?
親愛的先生,
基于MTB代碼示例CAN_FD,它使用11位標準標識符數據幀。
更改為29位擴展標識符數據幀,并將RX / TX FIFO更改為64Bytes,將
發表于 08-04 06:56
CYW20721如何在A2DP接收器中更改I2S時鐘設置?
CYW20721 DS 提到的主模式下的 I2S 時鐘可以是:
44.1 kHz x 每幀 32 位 = 1411.2 千赫
48 kHz x 每幀 32 位 = 1536 kHz
我能知道如何為這 2 個
發表于 07-03 06:41
NXP i.MX RT1060移植TinyUSB:快速擴展大量USB Class示例
前言 ? 為啥是TinyUSB?給強大的RT配個輕巧的USB棧! USB這個讓我們方便快捷的接口,幾乎無處不在。在嵌入式世界里,尤其是用上了像NXP i.MX RT這樣性能強勁的跨界MCU,我們自然
如何獲取用于開發fx2的sdk和示例源代碼?
大家好
我正在使用 FX2 設備,以前也使用過 FX3 設備。 使用 FX3 設備 SDK,當我下載它時,我在安裝文件夾中獲得了許多示例源代碼,但是它沒有 FX2 的示例源代碼,我如何
發表于 05-07 07:25
ESP32P4示例工程中有用的i2c-tools調試工程
有用的示例工程
開發過程調試是個令人頭疼的問題,在程序正式運行起來之前,需要借助其他的工具來調試硬件、檢驗代碼邏輯是否正確。樂鑫的示例代碼中有個使用串口控制臺調試
發表于 05-03 18:25
(開源代碼版)手把手教學:DVP攝像頭拍照&上傳功能示例 !
通過本開源示例即可完成DVP攝像頭的拍照、圖像預處理及云端上傳全流程。示例代碼包含完整工程、硬件配置說明及調試技巧,從環境搭建到功能實現,一步步帶你構建穩定可靠的圖像數據采集與傳輸系統,適用于智能
是否可以使用DMA和LPSPI的3字節幀大小?
DMA 傳輸為24字節。 我不需要 CPU 干預,所以一切都需要在 DMA 設置中進行配置,否則就違背了使用 DMA 的目的。
此時,除非我們進一步深入研究,否則我不會分享我的代碼,但我
發表于 03-17 06:47
如何獲取SMBus示例代碼?
想找一個用硬件SMBus外設的示例代碼,但是在網上找到的很多都是HAL庫的版本,我目前的代碼是用的標準庫,想知道ST官方有沒有相關的示例代碼
發表于 03-10 07:16
設置I幀的QP的示例代碼
評論