Home | History | Annotate | Download | only in media
      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:
     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>;
     87   virtual ~MediaStreamProvider() {}
     88 };
     89 
     90 }  // namespace content
     91 
     92 #endif  // CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_STREAM_PROVIDER_H_
     93