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

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

Issue 12263013: media: Add support for playback of VP8 Alpha video streams (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase and fixes for comments on previous patchset Created 7 years, 9 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 | « no previous file | chrome/app/generated_resources.grd » ('j') | media/base/decoder_buffer.cc » ('J')
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/logging.h" 7 #include "base/logging.h"
8 #include "cc/base/math_util.h" 8 #include "cc/base/math_util.h"
9 #include "cc/layers/quad_sink.h" 9 #include "cc/layers/quad_sink.h"
10 #include "cc/layers/video_frame_provider_client_impl.h" 10 #include "cc/layers/video_frame_provider_client_impl.h"
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 return; 126 return;
127 } 127 }
128 128
129 // TODO: If we're in software compositing mode, we do the YUV -> RGB 129 // TODO: If we're in software compositing mode, we do the YUV -> RGB
130 // conversion here. That involves an extra copy of each frame to a bitmap. 130 // conversion here. That involves an extra copy of each frame to a bitmap.
131 // Obviously, this is suboptimal and should be addressed once ubercompositor 131 // Obviously, this is suboptimal and should be addressed once ubercompositor
132 // starts shaping up. 132 // starts shaping up.
133 convert_yuv_ = 133 convert_yuv_ =
134 resource_provider->default_resource_type() == ResourceProvider::Bitmap && 134 resource_provider->default_resource_type() == ResourceProvider::Bitmap &&
135 (format_ == media::VideoFrame::YV12 || 135 (format_ == media::VideoFrame::YV12 ||
136 format_ == media::VideoFrame::YV12A ||
136 format_ == media::VideoFrame::YV16); 137 format_ == media::VideoFrame::YV16);
137 138
138 if (convert_yuv_) 139 if (convert_yuv_)
139 format_ = media::VideoFrame::RGB32; 140 format_ = media::VideoFrame::RGB32;
140 141
141 if (!SetupFramePlanes(resource_provider)) { 142 if (!SetupFramePlanes(resource_provider)) {
142 provider_client_impl_->PutCurrentFrame(frame_); 143 provider_client_impl_->PutCurrentFrame(frame_);
143 frame_ = NULL; 144 frame_ = NULL;
144 return; 145 return;
145 } 146 }
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 yuv_video_quad->SetNew(shared_quad_state, 210 yuv_video_quad->SetNew(shared_quad_state,
210 quad_rect, 211 quad_rect,
211 opaque_rect, 212 opaque_rect,
212 tex_scale, 213 tex_scale,
213 y_plane, 214 y_plane,
214 u_plane, 215 u_plane,
215 v_plane); 216 v_plane);
216 quad_sink->Append(yuv_video_quad.PassAs<DrawQuad>(), append_quads_data); 217 quad_sink->Append(yuv_video_quad.PassAs<DrawQuad>(), append_quads_data);
217 break; 218 break;
218 } 219 }
220 case media::VideoFrame::YV12A: {
221 // YUV software decoder.
222 const FramePlane& y_plane = frame_planes_[media::VideoFrame::kYPlane];
223 const FramePlane& u_plane = frame_planes_[media::VideoFrame::kUPlane];
224 const FramePlane& v_plane = frame_planes_[media::VideoFrame::kVPlane];
225 const FramePlane& a_plane = frame_planes_[media::VideoFrame::kAPlane];
226 gfx::SizeF tex_scale(tex_width_scale, tex_height_scale);
227 scoped_ptr<YUVVideoDrawQuad> yuva_video_quad = YUVVideoDrawQuad::Create();
228 yuva_video_quad->SetNew(shared_quad_state,
229 quad_rect,
230 opaque_rect,
231 tex_scale,
232 y_plane,
233 u_plane,
234 v_plane,
235 a_plane);
236 quad_sink->Append(yuva_video_quad.PassAs<DrawQuad>(), append_quads_data);
237 break;
238 }
219 case media::VideoFrame::RGB32: { 239 case media::VideoFrame::RGB32: {
220 // RGBA software decoder: a converted YUV frame (see: convert_yuv_). 240 // RGBA software decoder: a converted YUV frame (see: convert_yuv_).
221 const FramePlane& plane = frame_planes_[media::VideoFrame::kRGBPlane]; 241 const FramePlane& plane = frame_planes_[media::VideoFrame::kRGBPlane];
222 bool premultiplied_alpha = true; 242 bool premultiplied_alpha = true;
223 gfx::PointF uv_top_left(0.f, 0.f); 243 gfx::PointF uv_top_left(0.f, 0.f);
224 gfx::PointF uv_bottom_right(tex_width_scale, tex_height_scale); 244 gfx::PointF uv_bottom_right(tex_width_scale, tex_height_scale);
225 float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f}; 245 float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f};
226 bool flipped = false; 246 bool flipped = false;
227 scoped_ptr<TextureDrawQuad> texture_quad = TextureDrawQuad::Create(); 247 scoped_ptr<TextureDrawQuad> texture_quad = TextureDrawQuad::Create();
228 texture_quad->SetNew(shared_quad_state, 248 texture_quad->SetNew(shared_quad_state,
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 provider_client_impl_->PutCurrentFrame(frame_); 345 provider_client_impl_->PutCurrentFrame(frame_);
326 frame_ = NULL; 346 frame_ = NULL;
327 347
328 provider_client_impl_->ReleaseLock(); 348 provider_client_impl_->ReleaseLock();
329 } 349 }
330 350
331 static gfx::Size VideoFrameDimension(media::VideoFrame* frame, int plane) { 351 static gfx::Size VideoFrameDimension(media::VideoFrame* frame, int plane) {
332 gfx::Size dimensions = frame->coded_size(); 352 gfx::Size dimensions = frame->coded_size();
333 switch (frame->format()) { 353 switch (frame->format()) {
334 case media::VideoFrame::YV12: 354 case media::VideoFrame::YV12:
335 if (plane != media::VideoFrame::kYPlane) { 355 case media::VideoFrame::YV12A:
356 if (plane != media::VideoFrame::kYPlane &&
357 plane != media::VideoFrame::kAPlane) {
336 dimensions.set_width(dimensions.width() / 2); 358 dimensions.set_width(dimensions.width() / 2);
337 dimensions.set_height(dimensions.height() / 2); 359 dimensions.set_height(dimensions.height() / 2);
338 } 360 }
339 break; 361 break;
340 case media::VideoFrame::YV16: 362 case media::VideoFrame::YV16:
341 if (plane != media::VideoFrame::kYPlane) 363 if (plane != media::VideoFrame::kYPlane)
342 dimensions.set_width(dimensions.width() / 2); 364 dimensions.set_width(dimensions.width() / 2);
343 break; 365 break;
344 default: 366 default:
345 break; 367 break;
(...skipping 17 matching lines...) Expand all
363 385
364 resource_provider->DeleteResource(resource_id); 386 resource_provider->DeleteResource(resource_id);
365 resource_id = 0; 387 resource_id = 0;
366 } 388 }
367 389
368 // Convert media::VideoFrame::Format to OpenGL enum values. 390 // Convert media::VideoFrame::Format to OpenGL enum values.
369 static GLenum ConvertVFCFormatToGLenum(const media::VideoFrame::Format format) { 391 static GLenum ConvertVFCFormatToGLenum(const media::VideoFrame::Format format) {
370 switch (format) { 392 switch (format) {
371 case media::VideoFrame::YV12: 393 case media::VideoFrame::YV12:
372 case media::VideoFrame::YV16: 394 case media::VideoFrame::YV16:
395 case media::VideoFrame::YV12A:
373 return GL_LUMINANCE; 396 return GL_LUMINANCE;
374 case media::VideoFrame::RGB32: 397 case media::VideoFrame::RGB32:
375 return GL_RGBA; 398 return GL_RGBA;
376 case media::VideoFrame::NATIVE_TEXTURE: 399 case media::VideoFrame::NATIVE_TEXTURE:
377 #if defined(GOOGLE_TV) 400 #if defined(GOOGLE_TV)
378 case media::VideoFrame::HOLE: 401 case media::VideoFrame::HOLE:
379 #endif 402 #endif
380 case media::VideoFrame::INVALID: 403 case media::VideoFrame::INVALID:
381 case media::VideoFrame::EMPTY: 404 case media::VideoFrame::EMPTY:
382 case media::VideoFrame::I420: 405 case media::VideoFrame::I420:
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
471 void VideoLayerImpl::SetProviderClientImpl( 494 void VideoLayerImpl::SetProviderClientImpl(
472 scoped_refptr<VideoFrameProviderClientImpl> provider_client_impl) { 495 scoped_refptr<VideoFrameProviderClientImpl> provider_client_impl) {
473 provider_client_impl_ = provider_client_impl; 496 provider_client_impl_ = provider_client_impl;
474 } 497 }
475 498
476 const char* VideoLayerImpl::LayerTypeAsString() const { 499 const char* VideoLayerImpl::LayerTypeAsString() const {
477 return "VideoLayer"; 500 return "VideoLayer";
478 } 501 }
479 502
480 } // namespace cc 503 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | chrome/app/generated_resources.grd » ('j') | media/base/decoder_buffer.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698