0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

设置I帧的QP的示例代码

YCqV_FPGA_EETre 来源:博客园 作者:HankFu 2021-10-20 11:35 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

介绍

在有些应用中,发现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
责任编辑:haq
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4985

    浏览量

    74577
  • 变量
    +关注

    关注

    0

    文章

    616

    浏览量

    29628

原文标题:设置I帧的QP,提高I帧的质量

文章出处:【微信号:FPGA-EETrend,微信公众号:FPGA开发圈】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    探索AD74111评估板:功能、设置与编程示例

    探索AD74111评估板:功能、设置与编程示例 引言 在音频编解码领域,AD74111是一款备受关注的单声道编解码器。而EVAL - AD74111EB评估板则为工程师们提供了一个全面评估该编解码器
    的头像 发表于 05-28 09:05 215次阅读

    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 系列揭秘 在电子设备的设计中,电源供应作为核心环节,其性能优劣直接影响整个系统的稳定性和可靠性。今天,我们就来深入探讨一款具有卓越性能的电源产品
    的头像 发表于 04-05 11:40 326次阅读

    探索 QP - 150 系列 150W 四输出电源:特性、规格与应用考量

    探索 QP - 150 系列 150W 四输出电源:特性、规格与应用考量 在电子设备的设计中,电源模块的选择至关重要,它直接影响着整个系统的性能、稳定性和可靠性。今天,我们就来深入了解一下 QP
    的头像 发表于 04-05 11:40 541次阅读

    基于Matter over Thread的照明应用示例简要设置步骤

    在Silicon Labs(芯科科技)近期更新的技术支持文档页面中,我们详细描述了运行一个基于Matter over Thread的照明应用示例的简要设置步骤。
    的头像 发表于 02-03 14:03 873次阅读
    基于Matter over Thread的照明应用<b class='flag-5'>示例</b>简要<b class='flag-5'>设置</b>步骤

    TE Connectivity推出QP 6.5多色电源连接器

    在追求高密度集成的设计中,如何避免线路错配和简化后续调试与维修,是一大挑战。TE Connectivity (以下简称“TE”)近期推出的QP 6.5 多色电源连接器,正是应对这一挑战的关键解决方案。
    的头像 发表于 01-12 11:22 709次阅读

    中颖电子8位单片机的I/O设置介绍

    在嵌入式系统设计中,单片机的I/O端口设置是基础且关键的一环。今天我们来详细解析中颖电子8位单片机的I/O设置,帮助工程师更好地理解和应用。
    的头像 发表于 12-30 09:37 964次阅读
    中颖电子8位单片机的<b class='flag-5'>I</b>/O<b class='flag-5'>设置</b>介绍

    MCU软件核心库及示例代码速览 !

    为加速嵌入式项目开发,本文对MCU软件核心库进行整体速览,涵盖初始化、外设控制与中断处理等关键部分,并结合简洁示例代码,帮助开发者快速理解与应用库功能。 一、MCU核心库函数功能 MCU核心库
    的头像 发表于 12-11 17:19 927次阅读
    MCU软件核心库及<b class='flag-5'>示例</b><b class='flag-5'>代码</b>速览 !

    基于芯源CW32 MCU的LED闪烁示例代码分析

    最近我在项目中使用了芯源的CW32 MCU,这是一款非常适合物联网和低功耗应用的微控制器。在初步学习和使用中,我做了一个简单的LED闪烁实验,通过这篇帖子给大家分享一下代码及相关的配置步骤。 硬件
    发表于 12-04 06:52

    淘宝京东API商品详情接口示例参考

    。 is_promotion:是否获取促销价,可选参数,根据需求设置。 其他参数可能包括返回字段列表、API密钥等,具体以API文档为准。 请求示例:   http复制代码GET https://eco.taobao.com
    的头像 发表于 11-04 09:36 464次阅读

    淘宝拍立淘接口实战:图像优化、识别调优与避坑代码示例

    本文详解淘宝拍立淘接口(taobao.picture.search)实战技巧,涵盖图像预处理、识别优化、签名生成与供应链数据联动,结合代码示例解析高频坑点,如Base64格式错误、限流处理、分页失效等,助开发者提升识别率至85%以上,高效对接电商选品与供应链系统。
    的头像 发表于 10-09 14:28 1064次阅读

    请问如何构建 emWin 示例代码

    如何构建 emWin 示例代码
    发表于 09-04 07:25

    如何使用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