Coverage Report

Created: 2026-04-01 07:49

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/vvdec/source/Lib/CommonLib/UnitTools.h
Line
Count
Source
1
/* -----------------------------------------------------------------------------
2
The copyright in this software is being made available under the Clear BSD
3
License, included below. No patent rights, trademark rights and/or 
4
other Intellectual Property Rights other than the copyrights concerning 
5
the Software are granted under this license.
6
7
The Clear BSD License
8
9
Copyright (c) 2018-2026, Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. & The VVdeC Authors.
10
All rights reserved.
11
12
Redistribution and use in source and binary forms, with or without modification,
13
are permitted (subject to the limitations in the disclaimer below) provided that
14
the following conditions are met:
15
16
     * Redistributions of source code must retain the above copyright notice,
17
     this list of conditions and the following disclaimer.
18
19
     * Redistributions in binary form must reproduce the above copyright
20
     notice, this list of conditions and the following disclaimer in the
21
     documentation and/or other materials provided with the distribution.
22
23
     * Neither the name of the copyright holder nor the names of its
24
     contributors may be used to endorse or promote products derived from this
25
     software without specific prior written permission.
26
27
NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY
28
THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
29
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
30
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
31
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
32
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
33
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
34
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
35
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
36
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
37
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
38
POSSIBILITY OF SUCH DAMAGE.
39
40
41
------------------------------------------------------------------------------------------- */
42
43
/** \file     UnitTool.h
44
 *  \brief    defines operations for basic units
45
 */
