精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何設置I幀的QP提高I幀的質量

劉芳 ? 來源:yfdsfqdqd ? 作者:yfdsfqdqd ? 2022-08-02 08:03 ? 次閱讀

介紹
在有些應用中,發現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

    文章

    4672

    瀏覽量

    67781
  • MPSoC
    +關注

    關注

    0

    文章

    195

    瀏覽量

    24192
收藏 人收藏

    評論

    相關推薦

    can標準和擴展能否共存

    CAN(Controller Area Network)是一種用于汽車和工業自動化領域的現場總線通信協議。CAN協議具有多種格式,包括標準和擴展。在實際應用中,標準和擴展
    的頭像 發表于 07-24 15:24 ?848次閱讀

    can標準和擴展的區別

    CAN(Controller Area Network)是一種用于汽車和工業領域的通信協議,它允許多個設備在同一總線上進行通信。CAN協議有兩種類型:標準和擴展。這兩種類型在結
    的頭像 發表于 07-24 15:20 ?727次閱讀

    can網絡數據的特點

    特點,在分布式系統中得到了廣泛應用。 數據的重要性 :數據是CAN網絡中用于數據傳輸的基本單元,其結構設計和特性直接關系到整個網絡的通信效率和可靠性。 二、數據的結構 基本構成 :CAN數據
    的頭像 發表于 07-24 15:18 ?216次閱讀

    can數據有哪幾個域組成

    CAN(控制器局域網絡)是一種基于消息傳遞的通信協議,廣泛應用于汽車、工業自動化和嵌入式系統等領域。CAN協議的數據是用于傳輸信息的基本單位。 1. CAN數據概述 CAN數據是一種用于在
    的頭像 發表于 07-24 15:14 ?395次閱讀

    CAN數據的各個域及其作用

    CAN(Controller Area Network)是一種用于汽車電子系統中的通信協議,它具有高可靠性、實時性和靈活性等特點。在CAN通信中,數據是最基本的通信單元,用于傳輸信息。 概述
    的頭像 發表于 07-24 15:10 ?439次閱讀

    AMD HYPR-RX支持AMD生成技術,助力即刻提升游戲性能

    AMD Fluid Motion Frames(AFMF)—AMD生成技術,助力AMD Radeon用戶在數千款DirectX 11和DirectX 12游戲中,使用插值技術來提高
    的頭像 發表于 03-15 11:35 ?3743次閱讀
    AMD HYPR-RX支持AMD<b class='flag-5'>幀</b>生成技術,助力即刻提升游戲性能

    為了提高應用的安全性,TLD7002-16ES的間延遲應該更長還是更短?

    問題:為了提高應用的安全性,TLD7002-16ES的間延遲應該更長還是更短? 答案:根據數據表,https://www.infineon.com/dgdl
    的頭像 發表于 03-04 09:45 ?354次閱讀

    CAN總線的標準和擴展有什么區別呢?分別適用于什么工況?

    CAN總線的標準和擴展是CAN協議中的兩種類型。
    的頭像 發表于 01-30 09:41 ?4660次閱讀
    CAN總線的標準<b class='flag-5'>幀</b>和擴展<b class='flag-5'>幀</b>有什么區別呢?分別適用于什么工況?

    使用MODBUS協議的時候可以不用設置數據格式了嗎?

    在使用MODBUS協議進行串口通訊時,通常需要設置數據格式。
    的頭像 發表于 01-30 09:32 ?589次閱讀

    CAN通信協議中有哪幾種類型?CAN通信中格式的作用

    CAN通信協議中有四種類型,分別是數據、遠程、錯誤和過載
    的頭像 發表于 01-30 09:18 ?4358次閱讀

    can標準和擴展區別

    標準和擴展是用于在控制器局域網(CAN)中傳輸數據的兩種基本格式。它們在結構、標識符長度、數據長度以及數據傳輸和應用上存在一些區別。本文將詳細介紹標準和擴展
    的頭像 發表于 12-08 10:08 ?7847次閱讀

    can數據的標準格式

    CAN(Controller Area Network)是一種廣泛應用于汽車、工業控制和通信領域的串行通信總線標準。CAN數據是CAN總線上傳輸數據的基本單位,它包含了一系列的字段,用于確定
    的頭像 發表于 12-01 16:41 ?3671次閱讀

    TSMaster采樣點配置方法與消除錯誤流程

    當通訊節點間采樣點參數和波特率參數不匹配造成一些錯誤時,我們如何在TSMaster中設置以及調整波特率參數和采樣點參數,來減少以及消除總線上出現的錯誤,進一步提高通信
    的頭像 發表于 11-25 08:21 ?595次閱讀
    TSMaster采樣點配置方法與消除錯誤<b class='flag-5'>幀</b>流程

    單片機接收數據尾校驗數據解析

    單片機接收數據尾校驗數據解析
    的頭像 發表于 10-17 17:23 ?1210次閱讀
    單片機接收數據<b class='flag-5'>幀</b><b class='flag-5'>幀</b>頭<b class='flag-5'>幀</b>尾校驗數據解析

    詳解Modbus協議的RTU和ASCII(2)

    前面已經分析過RTU和ASCII的報文區別,細心的朋友應該會發現在兩種不同的報文傳輸模式下都有一個共同的組成部分——差錯校驗。
    發表于 10-01 10:38 ?780次閱讀
    詳解Modbus協議的RTU<b class='flag-5'>幀</b>和ASCII<b class='flag-5'>幀</b>(2)