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

Unified Diff: webrtc/modules/audio_processing/audio_processing_impl.cc.orig

Issue 2747123007: Test submission of complete AEC-dump refactoring. (Closed)
Patch Set: Changed interface and build structure after reviewer comments. 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 side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/audio_processing/audio_processing_impl.cc.orig
diff --git a/webrtc/modules/audio_processing/audio_processing_impl.cc b/webrtc/modules/audio_processing/audio_processing_impl.cc.orig
similarity index 90%
copy from webrtc/modules/audio_processing/audio_processing_impl.cc
copy to webrtc/modules/audio_processing/audio_processing_impl.cc.orig
index 1f73c5984a68af29d7dd941a64f88a834fd9e72a..5c21d8dc03024e334666386f50a3d3220de52398 100644
--- a/webrtc/modules/audio_processing/audio_processing_impl.cc
+++ b/webrtc/modules/audio_processing/audio_processing_impl.cc.orig
@@ -21,6 +21,7 @@
#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h"
#include "webrtc/modules/audio_processing/aec/aec_core.h"
#include "webrtc/modules/audio_processing/aec3/echo_canceller3.h"
+#include "webrtc/modules/audio_processing/aec_dumper/null_aec_dumper.h"
#include "webrtc/modules/audio_processing/agc/agc_manager_direct.h"
#include "webrtc/modules/audio_processing/audio_buffer.h"
#include "webrtc/modules/audio_processing/beamformer/nonlinear_beamformer.h"
@@ -44,15 +45,6 @@
#include "webrtc/system_wrappers/include/logging.h"
#include "webrtc/system_wrappers/include/metrics.h"
-#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
-// Files generated at build-time by the protobuf compiler.
-#ifdef WEBRTC_ANDROID_PLATFORM_BUILD
-#include "external/webrtc/webrtc/modules/audio_processing/debug.pb.h"
-#else
-#include "webrtc/modules/audio_processing/debug.pb.h"
-#endif
-#endif // WEBRTC_AUDIOPROC_DEBUG_DUMP
-
// Check to verify that the define for the intelligibility enhancer is properly
// set.
#if !defined(WEBRTC_INTELLIGIBILITY_ENHANCER) || \
@@ -305,6 +297,7 @@ AudioProcessingImpl::AudioProcessingImpl(const webrtc::Config& config)
AudioProcessingImpl::AudioProcessingImpl(const webrtc::Config& config,
NonlinearBeamformer* beamformer)
: high_pass_filter_impl_(new HighPassFilterImpl(this)),
+ aec_dumper_(AecDumper::CreateNullDumper()),
public_submodules_(new ApmPublicSubmodules()),
private_submodules_(new ApmPrivateSubmodules(beamformer)),
constants_(config.Get<ExperimentalAgc>().startup_min_volume,
@@ -360,9 +353,6 @@ AudioProcessingImpl::~AudioProcessingImpl() {
// Depends on gain_control_.
public_submodules_->gain_control_for_experimental_agc.reset();
-#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
- debug_dump_.debug_file->CloseFile();
-#endif
}
int AudioProcessingImpl::Initialize() {
@@ -410,19 +400,6 @@ int AudioProcessingImpl::MaybeInitializeCapture(
return MaybeInitialize(processing_config, force_initialization);
}
-#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
-
-AudioProcessingImpl::ApmDebugDumpThreadState::ApmDebugDumpThreadState()
- : event_msg(new audioproc::Event()) {}
-
-AudioProcessingImpl::ApmDebugDumpThreadState::~ApmDebugDumpThreadState() {}
-
-AudioProcessingImpl::ApmDebugDumpState::ApmDebugDumpState()
- : debug_file(FileWrapper::Create()) {}
-
-AudioProcessingImpl::ApmDebugDumpState::~ApmDebugDumpState() {}
-
-#endif // WEBRTC_AUDIOPROC_DEBUG_DUMP
// Calls InitializeLocked() if any of the audio parameters have changed from
// their current values (needs to be called while holding the crit_render_lock).
@@ -517,15 +494,7 @@ int AudioProcessingImpl::InitializeLocked() {
InitializeResidualEchoDetector();
InitializeEchoCanceller3();
-#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
- if (debug_dump_.debug_file->is_open()) {
- int err = WriteInitMessage();
- if (err != kNoError) {
- return err;
- }
- }
-#endif
-
+ aec_dumper_->WriteInitMessage(formats_.api_format);
return kNoError;
}
@@ -801,37 +770,46 @@ int AudioProcessingImpl::ProcessStream(const float* const* src,
RTC_DCHECK_EQ(processing_config.input_stream().num_frames(),
formats_.api_format.input_stream().num_frames());
-#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
- if (debug_dump_.debug_file->is_open()) {
- RETURN_ON_ERR(WriteConfigMessage(false));
+ std::unique_ptr<AecDumper::CaptureStreamInfo> stream_info =
+ aec_dumper_->GetCaptureStreamInfo();
+ RETURN_ON_ERR(WriteConfigMessage(false));
+ const size_t channel_size =
+ sizeof(float) * formats_.api_format.input_stream().num_frames();
- debug_dump_.capture.event_msg->set_type(audioproc::Event::STREAM);
- audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream();
- const size_t channel_size =
- sizeof(float) * formats_.api_format.input_stream().num_frames();
+ {
+ std::vector<rtc::ArrayView<const float>> src_view;
for (size_t i = 0; i < formats_.api_format.input_stream().num_channels();
- ++i)
- msg->add_input_channel(src[i], channel_size);
+ ++i) {
+ src_view.emplace_back(src[i], channel_size);
+ }
+ stream_info->AddInput(src_view);
}
-#endif
-
capture_.capture_audio->CopyFrom(src, formats_.api_format.input_stream());
+
+ // This earlier happened in ProcessCaptureStreamLocked().
+ RTC_DCHECK(!(public_submodules_->echo_cancellation->is_enabled() &&
+ public_submodules_->echo_control_mobile->is_enabled()));
+
+ stream_info->set_delay(capture_nonlocked_.stream_delay_ms);
+ stream_info->set_drift(
+ public_submodules_->echo_cancellation->stream_drift_samples());
+ stream_info->set_level(gain_control()->stream_analog_level());
+ stream_info->set_keypress(capture_.key_pressed);
+
RETURN_ON_ERR(ProcessCaptureStreamLocked());
capture_.capture_audio->CopyTo(formats_.api_format.output_stream(), dest);
-#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
- if (debug_dump_.debug_file->is_open()) {
- audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream();
+ {
const size_t channel_size =
sizeof(float) * formats_.api_format.output_stream().num_frames();
+ std::vector<rtc::ArrayView<const float>> dest_view;
for (size_t i = 0; i < formats_.api_format.output_stream().num_channels();
- ++i)
- msg->add_output_channel(dest[i], channel_size);
- RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(),
- &debug_dump_.num_bytes_left_for_log_,
- &crit_debug_, &debug_dump_.capture));
+ ++i) {
+ dest_view.emplace_back(dest[i], channel_size);
+ }
+ stream_info->AddOutput(dest_view);
}
-#endif
+ aec_dumper_->WriteCaptureStreamMessage(std::move(stream_info));
return kNoError;
}
@@ -1069,35 +1047,28 @@ int AudioProcessingImpl::ProcessStream(AudioFrame* frame) {
return kBadDataLengthError;
}
-#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
- if (debug_dump_.debug_file->is_open()) {
- RETURN_ON_ERR(WriteConfigMessage(false));
-
- debug_dump_.capture.event_msg->set_type(audioproc::Event::STREAM);
- audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream();
- const size_t data_size =
- sizeof(int16_t) * frame->samples_per_channel_ * frame->num_channels_;
- msg->set_input_data(frame->data_, data_size);
- }
-#endif
+ std::unique_ptr<AecDumper::CaptureStreamInfo> stream_info =
+ aec_dumper_->GetCaptureStreamInfo();
+ RETURN_ON_ERR(WriteConfigMessage(false));
+ stream_info->AddInput(*frame);
capture_.capture_audio->DeinterleaveFrom(frame);
+
+ RTC_DCHECK(!(public_submodules_->echo_cancellation->is_enabled() &&
+ public_submodules_->echo_control_mobile->is_enabled()));
+
+ stream_info->set_delay(capture_nonlocked_.stream_delay_ms);
+ stream_info->set_drift(
+ public_submodules_->echo_cancellation->stream_drift_samples());
+ stream_info->set_level(gain_control()->stream_analog_level());
+ stream_info->set_keypress(capture_.key_pressed);
+
RETURN_ON_ERR(ProcessCaptureStreamLocked());
capture_.capture_audio->InterleaveTo(
frame, submodule_states_.CaptureMultiBandProcessingActive());
-#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
- if (debug_dump_.debug_file->is_open()) {
- audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream();
- const size_t data_size =
- sizeof(int16_t) * frame->samples_per_channel_ * frame->num_channels_;
- msg->set_output_data(frame->data_, data_size);
- RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(),
- &debug_dump_.num_bytes_left_for_log_,
- &crit_debug_, &debug_dump_.capture));
- }
-#endif
-
+ stream_info->AddOutput(*frame);
+ aec_dumper_->WriteCaptureStreamMessage(std::move(stream_info));
return kNoError;
}
@@ -1108,16 +1079,6 @@ int AudioProcessingImpl::ProcessCaptureStreamLocked() {
RTC_DCHECK(!(public_submodules_->echo_cancellation->is_enabled() &&
public_submodules_->echo_control_mobile->is_enabled()));
-#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
- if (debug_dump_.debug_file->is_open()) {
- audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream();
- msg->set_delay(capture_nonlocked_.stream_delay_ms);
- msg->set_drift(
- public_submodules_->echo_cancellation->stream_drift_samples());
- msg->set_level(gain_control()->stream_analog_level());
- msg->set_keypress(capture_.key_pressed);
- }
-#endif
MaybeUpdateHistograms();
@@ -1347,21 +1308,15 @@ int AudioProcessingImpl::AnalyzeReverseStreamLocked(
assert(input_config.num_frames() ==
formats_.api_format.reverse_input_stream().num_frames());
-#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
- if (debug_dump_.debug_file->is_open()) {
- debug_dump_.render.event_msg->set_type(audioproc::Event::REVERSE_STREAM);
- audioproc::ReverseStream* msg =
- debug_dump_.render.event_msg->mutable_reverse_stream();
- const size_t channel_size =
- sizeof(float) * formats_.api_format.reverse_input_stream().num_frames();
- for (size_t i = 0;
- i < formats_.api_format.reverse_input_stream().num_channels(); ++i)
- msg->add_channel(src[i], channel_size);
- RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(),
- &debug_dump_.num_bytes_left_for_log_,
- &crit_debug_, &debug_dump_.render));
+ std::vector<rtc::ArrayView<const float>> src_view;
+ const size_t channel_size =
+ sizeof(float) * formats_.api_format.reverse_input_stream().num_frames();
+
+ for (size_t i = 0;
+ i < formats_.api_format.reverse_input_stream().num_channels(); ++i) {
+ src_view.emplace_back(src[i], channel_size);
}
-#endif
+ aec_dumper_->WriteReverseStreamMessage(src_view);
render_.render_audio->CopyFrom(src,
formats_.api_format.reverse_input_stream());
@@ -1402,19 +1357,8 @@ int AudioProcessingImpl::ProcessReverseStream(AudioFrame* frame) {
return kBadDataLengthError;
}
-#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
- if (debug_dump_.debug_file->is_open()) {
- debug_dump_.render.event_msg->set_type(audioproc::Event::REVERSE_STREAM);
- audioproc::ReverseStream* msg =
- debug_dump_.render.event_msg->mutable_reverse_stream();
- const size_t data_size =
- sizeof(int16_t) * frame->samples_per_channel_ * frame->num_channels_;
- msg->set_data(frame->data_, data_size);
- RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(),
- &debug_dump_.num_bytes_left_for_log_,
- &crit_debug_, &debug_dump_.render));
- }
-#endif
+ aec_dumper_->WriteReverseStreamMessage(*frame);
+
render_.render_audio->DeinterleaveFrom(frame);
RETURN_ON_ERR(ProcessRenderStreamLocked());
render_.render_audio->InterleaveTo(
@@ -1502,86 +1446,44 @@ int AudioProcessingImpl::delay_offset_ms() const {
int AudioProcessingImpl::StartDebugRecording(
const char filename[AudioProcessing::kMaxFilenameSize],
- int64_t max_log_size_bytes) {
- // Run in a single-threaded manner.
- rtc::CritScope cs_render(&crit_render_);
+ int64_t max_log_size_bytes,
+ rtc::TaskQueue* worker_queue) {
rtc::CritScope cs_capture(&crit_capture_);
static_assert(kMaxFilenameSize == FileWrapper::kMaxFileNameSize, "");
-
- if (filename == nullptr) {
- return kNullPointerError;
- }
-
-#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
- debug_dump_.num_bytes_left_for_log_ = max_log_size_bytes;
- // Stop any ongoing recording.
- debug_dump_.debug_file->CloseFile();
-
- if (!debug_dump_.debug_file->OpenFile(filename, false)) {
- return kFileError;
- }
-
+ aec_dumper_ = AecDumper::Create(filename, max_log_size_bytes, worker_queue);
RETURN_ON_ERR(WriteConfigMessage(true));
- RETURN_ON_ERR(WriteInitMessage());
+ aec_dumper_->WriteInitMessage(formats_.api_format);
return kNoError;
-#else
- return kUnsupportedFunctionError;
-#endif // WEBRTC_AUDIOPROC_DEBUG_DUMP
}
int AudioProcessingImpl::StartDebugRecording(FILE* handle,
- int64_t max_log_size_bytes) {
- // Run in a single-threaded manner.
- rtc::CritScope cs_render(&crit_render_);
+ int64_t max_log_size_bytes,
+ rtc::TaskQueue* worker_queue) {
rtc::CritScope cs_capture(&crit_capture_);
-
- if (handle == nullptr) {
- return kNullPointerError;
- }
-
-#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
- debug_dump_.num_bytes_left_for_log_ = max_log_size_bytes;
-
- // Stop any ongoing recording.
- debug_dump_.debug_file->CloseFile();
-
- if (!debug_dump_.debug_file->OpenFromFileHandle(handle)) {
- return kFileError;
- }
-
+ aec_dumper_ = AecDumper::Create(handle, max_log_size_bytes, worker_queue);
RETURN_ON_ERR(WriteConfigMessage(true));
- RETURN_ON_ERR(WriteInitMessage());
+ aec_dumper_->WriteInitMessage(formats_.api_format);
return kNoError;
-#else
- return kUnsupportedFunctionError;
-#endif // WEBRTC_AUDIOPROC_DEBUG_DUMP
}
-int AudioProcessingImpl::StartDebugRecording(FILE* handle) {
- return StartDebugRecording(handle, -1);
+int AudioProcessingImpl::StartDebugRecording(FILE* handle,
+ rtc::TaskQueue* worker_queue) {
+ return StartDebugRecording(handle, -1, worker_queue);
}
int AudioProcessingImpl::StartDebugRecordingForPlatformFile(
- rtc::PlatformFile handle) {
+ rtc::PlatformFile handle,
+ rtc::TaskQueue* worker_queue) {
// Run in a single-threaded manner.
rtc::CritScope cs_render(&crit_render_);
rtc::CritScope cs_capture(&crit_capture_);
FILE* stream = rtc::FdopenPlatformFileForWriting(handle);
- return StartDebugRecording(stream, -1);
+ return StartDebugRecording(stream, -1, worker_queue);
}
int AudioProcessingImpl::StopDebugRecording() {
- // Run in a single-threaded manner.
- rtc::CritScope cs_render(&crit_render_);
- rtc::CritScope cs_capture(&crit_capture_);
-
-#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
- // We just return if recording hasn't started.
- debug_dump_.debug_file->CloseFile();
+ aec_dumper_ = AecDumper::CreateNullDumper();
return kNoError;
-#else
- return kUnsupportedFunctionError;
-#endif // WEBRTC_AUDIOPROC_DEBUG_DUMP
}
AudioProcessing::AudioProcessingStatistics::AudioProcessingStatistics() {
@@ -1825,6 +1727,7 @@ void AudioProcessingImpl::UpdateHistogramsOnCallEnd() {
capture_.last_aec_system_delay_ms = 0;
}
+<<<<<<< HEAD
#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
int AudioProcessingImpl::WriteMessageToDebugFile(
FileWrapper* debug_file,
@@ -1900,43 +1803,118 @@ int AudioProcessingImpl::WriteInitMessage() {
return kNoError;
}
+||||||| parent of 6d4e36d05... aec-dumper and null-aec-dumper. Most parts are implemented.
+#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
+int AudioProcessingImpl::WriteMessageToDebugFile(
+ FileWrapper* debug_file,
+ int64_t* filesize_limit_bytes,
+ rtc::CriticalSection* crit_debug,
+ ApmDebugDumpThreadState* debug_state) {
+ int32_t size = debug_state->event_msg->ByteSize();
+ if (size <= 0) {
+ return kUnspecifiedError;
+ }
+#if defined(WEBRTC_ARCH_BIG_ENDIAN)
+// TODO(ajm): Use little-endian "on the wire". For the moment, we can be
+// pretty safe in assuming little-endian.
+#endif
+
+ if (!debug_state->event_msg->SerializeToString(&debug_state->event_str)) {
+ return kUnspecifiedError;
+ }
+
+ {
+ // Ensure atomic writes of the message.
+ rtc::CritScope cs_debug(crit_debug);
+
+ RTC_DCHECK(debug_file->is_open());
+ // Update the byte counter.
+ if (*filesize_limit_bytes >= 0) {
+ *filesize_limit_bytes -=
+ (sizeof(int32_t) + debug_state->event_str.length());
+ if (*filesize_limit_bytes < 0) {
+ // Not enough bytes are left to write this message, so stop logging.
+ debug_file->CloseFile();
+ return kNoError;
+ }
+ }
+ // Write message preceded by its size.
+ if (!debug_file->Write(&size, sizeof(int32_t))) {
+ return kFileError;
+ }
+ if (!debug_file->Write(debug_state->event_str.data(),
+ debug_state->event_str.length())) {
+ return kFileError;
+ }
+ }
+
+ debug_state->event_msg->Clear();
+
+ return kNoError;
+}
+
+int AudioProcessingImpl::WriteInitMessage() {
+ debug_dump_.capture.event_msg->set_type(audioproc::Event::INIT);
+ audioproc::Init* msg = debug_dump_.capture.event_msg->mutable_init();
+ msg->set_sample_rate(formats_.api_format.input_stream().sample_rate_hz());
+
+ msg->set_num_input_channels(static_cast<int32_t>(
+ formats_.api_format.input_stream().num_channels()));
+ msg->set_num_output_channels(static_cast<int32_t>(
+ formats_.api_format.output_stream().num_channels()));
+ msg->set_num_reverse_channels(static_cast<int32_t>(
+ formats_.api_format.reverse_input_stream().num_channels()));
+ msg->set_reverse_sample_rate(
+ formats_.api_format.reverse_input_stream().sample_rate_hz());
+ msg->set_output_sample_rate(
+ formats_.api_format.output_stream().sample_rate_hz());
+ msg->set_reverse_output_sample_rate(
+ formats_.api_format.reverse_output_stream().sample_rate_hz());
+ msg->set_num_reverse_output_channels(
+ formats_.api_format.reverse_output_stream().num_channels());
+
+ RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(),
+ &debug_dump_.num_bytes_left_for_log_,
+ &crit_debug_, &debug_dump_.capture));
+ return kNoError;
+}
+
+=======
+>>>>>>> 6d4e36d05... aec-dumper and null-aec-dumper. Most parts are implemented.
int AudioProcessingImpl::WriteConfigMessage(bool forced) {
- audioproc::Config config;
-
- config.set_aec_enabled(public_submodules_->echo_cancellation->is_enabled());
- config.set_aec_delay_agnostic_enabled(
- public_submodules_->echo_cancellation->is_delay_agnostic_enabled());
- config.set_aec_drift_compensation_enabled(
- public_submodules_->echo_cancellation->is_drift_compensation_enabled());
- config.set_aec_extended_filter_enabled(
- public_submodules_->echo_cancellation->is_extended_filter_enabled());
- config.set_aec_suppression_level(static_cast<int>(
- public_submodules_->echo_cancellation->suppression_level()));
-
- config.set_aecm_enabled(
- public_submodules_->echo_control_mobile->is_enabled());
- config.set_aecm_comfort_noise_enabled(
- public_submodules_->echo_control_mobile->is_comfort_noise_enabled());
- config.set_aecm_routing_mode(static_cast<int>(
- public_submodules_->echo_control_mobile->routing_mode()));
-
- config.set_agc_enabled(public_submodules_->gain_control->is_enabled());
- config.set_agc_mode(
- static_cast<int>(public_submodules_->gain_control->mode()));
- config.set_agc_limiter_enabled(
- public_submodules_->gain_control->is_limiter_enabled());
- config.set_noise_robust_agc_enabled(constants_.use_experimental_agc);
-
- config.set_hpf_enabled(config_.high_pass_filter.enabled);
-
- config.set_ns_enabled(public_submodules_->noise_suppression->is_enabled());
- config.set_ns_level(
- static_cast<int>(public_submodules_->noise_suppression->level()));
-
- config.set_transient_suppression_enabled(
- capture_.transient_suppressor_enabled);
- config.set_intelligibility_enhancer_enabled(
- capture_nonlocked_.intelligibility_enabled);
+ InternalAPMConfig config;
+
+ config.aec_enabled = public_submodules_->echo_cancellation->is_enabled();
+ config.aec_delay_agnostic_enabled =
+ public_submodules_->echo_cancellation->is_delay_agnostic_enabled();
+ config.aec_drift_compensation_enabled =
+ public_submodules_->echo_cancellation->is_drift_compensation_enabled();
+ config.aec_extended_filter_enabled =
+ public_submodules_->echo_cancellation->is_extended_filter_enabled();
+ config.aec_suppression_level = static_cast<int>(
+ public_submodules_->echo_cancellation->suppression_level());
+
+ config.aecm_enabled = public_submodules_->echo_control_mobile->is_enabled();
+ config.aecm_comfort_noise_enabled =
+ public_submodules_->echo_control_mobile->is_comfort_noise_enabled();
+ config.aecm_routing_mode =
+ static_cast<int>(public_submodules_->echo_control_mobile->routing_mode());
+
+ config.agc_enabled = public_submodules_->gain_control->is_enabled();
+ config.agc_mode = static_cast<int>(public_submodules_->gain_control->mode());
+ config.agc_limiter_enabled =
+ public_submodules_->gain_control->is_limiter_enabled();
+ config.noise_robust_agc_enabled = constants_.use_experimental_agc;
+
+ config.hpf_enabled = config_.high_pass_filter.enabled;
+
+ config.ns_enabled = public_submodules_->noise_suppression->is_enabled();
+ config.ns_level =
+ static_cast<int>(public_submodules_->noise_suppression->level());
+
+ config.transient_suppression_enabled = capture_.transient_suppressor_enabled;
+ config.intelligibility_enhancer_enabled =
+ capture_nonlocked_.intelligibility_enabled;
std::string experiments_description =
public_submodules_->echo_cancellation->GetExperimentsDescription();
@@ -1951,6 +1929,7 @@ int AudioProcessingImpl::WriteConfigMessage(bool forced) {
if (capture_nonlocked_.echo_canceller3_enabled) {
experiments_description += "EchoCanceller3;";
}
+<<<<<<< HEAD
config.set_experiments_description(experiments_description);
std::string serialized_config = config.SerializeAsString();
@@ -1963,13 +1942,26 @@ int AudioProcessingImpl::WriteConfigMessage(bool forced) {
debug_dump_.capture.event_msg->set_type(audioproc::Event::CONFIG);
debug_dump_.capture.event_msg->mutable_config()->CopyFrom(config);
+||||||| parent of 6d4e36d05... aec-dumper and null-aec-dumper. Most parts are implemented.
+ config.set_experiments_description(experiments_description);
- RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(),
- &debug_dump_.num_bytes_left_for_log_,
- &crit_debug_, &debug_dump_.capture));
+ ProtoString serialized_config = config.SerializeAsString();
+ if (!forced &&
+ debug_dump_.capture.last_serialized_config == serialized_config) {
+ return kNoError;
+ }
+
+ debug_dump_.capture.last_serialized_config = serialized_config;
+
+ debug_dump_.capture.event_msg->set_type(audioproc::Event::CONFIG);
+ debug_dump_.capture.event_msg->mutable_config()->CopyFrom(config);
+=======
+ config.experiments_description = experiments_description;
+>>>>>>> 6d4e36d05... aec-dumper and null-aec-dumper. Most parts are implemented.
+
+ aec_dumper_->WriteConfig(config, forced);
return kNoError;
}
-#endif // WEBRTC_AUDIOPROC_DEBUG_DUMP
AudioProcessingImpl::ApmCaptureState::ApmCaptureState(
bool transient_suppressor_enabled,
« no previous file with comments | « webrtc/modules/audio_processing/audio_processing_impl.cc ('k') | webrtc/modules/audio_processing/audio_processing_impl.h.orig » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698