| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CONTENT_RENDERER_MEDIA_WEBRTC_AUDIO_DEVICE_IMPL_H_ | 5 #ifndef CONTENT_RENDERER_MEDIA_WEBRTC_AUDIO_DEVICE_IMPL_H_ |
| 6 #define CONTENT_RENDERER_MEDIA_WEBRTC_AUDIO_DEVICE_IMPL_H_ | 6 #define CONTENT_RENDERER_MEDIA_WEBRTC_AUDIO_DEVICE_IMPL_H_ |
| 7 | 7 |
| 8 #include <string> | 8 #include <string> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 185 class WebRtcAudioRenderer; | 185 class WebRtcAudioRenderer; |
| 186 | 186 |
| 187 // TODO(xians): Move the following two interfaces to webrtc so that | 187 // TODO(xians): Move the following two interfaces to webrtc so that |
| 188 // libjingle can own references to the renderer and capturer. | 188 // libjingle can own references to the renderer and capturer. |
| 189 class WebRtcAudioRendererSource { | 189 class WebRtcAudioRendererSource { |
| 190 public: | 190 public: |
| 191 // Callback to get the rendered data. | 191 // Callback to get the rendered data. |
| 192 virtual void RenderData(media::AudioBus* audio_bus, | 192 virtual void RenderData(media::AudioBus* audio_bus, |
| 193 int sample_rate, | 193 int sample_rate, |
| 194 int audio_delay_milliseconds, | 194 int audio_delay_milliseconds, |
| 195 uint32_t skipped_frames, |
| 195 base::TimeDelta* current_time) = 0; | 196 base::TimeDelta* current_time) = 0; |
| 196 | 197 |
| 197 // Callback to notify the client that the renderer is going away. | 198 // Callback to notify the client that the renderer is going away. |
| 198 virtual void RemoveAudioRenderer(WebRtcAudioRenderer* renderer) = 0; | 199 virtual void RemoveAudioRenderer(WebRtcAudioRenderer* renderer) = 0; |
| 199 | 200 |
| 200 // Callback to notify the client that the audio renderer thread stopped. | 201 // Callback to notify the client that the audio renderer thread stopped. |
| 201 // This function must be called only when that thread is actually stopped. | 202 // This function must be called only when that thread is actually stopped. |
| 202 // Otherwise a race may occur. | 203 // Otherwise a race may occur. |
| 203 virtual void AudioRendererThreadStopped() = 0; | 204 virtual void AudioRendererThreadStopped() = 0; |
| 204 | 205 |
| 205 protected: | 206 protected: |
| 206 virtual ~WebRtcAudioRendererSource() {} | 207 virtual ~WebRtcAudioRendererSource() {} |
| 207 }; | 208 }; |
| 208 | 209 |
| 209 // TODO(xians): Merge this interface with WebRtcAudioRendererSource. | 210 // TODO(xians): Merge this interface with WebRtcAudioRendererSource. |
| 210 // The reason why we could not do it today is that WebRtcAudioRendererSource | 211 // The reason why we could not do it today is that WebRtcAudioRendererSource |
| 211 // gets the data by pulling, while the data is pushed into | 212 // gets the data by pulling, while the data is pushed into |
| 212 // WebRtcPlayoutDataSource::Sink. | 213 // WebRtcPlayoutDataSource::Sink. |
| 213 class WebRtcPlayoutDataSource { | 214 class WebRtcPlayoutDataSource { |
| 214 public: | 215 public: |
| 215 class Sink { | 216 class Sink { |
| 216 public: | 217 public: |
| 217 // Callback to get the playout data. | 218 // Callback to get the playout data. |
| 218 // Called on the render audio thread. | 219 // Called on the render audio thread. |
| 219 virtual void OnPlayoutData(media::AudioBus* audio_bus, | 220 virtual void OnPlayoutData(media::AudioBus* audio_bus, |
| 220 int sample_rate, | 221 int sample_rate, |
| 221 int audio_delay_milliseconds) = 0; | 222 int audio_delay_milliseconds, |
| 223 uint32_t skipped_frames) = 0; |
| 222 | 224 |
| 223 // Callback to notify the sink that the source has changed. | 225 // Callback to notify the sink that the source has changed. |
| 224 // Called on the main render thread. | 226 // Called on the main render thread. |
| 225 virtual void OnPlayoutDataSourceChanged() = 0; | 227 virtual void OnPlayoutDataSourceChanged() = 0; |
| 226 | 228 |
| 227 protected: | 229 protected: |
| 228 virtual ~Sink() {} | 230 virtual ~Sink() {} |
| 229 }; | 231 }; |
| 230 | 232 |
| 231 // Adds/Removes the sink of WebRtcAudioRendererSource to the ADM. | 233 // Adds/Removes the sink of WebRtcAudioRendererSource to the ADM. |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 335 | 337 |
| 336 // Make destructor private to ensure that we can only be deleted by Release(). | 338 // Make destructor private to ensure that we can only be deleted by Release(). |
| 337 ~WebRtcAudioDeviceImpl() override; | 339 ~WebRtcAudioDeviceImpl() override; |
| 338 | 340 |
| 339 // WebRtcAudioRendererSource implementation. | 341 // WebRtcAudioRendererSource implementation. |
| 340 | 342 |
| 341 // Called on the AudioOutputDevice worker thread. | 343 // Called on the AudioOutputDevice worker thread. |
| 342 void RenderData(media::AudioBus* audio_bus, | 344 void RenderData(media::AudioBus* audio_bus, |
| 343 int sample_rate, | 345 int sample_rate, |
| 344 int audio_delay_milliseconds, | 346 int audio_delay_milliseconds, |
| 347 uint32_t skipped_frames, |
| 345 base::TimeDelta* current_time) override; | 348 base::TimeDelta* current_time) override; |
| 346 | 349 |
| 347 // Called on the main render thread. | 350 // Called on the main render thread. |
| 348 void RemoveAudioRenderer(WebRtcAudioRenderer* renderer) override; | 351 void RemoveAudioRenderer(WebRtcAudioRenderer* renderer) override; |
| 349 void AudioRendererThreadStopped() override; | 352 void AudioRendererThreadStopped() override; |
| 350 | 353 |
| 351 // WebRtcPlayoutDataSource implementation. | 354 // WebRtcPlayoutDataSource implementation. |
| 352 void AddPlayoutSink(WebRtcPlayoutDataSource::Sink* sink) override; | 355 void AddPlayoutSink(WebRtcPlayoutDataSource::Sink* sink) override; |
| 353 void RemovePlayoutSink(WebRtcPlayoutDataSource::Sink* sink) override; | 356 void RemovePlayoutSink(WebRtcPlayoutDataSource::Sink* sink) override; |
| 354 | 357 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 403 // Buffer used for temporary storage during render callback. | 406 // Buffer used for temporary storage during render callback. |
| 404 // It is only accessed by the audio render thread. | 407 // It is only accessed by the audio render thread. |
| 405 std::vector<int16> render_buffer_; | 408 std::vector<int16> render_buffer_; |
| 406 | 409 |
| 407 DISALLOW_COPY_AND_ASSIGN(WebRtcAudioDeviceImpl); | 410 DISALLOW_COPY_AND_ASSIGN(WebRtcAudioDeviceImpl); |
| 408 }; | 411 }; |
| 409 | 412 |
| 410 } // namespace content | 413 } // namespace content |
| 411 | 414 |
| 412 #endif // CONTENT_RENDERER_MEDIA_WEBRTC_AUDIO_DEVICE_IMPL_H_ | 415 #endif // CONTENT_RENDERER_MEDIA_WEBRTC_AUDIO_DEVICE_IMPL_H_ |
| OLD | NEW |