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#ifndef CONTENT_RENDERER_GPU_STREAM_TEXTURE_HOST_ANDROID_H_
6#define CONTENT_RENDERER_GPU_STREAM_TEXTURE_HOST_ANDROID_H_
7
8#include "base/memory/weak_ptr.h"
9#include "content/common/android/surface_texture_peer.h"
10#include "ipc/ipc_listener.h"
11#include "ipc/ipc_message.h"
12
13namespace gfx {
14class Size;
15}
16
17struct GpuStreamTextureMsg_MatrixChanged_Params;
18
19namespace content {
20class GpuChannelHost;
21
22// Class for handling all the IPC messages between the GPU process and
23// StreamTextureProxy.
24class StreamTextureHost : public IPC::Listener {
25 public:
26  explicit StreamTextureHost(GpuChannelHost* channel);
27  virtual ~StreamTextureHost();
28
29  bool Initialize(int32 stream_id);
30
31  // Listener class that is listening to the stream texture updates. It is
32  // implemented by StreamTextureProxyImpl.
33  class Listener {
34   public:
35    virtual void OnFrameAvailable() = 0;
36    virtual void OnMatrixChanged(const float mtx[16]) = 0;
37    virtual ~Listener() {}
38  };
39
40  void SetListener(Listener* listener) { listener_ = listener; }
41
42  // Request the GPU process to create the surface texture and forward it
43  // to the renderer process.
44  void EstablishPeer(int32 primary_id, int32 secondary_id);
45
46  // IPC::Channel::Listener implementation:
47  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
48  virtual void OnChannelError() OVERRIDE;
49
50 private:
51  // Message handlers:
52  void OnFrameAvailable();
53  void OnMatrixChanged(const GpuStreamTextureMsg_MatrixChanged_Params& param);
54
55  int route_id_;
56  int stream_id_;
57  Listener* listener_;
58  scoped_refptr<GpuChannelHost> channel_;
59  base::WeakPtrFactory<StreamTextureHost> weak_ptr_factory_;
60
61  DISALLOW_IMPLICIT_CONSTRUCTORS(StreamTextureHost);
62};
63
64}  // namespace content
65
66#endif  // CONTENT_RENDERER_GPU_STREAM_TEXTURE_HOST_ANDROID_H_
67