]> granicus.if.org Git - libmatroska/commitdiff
KaxCuesData: add PositionSet overrides for KaxSimpleBlock
authorMoritz Bunkus <moritz@bunkus.org>
Mon, 22 Jun 2020 10:02:41 +0000 (12:02 +0200)
committerMoritz Bunkus <moritz@bunkus.org>
Mon, 22 Jun 2020 10:02:41 +0000 (12:02 +0200)
matroska/KaxCuesData.h
src/KaxCuesData.cpp

index ec875ff9259add2631aa10501911a010726eb638..56b405d771a273761d3f410a6c57c8915d6c6d26 100644 (file)
@@ -46,11 +46,14 @@ class KaxBlockGroup;
 class KaxBlockBlob;
 class KaxCueTrackPositions;
 class KaxInternalBlock;
+class KaxSimpleBlock;
 
 DECLARE_MKX_MASTER(KaxCuePoint)
   public:
     void PositionSet(const KaxBlockGroup & BlockReference, uint64 GlobalTimecodeScale);
     void PositionSet(const KaxBlockBlob & BlobReference, uint64 GlobalTimecodeScale);
+    void PositionSet(const KaxSimpleBlock & BlockReference, uint64 GlobalTimecodeScale);
+    void PositionSet(const KaxInternalBlock & BlockReference, const KaxBlockGroup *BlockGroup, uint64 GlobalTimecodeScale);
 
     virtual bool IsSmallerThan(const EbmlElement *Cmp) const;
 
index adcc0dda9aabd9684fc0320dedb3fb0c999a0bf1..7a1823140c5824915303173e35a562561312f1a4 100644 (file)
@@ -81,7 +81,22 @@ void KaxCuePoint::PositionSet(const KaxBlockGroup & BlockReference, uint64 Globa
 void KaxCuePoint::PositionSet(const KaxBlockBlob & BlobReference, uint64 GlobalTimecodeScale)
 {
   const KaxInternalBlock &BlockReference = BlobReference;
+  const KaxBlockGroup *BlockGroupPointer = nullptr;
 
+  if (!BlobReference.IsSimpleBlock()) {
+    const KaxBlockGroup &BlockGroup = BlobReference;
+    BlockGroupPointer = & BlockGroup;
+  }
+  PositionSet(BlockReference, BlockGroupPointer, GlobalTimecodeScale);
+}
+
+void KaxCuePoint::PositionSet(const KaxSimpleBlock & BlockReference, uint64 GlobalTimecodeScale)
+{
+  PositionSet(BlockReference, nullptr, GlobalTimecodeScale);
+}
+
+void KaxCuePoint::PositionSet(const KaxInternalBlock & BlockReference, const KaxBlockGroup *BlockGroup, uint64 GlobalTimecodeScale)
+{
   // fill me
   auto & NewTime = GetChild<KaxCueTime>(*this);
   *static_cast<EbmlUInteger*>(&NewTime) = BlockReference.GlobalTimecode() / GlobalTimecodeScale;
@@ -104,12 +119,11 @@ void KaxCuePoint::PositionSet(const KaxBlockBlob & BlobReference, uint64 GlobalT
   }
 #endif // MATROSKA_VERSION
 
-  if (!BlobReference.IsSimpleBlock()) {
-    const KaxBlockGroup &BlockGroup = BlobReference;
-    const KaxCodecState *CodecState = static_cast<KaxCodecState *>(BlockGroup.FindFirstElt(EBML_INFO(KaxCodecState)));
+  if (BlockGroup != nullptr) {
+    const KaxCodecState *CodecState = static_cast<KaxCodecState *>(BlockGroup->FindFirstElt(EBML_INFO(KaxCodecState)));
     if (CodecState != nullptr) {
       auto &CueCodecState = AddNewChild<KaxCueCodecState>(NewPositions);
-      *static_cast<EbmlUInteger*>(&CueCodecState) = BlockGroup.GetParentCluster()->GetParentSegment()->GetRelativePosition(CodecState->GetElementPosition());
+      *static_cast<EbmlUInteger*>(&CueCodecState) = BlockGroup->GetParentCluster()->GetParentSegment()->GetRelativePosition(CodecState->GetElementPosition());
     }
   }