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 488 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
499 // For hidden video element (with style "display:none"), ensure the texture | 499 // For hidden video element (with style "display:none"), ensure the texture |
500 // size is set. | 500 // size is set. |
501 if (!is_remote_ && | 501 if (!is_remote_ && |
502 (cached_stream_texture_size_.width != natural_size_.width || | 502 (cached_stream_texture_size_.width != natural_size_.width || |
503 cached_stream_texture_size_.height != natural_size_.height)) { | 503 cached_stream_texture_size_.height != natural_size_.height)) { |
504 stream_texture_factory_->SetStreamTextureSize( | 504 stream_texture_factory_->SetStreamTextureSize( |
505 stream_id_, gfx::Size(natural_size_.width, natural_size_.height)); | 505 stream_id_, gfx::Size(natural_size_.width, natural_size_.height)); |
506 cached_stream_texture_size_ = natural_size_; | 506 cached_stream_texture_size_ = natural_size_; |
507 } | 507 } |
508 | 508 |
509 uint32 source_texture = web_graphics_context->createTexture(); | |
510 web_graphics_context->waitSyncPoint(mailbox_holder->sync_point); | 509 web_graphics_context->waitSyncPoint(mailbox_holder->sync_point); |
511 | 510 |
512 // Ensure the target of texture is set before copyTextureCHROMIUM, otherwise | 511 // Ensure the target of texture is set before copyTextureCHROMIUM, otherwise |
513 // an invalid texture target may be used for copy texture. | 512 // an invalid texture target may be used for copy texture. |
514 web_graphics_context->bindTexture(mailbox_holder->texture_target, | 513 uint32 source_texture = web_graphics_context->createAndConsumeTextureCHROMIUM( |
515 source_texture); | 514 mailbox_holder->texture_target, mailbox_holder->mailbox.name); |
516 web_graphics_context->consumeTextureCHROMIUM(mailbox_holder->texture_target, | |
517 mailbox_holder->mailbox.name); | |
518 | 515 |
519 // The video is stored in an unmultiplied format, so premultiply if | 516 // The video is stored in an unmultiplied format, so premultiply if |
520 // necessary. | 517 // necessary. |
521 web_graphics_context->pixelStorei(GL_UNPACK_PREMULTIPLY_ALPHA_CHROMIUM, | 518 web_graphics_context->pixelStorei(GL_UNPACK_PREMULTIPLY_ALPHA_CHROMIUM, |
522 premultiply_alpha); | 519 premultiply_alpha); |
523 | 520 |
524 // Application itself needs to take care of setting the right flip_y | 521 // Application itself needs to take care of setting the right flip_y |
525 // value down to get the expected result. | 522 // value down to get the expected result. |
526 // flip_y==true means to reverse the video orientation while | 523 // flip_y==true means to reverse the video orientation while |
527 // flip_y==false means to keep the intrinsic orientation. | 524 // flip_y==false means to keep the intrinsic orientation. |
528 web_graphics_context->pixelStorei(GL_UNPACK_FLIP_Y_CHROMIUM, flip_y); | 525 web_graphics_context->pixelStorei(GL_UNPACK_FLIP_Y_CHROMIUM, flip_y); |
529 web_graphics_context->copyTextureCHROMIUM(GL_TEXTURE_2D, source_texture, | 526 web_graphics_context->copyTextureCHROMIUM(GL_TEXTURE_2D, source_texture, |
530 texture, level, internal_format, | 527 texture, level, internal_format, |
531 type); | 528 type); |
532 web_graphics_context->pixelStorei(GL_UNPACK_FLIP_Y_CHROMIUM, false); | 529 web_graphics_context->pixelStorei(GL_UNPACK_FLIP_Y_CHROMIUM, false); |
533 web_graphics_context->pixelStorei(GL_UNPACK_PREMULTIPLY_ALPHA_CHROMIUM, | 530 web_graphics_context->pixelStorei(GL_UNPACK_PREMULTIPLY_ALPHA_CHROMIUM, |
534 false); | 531 false); |
535 | 532 |
536 if (mailbox_holder->texture_target == GL_TEXTURE_EXTERNAL_OES) | |
537 web_graphics_context->bindTexture(GL_TEXTURE_EXTERNAL_OES, 0); | |
538 else | |
539 web_graphics_context->bindTexture(GL_TEXTURE_2D, texture); | |
540 web_graphics_context->deleteTexture(source_texture); | 533 web_graphics_context->deleteTexture(source_texture); |
541 web_graphics_context->flush(); | 534 web_graphics_context->flush(); |
542 video_frame->AppendReleaseSyncPoint(web_graphics_context->insertSyncPoint()); | 535 video_frame->AppendReleaseSyncPoint(web_graphics_context->insertSyncPoint()); |
543 return true; | 536 return true; |
544 } | 537 } |
545 | 538 |
546 bool WebMediaPlayerAndroid::hasSingleSecurityOrigin() const { | 539 bool WebMediaPlayerAndroid::hasSingleSecurityOrigin() const { |
547 if (info_loader_) | 540 if (info_loader_) |
548 return info_loader_->HasSingleOrigin(); | 541 return info_loader_->HasSingleOrigin(); |
549 // The info loader may have failed. | 542 // The info loader may have failed. |
(...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1017 VideoFrame::CreateHoleFrame(natural_size_); | 1010 VideoFrame::CreateHoleFrame(natural_size_); |
1018 SetCurrentFrameInternal(new_frame); | 1011 SetCurrentFrameInternal(new_frame); |
1019 // Force the client to grab the hole frame. | 1012 // Force the client to grab the hole frame. |
1020 client_->repaint(); | 1013 client_->repaint(); |
1021 } | 1014 } |
1022 #else | 1015 #else |
1023 NOTIMPLEMENTED() << "Hole punching not supported without VIDEO_HOLE flag"; | 1016 NOTIMPLEMENTED() << "Hole punching not supported without VIDEO_HOLE flag"; |
1024 #endif // defined(VIDEO_HOLE) | 1017 #endif // defined(VIDEO_HOLE) |
1025 } else if (!is_remote_ && texture_id_) { | 1018 } else if (!is_remote_ && texture_id_) { |
1026 GLES2Interface* gl = stream_texture_factory_->ContextGL(); | 1019 GLES2Interface* gl = stream_texture_factory_->ContextGL(); |
1027 GLuint texture_id_ref = 0; | |
1028 gl->GenTextures(1, &texture_id_ref); | |
1029 GLuint texture_target = kGLTextureExternalOES; | 1020 GLuint texture_target = kGLTextureExternalOES; |
1030 gl->BindTexture(texture_target, texture_id_ref); | 1021 GLuint texture_id_ref = gl->CreateAndConsumeTextureCHROMIUM( |
1031 gl->ConsumeTextureCHROMIUM(texture_target, texture_mailbox_.name); | 1022 texture_target, texture_mailbox_.name); |
1032 gl->Flush(); | 1023 gl->Flush(); |
1033 GLuint texture_mailbox_sync_point = gl->InsertSyncPointCHROMIUM(); | 1024 GLuint texture_mailbox_sync_point = gl->InsertSyncPointCHROMIUM(); |
1034 | 1025 |
1035 scoped_refptr<VideoFrame> new_frame = VideoFrame::WrapNativeTexture( | 1026 scoped_refptr<VideoFrame> new_frame = VideoFrame::WrapNativeTexture( |
1036 make_scoped_ptr(new gpu::MailboxHolder( | 1027 make_scoped_ptr(new gpu::MailboxHolder( |
1037 texture_mailbox_, texture_target, texture_mailbox_sync_point)), | 1028 texture_mailbox_, texture_target, texture_mailbox_sync_point)), |
1038 media::BindToCurrentLoop(base::Bind( | 1029 media::BindToCurrentLoop(base::Bind( |
1039 &OnReleaseTexture, stream_texture_factory_, texture_id_ref)), | 1030 &OnReleaseTexture, stream_texture_factory_, texture_id_ref)), |
1040 natural_size_, | 1031 natural_size_, |
1041 gfx::Rect(natural_size_), | 1032 gfx::Rect(natural_size_), |
(...skipping 495 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1537 player_manager_->EnterFullscreen(player_id_, frame_); | 1528 player_manager_->EnterFullscreen(player_id_, frame_); |
1538 SetNeedsEstablishPeer(false); | 1529 SetNeedsEstablishPeer(false); |
1539 } | 1530 } |
1540 } | 1531 } |
1541 | 1532 |
1542 bool WebMediaPlayerAndroid::canEnterFullscreen() const { | 1533 bool WebMediaPlayerAndroid::canEnterFullscreen() const { |
1543 return player_manager_->CanEnterFullscreen(frame_); | 1534 return player_manager_->CanEnterFullscreen(frame_); |
1544 } | 1535 } |
1545 | 1536 |
1546 } // namespace content | 1537 } // namespace content |
OLD | NEW |