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

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

Issue 2801853005: Create a private API for controlling WebRTC's AEC3 (Closed)
Patch Set: Fixing typo Created 3 years, 8 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 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 #include "content/renderer/media/media_stream_audio_processor.h" 5 #include "content/renderer/media/media_stream_audio_processor.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 // True when |destination_| contains the data to be returned by the next call 316 // True when |destination_| contains the data to be returned by the next call
317 // to Consume(). Only used when the FIFO is disabled. 317 // to Consume(). Only used when the FIFO is disabled.
318 bool data_available_; 318 bool data_available_;
319 }; 319 };
320 320
321 MediaStreamAudioProcessor::MediaStreamAudioProcessor( 321 MediaStreamAudioProcessor::MediaStreamAudioProcessor(
322 const blink::WebMediaConstraints& constraints, 322 const blink::WebMediaConstraints& constraints,
323 const MediaStreamDevice::AudioDeviceParameters& input_params, 323 const MediaStreamDevice::AudioDeviceParameters& input_params,
324 WebRtcPlayoutDataSource* playout_data_source) 324 WebRtcPlayoutDataSource* playout_data_source)
325 : render_delay_ms_(0), 325 : render_delay_ms_(0),
326 has_echo_cancellation_(false),
326 playout_data_source_(playout_data_source), 327 playout_data_source_(playout_data_source),
327 main_thread_runner_(base::ThreadTaskRunnerHandle::Get()), 328 main_thread_runner_(base::ThreadTaskRunnerHandle::Get()),
328 audio_mirroring_(false), 329 audio_mirroring_(false),
329 typing_detected_(false), 330 typing_detected_(false),
330 stopped_(false) { 331 stopped_(false) {
331 DCHECK(main_thread_runner_); 332 DCHECK(main_thread_runner_);
332 capture_thread_checker_.DetachFromThread(); 333 capture_thread_checker_.DetachFromThread();
333 render_thread_checker_.DetachFromThread(); 334 render_thread_checker_.DetachFromThread();
334 InitializeAudioProcessingModule(constraints, input_params); 335 InitializeAudioProcessingModule(constraints, input_params);
335 336
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
479 else 480 else
480 file.Close(); 481 file.Close();
481 } 482 }
482 483
483 void MediaStreamAudioProcessor::OnDisableAecDump() { 484 void MediaStreamAudioProcessor::OnDisableAecDump() {
484 DCHECK(main_thread_runner_->BelongsToCurrentThread()); 485 DCHECK(main_thread_runner_->BelongsToCurrentThread());
485 if (audio_processing_) 486 if (audio_processing_)
486 StopEchoCancellationDump(audio_processing_.get()); 487 StopEchoCancellationDump(audio_processing_.get());
487 } 488 }
488 489
490 void MediaStreamAudioProcessor::OnAec3Enable(bool enable) {
491 DCHECK(main_thread_runner_->BelongsToCurrentThread());
492 if (override_aec3_ == enable)
493 return;
494
495 override_aec3_ = enable;
496 if (!has_echo_cancellation_)
497 return;
498
499 auto apm_config = audio_processing_->GetConfig();
500 if (apm_config.echo_canceller3.enabled == enable)
501 return;
502
503 apm_config.echo_canceller3.enabled = enable;
504 audio_processing_->ApplyConfig(apm_config);
505 DCHECK(echo_information_);
506 echo_information_.reset(new EchoInformation());
507 }
508
489 void MediaStreamAudioProcessor::OnIpcClosing() { 509 void MediaStreamAudioProcessor::OnIpcClosing() {
490 DCHECK(main_thread_runner_->BelongsToCurrentThread()); 510 DCHECK(main_thread_runner_->BelongsToCurrentThread());
491 aec_dump_message_filter_ = NULL; 511 aec_dump_message_filter_ = NULL;
492 } 512 }
493 513
494 // static 514 // static
495 bool MediaStreamAudioProcessor::WouldModifyAudio( 515 bool MediaStreamAudioProcessor::WouldModifyAudio(
496 const blink::WebMediaConstraints& constraints, 516 const blink::WebMediaConstraints& constraints,
497 int effects_flags) { 517 int effects_flags) {
498 // Note: This method should by kept in-sync with any changes to the logic in 518 // Note: This method should by kept in-sync with any changes to the logic in
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
589 609
590 MediaAudioConstraints audio_constraints(constraints, input_params.effects); 610 MediaAudioConstraints audio_constraints(constraints, input_params.effects);
591 611
592 // Note: The audio mirroring constraint (i.e., swap left and right channels) 612 // Note: The audio mirroring constraint (i.e., swap left and right channels)
593 // is handled within this MediaStreamAudioProcessor and does not, by itself, 613 // is handled within this MediaStreamAudioProcessor and does not, by itself,
594 // require webrtc::AudioProcessing. 614 // require webrtc::AudioProcessing.
595 audio_mirroring_ = audio_constraints.GetGoogAudioMirroring(); 615 audio_mirroring_ = audio_constraints.GetGoogAudioMirroring();
596 616
597 const bool echo_cancellation = 617 const bool echo_cancellation =
598 audio_constraints.GetEchoCancellationProperty(); 618 audio_constraints.GetEchoCancellationProperty();
619 has_echo_cancellation_ = echo_cancellation;
599 const bool goog_agc = audio_constraints.GetGoogAutoGainControl(); 620 const bool goog_agc = audio_constraints.GetGoogAutoGainControl();
600 621
601 #if defined(OS_ANDROID) 622 #if defined(OS_ANDROID)
602 const bool goog_experimental_aec = false; 623 const bool goog_experimental_aec = false;
603 const bool goog_typing_detection = false; 624 const bool goog_typing_detection = false;
604 #else 625 #else
605 const bool goog_experimental_aec = 626 const bool goog_experimental_aec =
606 audio_constraints.GetGoogExperimentalEchoCancellation(); 627 audio_constraints.GetGoogExperimentalEchoCancellation();
607 const bool goog_typing_detection = 628 const bool goog_typing_detection =
608 audio_constraints.GetGoogTypingNoiseDetection(); 629 audio_constraints.GetGoogTypingNoiseDetection();
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
672 playout_data_source_->AddPlayoutSink(this); 693 playout_data_source_->AddPlayoutSink(this);
673 } 694 }
674 695
675 if (echo_cancellation) { 696 if (echo_cancellation) {
676 EnableEchoCancellation(audio_processing_.get()); 697 EnableEchoCancellation(audio_processing_.get());
677 698
678 // Prepare for logging echo information. If there are data remaining in 699 // Prepare for logging echo information. If there are data remaining in
679 // |echo_information_| we simply discard it. 700 // |echo_information_| we simply discard it.
680 echo_information_.reset(new EchoInformation()); 701 echo_information_.reset(new EchoInformation());
681 702
682 apm_config.echo_canceller3.enabled = 703 apm_config.echo_canceller3.enabled = override_aec3_.value_or(
683 base::FeatureList::IsEnabled(features::kWebRtcUseEchoCanceller3); 704 base::FeatureList::IsEnabled(features::kWebRtcUseEchoCanceller3));
684 } else { 705 } else {
685 apm_config.echo_canceller3.enabled = false; 706 apm_config.echo_canceller3.enabled = false;
686 } 707 }
687 708
688 if (goog_ns) { 709 if (goog_ns) {
689 // The beamforming postfilter is effective at suppressing stationary noise, 710 // The beamforming postfilter is effective at suppressing stationary noise,
690 // so reduce the single-channel NS aggressiveness when enabled. 711 // so reduce the single-channel NS aggressiveness when enabled.
691 const NoiseSuppression::Level ns_level = 712 const NoiseSuppression::Level ns_level =
692 config.Get<webrtc::Beamforming>().enabled ? NoiseSuppression::kLow 713 config.Get<webrtc::Beamforming>().enabled ? NoiseSuppression::kLow
693 : NoiseSuppression::kHigh; 714 : NoiseSuppression::kHigh;
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
870 0 : agc->stream_analog_level(); 891 0 : agc->stream_analog_level();
871 } 892 }
872 893
873 void MediaStreamAudioProcessor::UpdateAecStats() { 894 void MediaStreamAudioProcessor::UpdateAecStats() {
874 DCHECK(main_thread_runner_->BelongsToCurrentThread()); 895 DCHECK(main_thread_runner_->BelongsToCurrentThread());
875 if (echo_information_) 896 if (echo_information_)
876 echo_information_->UpdateAecStats(audio_processing_->echo_cancellation()); 897 echo_information_->UpdateAecStats(audio_processing_->echo_cancellation());
877 } 898 }
878 899
879 } // namespace content 900 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/media_stream_audio_processor.h ('k') | content/renderer/media/media_stream_audio_processor_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698