Bug 1208371 - Assert when stream finishes but contains live tracks. r?roc draft
authorAndreas Pehrson <pehrsons@gmail.com>
Thu, 21 Jan 2016 19:23:56 +0800
changeset 327697 3e92e5986c53ba0e68ea5e7404979a07c7ed2f20
parent 327696 688b75d2c64fde4a67ab8ddecc91b0cac7fb305a
child 327698 5ca6f64fd90d9cccf82323e9dd0acb70e40ec373
push id10267
push userpehrsons@gmail.com
push dateMon, 01 Feb 2016 15:35:08 +0000
reviewersroc
bugs1208371
milestone47.0a1
Bug 1208371 - Assert when stream finishes but contains live tracks. r?roc This was the cause of some intermittent assertion failures, as the non-ended track didn't contain enough data when linked to other streams in the graph, but input extraction wouldn't get that data since the stream was finished.
dom/media/MediaStreamGraph.cpp
--- a/dom/media/MediaStreamGraph.cpp
+++ b/dom/media/MediaStreamGraph.cpp
@@ -73,16 +73,27 @@ MediaStreamGraphImpl::~MediaStreamGraphI
 }
 
 void
 MediaStreamGraphImpl::FinishStream(MediaStream* aStream)
 {
   if (aStream->mFinished)
     return;
   STREAM_LOG(LogLevel::Debug, ("MediaStream %p will finish", aStream));
+#ifdef DEBUG
+  for (StreamBuffer::TrackIter track(aStream->mBuffer);
+         !track.IsEnded(); track.Next()) {
+    if (!track->IsEnded()) {
+      STREAM_LOG(LogLevel::Error,
+                 ("MediaStream %p will finish, but track %d has not ended.",
+                  aStream, track->GetID()));
+      NS_ASSERTION(false, "Finished stream cannot contain live track");
+    }
+  }
+#endif
   aStream->mFinished = true;
   aStream->mBuffer.AdvanceKnownTracksTime(STREAM_TIME_MAX);
 
   SetStreamOrderDirty();
 }
 
 void
 MediaStreamGraphImpl::AddStreamGraphThread(MediaStream* aStream)