Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(333)

Side by Side Diff: content/common/gpu/stream_texture_manager_android.cc

Issue 22824009: Remove StreamTextureManager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address comments Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « content/common/gpu/stream_texture_manager_android.h ('k') | content/content_common.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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/common/gpu/stream_texture_manager_android.h"
6
7 #include "base/bind.h"
8 #include "content/common/gpu/gpu_channel.h"
9 #include "content/common/gpu/gpu_messages.h"
10 #include "gpu/command_buffer/service/stream_texture.h"
11 #include "ui/gfx/size.h"
12 #include "ui/gl/android/surface_texture_bridge.h"
13 #include "ui/gl/gl_bindings.h"
14
15 namespace content {
16
17 StreamTextureManagerAndroid::StreamTextureAndroid::StreamTextureAndroid(
18 GpuChannel* channel, int service_id)
19 : surface_texture_bridge_(new gfx::SurfaceTextureBridge(service_id)),
20 size_(0, 0),
21 has_updated_(false),
22 channel_(channel) {
23 memset(current_matrix_, 0, sizeof(current_matrix_));
24 }
25
26 StreamTextureManagerAndroid::StreamTextureAndroid::~StreamTextureAndroid() {
27 }
28
29 void StreamTextureManagerAndroid::StreamTextureAndroid::Update() {
30 GLint texture_id = 0;
31 glGetIntegerv(GL_TEXTURE_BINDING_EXTERNAL_OES, &texture_id);
32 surface_texture_bridge_->UpdateTexImage();
33 glBindTexture(GL_TEXTURE_EXTERNAL_OES, texture_id);
34 if (matrix_callback_.is_null())
35 return;
36
37 float mtx[16];
38 surface_texture_bridge_->GetTransformMatrix(mtx);
39
40 // Only query the matrix once we have bound a valid frame.
41 if (has_updated_ && memcmp(current_matrix_, mtx, sizeof(mtx)) != 0) {
42 memcpy(current_matrix_, mtx, sizeof(mtx));
43
44 GpuStreamTextureMsg_MatrixChanged_Params params;
45 memcpy(&params.m00, mtx, sizeof(mtx));
46 matrix_callback_.Run(params);
47 }
48 }
49
50 void StreamTextureManagerAndroid::StreamTextureAndroid::OnFrameAvailable(
51 int route_id) {
52 has_updated_ = true;
53 channel_->Send(new GpuStreamTextureMsg_FrameAvailable(route_id));
54 }
55
56 gfx::Size StreamTextureManagerAndroid::StreamTextureAndroid::GetSize() {
57 return size_;
58 }
59
60 StreamTextureManagerAndroid::StreamTextureManagerAndroid(
61 GpuChannel* channel)
62 : channel_(channel) {
63 }
64
65 StreamTextureManagerAndroid::~StreamTextureManagerAndroid() {
66 DCHECK(textures_.size() == textures_from_service_id_.size());
67 if (!textures_.IsEmpty())
68 LOG(WARNING) << "Undestroyed surface textures while closing GPU channel.";
69 }
70
71 GLuint StreamTextureManagerAndroid::CreateStreamTexture(uint32 service_id,
72 uint32 client_id) {
73 // service_id: the actual GL texture name
74 // client_id: texture name given to the client in the renderer (unused here)
75 // The return value here is what glCreateStreamTextureCHROMIUM() will return
76 // to identify the stream (i.e. surface texture).
77 StreamTextureAndroid* texture = new StreamTextureAndroid(
78 channel_, service_id);
79 textures_from_service_id_.AddWithID(texture, service_id);
80 return textures_.Add(texture);
81 }
82
83 void StreamTextureManagerAndroid::DestroyStreamTexture(uint32 service_id) {
84 gpu::StreamTexture* texture = textures_from_service_id_.Lookup(service_id);
85 if (texture) {
86 textures_from_service_id_.Remove(service_id);
87
88 for (TextureMap::Iterator<StreamTextureAndroid> it(&textures_);
89 !it.IsAtEnd(); it.Advance()) {
90 if (it.GetCurrentValue() == texture) {
91 textures_.Remove(it.GetCurrentKey());
92 break;
93 }
94 }
95 }
96 }
97
98 gpu::StreamTexture* StreamTextureManagerAndroid::LookupStreamTexture(
99 uint32 service_id) {
100 return textures_from_service_id_.Lookup(service_id);
101 }
102
103 void StreamTextureManagerAndroid::SendMatrixChanged(
104 int route_id,
105 const GpuStreamTextureMsg_MatrixChanged_Params& params) {
106 channel_->Send(new GpuStreamTextureMsg_MatrixChanged(route_id, params));
107 }
108
109 void StreamTextureManagerAndroid::RegisterStreamTextureProxy(
110 int32 stream_id, int32 route_id) {
111 StreamTextureAndroid* stream_texture = textures_.Lookup(stream_id);
112 if (stream_texture) {
113 // TODO(sievers): Post from binder thread to IO thread directly.
114 base::Closure frame_cb = base::Bind(
115 &StreamTextureAndroid::OnFrameAvailable,
116 stream_texture->AsWeakPtr(),
117 route_id);
118 StreamTextureAndroid::MatrixChangedCB matrix_cb = base::Bind(
119 &StreamTextureManagerAndroid::SendMatrixChanged,
120 base::Unretained(this),
121 route_id);
122 stream_texture->set_matrix_changed_callback(matrix_cb);
123 stream_texture->surface_texture_bridge()->SetFrameAvailableCallback(
124 frame_cb);
125 }
126 }
127
128 void StreamTextureManagerAndroid::EstablishStreamTexture(
129 int32 stream_id, int32 primary_id, int32 secondary_id) {
130 StreamTextureAndroid* stream_texture = textures_.Lookup(stream_id);
131 base::ProcessHandle process = channel_->renderer_pid();
132
133 if (stream_texture) {
134 SurfaceTexturePeer::GetInstance()->EstablishSurfaceTexturePeer(
135 process,
136 stream_texture->surface_texture_bridge(),
137 primary_id,
138 secondary_id);
139 }
140 }
141
142 void StreamTextureManagerAndroid::SetStreamTextureSize(
143 int32 stream_id, const gfx::Size& size) {
144 StreamTextureAndroid* stream_texture = textures_.Lookup(stream_id);
145 if (stream_texture)
146 stream_texture->SetSize(size);
147 }
148
149 } // namespace content
OLDNEW
« no previous file with comments | « content/common/gpu/stream_texture_manager_android.h ('k') | content/content_common.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698