blob: 40d122654659d9739965e83e4671b5d2f66209ee [file] [log] [blame]
Fredrik Solenberg73276ad2017-09-14 14:46:47 +02001/*
2 * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Jonas Olssona4d87372019-07-05 19:08:33 +020011#include "audio/test/audio_end_to_end_test.h"
12
Fredrik Solenberg73276ad2017-09-14 14:46:47 +020013#include <algorithm>
Mirko Bonadei317a1f02019-09-17 17:06:18 +020014#include <memory>
Fredrik Solenberg73276ad2017-09-14 14:46:47 +020015
Artem Titov4e199e92018-08-20 13:30:39 +020016#include "call/fake_network_pipe.h"
17#include "call/simulated_network.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020018#include "system_wrappers/include/sleep.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020019#include "test/gtest.h"
Fredrik Solenberg73276ad2017-09-14 14:46:47 +020020
21namespace webrtc {
22namespace test {
23namespace {
24// Wait half a second between stopping sending and stopping receiving audio.
25constexpr int kExtraRecordTimeMs = 500;
26
27constexpr int kSampleRate = 48000;
28} // namespace
29
30AudioEndToEndTest::AudioEndToEndTest()
31 : EndToEndTest(CallTest::kDefaultTimeoutMs) {}
32
Artem Titov75e36472018-10-08 12:28:56 +020033BuiltInNetworkBehaviorConfig AudioEndToEndTest::GetNetworkPipeConfig() const {
34 return BuiltInNetworkBehaviorConfig();
Fredrik Solenberg73276ad2017-09-14 14:46:47 +020035}
36
37size_t AudioEndToEndTest::GetNumVideoStreams() const {
38 return 0;
39}
40
41size_t AudioEndToEndTest::GetNumAudioStreams() const {
42 return 1;
43}
44
45size_t AudioEndToEndTest::GetNumFlexfecStreams() const {
46 return 0;
47}
48
Artem Titov3faa8322018-03-07 14:44:00 +010049std::unique_ptr<TestAudioDeviceModule::Capturer>
50AudioEndToEndTest::CreateCapturer() {
51 return TestAudioDeviceModule::CreatePulsedNoiseCapturer(32000, kSampleRate);
Fredrik Solenberg73276ad2017-09-14 14:46:47 +020052}
53
Artem Titov3faa8322018-03-07 14:44:00 +010054std::unique_ptr<TestAudioDeviceModule::Renderer>
55AudioEndToEndTest::CreateRenderer() {
56 return TestAudioDeviceModule::CreateDiscardRenderer(kSampleRate);
Fredrik Solenberg73276ad2017-09-14 14:46:47 +020057}
58
59void AudioEndToEndTest::OnFakeAudioDevicesCreated(
Artem Titov3faa8322018-03-07 14:44:00 +010060 TestAudioDeviceModule* send_audio_device,
61 TestAudioDeviceModule* recv_audio_device) {
Fredrik Solenberg73276ad2017-09-14 14:46:47 +020062 send_audio_device_ = send_audio_device;
63}
64
65test::PacketTransport* AudioEndToEndTest::CreateSendTransport(
Yves Gerey6516f762019-08-29 11:50:23 +020066 DEPRECATED_SingleThreadedTaskQueueForTesting* task_queue,
Fredrik Solenberg73276ad2017-09-14 14:46:47 +020067 Call* sender_call) {
68 return new test::PacketTransport(
69 task_queue, sender_call, this, test::PacketTransport::kSender,
Artem Titov4e199e92018-08-20 13:30:39 +020070 test::CallTest::payload_type_map_,
Mirko Bonadei317a1f02019-09-17 17:06:18 +020071 std::make_unique<FakeNetworkPipe>(
Artem Titov4e199e92018-08-20 13:30:39 +020072 Clock::GetRealTimeClock(),
Mirko Bonadei317a1f02019-09-17 17:06:18 +020073 std::make_unique<SimulatedNetwork>(GetNetworkPipeConfig())));
Fredrik Solenberg73276ad2017-09-14 14:46:47 +020074}
75
76test::PacketTransport* AudioEndToEndTest::CreateReceiveTransport(
Yves Gerey6516f762019-08-29 11:50:23 +020077 DEPRECATED_SingleThreadedTaskQueueForTesting* task_queue) {
Fredrik Solenberg73276ad2017-09-14 14:46:47 +020078 return new test::PacketTransport(
79 task_queue, nullptr, this, test::PacketTransport::kReceiver,
Artem Titov4e199e92018-08-20 13:30:39 +020080 test::CallTest::payload_type_map_,
Mirko Bonadei317a1f02019-09-17 17:06:18 +020081 std::make_unique<FakeNetworkPipe>(
Artem Titov4e199e92018-08-20 13:30:39 +020082 Clock::GetRealTimeClock(),
Mirko Bonadei317a1f02019-09-17 17:06:18 +020083 std::make_unique<SimulatedNetwork>(GetNetworkPipeConfig())));
Fredrik Solenberg73276ad2017-09-14 14:46:47 +020084}
85
86void AudioEndToEndTest::ModifyAudioConfigs(
Yves Gerey665174f2018-06-19 15:03:05 +020087 AudioSendStream::Config* send_config,
88 std::vector<AudioReceiveStream::Config>* receive_configs) {
Fredrik Solenberg73276ad2017-09-14 14:46:47 +020089 // Large bitrate by default.
90 const webrtc::SdpAudioFormat kDefaultFormat("opus", 48000, 2,
91 {{"stereo", "1"}});
Oskar Sundbom2707fb22017-11-16 10:57:35 +010092 send_config->send_codec_spec = AudioSendStream::Config::SendCodecSpec(
93 test::CallTest::kAudioSendPayloadType, kDefaultFormat);
Fredrik Solenberg73276ad2017-09-14 14:46:47 +020094}
95
96void AudioEndToEndTest::OnAudioStreamsCreated(
97 AudioSendStream* send_stream,
98 const std::vector<AudioReceiveStream*>& receive_streams) {
99 ASSERT_NE(nullptr, send_stream);
100 ASSERT_EQ(1u, receive_streams.size());
101 ASSERT_NE(nullptr, receive_streams[0]);
102 send_stream_ = send_stream;
103 receive_stream_ = receive_streams[0];
104}
105
106void AudioEndToEndTest::PerformTest() {
107 // Wait until the input audio file is done...
108 send_audio_device_->WaitForRecordingEnd();
109 // and some extra time to account for network delay.
110 SleepMs(GetNetworkPipeConfig().queue_delay_ms + kExtraRecordTimeMs);
111}
112} // namespace test
113} // namespace webrtc