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 protected: 56 virtual ~MediaStreamProviderListener() {} 57 }; 58 59 // Implemented by a manager class providing captured media. 60 class CONTENT_EXPORT MediaStreamProvider 61 : public base::RefCountedThreadSafe<MediaStreamProvider> { 62 public: 63 // Registers a listener and a device message loop. 64 virtual void Register(MediaStreamProviderListener* listener, 65 base::MessageLoopProxy* device_thread_loop) = 0; 66 67 // Unregisters the previously registered listener. 68 virtual void Unregister() = 0; 69 70 // Enumerates existing capture devices and calls |DevicesEnumerated|. 71 virtual void EnumerateDevices(MediaStreamType stream_type) = 0; 72 73 // Opens the specified device. The device is not started and it is still 74 // possible for other applications to open the device before the device is 75 // started. |Opened| is called when the device is opened. 76 // kInvalidMediaCaptureSessionId is returned on error. 77 virtual int Open(const StreamDeviceInfo& device) = 0; 78 79 // Closes the specified device and calls |Closed| when done. 80 virtual void Close(int capture_session_id) = 0; 81 82 protected: 83 friend class base::RefCountedThreadSafe<MediaStreamProvider>; 84 virtual ~MediaStreamProvider() {} 85 }; 86 87 } // namespace content 88 89 #endif // CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_STREAM_PROVIDER_H_ 90