介紹
在有些應(yīng)用中,發(fā)現(xiàn)I幀不夠大。MPSoC VCU CtrlSW可以設(shè)置每一幀的QP大小。因此,可以通過設(shè)置I幀的QP,提高I幀的大小,從而提高I幀的質(zhì)量。
代碼
下面是設(shè)置I幀的QP的示例代碼。
GOP長(zhǎng)度變量
在struct EncoderSink : IFrameSink的定義里添加GOP的成員變量,記錄GOP長(zhǎng)度。
#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長(zhǎng)度
在EncoderSink 的EncoderSink函數(shù)設(shè)置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 }
設(shè)置QP
在EncoderSink 的ProcessFrame函數(shù)里,根據(jù)GOP長(zhǎng)度,確定每個(gè)GOP開始的I幀。然后再設(shè)置QP的值。可以試試20-35之間的QP值。QP值是20時(shí),能帶來很好的圖像質(zhì)量。
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責(zé)任編輯:haqQpBufShared(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++; }
-
代碼
+關(guān)注
關(guān)注
30文章
4837瀏覽量
69131 -
變量
+關(guān)注
關(guān)注
0文章
613瀏覽量
28478
原文標(biāo)題:設(shè)置I幀的QP,提高I幀的質(zhì)量
文章出處:【微信號(hào):FPGA-EETrend,微信公眾號(hào):FPGA開發(fā)圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
用于 SPI 絕對(duì)編碼器的 Arduino 示例代碼
![用于 SPI 絕對(duì)編碼器的 Arduino <b class='flag-5'>示例</b><b class='flag-5'>代碼</b>](https://file1.elecfans.com/web3/M00/06/8D/wKgZPGeM_y6AQfmPAABlEOwHFDc990.jpg)
I2C總線設(shè)備地址設(shè)置方法
AN-840: 通過I2C接口更新代碼
![AN-840: 通過<b class='flag-5'>I</b>2C接口更新<b class='flag-5'>代碼</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
LP589x和TLC698x示例代碼用戶指南
![LP589x和TLC698x<b class='flag-5'>示例</b><b class='flag-5'>代碼</b>用戶指南](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
UART串口通信示例:開啟通信寶藏之門的定位模組LuatOS入門
![UART串口通信<b class='flag-5'>示例</b>:開啟通信寶藏之門的定位模組LuatOS入門](https://file1.elecfans.com/web1/M00/F4/38/wKgZoWcnYy-AeH-rAAs3cKMldkQ680.png)
BQ40Z80量產(chǎn)校準(zhǔn)代碼示例
![BQ40Z80量產(chǎn)校準(zhǔn)<b class='flag-5'>代碼</b><b class='flag-5'>示例</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
can標(biāo)準(zhǔn)幀和擴(kuò)展幀能否共存
can標(biāo)準(zhǔn)幀和擴(kuò)展幀的區(qū)別
如何使用AURIX?將Erika操作系統(tǒng)移植到TC387-QP MCU中?
關(guān)于STM32 DMAMUX模塊具體的應(yīng)用示例代碼
![關(guān)于STM32 DMAMUX模塊具體的應(yīng)用<b class='flag-5'>示例</b><b class='flag-5'>代碼</b>](https://file1.elecfans.com/web2/M00/C5/98/wKgZomYA0KWAXr1uAAActZx-jhs970.png)
TC387QP啟用HSm時(shí),PFlash被擦除而鎖定了怎么解決?
瑞薩Flash示例程序01型SC版本(代碼Flash)應(yīng)用說明
![瑞薩Flash<b class='flag-5'>示例</b>程序01型SC版本(<b class='flag-5'>代碼</b>Flash)應(yīng)用說明](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論