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.
This commit is contained in:
trav90
2017-05-04 02:24:33 -05:00
committed by roytam1
parent 319f10d372
commit a7bbb6c8d2
2 changed files with 13 additions and 3 deletions
+10 -2
View File
@@ -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<char*>(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<mp4_demuxer::Microseconds> compositionRange =
mParser->GetCompositionRange(byteRanges);
mCompleteByteRange = mParser->FirstCompleteMediaSegment();
mCompleteMediaSegmentRange = mParser->FirstCompleteMediaSegment();
mResource->EvictData(mParser->mOffset, mParser->mOffset);
if (compositionRange.IsNull()) {
+3 -1
View File
@@ -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<MediaLargeByteBuffer> mInitData;
nsRefPtr<SourceBufferResource> mResource;
bool mHasInitData;
MediaByteRange mCompleteByteRange;
MediaByteRange mCompleteMediaSegmentRange;
MediaByteRange mCompleteInitSegmentRange;
const nsCString mType;
};