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 MessageLoopProxy;
     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,
     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  protected:
     56   virtual ~MediaStreamProviderListener() {}
     57 };
     58 
     59 // Implemented by a manager class providing captured media.
     60 class CONTENT_EXPORT MediaStreamProvider
     61     : public base::RefCountedThreadSafe<MediaStreamProvider> {
     62  public:
     63   // Registers a listener and a device message loop.
     64   virtual void Register(MediaStreamProviderListener* listener,
     65                         base::MessageLoopProxy* device_thread_loop) = 0;
     66 
     67   // Unregisters the previously registered listener.
     68   virtual void Unregister() = 0;
     69 
     70   // Enumerates existing capture devices and calls |DevicesEnumerated|.
     71   virtual void EnumerateDevices(MediaStreamType stream_type) = 0;
     72 
     73   // Opens the specified device. The device is not started and it is still
     74   // possible for other applications to open the device before the device is
     75   // started. |Opened| is called when the device is opened.
     76   // kInvalidMediaCaptureSessionId is returned on error.
     77   virtual int Open(const StreamDeviceInfo& device) = 0;
     78 
     79   // Closes the specified device and calls |Closed| when done.
     80   virtual void Close(int capture_session_id) = 0;
     81 
     82  protected:
     83   friend class base::RefCountedThreadSafe<MediaStreamProvider>;
     84   virtual ~MediaStreamProvider() {}
     85 };
     86 
     87 }  // namespace content
     88 
     89 #endif  // CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_STREAM_PROVIDER_H_
     90