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

Side by Side Diff: media/audio/win/audio_low_latency_output_win_unittest.cc

Issue 2060833002: Implementation of 'AudioContext.getOutputTimestamp' method (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added implementation for ALSA. Created 4 years, 5 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
OLDNEW
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 "media/audio/win/audio_low_latency_output_win.h" 5 #include "media/audio/win/audio_low_latency_output_win.h"
6 6
7 #include <windows.h> 7 #include <windows.h>
8 #include <mmsystem.h> 8 #include <mmsystem.h>
9 #include <stddef.h> 9 #include <stddef.h>
10 #include <stdint.h> 10 #include <stdint.h>
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 fprintf(text_file_, "%d\n", delta_times_[elements_written]); 101 fprintf(text_file_, "%d\n", delta_times_[elements_written]);
102 ++elements_written; 102 ++elements_written;
103 } 103 }
104 104
105 base::CloseFile(text_file_); 105 base::CloseFile(text_file_);
106 } 106 }
107 107
108 // AudioOutputStream::AudioSourceCallback implementation. 108 // AudioOutputStream::AudioSourceCallback implementation.
109 int OnMoreData(AudioBus* audio_bus, 109 int OnMoreData(AudioBus* audio_bus,
110 uint32_t total_bytes_delay, 110 uint32_t total_bytes_delay,
111 uint32_t frames_skipped) override { 111 uint32_t frames_skipped,
112 const AudioTimestamp& output_timestamp) override {
112 // Store time difference between two successive callbacks in an array. 113 // Store time difference between two successive callbacks in an array.
113 // These values will be written to a file in the destructor. 114 // These values will be written to a file in the destructor.
114 const base::TimeTicks now_time = base::TimeTicks::Now(); 115 const base::TimeTicks now_time = base::TimeTicks::Now();
115 const int diff = (now_time - previous_call_time_).InMilliseconds(); 116 const int diff = (now_time - previous_call_time_).InMilliseconds();
116 previous_call_time_ = now_time; 117 previous_call_time_ = now_time;
117 if (elements_to_write_ < kMaxDeltaSamples) { 118 if (elements_to_write_ < kMaxDeltaSamples) {
118 delta_times_[elements_to_write_] = diff; 119 delta_times_[elements_to_write_] = diff;
119 ++elements_to_write_; 120 ++elements_to_write_;
120 } 121 }
121 122
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 AudioOutputStreamWrapper aosw(audio_manager_.get()); 388 AudioOutputStreamWrapper aosw(audio_manager_.get());
388 AudioOutputStream* aos = aosw.Create(); 389 AudioOutputStream* aos = aosw.Create();
389 EXPECT_TRUE(aos->Open()); 390 EXPECT_TRUE(aos->Open());
390 391
391 // Derive the expected size in bytes of each packet. 392 // Derive the expected size in bytes of each packet.
392 uint32_t bytes_per_packet = aosw.channels() * aosw.samples_per_packet() * 393 uint32_t bytes_per_packet = aosw.channels() * aosw.samples_per_packet() *
393 (aosw.bits_per_sample() / 8); 394 (aosw.bits_per_sample() / 8);
394 395
395 // Wait for the first callback and verify its parameters. Ignore any 396 // Wait for the first callback and verify its parameters. Ignore any
396 // subsequent callbacks that might arrive. 397 // subsequent callbacks that might arrive.
397 EXPECT_CALL(source, OnMoreData(NotNull(), HasValidDelay(bytes_per_packet), 0)) 398 EXPECT_CALL(source, OnMoreData(NotNull(), HasValidDelay(bytes_per_packet), 0,
399 AudioTimestamp()))
398 .WillOnce(DoAll(QuitLoop(message_loop_.task_runner()), 400 .WillOnce(DoAll(QuitLoop(message_loop_.task_runner()),
399 Return(aosw.samples_per_packet()))) 401 Return(aosw.samples_per_packet())))
400 .WillRepeatedly(Return(0)); 402 .WillRepeatedly(Return(0));
401 403
402 aos->Start(&source); 404 aos->Start(&source);
403 message_loop_.PostDelayedTask(FROM_HERE, 405 message_loop_.PostDelayedTask(FROM_HERE,
404 base::MessageLoop::QuitWhenIdleClosure(), 406 base::MessageLoop::QuitWhenIdleClosure(),
405 TestTimeouts::action_timeout()); 407 TestTimeouts::action_timeout());
406 message_loop_.Run(); 408 message_loop_.Run();
407 aos->Stop(); 409 aos->Stop();
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
577 // using the minimum buffer size at 48kHz sample rate. 579 // using the minimum buffer size at 48kHz sample rate.
578 AudioOutputStreamWrapper aosw(audio_manager_.get()); 580 AudioOutputStreamWrapper aosw(audio_manager_.get());
579 AudioOutputStream* aos = aosw.Create(48000, 160); 581 AudioOutputStream* aos = aosw.Create(48000, 160);
580 EXPECT_TRUE(aos->Open()); 582 EXPECT_TRUE(aos->Open());
581 583
582 // Derive the expected size in bytes of each packet. 584 // Derive the expected size in bytes of each packet.
583 uint32_t bytes_per_packet = aosw.channels() * aosw.samples_per_packet() * 585 uint32_t bytes_per_packet = aosw.channels() * aosw.samples_per_packet() *
584 (aosw.bits_per_sample() / 8); 586 (aosw.bits_per_sample() / 8);
585 587
586 // Wait for the first callback and verify its parameters. 588 // Wait for the first callback and verify its parameters.
587 EXPECT_CALL(source, OnMoreData(NotNull(), HasValidDelay(bytes_per_packet), 0)) 589 EXPECT_CALL(source, OnMoreData(NotNull(), HasValidDelay(bytes_per_packet), 0,
590 AudioTimestamp()))
588 .WillOnce(DoAll(QuitLoop(message_loop_.task_runner()), 591 .WillOnce(DoAll(QuitLoop(message_loop_.task_runner()),
589 Return(aosw.samples_per_packet()))) 592 Return(aosw.samples_per_packet())))
590 .WillRepeatedly(Return(aosw.samples_per_packet())); 593 .WillRepeatedly(Return(aosw.samples_per_packet()));
591 594
592 aos->Start(&source); 595 aos->Start(&source);
593 message_loop_.PostDelayedTask(FROM_HERE, 596 message_loop_.PostDelayedTask(FROM_HERE,
594 base::MessageLoop::QuitWhenIdleClosure(), 597 base::MessageLoop::QuitWhenIdleClosure(),
595 TestTimeouts::action_timeout()); 598 TestTimeouts::action_timeout());
596 message_loop_.Run(); 599 message_loop_.Run();
597 aos->Stop(); 600 aos->Stop();
(...skipping 12 matching lines...) Expand all
610 // using the minimum buffer size at 44.1kHz sample rate. 613 // using the minimum buffer size at 44.1kHz sample rate.
611 AudioOutputStreamWrapper aosw(audio_manager_.get()); 614 AudioOutputStreamWrapper aosw(audio_manager_.get());
612 AudioOutputStream* aos = aosw.Create(44100, 160); 615 AudioOutputStream* aos = aosw.Create(44100, 160);
613 EXPECT_TRUE(aos->Open()); 616 EXPECT_TRUE(aos->Open());
614 617
615 // Derive the expected size in bytes of each packet. 618 // Derive the expected size in bytes of each packet.
616 uint32_t bytes_per_packet = aosw.channels() * aosw.samples_per_packet() * 619 uint32_t bytes_per_packet = aosw.channels() * aosw.samples_per_packet() *
617 (aosw.bits_per_sample() / 8); 620 (aosw.bits_per_sample() / 8);
618 621
619 // Wait for the first callback and verify its parameters. 622 // Wait for the first callback and verify its parameters.
620 EXPECT_CALL(source, OnMoreData(NotNull(), HasValidDelay(bytes_per_packet), 0)) 623 EXPECT_CALL(source, OnMoreData(NotNull(), HasValidDelay(bytes_per_packet), 0,
624 AudioTimestamp()))
621 .WillOnce(DoAll(QuitLoop(message_loop_.task_runner()), 625 .WillOnce(DoAll(QuitLoop(message_loop_.task_runner()),
622 Return(aosw.samples_per_packet()))) 626 Return(aosw.samples_per_packet())))
623 .WillRepeatedly(Return(aosw.samples_per_packet())); 627 .WillRepeatedly(Return(aosw.samples_per_packet()));
624 628
625 aos->Start(&source); 629 aos->Start(&source);
626 message_loop_.PostDelayedTask(FROM_HERE, 630 message_loop_.PostDelayedTask(FROM_HERE,
627 base::MessageLoop::QuitWhenIdleClosure(), 631 base::MessageLoop::QuitWhenIdleClosure(),
628 TestTimeouts::action_timeout()); 632 TestTimeouts::action_timeout());
629 message_loop_.Run(); 633 message_loop_.Run();
630 aos->Stop(); 634 aos->Stop();
631 aos->Close(); 635 aos->Close();
632 } 636 }
633 637
634 } // namespace media 638 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698