Chromium Code Reviews| Index: content/renderer/media/webrtc_audio_renderer.h |
| diff --git a/content/renderer/media/webrtc_audio_renderer.h b/content/renderer/media/webrtc_audio_renderer.h |
| index 09cccf0e3cb01ec853018a421ff77209deb317df..8ad4bd0f4b0a31bc6eac76b815aafcb7a33704bf 100644 |
| --- a/content/renderer/media/webrtc_audio_renderer.h |
| +++ b/content/renderer/media/webrtc_audio_renderer.h |
| @@ -7,8 +7,10 @@ |
| #include "base/memory/ref_counted.h" |
| #include "base/synchronization/lock.h" |
| +#include "base/threading/thread_checker.h" |
| #include "content/renderer/media/webrtc_audio_device_impl.h" |
| #include "media/base/audio_decoder.h" |
| +#include "media/base/audio_pull_fifo.h" |
| #include "media/base/audio_renderer_sink.h" |
| #include "webkit/media/media_stream_audio_renderer.h" |
| @@ -18,16 +20,15 @@ class RendererAudioOutputDevice; |
| class WebRtcAudioRendererSource; |
| // This renderer handles calls from the pipeline and WebRtc ADM. It is used |
| -// for connecting WebRtc MediaStream with pipeline. |
| +// for connecting WebRtc MediaStream with the audio pipeline. |
| class CONTENT_EXPORT WebRtcAudioRenderer |
| : NON_EXPORTED_BASE(public media::AudioRendererSink::RenderCallback), |
| NON_EXPORTED_BASE(public webkit_media::MediaStreamAudioRenderer) { |
| public: |
| explicit WebRtcAudioRenderer(int source_render_view_id); |
| - // Initialize function called by clients like WebRtcAudioDeviceImpl. Note, |
| + // Initialize function called by clients like WebRtcAudioDeviceImpl. |
| // Stop() has to be called before |source| is deleted. |
| - // Returns false if Initialize() fails. |
| bool Initialize(WebRtcAudioRendererSource* source); |
| // Methods called by WebMediaPlayerMS and WebRtcAudioDeviceImpl. |
| @@ -49,14 +50,23 @@ class CONTENT_EXPORT WebRtcAudioRenderer |
| PLAYING, |
| PAUSED, |
| }; |
| + |
| + // Used to DCHECK that we are called on the correct thread. |
| + base::ThreadChecker thread_checker_; |
| + |
| // Flag to keep track the state of the renderer. |
| State state_; |
| // media::AudioRendererSink::RenderCallback implementation. |
| + // These two methods are called on the AudioOutputDevice worker thread. |
| virtual int Render(media::AudioBus* audio_bus, |
| int audio_delay_milliseconds) OVERRIDE; |
| virtual void OnRenderError() OVERRIDE; |
| + // Called by AudioPullFifo when more data is necessary. |
| + // This method is called on the AudioOutputDevice worker thread. |
| + void SourceCallback(int fifo_frame_delay, media::AudioBus* audio_bus); |
| + |
| // The render view in which the audio is rendered into |sink_|. |
| const int source_render_view_id_; |
| @@ -66,19 +76,24 @@ class CONTENT_EXPORT WebRtcAudioRenderer |
| // Audio data source from the browser process. |
| WebRtcAudioRendererSource* source_; |
| - // Cached values of utilized audio parameters. Platform dependent. |
| - media::AudioParameters params_; |
| - |
| // Buffers used for temporary storage during render callbacks. |
| // Allocated during initialization. |
| scoped_array<int16> buffer_; |
| - // Protect access to |state_|. |
| + // Protects access to |state_|, |source_| and |sink_|. |
| base::Lock lock_; |
| // Ref count for the MediaPlayers which are playing audio. |
| int play_ref_count_; |
| + // Used to buffer data between the client and the output device in cases where |
| + // the client buffer size is not the same as the output device buffer size. |
| + scoped_ptr<media::AudioPullFifo> audio_fifo_; |
| + |
| + double frame_duration_milliseconds_; |
|
tommi (sloooow) - chröme
2013/01/31 13:42:08
why is this a double and audio_delay_milliseconds_
henrika (OOO until Aug 14)
2013/01/31 14:29:38
I want to maintain precision. For fs=48kHz, we hav
|
| + |
| + int audio_delay_milliseconds_; |
| + |
| DISALLOW_IMPLICIT_CONSTRUCTORS(WebRtcAudioRenderer); |
| }; |