Bug 1299451 - Fix mozCaptureStream() happening after setting src but before having metadata. r?jesup draft
authorAndreas Pehrson <pehrsons@gmail.com>
Wed, 31 Aug 2016 14:54:03 +0200
changeset 407975 4eacb99923444a19b8880e519d49cf5c185abba8
parent 407818 506facea63169a29e04eb140663da1730052db64
child 530016 23427638564499d3e422ed252ac754376fda889f
push id28114
push userpehrsons@gmail.com
push dateWed, 31 Aug 2016 13:23:16 +0000
reviewersjesup
bugs1299451
milestone51.0a1
Bug 1299451 - Fix mozCaptureStream() happening after setting src but before having metadata. r?jesup MozReview-Commit-ID: CKC3n3Nt5IE
dom/html/HTMLMediaElement.cpp
--- a/dom/html/HTMLMediaElement.cpp
+++ b/dom/html/HTMLMediaElement.cpp
@@ -2570,26 +2570,31 @@ HTMLMediaElement::CaptureStreamInternal(
     }
 
     // mAudioCaptured tells the user that the audio played by this media element
     // is being routed to the captureStreams *instead* of being played to
     // speakers.
     mAudioCaptured = true;
   }
 
+  if (mDecoder) {
+    out->mCapturingDecoder = true;
+    mDecoder->AddOutputStream(out->mStream->GetInputStream()->AsProcessedStream(),
+                              aFinishWhenEnded);
+  } else if (mSrcStream) {
+    out->mCapturingMediaStream = true;
+  }
+
   if (mReadyState == HAVE_NOTHING) {
-    // Do not expose the tracks directly before we have metadata.
+    // Do not expose the tracks until we have metadata.
     RefPtr<DOMMediaStream> result = out->mStream;
     return result.forget();
   }
 
   if (mDecoder) {
-    out->mCapturingDecoder = true;
-    mDecoder->AddOutputStream(out->mStream->GetInputStream()->AsProcessedStream(),
-                              aFinishWhenEnded);
     if (HasAudio()) {
       TrackID audioTrackId = mMediaInfo.mAudio.mTrackId;
       RefPtr<MediaStreamTrackSource> trackSource =
         getter->GetMediaStreamTrackSource(audioTrackId);
       RefPtr<MediaStreamTrack> track =
         out->mStream->CreateDOMTrack(audioTrackId, MediaSegment::AUDIO,
                                      trackSource);
       out->mStream->AddTrackInternal(track);
@@ -2605,32 +2610,16 @@ HTMLMediaElement::CaptureStreamInternal(
                                      trackSource);
       out->mStream->AddTrackInternal(track);
       LOG(LogLevel::Debug,
           ("Created video track %d for captured decoder", videoTrackId));
     }
   }
 
   if (mSrcStream) {
-    out->mCapturingMediaStream = true;
-    MediaStream* inputStream = out->mStream->GetInputStream();
-    if (!inputStream) {
-      NS_ERROR("No input stream");
-      RefPtr<DOMMediaStream> result = out->mStream;
-      return result.forget();
-    }
-
-    ProcessedMediaStream* processedInputStream =
-      inputStream->AsProcessedStream();
-    if (!processedInputStream) {
-      NS_ERROR("Input stream not a ProcessedMediaStream");
-      RefPtr<DOMMediaStream> result = out->mStream;
-      return result.forget();
-    }
-
     for (size_t i = 0; i < AudioTracks()->Length(); ++i) {
       AudioTrack* t = (*AudioTracks())[i];
       if (t->Enabled()) {
         AddCaptureMediaTrackToOutputStream(t, *out, false);
       }
     }
     if (IsVideo() && !out->mCapturingAudioOnly) {
       // Only add video tracks if we're a video element and the output stream