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

Unified Diff: webrtc/tools/agc/agc_harness.cc

Issue 1247033006: Configure AudioProcessing directly in agc_harness. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: git cl format Created 5 years, 5 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/tools/agc/agc_harness.cc
diff --git a/webrtc/tools/agc/agc_harness.cc b/webrtc/tools/agc/agc_harness.cc
index ae8d94229582b9e7ea948fd64e4662731ea7cd1e..92dcfdb19f835d10bccc9c5122f7a7fa2fa18559 100644
--- a/webrtc/tools/agc/agc_harness.cc
+++ b/webrtc/tools/agc/agc_harness.cc
@@ -11,13 +11,14 @@
// Refer to kUsage below for a description.
#include "gflags/gflags.h"
-#include "testing/gtest/include/gtest/gtest.h"
+#include "webrtc/base/checks.h"
#include "webrtc/base/scoped_ptr.h"
#include "webrtc/system_wrappers/interface/sleep.h"
#include "webrtc/system_wrappers/interface/trace.h"
#include "webrtc/test/channel_transport/include/channel_transport.h"
#include "webrtc/test/testsupport/trace_to_stderr.h"
#include "webrtc/tools/agc/agc_manager.h"
+#include "webrtc/modules/audio_processing/include/audio_processing.h"
#include "webrtc/voice_engine/include/voe_audio_processing.h"
#include "webrtc/voice_engine/include/voe_base.h"
#include "webrtc/voice_engine/include/voe_codec.h"
@@ -28,20 +29,26 @@
#include "webrtc/voice_engine/include/voe_volume_control.h"
DEFINE_bool(codecs, false, "print out available codecs");
-DEFINE_int32(pt, 103, "codec payload type (defaults to ISAC/16000/1)");
-DEFINE_bool(internal, true, "use the internal AGC in 'serial' mode, or as the "
- "first voice engine's AGC in parallel mode");
-DEFINE_bool(parallel, false, "run internal and public AGCs in parallel, with "
- "left- and right-panning respectively. Not compatible with -aec.");
+DEFINE_int32(pt, 120, "codec payload type (defaults to opus/48000/2)");
+DEFINE_bool(legacy_agc,
+ false,
+ "use the legacy AGC in 'serial' mode, or as the first voice "
+ "engine's AGC in parallel mode");
+DEFINE_bool(parallel,
+ false,
+ "run new and legacy AGCs in parallel, with left- and right-panning "
+ "respectively. Not compatible with -aec.");
DEFINE_bool(devices, false, "print out capture devices and indexes to be used "
"with the capture flags");
DEFINE_int32(capture1, 0, "capture device index for the first voice engine");
DEFINE_int32(capture2, 0, "capture device index for second voice engine");
DEFINE_int32(render1, 0, "render device index for first voice engine");
DEFINE_int32(render2, 0, "render device index for second voice engine");
-DEFINE_bool(aec, false, "runs two voice engines in parallel, with the first "
- "playing out a file and sending its captured signal to the second voice "
- "engine. Also enables echo cancellation.");
+DEFINE_bool(aec,
+ false,
+ "runs two voice engines in parallel, with the first playing out a "
+ "file and sending its captured signal to the second voice engine. "
+ "Also enables echo cancellation.");
DEFINE_bool(ns, true, "enable noise suppression");
DEFINE_bool(highpass, true, "enable high pass filter");
DEFINE_string(filename, "", "filename for the -aec mode");
@@ -51,10 +58,9 @@ namespace {
const char kUsage[] =
"\nWithout additional flags, sets up a simple VoiceEngine loopback call\n"
- "with the default audio devices and runs forever. The internal AGC is\n"
- "enabled and the public disabled.\n\n"
+ "with the default audio devices and runs forever.\n"
- "It can also run the public AGC in parallel with the internal, panned to\n"
+ "It can also run the new and legacy AGCs in parallel, panned to\n"
"opposite stereo channels on the default render device. The capture\n"
"devices for each can be selected (recommended, because otherwise they\n"
"will fight for the level on the same device).\n\n"
@@ -75,63 +81,62 @@ class AgcVoiceEngine {
PanRight
};
- AgcVoiceEngine(bool internal, int tx_port, int rx_port, int capture_idx,
+ AgcVoiceEngine(bool legacy_agc,
+ int tx_port,
+ int rx_port,
+ int capture_idx,
int render_idx)
: voe_(VoiceEngine::Create()),
base_(VoEBase::GetInterface(voe_)),
hardware_(VoEHardware::GetInterface(voe_)),
codec_(VoECodec::GetInterface(voe_)),
- manager_(new AgcManager(voe_)),
channel_(-1),
capture_idx_(capture_idx),
render_idx_(render_idx) {
- SetUp(internal, tx_port, rx_port);
+ SetUp(legacy_agc, tx_port, rx_port);
}
~AgcVoiceEngine() {
TearDown();
}
- void SetUp(bool internal, int tx_port, int rx_port) {
- ASSERT_TRUE(voe_ != NULL);
- ASSERT_TRUE(base_ != NULL);
- ASSERT_TRUE(hardware_ != NULL);
- ASSERT_TRUE(codec_ != NULL);
+ void SetUp(bool legacy_agc, int tx_port, int rx_port) {
VoEAudioProcessing* audio = VoEAudioProcessing::GetInterface(voe_);
- ASSERT_TRUE(audio != NULL);
VoENetwork* network = VoENetwork::GetInterface(voe_);
- ASSERT_TRUE(network != NULL);
-
- ASSERT_EQ(0, base_->Init());
+ {
+ webrtc::Config config;
+ config.Set<ExperimentalAgc>(new ExperimentalAgc(!legacy_agc));
+ AudioProcessing* audioproc = AudioProcessing::Create(config);
+ CHECK_EQ(0, base_->Init(nullptr, audioproc));
+ // Set this stuff after Init, to override the default voice engine
+ // settings.
+ audioproc->gain_control()->Enable(true);
+ audioproc->high_pass_filter()->Enable(FLAGS_highpass);
+ audioproc->noise_suppression()->Enable(FLAGS_ns);
+ audioproc->echo_cancellation()->Enable(FLAGS_aec);
+ }
channel_ = base_->CreateChannel();
- ASSERT_NE(-1, channel_);
+ CHECK_NE(-1, channel_);
channel_transport_.reset(
new test::VoiceChannelTransport(network, channel_));
- ASSERT_EQ(0, channel_transport_->SetSendDestination("127.0.0.1", tx_port));
- ASSERT_EQ(0, channel_transport_->SetLocalReceiver(rx_port));
+ CHECK_EQ(0, channel_transport_->SetSendDestination("127.0.0.1", tx_port));
+ CHECK_EQ(0, channel_transport_->SetLocalReceiver(rx_port));
- ASSERT_EQ(0, hardware_->SetRecordingDevice(capture_idx_));
- ASSERT_EQ(0, hardware_->SetPlayoutDevice(render_idx_));
+ CHECK_EQ(0, hardware_->SetRecordingDevice(capture_idx_));
+ CHECK_EQ(0, hardware_->SetPlayoutDevice(render_idx_));
- CodecInst codec_params = {0};
+ CodecInst codec_params = {};
bool codec_found = false;
for (int i = 0; i < codec_->NumOfCodecs(); i++) {
- ASSERT_EQ(0, codec_->GetCodec(i, codec_params));
+ CHECK_EQ(0, codec_->GetCodec(i, codec_params));
if (FLAGS_pt == codec_params.pltype) {
codec_found = true;
break;
}
}
- ASSERT_TRUE(codec_found);
- ASSERT_EQ(0, codec_->SetSendCodec(channel_, codec_params));
-
- ASSERT_EQ(0, audio->EnableHighPassFilter(FLAGS_highpass));
- ASSERT_EQ(0, audio->SetNsStatus(FLAGS_ns));
- ASSERT_EQ(0, audio->SetEcStatus(FLAGS_aec));
-
- ASSERT_EQ(0, manager_->Enable(internal));
- ASSERT_EQ(0, audio->SetAgcStatus(!internal));
+ CHECK(codec_found);
+ CHECK_EQ(0, codec_->SetSendCodec(channel_, codec_params));
audio->Release();
network->Release();
@@ -139,31 +144,29 @@ class AgcVoiceEngine {
void TearDown() {
Stop();
- channel_transport_.reset(NULL);
- ASSERT_EQ(0, base_->DeleteChannel(channel_));
- ASSERT_EQ(0, base_->Terminate());
- // Don't test; the manager hasn't released its interfaces.
+ channel_transport_.reset(nullptr);
+ CHECK_EQ(0, base_->DeleteChannel(channel_));
+ CHECK_EQ(0, base_->Terminate());
hardware_->Release();
base_->Release();
codec_->Release();
- delete manager_;
- ASSERT_TRUE(VoiceEngine::Delete(voe_));
+ CHECK(VoiceEngine::Delete(voe_));
}
void PrintDevices() {
int num_devices = 0;
char device_name[128] = {0};
char guid[128] = {0};
- ASSERT_EQ(0, hardware_->GetNumOfRecordingDevices(num_devices));
+ CHECK_EQ(0, hardware_->GetNumOfRecordingDevices(num_devices));
printf("Capture devices:\n");
for (int i = 0; i < num_devices; i++) {
- ASSERT_EQ(0, hardware_->GetRecordingDeviceName(i, device_name, guid));
+ CHECK_EQ(0, hardware_->GetRecordingDeviceName(i, device_name, guid));
printf("%d: %s\n", i, device_name);
}
- ASSERT_EQ(0, hardware_->GetNumOfPlayoutDevices(num_devices));
+ CHECK_EQ(0, hardware_->GetNumOfPlayoutDevices(num_devices));
printf("Render devices:\n");
for (int i = 0; i < num_devices; i++) {
- ASSERT_EQ(0, hardware_->GetPlayoutDeviceName(i, device_name, guid));
+ CHECK_EQ(0, hardware_->GetPlayoutDeviceName(i, device_name, guid));
printf("%d: %s\n", i, device_name);
}
}
@@ -172,21 +175,17 @@ class AgcVoiceEngine {
CodecInst params = {0};
printf("Codecs:\n");
for (int i = 0; i < codec_->NumOfCodecs(); i++) {
- ASSERT_EQ(0, codec_->GetCodec(i, params));
+ CHECK_EQ(0, codec_->GetCodec(i, params));
printf("%d %s/%d/%d\n", params.pltype, params.plname, params.plfreq,
params.channels);
}
}
- void StartSending() {
- ASSERT_EQ(0, base_->StartSend(channel_));
- }
+ void StartSending() { CHECK_EQ(0, base_->StartSend(channel_)); }
void StartPlaying(Pan pan, const std::string& filename) {
VoEVolumeControl* volume = VoEVolumeControl::GetInterface(voe_);
VoEFile* file = VoEFile::GetInterface(voe_);
- ASSERT_TRUE(volume != NULL);
- ASSERT_TRUE(file != NULL);
if (pan == PanLeft) {
volume->SetOutputVolumePan(channel_, 1, 0);
} else if (pan == PanRight) {
@@ -194,18 +193,19 @@ class AgcVoiceEngine {
}
if (filename != "") {
printf("playing file\n");
- ASSERT_EQ(0, file->StartPlayingFileLocally(channel_, filename.c_str(),
- true, kFileFormatPcm16kHzFile, 1.0, 0, 0));
+ CHECK_EQ(
+ 0, file->StartPlayingFileLocally(channel_, filename.c_str(), true,
+ kFileFormatPcm16kHzFile, 1.0, 0, 0));
}
- ASSERT_EQ(0, base_->StartReceive(channel_));
- ASSERT_EQ(0, base_->StartPlayout(channel_));
+ CHECK_EQ(0, base_->StartReceive(channel_));
+ CHECK_EQ(0, base_->StartPlayout(channel_));
volume->Release();
file->Release();
}
void Stop() {
- ASSERT_EQ(0, base_->StopSend(channel_));
- ASSERT_EQ(0, base_->StopPlayout(channel_));
+ CHECK_EQ(0, base_->StopSend(channel_));
+ CHECK_EQ(0, base_->StopPlayout(channel_));
}
private:
@@ -213,7 +213,6 @@ class AgcVoiceEngine {
VoEBase* base_;
VoEHardware* hardware_;
VoECodec* codec_;
- AgcManager* manager_;
int channel_;
int capture_idx_;
int render_idx_;
@@ -222,19 +221,19 @@ class AgcVoiceEngine {
void RunHarness() {
rtc::scoped_ptr<AgcVoiceEngine> voe1(new AgcVoiceEngine(
- FLAGS_internal, 2000, 2000, FLAGS_capture1, FLAGS_render1));
+ FLAGS_legacy_agc, 2000, 2000, FLAGS_capture1, FLAGS_render1));
rtc::scoped_ptr<AgcVoiceEngine> voe2;
if (FLAGS_parallel) {
- voe2.reset(new AgcVoiceEngine(!FLAGS_internal, 3000, 3000, FLAGS_capture2,
+ voe2.reset(new AgcVoiceEngine(!FLAGS_legacy_agc, 3000, 3000, FLAGS_capture2,
FLAGS_render2));
voe1->StartPlaying(AgcVoiceEngine::PanLeft, "");
voe1->StartSending();
voe2->StartPlaying(AgcVoiceEngine::PanRight, "");
voe2->StartSending();
} else if (FLAGS_aec) {
- voe1.reset(new AgcVoiceEngine(FLAGS_internal, 2000, 4242, FLAGS_capture1,
+ voe1.reset(new AgcVoiceEngine(FLAGS_legacy_agc, 2000, 4242, FLAGS_capture1,
FLAGS_render1));
- voe2.reset(new AgcVoiceEngine(!FLAGS_internal, 4242, 2000, FLAGS_capture2,
+ voe2.reset(new AgcVoiceEngine(!FLAGS_legacy_agc, 4242, 2000, FLAGS_capture2,
FLAGS_render2));
voe1->StartPlaying(AgcVoiceEngine::NoPan, FLAGS_filename);
voe1->StartSending();
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698