1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // MediaStreamProvider is used to capture media of the types defined in 6 // MediaStreamType. There is only one MediaStreamProvider instance per media 7 // type and a MediaStreamProvider instance can have only one registered 8 // listener. 9 // The MediaStreamManager is expected to be called on Browser::IO thread and 10 // the listener will be called on the same thread. 11 12 #ifndef CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_STREAM_PROVIDER_H_ 13 #define CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_STREAM_PROVIDER_H_ 14 15 #include <list> 16 #include <string> 17 18 #include "base/memory/ref_counted.h" 19 #include "content/common/content_export.h" 20 #include "content/common/media/media_stream_options.h" 21 22 namespace base { 23 class MessageLoopProxy; 24 } 25 26 namespace content { 27 28 enum MediaStreamProviderError { 29 kMediaStreamOk = 0, 30 kInvalidMediaStreamType, 31 kInvalidSession, 32 kUnknownSession, 33 kDeviceNotAvailable, 34 kDeviceAlreadyInUse, 35 kUnknownError 36 }; 37 38 enum { kInvalidMediaCaptureSessionId = 0xFFFFFFFF }; 39 40 // Callback class used by MediaStreamProvider. 41 class CONTENT_EXPORT MediaStreamProviderListener { 42 public: 43 // Called by a MediaStreamProvider when a stream has been opened. 44 virtual void Opened(MediaStreamType stream_type, 45 int capture_session_id) = 0; 46 47 // Called by a MediaStreamProvider when a stream has been closed. 48 virtual void Closed(MediaStreamType stream_type, 49 int capture_session_id) = 0; 50 51 // Called by a MediaStreamProvider when available devices has been enumerated. 52 virtual void DevicesEnumerated(MediaStreamType stream_type, 53 const StreamDeviceInfoArray& devices) = 0; 54 55 // Called by a MediaStreamProvider when an error has occured. 56 virtual void Error(MediaStreamType stream_type, 57 int capture_session_id, 58 MediaStreamProviderError error) = 0; 59 60 protected: 61 virtual ~MediaStreamProviderListener() {} 62 }; 63 64 // Implemented by a manager class providing captured media. 65 class CONTENT_EXPORT MediaStreamProvider 66 : public base::RefCountedThreadSafe<MediaStreamProvider> { 67 public: 68 // Registers a listener and a device message loop. 69 virtual void Register(MediaStreamProviderListener* listener, 70 base::MessageLoopProxy* device_thread_loop) = 0; 71 72 // Unregisters the previously registered listener. 73 virtual void Unregister() = 0; 74 75 // Enumerates existing capture devices and calls |DevicesEnumerated|. 76 virtual void EnumerateDevices(MediaStreamType stream_type) = 0; 77 78 // Opens the specified device. The device is not started and it is still 79 // possible for other applications to open the device before the device is 80 // started. |Opened| is called when the device is opened. 81 // kInvalidMediaCaptureSessionId is returned on error. 82 virtual int Open(const StreamDeviceInfo& device) = 0; 83 84 // Closes the specified device and calls |Closed| when done. 85 virtual void Close(int capture_session_id) = 0; 86 87 protected: 88 friend class base::RefCountedThreadSafe<MediaStreamProvider>; 89 virtual ~MediaStreamProvider() {} 90 }; 91 92 } // namespace content 93 94 #endif // CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_STREAM_PROVIDER_H_ 95