blob: b7e987137c18c5250047685d508bc8defa4904a7 [file] [log] [blame]
niklase@google.com470e71d2011-07-07 08:21:25 +00001/*
2 * Copyright (c) 2011 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
kjellander3e6db232015-11-26 04:44:54 -080011#ifndef WEBRTC_MODULES_AUDIO_CODING_TEST_TESTVADDTX_H_
12#define WEBRTC_MODULES_AUDIO_CODING_TEST_TESTVADDTX_H_
niklase@google.com470e71d2011-07-07 08:21:25 +000013
kwiberg37478382016-02-14 20:40:57 -080014#include <memory>
minyue@webrtc.org05617162015-03-03 12:02:30 +000015
minyue@webrtc.org05617162015-03-03 12:02:30 +000016#include "webrtc/common_types.h"
kjellander3e6db232015-11-26 04:44:54 -080017#include "webrtc/modules/audio_coding/include/audio_coding_module.h"
18#include "webrtc/modules/audio_coding/include/audio_coding_module_typedefs.h"
19#include "webrtc/modules/audio_coding/test/ACMTest.h"
20#include "webrtc/modules/audio_coding/test/Channel.h"
niklase@google.com470e71d2011-07-07 08:21:25 +000021
tina.legrand@webrtc.org554ae1a2011-12-16 10:09:04 +000022namespace webrtc {
23
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000024class ActivityMonitor : public ACMVADCallback {
25 public:
26 ActivityMonitor();
henrik.lundin@webrtc.orge9217b42015-03-06 07:50:34 +000027 int32_t InFrameType(FrameType frame_type);
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +000028 void PrintStatistics();
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000029 void ResetStatistics();
minyue@webrtc.org05617162015-03-03 12:02:30 +000030 void GetStatistics(uint32_t* stats);
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000031 private:
pbos22993e12015-10-19 02:39:06 -070032 // 0 - kEmptyFrame
henrik.lundin@webrtc.orge9217b42015-03-06 07:50:34 +000033 // 1 - kAudioFrameSpeech
34 // 2 - kAudioFrameCN
35 // 3 - kVideoFrameKey (not used by audio)
36 // 4 - kVideoFrameDelta (not used by audio)
37 uint32_t counter_[5];
niklase@google.com470e71d2011-07-07 08:21:25 +000038};
39
minyue@webrtc.org05617162015-03-03 12:02:30 +000040
41// TestVadDtx is to verify that VAD/DTX perform as they should. It runs through
42// an audio file and check if the occurrence of various packet types follows
43// expectation. TestVadDtx needs its derived class to implement the Perform()
44// to put the test together.
45class TestVadDtx : public ACMTest {
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000046 public:
minyue@webrtc.org05617162015-03-03 12:02:30 +000047 static const int kOutputFreqHz = 16000;
niklase@google.com470e71d2011-07-07 08:21:25 +000048
minyue@webrtc.org05617162015-03-03 12:02:30 +000049 TestVadDtx();
50
51 virtual void Perform() = 0;
52
53 protected:
54 void RegisterCodec(CodecInst codec_param);
55
56 // Encoding a file and see if the numbers that various packets occur follow
57 // the expectation. Saves result to a file.
58 // expects[x] means
59 // -1 : do not care,
60 // 0 : there have been no packets of type |x|,
61 // 1 : there have been packets of type |x|,
62 // with |x| indicates the following packet types
pbos22993e12015-10-19 02:39:06 -070063 // 0 - kEmptyFrame
henrik.lundin@webrtc.orge9217b42015-03-06 07:50:34 +000064 // 1 - kAudioFrameSpeech
65 // 2 - kAudioFrameCN
66 // 3 - kVideoFrameKey (not used by audio)
67 // 4 - kVideoFrameDelta (not used by audio)
minyue@webrtc.org05617162015-03-03 12:02:30 +000068 void Run(std::string in_filename, int frequency, int channels,
69 std::string out_filename, bool append, const int* expects);
70
kwiberg37478382016-02-14 20:40:57 -080071 std::unique_ptr<AudioCodingModule> acm_send_;
72 std::unique_ptr<AudioCodingModule> acm_receive_;
73 std::unique_ptr<Channel> channel_;
74 std::unique_ptr<ActivityMonitor> monitor_;
ossu63fb95a2016-07-06 09:34:22 -070075 uint32_t time_stamp_ = 0x12345678;
minyue@webrtc.org05617162015-03-03 12:02:30 +000076};
77
78// TestWebRtcVadDtx is to verify that the WebRTC VAD/DTX perform as they should.
79class TestWebRtcVadDtx final : public TestVadDtx {
80 public:
81 TestWebRtcVadDtx();
82
83 void Perform() override;
84
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000085 private:
minyue@webrtc.org05617162015-03-03 12:02:30 +000086 void RunTestCases();
87 void Test(bool new_outfile);
88 void SetVAD(bool enable_dtx, bool enable_vad, ACMVADMode vad_mode);
niklase@google.com470e71d2011-07-07 08:21:25 +000089
minyue@webrtc.org05617162015-03-03 12:02:30 +000090 bool vad_enabled_;
91 bool dtx_enabled_;
minyue@webrtc.org05617162015-03-03 12:02:30 +000092 int output_file_num_;
93};
niklase@google.com470e71d2011-07-07 08:21:25 +000094
minyue@webrtc.org05617162015-03-03 12:02:30 +000095// TestOpusDtx is to verify that the Opus DTX performs as it should.
96class TestOpusDtx final : public TestVadDtx {
97 public:
98 void Perform() override;
niklase@google.com470e71d2011-07-07 08:21:25 +000099};
100
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000101} // namespace webrtc
niklase@google.com470e71d2011-07-07 08:21:25 +0000102
kjellander3e6db232015-11-26 04:44:54 -0800103#endif // WEBRTC_MODULES_AUDIO_CODING_TEST_TESTVADDTX_H_