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
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jeeva Raj A
VVCSoftware_VTM
Commits
5877340b
Commit
5877340b
authored
Jul 24, 2019
by
Xiaoyu Xiu
Committed by
Xiang Li
Jul 24, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
JVET-O0108: Disable DMVR and BDOF for CIIP
parent
9c7767ed
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
176 additions
and
1 deletion
+176
-1
source/Lib/CommonLib/InterPrediction.cpp
source/Lib/CommonLib/InterPrediction.cpp
+118
-0
source/Lib/CommonLib/InterPrediction.h
source/Lib/CommonLib/InterPrediction.h
+16
-1
source/Lib/CommonLib/TypeDef.h
source/Lib/CommonLib/TypeDef.h
+2
-0
source/Lib/CommonLib/UnitTools.cpp
source/Lib/CommonLib/UnitTools.cpp
+3
-0
source/Lib/EncoderLib/EncCu.cpp
source/Lib/EncoderLib/EncCu.cpp
+34
-0
source/Lib/EncoderLib/EncCu.h
source/Lib/EncoderLib/EncCu.h
+3
-0
No files found.
source/Lib/CommonLib/InterPrediction.cpp
View file @
5877340b
...
...
@@ -330,7 +330,11 @@ void InterPrediction::xSubPuMC( PredictionUnit& pu, PelUnitBuf& predBuf, const R
pu
.
cu
->
affine
=
isAffine
;
}
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
void
InterPrediction
::
xSubPuBio
(
PredictionUnit
&
pu
,
PelUnitBuf
&
predBuf
,
const
RefPicList
&
eRefPicList
/*= REF_PIC_LIST_X*/
,
PelUnitBuf
*
yuvDstTmp
/*= NULL*/
)
#else
void
InterPrediction
::
xSubPuBio
(
PredictionUnit
&
pu
,
PelUnitBuf
&
predBuf
,
const
RefPicList
&
eRefPicList
/*= REF_PIC_LIST_X*/
)
#endif
{
// compute the location of the current PU
Position
puPos
=
pu
.
lumaPos
();
...
...
@@ -344,6 +348,9 @@ void InterPrediction::xSubPuBio(PredictionUnit& pu, PelUnitBuf& predBuf, const R
subPu
.
mmvdMergeFlag
=
pu
.
mmvdMergeFlag
;
subPu
.
mmvdEncOptMode
=
pu
.
mmvdEncOptMode
;
subPu
.
mergeFlag
=
pu
.
mergeFlag
;
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
subPu
.
mhIntraFlag
=
pu
.
mhIntraFlag
;
#endif
subPu
.
mvRefine
=
pu
.
mvRefine
;
subPu
.
refIdx
[
0
]
=
pu
.
refIdx
[
0
];
subPu
.
refIdx
[
1
]
=
pu
.
refIdx
[
1
];
...
...
@@ -368,6 +375,14 @@ void InterPrediction::xSubPuBio(PredictionUnit& pu, PelUnitBuf& predBuf, const R
subPu
=
curMi
;
PelUnitBuf
subPredBuf
=
predBuf
.
subBuf
(
UnitAreaRelative
(
pu
,
subPu
));
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
if
(
yuvDstTmp
)
{
PelUnitBuf
subPredBufTmp
=
yuvDstTmp
->
subBuf
(
UnitAreaRelative
(
pu
,
subPu
));
motionCompensation
(
subPu
,
subPredBuf
,
eRefPicList
,
true
,
true
,
&
subPredBufTmp
);
}
else
#endif
motionCompensation
(
subPu
,
subPredBuf
,
eRefPicList
);
}
}
...
...
@@ -463,7 +478,11 @@ void InterPrediction::xPredInterUni(const PredictionUnit& pu, const RefPicList&
}
}
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
void
InterPrediction
::
xPredInterBi
(
PredictionUnit
&
pu
,
PelUnitBuf
&
pcYuvPred
,
PelUnitBuf
*
yuvPredTmp
/*= NULL*/
)
#else
void
InterPrediction
::
xPredInterBi
(
PredictionUnit
&
pu
,
PelUnitBuf
&
pcYuvPred
)
#endif
{
const
PPS
&
pps
=
*
pu
.
cs
->
pps
;
const
Slice
&
slice
=
*
pu
.
cs
->
slice
;
...
...
@@ -496,6 +515,11 @@ void InterPrediction::xPredInterBi(PredictionUnit& pu, PelUnitBuf &pcYuvPred)
}
}
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
if
(
bioApplied
&&
pu
.
mhIntraFlag
)
bioApplied
=
false
;
#endif
if
(
bioApplied
&&
pu
.
cu
->
smvdMode
)
{
bioApplied
=
false
;
...
...
@@ -532,7 +556,15 @@ void InterPrediction::xPredInterBi(PredictionUnit& pu, PelUnitBuf &pcYuvPred)
if
(
pu
.
refIdx
[
0
]
>=
0
&&
pu
.
refIdx
[
1
]
>=
0
)
{
if
(
dmvrApplied
)
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
{
if
(
yuvPredTmp
)
xPredInterUni
(
pu
,
eRefPicList
,
pcMbBuf
,
true
,
false
,
true
,
true
);
continue
;
}
#else
continue
;
// mc will happen in processDMVR
#endif
xPredInterUni
(
pu
,
eRefPicList
,
pcMbBuf
,
true
,
bioApplied
,
true
,
true
...
...
@@ -565,20 +597,38 @@ void InterPrediction::xPredInterBi(PredictionUnit& pu, PelUnitBuf &pcYuvPred)
if
(
(
!
dmvrApplied
)
&&
(
!
bioApplied
)
&&
pps
.
getWPBiPred
()
&&
slice
.
getSliceType
()
==
B_SLICE
&&
pu
.
cu
->
GBiIdx
==
GBI_DEFAULT
)
{
xWeightedPredictionBi
(
pu
,
srcPred0
,
srcPred1
,
pcYuvPred
,
m_maxCompIDToPred
);
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
if
(
yuvPredTmp
)
yuvPredTmp
->
copyFrom
(
pcYuvPred
);
#endif
}
else
if
(
pps
.
getUseWP
()
&&
slice
.
getSliceType
()
==
P_SLICE
)
{
xWeightedPredictionUni
(
pu
,
srcPred0
,
REF_PIC_LIST_0
,
pcYuvPred
,
-
1
,
m_maxCompIDToPred
);
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
if
(
yuvPredTmp
)
yuvPredTmp
->
copyFrom
(
pcYuvPred
);
#endif
}
else
{
if
(
dmvrApplied
)
{
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
if
(
yuvPredTmp
)
{
yuvPredTmp
->
addAvg
(
srcPred0
,
srcPred1
,
slice
.
clpRngs
(),
false
);
}
#endif
xProcessDMVR
(
pu
,
pcYuvPred
,
slice
.
clpRngs
(),
bioApplied
);
}
else
{
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
xWeightedAverage
(
pu
,
srcPred0
,
srcPred1
,
pcYuvPred
,
slice
.
getSPS
()
->
getBitDepths
(),
slice
.
clpRngs
(),
bioApplied
,
yuvPredTmp
);
#else
xWeightedAverage
(
pu
,
srcPred0
,
srcPred1
,
pcYuvPred
,
slice
.
getSPS
()
->
getBitDepths
(),
slice
.
clpRngs
(),
bioApplied
);
#endif
}
}
}
...
...
@@ -1117,7 +1167,11 @@ void InterPrediction::xCalcBlkGradient(int sx, int sy, int *arraysGx2, int
g_pelBufOP
.
calcBlkGradient
(
sx
,
sy
,
arraysGx2
,
arraysGxGy
,
arraysGxdI
,
arraysGy2
,
arraysGydI
,
sGx2
,
sGy2
,
sGxGy
,
sGxdI
,
sGydI
,
width
,
height
,
unitSize
);
}
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
void
InterPrediction
::
xWeightedAverage
(
const
PredictionUnit
&
pu
,
const
CPelUnitBuf
&
pcYuvSrc0
,
const
CPelUnitBuf
&
pcYuvSrc1
,
PelUnitBuf
&
pcYuvDst
,
const
BitDepths
&
clipBitDepths
,
const
ClpRngs
&
clpRngs
,
const
bool
&
bioApplied
,
PelUnitBuf
*
yuvDstTmp
/*= NULL*/
)
#else
void
InterPrediction
::
xWeightedAverage
(
const
PredictionUnit
&
pu
,
const
CPelUnitBuf
&
pcYuvSrc0
,
const
CPelUnitBuf
&
pcYuvSrc1
,
PelUnitBuf
&
pcYuvDst
,
const
BitDepths
&
clipBitDepths
,
const
ClpRngs
&
clpRngs
,
const
bool
&
bioApplied
)
#endif
{
const
int
iRefIdx0
=
pu
.
refIdx
[
0
];
const
int
iRefIdx1
=
pu
.
refIdx
[
1
];
...
...
@@ -1128,6 +1182,10 @@ void InterPrediction::xWeightedAverage(const PredictionUnit& pu, const CPelUnitB
{
CHECK
(
bioApplied
,
"GBi is disallowed with BIO"
);
pcYuvDst
.
addWeightedAvg
(
pcYuvSrc0
,
pcYuvSrc1
,
clpRngs
,
pu
.
cu
->
GBiIdx
);
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
if
(
yuvDstTmp
)
yuvDstTmp
->
copyFrom
(
pcYuvDst
);
#endif
return
;
}
if
(
bioApplied
)
...
...
@@ -1145,10 +1203,18 @@ void InterPrediction::xWeightedAverage(const PredictionUnit& pu, const CPelUnitB
if
(
bioEnabled
)
{
applyBiOptFlow
(
pu
,
pcYuvSrc0
,
pcYuvSrc1
,
iRefIdx0
,
iRefIdx1
,
pcYuvDst
,
clipBitDepths
);
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
if
(
yuvDstTmp
)
yuvDstTmp
->
bufs
[
0
].
addAvg
(
CPelBuf
(
pSrcY0
,
src0Stride
,
pu
.
lumaSize
()),
CPelBuf
(
pSrcY1
,
src1Stride
,
pu
.
lumaSize
()),
clpRngs
.
comp
[
0
]);
#endif
}
else
{
pcYuvDst
.
bufs
[
0
].
addAvg
(
CPelBuf
(
pSrcY0
,
src0Stride
,
pu
.
lumaSize
()),
CPelBuf
(
pSrcY1
,
src1Stride
,
pu
.
lumaSize
()),
clpRngs
.
comp
[
0
]);
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
if
(
yuvDstTmp
)
yuvDstTmp
->
bufs
[
0
].
copyFrom
(
pcYuvDst
.
bufs
[
0
]);
#endif
}
}
if
(
pu
.
cs
->
pps
->
getWPBiPred
())
...
...
@@ -1169,6 +1235,18 @@ void InterPrediction::xWeightedAverage(const PredictionUnit& pu, const CPelUnitB
{
pcYuvDst
.
addAvg
(
pcYuvSrc0
,
pcYuvSrc1
,
clpRngs
,
bioApplied
);
}
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
if
(
yuvDstTmp
)
{
if
(
bioApplied
)
{
yuvDstTmp
->
bufs
[
1
].
copyFrom
(
pcYuvDst
.
bufs
[
1
]);
yuvDstTmp
->
bufs
[
2
].
copyFrom
(
pcYuvDst
.
bufs
[
2
]);
}
else
yuvDstTmp
->
copyFrom
(
pcYuvDst
);
}
#endif
}
else
if
(
iRefIdx0
>=
0
&&
iRefIdx1
<
0
)
{
...
...
@@ -1178,6 +1256,10 @@ void InterPrediction::xWeightedAverage(const PredictionUnit& pu, const CPelUnitB
}
else
pcYuvDst
.
copyClip
(
pcYuvSrc0
,
clpRngs
);
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
if
(
yuvDstTmp
)
yuvDstTmp
->
copyFrom
(
pcYuvDst
);
#endif
}
else
if
(
iRefIdx0
<
0
&&
iRefIdx1
>=
0
)
{
...
...
@@ -1187,13 +1269,24 @@ void InterPrediction::xWeightedAverage(const PredictionUnit& pu, const CPelUnitB
}
else
pcYuvDst
.
copyClip
(
pcYuvSrc1
,
clpRngs
);
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
if
(
yuvDstTmp
)
yuvDstTmp
->
copyFrom
(
pcYuvDst
);
#endif
}
}
void
InterPrediction
::
motionCompensation
(
PredictionUnit
&
pu
,
PelUnitBuf
&
predBuf
,
const
RefPicList
&
eRefPicList
,
const
bool
luma
,
const
bool
chroma
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
,
PelUnitBuf
*
predBufWOBIO
/*= NULL*/
#endif
)
{
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
CHECK
(
predBufWOBIO
&&
pu
.
mhIntraFlag
,
"the case should not happen!"
);
#endif
// dual tree handling for IBC as the only ref
if
((
!
luma
||
!
chroma
)
&&
eRefPicList
==
REF_PIC_LIST_0
)
{
...
...
@@ -1217,6 +1310,9 @@ void InterPrediction::motionCompensation( PredictionUnit &pu, PelUnitBuf &predBu
if
(
eRefPicList
!=
REF_PIC_LIST_X
)
{
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
CHECK
(
predBufWOBIO
!=
NULL
,
"the case should not happen!"
);
#endif
if
(
(
(
sliceType
==
P_SLICE
&&
pps
.
getUseWP
()
)
||
(
sliceType
==
B_SLICE
&&
pps
.
getWPBiPred
()
)
)
)
{
xPredInterUni
(
pu
,
eRefPicList
,
predBuf
,
true
...
...
@@ -1266,6 +1362,13 @@ void InterPrediction::motionCompensation( PredictionUnit &pu, PelUnitBuf &predBu
}
}
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
if
(
bioApplied
&&
pu
.
mhIntraFlag
)
{
bioApplied
=
false
;
}
#endif
if
(
bioApplied
&&
pu
.
cu
->
smvdMode
)
{
bioApplied
=
false
;
...
...
@@ -1283,11 +1386,18 @@ void InterPrediction::motionCompensation( PredictionUnit &pu, PelUnitBuf &predBu
dmvrApplied
=
(
pu
.
mvRefine
)
&&
PU
::
checkDMVRCondition
(
pu
);
if
((
pu
.
lumaSize
().
width
>
MAX_BDOF_APPLICATION_REGION
||
pu
.
lumaSize
().
height
>
MAX_BDOF_APPLICATION_REGION
)
&&
pu
.
mergeType
!=
MRG_TYPE_SUBPU_ATMVP
&&
(
bioApplied
&&
!
dmvrApplied
))
{
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
xSubPuBio
(
pu
,
predBuf
,
eRefPicList
,
predBufWOBIO
);
#else
xSubPuBio
(
pu
,
predBuf
,
eRefPicList
);
#endif
}
else
if
(
pu
.
mergeType
!=
MRG_TYPE_DEFAULT_N
&&
pu
.
mergeType
!=
MRG_TYPE_IBC
)
{
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
CHECK
(
predBufWOBIO
!=
NULL
,
"the case should not happen!"
);
#endif
xSubPuMC
(
pu
,
predBuf
,
eRefPicList
);
}
else
if
(
xCheckIdenticalMotion
(
pu
)
)
...
...
@@ -1296,10 +1406,18 @@ void InterPrediction::motionCompensation( PredictionUnit &pu, PelUnitBuf &predBu
,
false
,
true
,
true
);
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
if
(
predBufWOBIO
)
predBufWOBIO
->
copyFrom
(
predBuf
);
#endif
}
else
{
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
xPredInterBi
(
pu
,
predBuf
,
predBufWOBIO
);
#else
xPredInterBi
(
pu
,
predBuf
);
#endif
}
}
return
;
...
...
source/Lib/CommonLib/InterPrediction.h
View file @
5877340b
...
...
@@ -121,7 +121,11 @@ protected:
,
const
bool
&
bioApplied
,
const
bool
luma
,
const
bool
chroma
);
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
void
xPredInterBi
(
PredictionUnit
&
pu
,
PelUnitBuf
&
pcYuvPred
,
PelUnitBuf
*
yuvPredTmp
=
NULL
);
#else
void
xPredInterBi
(
PredictionUnit
&
pu
,
PelUnitBuf
&
pcYuvPred
);
#endif
void
xPredInterBlk
(
const
ComponentID
&
compID
,
const
PredictionUnit
&
pu
,
const
Picture
*
refPic
,
const
Mv
&
_mv
,
PelUnitBuf
&
dstPic
,
const
bool
&
bi
,
const
ClpRng
&
clpRng
,
const
bool
&
bioApplied
,
bool
isIBC
...
...
@@ -136,7 +140,11 @@ protected:
void
xBioGradFilter
(
Pel
*
pSrc
,
int
srcStride
,
int
width
,
int
height
,
int
gradStride
,
Pel
*
gradX
,
Pel
*
gradY
,
int
bitDepth
);
void
xCalcBIOPar
(
const
Pel
*
srcY0Temp
,
const
Pel
*
srcY1Temp
,
const
Pel
*
gradX0
,
const
Pel
*
gradX1
,
const
Pel
*
gradY0
,
const
Pel
*
gradY1
,
int
*
dotProductTemp1
,
int
*
dotProductTemp2
,
int
*
dotProductTemp3
,
int
*
dotProductTemp5
,
int
*
dotProductTemp6
,
const
int
src0Stride
,
const
int
src1Stride
,
const
int
gradStride
,
const
int
widthG
,
const
int
heightG
,
int
bitDepth
);
void
xCalcBlkGradient
(
int
sx
,
int
sy
,
int
*
arraysGx2
,
int
*
arraysGxGy
,
int
*
arraysGxdI
,
int
*
arraysGy2
,
int
*
arraysGydI
,
int
&
sGx2
,
int
&
sGy2
,
int
&
sGxGy
,
int
&
sGxdI
,
int
&
sGydI
,
int
width
,
int
height
,
int
unitSize
);
void
xWeightedAverage
(
const
PredictionUnit
&
pu
,
const
CPelUnitBuf
&
pcYuvSrc0
,
const
CPelUnitBuf
&
pcYuvSrc1
,
PelUnitBuf
&
pcYuvDst
,
const
BitDepths
&
clipBitDepths
,
const
ClpRngs
&
clpRngs
,
const
bool
&
bioApplied
);
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
void
xWeightedAverage
(
const
PredictionUnit
&
pu
,
const
CPelUnitBuf
&
pcYuvSrc0
,
const
CPelUnitBuf
&
pcYuvSrc1
,
PelUnitBuf
&
pcYuvDst
,
const
BitDepths
&
clipBitDepths
,
const
ClpRngs
&
clpRngs
,
const
bool
&
bioApplied
,
PelUnitBuf
*
yuvDstTmp
=
NULL
);
#else
void
xWeightedAverage
(
const
PredictionUnit
&
pu
,
const
CPelUnitBuf
&
pcYuvSrc0
,
const
CPelUnitBuf
&
pcYuvSrc1
,
PelUnitBuf
&
pcYuvDst
,
const
BitDepths
&
clipBitDepths
,
const
ClpRngs
&
clpRngs
,
const
bool
&
bioApplied
);
#endif
void
xPredAffineBlk
(
const
ComponentID
&
compID
,
const
PredictionUnit
&
pu
,
const
Picture
*
refPic
,
const
Mv
*
_mv
,
PelUnitBuf
&
dstPic
,
const
bool
&
bi
,
const
ClpRng
&
clpRng
);
void
xWeightedTriangleBlk
(
const
PredictionUnit
&
pu
,
const
uint32_t
width
,
const
uint32_t
height
,
const
ComponentID
compIdx
,
const
bool
splitDir
,
PelUnitBuf
&
predDst
,
PelUnitBuf
&
predSrc0
,
PelUnitBuf
&
predSrc1
);
...
...
@@ -144,7 +152,11 @@ protected:
static
bool
xCheckIdenticalMotion
(
const
PredictionUnit
&
pu
);
void
xSubPuMC
(
PredictionUnit
&
pu
,
PelUnitBuf
&
predBuf
,
const
RefPicList
&
eRefPicList
=
REF_PIC_LIST_X
);
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
void
xSubPuBio
(
PredictionUnit
&
pu
,
PelUnitBuf
&
predBuf
,
const
RefPicList
&
eRefPicList
=
REF_PIC_LIST_X
,
PelUnitBuf
*
yuvDstTmp
=
NULL
);
#else
void
xSubPuBio
(
PredictionUnit
&
pu
,
PelUnitBuf
&
predBuf
,
const
RefPicList
&
eRefPicList
=
REF_PIC_LIST_X
);
#endif
void
destroy
();
...
...
@@ -162,6 +174,9 @@ public:
// inter
void
motionCompensation
(
PredictionUnit
&
pu
,
PelUnitBuf
&
predBuf
,
const
RefPicList
&
eRefPicList
=
REF_PIC_LIST_X
,
const
bool
luma
=
true
,
const
bool
chroma
=
true
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
,
PelUnitBuf
*
predBufWOBIO
=
NULL
#endif
);
void
motionCompensation
(
PredictionUnit
&
pu
,
const
RefPicList
&
eRefPicList
=
REF_PIC_LIST_X
,
const
bool
luma
=
true
,
const
bool
chroma
=
true
...
...
source/Lib/CommonLib/TypeDef.h
View file @
5877340b
...
...
@@ -116,6 +116,8 @@
#define JVET_O0592_ENC_ME_IMP 1 // JVET-O0592 encoder ME improvement
#define JVET_O0108_DIS_DMVR_BDOF_CIIP 1 // JVET_O0108 CE9-2.2: disable DMVR and BDOF for CIIP
#define FIX_DB_MAX_TRANSFORM_SIZE 1
#define MRG_SHARELIST_SHARSIZE 32
...
...
source/Lib/CommonLib/UnitTools.cpp
View file @
5877340b
...
...
@@ -1607,6 +1607,9 @@ bool PU::checkDMVRCondition(const PredictionUnit& pu)
{
return
pu
.
mergeFlag
&&
pu
.
mergeType
==
MRG_TYPE_DEFAULT_N
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
&&
!
pu
.
mhIntraFlag
#endif
&&
!
pu
.
cu
->
affine
&&
!
pu
.
mmvdMergeFlag
&&
!
pu
.
cu
->
mmvdSkip
...
...
source/Lib/EncoderLib/EncCu.cpp
View file @
5877340b
...
...
@@ -130,6 +130,9 @@ void EncCu::create( EncCfg* encCfg )
for
(
unsigned
ui
=
0
;
ui
<
MRG_MAX_NUM_CANDS
;
ui
++
)
{
m_acRealMergeBuffer
[
ui
].
create
(
chromaFormat
,
Area
(
0
,
0
,
uiMaxWidth
,
uiMaxHeight
));
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
m_acMergeTmpBuffer
[
ui
].
create
(
chromaFormat
,
Area
(
0
,
0
,
uiMaxWidth
,
uiMaxHeight
));
#endif
}
const
unsigned
maxNumTriangleCand
=
encCfg
->
getMaxNumTriangleCand
();
for
(
unsigned
i
=
0
;
i
<
maxNumTriangleCand
;
i
++
)
...
...
@@ -218,6 +221,9 @@ void EncCu::destroy()
for
(
unsigned
ui
=
0
;
ui
<
MRG_MAX_NUM_CANDS
;
ui
++
)
{
m_acRealMergeBuffer
[
ui
].
destroy
();
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
m_acMergeTmpBuffer
[
ui
].
destroy
();
#endif
}
for
(
unsigned
ui
=
0
;
ui
<
TRIANGLE_MAX_NUM_CANDS
;
ui
++
)
{
...
...
@@ -1881,6 +1887,9 @@ void EncCu::xCheckRDCostMerge2Nx2N( CodingStructure *&tempCS, CodingStructure *&
bool
bestIsSkip
=
false
;
bool
bestIsMMVDSkip
=
true
;
PelUnitBuf
acMergeBuffer
[
MRG_MAX_NUM_CANDS
];
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
PelUnitBuf
acMergeTmpBuffer
[
MRG_MAX_NUM_CANDS
];
#endif
PelUnitBuf
acMergeRealBuffer
[
MMVD_MRG_MAX_RD_BUF_NUM
];
PelUnitBuf
*
acMergeTempBuffer
[
MMVD_MRG_MAX_RD_NUM
];
PelUnitBuf
*
singleMergeTempBuffer
;
...
...
@@ -2002,7 +2011,12 @@ void EncCu::xCheckRDCostMerge2Nx2N( CodingStructure *&tempCS, CodingStructure *&
PU
::
spanMotionInfo
(
pu
,
mergeCtx
);
pu
.
mvRefine
=
true
;
distParam
.
cur
=
singleMergeTempBuffer
->
Y
();
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
acMergeTmpBuffer
[
uiMergeCand
]
=
m_acMergeTmpBuffer
[
uiMergeCand
].
getBuf
(
localUnitArea
);
m_pcInterSearch
->
motionCompensation
(
pu
,
*
singleMergeTempBuffer
,
REF_PIC_LIST_X
,
true
,
true
,
&
(
acMergeTmpBuffer
[
uiMergeCand
]));
#else
m_pcInterSearch
->
motionCompensation
(
pu
,
*
singleMergeTempBuffer
);
#endif
acMergeBuffer
[
uiMergeCand
]
=
m_acRealMergeBuffer
[
uiMergeCand
].
getBuf
(
localUnitArea
);
acMergeBuffer
[
uiMergeCand
].
copyFrom
(
*
singleMergeTempBuffer
);
pu
.
mvRefine
=
false
;
...
...
@@ -2066,7 +2080,11 @@ void EncCu::xCheckRDCostMerge2Nx2N( CodingStructure *&tempCS, CodingStructure *&
for
(
uint32_t
mergeCnt
=
0
;
mergeCnt
<
std
::
min
(
std
::
min
(
NUM_MRG_SATD_CAND
,
(
const
int
)
mergeCtx
.
numValidMergeCand
),
4
);
mergeCnt
++
)
{
uint32_t
mergeCand
=
MHIntraMergeCand
[
mergeCnt
];
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
acMergeTmpBuffer
[
mergeCand
]
=
m_acMergeTmpBuffer
[
mergeCand
].
getBuf
(
localUnitArea
);
#else
acMergeBuffer
[
mergeCand
]
=
m_acRealMergeBuffer
[
mergeCand
].
getBuf
(
localUnitArea
);
#endif
// estimate merge bits
mergeCtx
.
setMergeInfo
(
pu
,
mergeCand
);
...
...
@@ -2081,7 +2099,11 @@ void EncCu::xCheckRDCostMerge2Nx2N( CodingStructure *&tempCS, CodingStructure *&
m_pcIntraSearch
->
predIntraAng
(
COMPONENT_Y
,
pu
.
cs
->
getPredBuf
(
pu
).
Y
(),
pu
);
m_pcIntraSearch
->
switchBuffer
(
pu
,
COMPONENT_Y
,
pu
.
cs
->
getPredBuf
(
pu
).
Y
(),
m_pcIntraSearch
->
getPredictorPtr2
(
COMPONENT_Y
,
intraCnt
));
}
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
pu
.
cs
->
getPredBuf
(
pu
).
copyFrom
(
acMergeTmpBuffer
[
mergeCand
]);
#else
pu
.
cs
->
getPredBuf
(
pu
).
copyFrom
(
acMergeBuffer
[
mergeCand
]);
#endif
if
(
pu
.
cs
->
slice
->
getLmcsEnabledFlag
()
&&
m_pcReshape
->
getCTUFlag
())
{
pu
.
cs
->
getPredBuf
(
pu
).
Y
().
rspSignal
(
m_pcReshape
->
getFwdLUT
());
...
...
@@ -2304,17 +2326,29 @@ void EncCu::xCheckRDCostMerge2Nx2N( CodingStructure *&tempCS, CodingStructure *&
{
uint32_t
bufIdx
=
0
;
PelBuf
tmpBuf
=
tempCS
->
getPredBuf
(
pu
).
Y
();
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
tmpBuf
.
copyFrom
(
acMergeTmpBuffer
[
uiMergeCand
].
Y
());
#else
tmpBuf
.
copyFrom
(
acMergeBuffer
[
uiMergeCand
].
Y
());
#endif
if
(
pu
.
cs
->
slice
->
getLmcsEnabledFlag
()
&&
m_pcReshape
->
getCTUFlag
())
{
tmpBuf
.
rspSignal
(
m_pcReshape
->
getFwdLUT
());
}
m_pcIntraSearch
->
geneWeightedPred
(
COMPONENT_Y
,
tmpBuf
,
pu
,
m_pcIntraSearch
->
getPredictorPtr2
(
COMPONENT_Y
,
bufIdx
));
tmpBuf
=
tempCS
->
getPredBuf
(
pu
).
Cb
();
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
tmpBuf
.
copyFrom
(
acMergeTmpBuffer
[
uiMergeCand
].
Cb
());
#else
tmpBuf
.
copyFrom
(
acMergeBuffer
[
uiMergeCand
].
Cb
());
#endif
m_pcIntraSearch
->
geneWeightedPred
(
COMPONENT_Cb
,
tmpBuf
,
pu
,
m_pcIntraSearch
->
getPredictorPtr2
(
COMPONENT_Cb
,
bufIdx
));
tmpBuf
=
tempCS
->
getPredBuf
(
pu
).
Cr
();
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
tmpBuf
.
copyFrom
(
acMergeTmpBuffer
[
uiMergeCand
].
Cr
());
#else
tmpBuf
.
copyFrom
(
acMergeBuffer
[
uiMergeCand
].
Cr
());
#endif
m_pcIntraSearch
->
geneWeightedPred
(
COMPONENT_Cr
,
tmpBuf
,
pu
,
m_pcIntraSearch
->
getPredictorPtr2
(
COMPONENT_Cr
,
bufIdx
));
}
else
...
...
source/Lib/EncoderLib/EncCu.h
View file @
5877340b
...
...
@@ -123,6 +123,9 @@ private:
PelStorage
m_acMergeBuffer
[
MMVD_MRG_MAX_RD_BUF_NUM
];
PelStorage
m_acRealMergeBuffer
[
MRG_MAX_NUM_CANDS
];
#if JVET_O0108_DIS_DMVR_BDOF_CIIP
PelStorage
m_acMergeTmpBuffer
[
MRG_MAX_NUM_CANDS
];
#endif
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
)];
...
...
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