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
16
Merge Requests
16
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
fd177314
Commit
fd177314
authored
Jan 27, 2019
by
Hongbin Liu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
JVET-M0255: MMVD without Fractional Distances for SCC.
parent
02116053
Changes
19
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
141 additions
and
11 deletions
+141
-11
cfg/encoder_intra_vtm.cfg
cfg/encoder_intra_vtm.cfg
+1
-0
cfg/encoder_lowdelay_P_vtm.cfg
cfg/encoder_lowdelay_P_vtm.cfg
+1
-0
cfg/encoder_lowdelay_vtm.cfg
cfg/encoder_lowdelay_vtm.cfg
+1
-0
cfg/encoder_randomaccess_vtm.cfg
cfg/encoder_randomaccess_vtm.cfg
+1
-0
source/App/EncoderApp/EncApp.cpp
source/App/EncoderApp/EncApp.cpp
+3
-1
source/App/EncoderApp/EncAppCfg.cpp
source/App/EncoderApp/EncAppCfg.cpp
+6
-1
source/App/EncoderApp/EncAppCfg.h
source/App/EncoderApp/EncAppCfg.h
+3
-1
source/Lib/CommonLib/ContextModelling.cpp
source/Lib/CommonLib/ContextModelling.cpp
+8
-1
source/Lib/CommonLib/Slice.cpp
source/Lib/CommonLib/Slice.cpp
+12
-0
source/Lib/CommonLib/Slice.h
source/Lib/CommonLib/Slice.h
+14
-2
source/Lib/CommonLib/TypeDef.h
source/Lib/CommonLib/TypeDef.h
+1
-0
source/Lib/DecoderLib/VLCReader.cpp
source/Lib/DecoderLib/VLCReader.cpp
+10
-0
source/Lib/EncoderLib/EncCfg.h
source/Lib/EncoderLib/EncCfg.h
+7
-2
source/Lib/EncoderLib/EncCu.cpp
source/Lib/EncoderLib/EncCu.cpp
+6
-0
source/Lib/EncoderLib/EncCu.h
source/Lib/EncoderLib/EncCu.h
+4
-0
source/Lib/EncoderLib/EncLib.cpp
source/Lib/EncoderLib/EncLib.cpp
+3
-1
source/Lib/EncoderLib/EncSlice.cpp
source/Lib/EncoderLib/EncSlice.cpp
+48
-1
source/Lib/EncoderLib/EncSlice.h
source/Lib/EncoderLib/EncSlice.h
+3
-1
source/Lib/EncoderLib/VLCWriter.cpp
source/Lib/EncoderLib/VLCWriter.cpp
+9
-0
No files found.
cfg/encoder_intra_vtm.cfg
View file @
fd177314
...
...
@@ -112,6 +112,7 @@ DepQuant : 1
IMV : 2
ALF : 1
CPR : 0 # turned off in CTC
AllowDisFracMMVD : 1
# Fast tools
PBIntraFast : 1
...
...
cfg/encoder_lowdelay_P_vtm.cfg
View file @
fd177314
...
...
@@ -129,6 +129,7 @@ IMV : 2
ALF : 1
MHIntra : 1
CPR : 0 # turned off in CTC
AllowDisFracMMVD : 1
# Fast tools
PBIntraFast : 1
...
...
cfg/encoder_lowdelay_vtm.cfg
View file @
fd177314
...
...
@@ -132,6 +132,7 @@ GBiFast : 1
MHIntra : 1
Triangle : 1
CPR : 0 # turned off in CTC
AllowDisFracMMVD : 1
# Fast tools
PBIntraFast : 1
...
...
cfg/encoder_randomaccess_vtm.cfg
View file @
fd177314
...
...
@@ -147,6 +147,7 @@ BIO : 1
MHIntra : 1
Triangle : 1
CPR : 0 # turned off in CTC
AllowDisFracMMVD : 1
# Fast tools
PBIntraFast : 1
...
...
source/App/EncoderApp/EncApp.cpp
View file @
fd177314
...
...
@@ -257,7 +257,9 @@ void EncApp::xInitLibCfg()
#endif
m_cEncLib
.
setUseMHIntra
(
m_MHIntra
);
m_cEncLib
.
setUseTriangle
(
m_Triangle
);
#if JVET_M0255_FRACMMVD_SWITCH
m_cEncLib
.
setAllowDisFracMMVD
(
m_allowDisFracMMVD
);
#endif
m_cEncLib
.
setCPRMode
(
m_CPRMode
);
m_cEncLib
.
setCPRLocalSearchRangeX
(
m_CPRLocalSearchRangeX
);
m_cEncLib
.
setCPRLocalSearchRangeY
(
m_CPRLocalSearchRangeY
);
...
...
source/App/EncoderApp/EncAppCfg.cpp
View file @
fd177314
...
...
@@ -864,7 +864,9 @@ bool EncAppCfg::parseCfg( int argc, char* argv[] )
#endif
(
"MHIntra"
,
m_MHIntra
,
false
,
"Enable MHIntra mode"
)
(
"Triangle"
,
m_Triangle
,
false
,
"Enable triangular shape motion vector prediction (0:off, 1:on)"
)
#if JVET_M0255_FRACMMVD_SWITCH
(
"AllowDisFracMMVD"
,
m_allowDisFracMMVD
,
false
,
"Disable fractional MVD in MMVD mode adaptively"
)
#endif
(
"CPR"
,
m_CPRMode
,
0u
,
"CPRMode (0x1:enabled, 0x0:disabled) [default: disabled]"
)
(
"CPRLocalSearchRangeX"
,
m_CPRLocalSearchRangeX
,
128u
,
"Search range of CPR local search in x direction"
)
(
"CPRLocalSearchRangeY"
,
m_CPRLocalSearchRangeY
,
128u
,
"Search range of CPR local search in y direction"
)
...
...
@@ -3145,6 +3147,9 @@ void EncAppCfg::xPrintParameter()
#endif
msg
(
VERBOSE
,
"MHIntra:%d "
,
m_MHIntra
);
msg
(
VERBOSE
,
"Triangle:%d "
,
m_Triangle
);
#if JVET_M0255_FRACMMVD_SWITCH
msg
(
VERBOSE
,
"AllowDisFracMMVD:%d "
,
m_allowDisFracMMVD
);
#endif
}
msg
(
VERBOSE
,
"CPR:%d "
,
m_CPRMode
);
msg
(
VERBOSE
,
"WrapAround:%d "
,
m_wrapAround
);
...
...
source/App/EncoderApp/EncAppCfg.h
View file @
fd177314
...
...
@@ -237,7 +237,9 @@ protected:
bool
m_MHIntra
;
bool
m_Triangle
;
#if JVET_M0255_FRACMMVD_SWITCH
bool
m_allowDisFracMMVD
;
#endif
unsigned
m_CPRMode
;
unsigned
m_CPRLocalSearchRangeX
;
...
...
source/Lib/CommonLib/ContextModelling.cpp
View file @
fd177314
...
...
@@ -501,8 +501,15 @@ void MergeCtx::setMmvdMergeCandiInfo(PredictionUnit& pu, int candIdx)
tempIdx
=
tempIdx
-
fPosBaseIdx
*
(
MMVD_MAX_REFINE_NUM
);
fPosStep
=
tempIdx
/
4
;
fPosPosition
=
tempIdx
-
fPosStep
*
(
4
);
#if JVET_M0255_FRACMMVD_SWITCH
int
offset
=
refMvdCands
[
fPosStep
];
if
(
pu
.
cu
->
slice
->
getDisFracMMVD
()
)
{
offset
<<=
2
;
}
#else
const
int
offset
=
refMvdCands
[
fPosStep
];
#endif
const
int
refList0
=
mmvdBaseMv
[
fPosBaseIdx
][
0
].
refIdx
;
const
int
refList1
=
mmvdBaseMv
[
fPosBaseIdx
][
1
].
refIdx
;
...
...
source/Lib/CommonLib/Slice.cpp
View file @
fd177314
...
...
@@ -92,6 +92,9 @@ Slice::Slice()
,
m_colRefIdx
(
0
)
,
m_maxNumMergeCand
(
0
)
,
m_maxNumAffineMergeCand
(
0
)
#if JVET_M0255_FRACMMVD_SWITCH
,
m_disFracMMVD
(
false
)
#endif
,
m_uiTLayer
(
0
)
,
m_bTLayerSwitchingFlag
(
false
)
,
m_sliceMode
(
NO_SLICES
)
...
...
@@ -211,6 +214,9 @@ void Slice::initSlice()
m_bFinalized
=
false
;
#if JVET_M0255_FRACMMVD_SWITCH
m_disFracMMVD
=
false
;
#endif
m_substreamSizes
.
clear
();
m_cabacInitFlag
=
false
;
m_cabacWinUpdateMode
=
0
;
...
...
@@ -861,6 +867,9 @@ void Slice::copySliceInfo(Slice *pSrc, bool cpyAlmostAll)
m_enableTMVPFlag
=
pSrc
->
m_enableTMVPFlag
;
m_maxNumMergeCand
=
pSrc
->
m_maxNumMergeCand
;
m_maxNumAffineMergeCand
=
pSrc
->
m_maxNumAffineMergeCand
;
#if JVET_M0255_FRACMMVD_SWITCH
m_disFracMMVD
=
pSrc
->
m_disFracMMVD
;
#endif
if
(
cpyAlmostAll
)
m_encCABACTableIdx
=
pSrc
->
m_encCABACTableIdx
;
m_splitConsOverrideFlag
=
pSrc
->
m_splitConsOverrideFlag
;
m_uiMinQTSize
=
pSrc
->
m_uiMinQTSize
;
...
...
@@ -1767,6 +1776,9 @@ SPSNext::SPSNext( SPS& sps )
,
m_MTTEnabled
(
false
)
,
m_MHIntra
(
false
)
,
m_Triangle
(
false
)
#if JVET_M0255_FRACMMVD_SWITCH
,
allowDisFracMMVD
(
false
)
#endif
#if ENABLE_WPP_PARALLELISM
,
m_NextDQP
(
false
)
#endif
...
...
source/Lib/CommonLib/Slice.h
View file @
fd177314
...
...
@@ -820,6 +820,9 @@ private:
bool
m_MTTEnabled
;
//
bool
m_MHIntra
;
bool
m_Triangle
;
#if JVET_M0255_FRACMMVD_SWITCH
bool
allowDisFracMMVD
;
#endif
#if ENABLE_WPP_PARALLELISM
bool
m_NextDQP
;
#endif
...
...
@@ -916,6 +919,10 @@ public:
bool
getUseTriangle
()
const
{
return
m_Triangle
;
}
void
setCPRMode
(
unsigned
CPRMode
)
{
m_CPRMode
=
CPRMode
;
}
unsigned
getCPRMode
()
const
{
return
m_CPRMode
;
}
#if JVET_M0255_FRACMMVD_SWITCH
void
setAllowDisFracMMVD
(
bool
b
)
{
allowDisFracMMVD
=
b
;
}
bool
getAllowDisFracMMVD
()
const
{
return
allowDisFracMMVD
;
}
#endif
};
...
...
@@ -1602,7 +1609,9 @@ private:
uint32_t
m_colRefIdx
;
uint32_t
m_maxNumMergeCand
;
uint32_t
m_maxNumAffineMergeCand
;
#if JVET_M0255_FRACMMVD_SWITCH
bool
m_disFracMMVD
;
#endif
double
m_lambdas
[
MAX_NUM_COMPONENT
];
bool
m_abEqualRef
[
NUM_REF_PIC_LIST_01
][
MAX_NUM_REF
][
MAX_NUM_REF
];
...
...
@@ -1843,7 +1852,10 @@ public:
uint32_t
getMaxNumMergeCand
()
const
{
return
m_maxNumMergeCand
;
}
void
setMaxNumAffineMergeCand
(
uint32_t
val
)
{
m_maxNumAffineMergeCand
=
val
;
}
uint32_t
getMaxNumAffineMergeCand
()
const
{
return
m_maxNumAffineMergeCand
;
}
#if JVET_M0255_FRACMMVD_SWITCH
void
setDisFracMMVD
(
bool
val
)
{
m_disFracMMVD
=
val
;
}
bool
getDisFracMMVD
()
const
{
return
m_disFracMMVD
;
}
#endif
void
setNoOutputPriorPicsFlag
(
bool
val
)
{
m_noOutputPriorPicsFlag
=
val
;
}
bool
getNoOutputPriorPicsFlag
()
const
{
return
m_noOutputPriorPicsFlag
;
}
...
...
source/Lib/CommonLib/TypeDef.h
View file @
fd177314
...
...
@@ -64,6 +64,7 @@
#define JVET_M0464_UNI_MTS 1
#define JVET_M0068_M0171_MMVD_CLEANUP 1 // MMVD cleanup with 1) flip removal, 2) L1 zero vector fix, 3) bi-pred restriction after merge/MMVD
#define JVET_M0255_FRACMMVD_SWITCH 1 // disable fractional MVD in MMVD adaptively
#if JVET_M0464_UNI_MTS
typedef
std
::
pair
<
int
,
bool
>
TrMode
;
...
...
source/Lib/DecoderLib/VLCReader.cpp
View file @
fd177314
...
...
@@ -818,6 +818,9 @@ void HLSyntaxReader::parseSPSNext( SPSNext& spsNext, const bool usePCM )
}
READ_FLAG
(
symbol
,
"mtt_enabled_flag"
);
spsNext
.
setMTTMode
(
symbol
);
READ_FLAG
(
symbol
,
"mhintra_flag"
);
spsNext
.
setUseMHIntra
(
symbol
!=
0
);
#if JVET_M0255_FRACMMVD_SWITCH
READ_FLAG
(
symbol
,
"sps_fracmmvd_disabled_flag"
);
spsNext
.
setAllowDisFracMMVD
(
symbol
!=
0
);
#endif
READ_FLAG
(
symbol
,
"triangle_flag"
);
spsNext
.
setUseTriangle
(
symbol
!=
0
);
#if ENABLE_WPP_PARALLELISM
READ_FLAG
(
symbol
,
"next_dqp_enabled_flag"
);
spsNext
.
setUseNextDQP
(
symbol
!=
0
);
...
...
@@ -1767,6 +1770,13 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, ParameterSetManager *para
READ_UVLC
(
uiCode
,
"five_minus_max_num_affine_merge_cand"
);
pcSlice
->
setMaxNumAffineMergeCand
(
AFFINE_MRG_MAX_NUM_CANDS
-
uiCode
);
}
#if JVET_M0255_FRACMMVD_SWITCH
if
(
sps
->
getSpsNext
().
getAllowDisFracMMVD
()
)
{
READ_FLAG
(
uiCode
,
"tile_group_fracmmvd_disabled_flag"
);
pcSlice
->
setDisFracMMVD
(
uiCode
?
true
:
false
);
}
#endif
}
READ_SVLC
(
iCode
,
"slice_qp_delta"
);
...
...
source/Lib/EncoderLib/EncCfg.h
View file @
fd177314
...
...
@@ -238,7 +238,9 @@ protected:
bool
m_MHIntra
;
bool
m_Triangle
;
#if JVET_M0255_FRACMMVD_SWITCH
bool
m_allowDisFracMMVD
;
#endif
unsigned
m_CPRMode
;
unsigned
m_CPRLocalSearchRangeX
;
unsigned
m_CPRLocalSearchRangeY
;
...
...
@@ -754,7 +756,10 @@ public:
bool
getUseMHIntra
()
const
{
return
m_MHIntra
;
}
void
setUseTriangle
(
bool
b
)
{
m_Triangle
=
b
;
}
bool
getUseTriangle
()
const
{
return
m_Triangle
;
}
#if JVET_M0255_FRACMMVD_SWITCH
void
setAllowDisFracMMVD
(
bool
b
)
{
m_allowDisFracMMVD
=
b
;
}
bool
getAllowDisFracMMVD
()
const
{
return
m_allowDisFracMMVD
;
}
#endif
void
setCPRMode
(
unsigned
n
)
{
m_CPRMode
=
n
;
}
unsigned
getCPRMode
()
const
{
return
m_CPRMode
;
}
...
...
source/Lib/EncoderLib/EncCu.cpp
View file @
fd177314
...
...
@@ -280,7 +280,11 @@ void EncCu::init( EncLib* pcEncLib, const SPS& sps PARL_PARAM( const int tId ) )
::
memset
(
m_subMergeBlkNum
,
0
,
sizeof
(
m_subMergeBlkNum
));
m_prevPOC
=
MAX_UINT
;
#if JVET_M0255_FRACMMVD_SWITCH
if
(
(
m_pcEncCfg
->
getCPRHashSearch
()
&&
m_pcEncCfg
->
getCPRMode
()
)
||
m_pcEncCfg
->
getAllowDisFracMMVD
()
)
#else
if
(
m_pcEncCfg
->
getCPRHashSearch
()
&&
m_pcEncCfg
->
getCPRMode
())
#endif
{
m_cprHashMap
.
init
(
m_pcEncCfg
->
getSourceWidth
(),
m_pcEncCfg
->
getSourceHeight
());
}
...
...
@@ -292,10 +296,12 @@ void EncCu::init( EncLib* pcEncLib, const SPS& sps PARL_PARAM( const int tId ) )
void
EncCu
::
compressCtu
(
CodingStructure
&
cs
,
const
UnitArea
&
area
,
const
unsigned
ctuRsAddr
,
const
int
prevQP
[],
const
int
currQP
[]
)
{
#if !JVET_M0255_FRACMMVD_SWITCH
if
(
m_pcEncCfg
->
getCPRHashSearch
()
&&
ctuRsAddr
==
0
&&
cs
.
slice
->
getSPS
()
->
getSpsNext
().
getCPRMode
())
{
m_cprHashMap
.
rebuildPicHashMap
(
cs
.
picture
->
getOrigBuf
());
}
#endif
m_modeCtrl
->
initCTUEncoding
(
*
cs
.
slice
);
#if ENABLE_SPLIT_PARALLELISM
...
...
source/Lib/EncoderLib/EncCu.h
View file @
fd177314
...
...
@@ -151,6 +151,10 @@ public:
void
setMergeBestSATDCost
(
double
cost
)
{
m_mergeBestSATDCost
=
cost
;
}
double
getMergeBestSATDCost
()
{
return
m_mergeBestSATDCost
;
}
#if JVET_M0255_FRACMMVD_SWITCH
CprHashMap
&
getCprHashMap
()
{
return
m_cprHashMap
;
}
EncCfg
*
getEncCfg
()
const
{
return
m_pcEncCfg
;
}
#endif
~
EncCu
();
...
...
source/Lib/EncoderLib/EncLib.cpp
View file @
fd177314
...
...
@@ -891,7 +891,9 @@ void EncLib::xInitSPS(SPS &sps)
sps
.
getSpsNext
().
setUseMHIntra
(
m_MHIntra
);
sps
.
getSpsNext
().
setUseTriangle
(
m_Triangle
);
#if JVET_M0255_FRACMMVD_SWITCH
sps
.
getSpsNext
().
setAllowDisFracMMVD
(
m_allowDisFracMMVD
);
#endif
sps
.
getSpsNext
().
setCPRMode
(
m_CPRMode
);
sps
.
setWrapAroundEnabledFlag
(
m_wrapAround
);
...
...
source/Lib/EncoderLib/EncSlice.cpp
View file @
fd177314
...
...
@@ -1387,8 +1387,48 @@ void EncSlice::compressSlice( Picture* pcPic, const bool bCompressEntireSlice, c
}
#if JVET_M0255_FRACMMVD_SWITCH
void
EncSlice
::
checkDisFracMmvd
(
Picture
*
pcPic
,
uint32_t
startCtuTsAddr
,
uint32_t
boundingCtuTsAddr
)
{
CodingStructure
&
cs
=
*
pcPic
->
cs
;
Slice
*
pcSlice
=
cs
.
slice
;
const
PreCalcValues
&
pcv
=
*
cs
.
pcv
;
const
uint32_t
widthInCtus
=
pcv
.
widthInCtus
;
#if HEVC_TILES_WPP
const
TileMap
&
tileMap
=
*
pcPic
->
tileMap
;
#endif
const
uint32_t
hashThreshold
=
20
;
uint32_t
totalCtu
=
0
;
uint32_t
hashRatio
=
0
;
if
(
!
pcSlice
->
getSPS
()
->
getSpsNext
().
getAllowDisFracMMVD
()
)
{
return
;
}
for
(
uint32_t
ctuTsAddr
=
startCtuTsAddr
;
ctuTsAddr
<
boundingCtuTsAddr
;
ctuTsAddr
++
)
{
#if HEVC_TILES_WPP
const
uint32_t
ctuRsAddr
=
tileMap
.
getCtuTsToRsAddrMap
(
ctuTsAddr
);
#else
const
uint32_t
ctuRsAddr
=
ctuTsAddr
;
#endif
const
uint32_t
ctuXPosInCtus
=
ctuRsAddr
%
widthInCtus
;
const
uint32_t
ctuYPosInCtus
=
ctuRsAddr
/
widthInCtus
;
const
Position
pos
(
ctuXPosInCtus
*
pcv
.
maxCUWidth
,
ctuYPosInCtus
*
pcv
.
maxCUHeight
);
const
UnitArea
ctuArea
(
cs
.
area
.
chromaFormat
,
Area
(
pos
.
x
,
pos
.
y
,
pcv
.
maxCUWidth
,
pcv
.
maxCUHeight
)
);
hashRatio
+=
m_pcCuEncoder
->
getCprHashMap
().
getHashHitRatio
(
ctuArea
.
Y
()
);
totalCtu
++
;
}
if
(
hashRatio
>
totalCtu
*
hashThreshold
)
{
pcSlice
->
setDisFracMMVD
(
true
);
}
}
#endif
void
EncSlice
::
encodeCtus
(
Picture
*
pcPic
,
const
bool
bCompressEntireSlice
,
const
bool
bFastDeltaQP
,
uint32_t
startCtuTsAddr
,
uint32_t
boundingCtuTsAddr
,
EncLib
*
pEncLib
)
{
...
...
@@ -1439,7 +1479,14 @@ void EncSlice::encodeCtus( Picture* pcPic, const bool bCompressEntireSlice, cons
#if HEVC_DEPENDENT_SLICES
}
#endif
#if JVET_M0255_FRACMMVD_SWITCH
if
(
pcSlice
->
getSPS
()
->
getSpsNext
().
getAllowDisFracMMVD
()
||
(
pcSlice
->
getSPS
()
->
getSpsNext
().
getCPRMode
()
&&
m_pcCuEncoder
->
getEncCfg
()
->
getCPRHashSearch
()
)
)
{
m_pcCuEncoder
->
getCprHashMap
().
rebuildPicHashMap
(
cs
.
picture
->
getOrigBuf
()
);
}
checkDisFracMmvd
(
pcPic
,
startCtuTsAddr
,
boundingCtuTsAddr
);
#endif
// for every CTU in the slice segment (may terminate sooner if there is a byte limit on the slice-segment)
for
(
uint32_t
ctuTsAddr
=
startCtuTsAddr
;
ctuTsAddr
<
boundingCtuTsAddr
;
ctuTsAddr
++
)
{
...
...
source/Lib/EncoderLib/EncSlice.h
View file @
fd177314
...
...
@@ -146,7 +146,9 @@ public:
static
#endif
void
encodeCtus
(
Picture
*
pcPic
,
const
bool
bCompressEntireSlice
,
const
bool
bFastDeltaQP
,
uint32_t
startCtuTsAddr
,
uint32_t
boundingCtuTsAddr
,
EncLib
*
pcEncLib
);
#if JVET_M0255_FRACMMVD_SWITCH
void
checkDisFracMmvd
(
Picture
*
pcPic
,
uint32_t
startCtuTsAddr
,
uint32_t
boundingCtuTsAddr
);
#endif
// misc. functions
void
setSearchRange
(
Slice
*
pcSlice
);
///< set ME range adaptively
...
...
source/Lib/EncoderLib/VLCWriter.cpp
View file @
fd177314
...
...
@@ -559,6 +559,9 @@ void HLSWriter::codeSPSNext( const SPSNext& spsNext, const bool usePCM )
WRITE_FLAG
(
spsNext
.
getMTTEnabled
()
?
1
:
0
,
"mtt_enabled_flag"
);
WRITE_FLAG
(
spsNext
.
getUseMHIntra
()
?
1
:
0
,
"mhintra_flag"
);
#if JVET_M0255_FRACMMVD_SWITCH
WRITE_FLAG
(
spsNext
.
getAllowDisFracMMVD
()
?
1
:
0
,
"sps_fracmmvd_disabled_flag"
);
#endif
WRITE_FLAG
(
spsNext
.
getUseTriangle
()
?
1
:
0
,
"triangle_flag"
);
#if ENABLE_WPP_PARALLELISM
WRITE_FLAG
(
spsNext
.
getUseNextDQP
(),
"next_dqp_enabled_flag"
);
...
...
@@ -1285,6 +1288,12 @@ void HLSWriter::codeSliceHeader ( Slice* pcSlice )
CHECK
(
pcSlice
->
getMaxNumAffineMergeCand
()
>
AFFINE_MRG_MAX_NUM_CANDS
,
"More affine merge candidates signalled than supported"
);
WRITE_UVLC
(
AFFINE_MRG_MAX_NUM_CANDS
-
pcSlice
->
getMaxNumAffineMergeCand
(),
"five_minus_max_num_affine_merge_cand"
);
}
#if JVET_M0255_FRACMMVD_SWITCH
if
(
pcSlice
->
getSPS
()
->
getSpsNext
().
getAllowDisFracMMVD
()
)
{
WRITE_FLAG
(
pcSlice
->
getDisFracMMVD
(),
"tile_group_fracmmvd_disabled_flag"
);
}
#endif
}
int
iCode
=
pcSlice
->
getSliceQp
()
-
(
pcSlice
->
getPPS
()
->
getPicInitQPMinus26
()
+
26
);
WRITE_SVLC
(
iCode
,
"slice_qp_delta"
);
...
...
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