mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-06-01 00:09:57 +00:00
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:
@@ -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()) {
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user