blob: 7f0ff17eb34c186a3bac8eb5f5e662ce6feec9b6 [file] [log] [blame]
Torne (Richard Coles)58218062012-11-14 11:43:16 +00001// 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 MessageLoopProxy;
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,
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.
65class 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|.
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000076 virtual void EnumerateDevices(MediaStreamType stream_type) = 0;
Torne (Richard Coles)58218062012-11-14 11:43:16 +000077
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_