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

Side by Side Diff: content/renderer/media/android/webmediaplayer_android.cc

Issue 1315323006: webgl: optimize webgl.texSubImage2D(video) path. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix canvas2d-webgl failures Created 5 years, 2 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/android/webmediaplayer_android.h" 5 #include "content/renderer/media/android/webmediaplayer_android.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "base/android/build_info.h" 9 #include "base/android/build_info.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 616 matching lines...) Expand 10 before | Expand all | Expand 10 after
627 // a new one based on video size. 627 // a new one based on video size.
628 if (!IsSkBitmapProperlySizedTexture(&bitmap_, naturalSize())) { 628 if (!IsSkBitmapProperlySizedTexture(&bitmap_, naturalSize())) {
629 if (!AllocateSkBitmapTexture(provider->grContext(), &bitmap_, 629 if (!AllocateSkBitmapTexture(provider->grContext(), &bitmap_,
630 naturalSize())) { 630 naturalSize())) {
631 return; 631 return;
632 } 632 }
633 } 633 }
634 634
635 unsigned textureId = static_cast<unsigned>( 635 unsigned textureId = static_cast<unsigned>(
636 (bitmap_.getTexture())->getTextureHandle()); 636 (bitmap_.getTexture())->getTextureHandle());
637 if (!copyVideoTextureToPlatformTexture(context3D, textureId, 637 if (!copyVideoTextureToPlatformTexture(
638 GL_RGBA, GL_UNSIGNED_BYTE, true, false)) { 638 context3D,
639 {CopyVideoTextureParams::FullCopy, GL_TEXTURE_2D, textureId, GL_RGBA,
DaleCurtis 2015/10/21 18:35:50 Hmm, does this work by way of a C++11 initializer
dshwang 2015/10/21 19:31:07 Yes, it's by C++11 initializer list; https://googl
DaleCurtis 2015/10/22 00:35:28 Yup, banned wholesale currently https://chromium-c
dshwang 2015/10/22 13:23:03 Thanks for investigation. I replace it to construc
640 GL_UNSIGNED_BYTE, 0, 0, 0, true, false})) {
639 return; 641 return;
640 } 642 }
641 643
642 // Draw the texture based bitmap onto the Canvas. If the canvas is 644 // Draw the texture based bitmap onto the Canvas. If the canvas is
643 // hardware based, this will do a GPU-GPU texture copy. 645 // hardware based, this will do a GPU-GPU texture copy.
644 // If the canvas is software based, the texture based bitmap will be 646 // If the canvas is software based, the texture based bitmap will be
645 // readbacked to system memory then draw onto the canvas. 647 // readbacked to system memory then draw onto the canvas.
646 SkRect dest; 648 SkRect dest;
647 dest.set(rect.x, rect.y, rect.x + rect.width, rect.y + rect.height); 649 dest.set(rect.x, rect.y, rect.x + rect.width, rect.y + rect.height);
648 SkPaint paint; 650 SkPaint paint;
649 paint.setAlpha(alpha); 651 paint.setAlpha(alpha);
650 paint.setXfermodeMode(mode); 652 paint.setXfermodeMode(mode);
651 // It is not necessary to pass the dest into the drawBitmap call since all 653 // It is not necessary to pass the dest into the drawBitmap call since all
652 // the context have been set up before calling paintCurrentFrameInContext. 654 // the context have been set up before calling paintCurrentFrameInContext.
653 canvas->drawBitmapRect(bitmap_, dest, &paint); 655 canvas->drawBitmapRect(bitmap_, dest, &paint);
654 } 656 }
655 657
656 bool WebMediaPlayerAndroid::copyVideoTextureToPlatformTexture( 658 bool WebMediaPlayerAndroid::copyVideoTextureToPlatformTexture(
657 blink::WebGraphicsContext3D* web_graphics_context, 659 blink::WebGraphicsContext3D* web_graphics_context,
658 unsigned int texture, 660 const CopyVideoTextureParams& params) {
659 unsigned int internal_format,
660 unsigned int type,
661 bool premultiply_alpha,
662 bool flip_y) {
663 DCHECK(main_thread_checker_.CalledOnValidThread()); 661 DCHECK(main_thread_checker_.CalledOnValidThread());
662 DCHECK((params.copyType == CopyVideoTextureParams::FullCopy &&
663 !params.xoffset && !params.yoffset) ||
664 (params.copyType == CopyVideoTextureParams::SubCopy &&
665 !params.internalFormat && !params.type));
664 // Don't allow clients to copy an encrypted video frame. 666 // Don't allow clients to copy an encrypted video frame.
665 if (needs_external_surface_) 667 if (needs_external_surface_)
666 return false; 668 return false;
667 669
668 scoped_refptr<VideoFrame> video_frame; 670 scoped_refptr<VideoFrame> video_frame;
669 { 671 {
670 base::AutoLock auto_lock(current_frame_lock_); 672 base::AutoLock auto_lock(current_frame_lock_);
671 video_frame = current_frame_; 673 video_frame = current_frame_;
672 } 674 }
673 675
(...skipping 10 matching lines...) Expand all
684 // Ensure the target of texture is set before copyTextureCHROMIUM, otherwise 686 // Ensure the target of texture is set before copyTextureCHROMIUM, otherwise
685 // an invalid texture target may be used for copy texture. 687 // an invalid texture target may be used for copy texture.
686 uint32 src_texture = 688 uint32 src_texture =
687 web_graphics_context->createAndConsumeTextureCHROMIUM( 689 web_graphics_context->createAndConsumeTextureCHROMIUM(
688 mailbox_holder.texture_target, mailbox_holder.mailbox.name); 690 mailbox_holder.texture_target, mailbox_holder.mailbox.name);
689 691
690 // Application itself needs to take care of setting the right flip_y 692 // Application itself needs to take care of setting the right flip_y
691 // value down to get the expected result. 693 // value down to get the expected result.
692 // flip_y==true means to reverse the video orientation while 694 // flip_y==true means to reverse the video orientation while
693 // flip_y==false means to keep the intrinsic orientation. 695 // flip_y==false means to keep the intrinsic orientation.
694 web_graphics_context->copyTextureCHROMIUM( 696 if (params.copyType == CopyVideoTextureParams::FullCopy) {
695 GL_TEXTURE_2D, src_texture, texture, internal_format, type, 697 web_graphics_context->copyTextureCHROMIUM(
696 flip_y, premultiply_alpha, false); 698 params.target, src_texture, params.texture, params.internalFormat,
699 params.type, params.flipY, params.premultiplyAlpha, false);
700 } else {
701 web_graphics_context->copySubTextureCHROMIUM(
702 params.target, src_texture, params.texture, params.xoffset,
703 params.yoffset, 0, 0, video_frame->natural_size().width(),
704 video_frame->natural_size().height(), params.flipY,
705 params.premultiplyAlpha, false);
706 }
697 707
698 web_graphics_context->deleteTexture(src_texture); 708 web_graphics_context->deleteTexture(src_texture);
699 web_graphics_context->flush(); 709 web_graphics_context->flush();
700 710
701 SyncPointClientImpl client(web_graphics_context); 711 SyncPointClientImpl client(web_graphics_context);
702 video_frame->UpdateReleaseSyncPoint(&client); 712 video_frame->UpdateReleaseSyncPoint(&client);
703 return true; 713 return true;
704 } 714 }
705 715
706 bool WebMediaPlayerAndroid::hasSingleSecurityOrigin() const { 716 bool WebMediaPlayerAndroid::hasSingleSecurityOrigin() const {
(...skipping 1207 matching lines...) Expand 10 before | Expand all | Expand 10 after
1914 1924
1915 bool is_hls = IsHLSStream(); 1925 bool is_hls = IsHLSStream();
1916 UMA_HISTOGRAM_BOOLEAN("Media.Android.IsHttpLiveStreamingMedia", is_hls); 1926 UMA_HISTOGRAM_BOOLEAN("Media.Android.IsHttpLiveStreamingMedia", is_hls);
1917 if (is_hls) { 1927 if (is_hls) {
1918 media::RecordOriginOfHLSPlayback( 1928 media::RecordOriginOfHLSPlayback(
1919 GURL(frame_->document().securityOrigin().toString())); 1929 GURL(frame_->document().securityOrigin().toString()));
1920 } 1930 }
1921 } 1931 }
1922 1932
1923 } // namespace content 1933 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698