nsRefPtr<MediaDecoderReader::SeekPromise> MP4Reader::Seek(int64_t aTime, int64_t aEndTime) { LOG("aTime=(%lld)", aTime); MOZ_ASSERT(GetTaskQueue()->IsCurrentThreadIn()); MonitorAutoLock mon(mDemuxerMonitor); if (!mDecoder->GetResource()->IsTransportSeekable() || !mDemuxer->CanSeek()) { VLOG("Seek() END (Unseekable)"); return SeekPromise::CreateAndReject(NS_ERROR_FAILURE, __func__); } int64_t seekTime = aTime; mQueuedVideoSample = nullptr; if (mDemuxer->HasValidVideo()) { mVideo.mTrackDemuxer->Seek(seekTime); mQueuedVideoSample = PopSampleLocked(kVideo); if (mQueuedVideoSample) { seekTime = mQueuedVideoSample->mMp4Sample->composition_timestamp; } } if (mDemuxer->HasValidAudio()) { mAudio.mTrackDemuxer->Seek(seekTime); } LOG("aTime=%lld exit", aTime); return SeekPromise::CreateAndResolve(seekTime, __func__); }
MediaSample* MP4Reader::PopSample(TrackType aTrack) { MonitorAutoLock mon(mDemuxerMonitor); return PopSampleLocked(aTrack); }
already_AddRefed<MediaRawData> MP4Reader::PopSample(TrackType aTrack) { MonitorAutoLock mon(mDemuxerMonitor); return PopSampleLocked(aTrack); }