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

Side by Side Diff: media/audio/pulse/pulse_output.cc

Issue 2582703003: Audio output debug recording. (Closed)
Patch Set: Created 4 years 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/audio/pulse/pulse_output.h" 5 #include "media/audio/pulse/pulse_output.h"
6 6
7 #include <pulse/pulseaudio.h> 7 #include <pulse/pulseaudio.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include "base/single_thread_task_runner.h" 10 #include "base/single_thread_task_runner.h"
11 #include "base/time/time.h" 11 #include "base/time/time.h"
12 #include "media/audio/audio_device_description.h" 12 #include "media/audio/audio_device_description.h"
13 #include "media/audio/audio_manager_base.h" 13 #include "media/audio/audio_manager_base.h"
14 #include "media/audio/pulse/pulse_util.h" 14 #include "media/audio/pulse/pulse_util.h"
15 #include "media/base/audio_sample_types.h" 15 #include "media/base/audio_sample_types.h"
16 16
17 #include "base/debug/stack_trace.h"
18
17 namespace media { 19 namespace media {
18 20
19 using pulse::AutoPulseLock; 21 using pulse::AutoPulseLock;
20 using pulse::WaitForOperationCompletion; 22 using pulse::WaitForOperationCompletion;
21 23
22 // static, pa_stream_notify_cb 24 // static, pa_stream_notify_cb
23 void PulseAudioOutputStream::StreamNotifyCallback(pa_stream* s, void* p_this) { 25 void PulseAudioOutputStream::StreamNotifyCallback(pa_stream* s, void* p_this) {
24 PulseAudioOutputStream* stream = static_cast<PulseAudioOutputStream*>(p_this); 26 PulseAudioOutputStream* stream = static_cast<PulseAudioOutputStream*>(p_this);
25 27
26 // Forward unexpected failures to the AudioSourceCallback if available. All 28 // Forward unexpected failures to the AudioSourceCallback if available. All
(...skipping 25 matching lines...) Expand all
52 // floats. 54 // floats.
53 32, 55 32,
54 params.frames_per_buffer())), 56 params.frames_per_buffer())),
55 device_id_(device_id), 57 device_id_(device_id),
56 manager_(manager), 58 manager_(manager),
57 pa_context_(NULL), 59 pa_context_(NULL),
58 pa_mainloop_(NULL), 60 pa_mainloop_(NULL),
59 pa_stream_(NULL), 61 pa_stream_(NULL),
60 volume_(1.0f), 62 volume_(1.0f),
61 source_callback_(NULL) { 63 source_callback_(NULL) {
64 // base::debug::StackTrace().Print();
62 CHECK(params_.IsValid()); 65 CHECK(params_.IsValid());
63 audio_bus_ = AudioBus::Create(params_); 66 audio_bus_ = AudioBus::Create(params_);
64 } 67 }
65 68
66 PulseAudioOutputStream::~PulseAudioOutputStream() { 69 PulseAudioOutputStream::~PulseAudioOutputStream() {
67 // All internal structures should already have been freed in Close(), which 70 // All internal structures should already have been freed in Close(), which
68 // calls AudioManagerBase::ReleaseOutputStream() which deletes this object. 71 // calls AudioManagerBase::ReleaseOutputStream() which deletes this object.
69 DCHECK(!pa_stream_); 72 DCHECK(!pa_stream_);
70 DCHECK(!pa_context_); 73 DCHECK(!pa_context_);
71 DCHECK(!pa_mainloop_); 74 DCHECK(!pa_mainloop_);
72 } 75 }
73 76
74 bool PulseAudioOutputStream::Open() { 77 bool PulseAudioOutputStream::Open() {
75 DCHECK(thread_checker_.CalledOnValidThread()); 78 DCHECK(thread_checker_.CalledOnValidThread());
79 // base::debug::StackTrace().Print();
76 return pulse::CreateOutputStream( 80 return pulse::CreateOutputStream(
77 &pa_mainloop_, &pa_context_, &pa_stream_, params_, device_id_, 81 &pa_mainloop_, &pa_context_, &pa_stream_, params_, device_id_,
78 AudioManager::GetGlobalAppName(), &StreamNotifyCallback, 82 AudioManager::GetGlobalAppName(), &StreamNotifyCallback,
79 &StreamRequestCallback, this); 83 &StreamRequestCallback, this);
80 } 84 }
81 85
82 void PulseAudioOutputStream::Reset() { 86 void PulseAudioOutputStream::Reset() {
83 if (!pa_mainloop_) { 87 if (!pa_mainloop_) {
84 DCHECK(!pa_stream_); 88 DCHECK(!pa_stream_);
85 DCHECK(!pa_context_); 89 DCHECK(!pa_context_);
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 // command thread. 186 // command thread.
183 if (source_callback_ && bytes_remaining > 0) 187 if (source_callback_ && bytes_remaining > 0)
184 base::PlatformThread::Sleep(params_.GetBufferDuration() / 4); 188 base::PlatformThread::Sleep(params_.GetBufferDuration() / 4);
185 } 189 }
186 } 190 }
187 191
188 void PulseAudioOutputStream::Start(AudioSourceCallback* callback) { 192 void PulseAudioOutputStream::Start(AudioSourceCallback* callback) {
189 DCHECK(thread_checker_.CalledOnValidThread()); 193 DCHECK(thread_checker_.CalledOnValidThread());
190 CHECK(callback); 194 CHECK(callback);
191 CHECK(pa_stream_); 195 CHECK(pa_stream_);
196 // base::debug::StackTrace().Print();
192 197
193 AutoPulseLock auto_lock(pa_mainloop_); 198 AutoPulseLock auto_lock(pa_mainloop_);
194 199
195 // Ensure the context and stream are ready. 200 // Ensure the context and stream are ready.
196 if (pa_context_get_state(pa_context_) != PA_CONTEXT_READY && 201 if (pa_context_get_state(pa_context_) != PA_CONTEXT_READY &&
197 pa_stream_get_state(pa_stream_) != PA_STREAM_READY) { 202 pa_stream_get_state(pa_stream_) != PA_STREAM_READY) {
198 callback->OnError(this); 203 callback->OnError(this);
199 return; 204 return;
200 } 205 }
201 206
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 AutoPulseLock auto_lock(pa_mainloop_); 243 AutoPulseLock auto_lock(pa_mainloop_);
239 volume_ = static_cast<float>(volume); 244 volume_ = static_cast<float>(volume);
240 } 245 }
241 246
242 void PulseAudioOutputStream::GetVolume(double* volume) { 247 void PulseAudioOutputStream::GetVolume(double* volume) {
243 DCHECK(thread_checker_.CalledOnValidThread()); 248 DCHECK(thread_checker_.CalledOnValidThread());
244 249
245 *volume = volume_; 250 *volume = volume_;
246 } 251 }
247 252
253 void PulseAudioOutputStream::EnableDebugRecording(
254 const base::FilePath& file_name) {}
Henrik Grunell 2016/12/16 14:12:59 Create and start the file writer here, if OK to mo
255
256 void PulseAudioOutputStream::DisableDebugRecording() {}
257
248 } // namespace media 258 } // namespace media
OLDNEW
« media/audio/audio_output_controller.h ('K') | « media/audio/pulse/pulse_output.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698