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

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

Issue 132233041: Add gpu::MailboxHolder to hold state for a gpu::Mailbox (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ff7262fa Rebase. Created 6 years, 10 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 | Annotate | Revision Log
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 <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"
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/files/file_path.h" 12 #include "base/files/file_path.h"
13 #include "base/logging.h" 13 #include "base/logging.h"
14 #include "base/message_loop/message_loop.h" 14 #include "base/message_loop/message_loop.h"
15 #include "base/metrics/histogram.h" 15 #include "base/metrics/histogram.h"
16 #include "base/strings/string_number_conversions.h" 16 #include "base/strings/string_number_conversions.h"
17 #include "cc/layers/video_layer.h" 17 #include "cc/layers/video_layer.h"
18 #include "content/public/common/content_client.h" 18 #include "content/public/common/content_client.h"
19 #include "content/public/renderer/render_frame.h" 19 #include "content/public/renderer/render_frame.h"
20 #include "content/renderer/media/android/proxy_media_keys.h" 20 #include "content/renderer/media/android/proxy_media_keys.h"
21 #include "content/renderer/media/android/renderer_demuxer_android.h" 21 #include "content/renderer/media/android/renderer_demuxer_android.h"
22 #include "content/renderer/media/android/renderer_media_player_manager.h" 22 #include "content/renderer/media/android/renderer_media_player_manager.h"
23 #include "content/renderer/media/crypto/key_systems.h" 23 #include "content/renderer/media/crypto/key_systems.h"
24 #include "content/renderer/media/webmediaplayer_delegate.h" 24 #include "content/renderer/media/webmediaplayer_delegate.h"
25 #include "content/renderer/media/webmediaplayer_util.h" 25 #include "content/renderer/media/webmediaplayer_util.h"
26 #include "content/renderer/render_frame_impl.h" 26 #include "content/renderer/render_frame_impl.h"
27 #include "content/renderer/render_thread_impl.h" 27 #include "content/renderer/render_thread_impl.h"
28 #include "gpu/GLES2/gl2extchromium.h" 28 #include "gpu/GLES2/gl2extchromium.h"
29 #include "gpu/command_buffer/client/gles2_interface.h" 29 #include "gpu/command_buffer/client/gles2_interface.h"
30 #include "gpu/command_buffer/common/mailbox_holder.h"
30 #include "grit/content_resources.h" 31 #include "grit/content_resources.h"
31 #include "media/base/android/media_player_android.h" 32 #include "media/base/android/media_player_android.h"
32 #include "media/base/bind_to_current_loop.h" 33 #include "media/base/bind_to_current_loop.h"
33 #include "media/base/media_switches.h" 34 #include "media/base/media_switches.h"
34 #include "media/base/video_frame.h" 35 #include "media/base/video_frame.h"
35 #include "net/base/mime_util.h" 36 #include "net/base/mime_util.h"
36 #include "third_party/WebKit/public/platform/WebMediaPlayerClient.h" 37 #include "third_party/WebKit/public/platform/WebMediaPlayerClient.h"
37 #include "third_party/WebKit/public/platform/WebString.h" 38 #include "third_party/WebKit/public/platform/WebString.h"
38 #include "third_party/WebKit/public/web/WebDocument.h" 39 #include "third_party/WebKit/public/web/WebDocument.h"
39 #include "third_party/WebKit/public/web/WebFrame.h" 40 #include "third_party/WebKit/public/web/WebFrame.h"
(...skipping 20 matching lines...) Expand all
60 // Prefix for histograms related to Encrypted Media Extensions. 61 // Prefix for histograms related to Encrypted Media Extensions.
61 const char* kMediaEme = "Media.EME."; 62 const char* kMediaEme = "Media.EME.";
62 } // namespace 63 } // namespace
63 64
64 namespace content { 65 namespace content {
65 66
66 // static 67 // static
67 void WebMediaPlayerAndroid::OnReleaseRemotePlaybackTexture( 68 void WebMediaPlayerAndroid::OnReleaseRemotePlaybackTexture(
68 const scoped_refptr<base::MessageLoopProxy>& main_loop, 69 const scoped_refptr<base::MessageLoopProxy>& main_loop,
69 const base::WeakPtr<WebMediaPlayerAndroid>& player, 70 const base::WeakPtr<WebMediaPlayerAndroid>& player,
70 uint32 sync_point) { 71 scoped_ptr<gpu::MailboxHolder> mailbox_holder) {
71 main_loop->PostTask( 72 main_loop->PostTask(
72 FROM_HERE, 73 FROM_HERE,
73 base::Bind(&WebMediaPlayerAndroid::DoReleaseRemotePlaybackTexture, 74 base::Bind(&WebMediaPlayerAndroid::DoReleaseRemotePlaybackTexture,
74 player, 75 player,
75 sync_point)); 76 mailbox_holder->sync_point));
76 } 77 }
77 78
78 WebMediaPlayerAndroid::WebMediaPlayerAndroid( 79 WebMediaPlayerAndroid::WebMediaPlayerAndroid(
79 blink::WebFrame* frame, 80 blink::WebFrame* frame,
80 blink::WebMediaPlayerClient* client, 81 blink::WebMediaPlayerClient* client,
81 base::WeakPtr<WebMediaPlayerDelegate> delegate, 82 base::WeakPtr<WebMediaPlayerDelegate> delegate,
82 RendererMediaPlayerManager* manager, 83 RendererMediaPlayerManager* manager,
83 StreamTextureFactory* factory, 84 StreamTextureFactory* factory,
84 const scoped_refptr<base::MessageLoopProxy>& media_loop, 85 const scoped_refptr<base::MessageLoopProxy>& media_loop,
85 media::MediaLog* media_log) 86 media::MediaLog* media_log)
(...skipping 823 matching lines...) Expand 10 before | Expand all | Expand 10 after
909 bitmap.getPixels()); 910 bitmap.getPixels());
910 } 911 }
911 912
912 gpu::Mailbox texture_mailbox; 913 gpu::Mailbox texture_mailbox;
913 gl->GenMailboxCHROMIUM(texture_mailbox.name); 914 gl->GenMailboxCHROMIUM(texture_mailbox.name);
914 gl->ProduceTextureCHROMIUM(texture_target, texture_mailbox.name); 915 gl->ProduceTextureCHROMIUM(texture_target, texture_mailbox.name);
915 gl->Flush(); 916 gl->Flush();
916 GLuint texture_mailbox_sync_point = gl->InsertSyncPointCHROMIUM(); 917 GLuint texture_mailbox_sync_point = gl->InsertSyncPointCHROMIUM();
917 918
918 scoped_refptr<VideoFrame> new_frame = VideoFrame::WrapNativeTexture( 919 scoped_refptr<VideoFrame> new_frame = VideoFrame::WrapNativeTexture(
919 make_scoped_ptr(new VideoFrame::MailboxHolder( 920 make_scoped_ptr(new gpu::MailboxHolder(
920 texture_mailbox, 921 texture_mailbox, texture_target, texture_mailbox_sync_point)),
921 texture_mailbox_sync_point, 922 base::Bind(&WebMediaPlayerAndroid::OnReleaseRemotePlaybackTexture,
922 base::Bind(&WebMediaPlayerAndroid::OnReleaseRemotePlaybackTexture, 923 main_loop_,
923 main_loop_, 924 weak_factory_.GetWeakPtr()),
924 weak_factory_.GetWeakPtr()))),
925 texture_target,
926 canvas_size /* coded_size */, 925 canvas_size /* coded_size */,
927 gfx::Rect(canvas_size) /* visible_rect */, 926 gfx::Rect(canvas_size) /* visible_rect */,
928 canvas_size /* natural_size */, 927 canvas_size /* natural_size */,
929 base::TimeDelta() /* timestamp */, 928 base::TimeDelta() /* timestamp */,
930 VideoFrame::ReadPixelsCB(), 929 VideoFrame::ReadPixelsCB());
931 base::Closure() /* no_longer_needed_cb */);
932 SetCurrentFrameInternal(new_frame); 930 SetCurrentFrameInternal(new_frame);
933 } 931 }
934 932
935 void WebMediaPlayerAndroid::ReallocateVideoFrame() { 933 void WebMediaPlayerAndroid::ReallocateVideoFrame() {
936 if (needs_external_surface_) { 934 if (needs_external_surface_) {
937 // VideoFrame::CreateHoleFrame is only defined under VIDEO_HOLE. 935 // VideoFrame::CreateHoleFrame is only defined under VIDEO_HOLE.
938 #if defined(VIDEO_HOLE) 936 #if defined(VIDEO_HOLE)
939 if (!natural_size_.isEmpty()) { 937 if (!natural_size_.isEmpty()) {
940 scoped_refptr<VideoFrame> new_frame = 938 scoped_refptr<VideoFrame> new_frame =
941 VideoFrame::CreateHoleFrame(natural_size_); 939 VideoFrame::CreateHoleFrame(natural_size_);
942 SetCurrentFrameInternal(new_frame); 940 SetCurrentFrameInternal(new_frame);
943 // Force the client to grab the hole frame. 941 // Force the client to grab the hole frame.
944 client_->repaint(); 942 client_->repaint();
945 } 943 }
946 #else 944 #else
947 NOTIMPLEMENTED() << "Hole punching not supported without VIDEO_HOLE flag"; 945 NOTIMPLEMENTED() << "Hole punching not supported without VIDEO_HOLE flag";
948 #endif // defined(VIDEO_HOLE) 946 #endif // defined(VIDEO_HOLE)
949 } else if (!is_remote_ && texture_id_) { 947 } else if (!is_remote_ && texture_id_) {
950 scoped_refptr<VideoFrame> new_frame = VideoFrame::WrapNativeTexture( 948 scoped_refptr<VideoFrame> new_frame = VideoFrame::WrapNativeTexture(
951 make_scoped_ptr(new VideoFrame::MailboxHolder( 949 make_scoped_ptr(new gpu::MailboxHolder(texture_mailbox_,
952 texture_mailbox_, 950 kGLTextureExternalOES,
953 texture_mailbox_sync_point_, 951 texture_mailbox_sync_point_)),
954 VideoFrame::MailboxHolder::TextureNoLongerNeededCallback())), 952 media::VideoFrame::ReleaseMailboxCB(),
955 kGLTextureExternalOES,
956 natural_size_, 953 natural_size_,
957 gfx::Rect(natural_size_), 954 gfx::Rect(natural_size_),
958 natural_size_, 955 natural_size_,
959 base::TimeDelta(), 956 base::TimeDelta(),
960 VideoFrame::ReadPixelsCB(), 957 VideoFrame::ReadPixelsCB());
961 base::Closure());
962 SetCurrentFrameInternal(new_frame); 958 SetCurrentFrameInternal(new_frame);
963 } 959 }
964 } 960 }
965 961
966 void WebMediaPlayerAndroid::SetVideoFrameProviderClient( 962 void WebMediaPlayerAndroid::SetVideoFrameProviderClient(
967 cc::VideoFrameProvider::Client* client) { 963 cc::VideoFrameProvider::Client* client) {
968 // This is called from both the main renderer thread and the compositor 964 // This is called from both the main renderer thread and the compositor
969 // thread (when the main thread is blocked). 965 // thread (when the main thread is blocked).
970 if (video_frame_provider_client_) 966 if (video_frame_provider_client_)
971 video_frame_provider_client_->StopUsingProvider(); 967 video_frame_provider_client_->StopUsingProvider();
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after
1408 1404
1409 void WebMediaPlayerAndroid::exitFullscreen() { 1405 void WebMediaPlayerAndroid::exitFullscreen() {
1410 manager_->ExitFullscreen(player_id_); 1406 manager_->ExitFullscreen(player_id_);
1411 } 1407 }
1412 1408
1413 bool WebMediaPlayerAndroid::canEnterFullscreen() const { 1409 bool WebMediaPlayerAndroid::canEnterFullscreen() const {
1414 return manager_->CanEnterFullscreen(frame_); 1410 return manager_->CanEnterFullscreen(frame_);
1415 } 1411 }
1416 1412
1417 } // namespace content 1413 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/android/webmediaplayer_android.h ('k') | content/renderer/media/rtc_video_decoder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698