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

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: 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..4b2cd9ed4ac86df301dccbcfd5172eed222bd136 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,15 @@ void VirtualAudioInputStream::ReadAudio() {
params_.GetBytesPerBuffer(),
1.0);
+ // Need to account for time spent here due to renderer side mixing.
+ next_read_time_ += buffer_duration_ms_;
+ base::TimeDelta delay = next_read_time_ - base::Time::Now();
+ if (delay < base::TimeDelta())
DaleCurtis 2013/01/15 21:00:08 I'd worry about drift over time here. Can you limi
justinlin 2013/01/15 22:36:21 I tested this and actually the comment I left ther
+ delay = base::TimeDelta();
+
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