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

Side by Side Diff: media/filters/audio_clock_unittest.cc

Issue 436053002: Make media::AudioClock track frames written to compute time. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix things up Created 6 years, 4 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "media/base/audio_timestamp_helper.h" 5 #include "media/base/audio_timestamp_helper.h"
6 #include "media/base/buffers.h" 6 #include "media/base/buffers.h"
7 #include "media/filters/audio_clock.h" 7 #include "media/filters/audio_clock.h"
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 9
10 namespace media { 10 namespace media {
11 11
12 class AudioClockTest : public testing::Test { 12 class AudioClockTest : public testing::Test {
13 public: 13 public:
14 AudioClockTest() 14 AudioClockTest()
15 : sample_rate_(10), 15 : sample_rate_(10), clock_(base::TimeDelta(), sample_rate_) {}
16 timestamp_helper_(sample_rate_),
17 clock_(sample_rate_) {
18 timestamp_helper_.SetBaseTimestamp(base::TimeDelta());
19 }
20 16
21 virtual ~AudioClockTest() {} 17 virtual ~AudioClockTest() {}
22 18
23 void WroteAudio(int frames, int delay_frames, float playback_rate) { 19 void WroteAudio(int frames_written,
24 timestamp_helper_.AddFrames(static_cast<int>(frames * playback_rate)); 20 int frames_requested,
21 int delay_frames,
22 float playback_rate) {
25 clock_.WroteAudio( 23 clock_.WroteAudio(
26 frames, delay_frames, playback_rate, timestamp_helper_.GetTimestamp()); 24 frames_written, frames_requested, delay_frames, playback_rate);
27 } 25 }
28 26
29 void WroteSilence(int frames, int delay_frames) { 27 int CurrentMediaTimestampInDays() {
30 clock_.WroteSilence(frames, delay_frames); 28 return clock_.current_media_timestamp().InDays();
31 } 29 }
32 30
33 int CurrentMediaTimestampInMilliseconds() { 31 int CurrentMediaTimestampInMilliseconds() {
34 return CurrentMediaTimestampSinceLastWritingInMilliseconds(0); 32 return clock_.current_media_timestamp().InMilliseconds();
35 } 33 }
36 34
37 int CurrentMediaTimestampSinceLastWritingInMilliseconds(int milliseconds) { 35 int CurrentMediaTimestampSinceLastWritingInMilliseconds(int milliseconds) {
38 return clock_.CurrentMediaTimestamp(base::TimeDelta::FromMilliseconds( 36 return clock_.CurrentMediaTimestampSinceWriting(
39 milliseconds)).InMilliseconds(); 37 base::TimeDelta::FromMilliseconds(milliseconds))
40 } 38 .InMilliseconds();
41 39 }
42 int LastEndpointTimestampInMilliseconds() { 40
43 return clock_.last_endpoint_timestamp().InMilliseconds(); 41 int ContiguousAudioDataBufferedInDays() {
42 return clock_.contiguous_audio_data_buffered().InDays();
43 }
44
45 int ContiguousAudioDataBufferedInMilliseconds() {
46 return clock_.contiguous_audio_data_buffered().InMilliseconds();
47 }
48
49 int ContiguousAudioDataBufferedAtSameRateInMilliseconds() {
50 return clock_.contiguous_audio_data_buffered_at_same_rate()
51 .InMilliseconds();
44 } 52 }
45 53
46 const int sample_rate_; 54 const int sample_rate_;
47 AudioTimestampHelper timestamp_helper_;
48 AudioClock clock_; 55 AudioClock clock_;
49 56
50 private: 57 private:
51 DISALLOW_COPY_AND_ASSIGN(AudioClockTest); 58 DISALLOW_COPY_AND_ASSIGN(AudioClockTest);
52 }; 59 };
53 60
54 TEST_F(AudioClockTest, TimestampsStartAtNoTimestamp) { 61 TEST_F(AudioClockTest, CurrentMediaTimestampStartsAtStartTimestamp) {
55 EXPECT_EQ(kNoTimestamp(), clock_.CurrentMediaTimestamp(base::TimeDelta())); 62 base::TimeDelta expected = base::TimeDelta::FromSeconds(123);
56 EXPECT_EQ(kNoTimestamp(), clock_.last_endpoint_timestamp()); 63 AudioClock clock(expected, sample_rate_);
64
65 EXPECT_EQ(expected, clock.current_media_timestamp());
66 }
67
68 TEST_F(AudioClockTest,
69 CurrentMediaTimestampSinceWritingStartsAtStartTimestamp) {
70 base::TimeDelta expected = base::TimeDelta::FromSeconds(123);
71 AudioClock clock(expected, sample_rate_);
72
73 base::TimeDelta time_since_writing = base::TimeDelta::FromSeconds(456);
74 EXPECT_EQ(expected,
75 clock.CurrentMediaTimestampSinceWriting(time_since_writing));
76 }
77
78 TEST_F(AudioClockTest, ContiguousAudioDataBufferedStartsAtZero) {
79 EXPECT_EQ(base::TimeDelta(), clock_.contiguous_audio_data_buffered());
80 }
81
82 TEST_F(AudioClockTest, ContiguousAudioDataBufferedAtSameRateStartsAtZero) {
83 EXPECT_EQ(base::TimeDelta(),
84 clock_.contiguous_audio_data_buffered_at_same_rate());
85 }
86
87 TEST_F(AudioClockTest, AudioDataBufferedStartsAtFalse) {
88 EXPECT_FALSE(clock_.audio_data_buffered());
57 } 89 }
58 90
59 TEST_F(AudioClockTest, Playback) { 91 TEST_F(AudioClockTest, Playback) {
60 // The first time we write data we should expect a negative time matching the 92 // The first time we write data we should still expect our start timestamp
61 // current delay. 93 // due to delay.
62 WroteAudio(10, 20, 1.0); 94 WroteAudio(10, 10, 20, 1.0);
63 EXPECT_EQ(-2000, CurrentMediaTimestampInMilliseconds()); 95 EXPECT_EQ(0, CurrentMediaTimestampInMilliseconds());
64 EXPECT_EQ(1000, LastEndpointTimestampInMilliseconds()); 96 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds());
65 97 EXPECT_EQ(0, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
66 // The media time should keep advancing as we write data. 98 EXPECT_TRUE(clock_.audio_data_buffered());
67 WroteAudio(10, 20, 1.0); 99
68 EXPECT_EQ(-1000, CurrentMediaTimestampInMilliseconds()); 100 // The media time should remain at start timestamp as we write data.
69 EXPECT_EQ(2000, LastEndpointTimestampInMilliseconds()); 101 WroteAudio(10, 10, 20, 1.0);
70 102 EXPECT_EQ(0, CurrentMediaTimestampInMilliseconds());
71 WroteAudio(10, 20, 1.0); 103 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds());
72 EXPECT_EQ(0, CurrentMediaTimestampInMilliseconds()); 104 EXPECT_EQ(0, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
73 EXPECT_EQ(3000, LastEndpointTimestampInMilliseconds()); 105
74 106 WroteAudio(10, 10, 20, 1.0);
75 WroteAudio(10, 20, 1.0); 107 EXPECT_EQ(0, CurrentMediaTimestampInMilliseconds());
76 EXPECT_EQ(1000, CurrentMediaTimestampInMilliseconds()); 108 EXPECT_EQ(3000, ContiguousAudioDataBufferedInMilliseconds());
77 EXPECT_EQ(4000, LastEndpointTimestampInMilliseconds()); 109 EXPECT_EQ(3000, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
78 110
79 // Introduce a rate change to slow down time. Current time will keep advancing 111 // The media time should now start advanced now that delay has been covered.
80 // by one second until it hits the slowed down audio. 112 WroteAudio(10, 10, 20, 1.0);
81 WroteAudio(10, 20, 0.5); 113 EXPECT_EQ(1000, CurrentMediaTimestampInMilliseconds());
114 EXPECT_EQ(3000, ContiguousAudioDataBufferedInMilliseconds());
115 EXPECT_EQ(3000, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
116
117 WroteAudio(10, 10, 20, 1.0);
82 EXPECT_EQ(2000, CurrentMediaTimestampInMilliseconds()); 118 EXPECT_EQ(2000, CurrentMediaTimestampInMilliseconds());
83 EXPECT_EQ(4500, LastEndpointTimestampInMilliseconds()); 119 EXPECT_EQ(3000, ContiguousAudioDataBufferedInMilliseconds());
84 120 EXPECT_EQ(3000, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
85 WroteAudio(10, 20, 0.5); 121
122 // Introduce a rate change to slow down time:
123 // - Current time will advance by one second until it hits rate change
124 // - Contiguous audio data will start shrinking immediately
125 WroteAudio(10, 10, 20, 0.5);
86 EXPECT_EQ(3000, CurrentMediaTimestampInMilliseconds()); 126 EXPECT_EQ(3000, CurrentMediaTimestampInMilliseconds());
87 EXPECT_EQ(5000, LastEndpointTimestampInMilliseconds()); 127 EXPECT_EQ(2500, ContiguousAudioDataBufferedInMilliseconds());
88 128 EXPECT_EQ(2000, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
89 WroteAudio(10, 20, 0.5); 129
130 WroteAudio(10, 10, 20, 0.5);
90 EXPECT_EQ(4000, CurrentMediaTimestampInMilliseconds()); 131 EXPECT_EQ(4000, CurrentMediaTimestampInMilliseconds());
91 EXPECT_EQ(5500, LastEndpointTimestampInMilliseconds()); 132 EXPECT_EQ(2000, ContiguousAudioDataBufferedInMilliseconds());
92 133 EXPECT_EQ(1000, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
93 WroteAudio(10, 20, 0.5); 134
94 EXPECT_EQ(4500, CurrentMediaTimestampInMilliseconds()); 135 WroteAudio(10, 10, 20, 0.5);
95 EXPECT_EQ(6000, LastEndpointTimestampInMilliseconds());
96
97 // Introduce a rate change to speed up time. Current time will keep advancing
98 // by half a second until it hits the the sped up audio.
99 WroteAudio(10, 20, 2);
100 EXPECT_EQ(5000, CurrentMediaTimestampInMilliseconds()); 136 EXPECT_EQ(5000, CurrentMediaTimestampInMilliseconds());
101 EXPECT_EQ(8000, LastEndpointTimestampInMilliseconds()); 137 EXPECT_EQ(1500, ContiguousAudioDataBufferedInMilliseconds());
102 138 EXPECT_EQ(1500, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
103 WroteAudio(10, 20, 2); 139
140 WroteAudio(10, 10, 20, 0.5);
104 EXPECT_EQ(5500, CurrentMediaTimestampInMilliseconds()); 141 EXPECT_EQ(5500, CurrentMediaTimestampInMilliseconds());
105 EXPECT_EQ(10000, LastEndpointTimestampInMilliseconds()); 142 EXPECT_EQ(1500, ContiguousAudioDataBufferedInMilliseconds());
106 143 EXPECT_EQ(1500, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
107 WroteAudio(10, 20, 2); 144
145 // Introduce a rate change to speed up time:
146 // - Current time will advance by half a second until it hits rate change
147 // - Contiguous audio data will start growing immediately
148 WroteAudio(10, 10, 20, 2);
108 EXPECT_EQ(6000, CurrentMediaTimestampInMilliseconds()); 149 EXPECT_EQ(6000, CurrentMediaTimestampInMilliseconds());
109 EXPECT_EQ(12000, LastEndpointTimestampInMilliseconds()); 150 EXPECT_EQ(3000, ContiguousAudioDataBufferedInMilliseconds());
110 151 EXPECT_EQ(1000, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
111 WroteAudio(10, 20, 2); 152
112 EXPECT_EQ(8000, CurrentMediaTimestampInMilliseconds()); 153 WroteAudio(10, 10, 20, 2);
113 EXPECT_EQ(14000, LastEndpointTimestampInMilliseconds()); 154 EXPECT_EQ(6500, CurrentMediaTimestampInMilliseconds());
114 155 EXPECT_EQ(4500, ContiguousAudioDataBufferedInMilliseconds());
115 // Write silence to simulate reaching end of stream. 156 EXPECT_EQ(500, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
116 WroteSilence(10, 20); 157
117 EXPECT_EQ(10000, CurrentMediaTimestampInMilliseconds()); 158 WroteAudio(10, 10, 20, 2);
118 EXPECT_EQ(14000, LastEndpointTimestampInMilliseconds()); 159 EXPECT_EQ(7000, CurrentMediaTimestampInMilliseconds());
119 160 EXPECT_EQ(6000, ContiguousAudioDataBufferedInMilliseconds());
120 WroteSilence(10, 20); 161 EXPECT_EQ(6000, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
121 EXPECT_EQ(12000, CurrentMediaTimestampInMilliseconds()); 162
122 EXPECT_EQ(14000, LastEndpointTimestampInMilliseconds()); 163 WroteAudio(10, 10, 20, 2);
123 164 EXPECT_EQ(9000, CurrentMediaTimestampInMilliseconds());
124 WroteSilence(10, 20); 165 EXPECT_EQ(6000, ContiguousAudioDataBufferedInMilliseconds());
125 EXPECT_EQ(14000, CurrentMediaTimestampInMilliseconds()); 166 EXPECT_EQ(6000, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
126 EXPECT_EQ(14000, LastEndpointTimestampInMilliseconds()); 167
168 // Write silence to simulate reaching end of stream:
169 // - Current time will advance by half a second until it hits silence
170 // - Contiguous audio data will start shrinking towards zero
171 WroteAudio(0, 10, 20, 2);
172 EXPECT_EQ(11000, CurrentMediaTimestampInMilliseconds());
173 EXPECT_EQ(4000, ContiguousAudioDataBufferedInMilliseconds());
174 EXPECT_EQ(4000, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
175
176 WroteAudio(0, 10, 20, 2);
177 EXPECT_EQ(13000, CurrentMediaTimestampInMilliseconds());
178 EXPECT_EQ(2000, ContiguousAudioDataBufferedInMilliseconds());
179 EXPECT_EQ(2000, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
180 EXPECT_TRUE(clock_.audio_data_buffered()); // Still audio data buffered.
181
182 WroteAudio(0, 10, 20, 2);
183 EXPECT_EQ(15000, CurrentMediaTimestampInMilliseconds());
184 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds());
185 EXPECT_EQ(0, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
186 EXPECT_FALSE(clock_.audio_data_buffered()); // No more audio data buffered.
127 187
128 // At this point media time should stop increasing. 188 // At this point media time should stop increasing.
129 WroteSilence(10, 20); 189 WroteAudio(0, 10, 20, 2);
130 EXPECT_EQ(14000, CurrentMediaTimestampInMilliseconds()); 190 EXPECT_EQ(15000, CurrentMediaTimestampInMilliseconds());
131 EXPECT_EQ(14000, LastEndpointTimestampInMilliseconds()); 191 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds());
192 EXPECT_EQ(0, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
193 EXPECT_FALSE(clock_.audio_data_buffered());
132 } 194 }
133 195
134 TEST_F(AudioClockTest, AlternatingAudioAndSilence) { 196 TEST_F(AudioClockTest, AlternatingAudioAndSilence) {
135 // Buffer #1: [0, 1000) 197 // Buffer #1: [0, 1000)
136 WroteAudio(10, 20, 1.0); 198 WroteAudio(10, 10, 20, 1.0);
137 EXPECT_EQ(-2000, CurrentMediaTimestampInMilliseconds()); 199 EXPECT_EQ(0, CurrentMediaTimestampInMilliseconds());
200 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds());
138 201
139 // Buffer #2: 1000ms of silence 202 // Buffer #2: 1000ms of silence
140 WroteSilence(10, 20); 203 WroteAudio(0, 10, 20, 1.0);
141 EXPECT_EQ(-1000, CurrentMediaTimestampInMilliseconds()); 204 EXPECT_EQ(0, CurrentMediaTimestampInMilliseconds());
142 205 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds());
143 // Buffer #3: [1000, 2000), buffer #1 is at front 206
144 WroteAudio(10, 20, 1.0); 207 // Buffer #3: [1000, 2000):
145 EXPECT_EQ(0, CurrentMediaTimestampInMilliseconds()); 208 // - Buffer #1 is at front with 1000ms of contiguous audio data
146 209 WroteAudio(10, 10, 20, 1.0);
147 // Buffer #4: 1000ms of silence, time shouldn't advance 210 EXPECT_EQ(0, CurrentMediaTimestampInMilliseconds());
148 WroteSilence(10, 20); 211 EXPECT_EQ(1000, ContiguousAudioDataBufferedInMilliseconds());
149 EXPECT_EQ(0, CurrentMediaTimestampInMilliseconds()); 212
150 213 // Buffer #4: 1000ms of silence
151 // Buffer #5: [2000, 3000), buffer #3 is at front 214 // - Buffer #1 has been played out
152 WroteAudio(10, 20, 1.0); 215 // - Buffer #2 of silence leaves us with 0ms of contiguous audio data
153 EXPECT_EQ(1000, CurrentMediaTimestampInMilliseconds()); 216 WroteAudio(0, 10, 20, 1.0);
217 EXPECT_EQ(1000, CurrentMediaTimestampInMilliseconds());
218 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds());
219
220 // Buffer #5: [2000, 3000):
221 // - Buffer #3 is at front with 1000ms of contiguous audio data
222 WroteAudio(10, 10, 20, 1.0);
223 EXPECT_EQ(1000, CurrentMediaTimestampInMilliseconds());
224 EXPECT_EQ(1000, ContiguousAudioDataBufferedInMilliseconds());
154 } 225 }
155 226
156 TEST_F(AudioClockTest, ZeroDelay) { 227 TEST_F(AudioClockTest, ZeroDelay) {
157 // The first time we write data we should expect the first timestamp 228 // The first time we write data we should expect the first timestamp
158 // immediately. 229 // immediately.
159 WroteAudio(10, 0, 1.0); 230 WroteAudio(10, 10, 0, 1.0);
160 EXPECT_EQ(0, CurrentMediaTimestampInMilliseconds()); 231 EXPECT_EQ(0, CurrentMediaTimestampInMilliseconds());
161 EXPECT_EQ(1000, LastEndpointTimestampInMilliseconds()); 232 EXPECT_EQ(1000, ContiguousAudioDataBufferedInMilliseconds());
162 233
163 // Ditto for all subsequent buffers. 234 // Ditto for all subsequent buffers.
164 WroteAudio(10, 0, 1.0); 235 WroteAudio(10, 10, 0, 1.0);
165 EXPECT_EQ(1000, CurrentMediaTimestampInMilliseconds()); 236 EXPECT_EQ(1000, CurrentMediaTimestampInMilliseconds());
166 EXPECT_EQ(2000, LastEndpointTimestampInMilliseconds()); 237 EXPECT_EQ(1000, ContiguousAudioDataBufferedInMilliseconds());
167 238
168 WroteAudio(10, 0, 1.0); 239 WroteAudio(10, 10, 0, 1.0);
169 EXPECT_EQ(2000, CurrentMediaTimestampInMilliseconds()); 240 EXPECT_EQ(2000, CurrentMediaTimestampInMilliseconds());
170 EXPECT_EQ(3000, LastEndpointTimestampInMilliseconds()); 241 EXPECT_EQ(1000, ContiguousAudioDataBufferedInMilliseconds());
171 242
172 // Ditto for silence. 243 // Ditto for silence.
173 WroteSilence(10, 0); 244 WroteAudio(0, 10, 0, 1.0);
174 EXPECT_EQ(3000, CurrentMediaTimestampInMilliseconds()); 245 EXPECT_EQ(3000, CurrentMediaTimestampInMilliseconds());
175 EXPECT_EQ(3000, LastEndpointTimestampInMilliseconds()); 246 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds());
176 247
177 WroteSilence(10, 0); 248 WroteAudio(0, 10, 0, 1.0);
178 EXPECT_EQ(3000, CurrentMediaTimestampInMilliseconds()); 249 EXPECT_EQ(3000, CurrentMediaTimestampInMilliseconds());
179 EXPECT_EQ(3000, LastEndpointTimestampInMilliseconds()); 250 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds());
180 } 251 }
181 252
182 TEST_F(AudioClockTest, CurrentMediaTimestampSinceLastWriting) { 253 TEST_F(AudioClockTest, CurrentMediaTimestampSinceLastWriting) {
183 // Construct an audio clock with the following representation: 254 // Construct an audio clock with the following representation:
184 // 255 //
185 // +-------------------+----------------+------------------+----------------+ 256 // +-------------------+----------------+------------------+----------------+
186 // | 10 frames silence | 10 frames @ 1x | 10 frames @ 0.5x | 10 frames @ 2x | 257 // | 10 frames silence | 10 frames @ 1x | 10 frames @ 0.5x | 10 frames @ 2x |
187 // +-------------------+----------------+------------------+----------------+ 258 // +-------------------+----------------+------------------+----------------+
188 // Media timestamp: 0 1000 1500 3500 259 // Media timestamp: 0 1000 1500 3500
189 // Wall clock time: 2000 3000 4000 5000 260 // Wall clock time: 2000 3000 4000 5000
190 WroteAudio(10, 40, 1.0); 261 WroteAudio(10, 10, 40, 1.0);
191 WroteAudio(10, 40, 0.5); 262 WroteAudio(10, 10, 40, 0.5);
192 WroteAudio(10, 40, 2.0); 263 WroteAudio(10, 10, 40, 2.0);
193 EXPECT_EQ(-2000, CurrentMediaTimestampInMilliseconds()); 264 EXPECT_EQ(0, CurrentMediaTimestampInMilliseconds());
194 EXPECT_EQ(3500, LastEndpointTimestampInMilliseconds()); 265 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds());
195 266
196 // Simulate passing 2000ms of initial delay in the audio hardware. 267 // Simulate passing 2000ms of initial delay in the audio hardware.
197 EXPECT_EQ(-2000, CurrentMediaTimestampSinceLastWritingInMilliseconds(0)); 268 EXPECT_EQ(0, CurrentMediaTimestampSinceLastWritingInMilliseconds(0));
198 EXPECT_EQ(-1500, CurrentMediaTimestampSinceLastWritingInMilliseconds(500)); 269 EXPECT_EQ(0, CurrentMediaTimestampSinceLastWritingInMilliseconds(500));
199 EXPECT_EQ(-1000, CurrentMediaTimestampSinceLastWritingInMilliseconds(1000)); 270 EXPECT_EQ(0, CurrentMediaTimestampSinceLastWritingInMilliseconds(1000));
200 EXPECT_EQ(-500, CurrentMediaTimestampSinceLastWritingInMilliseconds(1500)); 271 EXPECT_EQ(0, CurrentMediaTimestampSinceLastWritingInMilliseconds(1500));
201 EXPECT_EQ(0, CurrentMediaTimestampSinceLastWritingInMilliseconds(2000)); 272 EXPECT_EQ(0, CurrentMediaTimestampSinceLastWritingInMilliseconds(2000));
202 273
203 // New we should see the 1.0x buffer. 274 // Now we should see the 1.0x buffer.
204 EXPECT_EQ(500, CurrentMediaTimestampSinceLastWritingInMilliseconds(2500)); 275 EXPECT_EQ(500, CurrentMediaTimestampSinceLastWritingInMilliseconds(2500));
205 EXPECT_EQ(1000, CurrentMediaTimestampSinceLastWritingInMilliseconds(3000)); 276 EXPECT_EQ(1000, CurrentMediaTimestampSinceLastWritingInMilliseconds(3000));
206 277
207 // Now we should see the 0.5x buffer. 278 // Now we should see the 0.5x buffer.
208 EXPECT_EQ(1250, CurrentMediaTimestampSinceLastWritingInMilliseconds(3500)); 279 EXPECT_EQ(1250, CurrentMediaTimestampSinceLastWritingInMilliseconds(3500));
209 EXPECT_EQ(1500, CurrentMediaTimestampSinceLastWritingInMilliseconds(4000)); 280 EXPECT_EQ(1500, CurrentMediaTimestampSinceLastWritingInMilliseconds(4000));
210 281
211 // Now we should see the 2.0x buffer. 282 // Now we should see the 2.0x buffer.
212 EXPECT_EQ(2500, CurrentMediaTimestampSinceLastWritingInMilliseconds(4500)); 283 EXPECT_EQ(2500, CurrentMediaTimestampSinceLastWritingInMilliseconds(4500));
213 EXPECT_EQ(3500, CurrentMediaTimestampSinceLastWritingInMilliseconds(5000)); 284 EXPECT_EQ(3500, CurrentMediaTimestampSinceLastWritingInMilliseconds(5000));
214 285
215 // Times beyond the known length of the audio clock should return the last 286 // Times beyond the known length of the audio clock should return the last
216 // value we know of. 287 // media timestamp we know of.
217 EXPECT_EQ(LastEndpointTimestampInMilliseconds(), 288 EXPECT_EQ(3500, CurrentMediaTimestampSinceLastWritingInMilliseconds(5001));
218 CurrentMediaTimestampSinceLastWritingInMilliseconds(5001)); 289 EXPECT_EQ(3500, CurrentMediaTimestampSinceLastWritingInMilliseconds(6000));
219 EXPECT_EQ(LastEndpointTimestampInMilliseconds(), 290 }
220 CurrentMediaTimestampSinceLastWritingInMilliseconds(6000)); 291
292 TEST_F(AudioClockTest, SupportsYearsWorthOfAudioData) {
293 // Use number of frames that would be likely to overflow 32-bit integer math.
294 const int huge_amount_of_frames = std::numeric_limits<int>::max();
295 const base::TimeDelta huge =
296 base::TimeDelta::FromSeconds(huge_amount_of_frames / sample_rate_);
297 EXPECT_EQ(2485, huge.InDays()); // Just to give some context on how big...
298
299 // Use zero delay to test calculation of current timestamp.
300 WroteAudio(huge_amount_of_frames, huge_amount_of_frames, 0, 1.0);
301 EXPECT_EQ(0, CurrentMediaTimestampInDays());
302 EXPECT_EQ(2485, ContiguousAudioDataBufferedInDays());
303
304 WroteAudio(huge_amount_of_frames, huge_amount_of_frames, 0, 1.0);
305 EXPECT_EQ(huge.InDays(), CurrentMediaTimestampInDays());
306 EXPECT_EQ(huge.InDays(), ContiguousAudioDataBufferedInDays());
307
308 WroteAudio(huge_amount_of_frames, huge_amount_of_frames, 0, 1.0);
309 EXPECT_EQ((huge * 2).InDays(), CurrentMediaTimestampInDays());
310 EXPECT_EQ(huge.InDays(), ContiguousAudioDataBufferedInDays());
311
312 WroteAudio(huge_amount_of_frames, huge_amount_of_frames, 0, 1.0);
313 EXPECT_EQ((huge * 3).InDays(), CurrentMediaTimestampInDays());
314 EXPECT_EQ(huge.InDays(), ContiguousAudioDataBufferedInDays());
315
316 // Use huge delay to test calculation of buffered data.
317 WroteAudio(
318 huge_amount_of_frames, huge_amount_of_frames, huge_amount_of_frames, 1.0);
319 EXPECT_EQ((huge * 3).InDays(), CurrentMediaTimestampInDays());
320 EXPECT_EQ((huge * 2).InDays(), ContiguousAudioDataBufferedInDays());
221 } 321 }
222 322
223 } // namespace media 323 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698