Index: media/gpu/ipc/service/media_gpu_channel.cc |
diff --git a/media/gpu/ipc/service/media_gpu_channel.cc b/media/gpu/ipc/service/media_gpu_channel.cc |
index 288598ca75b34e5ab39970002ae404c8484b53d5..e7e35440ad9c5b1129c2c453c03febb774c51b53 100644 |
--- a/media/gpu/ipc/service/media_gpu_channel.cc |
+++ b/media/gpu/ipc/service/media_gpu_channel.cc |
@@ -13,25 +13,6 @@ |
namespace media { |
-namespace { |
- |
-void SendCreateJpegDecoderResult( |
- std::unique_ptr<IPC::Message> reply_message, |
- scoped_refptr<base::SingleThreadTaskRunner> io_task_runner, |
- base::WeakPtr<gpu::GpuChannel> channel, |
- scoped_refptr<gpu::GpuChannelMessageFilter> filter, |
- bool result) { |
- GpuChannelMsg_CreateJpegDecoder::WriteReplyParams(reply_message.get(), |
- result); |
- if (io_task_runner->BelongsToCurrentThread()) { |
- filter->Send(reply_message.release()); |
- } else if (channel) { |
- channel->Send(reply_message.release()); |
- } |
-} |
- |
-} // namespace |
- |
class MediaGpuChannelDispatchHelper { |
public: |
MediaGpuChannelDispatchHelper(MediaGpuChannel* channel, int32_t routing_id) |
@@ -64,7 +45,8 @@ class MediaGpuChannelFilter : public IPC::MessageFilter { |
: channel_token_(channel_token) {} |
void OnFilterAdded(IPC::Channel* channel) override { channel_ = channel; } |
- bool Send(IPC::Message* msg) { return channel_->Send(msg); } |
+ |
+ void OnFilterRemoved() override { channel_ = nullptr; } |
bool OnMessageReceived(const IPC::Message& msg) override { |
bool handled = true; |
@@ -82,6 +64,12 @@ class MediaGpuChannelFilter : public IPC::MessageFilter { |
Send(reply_message); |
} |
+ bool Send(IPC::Message* msg) { |
+ if (channel_) |
+ return channel_->Send(msg); |
+ return false; |
+ } |
+ |
private: |
~MediaGpuChannelFilter() override {} |
@@ -93,8 +81,10 @@ MediaGpuChannel::MediaGpuChannel( |
gpu::GpuChannel* channel, |
const base::UnguessableToken& channel_token, |
const AndroidOverlayMojoFactoryCB& overlay_factory_cb) |
- : channel_(channel), overlay_factory_cb_(overlay_factory_cb) { |
- channel_->AddFilter(new MediaGpuChannelFilter(channel_token)); |
+ : channel_(channel), |
+ filter_(new MediaGpuChannelFilter(channel_token)), |
+ overlay_factory_cb_(overlay_factory_cb) { |
+ channel_->AddFilter(filter_.get()); |
} |
MediaGpuChannel::~MediaGpuChannel() {} |
@@ -120,6 +110,25 @@ bool MediaGpuChannel::OnMessageReceived(const IPC::Message& message) { |
return handled; |
} |
+namespace { |
+ |
+void SendCreateJpegDecoderResult( |
+ std::unique_ptr<IPC::Message> reply_message, |
+ scoped_refptr<base::SingleThreadTaskRunner> io_task_runner, |
+ base::WeakPtr<IPC::Sender> channel, |
+ scoped_refptr<MediaGpuChannelFilter> filter, |
+ bool result) { |
+ GpuChannelMsg_CreateJpegDecoder::WriteReplyParams(reply_message.get(), |
+ result); |
+ if (io_task_runner->BelongsToCurrentThread()) { |
+ filter->Send(reply_message.release()); |
+ } else if (channel) { |
+ channel->Send(reply_message.release()); |
+ } |
+} |
+ |
+} // namespace |
+ |
void MediaGpuChannel::OnCreateJpegDecoder(int32_t route_id, |
IPC::Message* reply_msg) { |
std::unique_ptr<IPC::Message> msg(reply_msg); |
@@ -132,9 +141,9 @@ void MediaGpuChannel::OnCreateJpegDecoder(int32_t route_id, |
new GpuJpegDecodeAccelerator(channel_, channel_->io_task_runner())); |
} |
jpeg_decoder_->AddClient( |
- route_id, base::Bind(&SendCreateJpegDecoderResult, base::Passed(&msg), |
- channel_->io_task_runner(), channel_->AsWeakPtr(), |
- channel_->filter())); |
+ route_id, |
+ base::Bind(&SendCreateJpegDecoderResult, base::Passed(&msg), |
+ channel_->io_task_runner(), channel_->AsWeakPtr(), filter_)); |
} |
void MediaGpuChannel::OnCreateVideoDecoder( |