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

Unified Diff: media/audio/audio_input_controller.cc

Issue 2390153006: Audio input debug recording refactoring to reduce thread hops and simplify object ownership (Closed)
Patch Set: Rebase Created 4 years, 2 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_writer.h » ('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 c190056857cad2d0cc31553bf071f3e045955b97..5122a5940c42deef81ac32188cf02351546d59eb 100644
--- a/media/audio/audio_input_controller.cc
+++ b/media/audio/audio_input_controller.cc
@@ -85,10 +85,12 @@ namespace media {
// static
AudioInputController::Factory* AudioInputController::factory_ = nullptr;
-AudioInputController::AudioInputController(EventHandler* handler,
- SyncWriter* sync_writer,
- UserInputMonitor* user_input_monitor,
- const bool agc_is_enabled)
+AudioInputController::AudioInputController(
+ EventHandler* handler,
+ SyncWriter* sync_writer,
+ std::unique_ptr<AudioInputWriter> debug_writer,
+ UserInputMonitor* user_input_monitor,
+ const bool agc_is_enabled)
: creator_task_runner_(base::ThreadTaskRunnerHandle::Get()),
handler_(handler),
stream_(nullptr),
@@ -104,7 +106,7 @@ AudioInputController::AudioInputController(EventHandler* handler,
silence_state_(SILENCE_STATE_NO_MEASUREMENT),
#endif
prev_key_down_count_(0),
- input_writer_(nullptr) {
+ debug_writer_(std::move(debug_writer)) {
DCHECK(creator_task_runner_.get());
}
@@ -129,7 +131,7 @@ scoped_refptr<AudioInputController> AudioInputController::Create(
audio_manager, event_handler, params, user_input_monitor);
}
scoped_refptr<AudioInputController> controller(new AudioInputController(
- event_handler, nullptr, user_input_monitor, false));
+ event_handler, nullptr, nullptr, user_input_monitor, false));
controller->task_runner_ = audio_manager->GetTaskRunner();
@@ -155,6 +157,7 @@ scoped_refptr<AudioInputController> AudioInputController::CreateLowLatency(
const AudioParameters& params,
const std::string& device_id,
SyncWriter* sync_writer,
+ std::unique_ptr<AudioInputWriter> debug_writer,
UserInputMonitor* user_input_monitor,
const bool agc_is_enabled) {
DCHECK(audio_manager);
@@ -166,7 +169,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, user_input_monitor, agc_is_enabled));
+ event_handler, sync_writer, std::move(debug_writer), user_input_monitor,
+ agc_is_enabled));
controller->task_runner_ = audio_manager->GetTaskRunner();
// Create and open a new audio input stream from the existing
@@ -190,6 +194,7 @@ scoped_refptr<AudioInputController> AudioInputController::CreateForStream(
EventHandler* event_handler,
AudioInputStream* stream,
SyncWriter* sync_writer,
+ std::unique_ptr<AudioInputWriter> debug_writer,
UserInputMonitor* user_input_monitor) {
DCHECK(sync_writer);
DCHECK(stream);
@@ -197,7 +202,8 @@ scoped_refptr<AudioInputController> AudioInputController::CreateForStream(
// Create the AudioInputController object and ensure that it runs on
// the audio-manager thread.
scoped_refptr<AudioInputController> controller(new AudioInputController(
- event_handler, sync_writer, user_input_monitor, false));
+ event_handler, sync_writer, std::move(debug_writer), user_input_monitor,
+ false));
controller->task_runner_ = task_runner;
if (!controller->task_runner_->PostTask(
@@ -374,7 +380,8 @@ void AudioInputController::DoClose() {
log_silence_state_ = false;
#endif
- input_writer_ = nullptr;
+ if (debug_writer_)
+ debug_writer_->Stop();
state_ = CLOSED;
}
@@ -412,10 +419,7 @@ void AudioInputController::OnData(AudioInputStream* stream,
const AudioBus* source,
uint32_t hardware_delay_bytes,
double volume) {
- // |input_writer_| should only be accessed on the audio thread, but as a means
- // to avoid copying data and posting on the audio thread, we just check for
- // non-null here.
- if (input_writer_) {
+ if (debug_writer_ && debug_writer_->WillWrite()) {
std::unique_ptr<AudioBus> source_copy =
AudioBus::Create(source->channels(), source->frames());
source->CopyTo(source_copy.get());
@@ -544,23 +548,17 @@ void AudioInputController::OnError(AudioInputStream* stream) {
}
void AudioInputController::EnableDebugRecording(
- AudioInputWriter* input_writer) {
- task_runner_->PostTask(FROM_HERE, base::Bind(
- &AudioInputController::DoEnableDebugRecording,
- this,
- input_writer));
+ const base::FilePath& file_name) {
+ task_runner_->PostTask(
+ FROM_HERE, base::Bind(&AudioInputController::DoEnableDebugRecording, this,
+ file_name));
}
-void AudioInputController::DisableDebugRecording(
- const base::Closure& callback) {
+void AudioInputController::DisableDebugRecording() {
DCHECK(creator_task_runner_->BelongsToCurrentThread());
- DCHECK(!callback.is_null());
-
- task_runner_->PostTaskAndReply(
+ task_runner_->PostTask(
FROM_HERE,
- base::Bind(&AudioInputController::DoDisableDebugRecording,
- this),
- callback);
+ base::Bind(&AudioInputController::DoDisableDebugRecording, this));
}
void AudioInputController::DoStopCloseAndClearStream() {
@@ -621,22 +619,23 @@ void AudioInputController::LogCaptureStartupResult(
}
void AudioInputController::DoEnableDebugRecording(
- AudioInputWriter* input_writer) {
+ const base::FilePath& file_name) {
DCHECK(task_runner_->BelongsToCurrentThread());
- DCHECK(!input_writer_);
- input_writer_ = input_writer;
+ if (debug_writer_)
+ debug_writer_->Start(file_name);
}
void AudioInputController::DoDisableDebugRecording() {
DCHECK(task_runner_->BelongsToCurrentThread());
- input_writer_ = nullptr;
+ if (debug_writer_)
+ debug_writer_->Stop();
}
void AudioInputController::WriteInputDataForDebugging(
std::unique_ptr<AudioBus> data) {
DCHECK(task_runner_->BelongsToCurrentThread());
- if (input_writer_)
- input_writer_->Write(std::move(data));
+ if (debug_writer_)
+ debug_writer_->Write(std::move(data));
}
void AudioInputController::LogMessage(const std::string& message) {
« no previous file with comments | « media/audio/audio_input_controller.h ('k') | media/audio/audio_input_writer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698