- add sources.
[platform/framework/web/crosswalk.git] / src / content / renderer / gpu / stream_texture_host_android.cc
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/renderer/gpu/stream_texture_host_android.h"
6
7 #include "content/common/gpu/client/gpu_channel_host.h"
8 #include "content/common/gpu/gpu_messages.h"
9 #include "content/renderer/render_thread_impl.h"
10 #include "ipc/ipc_message_macros.h"
11
12 namespace content {
13
14 StreamTextureHost::StreamTextureHost(GpuChannelHost* channel)
15     : route_id_(MSG_ROUTING_NONE),
16       stream_id_(0),
17       listener_(NULL),
18       channel_(channel),
19       weak_ptr_factory_(this) {
20   DCHECK(channel);
21 }
22
23 StreamTextureHost::~StreamTextureHost() {
24   if (channel_.get() && route_id_ != MSG_ROUTING_NONE)
25     channel_->RemoveRoute(route_id_);
26 }
27
28 bool StreamTextureHost::Initialize(int32 stream_id) {
29   if (channel_.get() && stream_id) {
30     if (channel_->Send(new GpuChannelMsg_RegisterStreamTextureProxy(
31       stream_id, &route_id_))) {
32       stream_id_ = stream_id;
33       channel_->AddRoute(route_id_, weak_ptr_factory_.GetWeakPtr());
34     }
35     return true;
36   }
37
38   return false;
39 }
40
41 bool StreamTextureHost::OnMessageReceived(const IPC::Message& message) {
42   bool handled = true;
43   IPC_BEGIN_MESSAGE_MAP(StreamTextureHost, message)
44     IPC_MESSAGE_HANDLER(GpuStreamTextureMsg_FrameAvailable,
45                         OnFrameAvailable);
46     IPC_MESSAGE_HANDLER(GpuStreamTextureMsg_MatrixChanged,
47                         OnMatrixChanged);
48     IPC_MESSAGE_UNHANDLED(handled = false)
49   IPC_END_MESSAGE_MAP()
50   DCHECK(handled);
51   return handled;
52 }
53
54 void StreamTextureHost::EstablishPeer(int32 primary_id, int32 secondary_id) {
55   if (channel_.get()) {
56     channel_->Send(new GpuChannelMsg_EstablishStreamTexture(
57         stream_id_, primary_id, secondary_id));
58   }
59 }
60 void StreamTextureHost::OnChannelError() {
61 }
62
63 void StreamTextureHost::OnFrameAvailable() {
64   if (listener_)
65     listener_->OnFrameAvailable();
66 }
67
68 void StreamTextureHost::OnMatrixChanged(
69     const GpuStreamTextureMsg_MatrixChanged_Params& params) {
70   COMPILE_ASSERT(sizeof(params) == sizeof(float) * 16,
71                  bad_GpuStreamTextureMsg_MatrixChanged_Params_format);
72   if (listener_)
73     listener_->OnMatrixChanged((const float*)&params);
74 }
75
76 }  // namespace content