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

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

Issue 1538563002: Forward the number of skipped frames by the OS in audio playout. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Code review fix. git cl format. Rebase. Created 5 years 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 <windows.h> 5 #include <windows.h>
6 #include <mmsystem.h> 6 #include <mmsystem.h>
7 7
8 #include "base/basictypes.h" 8 #include "base/basictypes.h"
9 #include "base/environment.h" 9 #include "base/environment.h"
10 #include "base/files/file_util.h" 10 #include "base/files/file_util.h"
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 size_t elements_written = 0; 96 size_t elements_written = 0;
97 while (elements_written < elements_to_write_) { 97 while (elements_written < elements_to_write_) {
98 fprintf(text_file_, "%d\n", delta_times_[elements_written]); 98 fprintf(text_file_, "%d\n", delta_times_[elements_written]);
99 ++elements_written; 99 ++elements_written;
100 } 100 }
101 101
102 base::CloseFile(text_file_); 102 base::CloseFile(text_file_);
103 } 103 }
104 104
105 // AudioOutputStream::AudioSourceCallback implementation. 105 // AudioOutputStream::AudioSourceCallback implementation.
106 int OnMoreData(AudioBus* audio_bus, uint32 total_bytes_delay) override { 106 int OnMoreData(AudioBus* audio_bus,
107 uint32_t total_bytes_delay,
108 uint32_t frames_skipped) override {
107 // Store time difference between two successive callbacks in an array. 109 // Store time difference between two successive callbacks in an array.
108 // These values will be written to a file in the destructor. 110 // These values will be written to a file in the destructor.
109 const base::TimeTicks now_time = base::TimeTicks::Now(); 111 const base::TimeTicks now_time = base::TimeTicks::Now();
110 const int diff = (now_time - previous_call_time_).InMilliseconds(); 112 const int diff = (now_time - previous_call_time_).InMilliseconds();
111 previous_call_time_ = now_time; 113 previous_call_time_ = now_time;
112 if (elements_to_write_ < kMaxDeltaSamples) { 114 if (elements_to_write_ < kMaxDeltaSamples) {
113 delta_times_[elements_to_write_] = diff; 115 delta_times_[elements_to_write_] = diff;
114 ++elements_to_write_; 116 ++elements_to_write_;
115 } 117 }
116 118
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 AudioOutputStreamWrapper aosw(audio_manager.get()); 377 AudioOutputStreamWrapper aosw(audio_manager.get());
376 AudioOutputStream* aos = aosw.Create(); 378 AudioOutputStream* aos = aosw.Create();
377 EXPECT_TRUE(aos->Open()); 379 EXPECT_TRUE(aos->Open());
378 380
379 // Derive the expected size in bytes of each packet. 381 // Derive the expected size in bytes of each packet.
380 uint32 bytes_per_packet = aosw.channels() * aosw.samples_per_packet() * 382 uint32 bytes_per_packet = aosw.channels() * aosw.samples_per_packet() *
381 (aosw.bits_per_sample() / 8); 383 (aosw.bits_per_sample() / 8);
382 384
383 // Wait for the first callback and verify its parameters. Ignore any 385 // Wait for the first callback and verify its parameters. Ignore any
384 // subsequent callbacks that might arrive. 386 // subsequent callbacks that might arrive.
385 EXPECT_CALL(source, OnMoreData(NotNull(), HasValidDelay(bytes_per_packet))) 387 EXPECT_CALL(source, OnMoreData(NotNull(), HasValidDelay(bytes_per_packet), 0))
386 .WillOnce(DoAll(QuitLoop(loop.task_runner()), 388 .WillOnce(DoAll(QuitLoop(loop.task_runner()),
387 Return(aosw.samples_per_packet()))) 389 Return(aosw.samples_per_packet())))
388 .WillRepeatedly(Return(0)); 390 .WillRepeatedly(Return(0));
389 391
390 aos->Start(&source); 392 aos->Start(&source);
391 loop.PostDelayedTask(FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(), 393 loop.PostDelayedTask(FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(),
392 TestTimeouts::action_timeout()); 394 TestTimeouts::action_timeout());
393 loop.Run(); 395 loop.Run();
394 aos->Stop(); 396 aos->Stop();
395 aos->Close(); 397 aos->Close();
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
569 // using the minimum buffer size at 48kHz sample rate. 571 // using the minimum buffer size at 48kHz sample rate.
570 AudioOutputStreamWrapper aosw(audio_manager.get()); 572 AudioOutputStreamWrapper aosw(audio_manager.get());
571 AudioOutputStream* aos = aosw.Create(48000, 160); 573 AudioOutputStream* aos = aosw.Create(48000, 160);
572 EXPECT_TRUE(aos->Open()); 574 EXPECT_TRUE(aos->Open());
573 575
574 // Derive the expected size in bytes of each packet. 576 // Derive the expected size in bytes of each packet.
575 uint32 bytes_per_packet = aosw.channels() * aosw.samples_per_packet() * 577 uint32 bytes_per_packet = aosw.channels() * aosw.samples_per_packet() *
576 (aosw.bits_per_sample() / 8); 578 (aosw.bits_per_sample() / 8);
577 579
578 // Wait for the first callback and verify its parameters. 580 // Wait for the first callback and verify its parameters.
579 EXPECT_CALL(source, OnMoreData(NotNull(), HasValidDelay(bytes_per_packet))) 581 EXPECT_CALL(source, OnMoreData(NotNull(), HasValidDelay(bytes_per_packet), 0))
580 .WillOnce(DoAll(QuitLoop(loop.task_runner()), 582 .WillOnce(DoAll(QuitLoop(loop.task_runner()),
581 Return(aosw.samples_per_packet()))) 583 Return(aosw.samples_per_packet())))
582 .WillRepeatedly(Return(aosw.samples_per_packet())); 584 .WillRepeatedly(Return(aosw.samples_per_packet()));
583 585
584 aos->Start(&source); 586 aos->Start(&source);
585 loop.PostDelayedTask(FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(), 587 loop.PostDelayedTask(FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(),
586 TestTimeouts::action_timeout()); 588 TestTimeouts::action_timeout());
587 loop.Run(); 589 loop.Run();
588 aos->Stop(); 590 aos->Stop();
589 aos->Close(); 591 aos->Close();
(...skipping 13 matching lines...) Expand all
603 // using the minimum buffer size at 44.1kHz sample rate. 605 // using the minimum buffer size at 44.1kHz sample rate.
604 AudioOutputStreamWrapper aosw(audio_manager.get()); 606 AudioOutputStreamWrapper aosw(audio_manager.get());
605 AudioOutputStream* aos = aosw.Create(44100, 160); 607 AudioOutputStream* aos = aosw.Create(44100, 160);
606 EXPECT_TRUE(aos->Open()); 608 EXPECT_TRUE(aos->Open());
607 609
608 // Derive the expected size in bytes of each packet. 610 // Derive the expected size in bytes of each packet.
609 uint32 bytes_per_packet = aosw.channels() * aosw.samples_per_packet() * 611 uint32 bytes_per_packet = aosw.channels() * aosw.samples_per_packet() *
610 (aosw.bits_per_sample() / 8); 612 (aosw.bits_per_sample() / 8);
611 613
612 // Wait for the first callback and verify its parameters. 614 // Wait for the first callback and verify its parameters.
613 EXPECT_CALL(source, OnMoreData(NotNull(), HasValidDelay(bytes_per_packet))) 615 EXPECT_CALL(source, OnMoreData(NotNull(), HasValidDelay(bytes_per_packet), 0))
614 .WillOnce(DoAll(QuitLoop(loop.task_runner()), 616 .WillOnce(DoAll(QuitLoop(loop.task_runner()),
615 Return(aosw.samples_per_packet()))) 617 Return(aosw.samples_per_packet())))
616 .WillRepeatedly(Return(aosw.samples_per_packet())); 618 .WillRepeatedly(Return(aosw.samples_per_packet()));
617 619
618 aos->Start(&source); 620 aos->Start(&source);
619 loop.PostDelayedTask(FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(), 621 loop.PostDelayedTask(FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(),
620 TestTimeouts::action_timeout()); 622 TestTimeouts::action_timeout());
621 loop.Run(); 623 loop.Run();
622 aos->Stop(); 624 aos->Stop();
623 aos->Close(); 625 aos->Close();
624 } 626 }
625 627
626 } // namespace media 628 } // namespace media
OLDNEW
« no previous file with comments | « media/audio/win/audio_low_latency_output_win.cc ('k') | media/audio/win/audio_output_win_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698