summaryrefslogtreecommitdiffstats
path: root/content/renderer/gpu_video_service_host.h
diff options
context:
space:
mode:
Diffstat (limited to 'content/renderer/gpu_video_service_host.h')
-rw-r--r--content/renderer/gpu_video_service_host.h53
1 files changed, 53 insertions, 0 deletions
diff --git a/content/renderer/gpu_video_service_host.h b/content/renderer/gpu_video_service_host.h
new file mode 100644
index 0000000..543448d
--- /dev/null
+++ b/content/renderer/gpu_video_service_host.h
@@ -0,0 +1,53 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_RENDERER_GPU_VIDEO_SERVICE_HOST_H_
+#define CONTENT_RENDERER_GPU_VIDEO_SERVICE_HOST_H_
+
+#include "base/singleton.h"
+#include "content/renderer/gpu_channel_host.h"
+#include "content/renderer/gpu_video_decoder_host.h"
+#include "ipc/ipc_channel.h"
+#include "media/base/buffers.h"
+#include "media/base/video_frame.h"
+
+// GpuVideoServiceHost lives on IO thread and is used to dispatch IPC messages
+// to GpuVideoDecoderHost objects.
+class GpuVideoServiceHost : public IPC::ChannelProxy::MessageFilter {
+ public:
+ GpuVideoServiceHost();
+
+ // IPC::ChannelProxy::MessageFilter implementations.
+ virtual bool OnMessageReceived(const IPC::Message& message);
+ virtual void OnFilterAdded(IPC::Channel* channel);
+ virtual void OnFilterRemoved();
+ virtual void OnChannelClosing();
+
+ // Called on RenderThread to create a hardware accelerated video decoder
+ // in the GPU process.
+ //
+ // A routing ID for the GLES2 context needs to be provided when creating a
+ // hardware video decoder. This is important because the resources used by
+ // the video decoder needs to be shared with the GLES2 context corresponding
+ // to the RenderView.
+ //
+ // This means that a GPU video decoder is tied to a specific RenderView and
+ // its GLES2 context in the GPU process.
+ //
+ // Returns a GpuVideoDecoderHost as a handle to control the video decoder.
+ GpuVideoDecoderHost* CreateVideoDecoder(int context_route_id);
+
+ private:
+ IPC::Channel* channel_;
+
+ // Router to send messages to a GpuVideoDecoderHost.
+ MessageRouter router_;
+
+ // ID for the next GpuVideoDecoderHost.
+ int32 next_decoder_host_id_;
+
+ DISALLOW_COPY_AND_ASSIGN(GpuVideoServiceHost);
+};
+
+#endif // CONTENT_RENDERER_GPU_VIDEO_SERVICE_HOST_H_