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

Unified Diff: content/renderer/media/audio_message_filter.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, 8 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: content/renderer/media/audio_message_filter.cc
diff --git a/content/renderer/media/audio_message_filter.cc b/content/renderer/media/audio_message_filter.cc
index a3bcf6556b68e4551727ce3ce2e665d4035c9b3b..1cb5352be9d6d09f636c5f4c8685901d5b504898 100644
--- a/content/renderer/media/audio_message_filter.cc
+++ b/content/renderer/media/audio_message_filter.cc
@@ -12,56 +12,99 @@
namespace content {
-AudioMessageFilter* AudioMessageFilter::filter_ = NULL;
-
-// static
-AudioMessageFilter* AudioMessageFilter::Get() {
- return filter_;
+namespace {
+const int kStreamIDNotSet = -1;
}
+class AudioMessageFilter::AudioOutputIPCImpl
+ : public NON_EXPORTED_BASE(media::AudioOutputIPC) {
+ public:
+ AudioOutputIPCImpl(const scoped_refptr<AudioMessageFilter>& filter,
+ int render_view_id);
+ virtual ~AudioOutputIPCImpl();
+
+ // media::AudioOutputIPC implementation.
+ virtual void CreateStream(media::AudioOutputIPCDelegate* delegate,
+ const media::AudioParameters& params) OVERRIDE;
+ virtual void PlayStream() OVERRIDE;
+ virtual void PauseStream() OVERRIDE;
+ virtual void CloseStream() OVERRIDE;
+ virtual void SetVolume(double volume) OVERRIDE;
+
+ private:
+ const scoped_refptr<AudioMessageFilter> filter_;
+ const int render_view_id_;
+ int stream_id_;
+};
+
+AudioMessageFilter* AudioMessageFilter::g_filter = NULL;
+
AudioMessageFilter::AudioMessageFilter(
const scoped_refptr<base::MessageLoopProxy>& io_message_loop)
: channel_(NULL),
audio_hardware_config_(NULL),
io_message_loop_(io_message_loop) {
- DCHECK(!filter_);
- filter_ = this;
+ DCHECK(!g_filter);
+ g_filter = this;
}
-int AudioMessageFilter::AddDelegate(media::AudioOutputIPCDelegate* delegate) {
- DCHECK(io_message_loop_->BelongsToCurrentThread());
- return delegates_.Add(delegate);
+AudioMessageFilter::~AudioMessageFilter() {
+ DCHECK_EQ(g_filter, this);
+ g_filter = NULL;
}
-void AudioMessageFilter::RemoveDelegate(int id) {
- DCHECK(io_message_loop_->BelongsToCurrentThread());
- delegates_.Remove(id);
+// static
+AudioMessageFilter* AudioMessageFilter::Get() {
+ return g_filter;
}
-void AudioMessageFilter::CreateStream(int stream_id,
- const media::AudioParameters& params) {
- Send(new AudioHostMsg_CreateStream(stream_id, params));
+AudioMessageFilter::AudioOutputIPCImpl::AudioOutputIPCImpl(
+ const scoped_refptr<AudioMessageFilter>& filter, int render_view_id)
+ : filter_(filter),
+ render_view_id_(render_view_id),
+ stream_id_(kStreamIDNotSet) {}
+
+AudioMessageFilter::AudioOutputIPCImpl::~AudioOutputIPCImpl() {}
+
+scoped_ptr<media::AudioOutputIPC> AudioMessageFilter::CreateAudioOutputIPC(
+ int render_view_id) {
+ DCHECK_GT(render_view_id, 0);
+ return scoped_ptr<media::AudioOutputIPC>(
+ new AudioOutputIPCImpl(this, render_view_id));
}
-void AudioMessageFilter::AssociateStreamWithProducer(int stream_id,
- int render_view_id) {
- Send(new AudioHostMsg_AssociateStreamWithProducer(stream_id, render_view_id));
+void AudioMessageFilter::AudioOutputIPCImpl::CreateStream(
+ media::AudioOutputIPCDelegate* delegate,
+ const media::AudioParameters& params) {
+ DCHECK(filter_->io_message_loop_->BelongsToCurrentThread());
+ DCHECK(delegate);
+ DCHECK_EQ(stream_id_, kStreamIDNotSet);
+ stream_id_ = filter_->delegates_.Add(delegate);
+ filter_->Send(new AudioHostMsg_CreateStream(
+ stream_id_, render_view_id_, params));
}
-void AudioMessageFilter::PlayStream(int stream_id) {
- Send(new AudioHostMsg_PlayStream(stream_id));
+void AudioMessageFilter::AudioOutputIPCImpl::PlayStream() {
+ DCHECK_NE(stream_id_, kStreamIDNotSet);
+ filter_->Send(new AudioHostMsg_PlayStream(stream_id_));
}
-void AudioMessageFilter::PauseStream(int stream_id) {
- Send(new AudioHostMsg_PauseStream(stream_id));
+void AudioMessageFilter::AudioOutputIPCImpl::PauseStream() {
+ DCHECK_NE(stream_id_, kStreamIDNotSet);
+ filter_->Send(new AudioHostMsg_PauseStream(stream_id_));
}
-void AudioMessageFilter::CloseStream(int stream_id) {
- Send(new AudioHostMsg_CloseStream(stream_id));
+void AudioMessageFilter::AudioOutputIPCImpl::CloseStream() {
+ DCHECK(filter_->io_message_loop_->BelongsToCurrentThread());
+ DCHECK_NE(stream_id_, kStreamIDNotSet);
+ filter_->Send(new AudioHostMsg_CloseStream(stream_id_));
+ filter_->delegates_.Remove(stream_id_);
+ stream_id_ = kStreamIDNotSet;
}
-void AudioMessageFilter::SetVolume(int stream_id, double volume) {
- Send(new AudioHostMsg_SetVolume(stream_id, volume));
+void AudioMessageFilter::AudioOutputIPCImpl::SetVolume(double volume) {
+ DCHECK_NE(stream_id_, kStreamIDNotSet);
+ filter_->Send(new AudioHostMsg_SetVolume(stream_id_, volume));
}
void AudioMessageFilter::Send(IPC::Message* message) {
@@ -113,11 +156,6 @@ void AudioMessageFilter::OnChannelClosing() {
}
}
-AudioMessageFilter::~AudioMessageFilter() {
- DCHECK_EQ(filter_, this);
- filter_ = NULL;
-}
-
void AudioMessageFilter::OnStreamCreated(
int stream_id,
base::SharedMemoryHandle handle,
« no previous file with comments | « content/renderer/media/audio_message_filter.h ('k') | content/renderer/media/audio_message_filter_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698