diff --git a/source/Lib/CommonLib/SEI.cpp b/source/Lib/CommonLib/SEI.cpp index 326cff734adf43125a5d913988a2634fae51b58d..8081fb8c79bb79e517e66df37f0c912e71a7fb2f 100644 --- a/source/Lib/CommonLib/SEI.cpp +++ b/source/Lib/CommonLib/SEI.cpp @@ -423,13 +423,17 @@ SEIManifest::SEIManifestDescription SEIManifest::getSEIMessageDescription(const std::vector<PayloadType> undetermined = { USER_DATA_REGISTERED_ITU_T_T35, USER_DATA_UNREGISTERED }; for (auto pt : nessary) { - if (payloadType == pt) + if (payloadType == pt) + { return NESSARY_SEI_MESSAGE; + } } for (auto pt: undetermined) { - if (payloadType == pt) + if (payloadType == pt) + { return UNDETERMINED_SEI_MESSAGE; + } } return UNNESSARY_SEI_MESSAGE; } @@ -449,13 +453,17 @@ uint8_t SEIPrefixIndication::getNumsOfSeiPrefixIndications(const SEI *sei) for (auto pt: indicationN) { - if (payloadType == pt) + if (payloadType == pt) + { return 3; + } } for (auto pt: indication2) { if (payloadType == pt) + { return 2; + } } return 1; } diff --git a/source/Lib/EncoderLib/SEIEncoder.cpp b/source/Lib/EncoderLib/SEIEncoder.cpp index 870426846ce879b617220fe2fd883bf94a4627c9..7c6c94f2dfe2e92ee6ce854ed0f57e50feadbd3d 100644 --- a/source/Lib/EncoderLib/SEIEncoder.cpp +++ b/source/Lib/EncoderLib/SEIEncoder.cpp @@ -1102,7 +1102,6 @@ void SEIEncoder::initSEISeiManifest(SEIManifest *seiSeiManifest, const SEIMessag assert(m_isInitialized); assert(seiSeiManifest != NULL); seiSeiManifest->m_manifestNumSeiMsgTypes = 0; - int i = 0; for (auto &it: seiMessages) { seiSeiManifest->m_manifestNumSeiMsgTypes += 1; @@ -1110,7 +1109,6 @@ void SEIEncoder::initSEISeiManifest(SEIManifest *seiSeiManifest, const SEIMessag seiSeiManifest->m_manifestSeiPayloadType.push_back(tempPayloadType); auto description = seiSeiManifest->getSEIMessageDescription(tempPayloadType); seiSeiManifest->m_manifestSeiDescription.push_back(description); - i++; } CHECK(seiSeiManifest->m_manifestNumSeiMsgTypes == 0, "No SEI messages available"); } @@ -1121,8 +1119,11 @@ void SEIEncoder::initSEISeiPrefixIndication(SEIPrefixIndication *seiSeiPrefixInd { assert(m_isInitialized); assert(seiSeiPrefixIndications != NULL); - seiSeiPrefixIndications->m_prefixSeiPayloadType = sei->payloadType(); + seiSeiPrefixIndications->m_prefixSeiPayloadType = sei->payloadType(); seiSeiPrefixIndications->m_numSeiPrefixIndicationsMinus1 = seiSeiPrefixIndications->getNumsOfSeiPrefixIndications(sei) - 1; + seiSeiPrefixIndications->m_numBitsInPrefixIndicationMinus1.resize(seiSeiPrefixIndications->m_numSeiPrefixIndicationsMinus1 + 1); + seiSeiPrefixIndications->m_seiPrefixDataBit.resize(seiSeiPrefixIndications->m_numSeiPrefixIndicationsMinus1 + 1); + seiSeiPrefixIndications->m_byteAlignmentBitEqualToOne = 1; seiSeiPrefixIndications->m_payload = sei; } #endif diff --git a/source/Lib/EncoderLib/SEIwrite.cpp b/source/Lib/EncoderLib/SEIwrite.cpp index 05c2e581e01345deb70ee08986cca856cb90fc6d..9e8cd2e7ed01ebb383f391b0ccacbd4547415992 100644 --- a/source/Lib/EncoderLib/SEIwrite.cpp +++ b/source/Lib/EncoderLib/SEIwrite.cpp @@ -631,10 +631,14 @@ void SEIWriter::xWriteSEIFramePacking(const SEIFramePacking& sei { int numBits = 0; numBits += getUESENumBits("ue", sei.m_arrangementId); - if (!sei.m_arrangementCancelFlag) + if (!sei.m_arrangementCancelFlag) + { numBits += 9; + } else + { numBits += 2; + } WRITE_CODE(numBits - 1, 16, "num_bits_in_prefix_indication_minus1"); } #endif @@ -728,11 +732,11 @@ void SEIWriter::xWriteSEIManifest(const SEIManifest &sei) //SEI prefix indication void SEIWriter::xWriteSEIPrefixIndication(OutputBitstream &bs, const SEIPrefixIndication &sei, HRD &hrd, const uint32_t temporalId) { - WRITE_CODE(sei.m_prefixSeiPayloadType, 16, "prefix_sei_payload_type"); int idx = sei.m_numSeiPrefixIndicationsMinus1 + 1; //If num_sei_prefix_indication cannot be determined during initialization, then determine when writing prefix databits - if (idx <= 1) { + if (idx <= 1) + { WRITE_CODE(sei.m_numSeiPrefixIndicationsMinus1, 8, "num_sei_prefix_indications_minus1"); } // By writing SEI prefix indication recursively, you only need to pass in SEIPrefixIndicationIdx in the corresponding @@ -745,23 +749,34 @@ int SEIWriter::getUESENumBits(std::string str, int codeNum) { CHECK(!(str == "ue" || str == "se"), "Unknown type of codeNum"); if (str == "ue") { if (codeNum <= 0) + { return 1; + } else if (codeNum <= 2) + { return 3; + } else if (codeNum <= 6) + { return 5; + } else if (codeNum <= 14) + { return 7; + } else if (codeNum <= 30) + { return 9; + } else + { return 11; + } } else if (str == "se") { return getUESENumBits("ue", 2 * std::abs(codeNum)); } - assert(0); return -1; } void SEIWriter::xWriteSPIByteAlign() { @@ -892,8 +907,10 @@ void SEIWriter::xWriteSEIEquirectangularProjection(const SEIEquirectangularProje if (SEIPrefixIndicationIdx) { int numBits = 5; - if (sei.m_erpGuardBandFlag) + if (sei.m_erpGuardBandFlag) + { numBits += 19; + } WRITE_CODE(numBits - 1, 16, "num_bits_in_prefix_indication_minus1"); } #endif @@ -992,8 +1009,10 @@ void SEIWriter::xWriteSEIRegionWisePacking(const SEIRegionWisePacking &sei WRITE_CODE(sei.m_numPackedRegions, 8, "num_sei_prefix_indications_minus1"); } int numBits = 1; - if (!sei.m_rwpCancelFlag) + if (!sei.m_rwpCancelFlag) + { numBits += 111; + } WRITE_CODE(numBits - 1, 16, "num_bits_in_prefix_indication_minus1"); } #endif @@ -1014,8 +1033,10 @@ void SEIWriter::xWriteSEIRegionWisePacking(const SEIRegionWisePacking &sei if (SEIPrefixIndicationIdx >= 2) { int numBits = 200; - if (sei.m_rwpGuardBandFlag[i]) + if (sei.m_rwpGuardBandFlag[i]) + { numBits += 48; + } WRITE_CODE(numBits - 1, 16, "num_bits_in_prefix_indication_minus1"); } #endif @@ -1057,8 +1078,10 @@ void SEIWriter::xWriteSEIGeneralizedCubemapProjection(const SEIGeneralizedCubema if (SEIPrefixIndicationIdx) { int numBits = 1; - if (!sei.m_gcmpCancelFlag) + if (!sei.m_gcmpCancelFlag) + { numBits += 6; + } WRITE_CODE(numBits - 1, 16, "num_bits_in_prefix_indication_minus1"); } #endif