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

Unified Diff: media/audio/virtual_audio_input_stream.cc

Issue 11889041: Fix VirtualAudioInputStream callback timing issues. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: update comment Created 7 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: media/audio/virtual_audio_input_stream.cc
diff --git a/media/audio/virtual_audio_input_stream.cc b/media/audio/virtual_audio_input_stream.cc
index 4f2f9bd04fb84a4619766597777c75665b5641c6..06266b0f557e320e76497c3d7a76cbaa948d7133 100644
--- a/media/audio/virtual_audio_input_stream.cc
+++ b/media/audio/virtual_audio_input_stream.cc
@@ -85,6 +85,7 @@ bool VirtualAudioInputStream::Open() {
void VirtualAudioInputStream::Start(AudioInputCallback* callback) {
DCHECK(message_loop_->BelongsToCurrentThread());
callback_ = callback;
+ next_read_time_ = base::Time::Now();
on_more_data_cb_.Reset(base::Bind(&VirtualAudioInputStream::ReadAudio,
base::Unretained(this)));
audio_manager_->GetMessageLoop()->PostTask(FROM_HERE,
@@ -139,9 +140,20 @@ void VirtualAudioInputStream::ReadAudio() {
params_.GetBytesPerBuffer(),
1.0);
+ // Need to account for time spent here due to renderer side mixing as well as
+ // the imprecision of PostDelayedTask.
+ next_read_time_ += buffer_duration_ms_;
+ base::TimeDelta delay = next_read_time_ - base::Time::Now();
+ if (delay < base::TimeDelta()) {
+ // Reset the next read time if we end up getting too far behind. We'll just
+ // slow down playback to avoid using up all the CPU.
+ delay = base::TimeDelta();
+ next_read_time_ = base::Time::Now();
+ }
+
message_loop_->PostDelayedTask(FROM_HERE,
on_more_data_cb_.callback(),
- buffer_duration_ms_);
+ delay);
}
void VirtualAudioInputStream::Close() {

Powered by Google App Engine
This is Rietveld 408576698