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

Side by Side Diff: webrtc/modules/audio_coding/main/test/initial_delay_unittest.cc

Issue 1421013006: Delete a chain of methods in ViE, VoE and ACM (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years, 1 month 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 unified diff | Download patch
OLDNEW
(Empty)
1 /*
2 * Copyright (c) 2013 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 "webrtc/modules/audio_coding/main/include/audio_coding_module.h"
12
13 #include <assert.h>
14 #include <math.h>
15
16 #include <iostream>
17
18 #include "testing/gtest/include/gtest/gtest.h"
19 #include "webrtc/base/scoped_ptr.h"
20 #include "webrtc/common_types.h"
21 #include "webrtc/engine_configurations.h"
22 #include "webrtc/modules/audio_coding/main/include/audio_coding_module_typedefs. h"
23 #include "webrtc/modules/audio_coding/main/test/Channel.h"
24 #include "webrtc/modules/audio_coding/main/test/PCMFile.h"
25 #include "webrtc/modules/audio_coding/main/test/utility.h"
26 #include "webrtc/system_wrappers/include/event_wrapper.h"
27 #include "webrtc/test/testsupport/fileutils.h"
28 #include "webrtc/test/testsupport/gtest_disable.h"
29
30 namespace webrtc {
31
32 namespace {
33
34 double FrameRms(AudioFrame& frame) {
35 size_t samples = frame.num_channels_ * frame.samples_per_channel_;
36 double rms = 0;
37 for (size_t n = 0; n < samples; ++n)
38 rms += frame.data_[n] * frame.data_[n];
39 rms /= samples;
40 rms = sqrt(rms);
41 return rms;
42 }
43
44 }
45
46 class InitialPlayoutDelayTest : public ::testing::Test {
47 protected:
48 InitialPlayoutDelayTest()
49 : acm_a_(AudioCodingModule::Create(0)),
50 acm_b_(AudioCodingModule::Create(1)),
51 channel_a2b_(NULL) {}
52
53 ~InitialPlayoutDelayTest() {
54 if (channel_a2b_ != NULL) {
55 delete channel_a2b_;
56 channel_a2b_ = NULL;
57 }
58 }
59
60 void SetUp() {
61 ASSERT_TRUE(acm_a_.get() != NULL);
62 ASSERT_TRUE(acm_b_.get() != NULL);
63
64 EXPECT_EQ(0, acm_b_->InitializeReceiver());
65 EXPECT_EQ(0, acm_a_->InitializeReceiver());
66
67 // Register all L16 codecs in receiver.
68 CodecInst codec;
69 const int kFsHz[3] = { 8000, 16000, 32000 };
70 const int kChannels[2] = { 1, 2 };
71 for (int n = 0; n < 3; ++n) {
72 for (int k = 0; k < 2; ++k) {
73 AudioCodingModule::Codec("L16", &codec, kFsHz[n], kChannels[k]);
74 acm_b_->RegisterReceiveCodec(codec);
75 }
76 }
77
78 // Create and connect the channel
79 channel_a2b_ = new Channel;
80 acm_a_->RegisterTransportCallback(channel_a2b_);
81 channel_a2b_->RegisterReceiverACM(acm_b_.get());
82 }
83
84 void NbMono() {
85 CodecInst codec;
86 AudioCodingModule::Codec("L16", &codec, 8000, 1);
87 codec.pacsize = codec.plfreq * 30 / 1000; // 30 ms packets.
88 Run(codec, 1000);
89 }
90
91 void WbMono() {
92 CodecInst codec;
93 AudioCodingModule::Codec("L16", &codec, 16000, 1);
94 codec.pacsize = codec.plfreq * 30 / 1000; // 30 ms packets.
95 Run(codec, 1000);
96 }
97
98 void SwbMono() {
99 CodecInst codec;
100 AudioCodingModule::Codec("L16", &codec, 32000, 1);
101 codec.pacsize = codec.plfreq * 10 / 1000; // 10 ms packets.
102 Run(codec, 400); // Memory constraints limit the buffer at <500 ms.
103 }
104
105 void NbStereo() {
106 CodecInst codec;
107 AudioCodingModule::Codec("L16", &codec, 8000, 2);
108 codec.pacsize = codec.plfreq * 30 / 1000; // 30 ms packets.
109 Run(codec, 1000);
110 }
111
112 void WbStereo() {
113 CodecInst codec;
114 AudioCodingModule::Codec("L16", &codec, 16000, 2);
115 codec.pacsize = codec.plfreq * 30 / 1000; // 30 ms packets.
116 Run(codec, 1000);
117 }
118
119 void SwbStereo() {
120 CodecInst codec;
121 AudioCodingModule::Codec("L16", &codec, 32000, 2);
122 codec.pacsize = codec.plfreq * 10 / 1000; // 10 ms packets.
123 Run(codec, 400); // Memory constraints limit the buffer at <500 ms.
124 }
125
126 private:
127 void Run(CodecInst codec, int initial_delay_ms) {
128 AudioFrame in_audio_frame;
129 AudioFrame out_audio_frame;
130 int num_frames = 0;
131 const int kAmp = 10000;
132 in_audio_frame.sample_rate_hz_ = codec.plfreq;
133 in_audio_frame.num_channels_ = codec.channels;
134 in_audio_frame.samples_per_channel_ = codec.plfreq / 100; // 10 ms.
135 size_t samples = in_audio_frame.num_channels_ *
136 in_audio_frame.samples_per_channel_;
137 for (size_t n = 0; n < samples; ++n) {
138 in_audio_frame.data_[n] = kAmp;
139 }
140
141 uint32_t timestamp = 0;
142 double rms = 0;
143 ASSERT_EQ(0, acm_a_->RegisterSendCodec(codec));
144 acm_b_->SetInitialPlayoutDelay(initial_delay_ms);
145 while (rms < kAmp / 2) {
146 in_audio_frame.timestamp_ = timestamp;
147 timestamp += static_cast<uint32_t>(in_audio_frame.samples_per_channel_);
148 ASSERT_GE(acm_a_->Add10MsData(in_audio_frame), 0);
149 ASSERT_EQ(0, acm_b_->PlayoutData10Ms(codec.plfreq, &out_audio_frame));
150 rms = FrameRms(out_audio_frame);
151 ++num_frames;
152 }
153
154 ASSERT_GE(num_frames * 10, initial_delay_ms);
155 ASSERT_LE(num_frames * 10, initial_delay_ms + 100);
156 }
157
158 rtc::scoped_ptr<AudioCodingModule> acm_a_;
159 rtc::scoped_ptr<AudioCodingModule> acm_b_;
160 Channel* channel_a2b_;
161 };
162
163 TEST_F(InitialPlayoutDelayTest, NbMono) { NbMono(); }
164
165 TEST_F(InitialPlayoutDelayTest, WbMono) { WbMono(); }
166
167 TEST_F(InitialPlayoutDelayTest, SwbMono) { SwbMono(); }
168
169 TEST_F(InitialPlayoutDelayTest, NbStereo) { NbStereo(); }
170
171 TEST_F(InitialPlayoutDelayTest, WbStereo) { WbStereo(); }
172
173 TEST_F(InitialPlayoutDelayTest, SwbStereo) { SwbStereo(); }
174
175 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698