介绍
在有些应用中,发现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文章
4985浏览量
74577 -
变量
+关注
关注
0文章
616浏览量
29628
原文标题:设置I帧的QP,提高I帧的质量
文章出处:【微信号:FPGA-EETrend,微信公众号:FPGA开发圈】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
热点推荐
探索AD74111评估板:功能、设置与编程示例
探索AD74111评估板:功能、设置与编程示例 引言 在音频编解码领域,AD74111是一款备受关注的单声道编解码器。而EVAL - AD74111EB评估板则为工程师们提供了一个全面评估该编解码器
LVGL 演示示例工作不顺畅什么原因
的代码部署到带有GUI的板卡上时,程序能够正常运行。不过,尽管我在“设置”菜单下勾选了VGLite选项并将“显示刷新周期(毫秒)”设置为10,且检查了所有监控标志,但我看到的UI帧率仅为8-10FPS
发表于 05-15 06:37
EtherCAT应用示例,GOAL 应用说明
恩智浦EtherCAT堆栈为GOAL提供了不同的示例应用。这些应用程序是在 Industrial Communication Creator 的帮助下创建的,并展示了如何设置和使用堆栈。下一章列出
发表于 04-23 08:19
200W 四输出 PFC 电源:QP - 200 系列揭秘
200W 四输出 PFC 电源:QP - 200 系列揭秘 在电子设备的设计中,电源供应作为核心环节,其性能优劣直接影响整个系统的稳定性和可靠性。今天,我们就来深入探讨一款具有卓越性能的电源产品
探索 QP - 150 系列 150W 四输出电源:特性、规格与应用考量
探索 QP - 150 系列 150W 四输出电源:特性、规格与应用考量 在电子设备的设计中,电源模块的选择至关重要,它直接影响着整个系统的性能、稳定性和可靠性。今天,我们就来深入了解一下 QP
基于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
淘宝拍立淘接口实战:图像优化、识别调优与避坑代码示例
本文详解淘宝拍立淘接口(taobao.picture.search)实战技巧,涵盖图像预处理、识别优化、签名生成与供应链数据联动,结合代码示例解析高频坑点,如Base64格式错误、限流处理、分页失效等,助开发者提升识别率至85%以上,高效对接电商选品与供应链系统。
如何使用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
设置I帧的QP的示例代码
评论