зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1212164: Prevent use of demuxer before it is ready. r=cpearce
This commit is contained in:
Родитель
0eb9204d80
Коммит
339a21eccf
|
@ -63,9 +63,10 @@ MediaFormatReader::MediaFormatReader(AbstractMediaDecoder* aDecoder,
|
|||
MediaDataDemuxer* aDemuxer,
|
||||
TaskQueue* aBorrowedTaskQueue)
|
||||
: MediaDecoderReader(aDecoder, aBorrowedTaskQueue)
|
||||
, mDemuxer(aDemuxer)
|
||||
, mAudio(this, MediaData::AUDIO_DATA, Preferences::GetUint("media.audio-decode-ahead", 2))
|
||||
, mVideo(this, MediaData::VIDEO_DATA, Preferences::GetUint("media.video-decode-ahead", 2))
|
||||
, mDemuxer(aDemuxer)
|
||||
, mDemuxerInitDone(false)
|
||||
, mLastReportedNumDecodedFrames(0)
|
||||
, mLayersBackendType(layers::LayersBackend::LAYERS_NONE)
|
||||
, mInitDone(false)
|
||||
|
@ -272,6 +273,8 @@ MediaFormatReader::OnDemuxerInitDone(nsresult)
|
|||
MOZ_ASSERT(OnTaskQueue());
|
||||
mDemuxerInitRequest.Complete();
|
||||
|
||||
mDemuxerInitDone = true;
|
||||
|
||||
// To decode, we need valid video and a place to put it.
|
||||
bool videoActive = !!mDemuxer->GetNumberTracks(TrackInfo::kVideoTrack) &&
|
||||
mDecoder->GetImageContainer();
|
||||
|
@ -1593,7 +1596,8 @@ MediaFormatReader::NotifyDemuxer(uint32_t aLength, int64_t aOffset)
|
|||
MOZ_ASSERT(OnTaskQueue());
|
||||
|
||||
LOGV("aLength=%u, aOffset=%lld", aLength, aOffset);
|
||||
if (mShutdown || !mDemuxer) {
|
||||
if (mShutdown || !mDemuxer ||
|
||||
(!mDemuxerInitDone && !mDemuxerInitRequest.Exists())) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -152,7 +152,6 @@ private:
|
|||
|
||||
size_t SizeOfQueue(TrackType aTrack);
|
||||
|
||||
nsRefPtr<MediaDataDemuxer> mDemuxer;
|
||||
nsRefPtr<PDMFactory> mPlatform;
|
||||
|
||||
class DecoderCallback : public MediaDataDecoderCallback {
|
||||
|
@ -355,6 +354,8 @@ private:
|
|||
void OnDecoderInitFailed(MediaDataDecoder::DecoderFailureReason aReason);
|
||||
|
||||
// Demuxer objects.
|
||||
nsRefPtr<MediaDataDemuxer> mDemuxer;
|
||||
bool mDemuxerInitDone;
|
||||
void OnDemuxerInitDone(nsresult);
|
||||
void OnDemuxerInitFailed(DemuxerFailureReason aFailure);
|
||||
MozPromiseRequestHolder<MediaDataDemuxer::InitPromise> mDemuxerInitRequest;
|
||||
|
|
Загрузка…
Ссылка в новой задаче