Skip to content
Snippets Groups Projects
Commit e5981799 authored by Karsten Suehring's avatar Karsten Suehring
Browse files

Merge branch 'JVET_AI0153_OMI_SEI' into 'master'

JVET-AI0153: Object Mask Information SEI

See merge request !2752
parents db81f6f7 e979f2b1
No related branches found
No related tags found
No related merge requests found
Showing
with 662 additions and 0 deletions
SEIOmiCancelFlag: 0
SEIOmiPersistenceFlag: 1
SEIOmiNumAuxPicLayerMinus1: 0
SEIOmiMaskIdLengthMinus1: 3
SEIOmiMaskSampleValueLengthMinus8: 2
SEIOmiMaskConfidenceInfoPresentFlag: 1
SEIOmiMaskConfidenceLengthMinus1: 3
SEIOmiMaskDepthInfoPresentFlag: 1
SEIOmiMaskDepthLengthMinus1: 3
SEIOmiMaskLabelInfoPresentFlag: 1
SEIOmiMaskLabelLanguagePresentFlag: 1
#SEIOmiBitEqualToZero: 0
SEIOmiMaskLabelLanguage: English
SEIOmiMaskPicUpdateFlag[0]: 1
SEIOmiNumMaskInPicUpdate[0]: 3
SEIOmiMaskId[0][0]: 0
SEIOmiAuxSampleValue[0][0]: 32
SEIOmiMaskCancel[0][0]: 0
SEIOmiBoundingBoxPresentFlag[0][0]: 1
SEIOmiMaskTop[0][0]: 10
SEIOmiMaskLeft[0][0]: 10
SEIOmiMaskWidth[0][0]: 20
SEIOmiMaskHeight[0][0]: 20
SEIOmiMaskConfidence[0][0]: 15
SEIOmiMaskDepth[0][0]: 15
SEIOmiMaskLabel[0][0]: mask0
SEIOmiMaskId[0][1]: 1
SEIOmiAuxSampleValue[0][1]: 64
SEIOmiMaskCancel[0][1]: 0
SEIOmiBoundingBoxPresentFlag[0][1]: 1
SEIOmiMaskTop[0][1]: 30
SEIOmiMaskLeft[0][1]: 30
SEIOmiMaskWidth[0][1]: 40
SEIOmiMaskHeight[0][1]: 40
SEIOmiMaskConfidence[0][1]: 15
SEIOmiMaskDepth[0][1]: 15
SEIOmiMaskLabel[0][1]: mask1
SEIOmiMaskId[0][2]: 2
SEIOmiAuxSampleValue[0][2]: 128
SEIOmiMaskCancel[0][2]: 0
SEIOmiBoundingBoxPresentFlag[0][2]: 1
SEIOmiMaskTop[0][2]: 50
SEIOmiMaskLeft[0][2]: 50
SEIOmiMaskWidth[0][2]: 60
SEIOmiMaskHeight[0][2]: 60
SEIOmiMaskConfidence[0][2]: 15
SEIOmiMaskDepth[0][2]: 15
SEIOmiMaskLabel[0][2]: mask2
SEIOmiCancelFlag: 0
SEIOmiPersistenceFlag: 1
SEIOmiNumAuxPicLayerMinus1: 0
SEIOmiMaskIdLengthMinus1: 3
SEIOmiMaskSampleValueLengthMinus8: 2
SEIOmiMaskConfidenceInfoPresentFlag: 1
SEIOmiMaskConfidenceLengthMinus1: 3
SEIOmiMaskDepthInfoPresentFlag: 1
SEIOmiMaskDepthLengthMinus1: 3
SEIOmiMaskLabelInfoPresentFlag: 1
SEIOmiMaskLabelLanguagePresentFlag: 1
#SEIOmiBitEqualToZero: 0
SEIOmiMaskLabelLanguage: English
SEIOmiMaskPicUpdateFlag[0]: 1
SEIOmiNumMaskInPicUpdate[0]: 2
SEIOmiMaskId[0][0]: 0
SEIOmiAuxSampleValue[0][0]: 32
SEIOmiMaskCancel[0][0]: 1
SEIOmiMaskId[0][1]: 3
SEIOmiAuxSampleValue[0][1]: 192
SEIOmiMaskCancel[0][1]: 0
SEIOmiBoundingBoxPresentFlag[0][1]: 1
SEIOmiMaskTop[0][1]: 150
SEIOmiMaskLeft[0][1]: 150
SEIOmiMaskWidth[0][1]: 60
SEIOmiMaskHeight[0][1]: 60
SEIOmiMaskConfidence[0][1]: 15
SEIOmiMaskDepth[0][1]: 15
SEIOmiMaskLabel[0][1]: mask3
SEIOmiCancelFlag: 0
SEIOmiPersistenceFlag: 1
SEIOmiNumAuxPicLayerMinus1: 0
SEIOmiMaskIdLengthMinus1: 3
SEIOmiMaskSampleValueLengthMinus8: 2
SEIOmiMaskConfidenceInfoPresentFlag: 1
SEIOmiMaskConfidenceLengthMinus1: 3
SEIOmiMaskDepthInfoPresentFlag: 1
SEIOmiMaskDepthLengthMinus1: 3
SEIOmiMaskLabelInfoPresentFlag: 1
SEIOmiMaskLabelLanguagePresentFlag: 1
#SEIOmiBitEqualToZero: 0
SEIOmiMaskLabelLanguage: English
SEIOmiMaskPicUpdateFlag[0]: 1
SEIOmiNumMaskInPicUpdate[0]: 1
SEIOmiMaskId[0][0]: 2
SEIOmiAuxSampleValue[0][0]: 128
SEIOmiMaskCancel[0][0]: 1
SEIOmiCancelFlag: 0
SEIOmiPersistenceFlag: 1
SEIOmiNumAuxPicLayerMinus1: 0
SEIOmiMaskIdLengthMinus1: 3
SEIOmiMaskSampleValueLengthMinus8: 2
SEIOmiMaskConfidenceInfoPresentFlag: 1
SEIOmiMaskConfidenceLengthMinus1: 3
SEIOmiMaskDepthInfoPresentFlag: 1
SEIOmiMaskDepthLengthMinus1: 3
SEIOmiMaskLabelInfoPresentFlag: 1
SEIOmiMaskLabelLanguagePresentFlag: 1
#SEIOmiBitEqualToZero: 0
SEIOmiMaskLabelLanguage: English
SEIOmiMaskPicUpdateFlag[0]: 1
SEIOmiNumMaskInPicUpdate[0]: 1
SEIOmiMaskId[0][0]: 1
SEIOmiAuxSampleValue[0][0]: 64
SEIOmiMaskCancel[0][0]: 0
SEIOmiBoundingBoxPresentFlag[0][0]: 1
SEIOmiMaskTop[0][0]: 130
SEIOmiMaskLeft[0][0]: 130
SEIOmiMaskWidth[0][0]: 40
SEIOmiMaskHeight[0][0]: 40
SEIOmiMaskConfidence[0][0]: 15
SEIOmiMaskDepth[0][0]: 15
SEIOmiMaskLabel[0][0]: mask1 update
SEIOmiCancelFlag: 0
SEIOmiPersistenceFlag: 1
SEIOmiNumAuxPicLayerMinus1: 0
SEIOmiMaskIdLengthMinus1: 3
SEIOmiMaskSampleValueLengthMinus8: 2
SEIOmiMaskConfidenceInfoPresentFlag: 1
SEIOmiMaskConfidenceLengthMinus1: 3
SEIOmiMaskDepthInfoPresentFlag: 1
SEIOmiMaskDepthLengthMinus1: 3
SEIOmiMaskLabelInfoPresentFlag: 1
SEIOmiMaskLabelLanguagePresentFlag: 1
#SEIOmiBitEqualToZero: 0
SEIOmiMaskLabelLanguage: English
SEIOmiMaskPicUpdateFlag[0]: 1
SEIOmiNumMaskInPicUpdate[0]: 1
SEIOmiMaskId[0][0]: 3
SEIOmiAuxSampleValue[0][0]: 192
SEIOmiMaskCancel[0][0]: 1
SEIOmiCancelFlag: 0
SEIOmiPersistenceFlag: 1
SEIOmiNumAuxPicLayerMinus1: 0
SEIOmiMaskIdLengthMinus1: 3
SEIOmiMaskSampleValueLengthMinus8: 2
SEIOmiMaskConfidenceInfoPresentFlag: 1
SEIOmiMaskConfidenceLengthMinus1: 3
SEIOmiMaskDepthInfoPresentFlag: 1
SEIOmiMaskDepthLengthMinus1: 3
SEIOmiMaskLabelInfoPresentFlag: 1
SEIOmiMaskLabelLanguagePresentFlag: 1
#SEIOmiBitEqualToZero: 0
SEIOmiMaskLabelLanguage: English
SEIOmiMaskPicUpdateFlag[0]: 1
SEIOmiNumMaskInPicUpdate[0]: 3
SEIOmiMaskId[0][0]: 0
SEIOmiAuxSampleValue[0][0]: 32
SEIOmiMaskCancel[0][0]: 0
SEIOmiBoundingBoxPresentFlag[0][0]: 1
SEIOmiMaskTop[0][0]: 10
SEIOmiMaskLeft[0][0]: 10
SEIOmiMaskWidth[0][0]: 20
SEIOmiMaskHeight[0][0]: 20
SEIOmiMaskConfidence[0][0]: 15
SEIOmiMaskDepth[0][0]: 15
SEIOmiMaskLabel[0][0]: mask0
SEIOmiMaskId[0][1]: 1
SEIOmiAuxSampleValue[0][1]: 64
SEIOmiMaskCancel[0][1]: 0
SEIOmiBoundingBoxPresentFlag[0][1]: 1
SEIOmiMaskTop[0][1]: 30
SEIOmiMaskLeft[0][1]: 30
SEIOmiMaskWidth[0][1]: 40
SEIOmiMaskHeight[0][1]: 40
SEIOmiMaskConfidence[0][1]: 15
SEIOmiMaskDepth[0][1]: 15
SEIOmiMaskLabel[0][1]: mask1
SEIOmiMaskId[0][2]: 2
SEIOmiAuxSampleValue[0][2]: 128
SEIOmiMaskCancel[0][2]: 0
SEIOmiBoundingBoxPresentFlag[0][2]: 1
SEIOmiMaskTop[0][2]: 50
SEIOmiMaskLeft[0][2]: 50
SEIOmiMaskWidth[0][2]: 60
SEIOmiMaskHeight[0][2]: 60
SEIOmiMaskConfidence[0][2]: 15
SEIOmiMaskDepth[0][2]: 15
SEIOmiMaskLabel[0][2]: mask2
SEIOmiCancelFlag: 0
SEIOmiPersistenceFlag: 1
SEIOmiNumAuxPicLayerMinus1: 0
SEIOmiMaskIdLengthMinus1: 3
SEIOmiMaskSampleValueLengthMinus8: 2
SEIOmiMaskConfidenceInfoPresentFlag: 1
SEIOmiMaskConfidenceLengthMinus1: 3
SEIOmiMaskDepthInfoPresentFlag: 1
SEIOmiMaskDepthLengthMinus1: 3
SEIOmiMaskLabelInfoPresentFlag: 1
SEIOmiMaskLabelLanguagePresentFlag: 1
#SEIOmiBitEqualToZero: 0
SEIOmiMaskLabelLanguage: English
SEIOmiMaskPicUpdateFlag[0]: 1
SEIOmiNumMaskInPicUpdate[0]: 2
SEIOmiMaskId[0][0]: 0
SEIOmiAuxSampleValue[0][0]: 32
SEIOmiMaskCancel[0][0]: 1
SEIOmiMaskId[0][1]: 3
SEIOmiAuxSampleValue[0][1]: 192
SEIOmiMaskCancel[0][1]: 0
SEIOmiBoundingBoxPresentFlag[0][1]: 1
SEIOmiMaskTop[0][1]: 150
SEIOmiMaskLeft[0][1]: 150
SEIOmiMaskWidth[0][1]: 60
SEIOmiMaskHeight[0][1]: 60
SEIOmiMaskConfidence[0][1]: 15
SEIOmiMaskDepth[0][1]: 15
SEIOmiMaskLabel[0][1]: mask3
SEIOmiCancelFlag: 0
SEIOmiPersistenceFlag: 1
SEIOmiNumAuxPicLayerMinus1: 0
SEIOmiMaskIdLengthMinus1: 3
SEIOmiMaskSampleValueLengthMinus8: 2
SEIOmiMaskConfidenceInfoPresentFlag: 1
SEIOmiMaskConfidenceLengthMinus1: 3
SEIOmiMaskDepthInfoPresentFlag: 1
SEIOmiMaskDepthLengthMinus1: 3
SEIOmiMaskLabelInfoPresentFlag: 1
SEIOmiMaskLabelLanguagePresentFlag: 1
#SEIOmiBitEqualToZero: 0
SEIOmiMaskLabelLanguage: English
SEIOmiMaskPicUpdateFlag[0]: 1
SEIOmiNumMaskInPicUpdate[0]: 1
SEIOmiMaskId[0][0]: 2
SEIOmiAuxSampleValue[0][0]: 128
SEIOmiMaskCancel[0][0]: 1
SEIOmiCancelFlag: 0
SEIOmiPersistenceFlag: 1
SEIOmiNumAuxPicLayerMinus1: 0
SEIOmiMaskIdLengthMinus1: 3
SEIOmiMaskSampleValueLengthMinus8: 2
SEIOmiMaskConfidenceInfoPresentFlag: 1
SEIOmiMaskConfidenceLengthMinus1: 3
SEIOmiMaskDepthInfoPresentFlag: 1
SEIOmiMaskDepthLengthMinus1: 3
SEIOmiMaskLabelInfoPresentFlag: 1
SEIOmiMaskLabelLanguagePresentFlag: 1
#SEIOmiBitEqualToZero: 0
SEIOmiMaskLabelLanguage: English
SEIOmiMaskPicUpdateFlag[0]: 1
SEIOmiNumMaskInPicUpdate[0]: 1
SEIOmiMaskId[0][0]: 1
SEIOmiAuxSampleValue[0][0]: 64
SEIOmiMaskCancel[0][0]: 0
SEIOmiBoundingBoxPresentFlag[0][0]: 1
SEIOmiMaskTop[0][0]: 130
SEIOmiMaskLeft[0][0]: 130
SEIOmiMaskWidth[0][0]: 40
SEIOmiMaskHeight[0][0]: 40
SEIOmiMaskConfidence[0][0]: 15
SEIOmiMaskDepth[0][0]: 15
SEIOmiMaskLabel[0][0]: mask1 update
SEIOmiCancelFlag: 0
SEIOmiPersistenceFlag: 1
SEIOmiNumAuxPicLayerMinus1: 0
SEIOmiMaskIdLengthMinus1: 3
SEIOmiMaskSampleValueLengthMinus8: 2
SEIOmiMaskConfidenceInfoPresentFlag: 1
SEIOmiMaskConfidenceLengthMinus1: 3
SEIOmiMaskDepthInfoPresentFlag: 1
SEIOmiMaskDepthLengthMinus1: 3
SEIOmiMaskLabelInfoPresentFlag: 1
SEIOmiMaskLabelLanguagePresentFlag: 1
#SEIOmiBitEqualToZero: 0
SEIOmiMaskLabelLanguage: English
SEIOmiMaskPicUpdateFlag[0]: 1
SEIOmiNumMaskInPicUpdate[0]: 1
SEIOmiMaskId[0][0]: 3
SEIOmiAuxSampleValue[0][0]: 192
SEIOmiMaskCancel[0][0]: 1
SEIOmiCancelFlag: 0
SEIOmiPersistenceFlag: 1
SEIOmiNumAuxPicLayerMinus1: 0
SEIOmiMaskIdLengthMinus1: 3
SEIOmiMaskSampleValueLengthMinus8: 2
SEIOmiMaskConfidenceInfoPresentFlag: 1
SEIOmiMaskConfidenceLengthMinus1: 3
SEIOmiMaskDepthInfoPresentFlag: 1
SEIOmiMaskDepthLengthMinus1: 3
SEIOmiMaskLabelInfoPresentFlag: 1
SEIOmiMaskLabelLanguagePresentFlag: 1
#SEIOmiBitEqualToZero: 0
SEIOmiMaskLabelLanguage: English
SEIOmiMaskPicUpdateFlag[0]: 1
SEIOmiNumMaskInPicUpdate[0]: 3
SEIOmiMaskId[0][0]: 0
SEIOmiAuxSampleValue[0][0]: 32
SEIOmiMaskCancel[0][0]: 0
SEIOmiBoundingBoxPresentFlag[0][0]: 1
SEIOmiMaskTop[0][0]: 10
SEIOmiMaskLeft[0][0]: 10
SEIOmiMaskWidth[0][0]: 20
SEIOmiMaskHeight[0][0]: 20
SEIOmiMaskConfidence[0][0]: 15
SEIOmiMaskDepth[0][0]: 15
SEIOmiMaskLabel[0][0]: mask0
SEIOmiMaskId[0][1]: 1
SEIOmiAuxSampleValue[0][1]: 64
SEIOmiMaskCancel[0][1]: 0
SEIOmiBoundingBoxPresentFlag[0][1]: 1
SEIOmiMaskTop[0][1]: 30
SEIOmiMaskLeft[0][1]: 30
SEIOmiMaskWidth[0][1]: 40
SEIOmiMaskHeight[0][1]: 40
SEIOmiMaskConfidence[0][1]: 15
SEIOmiMaskDepth[0][1]: 15
SEIOmiMaskLabel[0][1]: mask1
SEIOmiMaskId[0][2]: 2
SEIOmiAuxSampleValue[0][2]: 128
SEIOmiMaskCancel[0][2]: 0
SEIOmiBoundingBoxPresentFlag[0][2]: 1
SEIOmiMaskTop[0][2]: 50
SEIOmiMaskLeft[0][2]: 50
SEIOmiMaskWidth[0][2]: 60
SEIOmiMaskHeight[0][2]: 60
SEIOmiMaskConfidence[0][2]: 15
SEIOmiMaskDepth[0][2]: 15
SEIOmiMaskLabel[0][2]: mask2
SEIOmiCancelFlag: 0
SEIOmiPersistenceFlag: 1
SEIOmiNumAuxPicLayerMinus1: 0
SEIOmiMaskIdLengthMinus1: 3
SEIOmiMaskSampleValueLengthMinus8: 2
SEIOmiMaskConfidenceInfoPresentFlag: 1
SEIOmiMaskConfidenceLengthMinus1: 3
SEIOmiMaskDepthInfoPresentFlag: 1
SEIOmiMaskDepthLengthMinus1: 3
SEIOmiMaskLabelInfoPresentFlag: 1
SEIOmiMaskLabelLanguagePresentFlag: 1
#SEIOmiBitEqualToZero: 0
SEIOmiMaskLabelLanguage: English
SEIOmiMaskPicUpdateFlag[0]: 1
SEIOmiNumMaskInPicUpdate[0]: 1
SEIOmiMaskId[0][0]: 1
SEIOmiAuxSampleValue[0][0]: 64
SEIOmiMaskCancel[0][0]: 0
SEIOmiBoundingBoxPresentFlag[0][0]: 1
SEIOmiMaskTop[0][0]: 130
SEIOmiMaskLeft[0][0]: 130
SEIOmiMaskWidth[0][0]: 40
SEIOmiMaskHeight[0][0]: 40
SEIOmiMaskConfidence[0][0]: 15
SEIOmiMaskDepth[0][0]: 15
SEIOmiMaskLabel[0][0]: mask1 update
SEIOmiCancelFlag: 0
SEIOmiPersistenceFlag: 1
SEIOmiNumAuxPicLayerMinus1: 0
SEIOmiMaskIdLengthMinus1: 3
SEIOmiMaskSampleValueLengthMinus8: 2
SEIOmiMaskConfidenceInfoPresentFlag: 1
SEIOmiMaskConfidenceLengthMinus1: 3
SEIOmiMaskDepthInfoPresentFlag: 1
SEIOmiMaskDepthLengthMinus1: 3
SEIOmiMaskLabelInfoPresentFlag: 1
SEIOmiMaskLabelLanguagePresentFlag: 1
#SEIOmiBitEqualToZero: 0
SEIOmiMaskLabelLanguage: English
SEIOmiMaskPicUpdateFlag[0]: 1
SEIOmiNumMaskInPicUpdate[0]: 1
SEIOmiMaskId[0][0]: 2
SEIOmiAuxSampleValue[0][0]: 128
SEIOmiMaskCancel[0][0]: 1
SEIOmiCancelFlag: 0
SEIOmiPersistenceFlag: 1
SEIOmiNumAuxPicLayerMinus1: 0
SEIOmiMaskIdLengthMinus1: 3
SEIOmiMaskSampleValueLengthMinus8: 2
SEIOmiMaskConfidenceInfoPresentFlag: 1
SEIOmiMaskConfidenceLengthMinus1: 3
SEIOmiMaskDepthInfoPresentFlag: 1
SEIOmiMaskDepthLengthMinus1: 3
SEIOmiMaskLabelInfoPresentFlag: 1
SEIOmiMaskLabelLanguagePresentFlag: 1
#SEIOmiBitEqualToZero: 0
SEIOmiMaskLabelLanguage: English
SEIOmiMaskPicUpdateFlag[0]: 1
SEIOmiNumMaskInPicUpdate[0]: 1
SEIOmiMaskId[0][0]: 3
SEIOmiAuxSampleValue[0][0]: 192
SEIOmiMaskCancel[0][0]: 1
SEIOmiCancelFlag: 0
SEIOmiPersistenceFlag: 1
SEIOmiNumAuxPicLayerMinus1: 0
SEIOmiMaskIdLengthMinus1: 3
SEIOmiMaskSampleValueLengthMinus8: 2
SEIOmiMaskConfidenceInfoPresentFlag: 1
SEIOmiMaskConfidenceLengthMinus1: 3
SEIOmiMaskDepthInfoPresentFlag: 1
SEIOmiMaskDepthLengthMinus1: 3
SEIOmiMaskLabelInfoPresentFlag: 1
SEIOmiMaskLabelLanguagePresentFlag: 1
#SEIOmiBitEqualToZero: 0
SEIOmiMaskLabelLanguage: English
SEIOmiMaskPicUpdateFlag[0]: 1
SEIOmiNumMaskInPicUpdate[0]: 2
SEIOmiMaskId[0][0]: 0
SEIOmiAuxSampleValue[0][0]: 32
SEIOmiMaskCancel[0][0]: 1
SEIOmiMaskId[0][1]: 3
SEIOmiAuxSampleValue[0][1]: 192
SEIOmiMaskCancel[0][1]: 0
SEIOmiBoundingBoxPresentFlag[0][1]: 1
SEIOmiMaskTop[0][1]: 150
SEIOmiMaskLeft[0][1]: 150
SEIOmiMaskWidth[0][1]: 60
SEIOmiMaskHeight[0][1]: 60
SEIOmiMaskConfidence[0][1]: 15
SEIOmiMaskDepth[0][1]: 15
SEIOmiMaskLabel[0][1]: mask3
#======== Scalability Dimension Information SEI message =====================
SEISDIEnabled : 1
SEISDIMaxLayersMinus1 : 1
SEISDIAuxiliaryInfoFlag : 1
SEISDIMultiviewInfoFlag : 0
SEISDILayerId : 0 1
SEISDIAuxId : 0 3
SEISDINumAssociatedPrimaryLayersMinus1 : 0 0
SEISDIAssociatedPrimaryLayerIdx : 0
\ No newline at end of file
......@@ -5142,6 +5142,10 @@ List of the auxiliary identifiers in the scalaibility dimension information SEI
\Default{""} &
List of the numbers of associated primary layers of i-th layer, which is an auxiliary layer.
\\
\Option{SEISDIAssociatedPrimaryLayerIdx} &
\Default{""} &
List of the associated primary layer indices of i-th layer, which is an auxiliary layer.
\\
\end{OptionTableNoShorthand}
\begin{OptionTableNoShorthand}{Alpha Channel Information SEI message encoder parameters}{tab:sei-aci}
......@@ -6247,6 +6251,15 @@ Specifies the number of time units of a clock operating at the frequency spti_ti
%When true, generate time code SEI messages.
%\\
\begin{OptionTableNoShorthand}{Object Mask Information SEI message encoder parameters}{tab:sei-object-mask-information}
\Option{SEIObjectMaskFileRoot (-omi)} &
\Default{\NotSet} &
Specifies the prefix of input Object Mask Information file. Prefix is completed by ``_x.txt'' where x is the POC number.
The contents of the file are a list of the SEI message's syntax element names (in decoding order) immediately followed by a `:' and then the associated value.
An example file can be found in cfg/sei_vui/object_mask_infos/intra/mask_info_0.txt
\\
\end{OptionTableNoShorthand}
%%
%%
%%
......@@ -6470,6 +6483,13 @@ When a non-empty file name is specified, object information using the decoded SE
If no value is specified, the SEI message will not be output.
\\
\Option{SEIObjectMaskInfosFilename} &
%\ShortOption{\None} &
\Default{\NotSet} &
When a non-empty file name is specified, object mask information using the decoded SEI messages will be output to the indicated file.
If no value is specified, the SEI message will not be output.
\\
\Option{OutputColourSpaceConvert} &
\Default{\NotSet} &
Specifies the colour space conversion to apply to 444 video. Permitted values are:
......
......@@ -145,6 +145,18 @@ uint32_t DecApp::decode()
}
}
#if JVET_AI0153_OMI_SEI
if (!m_objectMaskInfoSEIFileName.empty())
{
std::ofstream ofile(m_objectMaskInfoSEIFileName.c_str());
if (!ofile.good() || !ofile.is_open())
{
fprintf(stderr, "\nUnable to open file '%s' for writing Object-Mask-Information-SEI\n", m_objectMaskInfoSEIFileName.c_str());
exit(EXIT_FAILURE);
}
}
#endif
// main decoder loop
bool loopFiltered[MAX_VPS_LAYERS] = { false };
......@@ -1207,6 +1219,12 @@ void DecApp::xWriteOutput( PicList* pcListPic, uint32_t tId )
}
writeLineToOutputLog(pcPic);
#if JVET_AI0153_OMI_SEI
if (!m_objectMaskInfoSEIFileName.empty())
{
xOutputObjectMaskInfos(pcPic);
}
#endif
// update POC of display order
m_iPOCLastDisplay = pcPic->getPOC();
......@@ -1420,6 +1438,12 @@ void DecApp::xFlushOutput( PicList* pcListPic, const int layerId )
}
}
writeLineToOutputLog(pcPic);
#if JVET_AI0153_OMI_SEI
if (!m_objectMaskInfoSEIFileName.empty())
{
xOutputObjectMaskInfos(pcPic);
}
#endif
// update POC of display order
m_iPOCLastDisplay = pcPic->getPOC();
......@@ -1599,6 +1623,125 @@ void DecApp::xOutputAnnotatedRegions(PicList* pcListPic)
}
}
#if JVET_AI0153_OMI_SEI
void DecApp::xOutputObjectMaskInfos(Picture* pcPic)
{
SEIMessages objectMaskInfoSEIs = getSeisByType(pcPic->SEIs, SEI::PayloadType::OBJECT_MASK_INFO);
for (auto it = objectMaskInfoSEIs.begin(); it != objectMaskInfoSEIs.end(); it++)
{
const SEIObjectMaskInfos& seiObjectMaskInfo = *(SEIObjectMaskInfos*) (*it);
if (!seiObjectMaskInfo.m_hdr.m_cancelFlag)
{
if (m_omiHeader.m_receivedSettingsOnce)
{
CHECK(m_omiHeader.m_numAuxPicLayerMinus1 != seiObjectMaskInfo.m_hdr.m_numAuxPicLayerMinus1, "omi_num_aux_pic_layer_minus1 should be consistent within the CLVS.")
CHECK(m_omiHeader.m_maskIdLengthMinus1 != seiObjectMaskInfo.m_hdr.m_maskIdLengthMinus1, "omi_mask_id_length_minus1 should be consistent within the CLVS.")
CHECK(m_omiHeader.m_maskSampleValueLengthMinus8 != seiObjectMaskInfo.m_hdr.m_maskSampleValueLengthMinus8,"omi_mask_sample_value_length_minus8 should be consistent within the CLVS.")
CHECK(m_omiHeader.m_maskConfidenceInfoPresentFlag != seiObjectMaskInfo.m_hdr.m_maskConfidenceInfoPresentFlag,"Confidence info present flag should be consistent within the CLVS.");
if (m_omiHeader.m_maskConfidenceInfoPresentFlag)
{
CHECK(m_omiHeader.m_maskConfidenceLengthMinus1 != seiObjectMaskInfo.m_hdr.m_maskConfidenceLengthMinus1, "Confidence length should be consistent within the CLVS.");
}
CHECK(m_omiHeader.m_maskDepthInfoPresentFlag != seiObjectMaskInfo.m_hdr.m_maskDepthInfoPresentFlag,"Depth info present flag should be consistent within the CLVS.");
if (m_omiHeader.m_maskDepthInfoPresentFlag)
{
CHECK(m_omiHeader.m_maskDepthLengthMinus1 != seiObjectMaskInfo.m_hdr.m_maskDepthLengthMinus1, "Depth length should be consistent within the CLVS.");
}
}
else
{
m_omiHeader = seiObjectMaskInfo.m_hdr; // copy the settings.
m_omiHeader.m_receivedSettingsOnce = true;
}
}
FILE* fpPersist = fopen(m_objectMaskInfoSEIFileName.c_str(), "ab");
if (fpPersist == nullptr)
{
std::cout << "Not able to open file for writing persist SEI messages" << std::endl;
}
else
{
fprintf(fpPersist, "POC %d\n", (int) pcPic->getPOC());
// header
fprintf(fpPersist, "OMI Cancel Flag = %d\n", seiObjectMaskInfo.m_hdr.m_cancelFlag);
if (!seiObjectMaskInfo.m_hdr.m_cancelFlag)
{
fprintf(fpPersist, "OMI Persistence Flag = %d\n", seiObjectMaskInfo.m_hdr.m_persistenceFlag);
fprintf(fpPersist, "OMI AuxPicLayer Num = %d\n", seiObjectMaskInfo.m_hdr.m_numAuxPicLayerMinus1 + 1);
fprintf(fpPersist, "OMI MaskId Length = %d\n", seiObjectMaskInfo.m_hdr.m_maskIdLengthMinus1 + 1);
fprintf(fpPersist, "OMI MaskSampleValue Length = %d\n",seiObjectMaskInfo.m_hdr.m_maskSampleValueLengthMinus8 + 8);
fprintf(fpPersist, "OMI MaskConf Present = %d\n", seiObjectMaskInfo.m_hdr.m_maskConfidenceInfoPresentFlag);
if (seiObjectMaskInfo.m_hdr.m_maskConfidenceInfoPresentFlag)
{
fprintf(fpPersist, "OMI MaskConf Length = %d\n", seiObjectMaskInfo.m_hdr.m_maskConfidenceLengthMinus1 + 1);
}
fprintf(fpPersist, "OMI MaskDepth Present = %d\n", seiObjectMaskInfo.m_hdr.m_maskDepthInfoPresentFlag);
if (seiObjectMaskInfo.m_hdr.m_maskDepthInfoPresentFlag)
{
fprintf(fpPersist, "OMI MaskDepth Length = %d\n", seiObjectMaskInfo.m_hdr.m_maskDepthLengthMinus1 + 1);
}
fprintf(fpPersist, "OMI MaskLabel Present = %d\n", seiObjectMaskInfo.m_hdr.m_maskLabelInfoPresentFlag);
if (seiObjectMaskInfo.m_hdr.m_maskLabelInfoPresentFlag)
{
fprintf(fpPersist, "OMI MaskLabelLang Present = %d\n",seiObjectMaskInfo.m_hdr.m_maskLabelLanguagePresentFlag);
if (seiObjectMaskInfo.m_hdr.m_maskLabelLanguagePresentFlag)
{
fprintf(fpPersist, "OMI MaskLabelLang = %s\n", seiObjectMaskInfo.m_hdr.m_maskLabelLanguage.c_str());
}
}
fprintf(fpPersist, "\n");
// infos
uint32_t maskIdx = 0;
for (uint32_t i = 0; i <= seiObjectMaskInfo.m_hdr.m_numAuxPicLayerMinus1; i++)
{
fprintf(fpPersist, "OMI MaskUpdateFlag[%d] = %d\n", i, seiObjectMaskInfo.m_maskPicUpdateFlag[i]);
if (seiObjectMaskInfo.m_maskPicUpdateFlag[i])
{
fprintf(fpPersist, "OMI MaskUpdateNum[%d] = %d\n", i, seiObjectMaskInfo.m_numMaskInPicUpdate[i]);
for (uint32_t j = 0; j < seiObjectMaskInfo.m_numMaskInPicUpdate[i]; j++)
{
fprintf(fpPersist, "MaskId[%d][%d] = %d\n", i, j, seiObjectMaskInfo.m_objectMaskInfos[maskIdx].maskId);
fprintf(fpPersist, "AuxSampleValue[%d][%d] = %d\n", i, j, seiObjectMaskInfo.m_objectMaskInfos[maskIdx].auxSampleValue);
fprintf(fpPersist, "MaskCancel[%d][%d] = %d\n", i, j,
seiObjectMaskInfo.m_objectMaskInfos[maskIdx].maskCancel);
if (!seiObjectMaskInfo.m_objectMaskInfos[maskIdx].maskCancel)
{
fprintf(fpPersist, "MaskBBoxPresentFlag[%d][%d] = %d\n", i, j, seiObjectMaskInfo.m_objectMaskInfos[maskIdx].maskBoundingBoxPresentFlag);
if (seiObjectMaskInfo.m_objectMaskInfos[maskIdx].maskBoundingBoxPresentFlag)
{
fprintf(fpPersist, "MaskTop[%d][%d] = %d\n", i, j,seiObjectMaskInfo.m_objectMaskInfos[maskIdx].maskTop);
fprintf(fpPersist, "MaskLeft[%d][%d] = %d\n", i, j,seiObjectMaskInfo.m_objectMaskInfos[maskIdx].maskLeft);
fprintf(fpPersist, "MaskWidth[%d][%d] = %d\n", i, j,seiObjectMaskInfo.m_objectMaskInfos[maskIdx].maskWidth);
fprintf(fpPersist, "MaskHeight[%d][%d] = %d\n", i, j, seiObjectMaskInfo.m_objectMaskInfos[maskIdx].maskHeight);
}
if (seiObjectMaskInfo.m_hdr.m_maskConfidenceInfoPresentFlag)
{
fprintf(fpPersist, "MaskConf[%d][%d] = %d\n", i, j,seiObjectMaskInfo.m_objectMaskInfos[maskIdx].maskConfidence);
}
if (seiObjectMaskInfo.m_hdr.m_maskDepthInfoPresentFlag)
{
fprintf(fpPersist, "MaskDepth[%d][%d] = %d\n", i, j,seiObjectMaskInfo.m_objectMaskInfos[maskIdx].maskDepth);
}
if (m_omiHeader.m_maskLabelInfoPresentFlag)
{
fprintf(fpPersist, "MaskLabel[%d][%d] = %s\n", i, j, seiObjectMaskInfo.m_objectMaskInfos[maskIdx].maskLabel.c_str());
}
}
maskIdx++;
}
fprintf(fpPersist, "\n");
}
}
}
fclose(fpPersist);
}
}
}
#endif
/** \param nalu Input nalu to check whether its LayerId is within targetDecLayerIdSet
*/
bool DecApp::xIsNaluWithinTargetDecLayerIdSet( const InputNALUnit* nalu ) const
......
......@@ -90,6 +90,10 @@ private:
std::map<uint32_t, SEIAnnotatedRegions::AnnotatedRegionObject> m_arObjects; ///< AR object pool
std::map<uint32_t, std::string> m_arLabels; ///< AR label pool
#if JVET_AI0153_OMI_SEI
SEIObjectMaskInfos::ObjectMaskInfoHeader m_omiHeader; ///< OMI header
#endif
private:
bool xIsNaluWithinTargetDecLayerIdSet( const InputNALUnit* nalu ) const; ///< check whether given Nalu is within targetDecLayerIdSet
bool xIsNaluWithinTargetOutputLayerIdSet( const InputNALUnit* nalu ) const; ///< check whether given Nalu is within targetOutputLayerIdSet
......@@ -118,6 +122,9 @@ private:
void writeLineToOutputLog(Picture * pcPic);
void xOutputAnnotatedRegions(PicList* pcListPic);
#if JVET_AI0153_OMI_SEI
void xOutputObjectMaskInfos(Picture* pcPic);
#endif
};
//! \}
......
......@@ -99,6 +99,9 @@ bool DecAppCfg::parseCfg( int argc, char* argv[] )
("SEICTIFilename", m_SEICTIFileName, std::string(""), "CTI YUV output file name. If empty, no Colour Transform is applied (ignore SEI message)\n")
("SEIFGSFilename", m_SEIFGSFileName, std::string(""), "FGS YUV output file name. If empty, no film grain is applied (ignore SEI message)\n")
("SEIAnnotatedRegionsInfoFilename", m_annotatedRegionsSEIFileName, std::string(""), "Annotated regions output file name. If empty, no object information will be saved (ignore SEI message)\n")
#if JVET_AI0153_OMI_SEI
("SEIObjectMaskInfosFilename", m_objectMaskInfoSEIFileName, std::string(""), "Object mask information output file name. If empty, no object mask information will be saved (ignore SEI message)\n")
#endif
("OutputDecodedSEIMessagesFilename", m_outputDecodedSEIMessagesFilename, std::string(""), "When non empty, output decoded SEI messages to the indicated file. If file is '-', then output to stdout\n")
#if JVET_S0257_DUMP_360SEI_MESSAGE
("360DumpFile", m_outputDecoded360SEIMessagesFilename, std::string(""), "When non empty, output decoded 360 SEI messages to the indicated file.\n")
......@@ -270,6 +273,9 @@ DecAppCfg::DecAppCfg()
, m_SEICTIFileName()
, m_SEIFGSFileName()
, m_annotatedRegionsSEIFileName()
#if JVET_AI0153_OMI_SEI
, m_objectMaskInfoSEIFileName()
#endif
, m_targetDecLayerIdSet()
, m_outputDecodedSEIMessagesFilename()
#if JVET_S0257_DUMP_360SEI_MESSAGE
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment