Index: content/common/gpu/client/gpu_channel_host.cc |
diff --git a/content/common/gpu/client/gpu_channel_host.cc b/content/common/gpu/client/gpu_channel_host.cc |
index aa47e2fd677bad9d115abb27209433292689fe57..c6f1ea66f9c760c34a331b8d2768456a09640be2 100644 |
--- a/content/common/gpu/client/gpu_channel_host.cc |
+++ b/content/common/gpu/client/gpu_channel_host.cc |
@@ -13,6 +13,7 @@ |
#include "base/threading/thread_restrictions.h" |
#include "base/trace_event/trace_event.h" |
#include "content/common/gpu/client/command_buffer_proxy_impl.h" |
+#include "content/common/gpu/client/gpu_jpeg_decode_accelerator_host.h" |
#include "content/common/gpu/gpu_messages.h" |
#include "ipc/ipc_sync_message_filter.h" |
#include "url/gurl.h" |
@@ -256,6 +257,27 @@ scoped_ptr<media::VideoEncodeAccelerator> GpuChannelHost::CreateVideoEncoder( |
return it->second->CreateVideoEncoder(); |
} |
+scoped_ptr<media::JpegDecodeAccelerator> GpuChannelHost::CreateJpegDecoder( |
+ scoped_refptr<base::MessageLoopProxy> reply_loop) { |
+ TRACE_EVENT0("gpu", "GpuChannelHost::CreateJpegDecoder"); |
+ // This function is called from GpuJpegDecoder's capture task thread, which is |
wuchengli
2015/05/06 07:59:18
s/which is//
kcwu
2015/05/08 14:42:42
Acknowledged.
Revised to use jpeg thread.
|
+ // not main thread. |
+ |
+ int32 route_id = GenerateRouteID(); |
+ GpuJpegDecodeAcceleratorHost* decoder(new GpuJpegDecodeAcceleratorHost( |
+ this, route_id, factory_->GetIOLoopProxy())); |
+ |
+ // GpuJpegDecoder's capture task thread (i.e., device thread on Linux) is |
+ // usually waiting for next frame, so decoder responses are sent to |
+ // |reply_loop| directly. |
+ scoped_refptr<base::MessageLoopProxy> io_loop = factory_->GetIOLoopProxy(); |
+ io_loop->PostTask(FROM_HERE, |
+ base::Bind(&GpuChannelHost::MessageFilter::AddRoute, |
+ channel_filter_.get(), route_id, |
+ decoder->AsWeakPtr(), reply_loop)); |
+ return scoped_ptr<media::JpegDecodeAccelerator>(decoder); |
+} |
+ |
void GpuChannelHost::DestroyCommandBuffer( |
CommandBufferProxyImpl* command_buffer) { |
TRACE_EVENT0("gpu", "GpuChannelHost::DestroyCommandBuffer"); |