Bug 1284399. Part 5 - remove SeekTask::mSeekJob. r=kaku draft
authorJW Wang <jwwang@mozilla.com>
Tue, 05 Jul 2016 13:58:51 +0800
changeset 386929 7bec5865ef850beaaed12e7f55c4dd0888939675
parent 386928 0ed92f1b6fd88f94fac1049fa403f926ded3c0ce
child 386930 2eb997b9a13a7b9a3390700aceef9fbfb77268a2
push id22850
push userjwwang@mozilla.com
push dateWed, 13 Jul 2016 02:19:16 +0000
reviewerskaku
bugs1284399
milestone50.0a1
Bug 1284399. Part 5 - remove SeekTask::mSeekJob. r=kaku Drop{Audio,Video}UpToSeekTarget() is always called before Discard() so mSeekJob.Exists() is guaranteed to be true. MozReview-Commit-ID: Cezbqs0JKm2
dom/media/AccurateSeekTask.cpp
dom/media/SeekTask.cpp
dom/media/SeekTask.h
--- a/dom/media/AccurateSeekTask.cpp
+++ b/dom/media/AccurateSeekTask.cpp
@@ -40,17 +40,17 @@ AccurateSeekTask::AccurateSeekTask(const
                                    MediaDecoderReaderWrapper* aReader,
                                    SeekJob& aSeekJob,
                                    const MediaInfo& aInfo,
                                    const media::TimeUnit& aEnd,
                                    int64_t aCurrentMediaTime)
   : SeekTask(aDecoderID, aThread, aReader, aSeekJob)
   , mCurrentTimeBeforeSeek(media::TimeUnit::FromMicroseconds(aCurrentMediaTime))
   , mAudioRate(aInfo.mAudio.mRate)
