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

Unified Diff: media/audio/audio_output_device.cc

Issue 12383016: Merge AssociateStreamWithProducer message into CreateStream message for both audio output and input. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 10 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
Index: media/audio/audio_output_device.cc
diff --git a/media/audio/audio_output_device.cc b/media/audio/audio_output_device.cc
index 093330c855c8ebaa738d38ff7e4694e93bc6de7c..fccb3cfd2ef22449ffc2b961343b4e522497fe26 100644
--- a/media/audio/audio_output_device.cc
+++ b/media/audio/audio_output_device.cc
@@ -40,12 +40,11 @@ class AudioOutputDevice::AudioThreadCallback
};
AudioOutputDevice::AudioOutputDevice(
- AudioOutputIPC* ipc,
+ scoped_ptr<AudioOutputIPC> ipc,
const scoped_refptr<base::MessageLoopProxy>& io_loop)
: ScopedLoopObserver(io_loop),
callback_(NULL),
- ipc_(ipc),
- stream_id_(0),
+ ipc_(ipc.Pass()),
state_(IDLE),
play_on_start_(true),
stopping_hack_(false) {
@@ -109,16 +108,15 @@ bool AudioOutputDevice::SetVolume(double volume) {
void AudioOutputDevice::CreateStreamOnIOThread(const AudioParameters& params) {
DCHECK(message_loop()->BelongsToCurrentThread());
if (state_ == IDLE) {
- stream_id_ = ipc_->AddDelegate(this);
state_ = CREATING_STREAM;
- ipc_->CreateStream(stream_id_, params);
+ ipc_->CreateStream(this, params);
}
}
void AudioOutputDevice::PlayOnIOThread() {
DCHECK(message_loop()->BelongsToCurrentThread());
if (state_ == PAUSED) {
- ipc_->PlayStream(stream_id_);
+ ipc_->PlayStream();
state_ = PLAYING;
play_on_start_ = false;
} else {
@@ -129,9 +127,9 @@ void AudioOutputDevice::PlayOnIOThread() {
void AudioOutputDevice::PauseOnIOThread(bool flush) {
DCHECK(message_loop()->BelongsToCurrentThread());
if (state_ == PLAYING) {
- ipc_->PauseStream(stream_id_);
+ ipc_->PauseStream();
if (flush)
- ipc_->FlushStream(stream_id_);
+ ipc_->FlushStream();
state_ = PAUSED;
} else {
// Note that |flush| isn't relevant here since this is the case where
@@ -143,12 +141,10 @@ void AudioOutputDevice::PauseOnIOThread(bool flush) {
void AudioOutputDevice::ShutDownOnIOThread() {
DCHECK(message_loop()->BelongsToCurrentThread());
- // Make sure we don't call shutdown more than once.
+ // Close the stream, if we haven't already.
if (state_ >= CREATING_STREAM) {
- ipc_->CloseStream(stream_id_);
- ipc_->RemoveDelegate(stream_id_);
+ ipc_->CloseStream();
state_ = IDLE;
- stream_id_ = 0;
}
// We can run into an issue where ShutDownOnIOThread is called right after
@@ -169,7 +165,7 @@ void AudioOutputDevice::ShutDownOnIOThread() {
void AudioOutputDevice::SetVolumeOnIOThread(double volume) {
DCHECK(message_loop()->BelongsToCurrentThread());
if (state_ >= CREATING_STREAM)
- ipc_->SetVolume(stream_id_, volume);
+ ipc_->SetVolume(volume);
}
void AudioOutputDevice::OnStateChanged(AudioOutputIPCDelegate::State state) {
@@ -179,16 +175,25 @@ void AudioOutputDevice::OnStateChanged(AudioOutputIPCDelegate::State state) {
if (state_ < CREATING_STREAM)
return;
- if (state == AudioOutputIPCDelegate::kError) {
- DLOG(WARNING) << "AudioOutputDevice::OnStateChanged(kError)";
- // Don't dereference the callback object if the audio thread
- // is stopped or stopping. That could mean that the callback
- // object has been deleted.
- // TODO(tommi): Add an explicit contract for clearing the callback
- // object. Possibly require calling Initialize again or provide
- // a callback object via Start() and clear it in Stop().
- if (!audio_thread_.IsStopped())
- callback_->OnRenderError();
+ switch (state) {
+ case AudioOutputIPCDelegate::kPlaying:
+ case AudioOutputIPCDelegate::kPaused:
+ NOTIMPLEMENTED();
+ break;
+ case AudioOutputIPCDelegate::kError:
DaleCurtis 2013/03/05 23:29:54 Technically this isn't really implemented either :
miu 2013/03/06 22:36:52 Yep. http://crbug.com/180640
+ DLOG(WARNING) << "AudioOutputDevice::OnStateChanged(kError)";
+ // Don't dereference the callback object if the audio thread
+ // is stopped or stopping. That could mean that the callback
+ // object has been deleted.
+ // TODO(tommi): Add an explicit contract for clearing the callback
+ // object. Possibly require calling Initialize again or provide
+ // a callback object via Start() and clear it in Stop().
+ if (!audio_thread_.IsStopped())
+ callback_->OnRenderError();
+ break;
+ default:
+ NOTREACHED();
+ break;
}
}
@@ -204,6 +209,7 @@ void AudioOutputDevice::OnStreamCreated(
DCHECK_GE(handle.fd, 0);
DCHECK_GE(socket_handle, 0);
#endif
+ DCHECK_LT(0, length);
if (state_ != CREATING_STREAM)
return;
@@ -240,7 +246,7 @@ void AudioOutputDevice::OnStreamCreated(
void AudioOutputDevice::OnIPCClosed() {
DCHECK(message_loop()->BelongsToCurrentThread());
state_ = IPC_CLOSED;
- ipc_ = NULL;
+ ipc_.reset();
}
void AudioOutputDevice::WillDestroyCurrentMessageLoop() {

Powered by Google App Engine
This is Rietveld 408576698