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
14
Merge Requests
14
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
49d3fb45
Commit
49d3fb45
authored
Apr 02, 2019
by
Biao Wang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
JVET-N0185:Unified MPM List for Intra Mode Coding
parent
b6e0728a
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
86 additions
and
0 deletions
+86
-0
source/Lib/CommonLib/Contexts.cpp
source/Lib/CommonLib/Contexts.cpp
+11
-0
source/Lib/CommonLib/Contexts.h
source/Lib/CommonLib/Contexts.h
+3
-0
source/Lib/CommonLib/TypeDef.h
source/Lib/CommonLib/TypeDef.h
+1
-0
source/Lib/CommonLib/UnitTools.cpp
source/Lib/CommonLib/UnitTools.cpp
+43
-0
source/Lib/DecoderLib/CABACReader.cpp
source/Lib/DecoderLib/CABACReader.cpp
+8
-0
source/Lib/EncoderLib/CABACWriter.cpp
source/Lib/EncoderLib/CABACWriter.cpp
+12
-0
source/Lib/EncoderLib/IntraSearch.cpp
source/Lib/EncoderLib/IntraSearch.cpp
+8
-0
No files found.
source/Lib/CommonLib/Contexts.cpp
View file @
49d3fb45
...
...
@@ -310,6 +310,17 @@ const CtxSet ContextSetCfg::IntraLumaMpmFlag = ContextSetCfg::addCtxSet
{
6
,
},
});
#if JVET_N0185_UNIFIED_MPM
const
CtxSet
ContextSetCfg
::
HarmonizedMPMIdx
=
ContextSetCfg
::
addCtxSet
({
{
154
,
154
,
},
{
154
,
154
,
},
{
154
,
154
,
},
{
6
,
6
,
},
});
#endif
const
CtxSet
ContextSetCfg
::
IntraChromaPredMode
=
ContextSetCfg
::
addCtxSet
({
{
137
,
139
,
140
,},
...
...
source/Lib/CommonLib/Contexts.h
View file @
49d3fb45
...
...
@@ -206,6 +206,9 @@ public:
static
const
CtxSet
PredMode
;
static
const
CtxSet
MultiRefLineIdx
;
static
const
CtxSet
IntraLumaMpmFlag
;
#if JVET_N0185_UNIFIED_MPM
static
const
CtxSet
HarmonizedMPMIdx
;
#endif
static
const
CtxSet
IntraChromaPredMode
;
static
const
CtxSet
DeltaQP
;
static
const
CtxSet
InterDir
;
...
...
source/Lib/CommonLib/TypeDef.h
View file @
49d3fb45
...
...
@@ -52,6 +52,7 @@
#define JVET_N0477_LMCS_CLEANUP 1
#define JVET_N0220_LMCS_SIMPLIFICATION 1
#define JVET_N0185_UNIFIED_MPM 1
#define JCTVC_Y0038_PARAMS 1
...
...
source/Lib/CommonLib/UnitTools.cpp
View file @
49d3fb45
...
...
@@ -459,9 +459,11 @@ cTUTraverser CU::traverseTUs( const CodingUnit& cu )
int
PU
::
getIntraMPMs
(
const
PredictionUnit
&
pu
,
unsigned
*
mpm
,
const
ChannelType
&
channelType
/*= CHANNEL_TYPE_LUMA*/
)
{
const
int
numMPMs
=
NUM_MOST_PROBABLE_MODES
;
#if !JVET_N0185_UNIFIED_MPM
const
int
extendRefLine
=
(
channelType
==
CHANNEL_TYPE_LUMA
)
?
pu
.
multiRefIdx
:
0
;
const
ISPType
ispType
=
isLuma
(
channelType
)
?
ISPType
(
pu
.
cu
->
ispMode
)
:
NOT_INTRA_SUBPARTITIONS
;
const
bool
isHorSplit
=
ispType
==
HOR_INTRA_SUBPARTITIONS
;
#endif
{
int
numCand
=
-
1
;
int
leftIntraDir
=
PLANAR_IDX
,
aboveIntraDir
=
PLANAR_IDX
;
...
...
@@ -489,6 +491,7 @@ int PU::getIntraMPMs( const PredictionUnit &pu, unsigned* mpm, const ChannelType
const
int
offset
=
(
int
)
NUM_LUMA_MODE
-
6
;
const
int
mod
=
offset
+
3
;
#if !JVET_N0185_UNIFIED_MPM
if
(
extendRefLine
)
{
int
modeIdx
=
0
;
...
...
@@ -665,9 +668,15 @@ int PU::getIntraMPMs( const PredictionUnit &pu, unsigned* mpm, const ChannelType
}
}
else
#endif
{
#if JVET_N0185_UNIFIED_MPM
mpm
[
0
]
=
PLANAR_IDX
;
mpm
[
1
]
=
DC_IDX
;
#else
mpm
[
0
]
=
leftIntraDir
;
mpm
[
1
]
=
(
mpm
[
0
]
==
PLANAR_IDX
)
?
DC_IDX
:
PLANAR_IDX
;
#endif
mpm
[
2
]
=
VER_IDX
;
mpm
[
3
]
=
HOR_IDX
;
mpm
[
4
]
=
VER_IDX
-
4
;
...
...
@@ -678,26 +687,53 @@ int PU::getIntraMPMs( const PredictionUnit &pu, unsigned* mpm, const ChannelType
numCand
=
1
;
if
(
leftIntraDir
>
DC_IDX
)
{
#if JVET_N0185_UNIFIED_MPM
mpm
[
0
]
=
PLANAR_IDX
;
mpm
[
1
]
=
leftIntraDir
;
mpm
[
2
]
=
((
leftIntraDir
+
offset
)
%
mod
)
+
2
;
mpm
[
3
]
=
((
leftIntraDir
-
1
)
%
mod
)
+
2
;
mpm
[
4
]
=
DC_IDX
;
mpm
[
5
]
=
((
leftIntraDir
+
offset
-
1
)
%
mod
)
+
2
;
#else
mpm
[
0
]
=
leftIntraDir
;
mpm
[
1
]
=
PLANAR_IDX
;
mpm
[
2
]
=
DC_IDX
;
mpm
[
3
]
=
((
leftIntraDir
+
offset
)
%
mod
)
+
2
;
mpm
[
4
]
=
((
leftIntraDir
-
1
)
%
mod
)
+
2
;
mpm
[
5
]
=
((
leftIntraDir
+
offset
-
1
)
%
mod
)
+
2
;
#endif
}
}
else
//L!=A
{
numCand
=
2
;
#if !JVET_N0185_UNIFIED_MPM
mpm
[
0
]
=
leftIntraDir
;
mpm
[
1
]
=
aboveIntraDir
;
#endif
#if JVET_N0185_UNIFIED_MPM
int
maxCandModeIdx
=
mpm
[
0
]
>
mpm
[
1
]
?
0
:
1
;
#else
bool
maxCandModeIdx
=
mpm
[
0
]
>
mpm
[
1
]
?
0
:
1
;
#endif
if
((
leftIntraDir
>
DC_IDX
)
&&
(
aboveIntraDir
>
DC_IDX
))
{
#if JVET_N0185_UNIFIED_MPM
mpm
[
0
]
=
PLANAR_IDX
;
mpm
[
1
]
=
leftIntraDir
;
mpm
[
2
]
=
aboveIntraDir
;
maxCandModeIdx
=
mpm
[
1
]
>
mpm
[
2
]
?
1
:
2
;
int
minCandModeIdx
=
mpm
[
1
]
>
mpm
[
2
]
?
2
:
1
;
#else
mpm
[
2
]
=
PLANAR_IDX
;
#endif
mpm
[
3
]
=
DC_IDX
;
#if JVET_N0185_UNIFIED_MPM
if
((
mpm
[
maxCandModeIdx
]
-
mpm
[
minCandModeIdx
]
<
63
)
&&
(
mpm
[
maxCandModeIdx
]
-
mpm
[
minCandModeIdx
]
>
1
))
#else
if
((
mpm
[
maxCandModeIdx
]
-
mpm
[
!
maxCandModeIdx
]
<
63
)
&&
(
mpm
[
maxCandModeIdx
]
-
mpm
[
!
maxCandModeIdx
]
>
1
))
#endif
{
mpm
[
4
]
=
((
mpm
[
maxCandModeIdx
]
+
offset
)
%
mod
)
+
2
;
mpm
[
5
]
=
((
mpm
[
maxCandModeIdx
]
-
1
)
%
mod
)
+
2
;
...
...
@@ -710,7 +746,14 @@ int PU::getIntraMPMs( const PredictionUnit &pu, unsigned* mpm, const ChannelType
}
else
if
(
leftIntraDir
+
aboveIntraDir
>=
2
)
{
#if JVET_N0185_UNIFIED_MPM
mpm
[
0
]
=
PLANAR_IDX
;
mpm
[
1
]
=
(
leftIntraDir
<
aboveIntraDir
)
?
aboveIntraDir
:
leftIntraDir
;
maxCandModeIdx
=
1
;
mpm
[
2
]
=
DC_IDX
;
#else
mpm
[
2
]
=
(
mpm
[
!
maxCandModeIdx
]
==
PLANAR_IDX
)
?
DC_IDX
:
PLANAR_IDX
;
#endif
mpm
[
3
]
=
((
mpm
[
maxCandModeIdx
]
+
offset
)
%
mod
)
+
2
;
mpm
[
4
]
=
((
mpm
[
maxCandModeIdx
]
-
1
)
%
mod
)
+
2
;
mpm
[
5
]
=
((
mpm
[
maxCandModeIdx
]
+
offset
-
1
)
%
mod
)
+
2
;
...
...
source/Lib/DecoderLib/CABACReader.cpp
View file @
49d3fb45
...
...
@@ -1107,7 +1107,15 @@ void CABACReader::intra_luma_pred_modes( CodingUnit &cu )
{
uint32_t
ipred_idx
=
0
;
{
#if JVET_N0185_UNIFIED_MPM
unsigned
ctx
=
(
pu
->
cu
->
ispMode
==
NOT_INTRA_SUBPARTITIONS
?
1
:
0
);
if
(
pu
->
multiRefIdx
==
0
)
ipred_idx
=
m_BinDecoder
.
decodeBin
(
Ctx
::
HarmonizedMPMIdx
(
ctx
));
else
ipred_idx
=
1
;
#else
ipred_idx
=
m_BinDecoder
.
decodeBinEP
();
#endif
if
(
ipred_idx
)
{
ipred_idx
+=
m_BinDecoder
.
decodeBinEP
();
...
...
source/Lib/EncoderLib/CABACWriter.cpp
View file @
49d3fb45
...
...
@@ -950,7 +950,13 @@ void CABACWriter::intra_luma_pred_modes( const CodingUnit& cu )
if
(
mpm_idx
<
numMPMs
)
{
{
#if JVET_N0185_UNIFIED_MPM
unsigned
ctx
=
(
pu
->
cu
->
ispMode
==
NOT_INTRA_SUBPARTITIONS
?
1
:
0
);
if
(
pu
->
multiRefIdx
==
0
)
m_BinEncoder
.
encodeBin
(
mpm_idx
>
0
,
Ctx
::
HarmonizedMPMIdx
(
ctx
));
#else
m_BinEncoder
.
encodeBinEP
(
mpm_idx
>
0
);
#endif
if
(
mpm_idx
)
{
m_BinEncoder
.
encodeBinEP
(
mpm_idx
>
1
);
...
...
@@ -1029,7 +1035,13 @@ void CABACWriter::intra_luma_pred_mode( const PredictionUnit& pu )
if
(
mpm_idx
<
numMPMs
)
{
{
#if JVET_N0185_UNIFIED_MPM
unsigned
ctx
=
(
pu
.
cu
->
ispMode
==
NOT_INTRA_SUBPARTITIONS
?
1
:
0
);
if
(
pu
.
multiRefIdx
==
0
)
m_BinEncoder
.
encodeBin
(
mpm_idx
>
0
,
Ctx
::
HarmonizedMPMIdx
(
ctx
)
);
#else
m_BinEncoder
.
encodeBinEP
(
mpm_idx
>
0
);
#endif
if
(
mpm_idx
)
{
m_BinEncoder
.
encodeBinEP
(
mpm_idx
>
1
);
...
...
source/Lib/EncoderLib/IntraSearch.cpp
View file @
49d3fb45
...
...
@@ -534,7 +534,11 @@ void IntraSearch::estIntraPredLumaQT( CodingUnit &cu, Partitioner &partitioner,
{
initIntraPatternChType
(
cu
,
pu
.
Y
(),
IntraPrediction
::
useFilteredIntraRefSamples
(
COMPONENT_Y
,
pu
,
false
,
pu
));
}
#if JVET_N0185_UNIFIED_MPM
for
(
int
x
=
1
;
x
<
numMPMs
;
x
++
)
#else
for
(
int
x
=
0
;
x
<
numMPMs
;
x
++
)
#endif
{
uint32_t
mode
=
multiRefMPM
[
x
];
{
...
...
@@ -798,7 +802,11 @@ void IntraSearch::estIntraPredLumaQT( CodingUnit &cu, Partitioner &partitioner,
{
multiRefIdx
=
extendRefList
[
uiMode
];
pu
.
multiRefIdx
=
multiRefIdx
;
#if !JVET_N0185_UNIFIED_MPM
CHECK
(
pu
.
multiRefIdx
&&
(
pu
.
intraDir
[
0
]
==
DC_IDX
||
pu
.
intraDir
[
0
]
==
PLANAR_IDX
),
"ERL"
);
#else
CHECK
(
pu
.
multiRefIdx
&&
(
pu
.
intraDir
[
0
]
==
PLANAR_IDX
),
"ERL"
);
#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