blob: 0d3f3f475877c6a243e3105f11f2cac8e2891852 [file] [log] [blame]
niklase@google.com470e71d2011-07-07 08:21:25 +00001/*
tina.legrand@webrtc.org16b6b902012-04-12 11:02:38 +00002 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
niklase@google.com470e71d2011-07-07 08:21:25 +00003 *
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 <stdio.h>
kjellander@webrtc.org5490c712011-12-21 13:34:18 +000012#include <string>
niklase@google.com470e71d2011-07-07 08:21:25 +000013#include <vector>
14
kjellander3e6db232015-11-26 04:44:54 -080015#include "webrtc/modules/audio_coding/include/audio_coding_module.h"
16#include "webrtc/modules/audio_coding/test/APITest.h"
17#include "webrtc/modules/audio_coding/test/EncodeDecodeTest.h"
kjellander3e6db232015-11-26 04:44:54 -080018#include "webrtc/modules/audio_coding/test/PacketLossTest.h"
19#include "webrtc/modules/audio_coding/test/TestAllCodecs.h"
20#include "webrtc/modules/audio_coding/test/TestRedFec.h"
21#include "webrtc/modules/audio_coding/test/TestStereo.h"
22#include "webrtc/modules/audio_coding/test/TestVADDTX.h"
23#include "webrtc/modules/audio_coding/test/TwoWayCommunication.h"
kwibergac9f8762016-09-30 22:29:43 -070024#include "webrtc/modules/audio_coding/test/iSACTest.h"
25#include "webrtc/modules/audio_coding/test/opus_test.h"
Henrik Kjellander98f53512015-10-28 18:17:40 +010026#include "webrtc/system_wrappers/include/trace.h"
kwibergac9f8762016-09-30 22:29:43 -070027#include "webrtc/test/gtest.h"
tina.legrand@webrtc.org73222cf2013-03-15 13:29:17 +000028#include "webrtc/test/testsupport/fileutils.h"
niklase@google.com470e71d2011-07-07 08:21:25 +000029
tina.legrand@webrtc.org554ae1a2011-12-16 10:09:04 +000030using webrtc::Trace;
31
tina.legrand@webrtc.org50d5ca52012-06-18 13:35:52 +000032// This parameter is used to describe how to run the tests. It is normally
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +000033// set to 0, and all tests are run in quite mode.
tina.legrand@webrtc.org50d5ca52012-06-18 13:35:52 +000034#define ACM_TEST_MODE 0
niklase@google.com470e71d2011-07-07 08:21:25 +000035
tina.legrand@webrtc.org50d5ca52012-06-18 13:35:52 +000036TEST(AudioCodingModuleTest, TestAllCodecs) {
37 Trace::CreateTrace();
38 Trace::SetTraceFile((webrtc::test::OutputPath() +
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000039 "acm_allcodecs_trace.txt").c_str());
henrik.lundin@webrtc.orgadaf8092014-04-17 08:29:10 +000040 webrtc::TestAllCodecs(ACM_TEST_MODE).Perform();
tina.legrand@webrtc.org50d5ca52012-06-18 13:35:52 +000041 Trace::ReturnTrace();
42}
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +000043
Peter Boströme2976c82016-01-04 22:44:05 +010044#if defined(WEBRTC_ANDROID)
45TEST(AudioCodingModuleTest, DISABLED_TestEncodeDecode) {
46#else
47TEST(AudioCodingModuleTest, TestEncodeDecode) {
48#endif
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +000049 Trace::CreateTrace();
50 Trace::SetTraceFile((webrtc::test::OutputPath() +
51 "acm_encodedecode_trace.txt").c_str());
henrik.lundin@webrtc.orgadaf8092014-04-17 08:29:10 +000052 webrtc::EncodeDecodeTest(ACM_TEST_MODE).Perform();
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +000053 Trace::ReturnTrace();
54}
55
Peter Boströme2976c82016-01-04 22:44:05 +010056#if defined(WEBRTC_CODEC_RED)
57#if defined(WEBRTC_ANDROID)
58TEST(AudioCodingModuleTest, DISABLED_TestRedFec) {
kwiberg98ab3a42015-09-30 21:54:21 -070059#else
Peter Boströme2976c82016-01-04 22:44:05 +010060TEST(AudioCodingModuleTest, TestRedFec) {
kwiberg98ab3a42015-09-30 21:54:21 -070061#endif
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +000062 Trace::CreateTrace();
63 Trace::SetTraceFile((webrtc::test::OutputPath() +
64 "acm_fec_trace.txt").c_str());
minyue@webrtc.orgaa5ea1c2014-05-23 15:16:51 +000065 webrtc::TestRedFec().Perform();
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +000066 Trace::ReturnTrace();
67}
kwiberg98ab3a42015-09-30 21:54:21 -070068#endif
69
Peter Boströme2976c82016-01-04 22:44:05 +010070#if defined(WEBRTC_CODEC_ISAC) || defined(WEBRTC_CODEC_ISACFX)
71#if defined(WEBRTC_ANDROID)
72TEST(AudioCodingModuleTest, DISABLED_TestIsac) {
73#else
74TEST(AudioCodingModuleTest, TestIsac) {
75#endif
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +000076 Trace::CreateTrace();
77 Trace::SetTraceFile((webrtc::test::OutputPath() +
78 "acm_isac_trace.txt").c_str());
henrik.lundin@webrtc.orgadaf8092014-04-17 08:29:10 +000079 webrtc::ISACTest(ACM_TEST_MODE).Perform();
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +000080 Trace::ReturnTrace();
81}
Peter Boströme2976c82016-01-04 22:44:05 +010082#endif
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +000083
kwiberg98ab3a42015-09-30 21:54:21 -070084#if (defined(WEBRTC_CODEC_ISAC) || defined(WEBRTC_CODEC_ISACFX)) && \
85 defined(WEBRTC_CODEC_ILBC) && defined(WEBRTC_CODEC_G722)
Peter Boströme2976c82016-01-04 22:44:05 +010086#if defined(WEBRTC_ANDROID)
87TEST(AudioCodingModuleTest, DISABLED_TwoWayCommunication) {
kwiberg98ab3a42015-09-30 21:54:21 -070088#else
Peter Boströme2976c82016-01-04 22:44:05 +010089TEST(AudioCodingModuleTest, TwoWayCommunication) {
kwiberg98ab3a42015-09-30 21:54:21 -070090#endif
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +000091 Trace::CreateTrace();
92 Trace::SetTraceFile((webrtc::test::OutputPath() +
93 "acm_twowaycom_trace.txt").c_str());
henrik.lundin@webrtc.orgadaf8092014-04-17 08:29:10 +000094 webrtc::TwoWayCommunication(ACM_TEST_MODE).Perform();
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +000095 Trace::ReturnTrace();
96}
Peter Boströme2976c82016-01-04 22:44:05 +010097#endif
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +000098
danilchapdc050172017-03-01 01:16:51 -080099// Disabled on ios as flaky, see https://crbug.com/webrtc/7057
100#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
Peter Boströme2976c82016-01-04 22:44:05 +0100101TEST(AudioCodingModuleTest, DISABLED_TestStereo) {
102#else
103TEST(AudioCodingModuleTest, TestStereo) {
104#endif
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000105 Trace::CreateTrace();
106 Trace::SetTraceFile((webrtc::test::OutputPath() +
107 "acm_stereo_trace.txt").c_str());
henrik.lundin@webrtc.orgadaf8092014-04-17 08:29:10 +0000108 webrtc::TestStereo(ACM_TEST_MODE).Perform();
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000109 Trace::ReturnTrace();
110}
111
danilchapdc050172017-03-01 01:16:51 -0800112// Disabled on ios as flaky, see https://crbug.com/webrtc/7057
113#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
Peter Boströme2976c82016-01-04 22:44:05 +0100114TEST(AudioCodingModuleTest, DISABLED_TestWebRtcVadDtx) {
115#else
116TEST(AudioCodingModuleTest, TestWebRtcVadDtx) {
117#endif
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000118 Trace::CreateTrace();
119 Trace::SetTraceFile((webrtc::test::OutputPath() +
120 "acm_vaddtx_trace.txt").c_str());
minyue@webrtc.org05617162015-03-03 12:02:30 +0000121 webrtc::TestWebRtcVadDtx().Perform();
122 Trace::ReturnTrace();
123}
124
125TEST(AudioCodingModuleTest, TestOpusDtx) {
126 Trace::CreateTrace();
127 Trace::SetTraceFile((webrtc::test::OutputPath() +
128 "acm_opusdtx_trace.txt").c_str());
129 webrtc::TestOpusDtx().Perform();
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000130 Trace::ReturnTrace();
131}
tina.legrand@webrtc.org50d5ca52012-06-18 13:35:52 +0000132
danilchapdc050172017-03-01 01:16:51 -0800133// Disabled on ios as flaky, see https://crbug.com/webrtc/7057
134#if defined(WEBRTC_IOS)
135TEST(AudioCodingModuleTest, DISABLED_TestOpus) {
136#else
tina.legrand@webrtc.org73222cf2013-03-15 13:29:17 +0000137TEST(AudioCodingModuleTest, TestOpus) {
danilchapdc050172017-03-01 01:16:51 -0800138#endif
tina.legrand@webrtc.org73222cf2013-03-15 13:29:17 +0000139 Trace::CreateTrace();
140 Trace::SetTraceFile((webrtc::test::OutputPath() +
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000141 "acm_opus_trace.txt").c_str());
henrik.lundin@webrtc.orgadaf8092014-04-17 08:29:10 +0000142 webrtc::OpusTest().Perform();
tina.legrand@webrtc.org73222cf2013-03-15 13:29:17 +0000143 Trace::ReturnTrace();
144}
145
minyue@webrtc.orgaa5ea1c2014-05-23 15:16:51 +0000146TEST(AudioCodingModuleTest, TestPacketLoss) {
147 Trace::CreateTrace();
148 Trace::SetTraceFile((webrtc::test::OutputPath() +
149 "acm_packetloss_trace.txt").c_str());
150 webrtc::PacketLossTest(1, 10, 10, 1).Perform();
151 Trace::ReturnTrace();
152}
153
154TEST(AudioCodingModuleTest, TestPacketLossBurst) {
155 Trace::CreateTrace();
156 Trace::SetTraceFile((webrtc::test::OutputPath() +
157 "acm_packetloss_burst_trace.txt").c_str());
158 webrtc::PacketLossTest(1, 10, 10, 2).Perform();
159 Trace::ReturnTrace();
160}
161
aleloib1a89762017-03-28 02:28:08 -0700162// Disabled on ios as flake, see https://crbug.com/webrtc/7057
163#if defined(WEBRTC_IOS)
164TEST(AudioCodingModuleTest, DISABLED_TestPacketLossStereo) {
165#else
166 TEST(AudioCodingModuleTest, TestPacketLossStereo) {
167#endif
minyue@webrtc.orgaa5ea1c2014-05-23 15:16:51 +0000168 Trace::CreateTrace();
169 Trace::SetTraceFile((webrtc::test::OutputPath() +
170 "acm_packetloss_trace.txt").c_str());
171 webrtc::PacketLossTest(2, 10, 10, 1).Perform();
172 Trace::ReturnTrace();
173}
174
danilchapdc050172017-03-01 01:16:51 -0800175// Disabled on ios as flake, see https://crbug.com/webrtc/7057
176#if defined(WEBRTC_IOS)
177TEST(AudioCodingModuleTest, DISABLED_TestPacketLossStereoBurst) {
178#else
minyue@webrtc.orgaa5ea1c2014-05-23 15:16:51 +0000179TEST(AudioCodingModuleTest, TestPacketLossStereoBurst) {
danilchapdc050172017-03-01 01:16:51 -0800180#endif
minyue@webrtc.orgaa5ea1c2014-05-23 15:16:51 +0000181 Trace::CreateTrace();
182 Trace::SetTraceFile((webrtc::test::OutputPath() +
183 "acm_packetloss_burst_trace.txt").c_str());
184 webrtc::PacketLossTest(2, 10, 10, 2).Perform();
185 Trace::ReturnTrace();
186}
187
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000188// The full API test is too long to run automatically on bots, but can be used
189// for offline testing. User interaction is needed.
190#ifdef ACM_TEST_FULL_API
191 TEST(AudioCodingModuleTest, TestAPI) {
192 Trace::CreateTrace();
193 Trace::SetTraceFile((webrtc::test::OutputPath() +
194 "acm_apitest_trace.txt").c_str());
henrik.lundin@webrtc.orgadaf8092014-04-17 08:29:10 +0000195 webrtc::APITest().Perform();
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000196 Trace::ReturnTrace();
tina.legrand@webrtc.org5e7ca602012-06-12 07:16:24 +0000197 }
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000198#endif