From 94c7413b0d5c5ad4abf9f3d0cef1b639a4b8cbd6 Mon Sep 17 00:00:00 2001 From: "andrew@webrtc.org" Date: Mon, 19 Sep 2011 15:17:57 +0000 Subject: [PATCH] Allow echo metrics to be enabled in process_test. Review URL: http://webrtc-codereview.appspot.com/155002 git-svn-id: http://webrtc.googlecode.com/svn/trunk@620 4adac7df-926f-26a2-2b94-8c16560cd09d --- .../main/test/process_test/process_test.cc | 53 +++++++++++++++++-- 1 file changed, 48 insertions(+), 5 deletions(-) diff --git a/src/modules/audio_processing/main/test/process_test/process_test.cc b/src/modules/audio_processing/main/test/process_test/process_test.cc index f6b6d6989..c24d822e0 100644 --- a/src/modules/audio_processing/main/test/process_test/process_test.cc +++ b/src/modules/audio_processing/main/test/process_test/process_test.cc @@ -28,6 +28,7 @@ using webrtc::AudioFrame; using webrtc::AudioProcessing; +using webrtc::EchoCancellation; using webrtc::GainControl; using webrtc::NoiseSuppression; using webrtc::TickInterval; @@ -61,6 +62,12 @@ bool ReadMessageFromFile(FILE* file, return msg->ParseFromArray(array, usize); } +void PrintStat(const AudioProcessing::Statistic& stat) { + printf("%d, %d, %d\n", stat.average, + stat.maximum, + stat.minimum); +} + void usage() { printf( "Usage: process_test [options] [-pb PROTOBUF_FILE]\n" @@ -86,6 +93,8 @@ void usage() { printf("\n -aec Echo cancellation\n"); printf(" --drift_compensation\n"); printf(" --no_drift_compensation\n"); + printf(" --echo_metrics\n"); + printf(" --no_echo_metrics\n"); printf("\n -aecm Echo control mobile\n"); printf(" --aecm_echo_path_in_file FILE\n"); printf(" --aecm_echo_path_out_file FILE\n"); @@ -107,6 +116,7 @@ void usage() { printf(" --vad_out_file FILE\n"); printf("\n"); printf("Modifiers:\n"); + printf(" --noasm Disable SSE optimization.\n"); printf(" --perf Measure performance.\n"); printf(" --quiet Suppress text output.\n"); printf(" --no_progress Suppress progress.\n"); @@ -156,7 +166,7 @@ void void_main(int argc, char* argv[]) { //bool interleaved = true; for (int i = 1; i < argc; i++) { - if (strcmp(argv[i], "-pb") == 0) { + if (strcmp(argv[i], "-pb") == 0) { i++; ASSERT_LT(i, argc) << "Specify protobuf filename after -pb"; pb_filename = argv[i]; @@ -209,9 +219,6 @@ void void_main(int argc, char* argv[]) { } else if (strcmp(argv[i], "-aec") == 0) { ASSERT_EQ(apm->kNoError, apm->echo_cancellation()->Enable(true)); - } else if (strcmp(argv[i], "-noasm") == 0) { - WebRtc_GetCPUInfo = WebRtc_GetCPUInfoNoASM; - } else if (strcmp(argv[i], "--drift_compensation") == 0) { ASSERT_EQ(apm->kNoError, apm->echo_cancellation()->Enable(true)); // TODO(ajm): this is enabled in the VQE test app by default. Investigate @@ -223,6 +230,16 @@ void void_main(int argc, char* argv[]) { ASSERT_EQ(apm->kNoError, apm->echo_cancellation()->enable_drift_compensation(false)); + } else if (strcmp(argv[i], "--echo_metrics") == 0) { + ASSERT_EQ(apm->kNoError, apm->echo_cancellation()->Enable(true)); + ASSERT_EQ(apm->kNoError, + apm->echo_cancellation()->enable_metrics(true)); + + } else if (strcmp(argv[i], "--no_echo_metrics") == 0) { + ASSERT_EQ(apm->kNoError, apm->echo_cancellation()->Enable(true)); + ASSERT_EQ(apm->kNoError, + apm->echo_cancellation()->enable_metrics(false)); + } else if (strcmp(argv[i], "-aecm") == 0) { ASSERT_EQ(apm->kNoError, apm->echo_control_mobile()->Enable(true)); @@ -316,6 +333,11 @@ void void_main(int argc, char* argv[]) { ASSERT_LT(i, argc) << "Specify filename after --vad_out_file"; vad_out_filename = argv[i]; + } else if (strcmp(argv[i], "--noasm") == 0) { + WebRtc_GetCPUInfo = WebRtc_GetCPUInfoNoASM; + // We need to reinitialize here if components have already been enabled. + ASSERT_EQ(apm->kNoError, apm->Initialize()); + } else if (strcmp(argv[i], "--perf") == 0) { perf_testing = true; @@ -642,7 +664,6 @@ void void_main(int argc, char* argv[]) { } ASSERT_TRUE(feof(pb_file)); - printf("100%% complete\r"); } else { while (simulating || feof(event_file) == 0) { @@ -708,6 +729,10 @@ void void_main(int argc, char* argv[]) { if (simulating) { if (read_count != far_frame._payloadDataLengthInSamples) { + // Read an equal amount from the near file to avoid errors due to + // not reaching end-of-file. + EXPECT_EQ(0, fseek(near_file, read_count * sizeof(WebRtc_Word16), + SEEK_CUR)); break; // This is expected. } } else { @@ -753,6 +778,10 @@ void void_main(int argc, char* argv[]) { } if (simulating) { if (read_count != near_frame._payloadDataLengthInSamples) { + // Read an equal amount from the far file to avoid errors due to + // not reaching end-of-file. + EXPECT_EQ(0, fseek(far_file, read_count * sizeof(WebRtc_Word16), + SEEK_CUR)); break; // This is expected. } @@ -828,6 +857,7 @@ void void_main(int argc, char* argv[]) { } } } + printf("100%% complete\r"); if (aecm_echo_path_out_file != NULL) { const size_t path_size = @@ -845,6 +875,19 @@ void void_main(int argc, char* argv[]) { if (verbose) { printf("\nProcessed frames: %d (primary), %d (reverse)\n", primary_count, reverse_count); + + if (apm->echo_cancellation()->are_metrics_enabled()) { + EchoCancellation::Metrics metrics; + apm->echo_cancellation()->GetMetrics(&metrics); + printf("\n--Echo metrics--\n"); + printf("(avg, max, min)\n"); + printf("ERL: "); + PrintStat(metrics.echo_return_loss); + printf("ERLE: "); + PrintStat(metrics.echo_return_loss_enhancement); + printf("ANLP: "); + PrintStat(metrics.a_nlp); + } } if (!pb_file) {