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

Unified Diff: webrtc/audio/test/low_bandwidth_audio_test.cc

Issue 2694203002: Low-bandwidth audio testing (Closed)
Patch Set: Rebase Created 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/audio/test/low_bandwidth_audio_test.h ('k') | webrtc/audio/test/low_bandwidth_audio_test.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/audio/test/low_bandwidth_audio_test.cc
diff --git a/webrtc/audio/test/low_bandwidth_audio_test.cc b/webrtc/audio/test/low_bandwidth_audio_test.cc
index c78e8897a824008e6336d676b7a3e5040c1ff5b5..c1b1a02235610b51cfa708aa934eb6183ccc3275 100644
--- a/webrtc/audio/test/low_bandwidth_audio_test.cc
+++ b/webrtc/audio/test/low_bandwidth_audio_test.cc
@@ -1,5 +1,5 @@
/*
- * Copyright 2017 The WebRTC Project Authors. All rights reserved.
+ * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
@@ -8,9 +8,144 @@
* be found in the AUTHORS file in the root of the source tree.
*/
-// This is a placeholder for the work oprypin@ is doing on a low-bandwidth
-// audio test executable.
+#include <algorithm>
-int main() {
+#include "webrtc/audio/test/low_bandwidth_audio_test.h"
+#include "webrtc/common_audio/wav_file.h"
+#include "webrtc/test/gtest.h"
+#include "webrtc/test/run_test.h"
+#include "webrtc/system_wrappers/include/sleep.h"
+#include "webrtc/test/testsupport/fileutils.h"
+
+namespace {
+// Wait half a second between stopping sending and stopping receiving audio.
+constexpr int kExtraRecordTimeMs = 500;
+
+// Large bitrate by default.
+const webrtc::CodecInst kDefaultCodec{120, "OPUS", 48000, 960, 2, 64000};
+
+// The best that can be done with PESQ.
+constexpr int kAudioFileBitRate = 16000;
+}
+
+namespace webrtc {
+namespace test {
+
+AudioQualityTest::AudioQualityTest()
+ : EndToEndTest(CallTest::kDefaultTimeoutMs) {}
+
+size_t AudioQualityTest::GetNumVideoStreams() const {
return 0;
}
+size_t AudioQualityTest::GetNumAudioStreams() const {
+ return 1;
+}
+size_t AudioQualityTest::GetNumFlexfecStreams() const {
+ return 0;
+}
+
+std::string AudioQualityTest::AudioInputFile() {
+ return test::ResourcePath("voice_engine/audio_tiny16", "wav");
+}
+
+std::string AudioQualityTest::AudioOutputFile() {
+ const ::testing::TestInfo* const test_info =
+ ::testing::UnitTest::GetInstance()->current_test_info();
+ return webrtc::test::OutputPath() +
+ "LowBandwidth_" + test_info->name() + ".wav";
+}
+
+std::unique_ptr<test::FakeAudioDevice::Capturer>
+ AudioQualityTest::CreateCapturer() {
+ return test::FakeAudioDevice::CreateWavFileReader(AudioInputFile());
+}
+
+std::unique_ptr<test::FakeAudioDevice::Renderer>
+ AudioQualityTest::CreateRenderer() {
+ return test::FakeAudioDevice::CreateBoundedWavFileWriter(
+ AudioOutputFile(), kAudioFileBitRate);
+}
+
+void AudioQualityTest::OnFakeAudioDevicesCreated(
+ test::FakeAudioDevice* send_audio_device,
+ test::FakeAudioDevice* recv_audio_device) {
+ send_audio_device_ = send_audio_device;
+}
+
+FakeNetworkPipe::Config AudioQualityTest::GetNetworkPipeConfig() {
+ return FakeNetworkPipe::Config();
+}
+
+test::PacketTransport* AudioQualityTest::CreateSendTransport(
+ Call* sender_call) {
+ return new test::PacketTransport(
+ sender_call, this, test::PacketTransport::kSender,
+ GetNetworkPipeConfig());
+}
+
+test::PacketTransport* AudioQualityTest::CreateReceiveTransport() {
+ return new test::PacketTransport(nullptr, this,
+ test::PacketTransport::kReceiver, GetNetworkPipeConfig());
+}
+
+void AudioQualityTest::ModifyAudioConfigs(
+ AudioSendStream::Config* send_config,
+ std::vector<AudioReceiveStream::Config>* receive_configs) {
+ send_config->send_codec_spec.codec_inst = kDefaultCodec;
+}
+
+void AudioQualityTest::PerformTest() {
+ // Wait until the input audio file is done...
+ send_audio_device_->WaitForRecordingEnd();
+ // and some extra time to account for network delay.
+ SleepMs(GetNetworkPipeConfig().queue_delay_ms + kExtraRecordTimeMs);
+}
+
+void AudioQualityTest::OnTestFinished() {
+ const ::testing::TestInfo* const test_info =
+ ::testing::UnitTest::GetInstance()->current_test_info();
+
+ // Output information about the input and output audio files so that further
+ // processing can be done by an external process.
+ printf("TEST %s %s:%s\n", test_info->name(),
+ AudioInputFile().c_str(), AudioOutputFile().c_str());
+}
+
+
+using LowBandwidthAudioTest = CallTest;
+
+TEST_F(LowBandwidthAudioTest, GoodNetworkHighBitrate) {
+ AudioQualityTest test;
+ RunBaseTest(&test);
+}
+
+
+class Mobile2GNetworkTest : public AudioQualityTest {
+ void ModifyAudioConfigs(AudioSendStream::Config* send_config,
+ std::vector<AudioReceiveStream::Config>* receive_configs) override {
+ send_config->send_codec_spec.codec_inst = CodecInst{
+ 120, // pltype
+ "OPUS", // plname
+ 48000, // plfreq
+ 2880, // pacsize
+ 1, // channels
+ 6000 // rate bits/sec
+ };
+ }
+
+ FakeNetworkPipe::Config GetNetworkPipeConfig() override {
+ FakeNetworkPipe::Config pipe_config;
+ pipe_config.link_capacity_kbps = 12;
+ pipe_config.queue_length_packets = 1500;
+ pipe_config.queue_delay_ms = 400;
+ return pipe_config;
+ }
+};
+
+TEST_F(LowBandwidthAudioTest, Mobile2GNetwork) {
+ Mobile2GNetworkTest test;
+ RunBaseTest(&test);
+}
+
+} // namespace test
+} // namespace webrtc
« no previous file with comments | « webrtc/audio/test/low_bandwidth_audio_test.h ('k') | webrtc/audio/test/low_bandwidth_audio_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698