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

Unified Diff: content/renderer/media/media_stream_audio_processor.cc

Issue 139303016: Feed the render data to MediaStreamAudioProcessor and used AudioBus in render callback (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: checked echo_control_mobile()->is_enabled()) for android and ios Created 6 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: content/renderer/media/media_stream_audio_processor.cc
diff --git a/content/renderer/media/media_stream_audio_processor.cc b/content/renderer/media/media_stream_audio_processor.cc
index 58e11dd4f834f2985bee746ccc00f6341606593b..5bcbb6dd9e0177190f41451534486957f6f10cae 100644
--- a/content/renderer/media/media_stream_audio_processor.cc
+++ b/content/renderer/media/media_stream_audio_processor.cc
@@ -142,8 +142,10 @@ class MediaStreamAudioProcessor::MediaStreamAudioConverter
MediaStreamAudioProcessor::MediaStreamAudioProcessor(
const media::AudioParameters& source_params,
const blink::WebMediaConstraints& constraints,
- int effects)
+ int effects,
+ WebRtcPlayoutDataSource* playout_data_source)
: render_delay_ms_(0),
+ playout_data_source_(playout_data_source),
audio_mirroring_(false),
typing_detected_(false) {
capture_thread_checker_.DetachFromThread();
@@ -162,42 +164,11 @@ void MediaStreamAudioProcessor::PushCaptureData(media::AudioBus* audio_source) {
capture_converter_->Push(audio_source);
}
-void MediaStreamAudioProcessor::PushRenderData(
- const int16* render_audio, int sample_rate, int number_of_channels,
- int number_of_frames, base::TimeDelta render_delay) {
- DCHECK(render_thread_checker_.CalledOnValidThread());
-
- // Return immediately if the echo cancellation is off.
- if (!audio_processing_ ||
- !audio_processing_->echo_cancellation()->is_enabled()) {
- return;
- }
-
- TRACE_EVENT0("audio",
- "MediaStreamAudioProcessor::FeedRenderDataToAudioProcessing");
- int64 new_render_delay_ms = render_delay.InMilliseconds();
- DCHECK_LT(new_render_delay_ms,
- std::numeric_limits<base::subtle::Atomic32>::max());
- base::subtle::Release_Store(&render_delay_ms_, new_render_delay_ms);
-
- InitializeRenderConverterIfNeeded(sample_rate, number_of_channels,
- number_of_frames);
-
- // TODO(xians): Avoid this extra interleave/deinterleave.
- render_data_bus_->FromInterleaved(render_audio,
- render_data_bus_->frames(),
- sizeof(render_audio[0]));
- render_converter_->Push(render_data_bus_.get());
- while (render_converter_->Convert(&render_frame_))
- audio_processing_->AnalyzeReverseStream(&render_frame_);
-}
-
bool MediaStreamAudioProcessor::ProcessAndConsumeData(
base::TimeDelta capture_delay, int volume, bool key_pressed,
int* new_volume, int16** out) {
DCHECK(capture_thread_checker_.CalledOnValidThread());
- TRACE_EVENT0("audio",
- "MediaStreamAudioProcessor::ProcessAndConsumeData");
+ TRACE_EVENT0("audio", "MediaStreamAudioProcessor::ProcessAndConsumeData");
if (!capture_converter_->Convert(&capture_frame_))
return false;
@@ -217,6 +188,29 @@ const media::AudioParameters& MediaStreamAudioProcessor::OutputFormat() const {
return capture_converter_->sink_parameters();
}
+void MediaStreamAudioProcessor::OnPlayoutData(media::AudioBus* audio_bus,
+ int sample_rate,
+ int audio_delay_milliseconds) {
+ DCHECK(render_thread_checker_.CalledOnValidThread());
+#if defined(OS_ANDROID) || defined(OS_IOS)
+ DCHECK(audio_processing_->echo_control_mobile()->is_enabled());
+#else
+ DCHECK(audio_processing_->echo_cancellation()->is_enabled());
+#endif
+
+ TRACE_EVENT0("audio", "MediaStreamAudioProcessor::OnPlayoutData");
+ DCHECK_LT(audio_delay_milliseconds,
+ std::numeric_limits<base::subtle::Atomic32>::max());
+ base::subtle::Release_Store(&render_delay_ms_, audio_delay_milliseconds);
+
+ InitializeRenderConverterIfNeeded(sample_rate, audio_bus->channels(),
+ audio_bus->frames());
+
+ render_converter_->Push(audio_bus);
+ while (render_converter_->Convert(&render_frame_))
+ audio_processing_->AnalyzeReverseStream(&render_frame_);
+}
+
void MediaStreamAudioProcessor::InitializeAudioProcessingModule(
const blink::WebMediaConstraints& constraints, int effects) {
DCHECK(!audio_processing_);
@@ -279,6 +273,9 @@ void MediaStreamAudioProcessor::InitializeAudioProcessingModule(
EnableEchoCancellation(audio_processing_.get());
if (enable_experimental_aec)
EnableExperimentalEchoCancellation(audio_processing_.get());
+
+ if (playout_data_source_)
+ playout_data_source_->AddPlayoutSink(this);
}
if (enable_ns)
@@ -423,6 +420,9 @@ void MediaStreamAudioProcessor::StopAudioProcessing() {
if (!audio_processing_.get())
return;
+ if (playout_data_source_)
+ playout_data_source_->RemovePlayoutSink(this);
+
audio_processing_.reset();
}

Powered by Google App Engine
This is Rietveld 408576698