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

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: rebase 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
« no previous file with comments | « cc/layers/video_layer_impl.h ('k') | cc/output/gl_renderer_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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( 137 AppendDebugBorderQuad(
135 quad_sink, content_bounds(), shared_quad_state, append_quads_data); 138 render_pass, content_bounds(), shared_quad_state, append_quads_data);
136 139
137 gfx::Rect quad_rect(content_bounds()); 140 gfx::Rect quad_rect(content_bounds());
138 gfx::Rect opaque_rect(contents_opaque() ? quad_rect : gfx::Rect()); 141 gfx::Rect opaque_rect(contents_opaque() ? quad_rect : gfx::Rect());
139 gfx::Rect visible_rect = frame_->visible_rect(); 142 gfx::Rect visible_rect = frame_->visible_rect();
140 gfx::Size coded_size = frame_->coded_size(); 143 gfx::Size coded_size = frame_->coded_size();
141 144
142 gfx::Rect visible_quad_rect = quad_sink->UnoccludedContentRect( 145 gfx::Rect visible_quad_rect = occlusion_tracker.UnoccludedContentRect(
143 quad_rect, draw_properties().target_space_transform); 146 quad_rect, draw_properties().target_space_transform);
144 if (visible_quad_rect.IsEmpty()) 147 if (visible_quad_rect.IsEmpty())
145 return; 148 return;
146 149
147 // Pixels for macroblocked formats. 150 // Pixels for macroblocked formats.
148 const float tex_width_scale = 151 const float tex_width_scale =
149 static_cast<float>(visible_rect.width()) / coded_size.width(); 152 static_cast<float>(visible_rect.width()) / coded_size.width();
150 const float tex_height_scale = 153 const float tex_height_scale =
151 static_cast<float>(visible_rect.height()) / coded_size.height(); 154 static_cast<float>(visible_rect.height()) / coded_size.height();
152 const float tex_x_offset = 155 const float tex_x_offset =
(...skipping 18 matching lines...) Expand all
171 quad_rect, 174 quad_rect,
172 opaque_rect, 175 opaque_rect,
173 visible_quad_rect, 176 visible_quad_rect,
174 software_resources_[0], 177 software_resources_[0],
175 premultiplied_alpha, 178 premultiplied_alpha,
176 uv_top_left, 179 uv_top_left,
177 uv_bottom_right, 180 uv_bottom_right,
178 SK_ColorTRANSPARENT, 181 SK_ColorTRANSPARENT,
179 opacity, 182 opacity,
180 flipped); 183 flipped);
181 quad_sink->Append(texture_quad.PassAs<DrawQuad>()); 184 render_pass->AppendDrawQuad(texture_quad.PassAs<DrawQuad>());
182 break; 185 break;
183 } 186 }
184 case VideoFrameExternalResources::YUV_RESOURCE: { 187 case VideoFrameExternalResources::YUV_RESOURCE: {
185 DCHECK_GE(frame_resources_.size(), 3u); 188 DCHECK_GE(frame_resources_.size(), 3u);
186 if (frame_resources_.size() < 3u) 189 if (frame_resources_.size() < 3u)
187 break; 190 break;
188 YUVVideoDrawQuad::ColorSpace color_space = 191 YUVVideoDrawQuad::ColorSpace color_space =
189 frame_->format() == media::VideoFrame::YV12J 192 frame_->format() == media::VideoFrame::YV12J
190 ? YUVVideoDrawQuad::REC_601_JPEG 193 ? YUVVideoDrawQuad::REC_601_JPEG
191 : YUVVideoDrawQuad::REC_601; 194 : YUVVideoDrawQuad::REC_601;
192 gfx::RectF tex_coord_rect( 195 gfx::RectF tex_coord_rect(
193 tex_x_offset, tex_y_offset, tex_width_scale, tex_height_scale); 196 tex_x_offset, tex_y_offset, tex_width_scale, tex_height_scale);
194 scoped_ptr<YUVVideoDrawQuad> yuv_video_quad = YUVVideoDrawQuad::Create(); 197 scoped_ptr<YUVVideoDrawQuad> yuv_video_quad = YUVVideoDrawQuad::Create();
195 yuv_video_quad->SetNew( 198 yuv_video_quad->SetNew(
196 shared_quad_state, 199 shared_quad_state,
197 quad_rect, 200 quad_rect,
198 opaque_rect, 201 opaque_rect,
199 visible_quad_rect, 202 visible_quad_rect,
200 tex_coord_rect, 203 tex_coord_rect,
201 frame_resources_[0], 204 frame_resources_[0],
202 frame_resources_[1], 205 frame_resources_[1],
203 frame_resources_[2], 206 frame_resources_[2],
204 frame_resources_.size() > 3 ? frame_resources_[3] : 0, 207 frame_resources_.size() > 3 ? frame_resources_[3] : 0,
205 color_space); 208 color_space);
206 quad_sink->Append(yuv_video_quad.PassAs<DrawQuad>()); 209 render_pass->AppendDrawQuad(yuv_video_quad.PassAs<DrawQuad>());
207 break; 210 break;
208 } 211 }
209 case VideoFrameExternalResources::RGB_RESOURCE: { 212 case VideoFrameExternalResources::RGB_RESOURCE: {
210 DCHECK_EQ(frame_resources_.size(), 1u); 213 DCHECK_EQ(frame_resources_.size(), 1u);
211 if (frame_resources_.size() < 1u) 214 if (frame_resources_.size() < 1u)
212 break; 215 break;
213 bool premultiplied_alpha = true; 216 bool premultiplied_alpha = true;
214 gfx::PointF uv_top_left(0.f, 0.f); 217 gfx::PointF uv_top_left(0.f, 0.f);
215 gfx::PointF uv_bottom_right(tex_width_scale, tex_height_scale); 218 gfx::PointF uv_bottom_right(tex_width_scale, tex_height_scale);
216 float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f}; 219 float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f};
217 bool flipped = false; 220 bool flipped = false;
218 scoped_ptr<TextureDrawQuad> texture_quad = TextureDrawQuad::Create(); 221 scoped_ptr<TextureDrawQuad> texture_quad = TextureDrawQuad::Create();
219 texture_quad->SetNew(shared_quad_state, 222 texture_quad->SetNew(shared_quad_state,
220 quad_rect, 223 quad_rect,
221 opaque_rect, 224 opaque_rect,
222 visible_quad_rect, 225 visible_quad_rect,
223 frame_resources_[0], 226 frame_resources_[0],
224 premultiplied_alpha, 227 premultiplied_alpha,
225 uv_top_left, 228 uv_top_left,
226 uv_bottom_right, 229 uv_bottom_right,
227 SK_ColorTRANSPARENT, 230 SK_ColorTRANSPARENT,
228 opacity, 231 opacity,
229 flipped); 232 flipped);
230 quad_sink->Append(texture_quad.PassAs<DrawQuad>()); 233 render_pass->AppendDrawQuad(texture_quad.PassAs<DrawQuad>());
231 break; 234 break;
232 } 235 }
233 case VideoFrameExternalResources::STREAM_TEXTURE_RESOURCE: { 236 case VideoFrameExternalResources::STREAM_TEXTURE_RESOURCE: {
234 DCHECK_EQ(frame_resources_.size(), 1u); 237 DCHECK_EQ(frame_resources_.size(), 1u);
235 if (frame_resources_.size() < 1u) 238 if (frame_resources_.size() < 1u)
236 break; 239 break;
237 gfx::Transform scale; 240 gfx::Transform scale;
238 scale.Scale(tex_width_scale, tex_height_scale); 241 scale.Scale(tex_width_scale, tex_height_scale);
239 scoped_ptr<StreamVideoDrawQuad> stream_video_quad = 242 scoped_ptr<StreamVideoDrawQuad> stream_video_quad =
240 StreamVideoDrawQuad::Create(); 243 StreamVideoDrawQuad::Create();
241 stream_video_quad->SetNew( 244 stream_video_quad->SetNew(
242 shared_quad_state, 245 shared_quad_state,
243 quad_rect, 246 quad_rect,
244 opaque_rect, 247 opaque_rect,
245 visible_quad_rect, 248 visible_quad_rect,
246 frame_resources_[0], 249 frame_resources_[0],
247 scale * provider_client_impl_->stream_texture_matrix()); 250 scale * provider_client_impl_->stream_texture_matrix());
248 quad_sink->Append(stream_video_quad.PassAs<DrawQuad>()); 251 render_pass->AppendDrawQuad(stream_video_quad.PassAs<DrawQuad>());
249 break; 252 break;
250 } 253 }
251 case VideoFrameExternalResources::IO_SURFACE: { 254 case VideoFrameExternalResources::IO_SURFACE: {
252 DCHECK_EQ(frame_resources_.size(), 1u); 255 DCHECK_EQ(frame_resources_.size(), 1u);
253 if (frame_resources_.size() < 1u) 256 if (frame_resources_.size() < 1u)
254 break; 257 break;
255 scoped_ptr<IOSurfaceDrawQuad> io_surface_quad = 258 scoped_ptr<IOSurfaceDrawQuad> io_surface_quad =
256 IOSurfaceDrawQuad::Create(); 259 IOSurfaceDrawQuad::Create();
257 io_surface_quad->SetNew(shared_quad_state, 260 io_surface_quad->SetNew(shared_quad_state,
258 quad_rect, 261 quad_rect,
259 opaque_rect, 262 opaque_rect,
260 visible_quad_rect, 263 visible_quad_rect,
261 visible_rect.size(), 264 visible_rect.size(),
262 frame_resources_[0], 265 frame_resources_[0],
263 IOSurfaceDrawQuad::UNFLIPPED); 266 IOSurfaceDrawQuad::UNFLIPPED);
264 quad_sink->Append(io_surface_quad.PassAs<DrawQuad>()); 267 render_pass->AppendDrawQuad(io_surface_quad.PassAs<DrawQuad>());
265 break; 268 break;
266 } 269 }
267 #if defined(VIDEO_HOLE) 270 #if defined(VIDEO_HOLE)
268 // This block and other blocks wrapped around #if defined(GOOGLE_TV) is not 271 // This block and other blocks wrapped around #if defined(GOOGLE_TV) is not
269 // maintained by the general compositor team. Please contact the following 272 // maintained by the general compositor team. Please contact the following
270 // people instead: 273 // people instead:
271 // 274 //
272 // wonsik@chromium.org 275 // wonsik@chromium.org
273 // ycheo@chromium.org 276 // ycheo@chromium.org
274 case VideoFrameExternalResources::HOLE: { 277 case VideoFrameExternalResources::HOLE: {
275 DCHECK_EQ(frame_resources_.size(), 0u); 278 DCHECK_EQ(frame_resources_.size(), 0u);
276 scoped_ptr<SolidColorDrawQuad> solid_color_draw_quad = 279 scoped_ptr<SolidColorDrawQuad> solid_color_draw_quad =
277 SolidColorDrawQuad::Create(); 280 SolidColorDrawQuad::Create();
278 281
279 // Create a solid color quad with transparent black and force no 282 // Create a solid color quad with transparent black and force no
280 // blending / no anti-aliasing. 283 // blending / no anti-aliasing.
281 gfx::Rect opaque_rect = quad_rect; 284 gfx::Rect opaque_rect = quad_rect;
282 solid_color_draw_quad->SetAll(shared_quad_state, 285 solid_color_draw_quad->SetAll(shared_quad_state,
283 quad_rect, 286 quad_rect,
284 opaque_rect, 287 opaque_rect,
285 visible_quad_rect, 288 visible_quad_rect,
286 false, 289 false,
287 SK_ColorTRANSPARENT, 290 SK_ColorTRANSPARENT,
288 true); 291 true);
289 quad_sink->Append(solid_color_draw_quad.PassAs<DrawQuad>()); 292 render_pass->AppendDrawQuad(solid_color_draw_quad.PassAs<DrawQuad>());
290 break; 293 break;
291 } 294 }
292 #endif // defined(VIDEO_HOLE) 295 #endif // defined(VIDEO_HOLE)
293 case VideoFrameExternalResources::NONE: 296 case VideoFrameExternalResources::NONE:
294 NOTIMPLEMENTED(); 297 NOTIMPLEMENTED();
295 break; 298 break;
296 } 299 }
297 } 300 }
298 301
299 void VideoLayerImpl::DidDraw(ResourceProvider* resource_provider) { 302 void VideoLayerImpl::DidDraw(ResourceProvider* resource_provider) {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 void VideoLayerImpl::SetProviderClientImpl( 335 void VideoLayerImpl::SetProviderClientImpl(
333 scoped_refptr<VideoFrameProviderClientImpl> provider_client_impl) { 336 scoped_refptr<VideoFrameProviderClientImpl> provider_client_impl) {
334 provider_client_impl_ = provider_client_impl; 337 provider_client_impl_ = provider_client_impl;
335 } 338 }
336 339
337 const char* VideoLayerImpl::LayerTypeAsString() const { 340 const char* VideoLayerImpl::LayerTypeAsString() const {
338 return "cc::VideoLayerImpl"; 341 return "cc::VideoLayerImpl";
339 } 342 }
340 343
341 } // namespace cc 344 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/video_layer_impl.h ('k') | cc/output/gl_renderer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698