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

Side by Side Diff: content/renderer/media/webmediaplayer_ms.cc

Issue 1737253002: Handle Alpha channel in Canvas capture (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "content/renderer/media/webmediaplayer_ms.h" 5 #include "content/renderer/media/webmediaplayer_ms.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <limits> 8 #include <limits>
9 #include <string> 9 #include <string>
10 #include <utility> 10 #include <utility>
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 ->GetGLInterface(); 440 ->GetGLInterface();
441 media::SkCanvasVideoRenderer::CopyVideoFrameSingleTextureToGLTexture( 441 media::SkCanvasVideoRenderer::CopyVideoFrameSingleTextureToGLTexture(
442 gl, video_frame.get(), texture, internal_format, type, premultiply_alpha, 442 gl, video_frame.get(), texture, internal_format, type, premultiply_alpha,
443 flip_y); 443 flip_y);
444 return true; 444 return true;
445 } 445 }
446 446
447 void WebMediaPlayerMS::OnFrameAvailable( 447 void WebMediaPlayerMS::OnFrameAvailable(
448 const scoped_refptr<media::VideoFrame>& frame) { 448 const scoped_refptr<media::VideoFrame>& frame) {
449 DVLOG(3) << __FUNCTION__; 449 DVLOG(3) << __FUNCTION__;
450 DCHECK(thread_checker_.CalledOnValidThread()); 450 DCHECK(thread_checker_.CalledOnValidThread());
mcasas 2016/02/25 22:06:25 nit: DCHECK(I420 or YV12A) ?
emircan 2016/02/26 01:33:08 I don't think it is necessary. VideoResourceUpdate
451 451
452 if (render_frame_suspended_) 452 if (render_frame_suspended_)
453 return; 453 return;
454 454
455 base::TimeTicks render_time; 455 base::TimeTicks render_time;
456 if (frame->metadata()->GetTimeTicks(media::VideoFrameMetadata::REFERENCE_TIME, 456 if (frame->metadata()->GetTimeTicks(media::VideoFrameMetadata::REFERENCE_TIME,
457 &render_time)) { 457 &render_time)) {
458 TRACE_EVENT1("webrtc", "WebMediaPlayerMS::OnFrameAvailable", 458 TRACE_EVENT1("webrtc", "WebMediaPlayerMS::OnFrameAvailable",
459 "Ideal Render Instant", render_time.ToInternalValue()); 459 "Ideal Render Instant", render_time.ToInternalValue());
460 } else { 460 } else {
461 TRACE_EVENT0("webrtc", "WebMediaPlayerMS::OnFrameAvailable"); 461 TRACE_EVENT0("webrtc", "WebMediaPlayerMS::OnFrameAvailable");
462 } 462 }
463 463
464 if (!received_first_frame_) { 464 if (!received_first_frame_) {
465 received_first_frame_ = true; 465 received_first_frame_ = true;
466 SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata); 466 SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata);
467 SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData); 467 SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData);
468 468
469 if (video_frame_provider_.get()) { 469 if (video_frame_provider_.get()) {
470 video_weblayer_.reset(new cc_blink::WebLayerImpl( 470 video_weblayer_.reset(new cc_blink::WebLayerImpl(
471 cc::VideoLayer::Create(cc_blink::WebLayerImpl::LayerSettings(), 471 cc::VideoLayer::Create(cc_blink::WebLayerImpl::LayerSettings(),
472 compositor_.get(), media::VIDEO_ROTATION_0))); 472 compositor_.get(), media::VIDEO_ROTATION_0)));
473 video_weblayer_->layer()->SetContentsOpaque(true); 473 video_weblayer_->layer()->SetContentsOpaque(false);
mcasas 2016/02/25 22:06:25 SetContentsOpaque(frame->format() != media::PIXEL_
emircan 2016/02/26 01:33:08 This value is set once. Since we started switching
474 video_weblayer_->SetContentsOpaqueIsFixed(true); 474 video_weblayer_->SetContentsOpaqueIsFixed(true);
475 get_client()->setWebLayer(video_weblayer_.get()); 475 get_client()->setWebLayer(video_weblayer_.get());
476 } 476 }
477 } 477 }
478 478
479 // As EnqueueFrame can potentially change |current_frame_|, we need to do 479 // As EnqueueFrame can potentially change |current_frame_|, we need to do
480 // the size change check before it. Otherwise, we are running the risk of not 480 // the size change check before it. Otherwise, we are running the risk of not
481 // detecting a size change event. 481 // detecting a size change event.
482 const bool size_changed = 482 const bool size_changed =
483 compositor_->GetCurrentSize() != frame->natural_size(); 483 compositor_->GetCurrentSize() != frame->natural_size();
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
516 media::SkCanvasVideoRenderer* WebMediaPlayerMS::GetSkCanvasVideoRenderer() { 516 media::SkCanvasVideoRenderer* WebMediaPlayerMS::GetSkCanvasVideoRenderer() {
517 return &video_renderer_; 517 return &video_renderer_;
518 } 518 }
519 519
520 void WebMediaPlayerMS::ResetCanvasCache() { 520 void WebMediaPlayerMS::ResetCanvasCache() {
521 DCHECK(thread_checker_.CalledOnValidThread()); 521 DCHECK(thread_checker_.CalledOnValidThread());
522 video_renderer_.ResetCache(); 522 video_renderer_.ResetCache();
523 } 523 }
524 524
525 } // namespace content 525 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698