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

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

Issue 2562003003: Fix the size of video textures uploaded to WebGL. (Closed)
Patch Set: Rebased. Fixed Android build. Created 3 years, 11 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 <stddef.h> 7 #include <stddef.h>
8 8
9 #include <limits> 9 #include <limits>
10 10
(...skipping 558 matching lines...) Expand 10 before | Expand all | Expand 10 after
569 canvas->flush(); 569 canvas->flush();
570 gl->DeleteTextures(1, &src_texture); 570 gl->DeleteTextures(1, &src_texture);
571 gl->Flush(); 571 gl->Flush();
572 SyncTokenClientImpl client(gl); 572 SyncTokenClientImpl client(gl);
573 video_frame->UpdateReleaseSyncToken(&client); 573 video_frame->UpdateReleaseSyncToken(&client);
574 } 574 }
575 575
576 bool WebMediaPlayerAndroid::copyVideoTextureToPlatformTexture( 576 bool WebMediaPlayerAndroid::copyVideoTextureToPlatformTexture(
577 gpu::gles2::GLES2Interface* gl, 577 gpu::gles2::GLES2Interface* gl,
578 unsigned int texture, 578 unsigned int texture,
579 unsigned int internal_format,
580 unsigned int type,
581 bool premultiply_alpha, 579 bool premultiply_alpha,
582 bool flip_y) { 580 bool flip_y) {
583 DCHECK(main_thread_checker_.CalledOnValidThread()); 581 DCHECK(main_thread_checker_.CalledOnValidThread());
584 scoped_refptr<VideoFrame> video_frame; 582 scoped_refptr<VideoFrame> video_frame;
585 { 583 {
586 base::AutoLock auto_lock(current_frame_lock_); 584 base::AutoLock auto_lock(current_frame_lock_);
587 video_frame = current_frame_; 585 video_frame = current_frame_;
588 } 586 }
589 587
590 if (!video_frame.get() || !video_frame->HasTextures()) 588 if (!video_frame.get() || !video_frame->HasTextures())
591 return false; 589 return false;
592 DCHECK_EQ(1u, media::VideoFrame::NumPlanes(video_frame->format())); 590 DCHECK_EQ(1u, media::VideoFrame::NumPlanes(video_frame->format()));
593 const gpu::MailboxHolder& mailbox_holder = video_frame->mailbox_holder(0); 591 const gpu::MailboxHolder& mailbox_holder = video_frame->mailbox_holder(0);
594 DCHECK((!is_remote_ && 592 DCHECK((!is_remote_ &&
595 mailbox_holder.texture_target == GL_TEXTURE_EXTERNAL_OES) || 593 mailbox_holder.texture_target == GL_TEXTURE_EXTERNAL_OES) ||
596 (is_remote_ && mailbox_holder.texture_target == GL_TEXTURE_2D)); 594 (is_remote_ && mailbox_holder.texture_target == GL_TEXTURE_2D));
597 595
598 gl->WaitSyncTokenCHROMIUM(mailbox_holder.sync_token.GetConstData()); 596 gl->WaitSyncTokenCHROMIUM(mailbox_holder.sync_token.GetConstData());
599 597
600 // Ensure the target of texture is set before copyTextureCHROMIUM, otherwise 598 // Ensure the target of texture is set before copyTextureCHROMIUM, otherwise
601 // an invalid texture target may be used for copy texture. 599 // an invalid texture target may be used for copy texture.
602 uint32_t src_texture = gl->CreateAndConsumeTextureCHROMIUM( 600 uint32_t src_texture = gl->CreateAndConsumeTextureCHROMIUM(
603 mailbox_holder.texture_target, mailbox_holder.mailbox.name); 601 mailbox_holder.texture_target, mailbox_holder.mailbox.name);
604 602
605 // Application itself needs to take care of setting the right flip_y 603 // Application itself needs to take care of setting the right flip_y
606 // value down to get the expected result. 604 // value down to get the expected result.
607 // flip_y==true means to reverse the video orientation while 605 // flip_y==true means to reverse the video orientation while
608 // flip_y==false means to keep the intrinsic orientation. 606 // flip_y==false means to keep the intrinsic orientation.
609 gl->CopyTextureCHROMIUM(src_texture, 0, texture, 0, internal_format, type,
610 flip_y, premultiply_alpha, false);
611 607
608 // The video's texture might be larger than the natural size because
609 // the encoder might have had to round up to the size of a macroblock.
610 // Make sure to only copy the natural size to avoid putting garbage
611 // into the bottom of the destination texture.
612 const gfx::Size& natural_size = video_frame->natural_size();
613 gl->CopySubTextureCHROMIUM(src_texture, 0, texture, 0,
614 0, 0, 0, 0,
615 natural_size.width(), natural_size.height(),
616 flip_y, premultiply_alpha, false);
612 gl->DeleteTextures(1, &src_texture); 617 gl->DeleteTextures(1, &src_texture);
613 gl->Flush(); 618 gl->Flush();
614 619
615 SyncTokenClientImpl client(gl); 620 SyncTokenClientImpl client(gl);
616 video_frame->UpdateReleaseSyncToken(&client); 621 video_frame->UpdateReleaseSyncToken(&client);
617 return true; 622 return true;
618 } 623 }
619 624
620 bool WebMediaPlayerAndroid::hasSingleSecurityOrigin() const { 625 bool WebMediaPlayerAndroid::hasSingleSecurityOrigin() const {
621 DCHECK(main_thread_checker_.CalledOnValidThread()); 626 DCHECK(main_thread_checker_.CalledOnValidThread());
(...skipping 697 matching lines...) Expand 10 before | Expand all | Expand 10 after
1319 if (base::CommandLine::ForCurrentProcess()->HasSwitch( 1324 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
1320 switches::kDisableMediaSuspend)) { 1325 switches::kDisableMediaSuspend)) {
1321 return false; 1326 return false;
1322 } 1327 }
1323 1328
1324 return base::FeatureList::IsEnabled(media::kResumeBackgroundVideo) && 1329 return base::FeatureList::IsEnabled(media::kResumeBackgroundVideo) &&
1325 hasAudio() && !isRemote() && delegate_ && delegate_->IsHidden(); 1330 hasAudio() && !isRemote() && delegate_ && delegate_->IsHidden();
1326 } 1331 }
1327 1332
1328 } // namespace content 1333 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/android/webmediaplayer_android.h ('k') | content/renderer/media/webmediaplayer_ms.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698