| 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 |