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

Unified Diff: media/audio/audio_input_controller.cc

Issue 7129057: Fix bug when unplugging an audio input device whilst using speech input. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Renaming Created 9 years, 6 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
« no previous file with comments | « media/audio/audio_input_controller.h ('k') | media/audio/audio_input_controller_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/audio_input_controller.cc
diff --git a/media/audio/audio_input_controller.cc b/media/audio/audio_input_controller.cc
index 311a54ef840581ea69ef0cd65a52e13f33f16512..a8209f5ad18a20439892175610b3652ef5b8d369 100644
--- a/media/audio/audio_input_controller.cc
+++ b/media/audio/audio_input_controller.cc
@@ -7,9 +7,12 @@
#include "base/threading/thread_restrictions.h"
#include "media/base/limits.h"
-namespace media {
+namespace {
+const int kMaxInputChannels = 2;
+const int kTimerResetInterval = 1; // One second.
+}
-static const int kMaxInputChannels = 2;
+namespace media {
// static
AudioInputController::Factory* AudioInputController::factory_ = NULL;
@@ -18,6 +21,10 @@ AudioInputController::AudioInputController(EventHandler* handler,
SyncWriter* sync_writer)
: handler_(handler),
stream_(NULL),
+ ALLOW_THIS_IN_INITIALIZER_LIST(no_data_timer_(
+ base::TimeDelta::FromSeconds(kTimerResetInterval),
+ this,
+ &AudioInputController::DoReportNoDataError)),
state_(kEmpty),
thread_("AudioInputControllerThread"),
sync_writer_(sync_writer) {
@@ -123,6 +130,9 @@ void AudioInputController::DoCreate(AudioParameters params) {
return;
}
+ thread_.message_loop()->PostTask(
+ FROM_HERE,
+ NewRunnableMethod(this, &AudioInputController::DoResetNoDataTimer));
state_ = kCreated;
handler_->OnCreated(this);
}
@@ -168,6 +178,16 @@ void AudioInputController::DoReportError(int code) {
handler_->OnError(this, code);
}
+void AudioInputController::DoReportNoDataError() {
+ DCHECK_EQ(thread_.message_loop(), MessageLoop::current());
+ handler_->OnError(this, 0);
+}
+
+void AudioInputController::DoResetNoDataTimer() {
+ DCHECK_EQ(thread_.message_loop(), MessageLoop::current());
+ no_data_timer_.Reset();
+}
+
void AudioInputController::OnData(AudioInputStream* stream, const uint8* data,
uint32 size) {
{
@@ -176,6 +196,10 @@ void AudioInputController::OnData(AudioInputStream* stream, const uint8* data,
return;
}
+ thread_.message_loop()->PostTask(
+ FROM_HERE,
+ NewRunnableMethod(this, &AudioInputController::DoResetNoDataTimer));
+
// Use SyncSocket if we are in a low-latency mode.
if (LowLatencyMode()) {
sync_writer_->Write(data, size);
« no previous file with comments | « media/audio/audio_input_controller.h ('k') | media/audio/audio_input_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698