Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / content / browser / renderer_host / media / media_stream_provider.h
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  protected:
54   virtual ~MediaStreamProviderListener() {}
55 };
56
57 // Implemented by a manager class providing captured media.
58 class 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_