46
47
#pragma once
48
49
#include "Unit.h"
50
#include "UnitPartitioner.h"
51
#include "ContextModelling.h"
52
#include "InterPrediction.h"
53
54
namespace vvdec
55
{
56
57
UnitArea getArea( const Slice &slice, const UnitArea &area, const ChannelType chType, const TreeType treeType = TREE_D );
58
59
// CU tools
60
namespace CU
61
{
62
0
  static inline bool isIntra          (const CodingUnit &cu) { return cu.predMode() == MODE_INTRA; }
Unexecuted instantiation: LoopFilter.cpp:vvdec::CU::isIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: Rom.cpp:vvdec::CU::isIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: SampleAdaptiveOffset.cpp:vvdec::CU::isIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: Slice.cpp:vvdec::CU::isIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: Unit.cpp:vvdec::CU::isIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: UnitTools.cpp:vvdec::CU::isIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: DecLibParser.cpp:vvdec::CU::isIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: DecLibRecon.cpp:vvdec::CU::isIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: AdaptiveLoopFilter.cpp:vvdec::CU::isIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: CodingStructure.cpp:vvdec::CU::isIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: InterPrediction.cpp:vvdec::CU::isIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: IntraPrediction.cpp:vvdec::CU::isIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: MatrixIntraPrediction.cpp:vvdec::CU::isIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: Quant.cpp:vvdec::CU::isIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: Reshape.cpp:vvdec::CU::isIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: TrQuant.cpp:vvdec::CU::isIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: UnitPartitioner.cpp:vvdec::CU::isIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: CABACReader.cpp:vvdec::CU::isIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: DecCu.cpp:vvdec::CU::isIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: ContextModelling.cpp:vvdec::CU::isIntra(vvdec::CodingUnit const&)
63
0
  static inline bool isInter          (const CodingUnit &cu) { return cu.predMode() == MODE_INTER; }
Unexecuted instantiation: LoopFilter.cpp:vvdec::CU::isInter(vvdec::CodingUnit const&)
Unexecuted instantiation: Rom.cpp:vvdec::CU::isInter(vvdec::CodingUnit const&)
Unexecuted instantiation: SampleAdaptiveOffset.cpp:vvdec::CU::isInter(vvdec::CodingUnit const&)
Unexecuted instantiation: Slice.cpp:vvdec::CU::isInter(vvdec::CodingUnit const&)
Unexecuted instantiation: Unit.cpp:vvdec::CU::isInter(vvdec::CodingUnit const&)
Unexecuted instantiation: UnitTools.cpp:vvdec::CU::isInter(vvdec::CodingUnit const&)
Unexecuted instantiation: DecLibParser.cpp:vvdec::CU::isInter(vvdec::CodingUnit const&)
Unexecuted instantiation: DecLibRecon.cpp:vvdec::CU::isInter(vvdec::CodingUnit const&)
Unexecuted instantiation: AdaptiveLoopFilter.cpp:vvdec::CU::isInter(vvdec::CodingUnit const&)
Unexecuted instantiation: CodingStructure.cpp:vvdec::CU::isInter(vvdec::CodingUnit const&)
Unexecuted instantiation: InterPrediction.cpp:vvdec::CU::isInter(vvdec::CodingUnit const&)
Unexecuted instantiation: IntraPrediction.cpp:vvdec::CU::isInter(vvdec::CodingUnit const&)
Unexecuted instantiation: MatrixIntraPrediction.cpp:vvdec::CU::isInter(vvdec::CodingUnit const&)
Unexecuted instantiation: Quant.cpp:vvdec::CU::isInter(vvdec::CodingUnit const&)
Unexecuted instantiation: Reshape.cpp:vvdec::CU::isInter(vvdec::CodingUnit const&)
Unexecuted instantiation: TrQuant.cpp:vvdec::CU::isInter(vvdec::CodingUnit const&)
Unexecuted instantiation: UnitPartitioner.cpp:vvdec::CU::isInter(vvdec::CodingUnit const&)
Unexecuted instantiation: CABACReader.cpp:vvdec::CU::isInter(vvdec::CodingUnit const&)
Unexecuted instantiation: DecCu.cpp:vvdec::CU::isInter(vvdec::CodingUnit const&)
Unexecuted instantiation: ContextModelling.cpp:vvdec::CU::isInter(vvdec::CodingUnit const&)
64
0
  static inline bool isIBC            (const CodingUnit &cu) { return cu.predMode() == MODE_IBC;   }
Unexecuted instantiation: LoopFilter.cpp:vvdec::CU::isIBC(vvdec::CodingUnit const&)
Unexecuted instantiation: Rom.cpp:vvdec::CU::isIBC(vvdec::CodingUnit const&)
Unexecuted instantiation: SampleAdaptiveOffset.cpp:vvdec::CU::isIBC(vvdec::CodingUnit const&)
Unexecuted instantiation: Slice.cpp:vvdec::CU::isIBC(vvdec::CodingUnit const&)
Unexecuted instantiation: Unit.cpp:vvdec::CU::isIBC(vvdec::CodingUnit const&)
Unexecuted instantiation: UnitTools.cpp:vvdec::CU::isIBC(vvdec::CodingUnit const&)
Unexecuted instantiation: DecLibParser.cpp:vvdec::CU::isIBC(vvdec::CodingUnit const&)
Unexecuted instantiation: DecLibRecon.cpp:vvdec::CU::isIBC(vvdec::CodingUnit const&)
Unexecuted instantiation: AdaptiveLoopFilter.cpp:vvdec::CU::isIBC(vvdec::CodingUnit const&)
Unexecuted instantiation: CodingStructure.cpp:vvdec::CU::isIBC(vvdec::CodingUnit const&)
Unexecuted instantiation: InterPrediction.cpp:vvdec::CU::isIBC(vvdec::CodingUnit const&)
Unexecuted instantiation: IntraPrediction.cpp:vvdec::CU::isIBC(vvdec::CodingUnit const&)
Unexecuted instantiation: MatrixIntraPrediction.cpp:vvdec::CU::isIBC(vvdec::CodingUnit const&)
Unexecuted instantiation: Quant.cpp:vvdec::CU::isIBC(vvdec::CodingUnit const&)
Unexecuted instantiation: Reshape.cpp:vvdec::CU::isIBC(vvdec::CodingUnit const&)
Unexecuted instantiation: TrQuant.cpp:vvdec::CU::isIBC(vvdec::CodingUnit const&)
Unexecuted instantiation: UnitPartitioner.cpp:vvdec::CU::isIBC(vvdec::CodingUnit const&)
Unexecuted instantiation: CABACReader.cpp:vvdec::CU::isIBC(vvdec::CodingUnit const&)
Unexecuted instantiation: DecCu.cpp:vvdec::CU::isIBC(vvdec::CodingUnit const&)
Unexecuted instantiation: ContextModelling.cpp:vvdec::CU::isIBC(vvdec::CodingUnit const&)
65
66
0
  static inline bool isSepTree        (const CodingUnit &cu) { return cu.treeType() != TREE_D;     }
Unexecuted instantiation: LoopFilter.cpp:vvdec::CU::isSepTree(vvdec::CodingUnit const&)
Unexecuted instantiation: Rom.cpp:vvdec::CU::isSepTree(vvdec::CodingUnit const&)
Unexecuted instantiation: SampleAdaptiveOffset.cpp:vvdec::CU::isSepTree(vvdec::CodingUnit const&)
Unexecuted instantiation: Slice.cpp:vvdec::CU::isSepTree(vvdec::CodingUnit const&)
Unexecuted instantiation: Unit.cpp:vvdec::CU::isSepTree(vvdec::CodingUnit const&)
Unexecuted instantiation: UnitTools.cpp:vvdec::CU::isSepTree(vvdec::CodingUnit const&)
Unexecuted instantiation: DecLibParser.cpp:vvdec::CU::isSepTree(vvdec::CodingUnit const&)
Unexecuted instantiation: DecLibRecon.cpp:vvdec::CU::isSepTree(vvdec::CodingUnit const&)
Unexecuted instantiation: AdaptiveLoopFilter.cpp:vvdec::CU::isSepTree(vvdec::CodingUnit const&)
Unexecuted instantiation: CodingStructure.cpp:vvdec::CU::isSepTree(vvdec::CodingUnit const&)
Unexecuted instantiation: InterPrediction.cpp:vvdec::CU::isSepTree(vvdec::CodingUnit const&)
Unexecuted instantiation: IntraPrediction.cpp:vvdec::CU::isSepTree(vvdec::CodingUnit const&)
Unexecuted instantiation: MatrixIntraPrediction.cpp:vvdec::CU::isSepTree(vvdec::CodingUnit const&)
Unexecuted instantiation: Quant.cpp:vvdec::CU::isSepTree(vvdec::CodingUnit const&)
Unexecuted instantiation: Reshape.cpp:vvdec::CU::isSepTree(vvdec::CodingUnit const&)
Unexecuted instantiation: TrQuant.cpp:vvdec::CU::isSepTree(vvdec::CodingUnit const&)
Unexecuted instantiation: UnitPartitioner.cpp:vvdec::CU::isSepTree(vvdec::CodingUnit const&)
Unexecuted instantiation: CABACReader.cpp:vvdec::CU::isSepTree(vvdec::CodingUnit const&)
Unexecuted instantiation: DecCu.cpp:vvdec::CU::isSepTree(vvdec::CodingUnit const&)
Unexecuted instantiation: ContextModelling.cpp:vvdec::CU::isSepTree(vvdec::CodingUnit const&)
67
0
  static inline bool isConsInter      (const CodingUnit &cu) { return cu.modeType() == MODE_TYPE_INTER; }
Unexecuted instantiation: LoopFilter.cpp:vvdec::CU::isConsInter(vvdec::CodingUnit const&)
Unexecuted instantiation: Rom.cpp:vvdec::CU::isConsInter(vvdec::CodingUnit const&)
Unexecuted instantiation: SampleAdaptiveOffset.cpp:vvdec::CU::isConsInter(vvdec::CodingUnit const&)
Unexecuted instantiation: Slice.cpp:vvdec::CU::isConsInter(vvdec::CodingUnit const&)
Unexecuted instantiation: Unit.cpp:vvdec::CU::isConsInter(vvdec::CodingUnit const&)
Unexecuted instantiation: UnitTools.cpp:vvdec::CU::isConsInter(vvdec::CodingUnit const&)
Unexecuted instantiation: DecLibParser.cpp:vvdec::CU::isConsInter(vvdec::CodingUnit const&)
Unexecuted instantiation: DecLibRecon.cpp:vvdec::CU::isConsInter(vvdec::CodingUnit const&)
Unexecuted instantiation: AdaptiveLoopFilter.cpp:vvdec::CU::isConsInter(vvdec::CodingUnit const&)
Unexecuted instantiation: CodingStructure.cpp:vvdec::CU::isConsInter(vvdec::CodingUnit const&)
Unexecuted instantiation: InterPrediction.cpp:vvdec::CU::isConsInter(vvdec::CodingUnit const&)
Unexecuted instantiation: IntraPrediction.cpp:vvdec::CU::isConsInter(vvdec::CodingUnit const&)
Unexecuted instantiation: MatrixIntraPrediction.cpp:vvdec::CU::isConsInter(vvdec::CodingUnit const&)
Unexecuted instantiation: Quant.cpp:vvdec::CU::isConsInter(vvdec::CodingUnit const&)
Unexecuted instantiation: Reshape.cpp:vvdec::CU::isConsInter(vvdec::CodingUnit const&)
Unexecuted instantiation: TrQuant.cpp:vvdec::CU::isConsInter(vvdec::CodingUnit const&)
Unexecuted instantiation: UnitPartitioner.cpp:vvdec::CU::isConsInter(vvdec::CodingUnit const&)
Unexecuted instantiation: CABACReader.cpp:vvdec::CU::isConsInter(vvdec::CodingUnit const&)
Unexecuted instantiation: DecCu.cpp:vvdec::CU::isConsInter(vvdec::CodingUnit const&)
Unexecuted instantiation: ContextModelling.cpp:vvdec::CU::isConsInter(vvdec::CodingUnit const&)
68
0
  static inline bool isConsIntra      (const CodingUnit &cu) { return cu.modeType() == MODE_TYPE_INTRA; }
Unexecuted instantiation: LoopFilter.cpp:vvdec::CU::isConsIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: Rom.cpp:vvdec::CU::isConsIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: SampleAdaptiveOffset.cpp:vvdec::CU::isConsIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: Slice.cpp:vvdec::CU::isConsIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: Unit.cpp:vvdec::CU::isConsIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: UnitTools.cpp:vvdec::CU::isConsIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: DecLibParser.cpp:vvdec::CU::isConsIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: DecLibRecon.cpp:vvdec::CU::isConsIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: AdaptiveLoopFilter.cpp:vvdec::CU::isConsIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: CodingStructure.cpp:vvdec::CU::isConsIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: InterPrediction.cpp:vvdec::CU::isConsIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: IntraPrediction.cpp:vvdec::CU::isConsIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: MatrixIntraPrediction.cpp:vvdec::CU::isConsIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: Quant.cpp:vvdec::CU::isConsIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: Reshape.cpp:vvdec::CU::isConsIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: TrQuant.cpp:vvdec::CU::isConsIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: UnitPartitioner.cpp:vvdec::CU::isConsIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: CABACReader.cpp:vvdec::CU::isConsIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: DecCu.cpp:vvdec::CU::isConsIntra(vvdec::CodingUnit const&)
Unexecuted instantiation: ContextModelling.cpp:vvdec::CU::isConsIntra(vvdec::CodingUnit const&)
69
70
  bool     isDualITree                (const CodingUnit &cu);
71
72
  bool isSameCtu                      (const CodingUnit &cu, const CodingUnit &cu2);
73
  bool isSameSlice                    (const CodingUnit &cu, const CodingUnit &cu2);
74
  bool isSameTile                     (const CodingUnit &cu, const CodingUnit &cu2);
75
  bool isSameSliceAndTile             (const CodingUnit &cu, const CodingUnit &cu2);
76
  bool isSameSubPic                   (const CodingUnit &cu, const CodingUnit &cu2);
77
  bool isAvailable                    (const CodingUnit &cu, const CodingUnit &cu2, const bool bEnforceSliceRestriction, const bool bEnforceTileRestriction, const bool bEnforceSubPicRestriction);
78
79
  uint32_t getCtuAddr                 (const CodingUnit &cu);
80
81
  int  predictQP                      (const CodingUnit& cu, const int prevQP );
82
  bool isMIP                          (const CodingUnit &cu, const ChannelType &chType = CHANNEL_TYPE_LUMA);
83
  bool isPredRegDiffFromTB            (const CodingUnit& cu, const ComponentID compID);
84
  bool isFirstTBInPredReg             (const CodingUnit& cu, const ComponentID compID, const CompArea &area);
85
  void adjustPredArea                 (CompArea &area);
86
  bool  isBcwIdxCoded                 (const CodingUnit& cu);
87
  void  setBcwIdx                     (CodingUnit& cu, uint8_t uh);
88
  bool bdpcmAllowed                   (const CodingUnit& cu, const ComponentID compID);
89
  bool isMTSAllowed                   (const CodingUnit& cu, const ComponentID compID);
90
91
92
  bool      divideTuInRows            ( const CodingUnit &cu );
93
  PartSplit getISPType                ( const CodingUnit &cu,                         const ComponentID compID );
94
  ISPType   canUseISPSplit            ( const CodingUnit &cu,                         const ComponentID compID );
95
  ISPType   canUseISPSplit            ( const int width, const int height, const int maxTrSize = MAX_TB_SIZEY );
96
  bool      canUseLfnstWithISP        ( const CompArea& cuArea, const ISPType ispSplitType );
97
  bool      canUseLfnstWithISP        ( const CodingUnit& cu, const ChannelType chType );
98
  uint32_t  getISPSplitDim            ( const int width, const int height, const PartSplit ispType );
99
100
  bool  hasSubCUNonZeroMVd            (const CodingUnit& cu);
101
  bool  hasSubCUNonZeroAffineMVd      (const CodingUnit& cu);
102
103
  uint8_t getSbtIdx                   (const uint8_t sbtInfo);
104
  uint8_t getSbtPos                   (const uint8_t sbtInfo);
105
  uint8_t targetSbtAllowed            (uint8_t idx, uint8_t sbtAllowed);
106
107
108
  uint8_t getSbtIdx                   (const CodingUnit& cu);
109
  uint8_t getSbtPos                   (const CodingUnit& cu);
110
  void    setSbtIdx                   (      CodingUnit& cu, uint8_t idx);
111
  void    setSbtPos                   (      CodingUnit& cu, uint8_t pos);
112
  uint8_t getSbtTuSplit               (const CodingUnit& cu);
113
  uint8_t checkAllowedSbt             (const CodingUnit& cu);
114
  PartSplit getSplitAtDepth           (const CodingUnit& cu, const unsigned depth);
115
  bool    checkCCLMAllowed            (const CodingUnit &cu);
116
  bool    getRprScaling               ( const SPS* sps, const PPS* curPPS, const PPS* refPPS, int& xScale, int& yScale );
117
  void    checkConformanceILRP        ( Slice *slice );
118
}
119
// PU tools
120
namespace PU
121
{
122
  int                   getLMSymbolList                  (const CodingUnit &cu, int *pModeList);
123
  int                   getIntraMPMs                     (const CodingUnit &cu, unsigned *mpm, const ChannelType &channelType = CHANNEL_TYPE_LUMA);
124
  bool                  isDMChromaMIP                    (const CodingUnit &cu);
125
  int                   getMipSizeId                     (const CodingUnit &cu);
126
  uint32_t              getIntraDirLuma                  (const CodingUnit &cu);
127
  void                  getIntraChromaCandModes          (const CodingUnit &cu, unsigned modeList[NUM_CHROMA_MODE]);
128
  const CodingUnit& getCoLocatedLumaPU               (const CodingUnit &cu);
129
  uint32_t              getFinalIntraMode                (const CodingUnit &cu, const ChannelType &chType);
130
  uint32_t              getCoLocatedIntraLumaMode        (const CodingUnit &cu);
131
  int                   getWideAngIntraMode              (const TransformUnit &tu, const uint32_t dirMode, const ComponentID compID );
132
  void                  getInterMergeCandidates          (const CodingUnit &cu, MergeCtx& mrgCtx, MotionHist &hist, const int& mrgCandIdx = -1);
133
  void                  getIBCMergeCandidates            (const CodingUnit &cu, MergeCtx& mrgCtx, MotionHist &hist, const int& mrgCandIdx = -1);
134
  void                  getInterMMVDMergeCandidates      (const CodingUnit &cu, MergeCtx& mrgCtx, const int& mrgCandIdx = -1);
135
  int                   getDistScaleFactor               (const int &currPOC, const int &currRefPOC, const int &colPOC, const int &colRefPOC);
136
  bool                  isDiffMER                        (const Position &pos1, const Position &pos2, const unsigned plevel);
137
  bool                  getColocatedMVP                  (const CodingUnit &cu, const RefPicList &eRefPicList, const Position &pos, Mv& rcMv, const int refIdx, bool sbFlag);
138
  void                  fillMvpCand                      (      CodingUnit &cu, const RefPicList &eRefPicList, const int &refIdx, AMVPInfo &amvpInfo, MotionHist& hist);
139
  void                  fillIBCMvpCand                   (      CodingUnit &cu, AMVPInfo &amvpInfo, MotionHist& hist);
140
  void                  fillAffineMvpCand                (      CodingUnit &cu, const RefPicList &eRefPicList, const int &refIdx, AffineAMVPInfo &affiAMVPInfo);
141
  bool                  addMVPCandUnscaled               (const CodingUnit &cu, const RefPicList &eRefPicList, const int &iRefIdx, const Position &pos, const MvpDir &eDir, AMVPInfo &amvpInfo);
142
  void                  xInheritedAffineMv               (const CodingUnit &cu, bool is6param, const CodingUnit* puNeighbour, RefPicList eRefPicList, Mv rcMv[3] );
143
  bool                  xCheckSimilarMotion              (const int mergeCandIndex, const int prevCnt, const MergeCtx& mergeCandList, bool hasPruned[MRG_MAX_NUM_CANDS]);
144
  bool                  addMergeHMVPCand                 (const CodingStructure &cs, MergeCtx& mrgCtx, MotionHist& hist, bool canFastExit, const int& mrgCandIdx, const uint32_t maxNumMergeCandMin1, int &cnt, const int prevCnt, bool isAvailableSubPu, unsigned subPuMvpPos, bool ibcFlag, bool isGt4x4, bool isInterB  );
145
  void                  addAMVPHMVPCand                  (const CodingUnit &cu, MotionHist& hist, const RefPicList eRefPicList, const RefPicList eRefPicList2nd, const int currRefPOC, AMVPInfo &info, uint8_t imv);
146
  bool                  addAffineMVPCandUnscaled         (const CodingUnit &cu, const RefPicList &refPicList, const int &refIdx, const Position &pos, const MvpDir &dir, AffineAMVPInfo &affiAmvpInfo );
147
  bool                  isBipredRestriction              (const CodingUnit &cu);
148
  void                  spanMotionInfo                   (      CodingUnit &cu );
149
  void                  applyImv                         (      CodingUnit &cu, MotionHist& hist);
150
  void                  getAffineControlPointCand        (const CodingUnit &cu, MotionInfo mi[4], bool isAvailable[4], int verIdx[4], int8_t gbiIdx, int modelIdx, int verNum, AffineMergeCtx& affMrgCtx);
151
  void                  getAffineMergeCand               (const CodingUnit &cu, AffineMergeCtx& affMrgCtx, const int mrgCandIdx = -1 );
152
  void                  setAllAffineMvField              (      CodingUnit &cu, MvField *mvField, RefPicList eRefList );
153
  void                  setAllAffineMv                   (      CodingUnit &cu, Mv affLT, Mv affRT, Mv affLB, RefPicList eRefList, bool clipCPMVs = false );
154
  bool                  getInterMergeSubPuMvpCand        (const CodingUnit &cu, AffineMergeCtx &mrgCtx, const int count);
155
  bool                  isBiPredFromDifferentDirEqDistPoc(const CodingUnit &cu);
156
  void                  restrictBiPredMergeCandsOne      (      CodingUnit &cu);
157
158
  bool                  isLMCMode                        (                          unsigned mode);
159
  void                  getGeoMergeCandidates            (const CodingUnit &cu, MergeCtx &GeoMrgCtx, MotionHist& hist);
160
  void                  spanGeoMotionInfo                (      CodingUnit &cu, MergeCtx &GeoMrgCtx, const uint8_t splitDir, const uint8_t candIdx0, const uint8_t candIdx1);
161
  bool                  checkDMVRCondition               (const CodingUnit& cu);
162
163
  bool                  isRefPicSameSize                 (const CodingUnit& cu);
164
}
165
166
// TU tools
167
namespace TU
168
{
169
  bool getCbf                         (const TransformUnit &tu, const ComponentID &compID);
170
  void setCbf                         (      TransformUnit &tu, const ComponentID &compID, const bool &cbf);
171
  bool isTSAllowed                    (const TransformUnit &tu, const ComponentID  compID);
172
  bool checkTuNoResidual              (      TransformUnit &tu, unsigned idx );
173
174
  bool needsSqrt2Scale                (const TransformUnit &tu, const ComponentID &compID);
175
  bool needsBlockSizeTrafoScale       (const TransformUnit &tu, const ComponentID &compID);
176
  const TransformUnit* getPrevTU      (const TransformUnit &tu, const ComponentID  compID);
177
  bool getPrevTUCbf                   (const TransformUnit &tu, const ComponentID  compID);
178
  int getICTMode                      (const TransformUnit &tu, bool sign);
179
  int getTbAreaAfterCoefZeroOut       (const TransformUnit &tu, const ComponentID compID);
180
}
181
182
uint32_t getCtuAddr        (const Position& pos, const PreCalcValues &pcv);
183
UnitArea getCtuArea        (const CodingStructure& cs, unsigned col, unsigned line, bool clipToPic = false );
184
UnitArea getLineArea       (const CodingStructure& cs, unsigned line, bool clipToPic = false );
185
186
int  getNumModesMip   (const Size& block);
187
int getMipSizeId      (const Size& block);
188
bool allowLfnstWithMip(const Size& block);
189
190
bool isCrossedByVirtualBoundaries( const PicHeader* picHeader,
191
                                   const Area&      area,
192
                                   int&             numHorVirBndry,
193
                                   int&             numVerVirBndry,
194
                                   int              horVirBndryPos[],
195
                                   int              verVirBndryPos[] );
196
197
}