From a7bbb6c8d27805746635e2179dac3c4a4c2bd563 Mon Sep 17 00:00:00 2001 From: trav90 Date: Thu, 4 May 2017 02:24:33 -0500 Subject: [PATCH] Add ability to retrieve init range to ContainerParser Currently, we always assume that the init segment starts at offset 0. But this doesn't have to always be true. --- dom/media/mediasource/ContainerParser.cpp | 12 ++++++++++-- dom/media/mediasource/ContainerParser.h | 4 +++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/dom/media/mediasource/ContainerParser.cpp b/dom/media/mediasource/ContainerParser.cpp index afb3f8c0e2..98e7f89751 100644 --- a/dom/media/mediasource/ContainerParser.cpp +++ b/dom/media/mediasource/ContainerParser.cpp @@ -98,7 +98,13 @@ ContainerParser::InitData() MediaByteRange ContainerParser::MediaSegmentRange() { - return mCompleteByteRange; + return mCompleteMediaSegmentRange; +} + +MediaByteRange +ContainerParser::InitSegmentRange() +{ + return mCompleteInitSegmentRange; } class WebMContainerParser : public ContainerParser { @@ -209,6 +215,7 @@ public: // Super unlikely OOM return false; } + mCompleteInitSegmentRange = MediaByteRange(0, mParser.mInitEndOffset); char* buffer = reinterpret_cast(mInitData->Elements()); mResource->ReadFromCache(buffer, 0, mParser.mInitEndOffset); MSE_DEBUG(WebMContainerParser, "Stashed init of %u bytes.", @@ -337,6 +344,7 @@ public: if (initSegment || !HasCompleteInitData()) { MediaByteRange& range = mParser->mInitRange; if (range.Length()) { + mCompleteInitSegmentRange = range; if (!mInitData->SetLength(range.Length())) { // Super unlikely OOM return false; @@ -354,7 +362,7 @@ public: mp4_demuxer::Interval compositionRange = mParser->GetCompositionRange(byteRanges); - mCompleteByteRange = mParser->FirstCompleteMediaSegment(); + mCompleteMediaSegmentRange = mParser->FirstCompleteMediaSegment(); mResource->EvictData(mParser->mOffset, mParser->mOffset); if (compositionRange.IsNull()) { diff --git a/dom/media/mediasource/ContainerParser.h b/dom/media/mediasource/ContainerParser.h index 12c008828e..868f7dd0b8 100644 --- a/dom/media/mediasource/ContainerParser.h +++ b/dom/media/mediasource/ContainerParser.h @@ -55,6 +55,7 @@ public: // Return the byte range of the first complete media segment or an empty // range if not complete. MediaByteRange MediaSegmentRange(); + MediaByteRange InitSegmentRange(); static ContainerParser* CreateForMIMEType(const nsACString& aType); @@ -62,7 +63,8 @@ protected: nsRefPtr mInitData; nsRefPtr mResource; bool mHasInitData; - MediaByteRange mCompleteByteRange; + MediaByteRange mCompleteMediaSegmentRange; + MediaByteRange mCompleteInitSegmentRange; const nsCString mType; };