OLD | NEW |
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 |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
110 } | 110 } |
111 | 111 |
112 std::unique_ptr<AudioPacket> CreatePacket48000Hz(int samples) { | 112 std::unique_ptr<AudioPacket> CreatePacket48000Hz(int samples) { |
113 return CreatePacketWithSamplingRate(AudioPacket::SAMPLING_RATE_48000, | 113 return CreatePacketWithSamplingRate(AudioPacket::SAMPLING_RATE_48000, |
114 samples); | 114 samples); |
115 } | 115 } |
116 | 116 |
117 TEST_F(AudioPlayerTest, Init) { | 117 TEST_F(AudioPlayerTest, Init) { |
118 ASSERT_EQ(0, GetNumQueuedPackets()); | 118 ASSERT_EQ(0, GetNumQueuedPackets()); |
119 | 119 |
120 audio_->ProcessAudioPacket(CreatePacket44100Hz(10)); | 120 audio_->AddAudioPacket(CreatePacket44100Hz(10)); |
121 ASSERT_EQ(1, GetNumQueuedPackets()); | 121 ASSERT_EQ(1, GetNumQueuedPackets()); |
122 } | 122 } |
123 | 123 |
124 TEST_F(AudioPlayerTest, MultipleSamples) { | 124 TEST_F(AudioPlayerTest, MultipleSamples) { |
125 audio_->ProcessAudioPacket(CreatePacket44100Hz(10)); | 125 audio_->AddAudioPacket(CreatePacket44100Hz(10)); |
126 ASSERT_EQ(10, GetNumQueuedSamples()); | 126 ASSERT_EQ(10, GetNumQueuedSamples()); |
127 ASSERT_EQ(1, GetNumQueuedPackets()); | 127 ASSERT_EQ(1, GetNumQueuedPackets()); |
128 | 128 |
129 audio_->ProcessAudioPacket(CreatePacket44100Hz(20)); | 129 audio_->AddAudioPacket(CreatePacket44100Hz(20)); |
130 ASSERT_EQ(30, GetNumQueuedSamples()); | 130 ASSERT_EQ(30, GetNumQueuedSamples()); |
131 ASSERT_EQ(2, GetNumQueuedPackets()); | 131 ASSERT_EQ(2, GetNumQueuedPackets()); |
132 } | 132 } |
133 | 133 |
134 TEST_F(AudioPlayerTest, ChangeSampleRate) { | 134 TEST_F(AudioPlayerTest, ChangeSampleRate) { |
135 audio_->ProcessAudioPacket(CreatePacket44100Hz(10)); | 135 audio_->AddAudioPacket(CreatePacket44100Hz(10)); |
136 ASSERT_EQ(10, GetNumQueuedSamples()); | 136 ASSERT_EQ(10, GetNumQueuedSamples()); |
137 ASSERT_EQ(1, GetNumQueuedPackets()); | 137 ASSERT_EQ(1, GetNumQueuedPackets()); |
138 | 138 |
139 // New packet with different sampling rate causes previous samples to | 139 // New packet with different sampling rate causes previous samples to |
140 // be removed. | 140 // be removed. |
141 audio_->ProcessAudioPacket(CreatePacket48000Hz(20)); | 141 audio_->AddAudioPacket(CreatePacket48000Hz(20)); |
142 ASSERT_EQ(20, GetNumQueuedSamples()); | 142 ASSERT_EQ(20, GetNumQueuedSamples()); |
143 ASSERT_EQ(1, GetNumQueuedPackets()); | 143 ASSERT_EQ(1, GetNumQueuedPackets()); |
144 } | 144 } |
145 | 145 |
146 TEST_F(AudioPlayerTest, ExceedLatency) { | 146 TEST_F(AudioPlayerTest, ExceedLatency) { |
147 // Push about 4 seconds worth of samples. | 147 // Push about 4 seconds worth of samples. |
148 for (int i = 0; i < 100; ++i) { | 148 for (int i = 0; i < 100; ++i) { |
149 audio_->ProcessAudioPacket(CreatePacket48000Hz(2000)); | 149 audio_->AddAudioPacket(CreatePacket48000Hz(2000)); |
150 } | 150 } |
151 | 151 |
152 // Verify that we don't have more than 0.5s. | 152 // Verify that we don't have more than 0.5s. |
153 EXPECT_LT(GetNumQueuedSamples(), 24000); | 153 EXPECT_LT(GetNumQueuedSamples(), 24000); |
154 } | 154 } |
155 | 155 |
156 // Incoming packets: 100 | 156 // Incoming packets: 100 |
157 // Consume: 25 (w/ 75 remaining, offset 25 into packet) | 157 // Consume: 25 (w/ 75 remaining, offset 25 into packet) |
158 TEST_F(AudioPlayerTest, ConsumePartialPacket) { | 158 TEST_F(AudioPlayerTest, ConsumePartialPacket) { |
159 int total_samples = 0; | 159 int total_samples = 0; |
160 int bytes_consumed = 0; | 160 int bytes_consumed = 0; |
161 | 161 |
162 // Process 100 samples. | 162 // Process 100 samples. |
163 int packet1_samples = 100; | 163 int packet1_samples = 100; |
164 total_samples += packet1_samples; | 164 total_samples += packet1_samples; |
165 audio_->ProcessAudioPacket(CreatePacket44100Hz(packet1_samples)); | 165 audio_->AddAudioPacket(CreatePacket44100Hz(packet1_samples)); |
166 ASSERT_EQ(total_samples, GetNumQueuedSamples()); | 166 ASSERT_EQ(total_samples, GetNumQueuedSamples()); |
167 ASSERT_EQ(1, GetNumQueuedPackets()); | 167 ASSERT_EQ(1, GetNumQueuedPackets()); |
168 ASSERT_EQ(bytes_consumed, GetBytesConsumed()); | 168 ASSERT_EQ(bytes_consumed, GetBytesConsumed()); |
169 | 169 |
170 // Consume one frame (=25) of samples. | 170 // Consume one frame (=25) of samples. |
171 ConsumeAudioFrame(); | 171 ConsumeAudioFrame(); |
172 total_samples -= kAudioSamplesPerFrame; | 172 total_samples -= kAudioSamplesPerFrame; |
173 bytes_consumed += kAudioFrameBytes; | 173 bytes_consumed += kAudioFrameBytes; |
174 ASSERT_EQ(total_samples, GetNumQueuedSamples()); | 174 ASSERT_EQ(total_samples, GetNumQueuedSamples()); |
175 ASSERT_EQ(1, GetNumQueuedPackets()); | 175 ASSERT_EQ(1, GetNumQueuedPackets()); |
176 ASSERT_EQ(bytes_consumed, GetBytesConsumed()); | 176 ASSERT_EQ(bytes_consumed, GetBytesConsumed()); |
177 CheckAudioFrameBytes(kAudioFrameBytes); | 177 CheckAudioFrameBytes(kAudioFrameBytes); |
178 | 178 |
179 // Remaining samples. | 179 // Remaining samples. |
180 ASSERT_EQ(75, total_samples); | 180 ASSERT_EQ(75, total_samples); |
181 ASSERT_EQ(25 * kAudioSampleBytes, bytes_consumed); | 181 ASSERT_EQ(25 * kAudioSampleBytes, bytes_consumed); |
182 } | 182 } |
183 | 183 |
184 // Incoming packets: 20, 70 | 184 // Incoming packets: 20, 70 |
185 // Consume: 25, 25 (w/ 40 remaining, offset 30 into packet) | 185 // Consume: 25, 25 (w/ 40 remaining, offset 30 into packet) |
186 TEST_F(AudioPlayerTest, ConsumeAcrossPackets) { | 186 TEST_F(AudioPlayerTest, ConsumeAcrossPackets) { |
187 int total_samples = 0; | 187 int total_samples = 0; |
188 int bytes_consumed = 0; | 188 int bytes_consumed = 0; |
189 | 189 |
190 // Packet 1. | 190 // Packet 1. |
191 int packet1_samples = 20; | 191 int packet1_samples = 20; |
192 total_samples += packet1_samples; | 192 total_samples += packet1_samples; |
193 audio_->ProcessAudioPacket(CreatePacket44100Hz(packet1_samples)); | 193 audio_->AddAudioPacket(CreatePacket44100Hz(packet1_samples)); |
194 ASSERT_EQ(total_samples, GetNumQueuedSamples()); | 194 ASSERT_EQ(total_samples, GetNumQueuedSamples()); |
195 | 195 |
196 // Packet 2. | 196 // Packet 2. |
197 int packet2_samples = 70; | 197 int packet2_samples = 70; |
198 total_samples += packet2_samples; | 198 total_samples += packet2_samples; |
199 audio_->ProcessAudioPacket(CreatePacket44100Hz(packet2_samples)); | 199 audio_->AddAudioPacket(CreatePacket44100Hz(packet2_samples)); |
200 ASSERT_EQ(total_samples, GetNumQueuedSamples()); | 200 ASSERT_EQ(total_samples, GetNumQueuedSamples()); |
201 ASSERT_EQ(bytes_consumed, GetBytesConsumed()); | 201 ASSERT_EQ(bytes_consumed, GetBytesConsumed()); |
202 | 202 |
203 // Consume 1st frame of 25 samples. | 203 // Consume 1st frame of 25 samples. |
204 // This will consume the entire 1st packet. | 204 // This will consume the entire 1st packet. |
205 ConsumeAudioFrame(); | 205 ConsumeAudioFrame(); |
206 total_samples -= kAudioSamplesPerFrame; | 206 total_samples -= kAudioSamplesPerFrame; |
207 bytes_consumed += kAudioFrameBytes - (packet1_samples * kAudioSampleBytes); | 207 bytes_consumed += kAudioFrameBytes - (packet1_samples * kAudioSampleBytes); |
208 ASSERT_EQ(total_samples, GetNumQueuedSamples()); | 208 ASSERT_EQ(total_samples, GetNumQueuedSamples()); |
209 ASSERT_EQ(1, GetNumQueuedPackets()); | 209 ASSERT_EQ(1, GetNumQueuedPackets()); |
(...skipping 16 matching lines...) Expand all Loading... |
226 | 226 |
227 // Incoming packets: 50, 30 | 227 // Incoming packets: 50, 30 |
228 // Consume: 25, 25, 25 (w/ 5 remaining, offset 25 into packet) | 228 // Consume: 25, 25, 25 (w/ 5 remaining, offset 25 into packet) |
229 TEST_F(AudioPlayerTest, ConsumeEntirePacket) { | 229 TEST_F(AudioPlayerTest, ConsumeEntirePacket) { |
230 int total_samples = 0; | 230 int total_samples = 0; |
231 int bytes_consumed = 0; | 231 int bytes_consumed = 0; |
232 | 232 |
233 // Packet 1. | 233 // Packet 1. |
234 int packet1_samples = 50; | 234 int packet1_samples = 50; |
235 total_samples += packet1_samples; | 235 total_samples += packet1_samples; |
236 audio_->ProcessAudioPacket(CreatePacket44100Hz(packet1_samples)); | 236 audio_->AddAudioPacket(CreatePacket44100Hz(packet1_samples)); |
237 ASSERT_EQ(total_samples, GetNumQueuedSamples()); | 237 ASSERT_EQ(total_samples, GetNumQueuedSamples()); |
238 ASSERT_EQ(bytes_consumed, GetBytesConsumed()); | 238 ASSERT_EQ(bytes_consumed, GetBytesConsumed()); |
239 | 239 |
240 // Packet 2. | 240 // Packet 2. |
241 int packet2_samples = 30; | 241 int packet2_samples = 30; |
242 total_samples += packet2_samples; | 242 total_samples += packet2_samples; |
243 audio_->ProcessAudioPacket(CreatePacket44100Hz(packet2_samples)); | 243 audio_->AddAudioPacket(CreatePacket44100Hz(packet2_samples)); |
244 ASSERT_EQ(total_samples, GetNumQueuedSamples()); | 244 ASSERT_EQ(total_samples, GetNumQueuedSamples()); |
245 ASSERT_EQ(bytes_consumed, GetBytesConsumed()); | 245 ASSERT_EQ(bytes_consumed, GetBytesConsumed()); |
246 | 246 |
247 // Consume 1st frame of 25 samples. | 247 // Consume 1st frame of 25 samples. |
248 ConsumeAudioFrame(); | 248 ConsumeAudioFrame(); |
249 total_samples -= kAudioSamplesPerFrame; | 249 total_samples -= kAudioSamplesPerFrame; |
250 bytes_consumed += kAudioFrameBytes; | 250 bytes_consumed += kAudioFrameBytes; |
251 ASSERT_EQ(total_samples, GetNumQueuedSamples()); | 251 ASSERT_EQ(total_samples, GetNumQueuedSamples()); |
252 ASSERT_EQ(2, GetNumQueuedPackets()); | 252 ASSERT_EQ(2, GetNumQueuedPackets()); |
253 ASSERT_EQ(bytes_consumed, GetBytesConsumed()); | 253 ASSERT_EQ(bytes_consumed, GetBytesConsumed()); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
292 | 292 |
293 // Incoming packets: 10 | 293 // Incoming packets: 10 |
294 // Consume: 25 | 294 // Consume: 25 |
295 TEST_F(AudioPlayerTest, NotEnoughDataToConsume) { | 295 TEST_F(AudioPlayerTest, NotEnoughDataToConsume) { |
296 int total_samples = 0; | 296 int total_samples = 0; |
297 int bytes_consumed = 0; | 297 int bytes_consumed = 0; |
298 | 298 |
299 // Packet 1. | 299 // Packet 1. |
300 int packet1_samples = 10; | 300 int packet1_samples = 10; |
301 total_samples += packet1_samples; | 301 total_samples += packet1_samples; |
302 audio_->ProcessAudioPacket(CreatePacket44100Hz(packet1_samples)); | 302 audio_->AddAudioPacket(CreatePacket44100Hz(packet1_samples)); |
303 ASSERT_EQ(total_samples, GetNumQueuedSamples()); | 303 ASSERT_EQ(total_samples, GetNumQueuedSamples()); |
304 ASSERT_EQ(bytes_consumed, GetBytesConsumed()); | 304 ASSERT_EQ(bytes_consumed, GetBytesConsumed()); |
305 | 305 |
306 // Attempt to consume a frame of 25 samples. | 306 // Attempt to consume a frame of 25 samples. |
307 ConsumeAudioFrame(); | 307 ConsumeAudioFrame(); |
308 ASSERT_EQ(0, GetNumQueuedSamples()); | 308 ASSERT_EQ(0, GetNumQueuedSamples()); |
309 ASSERT_EQ(0, GetNumQueuedPackets()); | 309 ASSERT_EQ(0, GetNumQueuedPackets()); |
310 ASSERT_EQ(0, GetBytesConsumed()); | 310 ASSERT_EQ(0, GetBytesConsumed()); |
311 CheckAudioFrameBytes(packet1_samples * kAudioSampleBytes); | 311 CheckAudioFrameBytes(packet1_samples * kAudioSampleBytes); |
312 } | 312 } |
313 | 313 |
314 } // namespace remoting | 314 } // namespace remoting |
OLD | NEW |