Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(556)

Side by Side Diff: content/renderer/media/webrtc_audio_renderer.cc

Issue 367923004: Turn audio ducking on by default on Windows again. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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"
11 #include "content/renderer/media/audio_device_factory.h" 11 #include "content/renderer/media/audio_device_factory.h"
12 #include "content/renderer/media/media_stream_dispatcher.h"
12 #include "content/renderer/media/webrtc_audio_device_impl.h" 13 #include "content/renderer/media/webrtc_audio_device_impl.h"
13 #include "content/renderer/media/webrtc_logging.h" 14 #include "content/renderer/media/webrtc_logging.h"
15 #include "content/renderer/render_view_impl.h"
14 #include "media/audio/audio_output_device.h" 16 #include "media/audio/audio_output_device.h"
15 #include "media/audio/audio_parameters.h" 17 #include "media/audio/audio_parameters.h"
16 #include "media/audio/sample_rates.h" 18 #include "media/audio/sample_rates.h"
17 #include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h" 19 #include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h"
18 #include "third_party/libjingle/source/talk/media/base/audiorenderer.h" 20 #include "third_party/libjingle/source/talk/media/base/audiorenderer.h"
19 21
20 22
21 #if defined(OS_WIN) 23 #if defined(OS_WIN)
22 #include "base/win/windows_version.h" 24 #include "base/win/windows_version.h"
23 #include "media/audio/win/core_audio_util_win.h" 25 #include "media/audio/win/core_audio_util_win.h"
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 176
175 private: 177 private:
176 base::ThreadChecker thread_checker_; 178 base::ThreadChecker thread_checker_;
177 const scoped_refptr<MediaStreamAudioRenderer> delegate_; 179 const scoped_refptr<MediaStreamAudioRenderer> delegate_;
178 const scoped_refptr<webrtc::MediaStreamInterface> media_stream_; 180 const scoped_refptr<webrtc::MediaStreamInterface> media_stream_;
179 bool started_; 181 bool started_;
180 WebRtcAudioRenderer::PlayingState playing_state_; 182 WebRtcAudioRenderer::PlayingState playing_state_;
181 OnPlayStateChanged on_play_state_changed_; 183 OnPlayStateChanged on_play_state_changed_;
182 }; 184 };
183 185
186 // Returns either AudioParameters::NO_EFFECTS or AudioParameters::DUCKING
187 // depending on whether or not an input element is currently open with
188 // ducking enabled.
189 int GetCurrentDuckingFlag(int render_view_id) {
190 RenderViewImpl* render_view = RenderViewImpl::FromRoutingID(render_view_id);
191 if (render_view && render_view->media_stream_dispatcher() &&
192 render_view->media_stream_dispatcher()->IsAudioDuckingActive()) {
193 return media::AudioParameters::DUCKING;
194 }
195
196 return media::AudioParameters::NO_EFFECTS;
197 }
198
184 } // namespace 199 } // namespace
185 200
186 WebRtcAudioRenderer::WebRtcAudioRenderer( 201 WebRtcAudioRenderer::WebRtcAudioRenderer(
187 const scoped_refptr<webrtc::MediaStreamInterface>& media_stream, 202 const scoped_refptr<webrtc::MediaStreamInterface>& media_stream,
188 int source_render_view_id, 203 int source_render_view_id,
189 int source_render_frame_id, 204 int source_render_frame_id,
190 int session_id, 205 int session_id,
191 int sample_rate, 206 int sample_rate,
192 int frames_per_buffer) 207 int frames_per_buffer)
193 : state_(UNINITIALIZED), 208 : state_(UNINITIALIZED),
194 source_render_view_id_(source_render_view_id), 209 source_render_view_id_(source_render_view_id),
195 source_render_frame_id_(source_render_frame_id), 210 source_render_frame_id_(source_render_frame_id),
196 session_id_(session_id), 211 session_id_(session_id),
197 media_stream_(media_stream), 212 media_stream_(media_stream),
198 source_(NULL), 213 source_(NULL),
199 play_ref_count_(0), 214 play_ref_count_(0),
200 start_ref_count_(0), 215 start_ref_count_(0),
201 audio_delay_milliseconds_(0), 216 audio_delay_milliseconds_(0),
202 fifo_delay_milliseconds_(0), 217 fifo_delay_milliseconds_(0),
203 // TODO(tommi): Ducking is currently not set on sink_params due to an
204 // issue on Windows that causes the ducked state to be pinned if an output
205 // stream is opened before an input stream (both in communication mode).
206 // Furthermore the input stream may not be associated with the output
207 // stream, which results in the output stream getting incorrectly ducked.
208 // What should happen here is that the ducking flag should be raised
209 // iff an input device is currently open with ducking set.
210 // Bugs: crbug/391414, crbug/391247.
211 sink_params_(media::AudioParameters::AUDIO_PCM_LOW_LATENCY, 218 sink_params_(media::AudioParameters::AUDIO_PCM_LOW_LATENCY,
212 media::CHANNEL_LAYOUT_STEREO, 0, sample_rate, 16, 219 media::CHANNEL_LAYOUT_STEREO, 0, sample_rate, 16,
213 frames_per_buffer, media::AudioParameters::NO_EFFECTS) { 220 frames_per_buffer,
221 GetCurrentDuckingFlag(source_render_view_id)) {
214 WebRtcLogMessage(base::StringPrintf( 222 WebRtcLogMessage(base::StringPrintf(
215 "WAR::WAR. source_render_view_id=%d" 223 "WAR::WAR. source_render_view_id=%d"
216 ", session_id=%d, sample_rate=%d, frames_per_buffer=%d", 224 ", session_id=%d, sample_rate=%d, frames_per_buffer=%d, effects=%i",
217 source_render_view_id, 225 source_render_view_id,
218 session_id, 226 session_id,
219 sample_rate, 227 sample_rate,
220 frames_per_buffer)); 228 frames_per_buffer,
229 sink_params_.effects()));
221 } 230 }
222 231
223 WebRtcAudioRenderer::~WebRtcAudioRenderer() { 232 WebRtcAudioRenderer::~WebRtcAudioRenderer() {
224 DCHECK(thread_checker_.CalledOnValidThread()); 233 DCHECK(thread_checker_.CalledOnValidThread());
225 DCHECK_EQ(state_, UNINITIALIZED); 234 DCHECK_EQ(state_, UNINITIALIZED);
226 } 235 }
227 236
228 bool WebRtcAudioRenderer::Initialize(WebRtcAudioRendererSource* source) { 237 bool WebRtcAudioRenderer::Initialize(WebRtcAudioRendererSource* source) {
229 DVLOG(1) << "WebRtcAudioRenderer::Initialize()"; 238 DVLOG(1) << "WebRtcAudioRenderer::Initialize()";
230 DCHECK(thread_checker_.CalledOnValidThread()); 239 DCHECK(thread_checker_.CalledOnValidThread());
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after
592 if (RemovePlayingState(source, state)) 601 if (RemovePlayingState(source, state))
593 EnterPauseState(); 602 EnterPauseState();
594 } else if (AddPlayingState(source, state)) { 603 } else if (AddPlayingState(source, state)) {
595 EnterPlayState(); 604 EnterPlayState();
596 } 605 }
597 UpdateSourceVolume(source); 606 UpdateSourceVolume(source);
598 } 607 }
599 } 608 }
600 609
601 } // namespace content 610 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698