blob: 02abe734bbfe1f2ec688b402ca122e2e5d48d596 [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
11#include <algorithm>
12
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020013#include "audio/test/audio_end_to_end_test.h"
Artem Titov4e199e92018-08-20 13:30:39 +020014#include "call/fake_network_pipe.h"
15#include "call/simulated_network.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020016#include "system_wrappers/include/sleep.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020017#include "test/gtest.h"
Fredrik Solenberg73276ad2017-09-14 14:46:47 +020018
19namespace webrtc {
20namespace test {
21namespace {
22// Wait half a second between stopping sending and stopping receiving audio.
23constexpr int kExtraRecordTimeMs = 500;
24
25constexpr int kSampleRate = 48000;
26} // namespace
27
28AudioEndToEndTest::AudioEndToEndTest()
29 : EndToEndTest(CallTest::kDefaultTimeoutMs) {}
30
Artem Titov46c4e602018-08-17 14:26:54 +020031DefaultNetworkSimulationConfig AudioEndToEndTest::GetNetworkPipeConfig() const {
32 return DefaultNetworkSimulationConfig();
Fredrik Solenberg73276ad2017-09-14 14:46:47 +020033}
34
35size_t AudioEndToEndTest::GetNumVideoStreams() const {
36 return 0;
37}
38
39size_t AudioEndToEndTest::GetNumAudioStreams() const {
40 return 1;
41}
42
43size_t AudioEndToEndTest::GetNumFlexfecStreams() const {
44 return 0;
45}
46
Artem Titov3faa8322018-03-07 14:44:00 +010047std::unique_ptr<TestAudioDeviceModule::Capturer>
48AudioEndToEndTest::CreateCapturer() {
49 return TestAudioDeviceModule::CreatePulsedNoiseCapturer(32000, kSampleRate);
Fredrik Solenberg73276ad2017-09-14 14:46:47 +020050}
51
Artem Titov3faa8322018-03-07 14:44:00 +010052std::unique_ptr<TestAudioDeviceModule::Renderer>
53AudioEndToEndTest::CreateRenderer() {
54 return TestAudioDeviceModule::CreateDiscardRenderer(kSampleRate);
Fredrik Solenberg73276ad2017-09-14 14:46:47 +020055}
56
57void AudioEndToEndTest::OnFakeAudioDevicesCreated(
Artem Titov3faa8322018-03-07 14:44:00 +010058 TestAudioDeviceModule* send_audio_device,
59 TestAudioDeviceModule* recv_audio_device) {
Fredrik Solenberg73276ad2017-09-14 14:46:47 +020060 send_audio_device_ = send_audio_device;
61}
62
63test::PacketTransport* AudioEndToEndTest::CreateSendTransport(
64 SingleThreadedTaskQueueForTesting* task_queue,
65 Call* sender_call) {
66 return new test::PacketTransport(
67 task_queue, sender_call, this, test::PacketTransport::kSender,
Artem Titov4e199e92018-08-20 13:30:39 +020068 test::CallTest::payload_type_map_,
69 absl::make_unique<FakeNetworkPipe>(
70 Clock::GetRealTimeClock(),
71 absl::make_unique<SimulatedNetwork>(GetNetworkPipeConfig())));
Fredrik Solenberg73276ad2017-09-14 14:46:47 +020072}
73
74test::PacketTransport* AudioEndToEndTest::CreateReceiveTransport(
Yves Gerey665174f2018-06-19 15:03:05 +020075 SingleThreadedTaskQueueForTesting* task_queue) {
Fredrik Solenberg73276ad2017-09-14 14:46:47 +020076 return new test::PacketTransport(
77 task_queue, nullptr, this, test::PacketTransport::kReceiver,
Artem Titov4e199e92018-08-20 13:30:39 +020078 test::CallTest::payload_type_map_,
79 absl::make_unique<FakeNetworkPipe>(
80 Clock::GetRealTimeClock(),
81 absl::make_unique<SimulatedNetwork>(GetNetworkPipeConfig())));
Fredrik Solenberg73276ad2017-09-14 14:46:47 +020082}
83
84void AudioEndToEndTest::ModifyAudioConfigs(
Yves Gerey665174f2018-06-19 15:03:05 +020085 AudioSendStream::Config* send_config,
86 std::vector<AudioReceiveStream::Config>* receive_configs) {
Fredrik Solenberg73276ad2017-09-14 14:46:47 +020087 // Large bitrate by default.
88 const webrtc::SdpAudioFormat kDefaultFormat("opus", 48000, 2,
89 {{"stereo", "1"}});
Oskar Sundbom2707fb22017-11-16 10:57:35 +010090 send_config->send_codec_spec = AudioSendStream::Config::SendCodecSpec(
91 test::CallTest::kAudioSendPayloadType, kDefaultFormat);
Fredrik Solenberg73276ad2017-09-14 14:46:47 +020092}
93
94void AudioEndToEndTest::OnAudioStreamsCreated(
95 AudioSendStream* send_stream,
96 const std::vector<AudioReceiveStream*>& receive_streams) {
97 ASSERT_NE(nullptr, send_stream);
98 ASSERT_EQ(1u, receive_streams.size());
99 ASSERT_NE(nullptr, receive_streams[0]);
100 send_stream_ = send_stream;
101 receive_stream_ = receive_streams[0];
102}
103
104void AudioEndToEndTest::PerformTest() {
105 // Wait until the input audio file is done...
106 send_audio_device_->WaitForRecordingEnd();
107 // and some extra time to account for network delay.
108 SleepMs(GetNetworkPipeConfig().queue_delay_ms + kExtraRecordTimeMs);
109}
110} // namespace test
111} // namespace webrtc