Bug 1290371 - handle files with audio and video tracks but no samples at all; r?jya
MozReview-Commit-ID: BlaThAn5xcx
--- 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;
}