Bug 1272182: P1. Ignore invalid video tracks. r?cpearce
MozReview-Commit-ID: BdCdLkCMBRt
--- a/dom/media/MediaFormatReader.cpp
+++ b/dom/media/MediaFormatReader.cpp
@@ -282,24 +282,30 @@ MediaFormatReader::OnDemuxerInitDone(nsr
if (videoActive) {
// We currently only handle the first video track.
mVideo.mTrackDemuxer = mDemuxer->GetTrackDemuxer(TrackInfo::kVideoTrack, 0);
if (!mVideo.mTrackDemuxer) {
mMetadataPromise.Reject(ReadMetadataFailureReason::METADATA_ERROR, __func__);
return;
}
- mInfo.mVideo = *mVideo.mTrackDemuxer->GetInfo()->GetAsVideoInfo();
- UniquePtr<TrackInfo> info(mVideo.mTrackDemuxer->GetInfo());
- for (const MetadataTag& tag : info->mTags) {
- tags->Put(tag.mKey, tag.mValue);
+ UniquePtr<TrackInfo> videoInfo = mVideo.mTrackDemuxer->GetInfo();
+ videoActive = videoInfo && videoInfo->IsValid();
+ if (videoActive) {
+ mInfo.mVideo = *videoInfo->GetAsVideoInfo();
+ for (const MetadataTag& tag : videoInfo->mTags) {
+ tags->Put(tag.mKey, tag.mValue);
+ }
+ mVideo.mCallback = new DecoderCallback(this, TrackInfo::kVideoTrack);
+ mVideo.mTimeRanges = mVideo.mTrackDemuxer->GetBuffered();
+ mTrackDemuxersMayBlock |= mVideo.mTrackDemuxer->GetSamplesMayBlock();
+ } else {
+ mVideo.mTrackDemuxer->BreakCycles();
+ mVideo.mTrackDemuxer = nullptr;
}
- mVideo.mCallback = new DecoderCallback(this, TrackInfo::kVideoTrack);
- mVideo.mTimeRanges = mVideo.mTrackDemuxer->GetBuffered();
- mTrackDemuxersMayBlock |= mVideo.mTrackDemuxer->GetSamplesMayBlock();
}
bool audioActive = !!mDemuxer->GetNumberTracks(TrackInfo::kAudioTrack);
if (audioActive) {
mAudio.mTrackDemuxer = mDemuxer->GetTrackDemuxer(TrackInfo::kAudioTrack, 0);
if (!mAudio.mTrackDemuxer) {
mMetadataPromise.Reject(ReadMetadataFailureReason::METADATA_ERROR, __func__);
return;