media_stream_provider.h revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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
22namespace base {
23class SingleThreadTaskRunner;
24}
25
26namespace content {
27
28enum MediaStreamProviderError {
29  kMediaStreamOk = 0,
30  kInvalidMediaStreamType,
31  kInvalidSession,
32  kUnknownSession,
33  kDeviceNotAvailable,
34  kDeviceAlreadyInUse,
35  kUnknownError
36};
37
38enum { kInvalidMediaCaptureSessionId = 0xFFFFFFFF };
39
40// Callback class used by MediaStreamProvider.
41class 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 protected:
54  virtual ~MediaStreamProviderListener() {}
55};
56
57// Implemented by a manager class providing captured media.
58class CONTENT_EXPORT MediaStreamProvider
59    : public base::RefCountedThreadSafe<MediaStreamProvider> {
60 public:
61  // Registers a listener and a device message loop.
62  virtual void Register(MediaStreamProviderListener* listener,
63                        const scoped_refptr<base::SingleThreadTaskRunner>&
64                            device_task_runner) = 0;
65
66  // Unregisters the previously registered listener.
67  virtual void Unregister() = 0;
68
69  // Enumerates existing capture devices and calls |DevicesEnumerated|.
70  virtual void EnumerateDevices(MediaStreamType stream_type) = 0;
71
72  // Opens the specified device. The device is not started and it is still
73  // possible for other applications to open the device before the device is
74  // started. |Opened| is called when the device is opened.
75  // kInvalidMediaCaptureSessionId is returned on error.
76  virtual int Open(const StreamDeviceInfo& device) = 0;
77
78  // Closes the specified device and calls |Closed| when done.
79  virtual void Close(int capture_session_id) = 0;
80
81 protected:
82  friend class base::RefCountedThreadSafe<MediaStreamProvider>;
83  virtual ~MediaStreamProvider() {}
84};
85
86}  // namespace content
87
88#endif  // CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_STREAM_PROVIDER_H_
89