| 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/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 59 // Prefix for histograms related to Encrypted Media Extensions. | 59 // Prefix for histograms related to Encrypted Media Extensions. |
| 60 const char* kMediaEme = "Media.EME."; | 60 const char* kMediaEme = "Media.EME."; |
| 61 } // namespace | 61 } // namespace |
| 62 | 62 |
| 63 namespace content { | 63 namespace content { |
| 64 | 64 |
| 65 // static | 65 // static |
| 66 void WebMediaPlayerAndroid::OnReleaseRemotePlaybackTexture( | 66 void WebMediaPlayerAndroid::OnReleaseRemotePlaybackTexture( |
| 67 const scoped_refptr<base::MessageLoopProxy>& main_loop, | 67 const scoped_refptr<base::MessageLoopProxy>& main_loop, |
| 68 const base::WeakPtr<WebMediaPlayerAndroid>& player, | 68 const base::WeakPtr<WebMediaPlayerAndroid>& player, |
| 69 uint32 sync_point) { | 69 const gpu::MailboxHolder* mailbox_holder) { |
| 70 main_loop->PostTask( | 70 main_loop->PostTask( |
| 71 FROM_HERE, | 71 FROM_HERE, |
| 72 base::Bind(&WebMediaPlayerAndroid::DoReleaseRemotePlaybackTexture, | 72 base::Bind(&WebMediaPlayerAndroid::DoReleaseRemotePlaybackTexture, |
| 73 player, | 73 player, |
| 74 sync_point)); | 74 mailbox_holder->sync_point())); |
| 75 } | 75 } |
| 76 | 76 |
| 77 WebMediaPlayerAndroid::WebMediaPlayerAndroid( | 77 WebMediaPlayerAndroid::WebMediaPlayerAndroid( |
| 78 blink::WebFrame* frame, | 78 blink::WebFrame* frame, |
| 79 blink::WebMediaPlayerClient* client, | 79 blink::WebMediaPlayerClient* client, |
| 80 base::WeakPtr<WebMediaPlayerDelegate> delegate, | 80 base::WeakPtr<WebMediaPlayerDelegate> delegate, |
| 81 RendererMediaPlayerManager* manager, | 81 RendererMediaPlayerManager* manager, |
| 82 StreamTextureFactory* factory, | 82 StreamTextureFactory* factory, |
| 83 const scoped_refptr<base::MessageLoopProxy>& media_loop, | 83 const scoped_refptr<base::MessageLoopProxy>& media_loop, |
| 84 media::MediaLog* media_log) | 84 media::MediaLog* media_log) |
| (...skipping 905 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 990 bitmap.getPixels()); | 990 bitmap.getPixels()); |
| 991 } | 991 } |
| 992 | 992 |
| 993 gpu::Mailbox texture_mailbox; | 993 gpu::Mailbox texture_mailbox; |
| 994 context->genMailboxCHROMIUM(texture_mailbox.name); | 994 context->genMailboxCHROMIUM(texture_mailbox.name); |
| 995 context->produceTextureCHROMIUM(texture_target, texture_mailbox.name); | 995 context->produceTextureCHROMIUM(texture_target, texture_mailbox.name); |
| 996 context->flush(); | 996 context->flush(); |
| 997 unsigned texture_mailbox_sync_point = context->insertSyncPoint(); | 997 unsigned texture_mailbox_sync_point = context->insertSyncPoint(); |
| 998 | 998 |
| 999 scoped_refptr<VideoFrame> new_frame = VideoFrame::WrapNativeTexture( | 999 scoped_refptr<VideoFrame> new_frame = VideoFrame::WrapNativeTexture( |
| 1000 make_scoped_ptr(new VideoFrame::MailboxHolder( | 1000 make_scoped_ptr(new gpu::MailboxHolder( |
| 1001 texture_mailbox, | 1001 texture_mailbox, texture_target, texture_mailbox_sync_point)), |
| 1002 texture_mailbox_sync_point, | 1002 base::Bind(&WebMediaPlayerAndroid::OnReleaseRemotePlaybackTexture, |
| 1003 base::Bind(&WebMediaPlayerAndroid::OnReleaseRemotePlaybackTexture, | 1003 main_loop_, |
| 1004 main_loop_, | 1004 weak_factory_.GetWeakPtr()), |
| 1005 weak_factory_.GetWeakPtr()))), | |
| 1006 texture_target, | |
| 1007 canvas_size /* coded_size */, | 1005 canvas_size /* coded_size */, |
| 1008 gfx::Rect(canvas_size) /* visible_rect */, | 1006 gfx::Rect(canvas_size) /* visible_rect */, |
| 1009 canvas_size /* natural_size */, | 1007 canvas_size /* natural_size */, |
| 1010 base::TimeDelta() /* timestamp */, | 1008 base::TimeDelta() /* timestamp */, |
| 1011 VideoFrame::ReadPixelsCB(), | 1009 VideoFrame::ReadPixelsCB()); |
| 1012 base::Closure() /* no_longer_needed_cb */); | |
| 1013 SetCurrentFrameInternal(new_frame); | 1010 SetCurrentFrameInternal(new_frame); |
| 1014 } | 1011 } |
| 1015 | 1012 |
| 1016 void WebMediaPlayerAndroid::ReallocateVideoFrame() { | 1013 void WebMediaPlayerAndroid::ReallocateVideoFrame() { |
| 1017 if (needs_external_surface_) { | 1014 if (needs_external_surface_) { |
| 1018 // VideoFrame::CreateHoleFrame is only defined under VIDEO_HOLE. | 1015 // VideoFrame::CreateHoleFrame is only defined under VIDEO_HOLE. |
| 1019 #if defined(VIDEO_HOLE) | 1016 #if defined(VIDEO_HOLE) |
| 1020 if (!natural_size_.isEmpty()) { | 1017 if (!natural_size_.isEmpty()) { |
| 1021 scoped_refptr<VideoFrame> new_frame = | 1018 scoped_refptr<VideoFrame> new_frame = |
| 1022 VideoFrame::CreateHoleFrame(natural_size_); | 1019 VideoFrame::CreateHoleFrame(natural_size_); |
| 1023 SetCurrentFrameInternal(new_frame); | 1020 SetCurrentFrameInternal(new_frame); |
| 1024 // Force the client to grab the hole frame. | 1021 // Force the client to grab the hole frame. |
| 1025 client_->repaint(); | 1022 client_->repaint(); |
| 1026 } | 1023 } |
| 1027 #else | 1024 #else |
| 1028 NOTIMPLEMENTED() << "Hole punching not supported without VIDEO_HOLE flag"; | 1025 NOTIMPLEMENTED() << "Hole punching not supported without VIDEO_HOLE flag"; |
| 1029 #endif // defined(VIDEO_HOLE) | 1026 #endif // defined(VIDEO_HOLE) |
| 1030 } else if (!is_remote_ && texture_id_) { | 1027 } else if (!is_remote_ && texture_id_) { |
| 1031 scoped_refptr<VideoFrame> new_frame = VideoFrame::WrapNativeTexture( | 1028 scoped_refptr<VideoFrame> new_frame = VideoFrame::WrapNativeTexture( |
| 1032 make_scoped_ptr(new VideoFrame::MailboxHolder( | 1029 make_scoped_ptr(new gpu::MailboxHolder(texture_mailbox_, |
| 1033 texture_mailbox_, | 1030 kGLTextureExternalOES, |
| 1034 texture_mailbox_sync_point_, | 1031 texture_mailbox_sync_point_)), |
| 1035 VideoFrame::MailboxHolder::TextureNoLongerNeededCallback())), | 1032 media::VideoFrame::ReleaseMailboxCB(), |
| 1036 kGLTextureExternalOES, | |
| 1037 natural_size_, | 1033 natural_size_, |
| 1038 gfx::Rect(natural_size_), | 1034 gfx::Rect(natural_size_), |
| 1039 natural_size_, | 1035 natural_size_, |
| 1040 base::TimeDelta(), | 1036 base::TimeDelta(), |
| 1041 VideoFrame::ReadPixelsCB(), | 1037 VideoFrame::ReadPixelsCB()); |
| 1042 base::Closure()); | |
| 1043 SetCurrentFrameInternal(new_frame); | 1038 SetCurrentFrameInternal(new_frame); |
| 1044 } | 1039 } |
| 1045 } | 1040 } |
| 1046 | 1041 |
| 1047 void WebMediaPlayerAndroid::SetVideoFrameProviderClient( | 1042 void WebMediaPlayerAndroid::SetVideoFrameProviderClient( |
| 1048 cc::VideoFrameProvider::Client* client) { | 1043 cc::VideoFrameProvider::Client* client) { |
| 1049 // This is called from both the main renderer thread and the compositor | 1044 // This is called from both the main renderer thread and the compositor |
| 1050 // thread (when the main thread is blocked). | 1045 // thread (when the main thread is blocked). |
| 1051 if (video_frame_provider_client_) | 1046 if (video_frame_provider_client_) |
| 1052 video_frame_provider_client_->StopUsingProvider(); | 1047 video_frame_provider_client_->StopUsingProvider(); |
| (...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1452 | 1447 |
| 1453 void WebMediaPlayerAndroid::exitFullscreen() { | 1448 void WebMediaPlayerAndroid::exitFullscreen() { |
| 1454 manager_->ExitFullscreen(player_id_); | 1449 manager_->ExitFullscreen(player_id_); |
| 1455 } | 1450 } |
| 1456 | 1451 |
| 1457 bool WebMediaPlayerAndroid::canEnterFullscreen() const { | 1452 bool WebMediaPlayerAndroid::canEnterFullscreen() const { |
| 1458 return manager_->CanEnterFullscreen(frame_); | 1453 return manager_->CanEnterFullscreen(frame_); |
| 1459 } | 1454 } |
| 1460 | 1455 |
| 1461 } // namespace content | 1456 } // namespace content |
| OLD | NEW |