Bug 1201363 - Do not copy video segment to StreamTracks in TrackUnionStream. r?roc draft
authorctai <ctai@mozilla.com>
Thu, 31 Dec 2015 22:33:23 +0800
changeset 324274 2f3419720ad9a023a250902f3ba3d0f8eea29daf
parent 324273 b072bca5c2641d278defe1dba11c218ed52a8905
child 513347 5829b95dfacdd51a2b5364b7f54cabeb27fdfe0e
push id9869
push userbmo:ctai@mozilla.com
push dateFri, 22 Jan 2016 07:09:26 +0000
reviewersroc
bugs1201363
milestone46.0a1
Bug 1201363 - Do not copy video segment to StreamTracks in TrackUnionStream. r?roc Now everything is ready. We can make NotifyQueuedTrackChanges only triggered by TRACK_EVENT_CREATED and TRACK_EVENT_ENDED without breaking anything. Also we make TrackUnionStream no longer copying data in video case.
dom/media/MediaStreamGraph.cpp
dom/media/TrackUnionStream.cpp
--- a/dom/media/MediaStreamGraph.cpp
+++ b/dom/media/MediaStreamGraph.cpp
@@ -187,25 +187,16 @@ MediaStreamGraphImpl::ExtractPendingInpu
             l->NotifyQueuedTrackChanges(this, data->mID,
                                         offset, data->mCommands, *data->mData);
         }
       } else if (data->mData->GetType() == MediaSegment::AUDIO) {
         for (MediaStreamListener* l : aStream->mListeners) {
             l->NotifyQueuedAudioData(this, data->mID,
                                      offset, *(static_cast<AudioSegment*>(data->mData.get())));
         }
-      } else {
-        // Fixme: This part will be removed in the later changeset of this bug.
-        // It will be removed in changeset "Do not copy video segment to StreamTracks in TrackUnionStream."
-
-        // Dealing with video and not TRACK_CREATE and TRACK_END case.
-        for (MediaStreamListener* l : aStream->mListeners) {
-          l->NotifyQueuedTrackChanges(this, data->mID,
-                                      offset, data->mCommands, *data->mData);
-        }
       }
 
       if (data->mCommands & SourceMediaStream::TRACK_CREATE) {
         MediaSegment* segment = data->mData.forget();
         STREAM_LOG(LogLevel::Debug, ("SourceMediaStream %p creating track %d, start %lld, initial end %lld",
                                   aStream, data->mID, int64_t(data->mStart),
                                   int64_t(segment->GetDuration())));
 
--- a/dom/media/TrackUnionStream.cpp
+++ b/dom/media/TrackUnionStream.cpp
@@ -258,33 +258,30 @@ TrackUnionStream::TrackUnionStream(DOMMe
         segment->AppendNullData(ticks);
         STREAM_LOG(LogLevel::Verbose, ("TrackUnionStream %p appending %lld ticks of null data to track %d",
                    this, (long long)ticks, outputTrack->GetID()));
       } else if (InMutedCycle()) {
         segment->AppendNullData(ticks);
       } else {
         if (source->IsSuspended()) {
           segment->AppendNullData(aTo - aFrom);
-        } else {
+        } else if (segment->GetType() == MediaSegment::AUDIO) {
           MOZ_ASSERT(outputTrack->GetEnd() == GraphTimeToStreamTimeWithBlocking(interval.mStart),
                      "Samples missing");
           StreamTime inputStart = source->GraphTimeToStreamTimeWithBlocking(interval.mStart);
           segment->AppendSlice(*aInputTrack->GetSegment(),
                                std::min(inputTrackEndPoint, inputStart),
                                std::min(inputTrackEndPoint, inputEnd));
         }
       }
       ApplyTrackDisabling(outputTrack->GetID(), segment);
       for (uint32_t j = 0; j < mListeners.Length(); ++j) {
         MediaStreamListener* l = mListeners[j];
         // Separate Audio and Video.
         if (segment->GetType() == MediaSegment::AUDIO) {
           l->NotifyQueuedAudioData(Graph(), outputTrack->GetID(),
                                    outputStart, *static_cast<AudioSegment*>(segment));
-        } else {
-          l->NotifyQueuedTrackChanges(Graph(), outputTrack->GetID(),
-                                      outputStart, 0, *segment);
         }
       }
       outputTrack->GetSegment()->AppendFrom(segment);
     }
   }
 } // namespace mozilla