Issue #1536 - Part 2: Parse content to decide whether it's a media segment.

This commit is contained in:
wolfbeast 2020-05-07 13:40:21 +02:00 committed by Roy Tam
commit c604c8363d
3 changed files with 27 additions and 23 deletions

View file

@ -275,6 +275,12 @@ WebMBufferedParser::EndSegmentOffset(int64_t aOffset)
return mBlockEndOffset;
}
int64_t
WebMBufferedParser::GetClusterOffset() const
{
return mClusterOffset;
}
// SyncOffsetComparator and TimeComparator are slightly confusing, in that
// the nsTArray they're used with (mTimeMapping) is sorted by mEndOffset and
// these comparators are used on the other fields of WebMTimeDataOffset.

View file

@ -67,7 +67,7 @@ struct WebMBufferedParser
, mVIntLeft(0)
, mBlockSize(0)
, mClusterTimecode(0)
, mClusterOffset(0)
, mClusterOffset(-1)
, mClusterEndOffset(-1)
, mBlockOffset(0)
, mBlockTimecode(0)
@ -87,6 +87,12 @@ struct WebMBufferedParser
return mTimecodeScale;
}
// Use this function when we would only feed media segment for the parser.
void AppendMediaSegmentOnly()
{
mGotTimecodeScale = true;
}
// If this parser is not expected to parse a segment info, it must be told
// the appropriate timecode scale to use from elsewhere.
void SetTimecodeScale(uint32_t aTimecodeScale) {
@ -115,6 +121,9 @@ struct WebMBufferedParser
// This allows to determine the end of the interval containg aOffset.
int64_t EndSegmentOffset(int64_t aOffset);
// Return the Cluster offset, return -1 if we can't find the Cluster.
int64_t GetClusterOffset() const;
// The offset at which this parser started parsing. Used to merge
// adjacent parsers, in which case the later parser adopts the earlier
// parser's mStartOffset.
@ -232,7 +241,7 @@ private:
// Start offset of the cluster currently being parsed. Used as the sync
// point offset for the offset-to-time mapping as each block timecode is
// been parsed.
// been parsed. -1 if unknown.
int64_t mClusterOffset;
// End offset of the cluster currently being parsed. -1 if unknown.