VVC 得到预测值,计算BDrate(xCheckModeSplit()函数未写完)

本文详细探讨了在VVC编码器中如何获取和存储预测值,并将其输出到TXT文件或YUV文件的过程。主要涉及编码流程中的关键函数,如getPredBuf()、compressCtu()和compressSlice(),以及如何正确设置参数以确保预测值的正确传输和显示。此外,还介绍了计算预测值PSNR和BD-rate的方法。


VTM1.0代码阅读:CodingStructure类主要函数_矛盾统一的博客-优快云博客

C++文件输入输出,看这一篇就够了_Jasmine-Lily的博客-优快云博客_c++文件输入输出

C++ STL标准库: std::list使用介绍、用法详解_超级大洋葱806的博客-优快云博客_std::list 取值

1.CTU的预测值写入TXT

area写法

1.得到当前CU的区域信息

(1)这里的类是UnitArea类,存储的是区域所有分量的位置信息

const UnitArea &area = cu;

cu包含了很多通用数据,所以直接用对应类建立变量,然后等于CU即可将数据传输过去。

(2)这里的类是CompArea类,存储的是区域选中分量的位置信息

const CompArea &area = cu.blocks[COMPONENT_Y];

area所属类的不同,后面得到getPredBuf()也不同

2.将预测信息存入

方法1:(代码位置放在在estIntraPredLumaQT函数最后面,1532行)

//测试存储预测缓存
    PelBuf         piPredtest                     = cs.getPredBuf   (area);
    AreaBuf<Pel>& recYpoint                       = piPredtest;
    std::ofstream out("C:\\Users\\qjjt\\Desktop\\输出.txt");
    for(int i = 0;i < widthtest;i++)
      {
        for(int j = 0;j < heighttest;j++)
          {
            out<<"预测值  " << "宽=" << i << "高=" << j << "   " <<  recYpoint.at(i,j) << std::endl;
          }
      }

这个有问题,这只能得到当前测试CU的每个像素点的预测值,而且当前测试CU并不是最终划分方式确定的CU,会得到很多无效的预测信息。

方法2:(代码位置放在compressCtu函数中的xCompressCU后面)

这里的BestCs里保存的是最优划分,直接可用。所以就选择放在这里了

基本参数(放在compressCtu函数里partitioner后面)

  //坐标
  int posx  =  area.lumaPos().x;
  int posy  =  area.lumaPos().y;
  //CTU的宽高
  const uint32_t         widthtest      = partitioner.currArea().lwidth();
  const uint32_t         heighttest     = partitioner.currArea().lheight();
  //亮度分量的区域信息
  const CompArea &_area = area.blocks[COMPONENT_Y];

实现代码(代码位置放在compressCtu函数中的xCompressCU后面)

C++中如何进行txt文件的读入和写入_Williamhzw的博客-优快云博客

    PelBuf
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值