Bug 1199904: Only start decoding ahead after explicitly requesting data. r=gerald

Decode ahead will be stopped when seeking or when switching resolution.
This commit is contained in:
Jean-Yves Avenard 2015-08-29 21:01:13 +10:00
Родитель 50c382495e
Коммит fa4c46c19b
2 изменённых файлов: 3 добавлений и 3 удалений

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

@ -665,7 +665,6 @@ MediaFormatReader::RequestVideoData(bool aSkipToNextKeyframe,
media::TimeUnit timeThreshold{media::TimeUnit::FromMicroseconds(aTimeThreshold)};
if (ShouldSkip(aSkipToNextKeyframe, timeThreshold)) {
mVideo.mDecodingRequested = false;
Flush(TrackInfo::kVideoTrack);
nsRefPtr<VideoDataPromise> p = mVideo.mPromise.Ensure(__func__);
SkipVideoDemuxToNextKeyFrame(timeThreshold);
@ -1026,7 +1025,7 @@ MediaFormatReader::DecodeDemuxedSamples(TrackType aTrack,
decoder.mDecoder = nullptr;
if (sample->mKeyframe) {
decoder.mQueuedSamples.AppendElements(Move(samples));
ScheduleUpdate(aTrack);
NotifyDecodingRequested(aTrack);
} else {
MOZ_ASSERT(decoder.mTimeThreshold.isNothing());
LOG("Stream change occurred on a non-keyframe. Seeking to:%lld",
@ -1038,7 +1037,7 @@ MediaFormatReader::DecodeDemuxedSamples(TrackType aTrack,
[self, aTrack] (media::TimeUnit aTime) {
auto& decoder = self->GetDecoderData(aTrack);
decoder.mSeekRequest.Complete();
self->ScheduleUpdate(aTrack);
self->NotifyDecodingRequested(aTrack);
},
[self, aTrack] (DemuxerFailureReason aResult) {
auto& decoder = self->GetDecoderData(aTrack);

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

@ -289,6 +289,7 @@ private:
mReceivedNewData = false;
mDiscontinuity = true;
mQueuedSamples.Clear();
mDecodingRequested = false;
mOutputRequested = false;
mInputExhausted = false;
mNeedDraining = false;