Chromium Code Reviews| OLD | NEW |
|---|---|
| 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/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/callback_helpers.h" | 10 #include "base/callback_helpers.h" |
| (...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 423 } | 423 } |
| 424 | 424 |
| 425 bool WebMediaPlayerAndroid::copyVideoTextureToPlatformTexture( | 425 bool WebMediaPlayerAndroid::copyVideoTextureToPlatformTexture( |
| 426 blink::WebGraphicsContext3D* web_graphics_context, | 426 blink::WebGraphicsContext3D* web_graphics_context, |
| 427 unsigned int texture, | 427 unsigned int texture, |
| 428 unsigned int level, | 428 unsigned int level, |
| 429 unsigned int internal_format, | 429 unsigned int internal_format, |
| 430 unsigned int type, | 430 unsigned int type, |
| 431 bool premultiply_alpha, | 431 bool premultiply_alpha, |
| 432 bool flip_y) { | 432 bool flip_y) { |
| 433 if (is_remote_ || !texture_id_) | 433 // Don't allow clients to copy the texture of encrypted video. |
|
no sievers
2014/03/26 23:51:22
Do we need to do this? There is no texture here to
dshwang
2014/03/27 19:42:57
The result is the same. If return false, WebGLRend
dshwang
2014/03/28 19:19:57
After rethinking, I find 1x1 texture breaks webgl.
| |
| 434 if (needs_external_surface_) | |
| 434 return false; | 435 return false; |
| 435 | 436 |
| 437 scoped_refptr<VideoFrame> video_frame; | |
| 438 { | |
| 439 base::AutoLock auto_lock(current_frame_lock_); | |
| 440 video_frame = current_frame_; | |
| 441 } | |
| 442 | |
| 443 if (!video_frame || | |
| 444 video_frame->format() != media::VideoFrame::NATIVE_TEXTURE) | |
| 445 return false; | |
| 446 DCHECK((!is_remote_ && texture_id_) || | |
| 447 (is_remote_ && remote_playback_texture_id_)); | |
| 448 gpu::MailboxHolder* mailbox_holder = video_frame->mailbox_holder(); | |
| 449 DCHECK((texture_id_ && | |
| 450 mailbox_holder->texture_target == GL_TEXTURE_EXTERNAL_OES) || | |
| 451 (remote_playback_texture_id_ && | |
| 452 mailbox_holder->texture_target == GL_TEXTURE_2D)); | |
| 453 | |
| 436 // For hidden video element (with style "display:none"), ensure the texture | 454 // For hidden video element (with style "display:none"), ensure the texture |
| 437 // size is set. | 455 // size is set. |
| 438 if (cached_stream_texture_size_.width != natural_size_.width || | 456 if (!is_remote_ && |
| 439 cached_stream_texture_size_.height != natural_size_.height) { | 457 (cached_stream_texture_size_.width != natural_size_.width || |
| 458 cached_stream_texture_size_.height != natural_size_.height)) { | |
| 440 stream_texture_factory_->SetStreamTextureSize( | 459 stream_texture_factory_->SetStreamTextureSize( |
| 441 stream_id_, gfx::Size(natural_size_.width, natural_size_.height)); | 460 stream_id_, gfx::Size(natural_size_.width, natural_size_.height)); |
| 442 cached_stream_texture_size_ = natural_size_; | 461 cached_stream_texture_size_ = natural_size_; |
| 443 } | 462 } |
| 444 | 463 |
| 445 uint32 source_texture = web_graphics_context->createTexture(); | 464 uint32 source_texture = web_graphics_context->createTexture(); |
| 446 // This is strictly not necessary, because we flush when we create the | 465 // This is strictly not necessary, because we flush when we create the |
| 447 // one and only stream texture. | 466 // one and only stream texture. |
| 448 web_graphics_context->waitSyncPoint(texture_mailbox_sync_point_); | 467 web_graphics_context->waitSyncPoint(mailbox_holder->sync_point); |
|
no sievers
2014/03/26 23:51:22
Doesn't this change the behavior in that we synchr
dshwang
2014/03/27 19:42:57
We can not make sure web_graphics_context and stre
no sievers
2014/03/28 18:10:25
I think he's talking about possible future semanti
dshwang
2014/03/28 18:30:23
That's good question. mailbox_holder is updated by
dshwang
2014/03/28 19:19:57
In addition, if https://codereview.chromium.org/17
no sievers
2014/03/28 19:47:59
Great, thanks for fixing that!
| |
| 449 | 468 |
| 450 // Ensure the target of texture is set before copyTextureCHROMIUM, otherwise | 469 // Ensure the target of texture is set before copyTextureCHROMIUM, otherwise |
| 451 // an invalid texture target may be used for copy texture. | 470 // an invalid texture target may be used for copy texture. |
| 452 web_graphics_context->bindTexture(GL_TEXTURE_EXTERNAL_OES, source_texture); | 471 web_graphics_context->bindTexture(mailbox_holder->texture_target, |
| 453 web_graphics_context->consumeTextureCHROMIUM(GL_TEXTURE_EXTERNAL_OES, | 472 source_texture); |
| 454 texture_mailbox_.name); | 473 web_graphics_context->consumeTextureCHROMIUM(mailbox_holder->texture_target, |
| 474 mailbox_holder->mailbox.name); | |
| 455 | 475 |
| 456 // The video is stored in an unmultiplied format, so premultiply if | 476 // The video is stored in an unmultiplied format, so premultiply if |
| 457 // necessary. | 477 // necessary. |
| 458 web_graphics_context->pixelStorei(GL_UNPACK_PREMULTIPLY_ALPHA_CHROMIUM, | 478 web_graphics_context->pixelStorei(GL_UNPACK_PREMULTIPLY_ALPHA_CHROMIUM, |
| 459 premultiply_alpha); | 479 premultiply_alpha); |
| 460 | 480 |
| 461 // Application itself needs to take care of setting the right flip_y | 481 // Application itself needs to take care of setting the right flip_y |
| 462 // value down to get the expected result. | 482 // value down to get the expected result. |
| 463 // flip_y==true means to reverse the video orientation while | 483 // flip_y==true means to reverse the video orientation while |
| 464 // flip_y==false means to keep the intrinsic orientation. | 484 // flip_y==false means to keep the intrinsic orientation. |
| 465 web_graphics_context->pixelStorei(GL_UNPACK_FLIP_Y_CHROMIUM, flip_y); | 485 web_graphics_context->pixelStorei(GL_UNPACK_FLIP_Y_CHROMIUM, flip_y); |
|
no sievers
2014/03/26 23:51:22
Aren't flip_y and premultiply_alpha incorrect here
dshwang
2014/03/27 19:42:57
both stream texture and remote playback texture ha
| |
| 466 web_graphics_context->copyTextureCHROMIUM(GL_TEXTURE_2D, source_texture, | 486 web_graphics_context->copyTextureCHROMIUM(GL_TEXTURE_2D, source_texture, |
| 467 texture, level, internal_format, | 487 texture, level, internal_format, |
| 468 type); | 488 type); |
| 469 web_graphics_context->pixelStorei(GL_UNPACK_FLIP_Y_CHROMIUM, false); | 489 web_graphics_context->pixelStorei(GL_UNPACK_FLIP_Y_CHROMIUM, false); |
| 470 web_graphics_context->pixelStorei(GL_UNPACK_PREMULTIPLY_ALPHA_CHROMIUM, | 490 web_graphics_context->pixelStorei(GL_UNPACK_PREMULTIPLY_ALPHA_CHROMIUM, |
| 471 false); | 491 false); |
| 472 | 492 |
| 473 web_graphics_context->bindTexture(GL_TEXTURE_EXTERNAL_OES, 0); | 493 if (mailbox_holder->texture_target == GL_TEXTURE_EXTERNAL_OES) |
| 494 web_graphics_context->bindTexture(GL_TEXTURE_EXTERNAL_OES, 0); | |
| 495 else | |
| 496 web_graphics_context->bindTexture(GL_TEXTURE_2D, texture); | |
| 474 web_graphics_context->deleteTexture(source_texture); | 497 web_graphics_context->deleteTexture(source_texture); |
| 475 web_graphics_context->flush(); | 498 web_graphics_context->flush(); |
| 476 return true; | 499 return true; |
| 477 } | 500 } |
| 478 | 501 |
| 479 bool WebMediaPlayerAndroid::hasSingleSecurityOrigin() const { | 502 bool WebMediaPlayerAndroid::hasSingleSecurityOrigin() const { |
| 480 if (info_loader_) | 503 if (info_loader_) |
| 481 return info_loader_->HasSingleOrigin(); | 504 return info_loader_->HasSingleOrigin(); |
| 482 // The info loader may have failed. | 505 // The info loader may have failed. |
| 483 if (player_type_ == MEDIA_PLAYER_TYPE_URL) | 506 if (player_type_ == MEDIA_PLAYER_TYPE_URL) |
| (...skipping 1004 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1488 | 1511 |
| 1489 void WebMediaPlayerAndroid::exitFullscreen() { | 1512 void WebMediaPlayerAndroid::exitFullscreen() { |
| 1490 manager_->ExitFullscreen(player_id_); | 1513 manager_->ExitFullscreen(player_id_); |
| 1491 } | 1514 } |
| 1492 | 1515 |
| 1493 bool WebMediaPlayerAndroid::canEnterFullscreen() const { | 1516 bool WebMediaPlayerAndroid::canEnterFullscreen() const { |
| 1494 return manager_->CanEnterFullscreen(frame_); | 1517 return manager_->CanEnterFullscreen(frame_); |
| 1495 } | 1518 } |
| 1496 | 1519 |
| 1497 } // namespace content | 1520 } // namespace content |
| OLD | NEW |