From 415f2968526b0989997f099ed02c1f2c13358ea3 Mon Sep 17 00:00:00 2001 From: Frank Bossen <fbossen@gmail.com> Date: Fri, 9 Feb 2024 07:43:13 -0500 Subject: [PATCH] Misc clean up --- source/App/SubpicMergeApp/SubpicMergeApp.cpp | 3 +- source/Lib/DecoderLib/DecLib.cpp | 8 +- source/Lib/DecoderLib/SEIread.cpp | 103 +++++++++---------- 3 files changed, 54 insertions(+), 60 deletions(-) diff --git a/source/App/SubpicMergeApp/SubpicMergeApp.cpp b/source/App/SubpicMergeApp/SubpicMergeApp.cpp index 47cfb99902..963b186ff3 100644 --- a/source/App/SubpicMergeApp/SubpicMergeApp.cpp +++ b/source/App/SubpicMergeApp/SubpicMergeApp.cpp @@ -1070,7 +1070,8 @@ void SubpicMergeApp::generateMergedPic(ParameterSetManager &psManager, bool mixe const std::vector<uint16_t> subPicIds = { (uint16_t)subpicId }; std::vector<int> targetOLS; std::vector<int> targetLayers = { (int)subpic.nalus[0].m_nuhLayerId }; - auto sn = new SEIScalableNesting(); + + auto sn = new SEIScalableNesting(); seiEncoder.init(0, 0, 0); const uint16_t maxSubpicIdInPic = subPicIds.size() == 0 ? 0 : *std::max_element(subPicIds.begin(), subPicIds.end()); diff --git a/source/Lib/DecoderLib/DecLib.cpp b/source/Lib/DecoderLib/DecLib.cpp index dc78f37528..c946b2d1eb 100644 --- a/source/Lib/DecoderLib/DecLib.cpp +++ b/source/Lib/DecoderLib/DecLib.cpp @@ -930,17 +930,19 @@ void DecLib::finishPicture(int &poc, PicList *&rpcListPic, MsgLevel msgl, bool a SEIMessages scalableNestingSeis = getSeisByType(m_pcPic->SEIs, SEI::PayloadType::SCALABLE_NESTING); for (auto seiIt : scalableNestingSeis) { - SEIScalableNesting* sn = dynamic_cast<SEIScalableNesting*>(seiIt); + auto sn = reinterpret_cast<SEIScalableNesting*>(seiIt); if (!sn->subpicId.empty()) { - uint32_t subpicId = sn->subpicId.front(); + const uint32_t subpicId = sn->subpicId.front(); + SEIMessages nestedPictureHashes = getSeisByType(sn->nestedSeis, SEI::PayloadType::DECODED_PICTURE_HASH); for (auto decPicHash : nestedPictureHashes) { const SubPic& subpic = pcSlice->getPPS()->getSubPic(subpicId); const UnitArea area = UnitArea(pcSlice->getSPS()->getChromaFormatIdc(), Area(subpic.getSubPicLeft(), subpic.getSubPicTop(), subpic.getSubPicWidthInLumaSample(), subpic.getSubPicHeightInLumaSample())); PelUnitBuf recoBuf = m_pcPic->cs->getRecoBuf(area); - m_numberOfChecksumErrorsDetected += calcAndPrintHashStatus(recoBuf, dynamic_cast<SEIDecodedPictureHash*>(decPicHash), pcSlice->getSPS()->getBitDepths(), msgl); + m_numberOfChecksumErrorsDetected += calcAndPrintHashStatus( + recoBuf, reinterpret_cast<SEIDecodedPictureHash*>(decPicHash), pcSlice->getSPS()->getBitDepths(), msgl); } } } diff --git a/source/Lib/DecoderLib/SEIread.cpp b/source/Lib/DecoderLib/SEIread.cpp index 699bd451ad..2cefc15296 100644 --- a/source/Lib/DecoderLib/SEIread.cpp +++ b/source/Lib/DecoderLib/SEIread.cpp @@ -989,7 +989,8 @@ void SEIReader::xParseSEIScalableNesting(SEIScalableNesting& sn, const NalUnitTy lowestLayerId = std::min(lowestLayerId, vps->getLayerIdInOls(olsIdx, layerIdx)); } } - CHECK(lowestLayerId!= nuhLayerId, "nuh_layer_id is not equal to the lowest layer among Olss that the scalable SEI applies"); + CHECK(lowestLayerId != nuhLayerId, + "nuh_layer_id is not equal to the lowest layer among Olss that the scalable SEI applies"); } } else @@ -1038,7 +1039,7 @@ void SEIReader::xParseSEIScalableNesting(SEIScalableNesting& sn, const NalUnitTy } // read nested SEI messages - for (int32_t i = 0; i < numSeis; i++) + for (int i = 0; i < numSeis; i++) { SEIMessages tmpSEIs; const bool seiMessageRead = xReadSEImessage(tmpSEIs, nalUnitType, nuhLayerId, 0, vps, sps, m_nestedHrd, decodedMessageOutputStream); @@ -1306,26 +1307,24 @@ void SEIReader::xParseSEIScalableNestingBinary(SEIScalableNesting& sn, const Nal // above codes are exactly same as those in xParseSEIScalableNesting() // read and save nested SEI messages in binary form - for (int32_t i = 0; i < numSeis; i++) + for (int i = 0; i < numSeis; i++) { - int payloadTypeVal = 0; - uint32_t val = 0; + uint32_t payloadTypeVal = 0; do { - sei_read_code(nullptr, 8, val, "payload_type"); - payloadTypeVal += val; - } while (val==0xFF); + sei_read_code(nullptr, 8, symbol, "payload_type"); + payloadTypeVal += symbol; + } while (symbol == 0xff); - auto payloadType = SEI::PayloadType(payloadTypeVal); + auto payloadType = static_cast<SEI::PayloadType>(payloadTypeVal); uint32_t payloadSize = 0; do { - sei_read_code(nullptr, 8, val, "payload_size"); - payloadSize += val; - } while (val==0xFF); + sei_read_code(nullptr, 8, symbol, "payload_size"); + payloadSize += symbol; + } while (symbol == 0xff); - uint8_t *payload = new uint8_t[payloadSize]; int duiIdx = 0; if (SEI::PayloadType(payloadType) == SEI::PayloadType::DECODING_UNIT_INFO) { @@ -1337,79 +1336,71 @@ void SEIReader::xParseSEIScalableNestingBinary(SEIScalableNesting& sn, const Nal else { InputBitstream *bs = getBitstream(); - InputBitstream bs2(*bs); - setBitstream(&bs2); - SEI *sei = nullptr; - sei = new SEIDecodingUnitInfo; - xParseSEIDecodingUnitInfo((SEIDecodingUnitInfo &) *sei, payloadSize, *bp, nuhLayerId, nullptr); - duiIdx = ((SEIDecodingUnitInfo&) *sei).decodingUnitIdx; - delete sei; + InputBitstream bsTmp(*bs); + setBitstream(&bsTmp); + + SEIDecodingUnitInfo dui; + xParseSEIDecodingUnitInfo(dui, payloadSize, *bp, nuhLayerId, nullptr); + duiIdx = dui.decodingUnitIdx; + setBitstream(bs); } } - const size_t numSubPics = std::max<size_t>(sn.subpicId.size(), 1); + + auto payload = new uint8_t[payloadSize]; for (uint32_t j = 0; j < payloadSize; j++) { - sei_read_code(nullptr, 8, val, "payload_content"); - payload[j] = (uint8_t)val; + sei_read_code(nullptr, 8, symbol, "payload_content"); + payload[j] = symbol; } + + auto&& subpicId = !sn.subpicId.empty() ? sn.subpicId : std::vector<uint16_t>{ 0 }; + uint8_t* payloadTemp = payload; + if (!sn.olsIdx.empty()) { for (uint32_t j = 0; j < sn.olsIdx.size(); j++) { - for (uint32_t k = 0; k < numSubPics; k++) + for (uint32_t k = 0; k < subpicId.size(); k++) { - if (j == 0 && k == 0) + if (j != 0 || k != 0) { - seiList->push_back(SeiPayload{ payloadType, sn.olsIdx[j], false, payloadSize, payload, duiIdx, - !sn.subpicId.empty() ? sn.subpicId[k] : 0 }); - } - else - { - uint8_t *payloadTemp = new uint8_t[payloadSize]; - memcpy(payloadTemp, payload, payloadSize *sizeof(uint8_t)); - seiList->push_back(SeiPayload{ payloadType, sn.olsIdx[j], false, payloadSize, payloadTemp, duiIdx, - !sn.subpicId.empty() ? sn.subpicId[k] : 0 }); + payloadTemp = new uint8_t[payloadSize]; + std::copy_n(payload, payloadSize, payloadTemp); } + + seiList->push_back( + SeiPayload{ payloadType, sn.olsIdx[j], false, payloadSize, payloadTemp, duiIdx, subpicId[k] }); } } } else if (sn.allLayersFlag()) { - for (uint32_t k = 0; k < numSubPics; k++) + for (uint32_t k = 0; k < subpicId.size(); k++) { - if (k == 0) + if (k != 0) { - seiList->push_back(SeiPayload{ payloadType, nuhLayerId, true, payloadSize, payload, duiIdx, - !sn.subpicId.empty() ? sn.subpicId[k] : 0 }); - } - else - { - uint8_t *payloadTemp = new uint8_t[payloadSize]; - memcpy(payloadTemp, payload, payloadSize *sizeof(uint8_t)); - seiList->push_back( - SeiPayload{ payloadType, nuhLayerId, true, payloadSize, payloadTemp, duiIdx, sn.subpicId[k] }); + payloadTemp = new uint8_t[payloadSize]; + memcpy(payloadTemp, payload, payloadSize * sizeof(uint8_t)); } + + seiList->push_back(SeiPayload{ payloadType, nuhLayerId, true, payloadSize, payloadTemp, duiIdx, subpicId[k] }); } } else { for (uint32_t j = 0; j < sn.layerId.size(); j++) { - for (uint32_t k = 0; k < numSubPics; k++) + for (uint32_t k = 0; k < subpicId.size(); k++) { - if (j == 0 && k == 0) + if (j != 0 || k != 0) { - seiList->push_back(SeiPayload{ payloadType, sn.layerId[j], false, payloadSize, payload, duiIdx, - !sn.subpicId.empty() ? sn.subpicId[k] : 0 }); - } - else - { - uint8_t *payloadTemp = new uint8_t[payloadSize]; - memcpy(payloadTemp, payload, payloadSize *sizeof(uint8_t)); - seiList->push_back(SeiPayload{ payloadType, sn.layerId[j], false, payloadSize, payloadTemp, duiIdx, - !sn.subpicId.empty() ? sn.subpicId[k] : 0 }); + payloadTemp = new uint8_t[payloadSize]; + memcpy(payloadTemp, payload, payloadSize * sizeof(uint8_t)); } + + seiList->push_back( + SeiPayload{ payloadType, sn.layerId[j], false, payloadSize, payloadTemp, duiIdx, subpicId[k] }); } } } -- GitLab