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

Side by Side Diff: cc/layers/video_layer_impl.cc

Issue 308193003: Removed QuadSink and MockQuadCuller (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@plumLayerImpl
Patch Set: rm unused line Created 6 years, 6 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
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/layers/video_layer_impl.h" 5 #include "cc/layers/video_layer_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "cc/layers/quad_sink.h"
10 #include "cc/layers/video_frame_provider_client_impl.h" 9 #include "cc/layers/video_frame_provider_client_impl.h"
11 #include "cc/quads/io_surface_draw_quad.h" 10 #include "cc/quads/io_surface_draw_quad.h"
12 #include "cc/quads/stream_video_draw_quad.h" 11 #include "cc/quads/stream_video_draw_quad.h"
13 #include "cc/quads/texture_draw_quad.h" 12 #include "cc/quads/texture_draw_quad.h"
14 #include "cc/quads/yuv_video_draw_quad.h" 13 #include "cc/quads/yuv_video_draw_quad.h"
15 #include "cc/resources/resource_provider.h" 14 #include "cc/resources/resource_provider.h"
16 #include "cc/resources/single_release_callback.h" 15 #include "cc/resources/single_release_callback.h"
17 #include "cc/trees/layer_tree_impl.h" 16 #include "cc/trees/layer_tree_impl.h"
17 #include "cc/trees/occlusion_tracker.h"
18 #include "cc/trees/proxy.h" 18 #include "cc/trees/proxy.h"
19 #include "media/base/video_frame.h" 19 #include "media/base/video_frame.h"
20 20
21 #if defined(VIDEO_HOLE) 21 #if defined(VIDEO_HOLE)
22 #include "cc/quads/solid_color_draw_quad.h" 22 #include "cc/quads/solid_color_draw_quad.h"
23 #endif // defined(VIDEO_HOLE) 23 #endif // defined(VIDEO_HOLE)
24 24
25 namespace cc { 25 namespace cc {
26 26
27 // static 27 // static
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 for (size_t i = 0; i < external_resources.mailboxes.size(); ++i) { 117 for (size_t i = 0; i < external_resources.mailboxes.size(); ++i) {
118 unsigned resource_id = resource_provider->CreateResourceFromTextureMailbox( 118 unsigned resource_id = resource_provider->CreateResourceFromTextureMailbox(
119 external_resources.mailboxes[i], 119 external_resources.mailboxes[i],
120 SingleReleaseCallback::Create(external_resources.release_callbacks[i])); 120 SingleReleaseCallback::Create(external_resources.release_callbacks[i]));
121 frame_resources_.push_back(resource_id); 121 frame_resources_.push_back(resource_id);
122 } 122 }
123 123
124 return true; 124 return true;
125 } 125 }
126 126
127 void VideoLayerImpl::AppendQuads(QuadSink* quad_sink, 127 void VideoLayerImpl::AppendQuads(
128 AppendQuadsData* append_quads_data) { 128 RenderPass* render_pass,
129 const OcclusionTracker<LayerImpl>& occlusion_tracker,
130 AppendQuadsData* append_quads_data) {
129 DCHECK(frame_.get()); 131 DCHECK(frame_.get());
130 132
131 SharedQuadState* shared_quad_state = quad_sink->CreateSharedQuadState(); 133 SharedQuadState* shared_quad_state =
134 render_pass->CreateAndAppendSharedQuadState();
132 PopulateSharedQuadState(shared_quad_state); 135 PopulateSharedQuadState(shared_quad_state);
133 136
134 AppendDebugBorderQuad(quad_sink, shared_quad_state, append_quads_data); 137 AppendDebugBorderQuad(render_pass, shared_quad_state, append_quads_data);
135 138
136 gfx::Rect quad_rect(content_bounds()); 139 gfx::Rect quad_rect(content_bounds());
137 gfx::Rect opaque_rect(contents_opaque() ? quad_rect : gfx::Rect()); 140 gfx::Rect opaque_rect(contents_opaque() ? quad_rect : gfx::Rect());
138 gfx::Rect visible_rect = frame_->visible_rect(); 141 gfx::Rect visible_rect = frame_->visible_rect();
139 gfx::Size coded_size = frame_->coded_size(); 142 gfx::Size coded_size = frame_->coded_size();
140 143
141 gfx::Rect visible_quad_rect = quad_sink->UnoccludedContentRect( 144 gfx::Rect visible_quad_rect = occlusion_tracker.UnoccludedContentRect(
142 this, quad_rect, draw_properties().target_space_transform); 145 this->render_target(),
146 quad_rect,
147 draw_properties().target_space_transform);
143 if (visible_quad_rect.IsEmpty()) 148 if (visible_quad_rect.IsEmpty())
144 return; 149 return;
145 150
146 // Pixels for macroblocked formats. 151 // Pixels for macroblocked formats.
147 const float tex_width_scale = 152 const float tex_width_scale =
148 static_cast<float>(visible_rect.width()) / coded_size.width(); 153 static_cast<float>(visible_rect.width()) / coded_size.width();
149 const float tex_height_scale = 154 const float tex_height_scale =
150 static_cast<float>(visible_rect.height()) / coded_size.height(); 155 static_cast<float>(visible_rect.height()) / coded_size.height();
151 const float tex_x_offset = 156 const float tex_x_offset =
152 static_cast<float>(visible_rect.x()) / coded_size.width(); 157 static_cast<float>(visible_rect.x()) / coded_size.width();
(...skipping 17 matching lines...) Expand all
170 quad_rect, 175 quad_rect,
171 opaque_rect, 176 opaque_rect,
172 visible_quad_rect, 177 visible_quad_rect,
173 software_resources_[0], 178 software_resources_[0],
174 premultiplied_alpha, 179 premultiplied_alpha,
175 uv_top_left, 180 uv_top_left,
176 uv_bottom_right, 181 uv_bottom_right,
177 SK_ColorTRANSPARENT, 182 SK_ColorTRANSPARENT,
178 opacity, 183 opacity,
179 flipped); 184 flipped);
180 quad_sink->Append(texture_quad.PassAs<DrawQuad>()); 185 render_pass->AppendDrawQuad(texture_quad.PassAs<DrawQuad>());
181 break; 186 break;
182 } 187 }
183 case VideoFrameExternalResources::YUV_RESOURCE: { 188 case VideoFrameExternalResources::YUV_RESOURCE: {
184 DCHECK_GE(frame_resources_.size(), 3u); 189 DCHECK_GE(frame_resources_.size(), 3u);
185 if (frame_resources_.size() < 3u) 190 if (frame_resources_.size() < 3u)
186 break; 191 break;
187 YUVVideoDrawQuad::ColorSpace color_space = 192 YUVVideoDrawQuad::ColorSpace color_space =
188 frame_->format() == media::VideoFrame::YV12J 193 frame_->format() == media::VideoFrame::YV12J
189 ? YUVVideoDrawQuad::REC_601_JPEG 194 ? YUVVideoDrawQuad::REC_601_JPEG
190 : YUVVideoDrawQuad::REC_601; 195 : YUVVideoDrawQuad::REC_601;
191 gfx::RectF tex_coord_rect( 196 gfx::RectF tex_coord_rect(
192 tex_x_offset, tex_y_offset, tex_width_scale, tex_height_scale); 197 tex_x_offset, tex_y_offset, tex_width_scale, tex_height_scale);
193 scoped_ptr<YUVVideoDrawQuad> yuv_video_quad = YUVVideoDrawQuad::Create(); 198 scoped_ptr<YUVVideoDrawQuad> yuv_video_quad = YUVVideoDrawQuad::Create();
194 yuv_video_quad->SetNew( 199 yuv_video_quad->SetNew(
195 shared_quad_state, 200 shared_quad_state,
196 quad_rect, 201 quad_rect,
197 opaque_rect, 202 opaque_rect,
198 visible_quad_rect, 203 visible_quad_rect,
199 tex_coord_rect, 204 tex_coord_rect,
200 frame_resources_[0], 205 frame_resources_[0],
201 frame_resources_[1], 206 frame_resources_[1],
202 frame_resources_[2], 207 frame_resources_[2],
203 frame_resources_.size() > 3 ? frame_resources_[3] : 0, 208 frame_resources_.size() > 3 ? frame_resources_[3] : 0,
204 color_space); 209 color_space);
205 quad_sink->Append(yuv_video_quad.PassAs<DrawQuad>()); 210 render_pass->AppendDrawQuad(yuv_video_quad.PassAs<DrawQuad>());
206 break; 211 break;
207 } 212 }
208 case VideoFrameExternalResources::RGB_RESOURCE: { 213 case VideoFrameExternalResources::RGB_RESOURCE: {
209 DCHECK_EQ(frame_resources_.size(), 1u); 214 DCHECK_EQ(frame_resources_.size(), 1u);
210 if (frame_resources_.size() < 1u) 215 if (frame_resources_.size() < 1u)
211 break; 216 break;
212 bool premultiplied_alpha = true; 217 bool premultiplied_alpha = true;
213 gfx::PointF uv_top_left(0.f, 0.f); 218 gfx::PointF uv_top_left(0.f, 0.f);
214 gfx::PointF uv_bottom_right(tex_width_scale, tex_height_scale); 219 gfx::PointF uv_bottom_right(tex_width_scale, tex_height_scale);
215 float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f}; 220 float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f};
216 bool flipped = false; 221 bool flipped = false;
217 scoped_ptr<TextureDrawQuad> texture_quad = TextureDrawQuad::Create(); 222 scoped_ptr<TextureDrawQuad> texture_quad = TextureDrawQuad::Create();
218 texture_quad->SetNew(shared_quad_state, 223 texture_quad->SetNew(shared_quad_state,
219 quad_rect, 224 quad_rect,
220 opaque_rect, 225 opaque_rect,
221 visible_quad_rect, 226 visible_quad_rect,
222 frame_resources_[0], 227 frame_resources_[0],
223 premultiplied_alpha, 228 premultiplied_alpha,
224 uv_top_left, 229 uv_top_left,
225 uv_bottom_right, 230 uv_bottom_right,
226 SK_ColorTRANSPARENT, 231 SK_ColorTRANSPARENT,
227 opacity, 232 opacity,
228 flipped); 233 flipped);
229 quad_sink->Append(texture_quad.PassAs<DrawQuad>()); 234 render_pass->AppendDrawQuad(texture_quad.PassAs<DrawQuad>());
230 break; 235 break;
231 } 236 }
232 case VideoFrameExternalResources::STREAM_TEXTURE_RESOURCE: { 237 case VideoFrameExternalResources::STREAM_TEXTURE_RESOURCE: {
233 DCHECK_EQ(frame_resources_.size(), 1u); 238 DCHECK_EQ(frame_resources_.size(), 1u);
234 if (frame_resources_.size() < 1u) 239 if (frame_resources_.size() < 1u)
235 break; 240 break;
236 gfx::Transform scale; 241 gfx::Transform scale;
237 scale.Scale(tex_width_scale, tex_height_scale); 242 scale.Scale(tex_width_scale, tex_height_scale);
238 scoped_ptr<StreamVideoDrawQuad> stream_video_quad = 243 scoped_ptr<StreamVideoDrawQuad> stream_video_quad =
239 StreamVideoDrawQuad::Create(); 244 StreamVideoDrawQuad::Create();
240 stream_video_quad->SetNew( 245 stream_video_quad->SetNew(
241 shared_quad_state, 246 shared_quad_state,
242 quad_rect, 247 quad_rect,
243 opaque_rect, 248 opaque_rect,
244 visible_quad_rect, 249 visible_quad_rect,
245 frame_resources_[0], 250 frame_resources_[0],
246 scale * provider_client_impl_->stream_texture_matrix()); 251 scale * provider_client_impl_->stream_texture_matrix());
247 quad_sink->Append(stream_video_quad.PassAs<DrawQuad>()); 252 render_pass->AppendDrawQuad(stream_video_quad.PassAs<DrawQuad>());
248 break; 253 break;
249 } 254 }
250 case VideoFrameExternalResources::IO_SURFACE: { 255 case VideoFrameExternalResources::IO_SURFACE: {
251 DCHECK_EQ(frame_resources_.size(), 1u); 256 DCHECK_EQ(frame_resources_.size(), 1u);
252 if (frame_resources_.size() < 1u) 257 if (frame_resources_.size() < 1u)
253 break; 258 break;
254 scoped_ptr<IOSurfaceDrawQuad> io_surface_quad = 259 scoped_ptr<IOSurfaceDrawQuad> io_surface_quad =
255 IOSurfaceDrawQuad::Create(); 260 IOSurfaceDrawQuad::Create();
256 io_surface_quad->SetNew(shared_quad_state, 261 io_surface_quad->SetNew(shared_quad_state,
257 quad_rect, 262 quad_rect,
258 opaque_rect, 263 opaque_rect,
259 visible_quad_rect, 264 visible_quad_rect,
260 visible_rect.size(), 265 visible_rect.size(),
261 frame_resources_[0], 266 frame_resources_[0],
262 IOSurfaceDrawQuad::UNFLIPPED); 267 IOSurfaceDrawQuad::UNFLIPPED);
263 quad_sink->Append(io_surface_quad.PassAs<DrawQuad>()); 268 render_pass->AppendDrawQuad(io_surface_quad.PassAs<DrawQuad>());
264 break; 269 break;
265 } 270 }
266 #if defined(VIDEO_HOLE) 271 #if defined(VIDEO_HOLE)
267 // This block and other blocks wrapped around #if defined(GOOGLE_TV) is not 272 // This block and other blocks wrapped around #if defined(GOOGLE_TV) is not
268 // maintained by the general compositor team. Please contact the following 273 // maintained by the general compositor team. Please contact the following
269 // people instead: 274 // people instead:
270 // 275 //
271 // wonsik@chromium.org 276 // wonsik@chromium.org
272 // ycheo@chromium.org 277 // ycheo@chromium.org
273 case VideoFrameExternalResources::HOLE: { 278 case VideoFrameExternalResources::HOLE: {
274 DCHECK_EQ(frame_resources_.size(), 0u); 279 DCHECK_EQ(frame_resources_.size(), 0u);
275 scoped_ptr<SolidColorDrawQuad> solid_color_draw_quad = 280 scoped_ptr<SolidColorDrawQuad> solid_color_draw_quad =
276 SolidColorDrawQuad::Create(); 281 SolidColorDrawQuad::Create();
277 282
278 // Create a solid color quad with transparent black and force no 283 // Create a solid color quad with transparent black and force no
279 // blending / no anti-aliasing. 284 // blending / no anti-aliasing.
280 gfx::Rect opaque_rect = quad_rect; 285 gfx::Rect opaque_rect = quad_rect;
281 solid_color_draw_quad->SetAll(shared_quad_state, 286 solid_color_draw_quad->SetAll(shared_quad_state,
282 quad_rect, 287 quad_rect,
283 opaque_rect, 288 opaque_rect,
284 visible_quad_rect, 289 visible_quad_rect,
285 false, 290 false,
286 SK_ColorTRANSPARENT, 291 SK_ColorTRANSPARENT,
287 true); 292 true);
288 quad_sink->Append(solid_color_draw_quad.PassAs<DrawQuad>()); 293 render_pass->AppendDrawQuad(solid_color_draw_quad.PassAs<DrawQuad>());
289 break; 294 break;
290 } 295 }
291 #endif // defined(VIDEO_HOLE) 296 #endif // defined(VIDEO_HOLE)
292 case VideoFrameExternalResources::NONE: 297 case VideoFrameExternalResources::NONE:
293 NOTIMPLEMENTED(); 298 NOTIMPLEMENTED();
294 break; 299 break;
295 } 300 }
296 } 301 }
297 302
298 void VideoLayerImpl::DidDraw(ResourceProvider* resource_provider) { 303 void VideoLayerImpl::DidDraw(ResourceProvider* resource_provider) {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 void VideoLayerImpl::SetProviderClientImpl( 336 void VideoLayerImpl::SetProviderClientImpl(
332 scoped_refptr<VideoFrameProviderClientImpl> provider_client_impl) { 337 scoped_refptr<VideoFrameProviderClientImpl> provider_client_impl) {
333 provider_client_impl_ = provider_client_impl; 338 provider_client_impl_ = provider_client_impl;
334 } 339 }
335 340
336 const char* VideoLayerImpl::LayerTypeAsString() const { 341 const char* VideoLayerImpl::LayerTypeAsString() const {
337 return "cc::VideoLayerImpl"; 342 return "cc::VideoLayerImpl";
338 } 343 }
339 344
340 } // namespace cc 345 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698