Merge :audio_processing and :aec_dump_interface.
Merges the two targets in modules/audio_processing and removes some redundant code. This enables not writing a bunch of redundant code in https://webrtc-review.googlesource.com/c/src/+/70502 ':audio_processing' did depend on ':aec_dump_interface'. 'modules/audio_processing/aec_dump' did depend on 'aec_dump_interface' but not ':audio_processing'. Having the AecDump implementation not depending on 'audio_processing' allows to have faster compilation time and reduces the dependencies. However, maintaining such a decoupling makes APM and AecDump client code more complex. NOTRY=true # want this in and 'ios_api_framework' seems stuck. Bug: webrtc:7404 Change-Id: I75a5f234591014ac42d52bc1a36526072f5be89c Reviewed-on: https://webrtc-review.googlesource.com/76603 Commit-Queue: Alex Loiko <aleloi@webrtc.org> Reviewed-by: Alessio Bazzica <alessiob@webrtc.org> Reviewed-by: Per Åhgren <peah@webrtc.org> Cr-Commit-Position: refs/heads/master@{#23244}
This commit is contained in:
@ -75,6 +75,8 @@ rtc_static_library("audio_processing") {
|
||||
"gain_control_impl.h",
|
||||
"gain_controller2.cc",
|
||||
"gain_controller2.h",
|
||||
"include/aec_dump.cc",
|
||||
"include/aec_dump.h",
|
||||
"include/audio_processing.cc",
|
||||
"include/audio_processing.h",
|
||||
"include/config.cc",
|
||||
@ -116,7 +118,6 @@ rtc_static_library("audio_processing") {
|
||||
defines = []
|
||||
deps = [
|
||||
":aec_core",
|
||||
":aec_dump_interface",
|
||||
":apm_logging",
|
||||
":audio_frame_view",
|
||||
":audio_generator_interface",
|
||||
@ -199,20 +200,6 @@ rtc_source_set("audio_frame_view") {
|
||||
]
|
||||
}
|
||||
|
||||
rtc_source_set("aec_dump_interface") {
|
||||
sources = [
|
||||
"include/aec_dump.cc",
|
||||
"include/aec_dump.h",
|
||||
]
|
||||
|
||||
deps = [
|
||||
":audio_frame_view",
|
||||
"../../api:array_view",
|
||||
"../../api/audio:audio_frame_api",
|
||||
"../../rtc_base:rtc_base_approved",
|
||||
]
|
||||
}
|
||||
|
||||
rtc_source_set("audio_generator_interface") {
|
||||
visibility = [ "*" ]
|
||||
sources = [
|
||||
@ -445,7 +432,6 @@ if (rtc_include_tests) {
|
||||
"include/mock_audio_processing.h",
|
||||
]
|
||||
deps = [
|
||||
":aec_dump_interface",
|
||||
":audio_processing",
|
||||
":audio_processing_statistics",
|
||||
"../../test:test_support",
|
||||
|
||||
@ -15,7 +15,7 @@ rtc_source_set("aec_dump") {
|
||||
]
|
||||
|
||||
deps = [
|
||||
"..:aec_dump_interface",
|
||||
"../",
|
||||
"../../../rtc_base:rtc_base_approved",
|
||||
]
|
||||
}
|
||||
@ -28,7 +28,7 @@ rtc_source_set("mock_aec_dump") {
|
||||
]
|
||||
|
||||
deps = [
|
||||
"..:aec_dump_interface",
|
||||
"../",
|
||||
"../../../test:test_support",
|
||||
]
|
||||
}
|
||||
@ -42,7 +42,7 @@ rtc_source_set("mock_aec_dump_unittests") {
|
||||
|
||||
deps = [
|
||||
":mock_aec_dump",
|
||||
"..:audio_processing",
|
||||
"../",
|
||||
"../../../rtc_base:rtc_base_approved",
|
||||
"//testing/gtest",
|
||||
]
|
||||
@ -61,7 +61,7 @@ if (rtc_enable_protobuf) {
|
||||
|
||||
deps = [
|
||||
":aec_dump",
|
||||
"..:aec_dump_interface",
|
||||
"../",
|
||||
"../../../api/audio:audio_frame_api",
|
||||
"../../../rtc_base:checks",
|
||||
"../../../rtc_base:protobuf_utils",
|
||||
@ -80,8 +80,8 @@ if (rtc_enable_protobuf) {
|
||||
deps = [
|
||||
":aec_dump",
|
||||
":aec_dump_impl",
|
||||
"..:aec_dump_interface",
|
||||
"..:audioproc_debug_proto",
|
||||
"../",
|
||||
"../../../rtc_base:rtc_task_queue",
|
||||
"../../../test:fileutils",
|
||||
"../../../test:test_support",
|
||||
@ -101,6 +101,6 @@ rtc_source_set("null_aec_dump_factory") {
|
||||
|
||||
deps = [
|
||||
":aec_dump",
|
||||
"..:aec_dump_interface",
|
||||
"../",
|
||||
]
|
||||
}
|
||||
|
||||
@ -74,26 +74,27 @@ AecDumpImpl::~AecDumpImpl() {
|
||||
thread_sync_event.Wait(rtc::Event::kForever);
|
||||
}
|
||||
|
||||
void AecDumpImpl::WriteInitMessage(
|
||||
const InternalAPMStreamsConfig& streams_config) {
|
||||
void AecDumpImpl::WriteInitMessage(const ProcessingConfig& api_format) {
|
||||
auto task = CreateWriteToFileTask();
|
||||
auto* event = task->GetEvent();
|
||||
event->set_type(audioproc::Event::INIT);
|
||||
audioproc::Init* msg = event->mutable_init();
|
||||
|
||||
msg->set_sample_rate(streams_config.input_sample_rate);
|
||||
msg->set_output_sample_rate(streams_config.output_sample_rate);
|
||||
msg->set_reverse_sample_rate(streams_config.render_input_sample_rate);
|
||||
msg->set_reverse_output_sample_rate(streams_config.render_output_sample_rate);
|
||||
msg->set_sample_rate(api_format.input_stream().sample_rate_hz());
|
||||
msg->set_output_sample_rate(api_format.output_stream().sample_rate_hz());
|
||||
msg->set_reverse_sample_rate(
|
||||
api_format.reverse_input_stream().sample_rate_hz());
|
||||
msg->set_reverse_output_sample_rate(
|
||||
api_format.reverse_output_stream().sample_rate_hz());
|
||||
|
||||
msg->set_num_input_channels(
|
||||
static_cast<int32_t>(streams_config.input_num_channels));
|
||||
static_cast<int32_t>(api_format.input_stream().num_channels()));
|
||||
msg->set_num_output_channels(
|
||||
static_cast<int32_t>(streams_config.output_num_channels));
|
||||
static_cast<int32_t>(api_format.output_stream().num_channels()));
|
||||
msg->set_num_reverse_channels(
|
||||
static_cast<int32_t>(streams_config.render_input_num_channels));
|
||||
static_cast<int32_t>(api_format.reverse_input_stream().num_channels()));
|
||||
msg->set_num_reverse_output_channels(
|
||||
streams_config.render_output_num_channels);
|
||||
api_format.reverse_output_stream().num_channels());
|
||||
|
||||
worker_queue_->PostTask(std::unique_ptr<rtc::QueuedTask>(std::move(task)));
|
||||
}
|
||||
|
||||
@ -52,7 +52,7 @@ class AecDumpImpl : public AecDump {
|
||||
|
||||
~AecDumpImpl() override;
|
||||
|
||||
void WriteInitMessage(const InternalAPMStreamsConfig& api_format) override;
|
||||
void WriteInitMessage(const ProcessingConfig& api_format) override;
|
||||
|
||||
void AddCaptureStreamInput(const AudioFrameView<const float>& src) override;
|
||||
void AddCaptureStreamOutput(const AudioFrameView<const float>& src) override;
|
||||
|
||||
@ -39,8 +39,8 @@ TEST(AecDumper, APICallsDoNotCrash) {
|
||||
webrtc::InternalAPMConfig apm_config;
|
||||
aec_dump->WriteConfig(apm_config);
|
||||
|
||||
webrtc::InternalAPMStreamsConfig streams_config;
|
||||
aec_dump->WriteInitMessage(streams_config);
|
||||
webrtc::ProcessingConfig api_format;
|
||||
aec_dump->WriteInitMessage(api_format);
|
||||
}
|
||||
// Remove file after the AecDump d-tor has finished.
|
||||
ASSERT_EQ(0, remove(filename.c_str()));
|
||||
|
||||
@ -25,8 +25,7 @@ class MockAecDump : public AecDump {
|
||||
MockAecDump();
|
||||
virtual ~MockAecDump();
|
||||
|
||||
MOCK_METHOD1(WriteInitMessage,
|
||||
void(const InternalAPMStreamsConfig& streams_config));
|
||||
MOCK_METHOD1(WriteInitMessage, void(const ProcessingConfig& api_format));
|
||||
|
||||
MOCK_METHOD1(AddCaptureStreamInput,
|
||||
void(const AudioFrameView<const float>& src));
|
||||
|
||||
@ -148,24 +148,6 @@ class HighPassFilterImpl : public HighPassFilter {
|
||||
AudioProcessingImpl* apm_;
|
||||
RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(HighPassFilterImpl);
|
||||
};
|
||||
|
||||
webrtc::InternalAPMStreamsConfig ToStreamsConfig(
|
||||
const ProcessingConfig& api_format) {
|
||||
webrtc::InternalAPMStreamsConfig result;
|
||||
result.input_sample_rate = api_format.input_stream().sample_rate_hz();
|
||||
result.input_num_channels = api_format.input_stream().num_channels();
|
||||
result.output_num_channels = api_format.output_stream().num_channels();
|
||||
result.render_input_num_channels =
|
||||
api_format.reverse_input_stream().num_channels();
|
||||
result.render_input_sample_rate =
|
||||
api_format.reverse_input_stream().sample_rate_hz();
|
||||
result.output_sample_rate = api_format.output_stream().sample_rate_hz();
|
||||
result.render_output_sample_rate =
|
||||
api_format.reverse_output_stream().sample_rate_hz();
|
||||
result.render_output_num_channels =
|
||||
api_format.reverse_output_stream().num_channels();
|
||||
return result;
|
||||
}
|
||||
} // namespace
|
||||
|
||||
// Throughout webrtc, it's assumed that success is represented by zero.
|
||||
@ -608,7 +590,7 @@ int AudioProcessingImpl::InitializeLocked() {
|
||||
InitializePreProcessor();
|
||||
|
||||
if (aec_dump_) {
|
||||
aec_dump_->WriteInitMessage(ToStreamsConfig(formats_.api_format));
|
||||
aec_dump_->WriteInitMessage(formats_.api_format);
|
||||
}
|
||||
return kNoError;
|
||||
}
|
||||
@ -1638,7 +1620,7 @@ void AudioProcessingImpl::AttachAecDump(std::unique_ptr<AecDump> aec_dump) {
|
||||
// 'aec_dump' parameter, which is after locks are released.
|
||||
aec_dump_.swap(aec_dump);
|
||||
WriteAecDumpConfigMessage(true);
|
||||
aec_dump_->WriteInitMessage(ToStreamsConfig(formats_.api_format));
|
||||
aec_dump_->WriteInitMessage(formats_.api_format);
|
||||
}
|
||||
|
||||
void AudioProcessingImpl::DetachAecDump() {
|
||||
|
||||
@ -18,6 +18,7 @@
|
||||
#include "api/array_view.h"
|
||||
#include "api/audio/audio_frame.h"
|
||||
#include "modules/audio_processing/include/audio_frame_view.h"
|
||||
#include "modules/audio_processing/include/audio_processing.h"
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
@ -55,18 +56,6 @@ struct InternalAPMConfig {
|
||||
std::string experiments_description = "";
|
||||
};
|
||||
|
||||
struct InternalAPMStreamsConfig {
|
||||
int input_sample_rate = 0;
|
||||
int output_sample_rate = 0;
|
||||
int render_input_sample_rate = 0;
|
||||
int render_output_sample_rate = 0;
|
||||
|
||||
size_t input_num_channels = 0;
|
||||
size_t output_num_channels = 0;
|
||||
size_t render_input_num_channels = 0;
|
||||
size_t render_output_num_channels = 0;
|
||||
};
|
||||
|
||||
// An interface for recording configuration and input/output streams
|
||||
// of the Audio Processing Module. The recordings are called
|
||||
// 'aec-dumps' and are stored in a protobuf format defined in
|
||||
@ -87,8 +76,7 @@ class AecDump {
|
||||
virtual ~AecDump() = default;
|
||||
|
||||
// Logs Event::Type INIT message.
|
||||
virtual void WriteInitMessage(
|
||||
const InternalAPMStreamsConfig& streams_config) = 0;
|
||||
virtual void WriteInitMessage(const ProcessingConfig& api_format) = 0;
|
||||
|
||||
// Logs Event::Type STREAM message. To log an input/output pair,
|
||||
// call the AddCapture* and AddAudioProcessingState methods followed
|
||||
|
||||
Reference in New Issue
Block a user