Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
V
VVCSoftware_VTM
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Custom Issue Tracker
Custom Issue Tracker
Labels
Merge Requests
11
Merge Requests
11
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Jobs
Commits
Open sidebar
jvet
VVCSoftware_VTM
Commits
83116783
Commit
83116783
authored
Mar 21, 2019
by
Adam Wieckowski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
work in progress on ENABLE_SPLIT_PARALLELISM
parent
74e85d1c
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
44 additions
and
77 deletions
+44
-77
source/Lib/CommonLib/CodingStructure.cpp
source/Lib/CommonLib/CodingStructure.cpp
+6
-2
source/Lib/CommonLib/InterPrediction.h
source/Lib/CommonLib/InterPrediction.h
+3
-0
source/Lib/CommonLib/TypeDef.h
source/Lib/CommonLib/TypeDef.h
+1
-1
source/Lib/DecoderLib/DecCu.h
source/Lib/DecoderLib/DecCu.h
+3
-0
source/Lib/EncoderLib/EncCu.cpp
source/Lib/EncoderLib/EncCu.cpp
+21
-61
source/Lib/EncoderLib/EncCu.h
source/Lib/EncoderLib/EncCu.h
+1
-10
source/Lib/EncoderLib/EncModeCtrl.cpp
source/Lib/EncoderLib/EncModeCtrl.cpp
+7
-3
source/Lib/EncoderLib/InterSearch.cpp
source/Lib/EncoderLib/InterSearch.cpp
+2
-0
No files found.
source/Lib/CommonLib/CodingStructure.cpp
View file @
83116783
...
...
@@ -867,9 +867,9 @@ void CodingStructure::useSubStructure( const CodingStructure& subStruct, const C
if
(
cpyReco
)
picture
->
getRecoBuf
(
clippedArea
).
copyFrom
(
subRecoBuf
);
#if JVET_M0483_IBC
if
(
!
subStruct
.
m_isTuEnc
&&
((
!
slice
->
isIntra
()
||
slice
->
getSPS
()
->
getIBCFlag
())
&&
subStruct
.
chType
!=
CHANNEL_TYPE_CHROMA
))
if
(
!
subStruct
.
m_isTuEnc
&&
((
!
slice
->
isIntra
()
||
slice
->
getSPS
()
->
getIBCFlag
())
&&
chType
!=
CHANNEL_TYPE_CHROMA
))
#else
if
(
!
subStruct
.
m_isTuEnc
&&
(
!
slice
->
isIntra
()
&&
subStruct
.
chType
!=
CHANNEL_TYPE_CHROMA
))
if
(
!
subStruct
.
m_isTuEnc
&&
(
!
slice
->
isIntra
()
&&
chType
!=
CHANNEL_TYPE_CHROMA
))
#endif
{
// copy motion buffer
...
...
@@ -1149,6 +1149,10 @@ void CodingStructure::initStructData( const int &QP, const bool &_isLosses, cons
{
getMotionBuf
()
.
memset
(
0
);
}
if
(
parent
)
{
motionLut
=
parent
->
motionLut
;
}
fracBits
=
0
;
dist
=
0
;
...
...
source/Lib/CommonLib/InterPrediction.h
View file @
83116783
...
...
@@ -214,6 +214,9 @@ public:
#endif
#if JVET_M0170_MRG_SHARELIST
void
setShareState
(
int
shareStateIn
)
{
m_shareState
=
shareStateIn
;}
#if ENABLE_SPLIT_PARALLELISM
int
getShareState
()
const
{
return
m_shareState
;
}
#endif
#endif
};
...
...
source/Lib/CommonLib/TypeDef.h
View file @
83116783
...
...
@@ -221,7 +221,7 @@ typedef std::pair<int, int> TrCost;
#endif
#ifndef ENABLE_SPLIT_PARALLELISM
#define ENABLE_SPLIT_PARALLELISM
0
#define ENABLE_SPLIT_PARALLELISM
1
#endif
#if ENABLE_SPLIT_PARALLELISM
#define PARL_SPLIT_MAX_NUM_JOBS 6 // number of parallel jobs that can be defined and need memory allocated
...
...
source/Lib/DecoderLib/DecCu.h
View file @
83116783
...
...
@@ -79,6 +79,9 @@ public:
#if JVET_M0170_MRG_SHARELIST
void
setShareStateDec
(
int
shareStateDecIn
)
{
m_shareStateDec
=
shareStateDecIn
;
}
#if ENABLE_SPLIT_PARALLELISM
int
getShareStateDec
()
const
{
return
m_shareStateDec
;
}
#endif
#endif
/// reconstruct Ctu information
protected:
...
...
source/Lib/EncoderLib/EncCu.cpp
View file @
83116783
...
...
@@ -118,9 +118,6 @@ void EncCu::create( EncCfg* encCfg )
}
}
// WIA: only the weight==height case is relevant without QTBT
m_pImvTempCS
=
nullptr
;
m_cuChromaQpOffsetIdxPlus1
=
0
;
unsigned
maxDepth
=
numWidths
+
numHeights
;
...
...
@@ -199,22 +196,6 @@ void EncCu::destroy()
delete
m_modeCtrl
;
m_modeCtrl
=
nullptr
;
// WIA: only the weight==height case is relevant without QTBT
if
(
m_pImvTempCS
)
{
for
(
unsigned
w
=
0
;
w
<
numWidths
;
w
++
)
{
if
(
m_pImvTempCS
[
w
]
)
{
m_pImvTempCS
[
w
]
->
destroy
();
delete
[]
m_pImvTempCS
[
w
];
}
}
delete
[]
m_pImvTempCS
;
m_pImvTempCS
=
nullptr
;
}
for
(
unsigned
ui
=
0
;
ui
<
MMVD_MRG_MAX_RD_BUF_NUM
;
ui
++
)
{
m_acMergeBuffer
[
ui
].
destroy
();
...
...
@@ -281,9 +262,6 @@ void EncCu::init( EncLib* pcEncLib, const SPS& sps PARL_PARAM( const int tId ) )
#if JVET_M0102_INTRA_SUBPARTITIONS
m_pcIntraSearch
->
setModeCtrl
(
m_modeCtrl
);
#endif
::
memset
(
m_subMergeBlkSize
,
0
,
sizeof
(
m_subMergeBlkSize
));
::
memset
(
m_subMergeBlkNum
,
0
,
sizeof
(
m_subMergeBlkNum
));
m_prevPOC
=
MAX_UINT
;
#if JVET_M0255_FRACMMVD_SWITCH
if
(
(
m_pcEncCfg
->
getIBCHashSearch
()
&&
m_pcEncCfg
->
getIBCMode
()
)
||
m_pcEncCfg
->
getAllowDisFracMMVD
()
)
...
...
@@ -653,14 +631,6 @@ void EncCu::xCompressCU( CodingStructure *&tempCS, CodingStructure *&bestCS, Par
const
unsigned
wIdx
=
gp_sizeIdxInfo
->
idxFrom
(
partitioner
.
currArea
().
lwidth
()
);
const
UnitArea
currCsArea
=
clipArea
(
CS
::
getArea
(
*
bestCS
,
bestCS
->
area
,
partitioner
.
chType
),
*
tempCS
->
picture
);
#if JVET_M0483_IBC
if
(
m_pImvTempCS
&&
(
!
slice
.
isIntra
()
||
slice
.
getSPS
()
->
getIBCFlag
()))
#else
if
(
m_pImvTempCS
&&
!
slice
.
isIntra
()
)
#endif
{
tempCS
->
initSubStructure
(
*
m_pImvTempCS
[
wIdx
],
partitioner
.
chType
,
partitioner
.
currArea
(),
false
);
}
tempCS
->
chType
=
partitioner
.
chType
;
bestCS
->
chType
=
partitioner
.
chType
;
...
...
@@ -680,6 +650,7 @@ void EncCu::xCompressCU( CodingStructure *&tempCS, CodingStructure *&bestCS, Par
#endif
slsSbt
->
resetSaveloadSbt
(
maxSLSize
);
#if ENABLE_SPLIT_PARALLELISM
CHECK
(
tempCS
->
picture
->
scheduler
.
getSplitJobId
()
!=
0
,
"The SBT search reset need to happen in sequential region."
);
if
(
m_pcEncCfg
->
getNumSplitThreads
()
>
1
)
{
for
(
int
jId
=
1
;
jId
<
NUM_RESERVERD_SPLIT_JOBS
;
jId
++
)
...
...
@@ -1163,8 +1134,13 @@ void EncCu::copyState( EncCu* other, Partitioner& partitioner, const UnitArea& c
CodingStructure
*
dst
=
m_pBestCS
[
wIdx
][
hIdx
];
const
CodingStructure
*
src
=
other
->
m_pBestCS
[
wIdx
][
hIdx
];
bool
keepResi
=
KEEP_PRED_AND_RESI_SIGNALS
;
#if JVET_M0427_INLOOP_RESHAPER
bool
keepPred
=
true
;
#else
bool
keepPred
=
KEEP_PRED_AND_RESI_SIGNALS
;
#endif
dst
->
useSubStructure
(
*
src
,
partitioner
.
chType
,
currArea
,
KEEP_PRED_AND_RESI_SIGNALS
,
true
,
keepResi
,
keepResi
);
dst
->
useSubStructure
(
*
src
,
partitioner
.
chType
,
currArea
,
keepPred
,
true
,
keepResi
,
keepResi
);
dst
->
cost
=
src
->
cost
;
dst
->
dist
=
src
->
dist
;
...
...
@@ -1189,7 +1165,16 @@ void EncCu::copyState( EncCu* other, Partitioner& partitioner, const UnitArea& c
encReshapeThis
->
copyState
(
*
encReshapeOther
);
}
#endif
#if JVET_M0170_MRG_SHARELIST
m_shareState
=
other
->
m_shareState
;
m_shareBndPosX
=
other
->
m_shareBndPosX
;
m_shareBndPosY
=
other
->
m_shareBndPosY
;
m_shareBndSizeW
=
other
->
m_shareBndSizeW
;
m_shareBndSizeH
=
other
->
m_shareBndSizeH
;
setShareStateDec
(
other
->
getShareStateDec
()
);
m_pcInterSearch
->
setShareState
(
other
->
m_pcInterSearch
->
getShareState
()
);
#endif
m_CABACEstimator
->
getCtx
()
=
other
->
m_CABACEstimator
->
getCtx
();
}
#endif
...
...
@@ -1993,12 +1978,10 @@ void EncCu::xCheckRDCostHashInter( CodingStructure *&tempCS, CodingStructure *&b
#if JVET_M0464_UNI_MTS
xEncodeInterResidual
(
tempCS
,
bestCS
,
partitioner
,
encTestMode
,
0
,
m_pImvTempCS
?
m_pImvTempCS
[
wIdx
]
:
NULL
,
0
,
&
equGBiCost
#else
xEncodeInterResidual
(
tempCS
,
bestCS
,
partitioner
,
encTestMode
,
0
,
m_pImvTempCS
?
m_pImvTempCS
[
wIdx
]
:
NULL
,
1
,
0
,
&
equGBiCost
...
...
@@ -2701,10 +2684,9 @@ void EncCu::xCheckRDCostMerge2Nx2N( CodingStructure *&tempCS, CodingStructure *&
}
#if JVET_M0464_UNI_MTS
xEncodeInterResidual
(
tempCS
,
bestCS
,
partitioner
,
encTestMode
,
uiNoResidualPass
,
NULL
,
uiNoResidualPass
==
0
?
&
candHasNoResidual
[
uiMrgHADIdx
]
:
NULL
);
xEncodeInterResidual
(
tempCS
,
bestCS
,
partitioner
,
encTestMode
,
uiNoResidualPass
,
uiNoResidualPass
==
0
?
&
candHasNoResidual
[
uiMrgHADIdx
]
:
NULL
);
#else
xEncodeInterResidual
(
tempCS
,
bestCS
,
partitioner
,
encTestMode
,
uiNoResidualPass
,
NULL
,
1
,
uiNoResidualPass
==
0
?
&
candHasNoResidual
[
uiMrgHADIdx
]
:
NULL
);
#endif
...
...
@@ -3063,9 +3045,9 @@ void EncCu::xCheckRDCostMergeTriangle2Nx2N( CodingStructure *&tempCS, CodingStru
}
#if JVET_M0464_UNI_MTS
xEncodeInterResidual
(
tempCS
,
bestCS
,
partitioner
,
encTestMode
,
noResidualPass
,
NULL
,
(
noResidualPass
==
0
?
&
trianglecandHasNoResidual
[
mergeCand
]
:
NULL
)
);
xEncodeInterResidual
(
tempCS
,
bestCS
,
partitioner
,
encTestMode
,
noResidualPass
,
(
noResidualPass
==
0
?
&
trianglecandHasNoResidual
[
mergeCand
]
:
NULL
)
);
#else
xEncodeInterResidual
(
tempCS
,
bestCS
,
partitioner
,
encTestMode
,
noResidualPass
,
NULL
,
true
,
(
(
noResidualPass
==
0
)
?
&
trianglecandHasNoResidual
[
mergeCand
]
:
NULL
)
);
xEncodeInterResidual
(
tempCS
,
bestCS
,
partitioner
,
encTestMode
,
noResidualPass
,
true
,
(
(
noResidualPass
==
0
)
?
&
trianglecandHasNoResidual
[
mergeCand
]
:
NULL
)
);
#endif
if
(
m_pcEncCfg
->
getUseFastDecisionForMerge
()
&&
!
bestIsSkip
)
...
...
@@ -3345,9 +3327,9 @@ void EncCu::xCheckRDCostAffineMerge2Nx2N( CodingStructure *&tempCS, CodingStruct
}
#if JVET_M0464_UNI_MTS
xEncodeInterResidual
(
tempCS
,
bestCS
,
partitioner
,
encTestMode
,
uiNoResidualPass
,
NULL
,
(
uiNoResidualPass
==
0
?
&
candHasNoResidual
[
uiMergeCand
]
:
NULL
)
);
xEncodeInterResidual
(
tempCS
,
bestCS
,
partitioner
,
encTestMode
,
uiNoResidualPass
,
(
uiNoResidualPass
==
0
?
&
candHasNoResidual
[
uiMergeCand
]
:
NULL
)
);
#else
xEncodeInterResidual
(
tempCS
,
bestCS
,
partitioner
,
encTestMode
,
uiNoResidualPass
,
NULL
,
true
,
((
uiNoResidualPass
==
0
)
?
&
candHasNoResidual
[
uiMergeCand
]
:
NULL
)
);
xEncodeInterResidual
(
tempCS
,
bestCS
,
partitioner
,
encTestMode
,
uiNoResidualPass
,
true
,
((
uiNoResidualPass
==
0
)
?
&
candHasNoResidual
[
uiMergeCand
]
:
NULL
)
);
#endif
if
(
m_pcEncCfg
->
getUseFastDecisionForMerge
()
&&
!
bestIsSkip
)
...
...
@@ -4067,12 +4049,10 @@ void EncCu::xCheckRDCostInter( CodingStructure *&tempCS, CodingStructure *&bestC
#if JVET_M0464_UNI_MTS
xEncodeInterResidual
(
tempCS
,
bestCS
,
partitioner
,
encTestMode
,
0
,
m_pImvTempCS
?
m_pImvTempCS
[
wIdx
]
:
NULL
,
0
,
&
equGBiCost
#else
xEncodeInterResidual
(
tempCS
,
bestCS
,
partitioner
,
encTestMode
,
0
,
m_pImvTempCS
?
m_pImvTempCS
[
wIdx
]
:
NULL
,
1
,
0
,
&
equGBiCost
...
...
@@ -4341,12 +4321,10 @@ bool EncCu::xCheckRDCostInterIMV( CodingStructure *&tempCS, CodingStructure *&be
#if JVET_M0464_UNI_MTS
xEncodeInterResidual
(
tempCS
,
bestCS
,
partitioner
,
encTestModeBase
,
0
,
NULL
,
0
,
&
equGBiCost
#else
xEncodeInterResidual
(
tempCS
,
bestCS
,
partitioner
,
encTestModeBase
,
0
,
NULL
,
true
,
0
,
&
equGBiCost
...
...
@@ -4607,7 +4585,6 @@ void EncCu::xEncodeInterResidual( CodingStructure *&tempCS
,
Partitioner
&
partitioner
,
const
EncTestMode
&
encTestMode
,
int
residualPass
,
CodingStructure
*
imvCS
,
bool
*
bestHasNonResi
,
double
*
equGBiCost
#else
...
...
@@ -4823,14 +4800,6 @@ void EncCu::xEncodeInterResidual( CodingStructure *&tempCS, CodingStructure *&be
#if !JVET_M0464_UNI_MTS
double
emtFirstPassCost
=
tempCS
->
cost
;
#endif
if
(
imvCS
&&
(
tempCS
->
cost
<
imvCS
->
cost
)
)
{
if
(
imvCS
->
cost
!=
MAX_DOUBLE
)
{
imvCS
->
initStructData
(
encTestMode
.
qp
,
encTestMode
.
lossless
);
}
imvCS
->
copyStructure
(
*
tempCS
,
partitioner
.
chType
);
}
if
(
NULL
!=
bestHasNonResi
&&
(
bestCostInternal
>
tempCS
->
cost
)
)
{
bestCostInternal
=
tempCS
->
cost
;
...
...
@@ -5035,15 +5004,6 @@ void EncCu::xEncodeInterResidual( CodingStructure *&tempCS, CodingStructure *&be
xCheckDQP
(
*
tempCS
,
partitioner
);
if
(
imvCS
&&
(
tempCS
->
cost
<
imvCS
->
cost
)
)
{
if
(
imvCS
->
cost
!=
MAX_DOUBLE
)
{
imvCS
->
initStructData
(
encTestMode
.
qp
,
encTestMode
.
lossless
);
}
imvCS
->
copyStructure
(
*
tempCS
,
partitioner
.
chType
);
}
if
(
NULL
!=
bestHasNonResi
&&
(
bestCostInternal
>
tempCS
->
cost
)
)
{
bestCostInternal
=
tempCS
->
cost
;
...
...
source/Lib/EncoderLib/EncCu.h
View file @
83116783
...
...
@@ -125,7 +125,6 @@ private:
CABACWriter
*
m_CABACEstimator
;
RateCtrl
*
m_pcRateCtrl
;
IbcHashMap
m_ibcHashMap
;
CodingStructure
**
m_pImvTempCS
;
EncModeCtrl
*
m_modeCtrl
;
#if JVET_M0170_MRG_SHARELIST
int
m_shareState
;
...
...
@@ -140,9 +139,7 @@ private:
PelStorage
m_acTriangleWeightedBuffer
[
TRIANGLE_MAX_NUM_CANDS
];
// to store weighted prediction pixles
double
m_mergeBestSATDCost
;
MotionInfo
m_SubPuMiBuf
[(
MAX_CU_SIZE
*
MAX_CU_SIZE
)
>>
(
MIN_CU_LOG2
<<
1
)];
unsigned
int
m_subMergeBlkSize
[
10
];
unsigned
int
m_subMergeBlkNum
[
10
];
unsigned
int
m_prevPOC
;
int
m_ctuIbcSearchRangeX
;
int
m_ctuIbcSearchRangeY
;
#if ENABLE_SPLIT_PARALLELISM || ENABLE_WPP_PARALLELISM
...
...
@@ -188,10 +185,6 @@ public:
EncCfg
*
getEncCfg
()
const
{
return
m_pcEncCfg
;
}
#endif
#if JVET_M0170_MRG_SHARELIST
Position
shareParentPos
;
Size
shareParentSize
;
#endif
~
EncCu
();
protected:
...
...
@@ -237,13 +230,11 @@ protected:
,
Partitioner
&
partitioner
,
const
EncTestMode
&
encTestMode
,
int
residualPass
=
0
,
CodingStructure
*
imvCS
=
NULL
,
bool
*
bestHasNonResi
=
NULL
,
double
*
equGBiCost
=
NULL
);
#else
void
xEncodeInterResidual
(
CodingStructure
*&
tempCS
,
CodingStructure
*&
bestCS
,
Partitioner
&
partitioner
,
const
EncTestMode
&
encTestMode
,
int
residualPass
=
0
,
CodingStructure
*
imvCS
=
NULL
,
int
emtMode
=
1
,
bool
*
bestHasNonResi
=
NULL
,
double
*
equGBiCost
=
NULL
...
...
source/Lib/EncoderLib/EncModeCtrl.cpp
View file @
83116783
...
...
@@ -1326,7 +1326,7 @@ void EncModeCtrlMTnoRQT::initCULevel( Partitioner &partitioner, const CodingStru
xGetMinMaxQP
(
minQP
,
maxQP
,
cs
,
partitioner
,
baseQP
,
*
cs
.
sps
,
*
cs
.
pps
,
true
);
#endif
bool
checkIbc
=
true
;
if
(
cs
.
chType
==
CHANNEL_TYPE_CHROMA
)
if
(
cs
.
chType
==
CHANNEL_TYPE_CHROMA
)
{
IbcLumaCoverage
ibcLumaCoverage
=
cs
.
getIbcLumaCoverage
(
cs
.
area
.
Cb
());
switch
(
ibcLumaCoverage
)
...
...
@@ -2235,13 +2235,17 @@ int EncModeCtrlMTnoRQT::getNumParallelJobs( const CodingStructure &cs, Partition
bool
EncModeCtrlMTnoRQT
::
isParallelSplit
(
const
CodingStructure
&
cs
,
Partitioner
&
partitioner
)
const
{
if
(
partitioner
.
getImplicitSplit
(
cs
)
!=
CU_DONT_SPLIT
||
cs
.
picture
->
scheduler
.
getSplitJobId
()
!=
0
)
return
false
;
if
(
partitioner
.
currDepth
<=
cs
.
pps
->
getMaxCuDQPDepth
()
)
return
false
;
#if JVET_M0113_M0188_QG_SIZE
if
(
cs
.
pps
->
getUseDQP
()
&&
partitioner
.
currQgEnable
()
)
return
false
;
#else
if
(
cs
.
pps
->
getUseDQP
()
&&
partitioner
.
currDepth
<=
cs
.
pps
->
getMaxCuDQPDepth
()
)
return
false
;
#endif
const
int
numJobs
=
getNumParallelJobs
(
cs
,
partitioner
);
const
int
numPxl
=
partitioner
.
currArea
().
Y
().
area
();
const
int
parlAt
=
m_pcEncCfg
->
getNumSplitThreads
()
<=
3
?
1024
:
256
;
if
(
cs
.
slice
->
isIntra
()
&&
numJobs
>
2
&&
(
numPxl
==
parlAt
||
!
partitioner
.
canSplit
(
CU_QUAD_SPLIT
,
cs
)
)
)
return
true
;
if
(
!
cs
.
slice
->
isIntra
()
&&
numJobs
>
1
&&
(
numPxl
==
parlAt
||
!
partitioner
.
canSplit
(
CU_QUAD_SPLIT
,
cs
)
)
)
return
true
;
return
false
;
return
false
;
}
bool
EncModeCtrlMTnoRQT
::
parallelJobSelector
(
const
EncTestMode
&
encTestmode
,
const
CodingStructure
&
cs
,
Partitioner
&
partitioner
)
const
...
...
source/Lib/EncoderLib/InterSearch.cpp
View file @
83116783
...
...
@@ -176,6 +176,8 @@ void InterSearch::setTempBuffers( CodingStructure ****pSplitCS, CodingStructure
void
InterSearch
::
copyState
(
const
InterSearch
&
other
)
{
memcpy
(
m_aaiAdaptSR
,
other
.
m_aaiAdaptSR
,
sizeof
(
m_aaiAdaptSR
)
);
m_affineMotion
=
other
.
m_affineMotion
;
m_uniMotions
=
other
.
m_uniMotions
;
}
#endif
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment