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

Side by Side Diff: webrtc/modules/audio_processing/audio_processing_impl.cc

Issue 1773173002: Dont always downsample to 16kHz in the reverse stream in APM (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@aecm
Patch Set: Naming Created 4 years, 9 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 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 52
53 #define RETURN_ON_ERR(expr) \ 53 #define RETURN_ON_ERR(expr) \
54 do { \ 54 do { \
55 int err = (expr); \ 55 int err = (expr); \
56 if (err != kNoError) { \ 56 if (err != kNoError) { \
57 return err; \ 57 return err; \
58 } \ 58 } \
59 } while (0) 59 } while (0)
60 60
61 namespace webrtc { 61 namespace webrtc {
62
63 const int AudioProcessing::kNativeSampleRatesHz[] = {
64 AudioProcessing::kSampleRate8kHz,
65 AudioProcessing::kSampleRate16kHz,
66 AudioProcessing::kSampleRate32kHz,
67 AudioProcessing::kSampleRate48kHz};
68 const size_t AudioProcessing::kNumNativeSampleRates =
69 arraysize(AudioProcessing::kNativeSampleRatesHz);
70 const int AudioProcessing::kMaxNativeSampleRateHz = AudioProcessing::
71 kNativeSampleRatesHz[AudioProcessing::kNumNativeSampleRates - 1];
peah-webrtc 2016/03/10 06:59:24 Afaics, this means that the tri-band 48 kHz splitt
aluebs-webrtc 2016/03/10 15:34:32 That is adressed in this CL that already landed: h
72
62 namespace { 73 namespace {
63 74
64 static bool LayoutHasKeyboard(AudioProcessing::ChannelLayout layout) { 75 static bool LayoutHasKeyboard(AudioProcessing::ChannelLayout layout) {
65 switch (layout) { 76 switch (layout) {
66 case AudioProcessing::kMono: 77 case AudioProcessing::kMono:
67 case AudioProcessing::kStereo: 78 case AudioProcessing::kStereo:
68 return false; 79 return false;
69 case AudioProcessing::kMonoAndKeyboard: 80 case AudioProcessing::kMonoAndKeyboard:
70 case AudioProcessing::kStereoAndKeyboard: 81 case AudioProcessing::kStereoAndKeyboard:
71 return true; 82 return true;
72 } 83 }
73 84
74 assert(false); 85 assert(false);
75 return false; 86 return false;
76 } 87 }
88
89 bool MultiBandSignal(int sample_rate_hz) {
90 return sample_rate_hz == AudioProcessing::kSampleRate32kHz ||
91 sample_rate_hz == AudioProcessing::kSampleRate48kHz;
92 }
93
94 int ClosestNativeRate(int min_proc_rate) {
95 for (int rate : AudioProcessing::kNativeSampleRatesHz) {
96 if (rate >= min_proc_rate) {
97 return rate;
98 }
99 }
100 return AudioProcessing::kMaxNativeSampleRateHz;
101 }
102
77 } // namespace 103 } // namespace
78 104
79 // Throughout webrtc, it's assumed that success is represented by zero. 105 // Throughout webrtc, it's assumed that success is represented by zero.
80 static_assert(AudioProcessing::kNoError == 0, "kNoError must be zero"); 106 static_assert(AudioProcessing::kNoError == 0, "kNoError must be zero");
81 107
82 struct AudioProcessingImpl::ApmPublicSubmodules { 108 struct AudioProcessingImpl::ApmPublicSubmodules {
83 ApmPublicSubmodules() 109 ApmPublicSubmodules()
84 : echo_cancellation(nullptr), 110 : echo_cancellation(nullptr),
85 echo_control_mobile(nullptr), 111 echo_control_mobile(nullptr),
86 gain_control(nullptr) {} 112 gain_control(nullptr) {}
(...skipping 15 matching lines...) Expand all
102 128
103 struct AudioProcessingImpl::ApmPrivateSubmodules { 129 struct AudioProcessingImpl::ApmPrivateSubmodules {
104 explicit ApmPrivateSubmodules(Beamformer<float>* beamformer) 130 explicit ApmPrivateSubmodules(Beamformer<float>* beamformer)
105 : beamformer(beamformer) {} 131 : beamformer(beamformer) {}
106 // Accessed internally from capture or during initialization 132 // Accessed internally from capture or during initialization
107 std::list<ProcessingComponent*> component_list; 133 std::list<ProcessingComponent*> component_list;
108 std::unique_ptr<Beamformer<float>> beamformer; 134 std::unique_ptr<Beamformer<float>> beamformer;
109 std::unique_ptr<AgcManagerDirect> agc_manager; 135 std::unique_ptr<AgcManagerDirect> agc_manager;
110 }; 136 };
111 137
112 const int AudioProcessing::kNativeSampleRatesHz[] = {
113 AudioProcessing::kSampleRate8kHz,
114 AudioProcessing::kSampleRate16kHz,
115 AudioProcessing::kSampleRate32kHz,
116 AudioProcessing::kSampleRate48kHz};
117 const size_t AudioProcessing::kNumNativeSampleRates =
118 arraysize(AudioProcessing::kNativeSampleRatesHz);
119 const int AudioProcessing::kMaxNativeSampleRateHz = AudioProcessing::
120 kNativeSampleRatesHz[AudioProcessing::kNumNativeSampleRates - 1];
121
122 AudioProcessing* AudioProcessing::Create() { 138 AudioProcessing* AudioProcessing::Create() {
123 Config config; 139 Config config;
124 return Create(config, nullptr); 140 return Create(config, nullptr);
125 } 141 }
126 142
127 AudioProcessing* AudioProcessing::Create(const Config& config) { 143 AudioProcessing* AudioProcessing::Create(const Config& config) {
128 return Create(config, nullptr); 144 return Create(config, nullptr);
129 } 145 }
130 146
131 AudioProcessing* AudioProcessing::Create(const Config& config, 147 AudioProcessing* AudioProcessing::Create(const Config& config,
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 return kBadNumberChannelsError; 373 return kBadNumberChannelsError;
358 } 374 }
359 375
360 if (capture_nonlocked_.beamformer_enabled && 376 if (capture_nonlocked_.beamformer_enabled &&
361 num_in_channels != capture_.array_geometry.size()) { 377 num_in_channels != capture_.array_geometry.size()) {
362 return kBadNumberChannelsError; 378 return kBadNumberChannelsError;
363 } 379 }
364 380
365 formats_.api_format = config; 381 formats_.api_format = config;
366 382
367 // We process at the closest native rate >= min(input rate, output rate). 383 capture_nonlocked_.fwd_proc_format = StreamConfig(ClosestNativeRate(std::min(
368 const int min_proc_rate = 384 formats_.api_format.input_stream().sample_rate_hz(),
369 std::min(formats_.api_format.input_stream().sample_rate_hz(), 385 formats_.api_format.output_stream().sample_rate_hz())));
370 formats_.api_format.output_stream().sample_rate_hz());
371 int fwd_proc_rate;
372 for (size_t i = 0; i < kNumNativeSampleRates; ++i) {
373 fwd_proc_rate = kNativeSampleRatesHz[i];
374 if (fwd_proc_rate >= min_proc_rate) {
375 break;
376 }
377 }
378 386
379 capture_nonlocked_.fwd_proc_format = StreamConfig(fwd_proc_rate); 387 int rev_proc_rate = ClosestNativeRate(std::min(
380 388 formats_.api_format.reverse_input_stream().sample_rate_hz(),
381 // We normally process the reverse stream at 16 kHz. Unless... 389 formats_.api_format.reverse_output_stream().sample_rate_hz()));
peah-webrtc 2016/03/10 06:59:24 This change basically means that the tri-band 48 k
aluebs-webrtc 2016/03/10 15:34:32 That is right. But in that case 32kHz was more of
382 int rev_proc_rate = kSampleRate16kHz; 390 // If the forward sample rate is 8 kHz, the reverse stream is also processed
391 // at this rate.
383 if (capture_nonlocked_.fwd_proc_format.sample_rate_hz() == kSampleRate8kHz) { 392 if (capture_nonlocked_.fwd_proc_format.sample_rate_hz() == kSampleRate8kHz) {
384 // ...the forward stream is at 8 kHz.
385 rev_proc_rate = kSampleRate8kHz; 393 rev_proc_rate = kSampleRate8kHz;
386 } else {
387 if (formats_.api_format.reverse_input_stream().sample_rate_hz() ==
388 kSampleRate32kHz) {
389 // ...or the input is at 32 kHz, in which case we use the splitting
390 // filter rather than the resampler.
391 rev_proc_rate = kSampleRate32kHz;
392 }
393 } 394 }
394 395
395 // Always downmix the reverse stream to mono for analysis. This has been 396 // Always downmix the reverse stream to mono for analysis. This has been
396 // demonstrated to work well for AEC in most practical scenarios. 397 // demonstrated to work well for AEC in most practical scenarios.
397 formats_.rev_proc_format = StreamConfig(rev_proc_rate, 1); 398 formats_.rev_proc_format = StreamConfig(rev_proc_rate, 1);
398 399
399 if (capture_nonlocked_.fwd_proc_format.sample_rate_hz() == kSampleRate32kHz || 400 if (capture_nonlocked_.fwd_proc_format.sample_rate_hz() == kSampleRate32kHz ||
400 capture_nonlocked_.fwd_proc_format.sample_rate_hz() == kSampleRate48kHz) { 401 capture_nonlocked_.fwd_proc_format.sample_rate_hz() == kSampleRate48kHz) {
401 capture_nonlocked_.split_rate = kSampleRate16kHz; 402 capture_nonlocked_.split_rate = kSampleRate16kHz;
402 } else { 403 } else {
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
641 debug_dump_.capture.event_msg->set_type(audioproc::Event::STREAM); 642 debug_dump_.capture.event_msg->set_type(audioproc::Event::STREAM);
642 audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream(); 643 audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream();
643 const size_t data_size = 644 const size_t data_size =
644 sizeof(int16_t) * frame->samples_per_channel_ * frame->num_channels_; 645 sizeof(int16_t) * frame->samples_per_channel_ * frame->num_channels_;
645 msg->set_input_data(frame->data_, data_size); 646 msg->set_input_data(frame->data_, data_size);
646 } 647 }
647 #endif 648 #endif
648 649
649 capture_.capture_audio->DeinterleaveFrom(frame); 650 capture_.capture_audio->DeinterleaveFrom(frame);
650 RETURN_ON_ERR(ProcessStreamLocked()); 651 RETURN_ON_ERR(ProcessStreamLocked());
651 capture_.capture_audio->InterleaveTo(frame, 652 capture_.capture_audio->InterleaveTo(frame, output_copy_needed());
652 output_copy_needed(is_data_processed()));
653 653
654 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP 654 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
655 if (debug_dump_.debug_file->Open()) { 655 if (debug_dump_.debug_file->Open()) {
656 audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream(); 656 audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream();
657 const size_t data_size = 657 const size_t data_size =
658 sizeof(int16_t) * frame->samples_per_channel_ * frame->num_channels_; 658 sizeof(int16_t) * frame->samples_per_channel_ * frame->num_channels_;
659 msg->set_output_data(frame->data_, data_size); 659 msg->set_output_data(frame->data_, data_size);
660 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), 660 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(),
661 &debug_dump_.num_bytes_left_for_log_, 661 &debug_dump_.num_bytes_left_for_log_,
662 &crit_debug_, &debug_dump_.capture)); 662 &crit_debug_, &debug_dump_.capture));
(...skipping 19 matching lines...) Expand all
682 682
683 AudioBuffer* ca = capture_.capture_audio.get(); // For brevity. 683 AudioBuffer* ca = capture_.capture_audio.get(); // For brevity.
684 684
685 if (constants_.use_experimental_agc && 685 if (constants_.use_experimental_agc &&
686 public_submodules_->gain_control->is_enabled()) { 686 public_submodules_->gain_control->is_enabled()) {
687 private_submodules_->agc_manager->AnalyzePreProcess( 687 private_submodules_->agc_manager->AnalyzePreProcess(
688 ca->channels()[0], ca->num_channels(), 688 ca->channels()[0], ca->num_channels(),
689 capture_nonlocked_.fwd_proc_format.num_frames()); 689 capture_nonlocked_.fwd_proc_format.num_frames());
690 } 690 }
691 691
692 bool data_processed = is_data_processed(); 692 if (fwd_analysis_needed()) {
693 if (analysis_needed(data_processed)) {
694 ca->SplitIntoFrequencyBands(); 693 ca->SplitIntoFrequencyBands();
695 } 694 }
696 695
697 if (capture_nonlocked_.beamformer_enabled) { 696 if (capture_nonlocked_.beamformer_enabled) {
698 private_submodules_->beamformer->ProcessChunk(*ca->split_data_f(), 697 private_submodules_->beamformer->ProcessChunk(*ca->split_data_f(),
699 ca->split_data_f()); 698 ca->split_data_f());
700 ca->set_num_channels(1); 699 ca->set_num_channels(1);
701 } 700 }
702 701
703 public_submodules_->high_pass_filter->ProcessCaptureAudio(ca); 702 public_submodules_->high_pass_filter->ProcessCaptureAudio(ca);
(...skipping 18 matching lines...) Expand all
722 if (constants_.use_experimental_agc && 721 if (constants_.use_experimental_agc &&
723 public_submodules_->gain_control->is_enabled() && 722 public_submodules_->gain_control->is_enabled() &&
724 (!capture_nonlocked_.beamformer_enabled || 723 (!capture_nonlocked_.beamformer_enabled ||
725 private_submodules_->beamformer->is_target_present())) { 724 private_submodules_->beamformer->is_target_present())) {
726 private_submodules_->agc_manager->Process( 725 private_submodules_->agc_manager->Process(
727 ca->split_bands_const(0)[kBand0To8kHz], ca->num_frames_per_band(), 726 ca->split_bands_const(0)[kBand0To8kHz], ca->num_frames_per_band(),
728 capture_nonlocked_.split_rate); 727 capture_nonlocked_.split_rate);
729 } 728 }
730 RETURN_ON_ERR(public_submodules_->gain_control->ProcessCaptureAudio(ca)); 729 RETURN_ON_ERR(public_submodules_->gain_control->ProcessCaptureAudio(ca));
731 730
732 if (synthesis_needed(data_processed)) { 731 if (fwd_synthesis_needed()) {
733 ca->MergeFrequencyBands(); 732 ca->MergeFrequencyBands();
734 } 733 }
735 734
736 // TODO(aluebs): Investigate if the transient suppression placement should be 735 // TODO(aluebs): Investigate if the transient suppression placement should be
737 // before or after the AGC. 736 // before or after the AGC.
738 if (capture_.transient_suppressor_enabled) { 737 if (capture_.transient_suppressor_enabled) {
739 float voice_probability = 738 float voice_probability =
740 private_submodules_->agc_manager.get() 739 private_submodules_->agc_manager.get()
741 ? private_submodules_->agc_manager->voice_probability() 740 ? private_submodules_->agc_manager->voice_probability()
742 : 1.f; 741 : 1.f;
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
897 &debug_dump_.num_bytes_left_for_log_, 896 &debug_dump_.num_bytes_left_for_log_,
898 &crit_debug_, &debug_dump_.render)); 897 &crit_debug_, &debug_dump_.render));
899 } 898 }
900 #endif 899 #endif
901 render_.render_audio->DeinterleaveFrom(frame); 900 render_.render_audio->DeinterleaveFrom(frame);
902 return ProcessReverseStreamLocked(); 901 return ProcessReverseStreamLocked();
903 } 902 }
904 903
905 int AudioProcessingImpl::ProcessReverseStreamLocked() { 904 int AudioProcessingImpl::ProcessReverseStreamLocked() {
906 AudioBuffer* ra = render_.render_audio.get(); // For brevity. 905 AudioBuffer* ra = render_.render_audio.get(); // For brevity.
907 if (formats_.rev_proc_format.sample_rate_hz() == kSampleRate32kHz) { 906 if (rev_analysis_needed()) {
908 ra->SplitIntoFrequencyBands(); 907 ra->SplitIntoFrequencyBands();
909 } 908 }
910 909
911 if (constants_.intelligibility_enabled) { 910 if (constants_.intelligibility_enabled) {
912 // Currently run in single-threaded mode when the intelligibility 911 // Currently run in single-threaded mode when the intelligibility
913 // enhancer is activated. 912 // enhancer is activated.
914 // TODO(peah): Fix to be properly multi-threaded. 913 // TODO(peah): Fix to be properly multi-threaded.
915 rtc::CritScope cs(&crit_capture_); 914 rtc::CritScope cs(&crit_capture_);
916 public_submodules_->intelligibility_enhancer->ProcessRenderAudio( 915 public_submodules_->intelligibility_enhancer->ProcessRenderAudio(
917 ra->split_channels_f(kBand0To8kHz), capture_nonlocked_.split_rate, 916 ra->split_channels_f(kBand0To8kHz), capture_nonlocked_.split_rate,
918 ra->num_channels()); 917 ra->num_channels());
919 } 918 }
920 919
921 RETURN_ON_ERR(public_submodules_->echo_cancellation->ProcessRenderAudio(ra)); 920 RETURN_ON_ERR(public_submodules_->echo_cancellation->ProcessRenderAudio(ra));
922 RETURN_ON_ERR( 921 RETURN_ON_ERR(
923 public_submodules_->echo_control_mobile->ProcessRenderAudio(ra)); 922 public_submodules_->echo_control_mobile->ProcessRenderAudio(ra));
924 if (!constants_.use_experimental_agc) { 923 if (!constants_.use_experimental_agc) {
925 RETURN_ON_ERR(public_submodules_->gain_control->ProcessRenderAudio(ra)); 924 RETURN_ON_ERR(public_submodules_->gain_control->ProcessRenderAudio(ra));
926 } 925 }
927 926
928 if (formats_.rev_proc_format.sample_rate_hz() == kSampleRate32kHz && 927 if (rev_synthesis_needed()) {
929 is_rev_processed()) {
930 ra->MergeFrequencyBands(); 928 ra->MergeFrequencyBands();
931 } 929 }
932 930
933 return kNoError; 931 return kNoError;
934 } 932 }
935 933
936 int AudioProcessingImpl::set_stream_delay_ms(int delay) { 934 int AudioProcessingImpl::set_stream_delay_ms(int delay) {
937 rtc::CritScope cs(&crit_capture_); 935 rtc::CritScope cs(&crit_capture_);
938 Error retval = kNoError; 936 Error retval = kNoError;
939 capture_.was_stream_delay_set = true; 937 capture_.was_stream_delay_set = true;
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
1131 for (auto item : private_submodules_->component_list) { 1129 for (auto item : private_submodules_->component_list) {
1132 if (item->is_component_enabled()) { 1130 if (item->is_component_enabled()) {
1133 return true; 1131 return true;
1134 } 1132 }
1135 } 1133 }
1136 1134
1137 // The capture data is otherwise unchanged. 1135 // The capture data is otherwise unchanged.
1138 return false; 1136 return false;
1139 } 1137 }
1140 1138
1141 bool AudioProcessingImpl::output_copy_needed(bool is_data_processed) const { 1139 bool AudioProcessingImpl::output_copy_needed() const {
1142 // Check if we've upmixed or downmixed the audio. 1140 // Check if we've upmixed or downmixed the audio.
1143 return ((formats_.api_format.output_stream().num_channels() != 1141 return ((formats_.api_format.output_stream().num_channels() !=
1144 formats_.api_format.input_stream().num_channels()) || 1142 formats_.api_format.input_stream().num_channels()) ||
1145 is_data_processed || capture_.transient_suppressor_enabled); 1143 is_data_processed() || capture_.transient_suppressor_enabled);
1146 } 1144 }
1147 1145
1148 bool AudioProcessingImpl::synthesis_needed(bool is_data_processed) const { 1146 bool AudioProcessingImpl::fwd_synthesis_needed() const {
1149 return (is_data_processed && 1147 return (is_data_processed() &&
1150 (capture_nonlocked_.fwd_proc_format.sample_rate_hz() == 1148 MultiBandSignal(capture_nonlocked_.fwd_proc_format.sample_rate_hz()));
1151 kSampleRate32kHz ||
1152 capture_nonlocked_.fwd_proc_format.sample_rate_hz() ==
1153 kSampleRate48kHz));
1154 } 1149 }
1155 1150
1156 bool AudioProcessingImpl::analysis_needed(bool is_data_processed) const { 1151 bool AudioProcessingImpl::fwd_analysis_needed() const {
1157 if (!is_data_processed && 1152 if (!is_data_processed() &&
1158 !public_submodules_->voice_detection->is_enabled() && 1153 !public_submodules_->voice_detection->is_enabled() &&
1159 !capture_.transient_suppressor_enabled) { 1154 !capture_.transient_suppressor_enabled) {
1160 // Only public_submodules_->level_estimator is enabled. 1155 // Only public_submodules_->level_estimator is enabled.
1161 return false; 1156 return false;
1162 } else if (capture_nonlocked_.fwd_proc_format.sample_rate_hz() == 1157 } else if (MultiBandSignal(
1163 kSampleRate32kHz || 1158 capture_nonlocked_.fwd_proc_format.sample_rate_hz())) {
1164 capture_nonlocked_.fwd_proc_format.sample_rate_hz() ==
1165 kSampleRate48kHz) {
1166 // Something besides public_submodules_->level_estimator is enabled, and we 1159 // Something besides public_submodules_->level_estimator is enabled, and we
1167 // have super-wb. 1160 // have super-wb.
1168 return true; 1161 return true;
1169 } 1162 }
1170 return false; 1163 return false;
1171 } 1164 }
1172 1165
1173 bool AudioProcessingImpl::is_rev_processed() const { 1166 bool AudioProcessingImpl::is_rev_processed() const {
1174 return constants_.intelligibility_enabled; 1167 return constants_.intelligibility_enabled;
1175 } 1168 }
1176 1169
1170 bool AudioProcessingImpl::rev_synthesis_needed() const {
1171 return (is_rev_processed() &&
1172 MultiBandSignal(formats_.rev_proc_format.sample_rate_hz()));
1173 }
1174
1175 bool AudioProcessingImpl::rev_analysis_needed() const {
1176 return MultiBandSignal(formats_.rev_proc_format.sample_rate_hz());
1177 }
1178
1177 bool AudioProcessingImpl::render_check_rev_conversion_needed() const { 1179 bool AudioProcessingImpl::render_check_rev_conversion_needed() const {
1178 return rev_conversion_needed(); 1180 return rev_conversion_needed();
1179 } 1181 }
1180 1182
1181 bool AudioProcessingImpl::rev_conversion_needed() const { 1183 bool AudioProcessingImpl::rev_conversion_needed() const {
1182 return (formats_.api_format.reverse_input_stream() != 1184 return (formats_.api_format.reverse_input_stream() !=
1183 formats_.api_format.reverse_output_stream()); 1185 formats_.api_format.reverse_output_stream());
1184 } 1186 }
1185 1187
1186 void AudioProcessingImpl::InitializeExperimentalAgc() { 1188 void AudioProcessingImpl::InitializeExperimentalAgc() {
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
1444 debug_dump_.capture.event_msg->mutable_config()->CopyFrom(config); 1446 debug_dump_.capture.event_msg->mutable_config()->CopyFrom(config);
1445 1447
1446 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), 1448 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(),
1447 &debug_dump_.num_bytes_left_for_log_, 1449 &debug_dump_.num_bytes_left_for_log_,
1448 &crit_debug_, &debug_dump_.capture)); 1450 &crit_debug_, &debug_dump_.capture));
1449 return kNoError; 1451 return kNoError;
1450 } 1452 }
1451 #endif // WEBRTC_AUDIOPROC_DEBUG_DUMP 1453 #endif // WEBRTC_AUDIOPROC_DEBUG_DUMP
1452 1454
1453 } // namespace webrtc 1455 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698