-  , mDoneAudioSeeking(!aInfo.HasAudio() || mSeekJob.mTarget.IsVideoOnly())
+  , mDoneAudioSeeking(!aInfo.HasAudio() || mTarget.IsVideoOnly())
   , mDoneVideoSeeking(!aInfo.HasVideo())
 {
   AssertOwnerThread();
 
   // Bound the seek time to be inside the media range.
   NS_ASSERTION(aEnd.ToMicroseconds() != -1, "Should know end time by now");
   mTarget.SetTime(std::max(media::TimeUnit(), std::min(mTarget.GetTime(), aEnd)));
 
@@ -120,17 +120,17 @@ AccurateSeekTask::RequestVideoData()
 }
 
 nsresult
 AccurateSeekTask::DropAudioUpToSeekTarget(MediaData* aSample)
 {
   AssertOwnerThread();
 
   RefPtr<AudioData> audio(aSample->As<AudioData>());
-  MOZ_ASSERT(audio && mSeekJob.Exists() && mTarget.IsAccurate());
+  MOZ_ASSERT(audio && mTarget.IsAccurate());
 
   CheckedInt64 sampleDuration = FramesToUsecs(audio->mFrames, mAudioRate);
   if (!sampleDuration.isValid()) {
     return NS_ERROR_FAILURE;
   }
 
   if (audio->mTime + sampleDuration.value() <= mTarget.GetTime().ToMicroseconds()) {
     // Our seek target lies after the frames in this AudioData. Don't
@@ -203,17 +203,16 @@ nsresult
 AccurateSeekTask::DropVideoUpToSeekTarget(MediaData* aSample)
 {
   AssertOwnerThread();
 
   RefPtr<VideoData> video(aSample->As<VideoData>());
   MOZ_ASSERT(video);
   DECODER_LOG("DropVideoUpToSeekTarget() frame [%lld, %lld]",
               video->mTime, video->GetEndTime());
-  MOZ_ASSERT(mSeekJob.Exists());
   const int64_t target = mTarget.GetTime().ToMicroseconds();
 
   // If the frame end time is less than the seek target, we won't want
   // to display this frame after the seek, so discard it.
   if (target >= video->GetEndTime()) {
     DECODER_LOG("DropVideoUpToSeekTarget() pop video frame [%lld, %lld] target=%lld",
                 video->mTime, video->GetEndTime(), target);
     mFirstVideoFrameAfterSeek = video;
@@ -303,17 +302,17 @@ AccurateSeekTask::OnAudioDecoded(MediaDa
   // resolved.
 
   SAMPLE_LOG("OnAudioDecoded [%lld,%lld] disc=%d",
     audio->mTime, audio->GetEndTime(), audio->mDiscontinuity);
 
   // Video-only seek doesn't reset audio decoder. There might be pending audio
   // requests when AccurateSeekTask::Seek() begins. We will just store the data
   // without checking |mDiscontinuity| or calling DropAudioUpToSeekTarget().
-  if (mSeekJob.mTarget.IsVideoOnly()) {
+  if (mTarget.IsVideoOnly()) {
     mSeekedAudioData = audio.forget();
     return;
   }
 
   if (mFirstAudioSample) {
     mFirstAudioSample = false;
     MOZ_ASSERT(audio->mDiscontinuity);
   }
@@ -341,17 +340,17 @@ AccurateSeekTask::OnNotDecoded(MediaData
                                MediaDecoderReader::NotDecodedReason aReason)
 {
   AssertOwnerThread();
   MOZ_ASSERT(!mSeekTaskPromise.IsEmpty(), "Seek shouldn't be finished");
 
   SAMPLE_LOG("OnNotDecoded type=%d reason=%u", aType, aReason);
 
   // Ignore pending requests from video-only seek.
-  if (aType == MediaData::AUDIO_DATA && mSeekJob.mTarget.IsVideoOnly()) {
+  if (aType == MediaData::AUDIO_DATA && mTarget.IsVideoOnly()) {
     return;
   }
 
   if (aReason == MediaDecoderReader::DECODE_ERROR) {
     // If this is a decode error, delegate to the generic error path.
     RejectIfExist(__func__);
     return;
   }
@@ -451,17 +450,17 @@ AccurateSeekTask::SetCallbacks()
       OnNotDecoded(MediaData::VIDEO_DATA,
         aData.as<MediaDecoderReader::NotDecodedReason>());
     }
   });
 
   mAudioWaitCallback = mReader->AudioWaitCallback().Connect(
     OwnerThread(), [this] (WaitCallbackData aData) {
     // Ignore pending requests from video-only seek.
-    if (mSeekJob.mTarget.IsVideoOnly()) {
+    if (mTarget.IsVideoOnly()) {
       return;
     }
     if (aData.is<MediaData::Type>()) {
       RequestAudioData();
     }
   });
 
   mVideoWaitCallback = mReader->VideoWaitCallback().Connect(
--- a/dom/media/SeekTask.cpp
+++ b/dom/media/SeekTask.cpp
@@ -12,18 +12,17 @@ namespace mozilla {
 
 SeekTask::SeekTask(const void* aDecoderID,
                    AbstractThread* aThread,
                    MediaDecoderReaderWrapper* aReader,
                    SeekJob& aSeekJob)
   : mDecoderID(aDecoderID)
   , mOwnerThread(aThread)
   , mReader(aReader)
-  , mSeekJob(aSeekJob)
-  , mTarget(mSeekJob.mTarget)
+  , mTarget(aSeekJob.mTarget)
   , mIsDiscarded(false)
   , mIsAudioQueueFinished(false)
   , mIsVideoQueueFinished(false)
   , mNeedToStopPrerollingAudio(false)
   , mNeedToStopPrerollingVideo(false)
 {
   AssertOwnerThread();
 }
--- a/dom/media/SeekTask.h
+++ b/dom/media/SeekTask.h
@@ -79,17 +79,16 @@ protected:
    */
   const void* mDecoderID; // For logging.
   const RefPtr<AbstractThread> mOwnerThread;
   const RefPtr<MediaDecoderReaderWrapper> mReader;
 
   /*
    * Internal state.
    */
-  SeekJob& mSeekJob;
   SeekTarget& mTarget;
   MozPromiseHolder<SeekTaskPromise> mSeekTaskPromise;
   bool mIsDiscarded;
 
   /*
    * Information which are going to be returned to MDSM.
    */
   RefPtr<MediaData> mSeekedAudioData;