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 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 |