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 #ifndef CONTENT_RENDERER_MEDIA_MEDIA_STREAM_SOURCE_EXTRA_DATA_H_
      6 #define CONTENT_RENDERER_MEDIA_MEDIA_STREAM_SOURCE_EXTRA_DATA_H_
      7 
      8 #include "base/compiler_specific.h"
      9 #include "content/common/content_export.h"
     10 #include "content/common/media/media_stream_options.h"
     11 #include "content/renderer/media/media_stream_source_observer.h"
     12 #include "media/base/audio_capturer_source.h"
     13 #include "third_party/libjingle/source/talk/app/webrtc/videosourceinterface.h"
     14 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
     15 
     16 namespace content {
     17 
     18 class CONTENT_EXPORT MediaStreamSourceExtraData
     19     : NON_EXPORTED_BASE(public WebKit::WebMediaStreamSource::ExtraData) {
     20  public:
     21   MediaStreamSourceExtraData(
     22       const StreamDeviceInfo& device_info,
     23       const WebKit::WebMediaStreamSource& webkit_source);
     24   explicit MediaStreamSourceExtraData(
     25       media::AudioCapturerSource* source);
     26   virtual ~MediaStreamSourceExtraData();
     27 
     28   // Returns the WebMediaStreamSource object that owns this object.
     29   const WebKit::WebMediaStreamSource& webkit_source() const {
     30     return webkit_source_;
     31   }
     32 
     33   // Return device information about the camera or microphone.
     34   const StreamDeviceInfo& device_info() const {
     35     return device_info_;
     36   }
     37 
     38   void SetVideoSource(webrtc::VideoSourceInterface* source) {
     39     video_source_ = source;
     40     source_observer_.reset(new MediaStreamSourceObserver(source, this));
     41   }
     42 
     43   void SetLocalAudioSource(webrtc::AudioSourceInterface* source) {
     44     local_audio_source_ = source;
     45     // TODO(perkj): Implement a local source observer for audio.
     46     // See |source_observer_|.
     47   }
     48 
     49   webrtc::VideoSourceInterface* video_source() { return video_source_.get(); }
     50   media::AudioCapturerSource* audio_source() { return audio_source_.get(); }
     51   webrtc::AudioSourceInterface* local_audio_source() {
     52     return local_audio_source_.get();
     53   }
     54 
     55  private:
     56   StreamDeviceInfo device_info_;
     57 
     58   // TODO(tommyw): Remove |webkit_source_| after WebMediaStreamSource::Owner()
     59   // is implemented, which let us fetch the
     60   // WebMediaStreamSource without increasing the reference count.
     61   // |webkit_source_| will create a circular reference to WebMediaStreamSource.
     62   // WebMediaStreamSource -> MediaStreamSourceExtraData -> WebMediaStreamSource
     63   // Currently, we rely on manually releasing the MediaStreamSourceExtraData
     64   // from WebMediaStreamSource like what
     65   // MediaStreamImpl::~UserMediaRequestInfo() does.
     66   WebKit::WebMediaStreamSource webkit_source_;
     67   scoped_refptr<webrtc::VideoSourceInterface> video_source_;
     68   scoped_refptr<media::AudioCapturerSource> audio_source_;
     69 
     70   // This member holds an instance of webrtc::LocalAudioSource. This is used
     71   // as a container for audio options.
     72   // TODO(hclam): This should be merged with |audio_source_| such that it
     73   // carries audio options.
     74   scoped_refptr<webrtc::AudioSourceInterface> local_audio_source_;
     75   scoped_ptr<MediaStreamSourceObserver> source_observer_;
     76 
     77   DISALLOW_COPY_AND_ASSIGN(MediaStreamSourceExtraData);
     78 };
     79 
     80 }  // namespace content
     81 
     82 #endif  // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_SOURCE_EXTRA_DATA_H_
     83