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 "base/compiler_specific.h" | 7 #include "base/compiler_specific.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 | 10 |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
66 int i = 0; | 66 int i = 0; |
67 for (; i < num_bytes; i++) { | 67 for (; i < num_bytes; i++) { |
68 ASSERT_EQ(kDummyAudioData, *(buffer + i)); | 68 ASSERT_EQ(kDummyAudioData, *(buffer + i)); |
69 } | 69 } |
70 // Rest of audio frame must be filled with '0's. | 70 // Rest of audio frame must be filled with '0's. |
71 for (; i < kAudioFrameBytes; i++) { | 71 for (; i < kAudioFrameBytes; i++) { |
72 ASSERT_EQ(0, *(buffer + i)); | 72 ASSERT_EQ(0, *(buffer + i)); |
73 } | 73 } |
74 } | 74 } |
75 | 75 |
76 void SetQueuedSamples(int num_samples) { | |
77 audio_->queued_samples_ = num_samples; | |
78 } | |
79 | |
80 int GetNumQueuedSamples() { | 76 int GetNumQueuedSamples() { |
81 return audio_->queued_samples_; | 77 return audio_->queued_bytes_ / kAudioSampleBytes; |
82 } | 78 } |
83 | 79 |
84 int GetNumQueuedPackets() { | 80 int GetNumQueuedPackets() { |
85 return static_cast<int>(audio_->queued_packets_.size()); | 81 return static_cast<int>(audio_->queued_packets_.size()); |
86 } | 82 } |
87 | 83 |
88 int GetBytesConsumed() { | 84 int GetBytesConsumed() { |
89 return static_cast<int>(audio_->bytes_consumed_); | 85 return static_cast<int>(audio_->bytes_consumed_); |
90 } | 86 } |
91 | 87 |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 | 143 |
148 // New packet with different sampling rate causes previous samples to | 144 // New packet with different sampling rate causes previous samples to |
149 // be removed. | 145 // be removed. |
150 scoped_ptr<AudioPacket> packet2(CreatePacket48000Hz(20)); | 146 scoped_ptr<AudioPacket> packet2(CreatePacket48000Hz(20)); |
151 audio_->ProcessAudioPacket(packet2.Pass()); | 147 audio_->ProcessAudioPacket(packet2.Pass()); |
152 ASSERT_EQ(20, GetNumQueuedSamples()); | 148 ASSERT_EQ(20, GetNumQueuedSamples()); |
153 ASSERT_EQ(1, GetNumQueuedPackets()); | 149 ASSERT_EQ(1, GetNumQueuedPackets()); |
154 } | 150 } |
155 | 151 |
156 TEST_F(AudioPlayerTest, ExceedLatency) { | 152 TEST_F(AudioPlayerTest, ExceedLatency) { |
157 scoped_ptr<AudioPacket> packet1(CreatePacket44100Hz(10)); | 153 // Push about 4 seconds worth of samples. |
158 audio_->ProcessAudioPacket(packet1.Pass()); | 154 for (int i = 0; i < 100; ++i) { |
159 ASSERT_EQ(10, GetNumQueuedSamples()); | 155 scoped_ptr<AudioPacket> packet1(CreatePacket48000Hz(2000)); |
160 ASSERT_EQ(1, GetNumQueuedPackets()); | 156 audio_->ProcessAudioPacket(packet1.Pass()); |
| 157 } |
161 | 158 |
162 // Fake lots of queued samples. | 159 // Verify that we don't have more than 0.5s. |
163 SetQueuedSamples(20000); | 160 EXPECT_LT(GetNumQueuedSamples(), 24000); |
164 | |
165 // Previous sample should have been deleted because of latency (too many | |
166 // unprocessed samples). | |
167 scoped_ptr<AudioPacket> packet2(CreatePacket44100Hz(20)); | |
168 audio_->ProcessAudioPacket(packet2.Pass()); | |
169 ASSERT_EQ(20, GetNumQueuedSamples()); | |
170 ASSERT_EQ(1, GetNumQueuedPackets()); | |
171 } | 161 } |
172 | 162 |
173 // Incoming packets: 100 | 163 // Incoming packets: 100 |
174 // Consume: 25 (w/ 75 remaining, offset 25 into packet) | 164 // Consume: 25 (w/ 75 remaining, offset 25 into packet) |
175 TEST_F(AudioPlayerTest, ConsumePartialPacket) { | 165 TEST_F(AudioPlayerTest, ConsumePartialPacket) { |
176 int total_samples = 0; | 166 int total_samples = 0; |
177 int bytes_consumed = 0; | 167 int bytes_consumed = 0; |
178 | 168 |
179 // Process 100 samples. | 169 // Process 100 samples. |
180 int packet1_samples = 100; | 170 int packet1_samples = 100; |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
328 | 318 |
329 // Attempt to consume a frame of 25 samples. | 319 // Attempt to consume a frame of 25 samples. |
330 ConsumeAudioFrame(); | 320 ConsumeAudioFrame(); |
331 ASSERT_EQ(0, GetNumQueuedSamples()); | 321 ASSERT_EQ(0, GetNumQueuedSamples()); |
332 ASSERT_EQ(0, GetNumQueuedPackets()); | 322 ASSERT_EQ(0, GetNumQueuedPackets()); |
333 ASSERT_EQ(0, GetBytesConsumed()); | 323 ASSERT_EQ(0, GetBytesConsumed()); |
334 CheckAudioFrameBytes(packet1_samples * kAudioSampleBytes); | 324 CheckAudioFrameBytes(packet1_samples * kAudioSampleBytes); |
335 } | 325 } |
336 | 326 |
337 } // namespace remoting | 327 } // namespace remoting |
OLD | NEW |