From: Moritz Bunkus Date: Mon, 22 Jun 2020 10:02:41 +0000 (+0200) Subject: KaxCuesData: add PositionSet overrides for KaxSimpleBlock X-Git-Tag: release-1.6.0~5 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ffc8f9219dc5e86f28babe03856bf8cf8376b29b;p=libmatroska KaxCuesData: add PositionSet overrides for KaxSimpleBlock --- diff --git a/matroska/KaxCuesData.h b/matroska/KaxCuesData.h index ec875ff..56b405d 100644 --- a/matroska/KaxCuesData.h +++ b/matroska/KaxCuesData.h @@ -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; diff --git a/src/KaxCuesData.cpp b/src/KaxCuesData.cpp index adcc0dd..7a18231 100644 --- a/src/KaxCuesData.cpp +++ b/src/KaxCuesData.cpp @@ -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(*this); *static_cast(&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(BlockGroup.FindFirstElt(EBML_INFO(KaxCodecState))); + if (BlockGroup != nullptr) { + const KaxCodecState *CodecState = static_cast(BlockGroup->FindFirstElt(EBML_INFO(KaxCodecState))); if (CodecState != nullptr) { auto &CueCodecState = AddNewChild(NewPositions); - *static_cast(&CueCodecState) = BlockGroup.GetParentCluster()->GetParentSegment()->GetRelativePosition(CodecState->GetElementPosition()); + *static_cast(&CueCodecState) = BlockGroup->GetParentCluster()->GetParentSegment()->GetRelativePosition(CodecState->GetElementPosition()); } }