1 // Copyright (c) 2013 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.
5 #ifndef CONTENT_COMMON_GPU_STREAM_TEXTURE_ANDROID_H_
6 #define CONTENT_COMMON_GPU_STREAM_TEXTURE_ANDROID_H_
8 #include "base/basictypes.h"
9 #include "base/memory/weak_ptr.h"
10 #include "content/common/gpu/gpu_command_buffer_stub.h"
11 #include "ipc/ipc_listener.h"
12 #include "ui/gl/android/surface_texture.h"
13 #include "ui/gl/gl_image.h"
21 class StreamTexture
: public gfx::GLImage
,
23 public GpuCommandBufferStub::DestructionObserver
{
25 static bool Create(GpuCommandBufferStub
* owner_stub
,
26 uint32 client_texture_id
,
30 StreamTexture(GpuCommandBufferStub
* owner_stub
,
33 ~StreamTexture() override
;
35 // gfx::GLImage implementation:
36 void Destroy(bool have_context
) override
;
37 gfx::Size
GetSize() override
;
38 unsigned GetInternalFormat() override
;
39 bool BindTexImage(unsigned target
) override
;
40 void ReleaseTexImage(unsigned target
) override
;
41 bool CopyTexSubImage(unsigned target
,
42 const gfx::Point
& offset
,
43 const gfx::Rect
& rect
) override
;
44 void WillUseTexImage() override
;
45 void DidUseTexImage() override
{}
46 void WillModifyTexImage() override
{}
47 void DidModifyTexImage() override
{}
48 bool ScheduleOverlayPlane(gfx::AcceleratedWidget widget
,
50 gfx::OverlayTransform transform
,
51 const gfx::Rect
& bounds_rect
,
52 const gfx::RectF
& crop_rect
) override
;
54 // GpuCommandBufferStub::DestructionObserver implementation.
55 void OnWillDestroyStub() override
;
57 // Called when a new frame is available for the SurfaceTexture.
58 void OnFrameAvailable();
60 // IPC::Listener implementation:
61 bool OnMessageReceived(const IPC::Message
& message
) override
;
63 // IPC message handlers:
64 void OnStartListening();
65 void OnEstablishPeer(int32 primary_id
, int32 secondary_id
);
66 void OnSetSize(const gfx::Size
& size
) { size_
= size
; }
68 scoped_refptr
<gfx::SurfaceTexture
> surface_texture_
;
70 // Current transform matrix of the surface texture.
71 float current_matrix_
[16];
73 // Current size of the surface texture.
76 // Whether we ever bound a valid frame.
77 bool has_valid_frame_
;
79 // Whether a new frame is available that we should update to.
80 bool has_pending_frame_
;
82 GpuCommandBufferStub
* owner_stub_
;
86 base::WeakPtrFactory
<StreamTexture
> weak_factory_
;
87 DISALLOW_COPY_AND_ASSIGN(StreamTexture
);
90 } // namespace content
92 #endif // CONTENT_COMMON_GPU_STREAM_TEXTURE_ANDROID_H_