Index: media/audio/pulse/pulse_output.cc |
diff --git a/media/audio/pulse/pulse_output.cc b/media/audio/pulse/pulse_output.cc |
index 5efa040c0d1b96a712a77cc309badbeef9db4f2a..f2b25c0b4c3ebe159895f40c366fb1d306c25ff3 100644 |
--- a/media/audio/pulse/pulse_output.cc |
+++ b/media/audio/pulse/pulse_output.cc |
@@ -7,9 +7,13 @@ |
#include <pulse/pulseaudio.h> |
#include <stdint.h> |
+#include "base/bind.h" |
+#include "base/memory/ptr_util.h" |
#include "base/single_thread_task_runner.h" |
#include "base/time/time.h" |
+#include "media/audio/audio_debug_recording_helper.h" |
#include "media/audio/audio_device_description.h" |
+#include "media/audio/audio_file_writer.h" |
#include "media/audio/audio_manager_base.h" |
#include "media/audio/pulse/pulse_util.h" |
#include "media/base/audio_sample_types.h" |
@@ -58,7 +62,10 @@ PulseAudioOutputStream::PulseAudioOutputStream(const AudioParameters& params, |
pa_mainloop_(NULL), |
pa_stream_(NULL), |
volume_(1.0f), |
- source_callback_(NULL) { |
+ source_callback_(NULL), |
+ debug_recording_helper_(base::MakeUnique<AudioDebugRecordingHelper>( |
o1ka
2017/01/20 11:36:26
Set it to nullptr for non-webrtc-enabled builds?
Henrik Grunell
2017/01/26 10:25:09
Good point. That should be the right things to do.
|
+ manager, |
+ manager_->GetTaskRunner())) { |
CHECK(params_.IsValid()); |
audio_bus_ = AudioBus::Create(params_); |
} |
@@ -156,6 +163,11 @@ void PulseAudioOutputStream::FulfillWriteRequest(size_t requested_bytes) { |
audio_bus_->frames(), reinterpret_cast<float*>(buffer)); |
} else { |
memset(buffer, 0, bytes_to_fill); |
+ |
+ // If we'll write the data to a debug file, also zero out the |audio_bus_| |
+ // as it will be copied. |
+ if (debug_recording_helper_->WillWrite()) |
+ audio_bus_->Zero(); |
} |
if (pa_stream_write(pa_stream_, buffer, bytes_to_fill, NULL, 0LL, |
@@ -168,6 +180,8 @@ void PulseAudioOutputStream::FulfillWriteRequest(size_t requested_bytes) { |
// NOTE: As mentioned above, |bytes_remaining| may be negative after this. |
bytes_remaining -= bytes_to_fill; |
+ debug_recording_helper_->MaybeWrite(audio_bus_.get()); |
+ |
// Despite telling Pulse to only request certain buffer sizes, it will not |
// always obey. In these cases we need to avoid back to back reads from |
// the renderer as it won't have time to complete the request. |
@@ -245,4 +259,13 @@ void PulseAudioOutputStream::GetVolume(double* volume) { |
*volume = volume_; |
} |
+void PulseAudioOutputStream::EnableDebugRecording( |
+ const base::FilePath& file_name) { |
+ debug_recording_helper_->EnableDebugRecording(params_, file_name); |
+} |
+ |
+void PulseAudioOutputStream::DisableDebugRecording() { |
+ debug_recording_helper_->DisableDebugRecording(); |
+} |
+ |
} // namespace media |