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

Unified Diff: content/renderer/media/audio_message_filter.cc

Issue 1323403005: Allow AudioOutputDevice objects to be initialized with a specific hardware output device and store … (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Palmer's comments Created 5 years, 3 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 f37b21cf927986c792f04a118f24f7f3a0937578..0b0916dbbe9396669ba36cb568c8b735579aba8f 100644
--- a/content/renderer/media/audio_message_filter.cc
+++ b/content/renderer/media/audio_message_filter.cc
@@ -28,21 +28,24 @@ class AudioMessageFilter::AudioOutputIPCImpl
~AudioOutputIPCImpl() override;
// media::AudioOutputIPC implementation.
+ void RequestDeviceAuthorization(media::AudioOutputIPCDelegate* delegate,
+ int session_id,
+ const std::string& device_id,
+ const url::Origin& security_origin) override;
void CreateStream(media::AudioOutputIPCDelegate* delegate,
- const media::AudioParameters& params,
- int session_id) override;
+ const media::AudioParameters& params) override;
void PlayStream() override;
void PauseStream() override;
void CloseStream() override;
void SetVolume(double volume) override;
void SwitchOutputDevice(const std::string& device_id,
- const GURL& security_origin,
- int request_id) override;
+ const url::Origin& security_origin) override;
private:
const scoped_refptr<AudioMessageFilter> filter_;
const int render_frame_id_;
int stream_id_;
+ bool stream_created_;
};
AudioMessageFilter* AudioMessageFilter::g_filter = NULL;
@@ -69,7 +72,8 @@ AudioMessageFilter::AudioOutputIPCImpl::AudioOutputIPCImpl(
int render_frame_id)
: filter_(filter),
render_frame_id_(render_frame_id),
- stream_id_(kStreamIDNotSet) {}
+ stream_id_(kStreamIDNotSet),
+ stream_created_(false) {}
AudioMessageFilter::AudioOutputIPCImpl::~AudioOutputIPCImpl() {}
@@ -80,25 +84,42 @@ scoped_ptr<media::AudioOutputIPC> AudioMessageFilter::CreateAudioOutputIPC(
new AudioOutputIPCImpl(this, render_frame_id));
}
-void AudioMessageFilter::AudioOutputIPCImpl::CreateStream(
+void AudioMessageFilter::AudioOutputIPCImpl::RequestDeviceAuthorization(
media::AudioOutputIPCDelegate* delegate,
- const media::AudioParameters& params,
- int session_id) {
+ int session_id,
+ const std::string& device_id,
+ const url::Origin& security_origin) {
DCHECK(filter_->io_task_runner_->BelongsToCurrentThread());
DCHECK(delegate);
DCHECK_EQ(stream_id_, kStreamIDNotSet);
+ DCHECK(!stream_created_);
+
stream_id_ = filter_->delegates_.Add(delegate);
- filter_->Send(new AudioHostMsg_CreateStream(stream_id_, render_frame_id_,
- session_id, params));
+ filter_->Send(new AudioHostMsg_RequestDeviceAuthorization(
+ stream_id_, render_frame_id_, session_id, device_id,
+ url::Origin(security_origin)));
+}
+
+void AudioMessageFilter::AudioOutputIPCImpl::CreateStream(
+ media::AudioOutputIPCDelegate* delegate,
+ const media::AudioParameters& params) {
+ DCHECK(filter_->io_task_runner_->BelongsToCurrentThread());
+ DCHECK(!stream_created_);
+ if (stream_id_ == kStreamIDNotSet)
+ stream_id_ = filter_->delegates_.Add(delegate);
+
+ filter_->Send(
+ new AudioHostMsg_CreateStream(stream_id_, render_frame_id_, params));
+ stream_created_ = true;
}
void AudioMessageFilter::AudioOutputIPCImpl::PlayStream() {
- DCHECK_NE(stream_id_, kStreamIDNotSet);
+ DCHECK(stream_created_);
filter_->Send(new AudioHostMsg_PlayStream(stream_id_));
}
void AudioMessageFilter::AudioOutputIPCImpl::PauseStream() {
- DCHECK_NE(stream_id_, kStreamIDNotSet);
+ DCHECK(stream_created_);
filter_->Send(new AudioHostMsg_PauseStream(stream_id_));
}
@@ -108,22 +129,20 @@ void AudioMessageFilter::AudioOutputIPCImpl::CloseStream() {
filter_->Send(new AudioHostMsg_CloseStream(stream_id_));
filter_->delegates_.Remove(stream_id_);
stream_id_ = kStreamIDNotSet;
+ stream_created_ = false;
}
void AudioMessageFilter::AudioOutputIPCImpl::SetVolume(double volume) {
- DCHECK_NE(stream_id_, kStreamIDNotSet);
+ DCHECK(stream_created_);
filter_->Send(new AudioHostMsg_SetVolume(stream_id_, volume));
}
void AudioMessageFilter::AudioOutputIPCImpl::SwitchOutputDevice(
const std::string& device_id,
- const GURL& security_origin,
- int request_id) {
- DCHECK_NE(stream_id_, kStreamIDNotSet);
- DVLOG(1) << __FUNCTION__
- << "(" << device_id << ", " << security_origin << ")";
+ const url::Origin& security_origin) {
+ DCHECK(stream_created_);
filter_->Send(new AudioHostMsg_SwitchOutputDevice(
- stream_id_, render_frame_id_, device_id, security_origin, request_id));
+ stream_id_, render_frame_id_, device_id, url::Origin(security_origin)));
}
void AudioMessageFilter::Send(IPC::Message* message) {
@@ -139,6 +158,7 @@ bool AudioMessageFilter::OnMessageReceived(const IPC::Message& message) {
DCHECK(io_task_runner_->BelongsToCurrentThread());
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(AudioMessageFilter, message)
+ IPC_MESSAGE_HANDLER(AudioMsg_NotifyDeviceAuthorized, OnDeviceAuthorized)
IPC_MESSAGE_HANDLER(AudioMsg_NotifyStreamCreated, OnStreamCreated)
IPC_MESSAGE_HANDLER(AudioMsg_NotifyStreamStateChanged, OnStreamStateChanged)
IPC_MESSAGE_HANDLER(AudioMsg_NotifyOutputDeviceSwitched,
@@ -176,6 +196,18 @@ void AudioMessageFilter::OnChannelClosing() {
}
}
+void AudioMessageFilter::OnDeviceAuthorized(
+ int stream_id,
+ bool success,
+ const media::AudioParameters& output_params) {
+ DCHECK(io_task_runner_->BelongsToCurrentThread());
+ media::AudioOutputIPCDelegate* delegate = delegates_.Lookup(stream_id);
+ if (!delegate)
+ return;
+
+ delegate->OnDeviceAuthorized(success, output_params);
+}
+
void AudioMessageFilter::OnStreamCreated(
int stream_id,
base::SharedMemoryHandle handle,
@@ -215,18 +247,15 @@ void AudioMessageFilter::OnStreamStateChanged(
void AudioMessageFilter::OnOutputDeviceSwitched(
int stream_id,
- int request_id,
media::SwitchOutputDeviceResult result) {
DCHECK(io_task_runner_->BelongsToCurrentThread());
- DVLOG(1) << __FUNCTION__
- << "(" << stream_id << ", " << request_id << ", " << result << ")";
media::AudioOutputIPCDelegate* delegate = delegates_.Lookup(stream_id);
if (!delegate) {
DLOG(WARNING) << "Got OnOutputDeviceSwitched() event for a nonexistent or"
<< " removed audio renderer. State: " << result;
return;
}
- delegate->OnOutputDeviceSwitched(request_id, result);
+ delegate->OnOutputDeviceSwitched(result);
}
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698