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

Side by Side Diff: remoting/client/audio_player_unittest.cc

Issue 2384063004: Move audio decoding to protocol layer (Closed)
Patch Set: Created 4 years, 2 months 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "remoting/client/audio_player.h" 5 #include "remoting/client/audio_player.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <memory> 9 #include <memory>
10 10
11 #include "base/callback.h"
11 #include "base/compiler_specific.h" 12 #include "base/compiler_specific.h"
12 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
13 14
14 namespace { 15 namespace {
15 16
16 const int kAudioSamplesPerFrame = 25; 17 const int kAudioSamplesPerFrame = 25;
17 const int kAudioSampleBytes = 4; 18 const int kAudioSampleBytes = 4;
18 const int kAudioFrameBytes = kAudioSamplesPerFrame * kAudioSampleBytes; 19 const int kAudioFrameBytes = kAudioSamplesPerFrame * kAudioSampleBytes;
19 const int kPaddingBytes = 16; 20 const int kPaddingBytes = 16;
20 21
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 } 111 }
111 112
112 std::unique_ptr<AudioPacket> CreatePacket48000Hz(int samples) { 113 std::unique_ptr<AudioPacket> CreatePacket48000Hz(int samples) {
113 return CreatePacketWithSamplingRate(AudioPacket::SAMPLING_RATE_48000, 114 return CreatePacketWithSamplingRate(AudioPacket::SAMPLING_RATE_48000,
114 samples); 115 samples);
115 } 116 }
116 117
117 TEST_F(AudioPlayerTest, Init) { 118 TEST_F(AudioPlayerTest, Init) {
118 ASSERT_EQ(0, GetNumQueuedPackets()); 119 ASSERT_EQ(0, GetNumQueuedPackets());
119 120
120 audio_->AddAudioPacket(CreatePacket44100Hz(10)); 121 audio_->ProcessAudioPacket(CreatePacket44100Hz(10), base::Closure());
121 ASSERT_EQ(1, GetNumQueuedPackets()); 122 ASSERT_EQ(1, GetNumQueuedPackets());
122 } 123 }
123 124
124 TEST_F(AudioPlayerTest, MultipleSamples) { 125 TEST_F(AudioPlayerTest, MultipleSamples) {
125 audio_->AddAudioPacket(CreatePacket44100Hz(10)); 126 audio_->ProcessAudioPacket(CreatePacket44100Hz(10), base::Closure());
126 ASSERT_EQ(10, GetNumQueuedSamples()); 127 ASSERT_EQ(10, GetNumQueuedSamples());
127 ASSERT_EQ(1, GetNumQueuedPackets()); 128 ASSERT_EQ(1, GetNumQueuedPackets());
128 129
129 audio_->AddAudioPacket(CreatePacket44100Hz(20)); 130 audio_->ProcessAudioPacket(CreatePacket44100Hz(20), base::Closure());
130 ASSERT_EQ(30, GetNumQueuedSamples()); 131 ASSERT_EQ(30, GetNumQueuedSamples());
131 ASSERT_EQ(2, GetNumQueuedPackets()); 132 ASSERT_EQ(2, GetNumQueuedPackets());
132 } 133 }
133 134
134 TEST_F(AudioPlayerTest, ChangeSampleRate) { 135 TEST_F(AudioPlayerTest, ChangeSampleRate) {
135 audio_->AddAudioPacket(CreatePacket44100Hz(10)); 136 audio_->ProcessAudioPacket(CreatePacket44100Hz(10), base::Closure());
136 ASSERT_EQ(10, GetNumQueuedSamples()); 137 ASSERT_EQ(10, GetNumQueuedSamples());
137 ASSERT_EQ(1, GetNumQueuedPackets()); 138 ASSERT_EQ(1, GetNumQueuedPackets());
138 139
139 // New packet with different sampling rate causes previous samples to 140 // New packet with different sampling rate causes previous samples to
140 // be removed. 141 // be removed.
141 audio_->AddAudioPacket(CreatePacket48000Hz(20)); 142 audio_->ProcessAudioPacket(CreatePacket48000Hz(20), base::Closure());
142 ASSERT_EQ(20, GetNumQueuedSamples()); 143 ASSERT_EQ(20, GetNumQueuedSamples());
143 ASSERT_EQ(1, GetNumQueuedPackets()); 144 ASSERT_EQ(1, GetNumQueuedPackets());
144 } 145 }
145 146
146 TEST_F(AudioPlayerTest, ExceedLatency) { 147 TEST_F(AudioPlayerTest, ExceedLatency) {
147 // Push about 4 seconds worth of samples. 148 // Push about 4 seconds worth of samples.
148 for (int i = 0; i < 100; ++i) { 149 for (int i = 0; i < 100; ++i) {
149 audio_->AddAudioPacket(CreatePacket48000Hz(2000)); 150 audio_->ProcessAudioPacket(CreatePacket48000Hz(2000), base::Closure());
150 } 151 }
151 152
152 // Verify that we don't have more than 0.5s. 153 // Verify that we don't have more than 0.5s.
153 EXPECT_LT(GetNumQueuedSamples(), 24000); 154 EXPECT_LT(GetNumQueuedSamples(), 24000);
154 } 155 }
155 156
156 // Incoming packets: 100 157 // Incoming packets: 100
157 // Consume: 25 (w/ 75 remaining, offset 25 into packet) 158 // Consume: 25 (w/ 75 remaining, offset 25 into packet)
158 TEST_F(AudioPlayerTest, ConsumePartialPacket) { 159 TEST_F(AudioPlayerTest, ConsumePartialPacket) {
159 int total_samples = 0; 160 int total_samples = 0;
160 int bytes_consumed = 0; 161 int bytes_consumed = 0;
161 162
162 // Process 100 samples. 163 // Process 100 samples.
163 int packet1_samples = 100; 164 int packet1_samples = 100;
164 total_samples += packet1_samples; 165 total_samples += packet1_samples;
165 audio_->AddAudioPacket(CreatePacket44100Hz(packet1_samples)); 166 audio_->ProcessAudioPacket(CreatePacket44100Hz(packet1_samples),
167 base::Closure());
166 ASSERT_EQ(total_samples, GetNumQueuedSamples()); 168 ASSERT_EQ(total_samples, GetNumQueuedSamples());
167 ASSERT_EQ(1, GetNumQueuedPackets()); 169 ASSERT_EQ(1, GetNumQueuedPackets());
168 ASSERT_EQ(bytes_consumed, GetBytesConsumed()); 170 ASSERT_EQ(bytes_consumed, GetBytesConsumed());
169 171
170 // Consume one frame (=25) of samples. 172 // Consume one frame (=25) of samples.
171 ConsumeAudioFrame(); 173 ConsumeAudioFrame();
172 total_samples -= kAudioSamplesPerFrame; 174 total_samples -= kAudioSamplesPerFrame;
173 bytes_consumed += kAudioFrameBytes; 175 bytes_consumed += kAudioFrameBytes;
174 ASSERT_EQ(total_samples, GetNumQueuedSamples()); 176 ASSERT_EQ(total_samples, GetNumQueuedSamples());
175 ASSERT_EQ(1, GetNumQueuedPackets()); 177 ASSERT_EQ(1, GetNumQueuedPackets());
176 ASSERT_EQ(bytes_consumed, GetBytesConsumed()); 178 ASSERT_EQ(bytes_consumed, GetBytesConsumed());
177 CheckAudioFrameBytes(kAudioFrameBytes); 179 CheckAudioFrameBytes(kAudioFrameBytes);
178 180
179 // Remaining samples. 181 // Remaining samples.
180 ASSERT_EQ(75, total_samples); 182 ASSERT_EQ(75, total_samples);
181 ASSERT_EQ(25 * kAudioSampleBytes, bytes_consumed); 183 ASSERT_EQ(25 * kAudioSampleBytes, bytes_consumed);
182 } 184 }
183 185
184 // Incoming packets: 20, 70 186 // Incoming packets: 20, 70
185 // Consume: 25, 25 (w/ 40 remaining, offset 30 into packet) 187 // Consume: 25, 25 (w/ 40 remaining, offset 30 into packet)
186 TEST_F(AudioPlayerTest, ConsumeAcrossPackets) { 188 TEST_F(AudioPlayerTest, ConsumeAcrossPackets) {
187 int total_samples = 0; 189 int total_samples = 0;
188 int bytes_consumed = 0; 190 int bytes_consumed = 0;
189 191
190 // Packet 1. 192 // Packet 1.
191 int packet1_samples = 20; 193 int packet1_samples = 20;
192 total_samples += packet1_samples; 194 total_samples += packet1_samples;
193 audio_->AddAudioPacket(CreatePacket44100Hz(packet1_samples)); 195 audio_->ProcessAudioPacket(CreatePacket44100Hz(packet1_samples),
196 base::Closure());
194 ASSERT_EQ(total_samples, GetNumQueuedSamples()); 197 ASSERT_EQ(total_samples, GetNumQueuedSamples());
195 198
196 // Packet 2. 199 // Packet 2.
197 int packet2_samples = 70; 200 int packet2_samples = 70;
198 total_samples += packet2_samples; 201 total_samples += packet2_samples;
199 audio_->AddAudioPacket(CreatePacket44100Hz(packet2_samples)); 202 audio_->ProcessAudioPacket(CreatePacket44100Hz(packet2_samples),
203 base::Closure());
200 ASSERT_EQ(total_samples, GetNumQueuedSamples()); 204 ASSERT_EQ(total_samples, GetNumQueuedSamples());
201 ASSERT_EQ(bytes_consumed, GetBytesConsumed()); 205 ASSERT_EQ(bytes_consumed, GetBytesConsumed());
202 206
203 // Consume 1st frame of 25 samples. 207 // Consume 1st frame of 25 samples.
204 // This will consume the entire 1st packet. 208 // This will consume the entire 1st packet.
205 ConsumeAudioFrame(); 209 ConsumeAudioFrame();
206 total_samples -= kAudioSamplesPerFrame; 210 total_samples -= kAudioSamplesPerFrame;
207 bytes_consumed += kAudioFrameBytes - (packet1_samples * kAudioSampleBytes); 211 bytes_consumed += kAudioFrameBytes - (packet1_samples * kAudioSampleBytes);
208 ASSERT_EQ(total_samples, GetNumQueuedSamples()); 212 ASSERT_EQ(total_samples, GetNumQueuedSamples());
209 ASSERT_EQ(1, GetNumQueuedPackets()); 213 ASSERT_EQ(1, GetNumQueuedPackets());
(...skipping 16 matching lines...) Expand all
226 230
227 // Incoming packets: 50, 30 231 // Incoming packets: 50, 30
228 // Consume: 25, 25, 25 (w/ 5 remaining, offset 25 into packet) 232 // Consume: 25, 25, 25 (w/ 5 remaining, offset 25 into packet)
229 TEST_F(AudioPlayerTest, ConsumeEntirePacket) { 233 TEST_F(AudioPlayerTest, ConsumeEntirePacket) {
230 int total_samples = 0; 234 int total_samples = 0;
231 int bytes_consumed = 0; 235 int bytes_consumed = 0;
232 236
233 // Packet 1. 237 // Packet 1.
234 int packet1_samples = 50; 238 int packet1_samples = 50;
235 total_samples += packet1_samples; 239 total_samples += packet1_samples;
236 audio_->AddAudioPacket(CreatePacket44100Hz(packet1_samples)); 240 audio_->ProcessAudioPacket(CreatePacket44100Hz(packet1_samples),
241 base::Closure());
237 ASSERT_EQ(total_samples, GetNumQueuedSamples()); 242 ASSERT_EQ(total_samples, GetNumQueuedSamples());
238 ASSERT_EQ(bytes_consumed, GetBytesConsumed()); 243 ASSERT_EQ(bytes_consumed, GetBytesConsumed());
239 244
240 // Packet 2. 245 // Packet 2.
241 int packet2_samples = 30; 246 int packet2_samples = 30;
242 total_samples += packet2_samples; 247 total_samples += packet2_samples;
243 audio_->AddAudioPacket(CreatePacket44100Hz(packet2_samples)); 248 audio_->ProcessAudioPacket(CreatePacket44100Hz(packet2_samples),
249 base::Closure());
244 ASSERT_EQ(total_samples, GetNumQueuedSamples()); 250 ASSERT_EQ(total_samples, GetNumQueuedSamples());
245 ASSERT_EQ(bytes_consumed, GetBytesConsumed()); 251 ASSERT_EQ(bytes_consumed, GetBytesConsumed());
246 252
247 // Consume 1st frame of 25 samples. 253 // Consume 1st frame of 25 samples.
248 ConsumeAudioFrame(); 254 ConsumeAudioFrame();
249 total_samples -= kAudioSamplesPerFrame; 255 total_samples -= kAudioSamplesPerFrame;
250 bytes_consumed += kAudioFrameBytes; 256 bytes_consumed += kAudioFrameBytes;
251 ASSERT_EQ(total_samples, GetNumQueuedSamples()); 257 ASSERT_EQ(total_samples, GetNumQueuedSamples());
252 ASSERT_EQ(2, GetNumQueuedPackets()); 258 ASSERT_EQ(2, GetNumQueuedPackets());
253 ASSERT_EQ(bytes_consumed, GetBytesConsumed()); 259 ASSERT_EQ(bytes_consumed, GetBytesConsumed());
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 298
293 // Incoming packets: 10 299 // Incoming packets: 10
294 // Consume: 25 300 // Consume: 25
295 TEST_F(AudioPlayerTest, NotEnoughDataToConsume) { 301 TEST_F(AudioPlayerTest, NotEnoughDataToConsume) {
296 int total_samples = 0; 302 int total_samples = 0;
297 int bytes_consumed = 0; 303 int bytes_consumed = 0;
298 304
299 // Packet 1. 305 // Packet 1.
300 int packet1_samples = 10; 306 int packet1_samples = 10;
301 total_samples += packet1_samples; 307 total_samples += packet1_samples;
302 audio_->AddAudioPacket(CreatePacket44100Hz(packet1_samples)); 308 audio_->ProcessAudioPacket(CreatePacket44100Hz(packet1_samples),
309 base::Closure());
303 ASSERT_EQ(total_samples, GetNumQueuedSamples()); 310 ASSERT_EQ(total_samples, GetNumQueuedSamples());
304 ASSERT_EQ(bytes_consumed, GetBytesConsumed()); 311 ASSERT_EQ(bytes_consumed, GetBytesConsumed());
305 312
306 // Attempt to consume a frame of 25 samples. 313 // Attempt to consume a frame of 25 samples.
307 ConsumeAudioFrame(); 314 ConsumeAudioFrame();
308 ASSERT_EQ(0, GetNumQueuedSamples()); 315 ASSERT_EQ(0, GetNumQueuedSamples());
309 ASSERT_EQ(0, GetNumQueuedPackets()); 316 ASSERT_EQ(0, GetNumQueuedPackets());
310 ASSERT_EQ(0, GetBytesConsumed()); 317 ASSERT_EQ(0, GetBytesConsumed());
311 CheckAudioFrameBytes(packet1_samples * kAudioSampleBytes); 318 CheckAudioFrameBytes(packet1_samples * kAudioSampleBytes);
312 } 319 }
313 320
314 } // namespace remoting 321 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698