Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5731)

Unified Diff: content/renderer/media/media_stream_impl.h

Issue 131763002: Adds MediaStreamSource, MediaStreamAudioSource and MediaStreamVideoCaptureDeviceSource (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/renderer/media/media_stream_impl.h
diff --git a/content/renderer/media/media_stream_impl.h b/content/renderer/media/media_stream_impl.h
index f60e8049baff5f5d50a5bab16035d0a2f3ff5cc9..6911c8f8bf6ccd0c29dbfb9be609a7d4d9e4ba96 100644
--- a/content/renderer/media/media_stream_impl.h
+++ b/content/renderer/media/media_stream_impl.h
@@ -30,7 +30,7 @@ namespace content {
class MediaStreamAudioRenderer;
class MediaStreamDependencyFactory;
class MediaStreamDispatcher;
-class MediaStreamSourceExtraData;
+class MediaStreamSource;
class WebRtcAudioRenderer;
class WebRtcLocalAudioRenderer;
@@ -92,19 +92,17 @@ class CONTENT_EXPORT MediaStreamImpl
virtual void FrameWillClose(blink::WebFrame* frame) OVERRIDE;
protected:
- void OnLocalSourceStop(const blink::WebMediaStreamSource& source);
+ // Called when |source| has been stopped from JavaScript.
+ void OnLocalSourceStopped(const blink::WebMediaStreamSource& source);
+ // Called when a MediaStream with label |label| has been ordered to stop from
+ // JavaScript. The implementation must stop all sources that are not used by
+ // other MediaStreams.
+ // TODO(perkj): MediaStream::Stop has been deprecated from the spec and all
+ // applications should move to use MediaStreamTrack::Stop instead and this
+ // method be removed.
void OnLocalMediaStreamStop(const std::string& label);
- // Callback function triggered when all native (libjingle) versions of the
- // underlying media sources have been created and started.
- // |web_stream| is a raw pointer to the web_stream in
- // UserMediaRequests::web_stream for which the underlying sources have been
- // created.
- void OnCreateNativeSourcesComplete(
- blink::WebMediaStream* web_stream,
- bool request_succeeded);
-
// This function is virtual for test purposes. A test can override this to
// test requesting local media streams. The function notifies WebKit that the
// |request| have completed and generated the MediaStream |stream|.
@@ -118,9 +116,14 @@ class CONTENT_EXPORT MediaStreamImpl
virtual blink::WebMediaStream GetMediaStream(const GURL& url);
private:
- // Structure for storing information about a WebKit request to create a
+ // Class for storing information about a WebKit request to create a
// MediaStream.
- struct UserMediaRequestInfo {
+ class UserMediaRequestInfo
+ : public base::SupportsWeakPtr<UserMediaRequestInfo> {
+ public:
+ typedef base::Callback<void(UserMediaRequestInfo* request_info,
+ bool request_succeeded)> ResourcesReady;
+
UserMediaRequestInfo(int request_id,
blink::WebFrame* frame,
const blink::WebUserMediaRequest& request,
@@ -134,7 +137,28 @@ class CONTENT_EXPORT MediaStreamImpl
blink::WebFrame* frame; // WebFrame that requested the MediaStream.
blink::WebMediaStream web_stream;
blink::WebUserMediaRequest request;
- std::vector<blink::WebMediaStreamSource> sources;
+
+ void StartTrack(const blink::WebMediaStreamTrack& track,
+ const blink::WebMediaConstraints& constraints);
+
+ // Triggers |callback| when all sources used in this request have either
+ // successfully started, or a source has failed to start.
+ void CallbackOnTracksStarted(const ResourcesReady& callback);
+
+ bool IsSourceUsed(const blink::WebMediaStreamSource& source) const;
+ void RemoveSource(const blink::WebMediaStreamSource& source);
+
+ bool AreAllSourcesRemoved() const { return sources_.empty(); };
+
+ private:
+ void OnTrackStarted(MediaStreamSource* source, bool success);
+ void CheckAllTracksStarted();
+
+ ResourcesReady ready_callback_;
+ bool request_failed_;
+ // Sources used in this request.
+ std::vector<blink::WebMediaStreamSource> sources_;
+ std::vector<MediaStreamSource*> sources_waiting_for_callback_;
};
typedef ScopedVector<UserMediaRequestInfo> UserMediaRequests;
@@ -152,17 +176,33 @@ class CONTENT_EXPORT MediaStreamImpl
// Creates a WebKit representation of stream sources based on
// |devices| from the MediaStreamDispatcher.
- void CreateWebKitSourceVector(
- const std::string& label,
- const StreamDeviceInfoArray& devices,
+ void InitializeSourceObject(
+ const StreamDeviceInfo& device,
blink::WebMediaStreamSource::Type type,
+ const blink::WebMediaConstraints& constraints,
blink::WebFrame* frame,
- blink::WebVector<blink::WebMediaStreamSource>& webkit_sources);
+ blink::WebMediaStreamSource* webkit_source);
+
+ void CreateVideoTracks(
+ const StreamDeviceInfoArray& devices,
+ const blink::WebMediaConstraints& constraints,
+ blink::WebVector<blink::WebMediaStreamTrack>* webkit_tracks,
+ UserMediaRequestInfo* request);
+
+ void CreateAudioTracks(
+ const StreamDeviceInfoArray& devices,
+ const blink::WebMediaConstraints& constraints,
+ blink::WebVector<blink::WebMediaStreamTrack>* webkit_tracks,
+ UserMediaRequestInfo* request);
+
+ // Callback function triggered when all native versions of the
+ // underlying media sources and tracks have been created and started.
+ void OnCreateNativeTracksCompleted(
+ UserMediaRequestInfo* request,
+ bool request_succeeded);
UserMediaRequestInfo* FindUserMediaRequestInfo(int request_id);
UserMediaRequestInfo* FindUserMediaRequestInfo(
- blink::WebMediaStream* web_stream);
- UserMediaRequestInfo* FindUserMediaRequestInfo(
const blink::WebUserMediaRequest& request);
UserMediaRequestInfo* FindUserMediaRequestInfo(const std::string& label);
void DeleteUserMediaRequestInfo(UserMediaRequestInfo* request);
@@ -173,7 +213,7 @@ class CONTENT_EXPORT MediaStreamImpl
const StreamDeviceInfo& device) const;
// Returns true if |source| exists in |user_media_requests_|
- bool FindSourceInRequests(const blink::WebMediaStreamSource& source) const;
+ bool IsSourceInRequests(const blink::WebMediaStreamSource& source) const;
void StopLocalSource(const blink::WebMediaStreamSource& source,
bool notify_dispatcher);
« no previous file with comments | « content/renderer/media/media_stream_dependency_factory_unittest.cc ('k') | content/renderer/media/media_stream_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698