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

Unified Diff: content/common/gpu/client/gpu_channel_host.cc

Issue 1016773002: MJPEG acceleration for video capture using VAAPI (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: support multiple jpeg decoder Created 5 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/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..e8808fe8a91fe9ae3457a8ae8eb5a331755d6689 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,28 @@ 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 main task thread, which is
wuchengli 2015/04/24 05:54:23 Just call it task thread. main task thread sounds
kcwu 2015/04/30 19:25:40 Done.
+ // not main thread.
+
+ int32 route_id = GenerateRouteID();
+ GpuJpegDecodeAcceleratorHost* decoder(
+ new GpuJpegDecodeAcceleratorHost(this, route_id,
+ factory_->GetIOLoopProxy()));
+
+ // GpuJpegDecoder's main task thread (i.e., device thread on Linux) is
+ // usually blocking wait for next frame, so it expects decoder responses are
wuchengli 2015/04/24 05:54:23 s/blocking wait/waiting/. Here it refers to the m
kcwu 2015/04/30 19:25:40 Done.
+ // send 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));
wuchengli 2015/04/24 05:54:23 Why not just use |io_loop|? reply_loop is always I
kcwu 2015/04/30 19:25:40 I want to make these thread logic stay in GpuJpegD
+ return scoped_ptr<media::JpegDecodeAccelerator>(decoder);
+}
+
void GpuChannelHost::DestroyCommandBuffer(
CommandBufferProxyImpl* command_buffer) {
TRACE_EVENT0("gpu", "GpuChannelHost::DestroyCommandBuffer");

Powered by Google App Engine
This is Rietveld 408576698