Bug 1363668: P3. Assert that no error can occur while an internal seek is pending. r=jwwang

An internal seek occurs when we've reached a data gap, EOS or a previous error got skipped.

During this time, the decoder has been either flushed or shut down.

MozReview-Commit-ID: 69OBaZz4ZNq

--HG--
extra : rebase_source : aecac0d3872069567cf722ebfd338eef36a52d39
This commit is contained in:
Jean-Yves Avenard 2017-05-12 14:16:33 +02:00
Родитель 0c97eee924
Коммит 5b33cd4ec6
1 изменённых файлов: 5 добавлений и 3 удалений

Просмотреть файл

@ -2346,6 +2346,8 @@ MediaFormatReader::Update(TrackType aTrack)
}
if (decoder.mError && !decoder.HasFatalError()) {
MOZ_RELEASE_ASSERT(!decoder.HasInternalSeekPending(),
"No error can occur while an internal seek is pending");
bool needsNewDecoder =
decoder.mError.ref() == NS_ERROR_DOM_MEDIA_NEED_NEW_DECODER;
if (!needsNewDecoder
@ -2370,9 +2372,9 @@ MediaFormatReader::Update(TrackType aTrack)
}
TimeUnit nextKeyframe;
if (aTrack == TrackType::kVideoTrack && !decoder.HasInternalSeekPending()
&& NS_SUCCEEDED(
decoder.mTrackDemuxer->GetNextRandomAccessPoint(&nextKeyframe))) {
if (aTrack == TrackType::kVideoTrack &&
NS_SUCCEEDED(
decoder.mTrackDemuxer->GetNextRandomAccessPoint(&nextKeyframe))) {
SkipVideoDemuxToNextKeyFrame(
decoder.mLastDecodedSampleTime.refOr(TimeInterval()).Length());
} else if (aTrack == TrackType::kAudioTrack) {