Bug 1290371 - handle files with audio and video tracks but no samples at all; r?jya draft
authorKaku Kuo <tkuo@mozilla.com>
Tue, 02 Aug 2016 10:13:24 +0800
changeset 395467 935108e121d715e6f00140b9ce24e96d33404cc1
parent 394995 ffac2798999c5b84f1b4605a1280994bb665a406
child 526999 ff7ff1dd2a73b31cea71dd097cc763058aeef23a
push id24779
push usertkuo@mozilla.com
push dateTue, 02 Aug 2016 08:44:38 +0000
reviewersjya
bugs1290371
milestone51.0a1
Bug 1290371 - handle files with audio and video tracks but no samples at all; r?jya MozReview-Commit-ID: BlaThAn5xcx
dom/media/MediaFormatReader.cpp
--- a/dom/media/MediaFormatReader.cpp
+++ b/dom/media/MediaFormatReader.cpp
@@ -1647,25 +1647,37 @@ MediaFormatReader::SetSeekTarget(const S
   mFallbackSeekTime = mPendingSeekTime = Some(target.GetTime());
 }
 
 TimeUnit
 MediaFormatReader::DemuxStartTime()
 {
   MOZ_ASSERT(OnTaskQueue());
   MOZ_ASSERT(!ForceZeroStartTime());
-  MOZ_ASSERT((!HasAudio() || mAudio.mFirstDemuxedSampleTime.isSome()) &&
-             (!HasVideo() || mVideo.mFirstDemuxedSampleTime.isSome()));
+
+  TimeUnit audioStartTime = TimeUnit::FromInfinity();
+  TimeUnit videoStartTime = TimeUnit::FromInfinity();
 
-  return std::min(HasAudio()
-                  ? mAudio.mFirstDemuxedSampleTime.ref()
-                  : TimeUnit::FromInfinity(),
-                  HasVideo()
-                  ? mVideo.mFirstDemuxedSampleTime.ref()
-                  : TimeUnit::FromInfinity());
+  if (HasAudio()) {
+    if (mAudio.mFirstDemuxedSampleTime.isSome()) {
+      audioStartTime = mAudio.mFirstDemuxedSampleTime.ref();
+    } else {
+      audioStartTime = TimeUnit::FromMicroseconds(0);
+    }
+  }
+
+  if (HasVideo()) {
+    if (mVideo.mFirstDemuxedSampleTime.isSome()) {
+      videoStartTime = mVideo.mFirstDemuxedSampleTime.ref();
+    } else {
+      videoStartTime = TimeUnit::FromMicroseconds(0);
+    }
+  }
+
+  return std::min(audioStartTime, videoStartTime);
 }
 
 void
 MediaFormatReader::ScheduleSeek()
 {
   if (mSeekScheduled) {
     return;
   }