Index: media/audio/audio_input_controller.cc |
diff --git a/media/audio/audio_input_controller.cc b/media/audio/audio_input_controller.cc |
index 31e137e2b17e4442c00979e85cbcffa31cd53cba..11673522c5109c9e0f2274e5522930f9a0b4e3b4 100644 |
--- a/media/audio/audio_input_controller.cc |
+++ b/media/audio/audio_input_controller.cc |
@@ -36,14 +36,17 @@ namespace media { |
AudioInputController::Factory* AudioInputController::factory_ = NULL; |
AudioInputController::AudioInputController(EventHandler* handler, |
- SyncWriter* sync_writer) |
+ SyncWriter* sync_writer, |
+ KeyPressMonitor* key_press_monitor) |
: creator_loop_(base::MessageLoopProxy::current()), |
handler_(handler), |
stream_(NULL), |
data_is_active_(false), |
state_(kEmpty), |
sync_writer_(sync_writer), |
- max_volume_(0.0) { |
+ max_volume_(0.0), |
+ key_press_monitor_(key_press_monitor), |
+ key_pressed_(false) { |
DCHECK(creator_loop_.get()); |
} |
@@ -56,17 +59,19 @@ scoped_refptr<AudioInputController> AudioInputController::Create( |
AudioManager* audio_manager, |
EventHandler* event_handler, |
const AudioParameters& params, |
- const std::string& device_id) { |
+ const std::string& device_id, |
+ KeyPressMonitor* key_press_monitor) { |
DCHECK(audio_manager); |
if (!params.IsValid() || (params.channels() > kMaxInputChannels)) |
return NULL; |
- if (factory_) |
- return factory_->Create(audio_manager, event_handler, params); |
- |
- scoped_refptr<AudioInputController> controller(new AudioInputController( |
- event_handler, NULL)); |
+ if (factory_) { |
+ return factory_->Create( |
+ audio_manager, event_handler, params, key_press_monitor); |
+ } |
+ scoped_refptr<AudioInputController> controller( |
+ new AudioInputController(event_handler, NULL, key_press_monitor)); |
controller->message_loop_ = audio_manager->GetMessageLoop(); |
@@ -87,7 +92,8 @@ scoped_refptr<AudioInputController> AudioInputController::CreateLowLatency( |
EventHandler* event_handler, |
const AudioParameters& params, |
const std::string& device_id, |
- SyncWriter* sync_writer) { |
+ SyncWriter* sync_writer, |
+ KeyPressMonitor* key_press_monitor) { |
DCHECK(audio_manager); |
DCHECK(sync_writer); |
@@ -96,8 +102,8 @@ scoped_refptr<AudioInputController> AudioInputController::CreateLowLatency( |
// Create the AudioInputController object and ensure that it runs on |
// the audio-manager thread. |
- scoped_refptr<AudioInputController> controller(new AudioInputController( |
- event_handler, sync_writer)); |
+ scoped_refptr<AudioInputController> controller( |
+ new AudioInputController(event_handler, sync_writer, key_press_monitor)); |
controller->message_loop_ = audio_manager->GetMessageLoop(); |
// Create and open a new audio input stream from the existing |
@@ -116,14 +122,15 @@ scoped_refptr<AudioInputController> AudioInputController::CreateForStream( |
const scoped_refptr<base::MessageLoopProxy>& message_loop, |
EventHandler* event_handler, |
AudioInputStream* stream, |
- SyncWriter* sync_writer) { |
+ SyncWriter* sync_writer, |
+ KeyPressMonitor* key_press_monitor) { |
DCHECK(sync_writer); |
DCHECK(stream); |
// Create the AudioInputController object and ensure that it runs on |
// the audio-manager thread. |
- scoped_refptr<AudioInputController> controller(new AudioInputController( |
- event_handler, sync_writer)); |
+ scoped_refptr<AudioInputController> controller( |
+ new AudioInputController(event_handler, sync_writer, key_press_monitor)); |
controller->message_loop_ = message_loop; |
// TODO(miu): See TODO at top of file. Until that's resolved, we need to |
@@ -233,6 +240,8 @@ void AudioInputController::DoRecord() { |
stream_->Start(this); |
handler_->OnRecording(this); |
+ |
+ key_press_monitor_->AddKeyPressListener(this); |
} |
void AudioInputController::DoClose() { |
@@ -252,6 +261,7 @@ void AudioInputController::DoClose() { |
state_ = kClosed; |
} |
+ key_press_monitor_->RemoveKeyPressListener(this); |
} |
void AudioInputController::DoReportError() { |
@@ -320,10 +330,14 @@ void AudioInputController::DoCheckForNoData() { |
void AudioInputController::OnData(AudioInputStream* stream, const uint8* data, |
uint32 size, uint32 hardware_delay_bytes, |
double volume) { |
+ bool key_pressed; |
{ |
base::AutoLock auto_lock(lock_); |
if (state_ != kRecording) |
return; |
+ |
+ key_pressed = key_pressed_; |
DaleCurtis
2013/08/02 01:01:17
You could initialize key_pressed to false above an
jiayl
2013/08/02 20:32:20
Done.
|
+ key_pressed_ = false; |
} |
// Mark data as active to ensure that the periodic calls to |
@@ -332,7 +346,7 @@ void AudioInputController::OnData(AudioInputStream* stream, const uint8* data, |
// Use SyncSocket if we are in a low-latency mode. |
if (LowLatencyMode()) { |
- sync_writer_->Write(data, size, volume); |
+ sync_writer_->Write(data, size, volume, key_pressed); |
sync_writer_->UpdateRecordedBytes(hardware_delay_bytes); |
return; |
} |
@@ -353,8 +367,13 @@ void AudioInputController::OnError(AudioInputStream* stream) { |
&AudioInputController::DoReportError, this)); |
} |
+void AudioInputController::OnKeyPressed() { |
+ base::AutoLock auto_lock(lock_); |
+ key_pressed_ = true; |
+} |
+ |
void AudioInputController::DoStopCloseAndClearStream( |
- base::WaitableEvent *done) { |
+ base::WaitableEvent* done) { |
DCHECK(message_loop_->BelongsToCurrentThread()); |
// Allow calling unconditionally and bail if we don't have a stream to close. |