介绍
在有些应用中,发现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...\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++;
}
审核编辑:郭婷
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
代码
+关注
关注
30文章
4941浏览量
73136 -
MPSoC
+关注
关注
0文章
202浏览量
25077
发布评论请先 登录
相关推荐
热点推荐
为什么无法在 USB3 Vision 上传输虚拟帧?
/FX3-U3V-device-fails-to-build-genapi-no...中提供的代码。但是我无法在 eBUS USB 播放器中传输视频帧。
在 eBUS 播放器中,我获取了 SiPayloadTransferSize
发表于 07-16 06:42
CYW20721如何在A2DP接收器中更改I2S时钟设置?
CYW20721 DS 提到的主模式下的 I2S 时钟可以是:
44.1 kHz x 每帧 32 位 = 1411.2 千赫
48 kHz x 每帧 32 位 = 1536 kHz
我能知道如何为这 2 个
发表于 07-03 06:41
CX3 I2C启动失败的原因?
I2C 启动。
使用逻辑分析仪测试 I2C 信号。您可以在开始时读取第一帧数据。与AN76405相比,读取数据正确。但奇怪的是,此后I2C接口就停止工作了。
逻辑分析仪测试
发表于 05-28 07:46
Denebola RDK上配置的帧大小与实际帧大小不一致是怎么回事?
设置了CyU3PMipicsiSetPhyTimeDelay ( 1 , 18 ) ; 。
项目说明:
帧大小不匹配:
根据配置的分辨率和格式,预期的帧大小应为每帧4915200
发表于 05-19 08:09
如何在SJA1110中配置IEEE802.1CB帧复制和冗余消除 (FRER)?
嗨,我如何在 SJA1110 中配置 IEEE802.1CB 帧复制和冗余消除 (FRER),我需要实施进入端口 1 的数据的帧复制需要反映在端口 2 中,以及如何禁用进入端口 1 的数据可以在端口
发表于 03-26 08:02
是否可以使用DMA和LPSPI的3字节帧大小?
。如果我将帧大小配置为8位或32位、则传输工作正常、但我无法让它工作于24位(AD5676 SPI DAC要求)。
当我深入研究相关的 i.MX API 函数时[i
发表于 03-17 06:47
工业与IT网络中的以太网数据帧:格式与用途全解析
以太网数据帧是计算机网络通信的基本单位,在不同的应用场景中,它的格式有所不同。从互联网和工业自动化常见的以太网 II 帧,到 VLAN 组网中广泛使用的 IEEE 802.1Q 帧,再到运营商级别的 QinQ 及高性能计算中的
CCD ICX274 + VSP01M01如何实现单帧的触发采集,寄存器如何设置?
sonyCCD ICX274 + VSP01M01 如何实现单帧的触发采集,寄存器如何设置,求详解?
发表于 02-05 06:26
EtherCAT数据帧结构解析
物理层和常规的以太网卡,通过独特的数据帧结构和处理机制,实现了基于EtherNet的实时控制。本文将深入探讨EtherCAT的数据帧结构,从帧的组成、子报文的结构、工作计数器的功能到数据帧
I2C总线设备地址设置方法
通常是一个7位或10位的数字,用于标识总线上的每个设备。在7位寻址模式下,地址范围是0x00到0x7F,而在10位寻址模式下,地址范围是0x000到0x3FF。I2C地址的最低位(LSB)通常用于指示读/写操作。 硬件地址设置 1. 地址引脚配置 许多
基于Vector工具进行CAN协议错误帧的分析实践
广播发送的短帧结构,还体现在其错误检测机制上。通过总线数据以及总线波形来分析总线故障时,CAN协议错误检测机制中丰富的错误帧类型能让定位问题的效率更高。错误帧是CA
TVP5151是否是25帧的CVBS信号输入,输出是并口也是25帧,而不是50帧的?
TVP5151这个芯片是否是25帧的CVBS信号(隔行扫描的)输入,输出是并口也是25帧,而不是50帧的
发表于 01-03 07:48

如何设置I帧的QP提高I帧的质量
评论