// 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 #include #include "base/memory/ref_counted.h" #include "content/common/content_export.h" #include "content/common/media/media_stream_options.h" namespace base { class SingleThreadTaskRunner; } 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 the device has been aborted due to // device error. virtual void Aborted(MediaStreamType stream_type, int capture_session_id) = 0; protected: virtual ~MediaStreamProviderListener() {} }; // Implemented by a manager class providing captured media. class CONTENT_EXPORT MediaStreamProvider : public base::RefCountedThreadSafe { public: // Registers a listener and a device message loop. virtual void Register(MediaStreamProviderListener* listener, const scoped_refptr& device_task_runner) = 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; virtual ~MediaStreamProvider() {} }; } // namespace content #endif // CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_STREAM_PROVIDER_H_