summaryrefslogtreecommitdiffstats
path: root/media/audio/pulse
diff options
context:
space:
mode:
authorhenrika@chromium.org <henrika@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-19 12:38:56 +0000
committerhenrika@chromium.org <henrika@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-19 12:38:56 +0000
commitf361a0d7b773112b60b80028aeaa2f42385d8487 (patch)
tree5a303803a2f3c6c0995195efd6a4f417cbbe5783 /media/audio/pulse
parent4903647573d5f2aad967f777532bedc734188d7c (diff)
downloadchromium_src-f361a0d7b773112b60b80028aeaa2f42385d8487.zip
chromium_src-f361a0d7b773112b60b80028aeaa2f42385d8487.tar.gz
chromium_src-f361a0d7b773112b60b80028aeaa2f42385d8487.tar.bz2
Modifies AudioInputCallback::OnData and use media::AudioBus instead of plain byte vector (Relanding).
Second attempt to land https://codereview.chromium.org/314713002/ which has been reverted. TBR=dalecurtis BUG=375155 TEST=WebRTC and WebSpeech demos Review URL: https://codereview.chromium.org/344583002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@278345 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/audio/pulse')
-rw-r--r--media/audio/pulse/pulse_input.cc9
-rw-r--r--media/audio/pulse/pulse_input.h2
-rw-r--r--media/audio/pulse/pulse_output.cc14
-rw-r--r--media/audio/pulse/pulse_output.h3
4 files changed, 18 insertions, 10 deletions
diff --git a/media/audio/pulse/pulse_input.cc b/media/audio/pulse/pulse_input.cc
index 9d31cdd..d5cb94ec 100644
--- a/media/audio/pulse/pulse_input.cc
+++ b/media/audio/pulse/pulse_input.cc
@@ -34,6 +34,8 @@ PulseAudioInputStream::PulseAudioInputStream(AudioManagerPulse* audio_manager,
context_state_changed_(false) {
DCHECK(mainloop);
DCHECK(context);
+ CHECK(params_.IsValid());
+ audio_bus_ = AudioBus::Create(params_);
}
PulseAudioInputStream::~PulseAudioInputStream() {
@@ -272,8 +274,11 @@ void PulseAudioInputStream::ReadData() {
int packet_size = params_.GetBytesPerBuffer();
while (buffer_->forward_bytes() >= packet_size) {
buffer_->Read(audio_data_buffer_.get(), packet_size);
- callback_->OnData(this, audio_data_buffer_.get(), packet_size,
- hardware_delay, normalized_volume);
+ audio_bus_->FromInterleaved(audio_data_buffer_.get(),
+ audio_bus_->frames(),
+ params_.bits_per_sample() / 8);
+ callback_->OnData(
+ this, audio_bus_.get(), hardware_delay, normalized_volume);
if (buffer_->forward_bytes() < packet_size)
break;
diff --git a/media/audio/pulse/pulse_input.h b/media/audio/pulse/pulse_input.h
index 7566eac..7e64bb2 100644
--- a/media/audio/pulse/pulse_input.h
+++ b/media/audio/pulse/pulse_input.h
@@ -75,6 +75,8 @@ class PulseAudioInputStream : public AgcAudioStream<AudioInputStream> {
// Flag indicating the state of the context has been changed.
bool context_state_changed_;
+ scoped_ptr<AudioBus> audio_bus_;
+
base::ThreadChecker thread_checker_;
DISALLOW_COPY_AND_ASSIGN(PulseAudioInputStream);
diff --git a/media/audio/pulse/pulse_output.cc b/media/audio/pulse/pulse_output.cc
index a67ee7f..19fc47b 100644
--- a/media/audio/pulse/pulse_output.cc
+++ b/media/audio/pulse/pulse_output.cc
@@ -49,8 +49,6 @@ PulseAudioOutputStream::PulseAudioOutputStream(const AudioParameters& params,
pa_stream_(NULL),
volume_(1.0f),
source_callback_(NULL) {
- DCHECK(manager_->GetTaskRunner()->BelongsToCurrentThread());
-
CHECK(params_.IsValid());
audio_bus_ = AudioBus::Create(params_);
}
@@ -64,7 +62,7 @@ PulseAudioOutputStream::~PulseAudioOutputStream() {
}
bool PulseAudioOutputStream::Open() {
- DCHECK(manager_->GetTaskRunner()->BelongsToCurrentThread());
+ DCHECK(thread_checker_.CalledOnValidThread());
return pulse::CreateOutputStream(&pa_mainloop_, &pa_context_, &pa_stream_,
params_, device_id_, &StreamNotifyCallback,
&StreamRequestCallback, this);
@@ -109,7 +107,7 @@ void PulseAudioOutputStream::Reset() {
}
void PulseAudioOutputStream::Close() {
- DCHECK(manager_->GetTaskRunner()->BelongsToCurrentThread());
+ DCHECK(thread_checker_.CalledOnValidThread());
Reset();
@@ -159,7 +157,7 @@ void PulseAudioOutputStream::FulfillWriteRequest(size_t requested_bytes) {
}
void PulseAudioOutputStream::Start(AudioSourceCallback* callback) {
- DCHECK(manager_->GetTaskRunner()->BelongsToCurrentThread());
+ DCHECK(thread_checker_.CalledOnValidThread());
CHECK(callback);
CHECK(pa_stream_);
@@ -181,7 +179,7 @@ void PulseAudioOutputStream::Start(AudioSourceCallback* callback) {
}
void PulseAudioOutputStream::Stop() {
- DCHECK(manager_->GetTaskRunner()->BelongsToCurrentThread());
+ DCHECK(thread_checker_.CalledOnValidThread());
// Cork (pause) the stream. Waiting for the main loop lock will ensure
// outstanding callbacks have completed.
@@ -204,13 +202,13 @@ void PulseAudioOutputStream::Stop() {
}
void PulseAudioOutputStream::SetVolume(double volume) {
- DCHECK(manager_->GetTaskRunner()->BelongsToCurrentThread());
+ DCHECK(thread_checker_.CalledOnValidThread());
volume_ = static_cast<float>(volume);
}
void PulseAudioOutputStream::GetVolume(double* volume) {
- DCHECK(manager_->GetTaskRunner()->BelongsToCurrentThread());
+ DCHECK(thread_checker_.CalledOnValidThread());
*volume = volume_;
}
diff --git a/media/audio/pulse/pulse_output.h b/media/audio/pulse/pulse_output.h
index 437e28c..e1c0045 100644
--- a/media/audio/pulse/pulse_output.h
+++ b/media/audio/pulse/pulse_output.h
@@ -23,6 +23,7 @@
#include <string>
#include "base/memory/scoped_ptr.h"
+#include "base/threading/thread_checker.h"
#include "media/audio/audio_io.h"
#include "media/audio/audio_parameters.h"
@@ -90,6 +91,8 @@ class PulseAudioOutputStream : public AudioOutputStream {
// Container for retrieving data from AudioSourceCallback::OnMoreData().
scoped_ptr<AudioBus> audio_bus_;
+ base::ThreadChecker thread_checker_;
+
DISALLOW_COPY_AND_ASSIGN(PulseAudioOutputStream);
};