OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "base/basictypes.h" | 5 #include "base/basictypes.h" |
6 #include "base/logging.h" | 6 #include "base/logging.h" |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "base/time/time.h" | 8 #include "base/time/time.h" |
9 #include "media/base/audio_buffer.h" | 9 #include "media/base/audio_buffer.h" |
10 #include "media/base/audio_buffer_queue.h" | 10 #include "media/base/audio_buffer_queue.h" |
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
337 bus1->Zero(); | 337 bus1->Zero(); |
338 EXPECT_EQ(5, buffer.PeekFrames(5, 10, 0, bus1.get())); | 338 EXPECT_EQ(5, buffer.PeekFrames(5, 10, 0, bus1.get())); |
339 VerifyBus(bus1.get(), 0, 5, bus1->frames(), 40, 1); | 339 VerifyBus(bus1.get(), 0, 5, bus1->frames(), 40, 1); |
340 | 340 |
341 // Peek to the end of the buffer. | 341 // Peek to the end of the buffer. |
342 EXPECT_EQ(30, buffer.frames()); | 342 EXPECT_EQ(30, buffer.frames()); |
343 EXPECT_EQ(30, buffer.PeekFrames(60, 0, 0, bus1.get())); | 343 EXPECT_EQ(30, buffer.PeekFrames(60, 0, 0, bus1.get())); |
344 EXPECT_EQ(30, buffer.PeekFrames(30, 0, 0, bus1.get())); | 344 EXPECT_EQ(30, buffer.PeekFrames(30, 0, 0, bus1.get())); |
345 } | 345 } |
346 | 346 |
347 TEST(AudioBufferQueueTest, Time) { | |
348 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO; | |
349 const int channels = ChannelLayoutToChannelCount(channel_layout); | |
350 const base::TimeDelta start_time1; | |
351 const base::TimeDelta start_time2 = base::TimeDelta::FromSeconds(30); | |
352 AudioBufferQueue buffer; | |
353 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100); | |
354 | |
355 scoped_refptr<AudioBuffer> audio_buffer = | |
356 MakeAudioBuffer<int16>(kSampleFormatS16, | |
357 channel_layout, | |
358 channels, | |
359 kSampleRate, | |
360 1, | |
361 1, | |
362 10, | |
363 start_time1); | |
364 | |
365 // Add two buffers (second one added later): | |
366 // first: start=0s, duration=10s | |
367 // second: start=30s, duration=10s | |
368 buffer.Append(audio_buffer); | |
369 EXPECT_EQ(10, buffer.frames()); | |
370 | |
371 // Check starting time. | |
372 EXPECT_EQ(start_time1, buffer.current_time()); | |
373 | |
374 // Read 2 frames, should be 2s in (since duration is 1s per sample). | |
375 int frames_read = 2; | |
376 EXPECT_EQ(frames_read, buffer.ReadFrames(frames_read, 0, bus.get())); | |
377 EXPECT_EQ( | |
378 start_time1 + | |
379 frames_read * audio_buffer->duration() / audio_buffer->frame_count(), | |
380 buffer.current_time()); | |
381 | |
382 // Skip 2 frames. | |
383 buffer.SeekFrames(2); | |
384 frames_read += 2; | |
385 EXPECT_EQ( | |
386 start_time1 + | |
387 frames_read * audio_buffer->duration() / audio_buffer->frame_count(), | |
388 buffer.current_time()); | |
389 | |
390 // Add second buffer for more data. | |
391 buffer.Append(MakeAudioBuffer<int16>(kSampleFormatS16, | |
392 channel_layout, | |
393 channels, | |
394 kSampleRate, | |
395 1, | |
396 1, | |
397 10, | |
398 start_time2)); | |
399 EXPECT_EQ(16, buffer.frames()); | |
400 | |
401 // Read until almost the end of buffer1. | |
402 frames_read += 5; | |
403 EXPECT_EQ(5, buffer.ReadFrames(5, 0, bus.get())); | |
404 EXPECT_EQ( | |
405 start_time1 + | |
406 frames_read * audio_buffer->duration() / audio_buffer->frame_count(), | |
407 buffer.current_time()); | |
408 | |
409 // Read 1 value, so time moved to buffer2. | |
410 EXPECT_EQ(1, buffer.ReadFrames(1, 0, bus.get())); | |
411 EXPECT_EQ(start_time2, buffer.current_time()); | |
412 | |
413 // Read all 10 frames in buffer2, timestamp should be last time from buffer2. | |
414 frames_read = 10; | |
415 EXPECT_EQ(10, buffer.ReadFrames(10, 0, bus.get())); | |
416 const base::TimeDelta expected_current_time = | |
417 start_time2 + | |
418 frames_read * audio_buffer->duration() / audio_buffer->frame_count(); | |
419 EXPECT_EQ(expected_current_time, buffer.current_time()); | |
420 | |
421 // Try to read more frames (which don't exist), timestamp should remain. | |
422 EXPECT_EQ(0, buffer.ReadFrames(5, 0, bus.get())); | |
423 EXPECT_EQ(expected_current_time, buffer.current_time()); | |
424 } | |
425 | |
426 TEST(AudioBufferQueueTest, NoTime) { | |
427 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO; | |
428 const int channels = ChannelLayoutToChannelCount(channel_layout); | |
429 const base::TimeDelta kNoTime = kNoTimestamp(); | |
430 AudioBufferQueue buffer; | |
431 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100); | |
432 | |
433 // Add two buffers with no timestamps. Time should always be unknown. | |
434 buffer.Append( | |
435 MakeTestBuffer<int16>(kSampleFormatS16, channel_layout, 1, 1, 10)); | |
436 buffer.Append( | |
437 MakeTestBuffer<int16>(kSampleFormatS16, channel_layout, 1, 1, 10)); | |
438 EXPECT_EQ(20, buffer.frames()); | |
439 | |
440 // Check starting time. | |
441 EXPECT_EQ(kNoTime, buffer.current_time()); | |
442 | |
443 // Read 2 frames. | |
444 EXPECT_EQ(2, buffer.ReadFrames(2, 0, bus.get())); | |
445 EXPECT_EQ(kNoTime, buffer.current_time()); | |
446 | |
447 // Skip 2 frames. | |
448 buffer.SeekFrames(2); | |
449 EXPECT_EQ(kNoTime, buffer.current_time()); | |
450 | |
451 // Read until almost the end of buffer1. | |
452 EXPECT_EQ(5, buffer.ReadFrames(5, 0, bus.get())); | |
453 EXPECT_EQ(kNoTime, buffer.current_time()); | |
454 | |
455 // Read 1 value, so time moved to buffer2. | |
456 EXPECT_EQ(1, buffer.ReadFrames(1, 0, bus.get())); | |
457 EXPECT_EQ(kNoTime, buffer.current_time()); | |
458 | |
459 // Read all 10 frames in buffer2. | |
460 EXPECT_EQ(10, buffer.ReadFrames(10, 0, bus.get())); | |
461 EXPECT_EQ(kNoTime, buffer.current_time()); | |
462 | |
463 // Try to read more frames (which don't exist), timestamp should remain. | |
464 EXPECT_EQ(0, buffer.ReadFrames(5, 0, bus.get())); | |
465 EXPECT_EQ(kNoTime, buffer.current_time()); | |
466 } | |
467 | |
468 } // namespace media | 347 } // namespace media |
OLD | NEW |