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

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

Issue 1852923002: Enable sampling from DXGI NV12 formats in GLRenderer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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 | « no previous file | cc/output/gl_renderer.h » ('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 <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 uv_top_left, 226 uv_top_left,
227 uv_bottom_right, 227 uv_bottom_right,
228 SK_ColorTRANSPARENT, 228 SK_ColorTRANSPARENT,
229 opacity, 229 opacity,
230 flipped, 230 flipped,
231 nearest_neighbor); 231 nearest_neighbor);
232 ValidateQuadResources(texture_quad); 232 ValidateQuadResources(texture_quad);
233 break; 233 break;
234 } 234 }
235 case VideoFrameExternalResources::YUV_RESOURCE: { 235 case VideoFrameExternalResources::YUV_RESOURCE: {
236 DCHECK_GE(frame_resources_.size(), 3u);
237
238 YUVVideoDrawQuad::ColorSpace color_space = YUVVideoDrawQuad::REC_601; 236 YUVVideoDrawQuad::ColorSpace color_space = YUVVideoDrawQuad::REC_601;
239 int videoframe_color_space; 237 int videoframe_color_space;
240 if (frame_->metadata()->GetInteger(media::VideoFrameMetadata::COLOR_SPACE, 238 if (frame_->metadata()->GetInteger(media::VideoFrameMetadata::COLOR_SPACE,
241 &videoframe_color_space)) { 239 &videoframe_color_space)) {
242 if (videoframe_color_space == media::COLOR_SPACE_JPEG) { 240 if (videoframe_color_space == media::COLOR_SPACE_JPEG) {
243 color_space = YUVVideoDrawQuad::JPEG; 241 color_space = YUVVideoDrawQuad::JPEG;
244 } else if (videoframe_color_space == media::COLOR_SPACE_HD_REC709) { 242 } else if (videoframe_color_space == media::COLOR_SPACE_HD_REC709) {
245 color_space = YUVVideoDrawQuad::REC_709; 243 color_space = YUVVideoDrawQuad::REC_709;
246 } 244 }
247 } 245 }
248 246
249 const gfx::Size ya_tex_size = coded_size; 247 const gfx::Size ya_tex_size = coded_size;
250 gfx::Size uv_tex_size = media::VideoFrame::PlaneSize( 248 gfx::Size uv_tex_size = media::VideoFrame::PlaneSize(
251 frame_->format(), media::VideoFrame::kUPlane, coded_size); 249 frame_->format(), media::VideoFrame::kUPlane, coded_size);
252 250
253 if (frame_->HasTextures()) { 251 if (frame_->HasTextures()) {
254 DCHECK_EQ(media::PIXEL_FORMAT_I420, frame_->format()); 252 if (frame_->format() == media::PIXEL_FORMAT_NV12) {
255 DCHECK_EQ(3u, frame_resources_.size()); // Alpha is not supported yet. 253 DCHECK_EQ(2u, frame_resources_.size());
254 } else {
255 DCHECK_EQ(media::PIXEL_FORMAT_I420, frame_->format());
256 DCHECK_EQ(3u,
257 frame_resources_.size()); // Alpha is not supported yet.
258 }
256 } else { 259 } else {
257 DCHECK(uv_tex_size == 260 DCHECK(uv_tex_size ==
258 media::VideoFrame::PlaneSize( 261 media::VideoFrame::PlaneSize(
259 frame_->format(), media::VideoFrame::kVPlane, coded_size)); 262 frame_->format(), media::VideoFrame::kVPlane, coded_size));
263 DCHECK_GE(frame_resources_.size(), 3u);
260 DCHECK(frame_resources_.size() <= 3 || 264 DCHECK(frame_resources_.size() <= 3 ||
261 ya_tex_size == media::VideoFrame::PlaneSize( 265 ya_tex_size == media::VideoFrame::PlaneSize(
262 frame_->format(), media::VideoFrame::kAPlane, 266 frame_->format(), media::VideoFrame::kAPlane,
263 coded_size)); 267 coded_size));
264 } 268 }
265 269
266 // Compute the UV sub-sampling factor based on the ratio between 270 // Compute the UV sub-sampling factor based on the ratio between
267 // |ya_tex_size| and |uv_tex_size|. 271 // |ya_tex_size| and |uv_tex_size|.
268 float uv_subsampling_factor_x = 272 float uv_subsampling_factor_x =
269 static_cast<float>(ya_tex_size.width()) / uv_tex_size.width(); 273 static_cast<float>(ya_tex_size.width()) / uv_tex_size.width();
270 float uv_subsampling_factor_y = 274 float uv_subsampling_factor_y =
271 static_cast<float>(ya_tex_size.height()) / uv_tex_size.height(); 275 static_cast<float>(ya_tex_size.height()) / uv_tex_size.height();
272 gfx::RectF ya_tex_coord_rect(visible_sample_rect); 276 gfx::RectF ya_tex_coord_rect(visible_sample_rect);
273 gfx::RectF uv_tex_coord_rect( 277 gfx::RectF uv_tex_coord_rect(
274 visible_sample_rect.x() / uv_subsampling_factor_x, 278 visible_sample_rect.x() / uv_subsampling_factor_x,
275 visible_sample_rect.y() / uv_subsampling_factor_y, 279 visible_sample_rect.y() / uv_subsampling_factor_y,
276 visible_sample_rect.width() / uv_subsampling_factor_x, 280 visible_sample_rect.width() / uv_subsampling_factor_x,
277 visible_sample_rect.height() / uv_subsampling_factor_y); 281 visible_sample_rect.height() / uv_subsampling_factor_y);
278 282
279 YUVVideoDrawQuad* yuv_video_quad = 283 YUVVideoDrawQuad* yuv_video_quad =
280 render_pass->CreateAndAppendDrawQuad<YUVVideoDrawQuad>(); 284 render_pass->CreateAndAppendDrawQuad<YUVVideoDrawQuad>();
281 yuv_video_quad->SetNew( 285 yuv_video_quad->SetNew(
282 shared_quad_state, quad_rect, opaque_rect, visible_quad_rect, 286 shared_quad_state, quad_rect, opaque_rect, visible_quad_rect,
283 ya_tex_coord_rect, uv_tex_coord_rect, ya_tex_size, uv_tex_size, 287 ya_tex_coord_rect, uv_tex_coord_rect, ya_tex_size, uv_tex_size,
284 frame_resources_[0].id, frame_resources_[1].id, 288 frame_resources_[0].id, frame_resources_[1].id,
285 frame_resources_[2].id, 289 frame_resources_.size() > 2 ? frame_resources_[2].id
290 : frame_resources_[1].id,
286 frame_resources_.size() > 3 ? frame_resources_[3].id : 0, color_space, 291 frame_resources_.size() > 3 ? frame_resources_[3].id : 0, color_space,
287 frame_resource_offset_, frame_resource_multiplier_); 292 frame_resource_offset_, frame_resource_multiplier_);
288 ValidateQuadResources(yuv_video_quad); 293 ValidateQuadResources(yuv_video_quad);
289 break; 294 break;
290 } 295 }
291 case VideoFrameExternalResources::RGBA_RESOURCE: 296 case VideoFrameExternalResources::RGBA_RESOURCE:
292 case VideoFrameExternalResources::RGBA_PREMULTIPLIED_RESOURCE: 297 case VideoFrameExternalResources::RGBA_PREMULTIPLIED_RESOURCE:
293 case VideoFrameExternalResources::RGB_RESOURCE: { 298 case VideoFrameExternalResources::RGB_RESOURCE: {
294 DCHECK_EQ(frame_resources_.size(), 1u); 299 DCHECK_EQ(frame_resources_.size(), 1u);
295 if (frame_resources_.size() < 1u) 300 if (frame_resources_.size() < 1u)
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
413 void VideoLayerImpl::SetNeedsRedraw() { 418 void VideoLayerImpl::SetNeedsRedraw() {
414 SetUpdateRect(gfx::UnionRects(update_rect(), gfx::Rect(bounds()))); 419 SetUpdateRect(gfx::UnionRects(update_rect(), gfx::Rect(bounds())));
415 layer_tree_impl()->SetNeedsRedraw(); 420 layer_tree_impl()->SetNeedsRedraw();
416 } 421 }
417 422
418 const char* VideoLayerImpl::LayerTypeAsString() const { 423 const char* VideoLayerImpl::LayerTypeAsString() const {
419 return "cc::VideoLayerImpl"; 424 return "cc::VideoLayerImpl";
420 } 425 }
421 426
422 } // namespace cc 427 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | cc/output/gl_renderer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698