diff options
author | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-02 21:23:11 +0000 |
---|---|---|
committer | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-02 21:23:11 +0000 |
commit | ba65b1f642d37bf33ed99c66498110007d249c65 (patch) | |
tree | 08baa793c615ec0622e3e3191339ffb47c193434 /chrome/gpu | |
parent | 857bff35929a3af15166bd3e7f885e1d7113c050 (diff) | |
download | chromium_src-ba65b1f642d37bf33ed99c66498110007d249c65.zip chromium_src-ba65b1f642d37bf33ed99c66498110007d249c65.tar.gz chromium_src-ba65b1f642d37bf33ed99c66498110007d249c65.tar.bz2 |
Laying down the groundwork for GPU video layers.
This gets --enable-video-layering working when using the GPU backing store. No actual visuals yet, just IPC message passing and a lot of NOTIMPLEMENTED messages.
BUG=33329
TEST=try it out and see if you get lots of NOTIMPLEMENTED messages corresponding with video playback
Review URL: http://codereview.chromium.org/661344
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@40434 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/gpu')
-rw-r--r-- | chrome/gpu/gpu_video_layer_glx.cc | 48 | ||||
-rw-r--r-- | chrome/gpu/gpu_video_layer_glx.h | 46 | ||||
-rw-r--r-- | chrome/gpu/gpu_view_x.cc | 7 | ||||
-rw-r--r-- | chrome/gpu/gpu_view_x.h | 4 |
4 files changed, 105 insertions, 0 deletions
diff --git a/chrome/gpu/gpu_video_layer_glx.cc b/chrome/gpu/gpu_video_layer_glx.cc new file mode 100644 index 0000000..99b4ac6 --- /dev/null +++ b/chrome/gpu/gpu_video_layer_glx.cc @@ -0,0 +1,48 @@ +// 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. + +#include "chrome/gpu/gpu_video_layer_glx.h" + +#include "chrome/common/gpu_messages.h" +#include "chrome/gpu/gpu_thread.h" + +GpuVideoLayerGLX::GpuVideoLayerGLX(GpuViewX* view, + GpuThread* gpu_thread, + int32 routing_id, + const gfx::Size& size) + : view_(view), + gpu_thread_(gpu_thread), + routing_id_(routing_id), + size_(size) { + gpu_thread_->AddRoute(routing_id_, this); +} + +GpuVideoLayerGLX::~GpuVideoLayerGLX() { + gpu_thread_->RemoveRoute(routing_id_); +} + +void GpuVideoLayerGLX::OnMessageReceived(const IPC::Message& msg) { + IPC_BEGIN_MESSAGE_MAP(GpuVideoLayerGLX, msg) + IPC_MESSAGE_HANDLER(GpuMsg_PaintToVideoLayer, OnPaintToVideoLayer) + IPC_END_MESSAGE_MAP_EX() +} + +void GpuVideoLayerGLX::OnChannelConnected(int32 peer_pid) { +} + +void GpuVideoLayerGLX::OnChannelError() { + // FIXME(brettw) does this mean we aren't getting any more messages and we + // should delete outselves? + NOTIMPLEMENTED(); +} + +void GpuVideoLayerGLX::OnPaintToVideoLayer(base::ProcessId source_process_id, + TransportDIB::Id id, + const gfx::Rect& bitmap_rect) { + // TODO(scherkus): implement GPU video layer. + NOTIMPLEMENTED(); + + // TODO(scherkus): we may not need to ACK video layer updates at all. + gpu_thread_->Send(new GpuHostMsg_PaintToVideoLayer_ACK(routing_id_)); +} diff --git a/chrome/gpu/gpu_video_layer_glx.h b/chrome/gpu/gpu_video_layer_glx.h new file mode 100644 index 0000000..772ff6f --- /dev/null +++ b/chrome/gpu/gpu_video_layer_glx.h @@ -0,0 +1,46 @@ +// 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 CHROME_GPU_GPU_VIDEO_LAYER_GLX_H_ +#define CHROME_GPU_GPU_VIDEO_LAYER_GLX_H_ + +#include "base/basictypes.h" +#include "base/process.h" +#include "chrome/common/transport_dib.h" +#include "chrome/common/x11_util.h" +#include "ipc/ipc_channel.h" + +class GpuViewX; +class GpuThread; + +class GpuVideoLayerGLX : public IPC::Channel::Listener { + public: + GpuVideoLayerGLX(GpuViewX* view, + GpuThread* gpu_thread, + int32 routing_id, + const gfx::Size& size); + virtual ~GpuVideoLayerGLX(); + + const gfx::Size& size() const { return size_; } + + // IPC::Channel::Listener implementation. + virtual void OnMessageReceived(const IPC::Message& message); + virtual void OnChannelConnected(int32 peer_pid); + virtual void OnChannelError(); + + private: + // Message handlers. + void OnPaintToVideoLayer(base::ProcessId source_process_id, + TransportDIB::Id id, + const gfx::Rect& bitmap_rect); + + GpuViewX* view_; + GpuThread* gpu_thread_; + int32 routing_id_; + gfx::Size size_; + + DISALLOW_COPY_AND_ASSIGN(GpuVideoLayerGLX); +}; + +#endif // CHROME_GPU_GPU_VIDEO_LAYER_GLX_H_ diff --git a/chrome/gpu/gpu_view_x.cc b/chrome/gpu/gpu_view_x.cc index d52154a..3f698f4 100644 --- a/chrome/gpu/gpu_view_x.cc +++ b/chrome/gpu/gpu_view_x.cc @@ -9,6 +9,7 @@ #include "chrome/gpu/gpu_backing_store_glx.h" #include "chrome/gpu/gpu_backing_store_glx_context.h" #include "chrome/gpu/gpu_thread.h" +#include "chrome/gpu/gpu_video_layer_glx.h" // X stuff must be last since it does "#define Status int" which messes up some // of the header files we indirectly pull in. @@ -39,6 +40,7 @@ GLXContext GpuViewX::BindContext() { void GpuViewX::OnMessageReceived(const IPC::Message& msg) { IPC_BEGIN_MESSAGE_MAP(GpuViewX, msg) IPC_MESSAGE_HANDLER(GpuMsg_NewBackingStore, OnNewBackingStore) + IPC_MESSAGE_HANDLER(GpuMsg_NewVideoLayer, OnNewVideoLayer) IPC_MESSAGE_HANDLER(GpuMsg_WindowPainted, OnWindowPainted) IPC_END_MESSAGE_MAP_EX() } @@ -96,6 +98,11 @@ void GpuViewX::OnNewBackingStore(int32 routing_id, const gfx::Size& size) { new GpuBackingStoreGLX(this, gpu_thread_, routing_id, size)); } +void GpuViewX::OnNewVideoLayer(int32 routing_id, const gfx::Size& size) { + video_layer_.reset( + new GpuVideoLayerGLX(this, gpu_thread_, routing_id, size)); +} + void GpuViewX::OnWindowPainted() { Repaint(); } diff --git a/chrome/gpu/gpu_view_x.h b/chrome/gpu/gpu_view_x.h index 4274f82..413548f 100644 --- a/chrome/gpu/gpu_view_x.h +++ b/chrome/gpu/gpu_view_x.h @@ -13,6 +13,7 @@ class GpuBackingStoreGLX; class GpuThread; +class GpuVideoLayerGLX; namespace gfx { class Rect; @@ -45,6 +46,7 @@ class GpuViewX private: // IPC message handlers. void OnNewBackingStore(int32 routing_id, const gfx::Size& size); + void OnNewVideoLayer(int32 routing_id, const gfx::Size& size); void OnWindowPainted(); GpuThread* gpu_thread_; @@ -54,6 +56,8 @@ class GpuViewX scoped_ptr<GpuBackingStoreGLX> backing_store_; + scoped_ptr<GpuVideoLayerGLX> video_layer_; + DISALLOW_COPY_AND_ASSIGN(GpuViewX); }; |