VVC代码学习之自定义数据结构阅读6

4 篇文章 0 订阅

上次大致讨论了一下VTM中的三个基本数据结构单元--CU,PU,TU。这三个单元都保存在Unit.h中,与此对应的有对于这三个XU的相关操作,可以在UnitTool中找到,今天,我们就来看一下。

namespace CU
{
  bool isIntra                        (const CodingUnit &cu);//返回当前CU的预测模式是否是帧间
  bool isInter                        (const CodingUnit &cu);//同上
  bool isIBC                          (const CodingUnit &cu);//同上
  bool isPLT                          (const CodingUnit &cu);同上

  bool isSameCtu                      (const CodingUnit &cu, const CodingUnit &cu2);//返回两个cu是否在同一个ctu下
  bool isSameSlice                    (const CodingUnit &cu, const CodingUnit &cu2);//返回两个cu是否在同一个slice下
  bool isSameTile                     (const CodingUnit &cu, const CodingUnit &cu2);//返回两个cu是否在同一个tile下
  bool isSameSliceAndTile             (const CodingUnit &cu, const CodingUnit &cu2);//返回两个cu是否既在一个slice又在一个tile下
  bool isSameSubPic                   (const CodingUnit &cu, const CodingUnit &cu2);//返回是否在同一个subpic下
  bool isLastSubCUOfCtu               (const CodingUnit &cu);//是否是当前ctu下的最后一个cu
  uint32_t getCtuAddr                     (const CodingUnit &cu);//通过cu得到对应ctu的地址
  int  predictQP                      (const CodingUnit& cu, const int prevQP );//没看懂干嘛的

  uint32_t getNumPUs                      (const CodingUnit& cu);//返回cu中pu的数量
  void addPUs                         (      CodingUnit& cu);//把形参中的cu相关信息更新到cs中的pu

  void saveMotionInHMVP               (const CodingUnit& cu, const bool isToBeDone );//???

  PartSplit getSplitAtDepth           (const CodingUnit& cu, const unsigned depth);//返回当前cu是由上一个cu/ctu经哪种分解方式得到的,返回枚举类型,表示splittype
  ModeType  getModeTypeAtDepth        (const CodingUnit& cu, const unsigned depth);//返回预测模式类型

  uint32_t getNumNonZeroCoeffNonTsCorner8x8( const CodingUnit& cu, const bool lumaFlag = true, const bool chromaFlag = true );//没找到具体实现
  bool  isPredRegDiffFromTB(const CodingUnit& cu, const ComponentID compID);//?不懂
  bool  isFirstTBInPredReg(const CodingUnit& cu, const ComponentID compID, const CompArea &area);//是不是预测区域的第一个TB,但我不知道TB是什么,知道的评论我,蟹蟹
  bool  isMinWidthPredEnabledForBlkSize(const int w, const int h);//当前块大小是不是能预测的最小宽度
  void  adjustPredArea(CompArea &area);//将area.width调整为PRED_REG_MIN_WIDTH两者中较大的值
  bool  isBcwIdxCoded                 (const CodingUnit& cu);
  uint8_t getValidBcwIdx              (const CodingUnit& cu);
  void  setBcwIdx                     (CodingUnit& cu, uint8_t uh);
  uint8_t deriveBcwIdx                (uint8_t bcwLO, uint8_t bcwL1);//不知道什么是Bcw
  bool bdpcmAllowed                   (const CodingUnit& cu, const ComponentID compID);//返回BDPCM是否润许,BDPCM可能是一种模式
  bool isMTSAllowed                   (const CodingUnit& cu, const ComponentID compID);//同上,MTS可能是一种模式


  bool      divideTuInRows            ( const CodingUnit &cu );
  PartSplit getISPType                ( const CodingUnit &cu,                         const ComponentID compID );
  bool      isISPLast                 ( const CodingUnit &cu, const CompArea &tuArea, const ComponentID compID );
  bool      isISPFirst                ( const CodingUnit &cu, const CompArea &tuArea, const ComponentID compID );
  bool      canUseISP                 ( const CodingUnit &cu,                         const ComponentID compID );
  bool      canUseISP                 ( const int width, const int height, const int maxTrSize = MAX_TB_SIZEY );
  bool      canUseLfnstWithISP        ( const CompArea& cuArea, const ISPType ispSplitType );
  bool      canUseLfnstWithISP        ( const CodingUnit& cu, const ChannelType chType );
  uint32_t  getISPSplitDim            ( const int width, const int height, const PartSplit ispType );
  bool      allLumaCBFsAreZero        ( const CodingUnit& cu );

  PUTraverser traversePUs             (      CodingUnit& cu);//创建了一个PUTraverser对象并返回,类似于一个容器,由begin()和end()成员函数,返回一个迭代器;一下三个同理,不过返回的是常量迭代器
  TUTraverser traverseTUs             (      CodingUnit& cu);
  cPUTraverser traversePUs            (const CodingUnit& cu);
  cTUTraverser traverseTUs            (const CodingUnit& cu);

  bool  hasSubCUNonZeroMVd            (const CodingUnit& cu);
  bool  hasSubCUNonZeroAffineMVd      ( const CodingUnit& cu );

  uint8_t getSbtInfo                  (uint8_t idx, uint8_t pos);
  uint8_t getSbtIdx                   (const uint8_t sbtInfo);
  uint8_t getSbtPos                   (const uint8_t sbtInfo);
  uint8_t getSbtMode                  (const uint8_t sbtIdx, const uint8_t sbtPos);
  uint8_t getSbtIdxFromSbtMode        (const uint8_t sbtMode);
  uint8_t getSbtPosFromSbtMode        (const uint8_t sbtMode);
  uint8_t targetSbtAllowed            (uint8_t idx, uint8_t sbtAllowed);
  uint8_t numSbtModeRdo               (uint8_t sbtAllowed);
  bool    isSbtMode                   (const uint8_t sbtInfo);
  bool    isSameSbtSize               (const uint8_t sbtInfo1, const uint8_t sbtInfo2);
  bool    getRprScaling               ( const SPS* sps, const PPS* curPPS, Picture* refPic, int& xScale, int& yScale );
  void    checkConformanceILRP        (Slice *slice);
}

后续的pu以tu会补上,有说的不对的地方也请大家指出,共同学习进步,拜拜~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值