Bug 1354457 - Remove old suspend logic from media encoder. r?pehrsons draft
authorBryce Van Dyk <bvandyk@mozilla.com>
Fri, 05 May 2017 15:12:03 +1200
changeset 577596 6f51bc4c67651e336d2676b169b1c4abb46670c4
parent 577595 39d0c0741414a9956211efb87e3dea6ad1185f18
child 577597 14e261387598aff5adc9953a191a9d9b993fc302
push id58728
push userbvandyk@mozilla.com
push dateMon, 15 May 2017 02:52:45 +0000
reviewerspehrsons
bugs1354457
milestone55.0a1
Bug 1354457 - Remove old suspend logic from media encoder. r?pehrsons The switch from duration to time stamp based samples has removed the need for this logic. MozReview-Commit-ID: 7J6oQf7qn4u
dom/media/encoder/MediaEncoder.cpp
dom/media/encoder/MediaEncoder.h
--- a/dom/media/encoder/MediaEncoder.cpp
+++ b/dom/media/encoder/MediaEncoder.cpp
@@ -47,30 +47,31 @@ MediaEncoder::SetDirectConnect(bool aCon
 
 void
 MediaEncoder::NotifyRealtimeData(MediaStreamGraph* aGraph,
                                  TrackID aID,
                                  StreamTime aTrackOffset,
                                  uint32_t aTrackEvents,
                                  const MediaSegment& aRealtimeMedia)
 {
-  if (mSuspended == RECORD_NOT_SUSPENDED) {
-    // Process the incoming raw track data from MediaStreamGraph, called on the
-    // thread of MediaStreamGraph.
-    if (mAudioEncoder && aRealtimeMedia.GetType() == MediaSegment::AUDIO) {
-      mAudioEncoder->NotifyQueuedTrackChanges(aGraph, aID,
-                                              aTrackOffset, aTrackEvents,
-                                              aRealtimeMedia);
-    } else if (mVideoEncoder &&
-               aRealtimeMedia.GetType() == MediaSegment::VIDEO &&
-               aTrackEvents != TrackEventCommand::TRACK_EVENT_NONE) {
-      mVideoEncoder->NotifyQueuedTrackChanges(aGraph, aID,
-                                              aTrackOffset, aTrackEvents,
-                                              aRealtimeMedia);
-    }
+  if (mSuspended) {
+    return;
+  }
+  // Process the incoming raw track data from MediaStreamGraph, called on the
+  // thread of MediaStreamGraph.
+  if (mAudioEncoder && aRealtimeMedia.GetType() == MediaSegment::AUDIO) {
+    mAudioEncoder->NotifyQueuedTrackChanges(aGraph, aID,
+                                            aTrackOffset, aTrackEvents,
+                                            aRealtimeMedia);
+  } else if (mVideoEncoder &&
+              aRealtimeMedia.GetType() == MediaSegment::VIDEO &&
+              aTrackEvents != TrackEventCommand::TRACK_EVENT_NONE) {
+    mVideoEncoder->NotifyQueuedTrackChanges(aGraph, aID,
+                                            aTrackOffset, aTrackEvents,
+                                            aRealtimeMedia);
   }
 }
 
 void
 MediaEncoder::NotifyQueuedTrackChanges(MediaStreamGraph* aGraph,
                                        TrackID aID,
                                        StreamTime aTrackOffset,
                                        TrackEventCommand aTrackEvents,
@@ -86,52 +87,28 @@ MediaEncoder::NotifyQueuedTrackChanges(M
       if (aQueuedMedia.GetType() == MediaSegment::VIDEO) {
         VideoSegment segment;
         NotifyRealtimeData(aGraph, aID, aTrackOffset, aTrackEvents, segment);
       } else {
         AudioSegment segment;
         NotifyRealtimeData(aGraph, aID, aTrackOffset, aTrackEvents, segment);
       }
     }
-    if (mSuspended == RECORD_RESUMED) {
-      if (mVideoEncoder) {
-        if (aQueuedMedia.GetType() == MediaSegment::VIDEO) {
-          // insert a null frame of duration equal to the first segment passed
-          // after Resume(), so it'll get added to one of the DirectListener frames
-          VideoSegment segment;
-          gfx::IntSize size(0,0);
-          segment.AppendFrame(nullptr, aQueuedMedia.GetDuration(), size,
-                              PRINCIPAL_HANDLE_NONE);
-          mVideoEncoder->NotifyQueuedTrackChanges(aGraph, aID,
-                                                  aTrackOffset, aTrackEvents,
-                                                  segment);
-          mSuspended = RECORD_NOT_SUSPENDED;
-        }
-      } else {
-        mSuspended = RECORD_NOT_SUSPENDED; // no video
-      }
-    }
   }
 }
 
 void
 MediaEncoder::NotifyQueuedAudioData(MediaStreamGraph* aGraph, TrackID aID,
                                     StreamTime aTrackOffset,
                                     const AudioSegment& aQueuedMedia,
                                     MediaStream* aInputStream,
                                     TrackID aInputTrackID)
 {
   if (!mDirectConnected) {
     NotifyRealtimeData(aGraph, aID, aTrackOffset, 0, aQueuedMedia);
-  } else {
-    if (mSuspended == RECORD_RESUMED) {
-      if (!mVideoEncoder) {
-        mSuspended = RECORD_NOT_SUSPENDED; // no video
-      }
-    }
   }
 }
 
 void
 MediaEncoder::NotifyEvent(MediaStreamGraph* aGraph,
                           MediaStreamGraphEvent event)
 {
   // In case that MediaEncoder does not receive a TRACK_EVENT_ENDED event.
--- a/dom/media/encoder/MediaEncoder.h
+++ b/dom/media/encoder/MediaEncoder.h
@@ -102,40 +102,32 @@ public :
     , mState(MediaEncoder::ENCODE_METADDATA)
     , mShutdown(false)
     , mDirectConnected(false)
     , mSuspended(false)
 {}
 
   ~MediaEncoder() {};
 
-  enum SuspendState {
-    RECORD_NOT_SUSPENDED,
-    RECORD_SUSPENDED,
-    RECORD_RESUMED
-  };
-
   /* Note - called from control code, not on MSG threads. */
   void Suspend()
   {
     MOZ_ASSERT(NS_IsMainThread());
-    mSuspended = RECORD_SUSPENDED;
+    mSuspended = true;
     mVideoSink->Suspend();
   }
 
   /**
    * Note - called from control code, not on MSG threads.
    * Arm to collect the Duration of the next video frame and give it
    * to the next frame, in order to avoid any possible loss of sync. */
   void Resume()
   {
     MOZ_ASSERT(NS_IsMainThread());
-    if (mSuspended == RECORD_SUSPENDED) {
-      mSuspended = RECORD_RESUMED;
-    }
+    mSuspended = false;
     mVideoSink->Resume();
   }
 
   /**
    * Tells us which Notify to pay attention to for media
    */
   void SetDirectConnect(bool aConnected);
 
@@ -247,17 +239,17 @@ private:
   nsAutoPtr<VideoTrackEncoder> mVideoEncoder;
   RefPtr<MediaStreamVideoRecorderSink> mVideoSink;
   TimeStamp mStartTime;
   nsString mMIMEType;
   int64_t mSizeOfBuffer;
   int mState;
   bool mShutdown;
   bool mDirectConnected;
-  Atomic<int> mSuspended;
+  Atomic<bool> mSuspended;
   // Get duration from create encoder, for logging purpose
   double GetEncodeTimeStamp()
   {
     TimeDuration decodeTime;
     decodeTime = TimeStamp::Now() - mStartTime;
     return decodeTime.ToMilliseconds();
   }
 };