• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 SingleThreadTaskRunner;
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, int capture_session_id) = 0;
45 
46   // Called by a MediaStreamProvider when a stream has been closed.
47   virtual void Closed(MediaStreamType stream_type, int capture_session_id) = 0;
48 
49   // Called by a MediaStreamProvider when available devices has been enumerated.
50   virtual void DevicesEnumerated(MediaStreamType stream_type,
51                                  const StreamDeviceInfoArray& devices) = 0;
52 
53   // Called by a MediaStreamProvider when the device has been aborted due to
54   // device error.
55   virtual void Aborted(MediaStreamType stream_type, int capture_session_id) = 0;
56 
57  protected:
~MediaStreamProviderListener()58   virtual ~MediaStreamProviderListener() {}
59 };
60 
61 // Implemented by a manager class providing captured media.
62 class CONTENT_EXPORT MediaStreamProvider
63     : public base::RefCountedThreadSafe<MediaStreamProvider> {
64  public:
65   // Registers a listener and a device message loop.
66   virtual void Register(MediaStreamProviderListener* listener,
67                         const scoped_refptr<base::SingleThreadTaskRunner>&
68                             device_task_runner) = 0;
69 
70   // Unregisters the previously registered listener.
71   virtual void Unregister() = 0;
72 
73   // Enumerates existing capture devices and calls |DevicesEnumerated|.
74   virtual void EnumerateDevices(MediaStreamType stream_type) = 0;
75 
76   // Opens the specified device. The device is not started and it is still
77   // possible for other applications to open the device before the device is
78   // started. |Opened| is called when the device is opened.
79   // kInvalidMediaCaptureSessionId is returned on error.
80   virtual int Open(const StreamDeviceInfo& device) = 0;
81 
82   // Closes the specified device and calls |Closed| when done.
83   virtual void Close(int capture_session_id) = 0;
84 
85  protected:
86   friend class base::RefCountedThreadSafe<MediaStreamProvider>;
~MediaStreamProvider()87   virtual ~MediaStreamProvider() {}
88 };
89 
90 }  // namespace content
91 
92 #endif  // CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_STREAM_PROVIDER_H_
93