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

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

Issue 7184010: MediaStreamDispatcher (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: '' Created 9 years, 6 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_dispatcher.h
===================================================================
--- content/renderer/media/media_stream_dispatcher.h (revision 0)
+++ content/renderer/media/media_stream_dispatcher.h (revision 0)
@@ -0,0 +1,95 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_RENDERER_MEDIA_MEDIA_STREAM_DISPATCHER_H_
+#define CONTENT_RENDERER_MEDIA_MEDIA_STREAM_DISPATCHER_H_
+
+#include <list>
+#include <map>
+#include <string>
+
+#include "base/basictypes.h"
+#include "base/message_loop.h"
+#include "content/common/media/media_stream_options.h"
+#include "content/renderer/media/media_stream_dispatcher_eventhandler.h"
+#include "content/renderer/render_view_observer.h"
+
+// MediaStreamDispatcher is a delegate for the Media Stream API messages.
+// MediaStreams are used by WebKit to open media devices such as Video Capture
+// and Audio input devices.
+// It's the complement of MediaStreamDispatcherHost (owned by
+// BrowserRenderProcessHost).
+class MediaStreamDispatcher : public RenderViewObserver {
+ public:
+ explicit MediaStreamDispatcher(RenderView* render_view);
+ virtual ~MediaStreamDispatcher();
+
+ // Request a new media stream to be created.
+ // This can be used either of WebKit or a plugin.
+ // Note: The event_handler must be valid for as long as the stream exists.
+ void GenerateStream(int request_id,
+ MediaStreamDispatcherEventHandler* event_handler,
+ media_stream::GenerateStreamOptions components,
+ const std::string& security_origin);
+
+ // Stop a started stream. Label is the label provided in OnStreamGenerated.
+ void StopStream(const std::string& label);
+
+ // Returns a StreamDeviceInfoArray given a label. This can be used for
+ // verifying if a label is an opened media stream.
+ const media_stream::StreamDeviceInfoArray& audio_device_array(
scherkus (not reviewing) 2011/06/17 17:42:13 this isn't any better since it's too easy to have
Per K 2011/06/18 19:53:59 The purpose of these two methods are for the media
+ const std::string& label);
+ const media_stream::StreamDeviceInfoArray& video_device_array(
+ const std::string& label);
+
+ private:
+ FRIEND_TEST_ALL_PREFIXES(MediaStreamDispatcherTest, Basic);
+ FRIEND_TEST_ALL_PREFIXES(MediaStreamDispatcherTest, TestFailure);
+
+ typedef int IpcRequestId;
+ struct Request {
+ Request(MediaStreamDispatcherEventHandler* handler,
+ int request_id,
+ IpcRequestId ipc_request)
+ : handler(handler),
+ request_id(request_id),
+ ipc_request(ipc_request) {
+ }
+ MediaStreamDispatcherEventHandler* handler;
+ int request_id;
+ int ipc_request;
+ };
+
+ // Private class for keeping track of opened devices and who have
+ // opened it.
+ struct Stream {
+ MediaStreamDispatcherEventHandler* handler;
+ media_stream::StreamDeviceInfoArray audio_array;
+ media_stream::StreamDeviceInfoArray video_array;
+ };
+
+ // Messages from the browser.
+ virtual bool OnMessageReceived(const IPC::Message& message);
+ void OnStreamGenerated(
+ int request_id,
+ const std::string& label,
+ const media_stream::StreamDeviceInfoArray& audio_array,
+ const media_stream::StreamDeviceInfoArray& video_array);
+ void OnStreamGenerationFailed(int requestId);
scherkus (not reviewing) 2011/06/17 17:42:13 requestId -> request_id
Per K 2011/06/18 19:53:59 Hard do change an old habit... Done.
+ void OnVideoDeviceFailed(const std::string& label, int index);
+ void OnAudioDeviceFailed(const std::string& label, int index);
+
+ IpcRequestId next_ipc_id_;
+ typedef std::map<std::string, Stream> LabelStreamMap;
+ LabelStreamMap label_stream_map_;
+
+ // List of calls made to GenerateStream that has not yet completed.
+ typedef std::list<Request> RequestList;
+ RequestList requests_;
+ MessageLoop* message_loop_;
+
+ DISALLOW_COPY_AND_ASSIGN(MediaStreamDispatcher);
+};
+
+#endif // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_DISPATCHER_H_

Powered by Google App Engine
This is Rietveld 408576698