| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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 #include "content/renderer/media/webrtc_audio_renderer.h" | 5 #include "content/renderer/media/webrtc_audio_renderer.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/metrics/histogram.h" | 8 #include "base/metrics/histogram.h" |
| 9 #include "base/strings/string_util.h" | 9 #include "base/strings/string_util.h" |
| 10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 | 124 |
| 125 private: | 125 private: |
| 126 base::ThreadChecker thread_checker_; | 126 base::ThreadChecker thread_checker_; |
| 127 const scoped_refptr<MediaStreamAudioRenderer> delegate_; | 127 const scoped_refptr<MediaStreamAudioRenderer> delegate_; |
| 128 const scoped_refptr<webrtc::MediaStreamInterface> media_stream_; | 128 const scoped_refptr<webrtc::MediaStreamInterface> media_stream_; |
| 129 bool started_; | 129 bool started_; |
| 130 WebRtcAudioRenderer::PlayingState playing_state_; | 130 WebRtcAudioRenderer::PlayingState playing_state_; |
| 131 OnPlayStateChanged on_play_state_changed_; | 131 OnPlayStateChanged on_play_state_changed_; |
| 132 }; | 132 }; |
| 133 | 133 |
| 134 // Returns either AudioParameters::NO_EFFECTS or AudioParameters::DUCKING | |
| 135 // depending on whether or not an input element is currently open with | |
| 136 // ducking enabled. | |
| 137 int GetCurrentDuckingFlag(int render_frame_id) { | |
| 138 RenderFrameImpl* const frame = | |
| 139 RenderFrameImpl::FromRoutingID(render_frame_id); | |
| 140 MediaStreamDispatcher* const dispatcher = frame ? | |
| 141 frame->GetMediaStreamDispatcher() : NULL; | |
| 142 if (dispatcher && dispatcher->IsAudioDuckingActive()) { | |
| 143 return media::AudioParameters::DUCKING; | |
| 144 } | |
| 145 | |
| 146 return media::AudioParameters::NO_EFFECTS; | |
| 147 } | |
| 148 | |
| 149 } // namespace | 134 } // namespace |
| 150 | 135 |
| 151 int WebRtcAudioRenderer::GetOptimalBufferSize(int sample_rate, | 136 int WebRtcAudioRenderer::GetOptimalBufferSize(int sample_rate, |
| 152 int hardware_buffer_size) { | 137 int hardware_buffer_size) { |
| 153 // Use native hardware buffer size as default. On Windows, we strive to open | 138 // Use native hardware buffer size as default. On Windows, we strive to open |
| 154 // up using this native hardware buffer size to achieve best | 139 // up using this native hardware buffer size to achieve best |
| 155 // possible performance and to ensure that no FIFO is needed on the browser | 140 // possible performance and to ensure that no FIFO is needed on the browser |
| 156 // side to match the client request. That is why there is no #if case for | 141 // side to match the client request. That is why there is no #if case for |
| 157 // Windows below. | 142 // Windows below. |
| 158 int frames_per_buffer = hardware_buffer_size; | 143 int frames_per_buffer = hardware_buffer_size; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 193 session_id_(session_id), | 178 session_id_(session_id), |
| 194 signaling_thread_(signaling_thread), | 179 signaling_thread_(signaling_thread), |
| 195 media_stream_(media_stream), | 180 media_stream_(media_stream), |
| 196 source_(NULL), | 181 source_(NULL), |
| 197 play_ref_count_(0), | 182 play_ref_count_(0), |
| 198 start_ref_count_(0), | 183 start_ref_count_(0), |
| 199 audio_delay_milliseconds_(0), | 184 audio_delay_milliseconds_(0), |
| 200 fifo_delay_milliseconds_(0), | 185 fifo_delay_milliseconds_(0), |
| 201 sink_params_(media::AudioParameters::AUDIO_PCM_LOW_LATENCY, | 186 sink_params_(media::AudioParameters::AUDIO_PCM_LOW_LATENCY, |
| 202 media::CHANNEL_LAYOUT_STEREO, sample_rate, 16, | 187 media::CHANNEL_LAYOUT_STEREO, sample_rate, 16, |
| 203 frames_per_buffer, | 188 frames_per_buffer), |
| 204 GetCurrentDuckingFlag(source_render_frame_id)), | |
| 205 render_callback_count_(0) { | 189 render_callback_count_(0) { |
| 206 WebRtcLogMessage(base::StringPrintf( | 190 WebRtcLogMessage(base::StringPrintf( |
| 207 "WAR::WAR. source_render_frame_id=%d" | 191 "WAR::WAR. source_render_frame_id=%d" |
| 208 ", session_id=%d, sample_rate=%d, frames_per_buffer=%d, effects=%i", | 192 ", session_id=%d, sample_rate=%d, frames_per_buffer=%d, effects=%i", |
| 209 source_render_frame_id, session_id, sample_rate, frames_per_buffer, | 193 source_render_frame_id, session_id, sample_rate, frames_per_buffer, |
| 210 sink_params_.effects())); | 194 sink_params_.effects())); |
| 211 } | 195 } |
| 212 | 196 |
| 213 WebRtcAudioRenderer::~WebRtcAudioRenderer() { | 197 WebRtcAudioRenderer::~WebRtcAudioRenderer() { |
| 214 DCHECK(thread_checker_.CalledOnValidThread()); | 198 DCHECK(thread_checker_.CalledOnValidThread()); |
| (...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 569 if (RemovePlayingState(source, state)) | 553 if (RemovePlayingState(source, state)) |
| 570 EnterPauseState(); | 554 EnterPauseState(); |
| 571 } else if (AddPlayingState(source, state)) { | 555 } else if (AddPlayingState(source, state)) { |
| 572 EnterPlayState(); | 556 EnterPlayState(); |
| 573 } | 557 } |
| 574 UpdateSourceVolume(source); | 558 UpdateSourceVolume(source); |
| 575 } | 559 } |
| 576 } | 560 } |
| 577 | 561 |
| 578 } // namespace content | 562 } // namespace content |
| OLD | NEW |