Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Remy Foray
VVCSoftware_VTM
Commits
d76680f6
Commit
d76680f6
authored
Apr 02, 2019
by
Xin Zhao
Browse files
Integration of JVET-N0363: Modified cost criterion for intra encoder search
parent
dd8158ac
Changes
2
Hide whitespace changes
Inline
Side-by-side
source/Lib/CommonLib/TypeDef.h
View file @
d76680f6
...
...
@@ -52,6 +52,8 @@
#define JVET_N0449_MMVD_SIMP 1 // Configurable number of mmvd distance entries used
#define JVET_N0363_INTRA_COST_MOD 1 // Modified cost criterion for intra encoder search
#define JVET_N0137_DUALTREE_CHROMA_SIZE 1
#define JVET_N0335_N0085_MV_ROUNDING 1 // MV rounding unification
...
...
source/Lib/EncoderLib/IntraSearch.cpp
View file @
d76680f6
...
...
@@ -393,9 +393,14 @@ void IntraSearch::estIntraPredLumaQT( CodingUnit &cu, Partitioner &partitioner,
PelBuf
piOrg
=
cs
.
getOrgBuf
(
area
);
PelBuf
piPred
=
cs
.
getPredBuf
(
area
);
#if JVET_N0363_INTRA_COST_MOD
DistParam
distParamSad
;
DistParam
distParamHad
;
#else
DistParam
distParam
;
const
bool
bUseHadamard
=
cu
.
transQuantBypass
==
0
;
#endif
if
(
cu
.
slice
->
getReshapeInfo
().
getUseSliceReshaper
()
&&
m_pcReshape
->
getCTUFlag
())
{
...
...
@@ -403,12 +408,29 @@ void IntraSearch::estIntraPredLumaQT( CodingUnit &cu, Partitioner &partitioner,
PelBuf
tmpOrg
=
m_tmpStorageLCU
.
getBuf
(
tmpArea
);
tmpOrg
.
copyFrom
(
piOrg
);
tmpOrg
.
rspSignal
(
m_pcReshape
->
getFwdLUT
());
#if JVET_N0363_INTRA_COST_MOD
m_pcRdCost
->
setDistParam
(
distParamSad
,
tmpOrg
,
piPred
,
sps
.
getBitDepth
(
CHANNEL_TYPE_LUMA
),
COMPONENT_Y
,
false
);
// Use SAD cost
m_pcRdCost
->
setDistParam
(
distParamHad
,
tmpOrg
,
piPred
,
sps
.
getBitDepth
(
CHANNEL_TYPE_LUMA
),
COMPONENT_Y
,
true
);
// Use HAD (SATD) cost
#else
m_pcRdCost
->
setDistParam
(
distParam
,
tmpOrg
,
piPred
,
sps
.
getBitDepth
(
CHANNEL_TYPE_LUMA
),
COMPONENT_Y
,
bUseHadamard
);
#endif
}
else
#if JVET_N0363_INTRA_COST_MOD
{
m_pcRdCost
->
setDistParam
(
distParamSad
,
piOrg
,
piPred
,
sps
.
getBitDepth
(
CHANNEL_TYPE_LUMA
),
COMPONENT_Y
,
false
);
// Use SAD cost
m_pcRdCost
->
setDistParam
(
distParamHad
,
piOrg
,
piPred
,
sps
.
getBitDepth
(
CHANNEL_TYPE_LUMA
),
COMPONENT_Y
,
true
);
// Use HAD (SATD) cost
}
#else
m_pcRdCost
->
setDistParam
(
distParam
,
piOrg
,
piPred
,
sps
.
getBitDepth
(
CHANNEL_TYPE_LUMA
),
COMPONENT_Y
,
bUseHadamard
);
#endif
#if JVET_N0363_INTRA_COST_MOD
distParamSad
.
applyWeight
=
false
;
distParamHad
.
applyWeight
=
false
;
#else
distParam
.
applyWeight
=
false
;
#endif
bool
bSatdChecked
[
NUM_INTRA_MODE
];
memset
(
bSatdChecked
,
0
,
sizeof
(
bSatdChecked
)
);
...
...
@@ -437,8 +459,14 @@ void IntraSearch::estIntraPredLumaQT( CodingUnit &cu, Partitioner &partitioner,
{
predIntraAng
(
COMPONENT_Y
,
piPred
,
pu
,
IntraPrediction
::
useFilteredIntraRefSamples
(
COMPONENT_Y
,
pu
,
true
,
pu
)
);
}
#if JVET_N0363_INTRA_COST_MOD
// Use the min between SAD and HAD as the cost criterion
// SAD is scaled by 2 to align with the scaling of HAD
uiSad
+=
std
::
min
(
distParamSad
.
distFunc
(
distParamSad
)
*
2
,
distParamHad
.
distFunc
(
distParamHad
));
#else
// use Hadamard transform here
uiSad
+=
distParam
.
distFunc
(
distParam
);
#endif
// NB xFracModeBitsIntra will not affect the mode for chroma that may have already been pre-estimated.
m_CABACEstimator
->
getCtx
()
=
SubCtx
(
Ctx
::
IntraLumaMpmFlag
,
ctxStartIntraMode
);
...
...
@@ -491,8 +519,15 @@ void IntraSearch::estIntraPredLumaQT( CodingUnit &cu, Partitioner &partitioner,
predIntraAng
(
COMPONENT_Y
,
piPred
,
pu
,
IntraPrediction
::
useFilteredIntraRefSamples
(
COMPONENT_Y
,
pu
,
true
,
pu
));
}
#if JVET_N0363_INTRA_COST_MOD
// Use the min between SAD and SATD as the cost criterion
// SAD is scaled by 2 to align with the scaling of HAD
Distortion
sad
=
std
::
min
(
distParamSad
.
distFunc
(
distParamSad
)
*
2
,
distParamHad
.
distFunc
(
distParamHad
));
#else
// use Hadamard transform here
Distortion
sad
=
distParam
.
distFunc
(
distParam
);
#endif
// NB xFracModeBitsIntra will not affect the mode for chroma that may have already been pre-estimated.
m_CABACEstimator
->
getCtx
()
=
SubCtx
(
Ctx
::
IntraLumaMpmFlag
,
ctxStartIntraMode
);
...
...
@@ -549,8 +584,14 @@ void IntraSearch::estIntraPredLumaQT( CodingUnit &cu, Partitioner &partitioner,
predIntraAng
(
COMPONENT_Y
,
piPred
,
pu
,
IntraPrediction
::
useFilteredIntraRefSamples
(
COMPONENT_Y
,
pu
,
true
,
pu
));
}
#if JVET_N0363_INTRA_COST_MOD
// Use the min between SAD and SATD as the cost criterion
// SAD is scaled by 2 to align with the scaling of HAD
Distortion
sad
=
std
::
min
(
distParamSad
.
distFunc
(
distParamSad
)
*
2
,
distParamHad
.
distFunc
(
distParamHad
));
#else
// use Hadamard transform here
Distortion
sad
=
distParam
.
distFunc
(
distParam
);
#endif
// NB xFracModeBitsIntra will not affect the mode for chroma that may have already been pre-estimated.
m_CABACEstimator
->
getCtx
()
=
SubCtx
(
Ctx
::
IntraLumaMpmFlag
,
ctxStartIntraMode
);
...
...
Write
Preview
Supports
Markdown
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