| Index: content/renderer/media/webrtc_audio_renderer.cc
|
| diff --git a/content/renderer/media/webrtc_audio_renderer.cc b/content/renderer/media/webrtc_audio_renderer.cc
|
| index 3699ac89b927cc3ad59c4c4711c0d7e72bafb015..3193dba59a48725885a904a84d11d8cd8155eaae 100644
|
| --- a/content/renderer/media/webrtc_audio_renderer.cc
|
| +++ b/content/renderer/media/webrtc_audio_renderer.cc
|
| @@ -9,8 +9,10 @@
|
| #include "base/strings/string_util.h"
|
| #include "base/strings/stringprintf.h"
|
| #include "content/renderer/media/audio_device_factory.h"
|
| +#include "content/renderer/media/media_stream_dispatcher.h"
|
| #include "content/renderer/media/webrtc_audio_device_impl.h"
|
| #include "content/renderer/media/webrtc_logging.h"
|
| +#include "content/renderer/render_view_impl.h"
|
| #include "media/audio/audio_output_device.h"
|
| #include "media/audio/audio_parameters.h"
|
| #include "media/audio/sample_rates.h"
|
| @@ -181,6 +183,19 @@ class SharedAudioRenderer : public MediaStreamAudioRenderer {
|
| OnPlayStateChanged on_play_state_changed_;
|
| };
|
|
|
| +// Returns either AudioParameters::NO_EFFECTS or AudioParameters::DUCKING
|
| +// depending on whether or not an input element is currently open with
|
| +// ducking enabled.
|
| +int GetCurrentDuckingFlag(int render_view_id) {
|
| + RenderViewImpl* render_view = RenderViewImpl::FromRoutingID(render_view_id);
|
| + if (render_view && render_view->media_stream_dispatcher() &&
|
| + render_view->media_stream_dispatcher()->IsAudioDuckingActive()) {
|
| + return media::AudioParameters::DUCKING;
|
| + }
|
| +
|
| + return media::AudioParameters::NO_EFFECTS;
|
| +}
|
| +
|
| } // namespace
|
|
|
| WebRtcAudioRenderer::WebRtcAudioRenderer(
|
| @@ -200,24 +215,18 @@ WebRtcAudioRenderer::WebRtcAudioRenderer(
|
| start_ref_count_(0),
|
| audio_delay_milliseconds_(0),
|
| fifo_delay_milliseconds_(0),
|
| - // TODO(tommi): Ducking is currently not set on sink_params due to an
|
| - // issue on Windows that causes the ducked state to be pinned if an output
|
| - // stream is opened before an input stream (both in communication mode).
|
| - // Furthermore the input stream may not be associated with the output
|
| - // stream, which results in the output stream getting incorrectly ducked.
|
| - // What should happen here is that the ducking flag should be raised
|
| - // iff an input device is currently open with ducking set.
|
| - // Bugs: crbug/391414, crbug/391247.
|
| sink_params_(media::AudioParameters::AUDIO_PCM_LOW_LATENCY,
|
| media::CHANNEL_LAYOUT_STEREO, 0, sample_rate, 16,
|
| - frames_per_buffer, media::AudioParameters::NO_EFFECTS) {
|
| + frames_per_buffer,
|
| + GetCurrentDuckingFlag(source_render_view_id)) {
|
| WebRtcLogMessage(base::StringPrintf(
|
| "WAR::WAR. source_render_view_id=%d"
|
| - ", session_id=%d, sample_rate=%d, frames_per_buffer=%d",
|
| + ", session_id=%d, sample_rate=%d, frames_per_buffer=%d, effects=%i",
|
| source_render_view_id,
|
| session_id,
|
| sample_rate,
|
| - frames_per_buffer));
|
| + frames_per_buffer,
|
| + sink_params_.effects()));
|
| }
|
|
|
| WebRtcAudioRenderer::~WebRtcAudioRenderer() {
|
|
|