介紹
在有些應(yīng)用中,發(fā)現(xiàn)I幀不夠大。MPSoC VCU CtrlSW可以設(shè)置每一幀的QP大小。因此,可以通過設(shè)置I幀的QP,提高I幀的大小,從而提高I幀的質(zhì)量。
代碼
下面是設(shè)置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函數(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長度,確定每個(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...\n\n");
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++;
}
審核編輯:郭婷
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
代碼
+關(guān)注
關(guān)注
30文章
4968瀏覽量
74011 -
MPSoC
+關(guān)注
關(guān)注
0文章
203瀏覽量
25180
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
MediaTek天璣倍幀技術(shù)MFRC專區(qū)上線官網(wǎng)
MediaTek 宣布在天璣開發(fā)者中心網(wǎng)站已正式上線「天璣倍幀技術(shù) MFRC 專區(qū)」(MediaTek Frame Rate Converter,MFRC)。
XC95108-15PQ100I 通信應(yīng)用實(shí)操:多協(xié)議幀解析與數(shù)據(jù)轉(zhuǎn)換技巧
XC95108-15PQ100I不是什么神秘的黑科技,它其實(shí)就是Xilinx公司推出的一款高性能CPLD(復(fù)雜可編程邏輯器件)。簡單說,這就像一個(gè)可以重新編程的"數(shù)字電路積木",讓工程師能夠按照需求搭建出各種數(shù)字邏輯功能。
中穎電子8位單片機(jī)的I/O設(shè)置介紹
在嵌入式系統(tǒng)設(shè)計(jì)中,單片機(jī)的I/O端口設(shè)置是基礎(chǔ)且關(guān)鍵的一環(huán)。今天我們來詳細(xì)解析中穎電子8位單片機(jī)的I/O設(shè)置,幫助工程師更好地理解和應(yīng)用。
為什么無法在 USB3 Vision 上傳輸虛擬幀?
/FX3-U3V-device-fails-to-build-genapi-no...中提供的代碼。但是我無法在 eBUS USB 播放器中傳輸視頻幀。
在 eBUS 播放器中,我獲取了 SiPayloadTransferSize
發(fā)表于 07-16 06:42
如何查找 TLE9881 接收幀的 DLC?
我們的項(xiàng)目使用 TLE9881,并使用經(jīng)典 CAN 協(xié)議進(jìn)行通信。
您能幫我找到接收到的 CAN 幀的 DLC 嗎?
發(fā)表于 07-15 06:42
CYW20721如何在A2DP接收器中更改I2S時(shí)鐘設(shè)置?
CYW20721 DS 提到的主模式下的 I2S 時(shí)鐘可以是:
44.1 kHz x 每幀 32 位 = 1411.2 千赫
48 kHz x 每幀 32 位 = 1536 kHz
我能知道如何為這 2 個(gè)
發(fā)表于 07-03 06:41
如何評(píng)估CAN總線信號(hào)質(zhì)量
絡(luò)中,數(shù)據(jù)通過雙絞線上的差分信號(hào)傳輸。信號(hào)質(zhì)量直接影響節(jié)點(diǎn)正確解讀數(shù)據(jù)的能力。信號(hào)質(zhì)量差可能表現(xiàn)為:
位錯(cuò)誤 :由于噪聲或信號(hào)失真導(dǎo)致的位誤判。 幀錯(cuò)誤 :CAN幀結(jié)構(gòu)錯(cuò)誤,導(dǎo)致接收節(jié)
發(fā)表于 06-07 08:46
CX3 I2C啟動(dòng)失敗的原因?
I2C 啟動(dòng)。
使用邏輯分析儀測(cè)試 I2C 信號(hào)。您可以在開始時(shí)讀取第一幀數(shù)據(jù)。與AN76405相比,讀取數(shù)據(jù)正確。但奇怪的是,此后I2C接口就停止工作了。
邏輯分析儀測(cè)試
發(fā)表于 05-28 07:46
Denebola RDK上配置的幀大小與實(shí)際幀大小不一致是怎么回事?
設(shè)置了CyU3PMipicsiSetPhyTimeDelay ( 1 , 18 ) ; 。
項(xiàng)目說明:
幀大小不匹配:
根據(jù)配置的分辨率和格式,預(yù)期的幀大小應(yīng)為每幀4915200
發(fā)表于 05-19 08:09
S32K3X4EVB-T172 LIN接收幀丟失的原因?
我正在使用S32K3X4EVB-T172 評(píng)估板 (S32K344) 和LINSTACK for S32K3 版本 2.0.5。
我的設(shè)置如下。
MCU (S32K344) 充當(dāng) LIN 主站。在
發(fā)表于 04-01 07:23
如何在SJA1110中配置IEEE802.1CB幀復(fù)制和冗余消除 (FRER)?
嗨,我如何在 SJA1110 中配置 IEEE802.1CB 幀復(fù)制和冗余消除 (FRER),我需要實(shí)施進(jìn)入端口 1 的數(shù)據(jù)的幀復(fù)制需要反映在端口 2 中,以及如何禁用進(jìn)入端口 1 的數(shù)據(jù)可以在端口
發(fā)表于 03-26 08:02
HarmonyOS應(yīng)用高負(fù)載場(chǎng)景分幀渲染
,可以采用分幀渲染技術(shù),將原本在一幀內(nèi)加載的數(shù)據(jù)分散到多幀中逐步加載,從而減輕單幀的渲染壓力。不過,分幀渲染需要開發(fā)者精確計(jì)算每
是否可以使用DMA和LPSPI的3字節(jié)幀大小?
。如果我將幀大小配置為8位或32位、則傳輸工作正常、但我無法讓它工作于24位(AD5676 SPI DAC要求)。
當(dāng)我深入研究相關(guān)的 i.MX API 函數(shù)時(shí)[i
發(fā)表于 03-17 06:47
工業(yè)與IT網(wǎng)絡(luò)中的以太網(wǎng)數(shù)據(jù)幀:格式與用途全解析
以太網(wǎng)數(shù)據(jù)幀是計(jì)算機(jī)網(wǎng)絡(luò)通信的基本單位,在不同的應(yīng)用場(chǎng)景中,它的格式有所不同。從互聯(lián)網(wǎng)和工業(yè)自動(dòng)化常見的以太網(wǎng) II 幀,到 VLAN 組網(wǎng)中廣泛使用的 IEEE 802.1Q 幀,再到運(yùn)營商級(jí)別的 QinQ 及高性能計(jì)算中的
基于事件相機(jī)的統(tǒng)一幀插值與自適應(yīng)去模糊框架(REFID)
高質(zhì)量的插幀與模糊圖像還原。此外,研究團(tuán)隊(duì)還發(fā)布了高分辨率事件-視頻數(shù)據(jù)集 HighREV,為事件相機(jī)低級(jí)視覺任務(wù)提供了新的測(cè)試基準(zhǔn)。
如何設(shè)置I幀的QP提高I幀的質(zhì)量
評(píng)論