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

Unified Diff: chrome/renderer/pepper_plugin_delegate_impl.cc

Issue 5202002: changes for proxy audio (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 1 month 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
« no previous file with comments | « no previous file | ppapi/c/dev/ppb_audio_trusted_dev.h » ('j') | webkit/glue/plugins/pepper_audio.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/pepper_plugin_delegate_impl.cc
===================================================================
--- chrome/renderer/pepper_plugin_delegate_impl.cc (revision 66651)
+++ chrome/renderer/pepper_plugin_delegate_impl.cc (working copy)
@@ -123,10 +123,12 @@
class PlatformAudioImpl
: public pepper::PluginDelegate::PlatformAudio,
- public AudioMessageFilter::Delegate {
+ public AudioMessageFilter::Delegate,
+ public base::RefCountedThreadSafe<PlatformAudioImpl> {
public:
explicit PlatformAudioImpl(scoped_refptr<AudioMessageFilter> filter)
- : client_(NULL), filter_(filter), stream_id_(0) {
+ : client_(NULL), filter_(filter), stream_id_(0),
+ main_message_loop_(MessageLoop::current()) {
DCHECK(filter_);
}
@@ -177,6 +179,8 @@
// Our ID on the MessageFilter.
int32 stream_id_;
+ MessageLoop* main_message_loop_;
+
DISALLOW_COPY_AND_ASSIGN(PlatformAudioImpl);
};
@@ -281,6 +285,8 @@
params.params.samples_per_packet = sample_count;
stream_id_ = filter_->AddDelegate(this);
+ AddRef(); // Take a reference for the filter.
+
return filter_->Send(new ViewHostMsg_CreateAudioStream(0, stream_id_, params,
true));
}
@@ -297,7 +303,15 @@
#endif
DCHECK(length);
- client_->StreamCreated(handle, length, socket_handle);
+ if (MessageLoop::current() == main_message_loop_) {
+ if (client_) {
+ client_->StreamCreated(handle, length, socket_handle);
+ }
+ } else {
+ main_message_loop_->PostTask(FROM_HERE,
+ NewRunnableMethod(this, &PlatformAudioImpl::OnLowLatencyCreated,
+ handle, socket_handle, length));
+ }
}
void PlatformAudioImpl::ShutDown() {
@@ -307,8 +321,14 @@
}
filter_->Send(new ViewHostMsg_CloseAudioStream(0, stream_id_));
filter_->RemoveDelegate(stream_id_);
+ // Release reference taken for the filter on the IO thread so that
+ // we avoid race problems with OnLowLatencyCreated.
+ filter_->message_loop()->ReleaseSoon(FROM_HERE, this);
brettw 2010/11/23 07:10:19 I'm confused about this since it looks like you're
nfullagar 2010/11/23 21:51:17 After talking with Darin, we removed one AddRef an
+
stream_id_ = 0;
client_ = NULL;
+
+ Release(); // May end up deleting ourselves.
}
// Implements the VideoDecoder.
@@ -560,7 +580,7 @@
pepper::PluginDelegate::PlatformAudio* PepperPluginDelegateImpl::CreateAudio(
uint32_t sample_rate, uint32_t sample_count,
pepper::PluginDelegate::PlatformAudio::Client* client) {
- scoped_ptr<PlatformAudioImpl> audio(
+ scoped_refptr<PlatformAudioImpl> audio(
new PlatformAudioImpl(render_view_->audio_message_filter()));
if (audio->Initialize(sample_rate, sample_count, client)) {
return audio.release();
« no previous file with comments | « no previous file | ppapi/c/dev/ppb_audio_trusted_dev.h » ('j') | webkit/glue/plugins/pepper_audio.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698