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

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

Issue 312803002: Android media: VideoFrame should not store so many sync points. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 6 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
« no previous file with comments | « content/renderer/media/android/webmediaplayer_android.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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"
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 RendererMediaPlayerManager* player_manager, 89 RendererMediaPlayerManager* player_manager,
90 RendererCdmManager* cdm_manager, 90 RendererCdmManager* cdm_manager,
91 scoped_refptr<StreamTextureFactory> factory, 91 scoped_refptr<StreamTextureFactory> factory,
92 const scoped_refptr<base::MessageLoopProxy>& media_loop, 92 const scoped_refptr<base::MessageLoopProxy>& media_loop,
93 media::MediaLog* media_log) 93 media::MediaLog* media_log)
94 : RenderFrameObserver(RenderFrame::FromWebFrame(frame)), 94 : RenderFrameObserver(RenderFrame::FromWebFrame(frame)),
95 frame_(frame), 95 frame_(frame),
96 client_(client), 96 client_(client),
97 delegate_(delegate), 97 delegate_(delegate),
98 buffered_(static_cast<size_t>(1)), 98 buffered_(static_cast<size_t>(1)),
99 main_loop_(base::MessageLoopProxy::current()),
99 media_loop_(media_loop), 100 media_loop_(media_loop),
100 ignore_metadata_duration_change_(false), 101 ignore_metadata_duration_change_(false),
101 pending_seek_(false), 102 pending_seek_(false),
102 seeking_(false), 103 seeking_(false),
103 did_loading_progress_(false), 104 did_loading_progress_(false),
104 player_manager_(player_manager), 105 player_manager_(player_manager),
105 cdm_manager_(cdm_manager), 106 cdm_manager_(cdm_manager),
106 network_state_(WebMediaPlayer::NetworkStateEmpty), 107 network_state_(WebMediaPlayer::NetworkStateEmpty),
107 ready_state_(WebMediaPlayer::ReadyStateHaveNothing), 108 ready_state_(WebMediaPlayer::ReadyStateHaveNothing),
108 texture_id_(0), 109 texture_id_(0),
(...skipping 915 matching lines...) Expand 10 before | Expand all | Expand 10 after
1024 remote_playback_texture_id)), 1025 remote_playback_texture_id)),
1025 canvas_size /* coded_size */, 1026 canvas_size /* coded_size */,
1026 gfx::Rect(canvas_size) /* visible_rect */, 1027 gfx::Rect(canvas_size) /* visible_rect */,
1027 canvas_size /* natural_size */, 1028 canvas_size /* natural_size */,
1028 base::TimeDelta() /* timestamp */, 1029 base::TimeDelta() /* timestamp */,
1029 VideoFrame::ReadPixelsCB()); 1030 VideoFrame::ReadPixelsCB());
1030 SetCurrentFrameInternal(new_frame); 1031 SetCurrentFrameInternal(new_frame);
1031 } 1032 }
1032 1033
1033 void WebMediaPlayerAndroid::ReallocateVideoFrame() { 1034 void WebMediaPlayerAndroid::ReallocateVideoFrame() {
1035 DCHECK(main_thread_checker_.CalledOnValidThread());
1034 if (needs_external_surface_) { 1036 if (needs_external_surface_) {
1035 // VideoFrame::CreateHoleFrame is only defined under VIDEO_HOLE. 1037 // VideoFrame::CreateHoleFrame is only defined under VIDEO_HOLE.
1036 #if defined(VIDEO_HOLE) 1038 #if defined(VIDEO_HOLE)
1037 if (!natural_size_.isEmpty()) { 1039 if (!natural_size_.isEmpty()) {
1038 scoped_refptr<VideoFrame> new_frame = 1040 scoped_refptr<VideoFrame> new_frame =
1039 VideoFrame::CreateHoleFrame(natural_size_); 1041 VideoFrame::CreateHoleFrame(natural_size_);
1040 SetCurrentFrameInternal(new_frame); 1042 SetCurrentFrameInternal(new_frame);
1041 // Force the client to grab the hole frame. 1043 // Force the client to grab the hole frame.
1042 client_->repaint(); 1044 client_->repaint();
1043 } 1045 }
1044 #else 1046 #else
1045 NOTIMPLEMENTED() << "Hole punching not supported without VIDEO_HOLE flag"; 1047 NOTIMPLEMENTED() << "Hole punching not supported without VIDEO_HOLE flag";
1046 #endif // defined(VIDEO_HOLE) 1048 #endif // defined(VIDEO_HOLE)
1047 } else if (!is_remote_ && texture_id_) { 1049 } else if (!is_remote_ && texture_id_) {
1048 GLES2Interface* gl = stream_texture_factory_->ContextGL(); 1050 GLES2Interface* gl = stream_texture_factory_->ContextGL();
1049 GLuint texture_id_ref = 0; 1051 GLuint texture_id_ref = 0;
1052 // FIXME: reuse texture pool like gpu_video_decoder.
dshwang 2014/06/03 15:39:40 Currently every frame create new texture. We can a
1050 gl->GenTextures(1, &texture_id_ref); 1053 gl->GenTextures(1, &texture_id_ref);
1051 GLuint texture_target = kGLTextureExternalOES; 1054 GLuint texture_target = kGLTextureExternalOES;
1052 gl->BindTexture(texture_target, texture_id_ref); 1055 gl->BindTexture(texture_target, texture_id_ref);
1053 gl->ConsumeTextureCHROMIUM(texture_target, texture_mailbox_.name); 1056 gl->ConsumeTextureCHROMIUM(texture_target, texture_mailbox_.name);
1054 gl->Flush(); 1057 gl->Flush();
1055 GLuint texture_mailbox_sync_point = gl->InsertSyncPointCHROMIUM(); 1058 GLuint texture_mailbox_sync_point = gl->InsertSyncPointCHROMIUM();
1056 1059
1057 scoped_refptr<VideoFrame> new_frame = VideoFrame::WrapNativeTexture( 1060 scoped_refptr<VideoFrame> new_frame = VideoFrame::WrapNativeTexture(
1058 make_scoped_ptr(new gpu::MailboxHolder( 1061 make_scoped_ptr(new gpu::MailboxHolder(
1059 texture_mailbox_, texture_target, texture_mailbox_sync_point)), 1062 texture_mailbox_, texture_target, texture_mailbox_sync_point)),
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1102 stream_texture_factory_->SetStreamTextureSize(stream_id_, natural_size); 1105 stream_texture_factory_->SetStreamTextureSize(stream_id_, natural_size);
1103 stream_texture_proxy_initialized_ = true; 1106 stream_texture_proxy_initialized_ = true;
1104 cached_stream_texture_size_ = natural_size; 1107 cached_stream_texture_size_ = natural_size;
1105 } 1108 }
1106 1109
1107 return video_frame; 1110 return video_frame;
1108 } 1111 }
1109 1112
1110 void WebMediaPlayerAndroid::PutCurrentFrame( 1113 void WebMediaPlayerAndroid::PutCurrentFrame(
1111 const scoped_refptr<media::VideoFrame>& frame) { 1114 const scoped_refptr<media::VideoFrame>& frame) {
1115 // Create new VideoFrame when a client return the previous frame.
1116 DCHECK(!main_thread_checker_.CalledOnValidThread());
1117 // FIXME: instead of here, VideoFrameProvider::Client::DidReceiveFrame() can
1118 // handle it.
dshwang 2014/06/03 15:39:40 I use PutCurrentFrame() as the end of each frame,
1119 main_loop_->PostTask(FROM_HERE,
1120 base::Bind(&WebMediaPlayerAndroid::ReallocateVideoFrame,
1121 weak_factory_.GetWeakPtr()));
1112 } 1122 }
1113 1123
1114 void WebMediaPlayerAndroid::TryCreateStreamTextureProxyIfNeeded() { 1124 void WebMediaPlayerAndroid::TryCreateStreamTextureProxyIfNeeded() {
1115 // Already created. 1125 // Already created.
1116 if (stream_texture_proxy_) 1126 if (stream_texture_proxy_)
1117 return; 1127 return;
1118 1128
1119 // No factory to create proxy. 1129 // No factory to create proxy.
1120 if (!stream_texture_factory_) 1130 if (!stream_texture_factory_)
1121 return; 1131 return;
(...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after
1565 1575
1566 void WebMediaPlayerAndroid::exitFullscreen() { 1576 void WebMediaPlayerAndroid::exitFullscreen() {
1567 player_manager_->ExitFullscreen(player_id_); 1577 player_manager_->ExitFullscreen(player_id_);
1568 } 1578 }
1569 1579
1570 bool WebMediaPlayerAndroid::canEnterFullscreen() const { 1580 bool WebMediaPlayerAndroid::canEnterFullscreen() const {
1571 return player_manager_->CanEnterFullscreen(frame_); 1581 return player_manager_->CanEnterFullscreen(frame_);
1572 } 1582 }
1573 1583
1574 } // namespace content 1584 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/android/webmediaplayer_android.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698