| // Copyright (c) 2012 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. |
| |
| // MediaStreamProvider is used to capture media of the types defined in |
| // MediaStreamType. There is only one MediaStreamProvider instance per media |
| // type and a MediaStreamProvider instance can have only one registered |
| // listener. |
| // The MediaStreamManager is expected to be called on Browser::IO thread and |
| // the listener will be called on the same thread. |
| |
| #ifndef CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_STREAM_PROVIDER_H_ |
| #define CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_STREAM_PROVIDER_H_ |
| |
| #include <list> |
| #include <string> |
| |
| #include "base/memory/ref_counted.h" |
| #include "content/common/content_export.h" |
| #include "content/common/media/media_stream_options.h" |
| |
| namespace base { |
| class MessageLoopProxy; |
| } |
| |
| namespace content { |
| |
| enum MediaStreamProviderError { |
| kMediaStreamOk = 0, |
| kInvalidMediaStreamType, |
| kInvalidSession, |
| kUnknownSession, |
| kDeviceNotAvailable, |
| kDeviceAlreadyInUse, |
| kUnknownError |
| }; |
| |
| enum { kInvalidMediaCaptureSessionId = 0xFFFFFFFF }; |
| |
| // Callback class used by MediaStreamProvider. |
| class CONTENT_EXPORT MediaStreamProviderListener { |
| public: |
| // Called by a MediaStreamProvider when a stream has been opened. |
| virtual void Opened(MediaStreamType stream_type, |
| int capture_session_id) = 0; |
| |
| // Called by a MediaStreamProvider when a stream has been closed. |
| virtual void Closed(MediaStreamType stream_type, |
| int capture_session_id) = 0; |
| |
| // Called by a MediaStreamProvider when available devices has been enumerated. |
| virtual void DevicesEnumerated(MediaStreamType stream_type, |
| const StreamDeviceInfoArray& devices) = 0; |
| |
| // Called by a MediaStreamProvider when an error has occured. |
| virtual void Error(MediaStreamType stream_type, |
| int capture_session_id, |
| MediaStreamProviderError error) = 0; |
| |
| protected: |
| virtual ~MediaStreamProviderListener() {} |
| }; |
| |
| // Implemented by a manager class providing captured media. |
| class CONTENT_EXPORT MediaStreamProvider |
| : public base::RefCountedThreadSafe<MediaStreamProvider> { |
| public: |
| // Registers a listener and a device message loop. |
| virtual void Register(MediaStreamProviderListener* listener, |
| base::MessageLoopProxy* device_thread_loop) = 0; |
| |
| // Unregisters the previously registered listener. |
| virtual void Unregister() = 0; |
| |
| // Enumerates existing capture devices and calls |DevicesEnumerated|. |
| virtual void EnumerateDevices(MediaStreamType stream_type) = 0; |
| |
| // Opens the specified device. The device is not started and it is still |
| // possible for other applications to open the device before the device is |
| // started. |Opened| is called when the device is opened. |
| // kInvalidMediaCaptureSessionId is returned on error. |
| virtual int Open(const StreamDeviceInfo& device) = 0; |
| |
| // Closes the specified device and calls |Closed| when done. |
| virtual void Close(int capture_session_id) = 0; |
| |
| protected: |
| friend class base::RefCountedThreadSafe<MediaStreamProvider>; |
| virtual ~MediaStreamProvider() {} |
| }; |
| |
| } // namespace content |
| |
| #endif // CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_STREAM_PROVIDER_H_ |