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