Bug 1389304 - Sanitize the obtained buffered ranges obtained from TrackDemuxer in MFR.
MozReview-Commit-ID: EBPOsFzg3pi
--- a/dom/media/MediaFormatReader.cpp
+++ b/dom/media/MediaFormatReader.cpp
@@ -3101,23 +3101,25 @@ MediaFormatReader::UpdateBuffered()
if (HasAudio() && HasVideo()) {
intervals = media::Intersection(mVideo.mTimeRanges, mAudio.mTimeRanges);
} else if (HasAudio()) {
intervals = mAudio.mTimeRanges;
} else if (HasVideo()) {
intervals = mVideo.mTimeRanges;
}
- if (!intervals.Length() || intervals.GetStart() == TimeUnit::Zero()) {
- // IntervalSet already starts at 0 or is empty, nothing to shift.
- mBuffered = intervals;
- } else {
- mBuffered =
- intervals.Shift(TimeUnit::Zero() - mInfo.mStartTime);
+ if (intervals.Length() && intervals.GetStart() != TimeUnit::Zero()) {
+ // We need to shift IntervalSet which is not empty and does not start at 0.
+ intervals = intervals.Shift(TimeUnit::Zero() - mInfo.mStartTime);
}
+
+ // The intervals should be at least bounded to values equal to or greater than 0.
+ media::TimeIntervals boundary_intervals = TimeIntervals(
+ TimeInterval(TimeUnit::FromMicroseconds(0), TimeUnit::FromInfinity()));
+ mBuffered = media::Intersection(intervals, boundary_intervals);
}
layers::ImageContainer*
MediaFormatReader::GetImageContainer()
{
return mVideoFrameContainer ? mVideoFrameContainer->GetImageContainer()
: nullptr;
}