| Index: content/renderer/media/webrtc_audio_capturer.h
|
| diff --git a/content/renderer/media/webrtc_audio_capturer.h b/content/renderer/media/webrtc_audio_capturer.h
|
| index 23391140411007696ec3b479e6da01ee339967f0..e54ddf08f5089a0cb0051d7fda358702ee9a511c 100644
|
| --- a/content/renderer/media/webrtc_audio_capturer.h
|
| +++ b/content/renderer/media/webrtc_audio_capturer.h
|
| @@ -13,8 +13,8 @@
|
| #include "base/synchronization/lock.h"
|
| #include "base/threading/thread_checker.h"
|
| #include "base/time/time.h"
|
| +#include "content/common/media/media_stream_options.h"
|
| #include "content/renderer/media/tagged_list.h"
|
| -#include "content/renderer/media/webrtc_audio_device_impl.h"
|
| #include "media/audio/audio_input_device.h"
|
| #include "media/base/audio_capturer_source.h"
|
|
|
| @@ -24,13 +24,12 @@ class AudioBus;
|
|
|
| namespace content {
|
|
|
| +class WebRtcAudioDeviceImpl;
|
| class WebRtcLocalAudioRenderer;
|
| class WebRtcLocalAudioTrack;
|
|
|
| // This class manages the capture data flow by getting data from its
|
| // |source_|, and passing it to its |tracks_|.
|
| -// It allows clients to inject their own capture data source by calling
|
| -// SetCapturerSource().
|
| // The threading model for this class is rather complex since it will be
|
| // created on the main render thread, captured data is provided on a dedicated
|
| // AudioInputDevice thread, and methods can be called either on the Libjingle
|
| @@ -40,24 +39,17 @@ class CONTENT_EXPORT WebRtcAudioCapturer
|
| : public base::RefCountedThreadSafe<WebRtcAudioCapturer>,
|
| NON_EXPORTED_BASE(public media::AudioCapturerSource::CaptureCallback) {
|
| public:
|
| - // Use to construct the audio capturer.
|
| + // Used to construct the audio capturer. |render_view_id| specifies the
|
| + // render view consuming audio for capture, |render_view_id| as -1 is used
|
| + // by the unittests to skip creating a source via
|
| + // AudioDeviceFactory::NewInputDevice(), and allow injecting their own source
|
| + // via SetCapturerSourceForTesting() at a later state. |device_info|
|
| + // contains all the device information that the capturer is created for.
|
| // Called on the main render thread.
|
| - static scoped_refptr<WebRtcAudioCapturer> CreateCapturer();
|
| -
|
| - // Creates and configures the default audio capturing source using the
|
| - // provided audio parameters. |render_view_id| specifies the render view
|
| - // consuming audio for capture. |session_id| is passed to the browser to
|
| - // decide which device to use. |device_id| is used to identify which device
|
| - // the capturer is created for. Called on the main render thread.
|
| - bool Initialize(int render_view_id,
|
| - media::ChannelLayout channel_layout,
|
| - int sample_rate,
|
| - int buffer_size,
|
| - int session_id,
|
| - const std::string& device_id,
|
| - int paired_output_sample_rate,
|
| - int paired_output_frames_per_buffer,
|
| - int effects);
|
| + static scoped_refptr<WebRtcAudioCapturer> CreateCapturer(
|
| + int render_view_id,
|
| + const StreamDeviceInfo& device_info,
|
| + WebRtcAudioDeviceImpl* audio_device);
|
|
|
| // Add a audio track to the sinks of the capturer.
|
| // WebRtcAudioDeviceImpl calls this method on the main render thread but
|
| @@ -73,16 +65,6 @@ class CONTENT_EXPORT WebRtcAudioCapturer
|
| // Called on the main render thread or libjingle working thread.
|
| void RemoveTrack(WebRtcLocalAudioTrack* track);
|
|
|
| - // SetCapturerSource() is called if the client on the source side desires to
|
| - // provide their own captured audio data. Client is responsible for calling
|
| - // Start() on its own source to have the ball rolling.
|
| - // Called on the main render thread.
|
| - void SetCapturerSource(
|
| - const scoped_refptr<media::AudioCapturerSource>& source,
|
| - media::ChannelLayout channel_layout,
|
| - float sample_rate,
|
| - int effects);
|
| -
|
| // Called when a stream is connecting to a peer connection. This will set
|
| // up the native buffer size for the stream in order to optimize the
|
| // performance for peer connection.
|
| @@ -94,8 +76,6 @@ class CONTENT_EXPORT WebRtcAudioCapturer
|
| int Volume() const;
|
| int MaxVolume() const;
|
|
|
| - bool is_recording() const { return running_; }
|
| -
|
| // Audio parameters utilized by the audio capturer. Can be utilized by
|
| // a local renderer to set up a renderer using identical parameters as the
|
| // capturer.
|
| @@ -110,8 +90,8 @@ class CONTENT_EXPORT WebRtcAudioCapturer
|
| int* output_sample_rate,
|
| int* output_frames_per_buffer) const;
|
|
|
| - const std::string& device_id() const { return device_id_; }
|
| - int session_id() const { return session_id_; }
|
| + const std::string& device_id() const { return device_info_.device.id; }
|
| + int session_id() const { return device_info_.session_id; }
|
|
|
| // Stops recording audio. This method will empty its track lists since
|
| // stopping the capturer will implicitly invalidate all its tracks.
|
| @@ -125,15 +105,23 @@ class CONTENT_EXPORT WebRtcAudioCapturer
|
| void GetAudioProcessingParams(base::TimeDelta* delay, int* volume,
|
| bool* key_pressed);
|
|
|
| + // Use by the unittests to inject their own source to the capturer.
|
| + void SetCapturerSourceForTesting(
|
| + const scoped_refptr<media::AudioCapturerSource>& source,
|
| + media::AudioParameters params);
|
| +
|
| protected:
|
| friend class base::RefCountedThreadSafe<WebRtcAudioCapturer>;
|
| - WebRtcAudioCapturer();
|
| virtual ~WebRtcAudioCapturer();
|
|
|
| private:
|
| class TrackOwner;
|
| typedef TaggedList<TrackOwner> TrackList;
|
|
|
| + WebRtcAudioCapturer(int render_view_id,
|
| + const StreamDeviceInfo& device_info,
|
| + WebRtcAudioDeviceImpl* audio_device);
|
| +
|
| // AudioCapturerSource::CaptureCallback implementation.
|
| // Called on the AudioInputDevice audio thread.
|
| virtual void Capture(media::AudioBus* audio_source,
|
| @@ -142,6 +130,20 @@ class CONTENT_EXPORT WebRtcAudioCapturer
|
| bool key_pressed) OVERRIDE;
|
| virtual void OnCaptureError() OVERRIDE;
|
|
|
| + // Initializes the default audio capturing source using the provided render
|
| + // view id and device information. Return true if success, otherwise false.
|
| + bool Initialize();
|
| +
|
| + // SetCapturerSource() is called if the client on the source side desires to
|
| + // provide their own captured audio data. Client is responsible for calling
|
| + // Start() on its own source to have the ball rolling.
|
| + // Called on the main render thread.
|
| + void SetCapturerSource(
|
| + const scoped_refptr<media::AudioCapturerSource>& source,
|
| + media::ChannelLayout channel_layout,
|
| + float sample_rate,
|
| + int effects);
|
| +
|
| // Reconfigures the capturer with a new capture parameters.
|
| // Must be called without holding the lock.
|
| void Reconfigure(int sample_rate, media::ChannelLayout channel_layout,
|
| @@ -178,16 +180,8 @@ class CONTENT_EXPORT WebRtcAudioCapturer
|
|
|
| int render_view_id_;
|
|
|
| - // Cached value for the hardware native buffer size, used when
|
| - // |peer_connection_mode_| is set to false.
|
| - int hardware_buffer_size_;
|
| -
|
| - // The media session ID used to identify which input device to be started by
|
| - // the browser.
|
| - int session_id_;
|
| -
|
| - // The device this capturer is given permission to use.
|
| - std::string device_id_;
|
| + // Cached information of the device used by the capturer.
|
| + const StreamDeviceInfo device_info_;
|
|
|
| // Stores latest microphone volume received in a CaptureData() callback.
|
| // Range is [0, 255].
|
| @@ -196,13 +190,14 @@ class CONTENT_EXPORT WebRtcAudioCapturer
|
| // Flag which affects the buffer size used by the capturer.
|
| bool peer_connection_mode_;
|
|
|
| - int output_sample_rate_;
|
| - int output_frames_per_buffer_;
|
| -
|
| // Cache value for the audio processing params.
|
| base::TimeDelta audio_delay_;
|
| bool key_pressed_;
|
|
|
| + // Raw pointer to the WebRtcAudioDeviceImpl, which is valid for the lifetime
|
| + // of RenderThread.
|
| + WebRtcAudioDeviceImpl* audio_device_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(WebRtcAudioCapturer);
|
| };
|
|
|
|
|