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

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

Issue 591603003: Introduce media::AudioClock::WallTimeForTimestamp(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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
« media/filters/audio_clock.cc ('K') | « media/filters/audio_clock.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 {
(...skipping 21 matching lines...) Expand all
32 32
33 int BackTimestampInMilliseconds() { 33 int BackTimestampInMilliseconds() {
34 return clock_.back_timestamp().InMilliseconds(); 34 return clock_.back_timestamp().InMilliseconds();
35 } 35 }
36 36
37 int TimestampSinceLastWritingInMilliseconds(int milliseconds) { 37 int TimestampSinceLastWritingInMilliseconds(int milliseconds) {
38 return clock_.TimestampSinceWriting(base::TimeDelta::FromMilliseconds( 38 return clock_.TimestampSinceWriting(base::TimeDelta::FromMilliseconds(
39 milliseconds)).InMilliseconds(); 39 milliseconds)).InMilliseconds();
40 } 40 }
41 41
42 int WallTimeForTimestampInMilliseconds(int timestamp_ms) {
43 return clock_.WallTimeForTimestamp(base::TimeDelta::FromMilliseconds(
44 timestamp_ms)).InMilliseconds();
45 }
46
42 int ContiguousAudioDataBufferedInDays() { 47 int ContiguousAudioDataBufferedInDays() {
43 return clock_.contiguous_audio_data_buffered().InDays(); 48 return clock_.contiguous_audio_data_buffered().InDays();
44 } 49 }
45 50
46 int ContiguousAudioDataBufferedInMilliseconds() { 51 int ContiguousAudioDataBufferedInMilliseconds() {
47 return clock_.contiguous_audio_data_buffered().InMilliseconds(); 52 return clock_.contiguous_audio_data_buffered().InMilliseconds();
48 } 53 }
49 54
50 int ContiguousAudioDataBufferedAtSameRateInMilliseconds() { 55 int ContiguousAudioDataBufferedAtSameRateInMilliseconds() {
51 return clock_.contiguous_audio_data_buffered_at_same_rate() 56 return clock_.contiguous_audio_data_buffered_at_same_rate()
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 // 285 //
281 // +-------------------+----------------+------------------+----------------+ 286 // +-------------------+----------------+------------------+----------------+
282 // | 10 frames silence | 10 frames @ 1x | 10 frames @ 0.5x | 10 frames @ 2x | 287 // | 10 frames silence | 10 frames @ 1x | 10 frames @ 0.5x | 10 frames @ 2x |
283 // +-------------------+----------------+------------------+----------------+ 288 // +-------------------+----------------+------------------+----------------+
284 // Media timestamp: 0 1000 1500 3500 289 // Media timestamp: 0 1000 1500 3500
285 // Wall clock time: 2000 3000 4000 5000 290 // Wall clock time: 2000 3000 4000 5000
286 WroteAudio(10, 10, 40, 1.0); 291 WroteAudio(10, 10, 40, 1.0);
287 WroteAudio(10, 10, 40, 0.5); 292 WroteAudio(10, 10, 40, 0.5);
288 WroteAudio(10, 10, 40, 2.0); 293 WroteAudio(10, 10, 40, 2.0);
289 EXPECT_EQ(0, FrontTimestampInMilliseconds()); 294 EXPECT_EQ(0, FrontTimestampInMilliseconds());
295 EXPECT_EQ(3500, BackTimestampInMilliseconds());
290 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds()); 296 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds());
291 297
292 // Simulate passing 2000ms of initial delay in the audio hardware. 298 // Simulate passing 2000ms of initial delay in the audio hardware.
293 EXPECT_EQ(0, TimestampSinceLastWritingInMilliseconds(0)); 299 EXPECT_EQ(0, TimestampSinceLastWritingInMilliseconds(0));
294 EXPECT_EQ(0, TimestampSinceLastWritingInMilliseconds(500)); 300 EXPECT_EQ(0, TimestampSinceLastWritingInMilliseconds(500));
295 EXPECT_EQ(0, TimestampSinceLastWritingInMilliseconds(1000)); 301 EXPECT_EQ(0, TimestampSinceLastWritingInMilliseconds(1000));
296 EXPECT_EQ(0, TimestampSinceLastWritingInMilliseconds(1500)); 302 EXPECT_EQ(0, TimestampSinceLastWritingInMilliseconds(1500));
297 EXPECT_EQ(0, TimestampSinceLastWritingInMilliseconds(2000)); 303 EXPECT_EQ(0, TimestampSinceLastWritingInMilliseconds(2000));
298 304
299 // Now we should see the 1.0x buffer. 305 // Now we should see the 1.0x buffer.
300 EXPECT_EQ(500, TimestampSinceLastWritingInMilliseconds(2500)); 306 EXPECT_EQ(500, TimestampSinceLastWritingInMilliseconds(2500));
301 EXPECT_EQ(1000, TimestampSinceLastWritingInMilliseconds(3000)); 307 EXPECT_EQ(1000, TimestampSinceLastWritingInMilliseconds(3000));
302 308
303 // Now we should see the 0.5x buffer. 309 // Now we should see the 0.5x buffer.
304 EXPECT_EQ(1250, TimestampSinceLastWritingInMilliseconds(3500)); 310 EXPECT_EQ(1250, TimestampSinceLastWritingInMilliseconds(3500));
305 EXPECT_EQ(1500, TimestampSinceLastWritingInMilliseconds(4000)); 311 EXPECT_EQ(1500, TimestampSinceLastWritingInMilliseconds(4000));
306 312
307 // Now we should see the 2.0x buffer. 313 // Now we should see the 2.0x buffer.
308 EXPECT_EQ(2500, TimestampSinceLastWritingInMilliseconds(4500)); 314 EXPECT_EQ(2500, TimestampSinceLastWritingInMilliseconds(4500));
309 EXPECT_EQ(3500, TimestampSinceLastWritingInMilliseconds(5000)); 315 EXPECT_EQ(3500, TimestampSinceLastWritingInMilliseconds(5000));
310 316
311 // Times beyond the known length of the audio clock should return the last 317 // Times beyond the known length of the audio clock should return the last
312 // media timestamp we know of. 318 // media timestamp we know of.
313 EXPECT_EQ(3500, TimestampSinceLastWritingInMilliseconds(5001)); 319 EXPECT_EQ(3500, TimestampSinceLastWritingInMilliseconds(5001));
314 EXPECT_EQ(3500, TimestampSinceLastWritingInMilliseconds(6000)); 320 EXPECT_EQ(3500, TimestampSinceLastWritingInMilliseconds(6000));
315 } 321 }
316 322
323 TEST_F(AudioClockTest, WallTimeForTimestamp) {
324 // Construct an audio clock with the following representation:
325 //
326 // +------------+---------+------------+-----------+------------+-----------+
DaleCurtis 2014/09/20 00:17:12 As discussed, this diagram is wrong, here's a fixe
scherkus (not reviewing) 2014/09/22 18:34:12 Done.
327 // | 10 silence | 10 @ 1x | 10 silence | 10 @ 0.5x | 10 silence | 10 @ 2.0x |
328 // +------------+---------+------------+-----------+------------+-----------+
329 // Media: 0 1000 1000 1500 1500 3500
330 // Wall: 2000 3000 4000 5000 6000 7000
331 WroteAudio(10, 10, 60, 1.0);
332 WroteAudio(0, 10, 60, 1.0);
333 WroteAudio(10, 10, 60, 0.5);
334 WroteAudio(0, 10, 60, 0.5);
335 WroteAudio(10, 10, 60, 2.0);
336 EXPECT_EQ(0, FrontTimestampInMilliseconds());
337 EXPECT_EQ(3500, BackTimestampInMilliseconds());
338 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds());
339
340 // Media timestamp zero has to wait for silence to pass.
341 EXPECT_EQ(2000, WallTimeForTimestampInMilliseconds(0));
342
343 // From then on out it's simply adding up the number of frames and taking
344 // silence into account.
345 EXPECT_EQ(2500, WallTimeForTimestampInMilliseconds(500));
346 EXPECT_EQ(3000, WallTimeForTimestampInMilliseconds(1000));
347 EXPECT_EQ(4500, WallTimeForTimestampInMilliseconds(1250));
348 EXPECT_EQ(5000, WallTimeForTimestampInMilliseconds(1500));
349 EXPECT_EQ(6500, WallTimeForTimestampInMilliseconds(2500));
350 EXPECT_EQ(7000, WallTimeForTimestampInMilliseconds(3500));
351 }
352
317 TEST_F(AudioClockTest, SupportsYearsWorthOfAudioData) { 353 TEST_F(AudioClockTest, SupportsYearsWorthOfAudioData) {
318 // Use number of frames that would be likely to overflow 32-bit integer math. 354 // Use number of frames that would be likely to overflow 32-bit integer math.
319 const int huge_amount_of_frames = std::numeric_limits<int>::max(); 355 const int huge_amount_of_frames = std::numeric_limits<int>::max();
320 const base::TimeDelta huge = 356 const base::TimeDelta huge =
321 base::TimeDelta::FromSeconds(huge_amount_of_frames / sample_rate_); 357 base::TimeDelta::FromSeconds(huge_amount_of_frames / sample_rate_);
322 EXPECT_EQ(2485, huge.InDays()); // Just to give some context on how big... 358 EXPECT_EQ(2485, huge.InDays()); // Just to give some context on how big...
323 359
324 // Use zero delay to test calculation of current timestamp. 360 // Use zero delay to test calculation of current timestamp.
325 WroteAudio(huge_amount_of_frames, huge_amount_of_frames, 0, 1.0); 361 WroteAudio(huge_amount_of_frames, huge_amount_of_frames, 0, 1.0);
326 EXPECT_EQ(0, FrontTimestampInDays()); 362 EXPECT_EQ(0, FrontTimestampInDays());
(...skipping 12 matching lines...) Expand all
339 EXPECT_EQ(huge.InDays(), ContiguousAudioDataBufferedInDays()); 375 EXPECT_EQ(huge.InDays(), ContiguousAudioDataBufferedInDays());
340 376
341 // Use huge delay to test calculation of buffered data. 377 // Use huge delay to test calculation of buffered data.
342 WroteAudio( 378 WroteAudio(
343 huge_amount_of_frames, huge_amount_of_frames, huge_amount_of_frames, 1.0); 379 huge_amount_of_frames, huge_amount_of_frames, huge_amount_of_frames, 1.0);
344 EXPECT_EQ((huge * 3).InDays(), FrontTimestampInDays()); 380 EXPECT_EQ((huge * 3).InDays(), FrontTimestampInDays());
345 EXPECT_EQ((huge * 2).InDays(), ContiguousAudioDataBufferedInDays()); 381 EXPECT_EQ((huge * 2).InDays(), ContiguousAudioDataBufferedInDays());
346 } 382 }
347 383
348 } // namespace media 384 } // namespace media
OLDNEW
« media/filters/audio_clock.cc ('K') | « media/filters/audio_clock.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698