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

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

Issue 557593002: Clean up WebMediaPlayerAndroid needs_establish_peer_ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: needs_establish_peer_ Created 6 years, 3 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
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/android/build_info.h" 9 #include "base/android/build_info.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 seeking_(false), 128 seeking_(false),
129 did_loading_progress_(false), 129 did_loading_progress_(false),
130 player_manager_(player_manager), 130 player_manager_(player_manager),
131 cdm_manager_(cdm_manager), 131 cdm_manager_(cdm_manager),
132 network_state_(WebMediaPlayer::NetworkStateEmpty), 132 network_state_(WebMediaPlayer::NetworkStateEmpty),
133 ready_state_(WebMediaPlayer::ReadyStateHaveNothing), 133 ready_state_(WebMediaPlayer::ReadyStateHaveNothing),
134 texture_id_(0), 134 texture_id_(0),
135 stream_id_(0), 135 stream_id_(0),
136 is_playing_(false), 136 is_playing_(false),
137 needs_establish_peer_(true), 137 needs_establish_peer_(true),
138 in_fullscreen_(false),
138 stream_texture_proxy_initialized_(false), 139 stream_texture_proxy_initialized_(false),
139 has_size_info_(false), 140 has_size_info_(false),
140 stream_texture_factory_(factory), 141 stream_texture_factory_(factory),
141 needs_external_surface_(false), 142 needs_external_surface_(false),
142 video_frame_provider_client_(NULL), 143 video_frame_provider_client_(NULL),
143 pending_playback_(false), 144 pending_playback_(false),
144 player_type_(MEDIA_PLAYER_TYPE_URL), 145 player_type_(MEDIA_PLAYER_TYPE_URL),
145 current_time_(0), 146 current_time_(0),
146 is_remote_(false), 147 is_remote_(false),
147 media_log_(media_log), 148 media_log_(media_log),
148 web_cdm_(NULL), 149 web_cdm_(NULL),
149 allow_stored_credentials_(false), 150 allow_stored_credentials_(false),
150 is_local_resource_(false), 151 is_local_resource_(false),
151 weak_factory_(this) { 152 weak_factory_(this) {
152 DCHECK(player_manager_); 153 DCHECK(player_manager_);
153 DCHECK(cdm_manager_); 154 DCHECK(cdm_manager_);
154 155
155 DCHECK(main_thread_checker_.CalledOnValidThread()); 156 DCHECK(main_thread_checker_.CalledOnValidThread());
156 157
157 player_id_ = player_manager_->RegisterMediaPlayer(this); 158 player_id_ = player_manager_->RegisterMediaPlayer(this);
158 159
159 #if defined(VIDEO_HOLE) 160 #if defined(VIDEO_HOLE)
160 force_use_overlay_embedded_video_ = CommandLine::ForCurrentProcess()-> 161 force_use_overlay_embedded_video_ = CommandLine::ForCurrentProcess()->
161 HasSwitch(switches::kForceUseOverlayEmbeddedVideo); 162 HasSwitch(switches::kForceUseOverlayEmbeddedVideo);
162 if (force_use_overlay_embedded_video_ || 163 if (force_use_overlay_embedded_video_ ||
163 player_manager_->ShouldUseVideoOverlayForEmbeddedEncryptedVideo()) { 164 player_manager_->ShouldUseVideoOverlayForEmbeddedEncryptedVideo()) {
164 // Defer stream texture creation until we are sure it's necessary. 165 // Defer stream texture creation until we are sure it's necessary.
165 needs_establish_peer_ = false; 166 needs_external_surface_ = true;
166 current_frame_ = VideoFrame::CreateBlackFrame(gfx::Size(1, 1)); 167 current_frame_ = VideoFrame::CreateBlackFrame(gfx::Size(1, 1));
167 } 168 }
168 #endif // defined(VIDEO_HOLE) 169 #endif // defined(VIDEO_HOLE)
169 TryCreateStreamTextureProxyIfNeeded(); 170 TryCreateStreamTextureProxyIfNeeded();
170 } 171 }
171 172
172 WebMediaPlayerAndroid::~WebMediaPlayerAndroid() { 173 WebMediaPlayerAndroid::~WebMediaPlayerAndroid() {
173 DCHECK(main_thread_checker_.CalledOnValidThread()); 174 DCHECK(main_thread_checker_.CalledOnValidThread());
174 SetVideoFrameProviderClient(NULL); 175 SetVideoFrameProviderClient(NULL);
175 client_->setWebLayer(NULL); 176 client_->setWebLayer(NULL);
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 } 297 }
297 298
298 void WebMediaPlayerAndroid::play() { 299 void WebMediaPlayerAndroid::play() {
299 DCHECK(main_thread_checker_.CalledOnValidThread()); 300 DCHECK(main_thread_checker_.CalledOnValidThread());
300 301
301 // For HLS streams, some devices cannot detect the video size unless a surface 302 // For HLS streams, some devices cannot detect the video size unless a surface
302 // texture is bind to it. See http://crbug.com/400145. 303 // texture is bind to it. See http://crbug.com/400145.
303 #if defined(VIDEO_HOLE) 304 #if defined(VIDEO_HOLE)
304 if ((hasVideo() || IsHLSStream()) && needs_external_surface_ && 305 if ((hasVideo() || IsHLSStream()) && needs_external_surface_ &&
305 !player_manager_->IsInFullscreen(frame_)) { 306 !player_manager_->IsInFullscreen(frame_)) {
306 DCHECK(!needs_establish_peer_);
307 player_manager_->RequestExternalSurface(player_id_, last_computed_rect_); 307 player_manager_->RequestExternalSurface(player_id_, last_computed_rect_);
308 } 308 }
309 #endif // defined(VIDEO_HOLE) 309 #endif // defined(VIDEO_HOLE)
310 310
311 TryCreateStreamTextureProxyIfNeeded(); 311 TryCreateStreamTextureProxyIfNeeded();
312 // There is no need to establish the surface texture peer for fullscreen
313 // video.
314 if ((hasVideo() || IsHLSStream()) && needs_establish_peer_ &&
315 !player_manager_->IsInFullscreen(frame_)) {
316 EstablishSurfaceTexturePeer();
317 }
318 312
319 if (paused()) 313 if (paused())
320 player_manager_->Start(player_id_); 314 player_manager_->Start(player_id_);
321 UpdatePlayingState(true); 315 UpdatePlayingState(true);
322 UpdateNetworkState(WebMediaPlayer::NetworkStateLoading); 316 UpdateNetworkState(WebMediaPlayer::NetworkStateLoading);
323 } 317 }
324 318
325 void WebMediaPlayerAndroid::pause() { 319 void WebMediaPlayerAndroid::pause() {
326 DCHECK(main_thread_checker_.CalledOnValidThread()); 320 DCHECK(main_thread_checker_.CalledOnValidThread());
327 Pause(true); 321 Pause(true);
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after
747 // know that the playback has finished. To solve this, we set the 741 // know that the playback has finished. To solve this, we set the
748 // current time to media duration when OnPlaybackComplete() get called. 742 // current time to media duration when OnPlaybackComplete() get called.
749 OnTimeUpdate(duration_); 743 OnTimeUpdate(duration_);
750 client_->timeChanged(); 744 client_->timeChanged();
751 745
752 // if the loop attribute is set, timeChanged() will update the current time 746 // if the loop attribute is set, timeChanged() will update the current time
753 // to 0. It will perform a seek to 0. As the requests to the renderer 747 // to 0. It will perform a seek to 0. As the requests to the renderer
754 // process are sequential, the OnSeekComplete() will only occur 748 // process are sequential, the OnSeekComplete() will only occur
755 // once OnPlaybackComplete() is done. As the playback can only be executed 749 // once OnPlaybackComplete() is done. As the playback can only be executed
756 // upon completion of OnSeekComplete(), the request needs to be saved. 750 // upon completion of OnSeekComplete(), the request needs to be saved.
757 is_playing_ = false;
758 if (seeking_ && seek_time_ == base::TimeDelta()) 751 if (seeking_ && seek_time_ == base::TimeDelta())
759 pending_playback_ = true; 752 pending_playback_ = true;
760 } 753 }
761 754
762 void WebMediaPlayerAndroid::OnBufferingUpdate(int percentage) { 755 void WebMediaPlayerAndroid::OnBufferingUpdate(int percentage) {
763 buffered_[0].end = duration() * percentage / 100; 756 buffered_[0].end = duration() * percentage / 100;
764 did_loading_progress_ = true; 757 did_loading_progress_ = true;
765 } 758 }
766 759
767 void WebMediaPlayerAndroid::OnSeekRequest(const base::TimeDelta& time_to_seek) { 760 void WebMediaPlayerAndroid::OnSeekRequest(const base::TimeDelta& time_to_seek) {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
813 has_size_info_ = true; 806 has_size_info_ = true;
814 if (natural_size_.width == width && natural_size_.height == height) 807 if (natural_size_.width == width && natural_size_.height == height)
815 return; 808 return;
816 809
817 #if defined(VIDEO_HOLE) 810 #if defined(VIDEO_HOLE)
818 // Use H/W surface for encrypted video. 811 // Use H/W surface for encrypted video.
819 // TODO(qinmin): Change this so that only EME needs the H/W surface 812 // TODO(qinmin): Change this so that only EME needs the H/W surface
820 if (force_use_overlay_embedded_video_ || 813 if (force_use_overlay_embedded_video_ ||
821 (media_source_delegate_ && media_source_delegate_->IsVideoEncrypted() && 814 (media_source_delegate_ && media_source_delegate_->IsVideoEncrypted() &&
822 player_manager_->ShouldUseVideoOverlayForEmbeddedEncryptedVideo())) { 815 player_manager_->ShouldUseVideoOverlayForEmbeddedEncryptedVideo())) {
823 needs_external_surface_ = true;
824 if (!paused() && !player_manager_->IsInFullscreen(frame_)) 816 if (!paused() && !player_manager_->IsInFullscreen(frame_))
825 player_manager_->RequestExternalSurface(player_id_, last_computed_rect_); 817 player_manager_->RequestExternalSurface(player_id_, last_computed_rect_);
826 } else if (stream_texture_proxy_ && !stream_id_) { 818 } else {
827 // Do deferred stream texture creation finally. 819 needs_external_surface_ = false;
828 DoCreateStreamTexture();
829 SetNeedsEstablishPeer(true);
830 } 820 }
831 #endif // defined(VIDEO_HOLE) 821 #endif // defined(VIDEO_HOLE)
832 natural_size_.width = width; 822 natural_size_.width = width;
833 natural_size_.height = height; 823 natural_size_.height = height;
834 824
835 // When play() gets called, |natural_size_| may still be empty and 825 // hasVideo() might have changed since play was called, so need to possibly
836 // EstablishSurfaceTexturePeer() will not get called. As a result, the video 826 // estlibash peer here.
837 // may play without a surface texture. When we finally get the valid video 827 EstablishSurfaceTexturePeerIfNeeded();
838 // size here, we should call EstablishSurfaceTexturePeer() if it has not been
839 // previously called.
840 if (!paused() && needs_establish_peer_)
841 EstablishSurfaceTexturePeer();
842 828
843 ReallocateVideoFrame(); 829 ReallocateVideoFrame();
844 830
845 // For hidden video element (with style "display:none"), ensure the texture 831 // For hidden video element (with style "display:none"), ensure the texture
846 // size is set. 832 // size is set.
847 if (!is_remote_ && cached_stream_texture_size_ != natural_size_) { 833 if (!is_remote_ && cached_stream_texture_size_ != natural_size_) {
848 stream_texture_factory_->SetStreamTextureSize( 834 stream_texture_factory_->SetStreamTextureSize(
849 stream_id_, gfx::Size(natural_size_.width, natural_size_.height)); 835 stream_id_, gfx::Size(natural_size_.width, natural_size_.height));
850 cached_stream_texture_size_ = natural_size_; 836 cached_stream_texture_size_ = natural_size_;
851 } 837 }
(...skipping 17 matching lines...) Expand all
869 if (is_local_resource_ && current_time_ <= duration()) 855 if (is_local_resource_ && current_time_ <= duration())
870 buffered_[0].end = current_time_; 856 buffered_[0].end = current_time_;
871 } 857 }
872 858
873 void WebMediaPlayerAndroid::OnConnectedToRemoteDevice( 859 void WebMediaPlayerAndroid::OnConnectedToRemoteDevice(
874 const std::string& remote_playback_message) { 860 const std::string& remote_playback_message) {
875 DCHECK(main_thread_checker_.CalledOnValidThread()); 861 DCHECK(main_thread_checker_.CalledOnValidThread());
876 DCHECK(!media_source_delegate_); 862 DCHECK(!media_source_delegate_);
877 DrawRemotePlaybackText(remote_playback_message); 863 DrawRemotePlaybackText(remote_playback_message);
878 is_remote_ = true; 864 is_remote_ = true;
879 SetNeedsEstablishPeer(false); 865 needs_establish_peer_ = true;
866 EstablishSurfaceTexturePeerIfNeeded();
880 } 867 }
881 868
882 void WebMediaPlayerAndroid::OnDisconnectedFromRemoteDevice() { 869 void WebMediaPlayerAndroid::OnDisconnectedFromRemoteDevice() {
883 DCHECK(main_thread_checker_.CalledOnValidThread()); 870 DCHECK(main_thread_checker_.CalledOnValidThread());
884 DCHECK(!media_source_delegate_); 871 DCHECK(!media_source_delegate_);
885 SetNeedsEstablishPeer(true);
886 if (!paused())
887 EstablishSurfaceTexturePeer();
888 is_remote_ = false; 872 is_remote_ = false;
873 EstablishSurfaceTexturePeerIfNeeded();
889 ReallocateVideoFrame(); 874 ReallocateVideoFrame();
890 } 875 }
891 876
892 void WebMediaPlayerAndroid::OnDidEnterFullscreen() { 877 void WebMediaPlayerAndroid::OnDidEnterFullscreen() {
893 if (!player_manager_->IsInFullscreen(frame_)) 878 if (!player_manager_->IsInFullscreen(frame_))
894 player_manager_->DidEnterFullscreen(frame_); 879 player_manager_->DidEnterFullscreen(frame_);
895 } 880 }
896 881
897 void WebMediaPlayerAndroid::OnDidExitFullscreen() { 882 void WebMediaPlayerAndroid::OnDidExitFullscreen() {
898 // |needs_external_surface_| is always false on non-TV devices. 883 in_fullscreen_ = false;
899 if (!needs_external_surface_) 884 EstablishSurfaceTexturePeerIfNeeded();
900 SetNeedsEstablishPeer(true);
901 // We had the fullscreen surface connected to Android MediaPlayer,
902 // so reconnect our surface texture for embedded playback.
903 if (!paused() && needs_establish_peer_)
904 EstablishSurfaceTexturePeer();
905 885
906 #if defined(VIDEO_HOLE) 886 #if defined(VIDEO_HOLE)
907 if (!paused() && needs_external_surface_) 887 if (!paused() && needs_external_surface_)
908 player_manager_->RequestExternalSurface(player_id_, last_computed_rect_); 888 player_manager_->RequestExternalSurface(player_id_, last_computed_rect_);
909 #endif // defined(VIDEO_HOLE) 889 #endif // defined(VIDEO_HOLE)
910 890
911 player_manager_->DidExitFullscreen(); 891 player_manager_->DidExitFullscreen();
912 client_->repaint(); 892 client_->repaint();
913 } 893 }
914 894
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
956 client_->networkStateChanged(); 936 client_->networkStateChanged();
957 } 937 }
958 938
959 void WebMediaPlayerAndroid::UpdateReadyState( 939 void WebMediaPlayerAndroid::UpdateReadyState(
960 WebMediaPlayer::ReadyState state) { 940 WebMediaPlayer::ReadyState state) {
961 ready_state_ = state; 941 ready_state_ = state;
962 client_->readyStateChanged(); 942 client_->readyStateChanged();
963 } 943 }
964 944
965 void WebMediaPlayerAndroid::OnPlayerReleased() { 945 void WebMediaPlayerAndroid::OnPlayerReleased() {
966 // |needs_external_surface_| is always false on non-TV devices. 946 needs_establish_peer_ = true; // Established when this plays.
967 if (!needs_external_surface_)
968 needs_establish_peer_ = true;
969 947
970 if (is_playing_) 948 if (is_playing_)
971 OnMediaPlayerPause(); 949 OnMediaPlayerPause();
972 950
973 #if defined(VIDEO_HOLE) 951 #if defined(VIDEO_HOLE)
974 last_computed_rect_ = gfx::RectF(); 952 last_computed_rect_ = gfx::RectF();
975 #endif // defined(VIDEO_HOLE) 953 #endif // defined(VIDEO_HOLE)
976 } 954 }
977 955
978 void WebMediaPlayerAndroid::ReleaseMediaResources() { 956 void WebMediaPlayerAndroid::ReleaseMediaResources() {
979 switch (network_state_) { 957 switch (network_state_) {
980 // Pause the media player and inform WebKit if the player is in a good 958 // Pause the media player and inform WebKit if the player is in a good
981 // shape. 959 // shape.
982 case WebMediaPlayer::NetworkStateIdle: 960 case WebMediaPlayer::NetworkStateIdle:
983 case WebMediaPlayer::NetworkStateLoading: 961 case WebMediaPlayer::NetworkStateLoading:
984 case WebMediaPlayer::NetworkStateLoaded: 962 case WebMediaPlayer::NetworkStateLoaded:
985 Pause(false); 963 Pause(false);
986 client_->playbackStateChanged(); 964 client_->playbackStateChanged();
987 break; 965 break;
988 // If a WebMediaPlayer instance has entered into one of these states, 966 // If a WebMediaPlayer instance has entered into one of these states,
989 // the internal network state in HTMLMediaElement could be set to empty. 967 // the internal network state in HTMLMediaElement could be set to empty.
990 // And calling playbackStateChanged() could get this object deleted. 968 // And calling playbackStateChanged() could get this object deleted.
991 case WebMediaPlayer::NetworkStateEmpty: 969 case WebMediaPlayer::NetworkStateEmpty:
992 case WebMediaPlayer::NetworkStateFormatError: 970 case WebMediaPlayer::NetworkStateFormatError:
993 case WebMediaPlayer::NetworkStateNetworkError: 971 case WebMediaPlayer::NetworkStateNetworkError:
994 case WebMediaPlayer::NetworkStateDecodeError: 972 case WebMediaPlayer::NetworkStateDecodeError:
995 break; 973 break;
996 } 974 }
997 player_manager_->ReleaseResources(player_id_); 975 player_manager_->ReleaseResources(player_id_);
998 if (!needs_external_surface_) 976 needs_establish_peer_ = true; // Established when this plays.
999 SetNeedsEstablishPeer(true);
1000 } 977 }
1001 978
1002 void WebMediaPlayerAndroid::OnDestruct() { 979 void WebMediaPlayerAndroid::OnDestruct() {
1003 NOTREACHED() << "WebMediaPlayer should be destroyed before any " 980 NOTREACHED() << "WebMediaPlayer should be destroyed before any "
1004 "RenderFrameObserver::OnDestruct() gets called when " 981 "RenderFrameObserver::OnDestruct() gets called when "
1005 "the RenderFrame goes away."; 982 "the RenderFrame goes away.";
1006 } 983 }
1007 984
1008 void WebMediaPlayerAndroid::InitializePlayer( 985 void WebMediaPlayerAndroid::InitializePlayer(
1009 const GURL& url, 986 const GURL& url,
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
1232 void WebMediaPlayerAndroid::TryCreateStreamTextureProxyIfNeeded() { 1209 void WebMediaPlayerAndroid::TryCreateStreamTextureProxyIfNeeded() {
1233 DCHECK(main_thread_checker_.CalledOnValidThread()); 1210 DCHECK(main_thread_checker_.CalledOnValidThread());
1234 // Already created. 1211 // Already created.
1235 if (stream_texture_proxy_) 1212 if (stream_texture_proxy_)
1236 return; 1213 return;
1237 1214
1238 // No factory to create proxy. 1215 // No factory to create proxy.
1239 if (!stream_texture_factory_) 1216 if (!stream_texture_factory_)
1240 return; 1217 return;
1241 1218
1219 if (needs_external_surface_)
1220 return;
1221
1242 stream_texture_proxy_.reset(stream_texture_factory_->CreateProxy()); 1222 stream_texture_proxy_.reset(stream_texture_factory_->CreateProxy());
1243 if (needs_establish_peer_ && stream_texture_proxy_) { 1223 if (stream_texture_proxy_) {
1244 DoCreateStreamTexture(); 1224 DoCreateStreamTexture();
1245 ReallocateVideoFrame(); 1225 ReallocateVideoFrame();
1226
1227 if (video_frame_provider_client_)
1228 stream_texture_proxy_->SetClient(video_frame_provider_client_);
1246 } 1229 }
1247
1248 if (stream_texture_proxy_ && video_frame_provider_client_)
1249 stream_texture_proxy_->SetClient(video_frame_provider_client_);
1250 }
1251
1252 void WebMediaPlayerAndroid::EstablishSurfaceTexturePeer() {
1253 DCHECK(main_thread_checker_.CalledOnValidThread());
1254 if (!stream_texture_proxy_)
1255 return;
1256
1257 if (stream_texture_factory_.get() && stream_id_)
1258 stream_texture_factory_->EstablishPeer(stream_id_, player_id_);
1259
1260 // Set the deferred size because the size was changed in remote mode.
1261 if (!is_remote_ && cached_stream_texture_size_ != natural_size_) {
1262 stream_texture_factory_->SetStreamTextureSize(
1263 stream_id_, gfx::Size(natural_size_.width, natural_size_.height));
1264 cached_stream_texture_size_ = natural_size_;
1265 }
1266
1267 needs_establish_peer_ = false;
1268 } 1230 }
1269 1231
1270 void WebMediaPlayerAndroid::DoCreateStreamTexture() { 1232 void WebMediaPlayerAndroid::DoCreateStreamTexture() {
1271 DCHECK(main_thread_checker_.CalledOnValidThread()); 1233 DCHECK(main_thread_checker_.CalledOnValidThread());
1272 DCHECK(!stream_id_); 1234 DCHECK(!stream_id_);
1273 DCHECK(!texture_id_); 1235 DCHECK(!texture_id_);
1274 stream_id_ = stream_texture_factory_->CreateStreamTexture( 1236 stream_id_ = stream_texture_factory_->CreateStreamTexture(
1275 kGLTextureExternalOES, &texture_id_, &texture_mailbox_); 1237 kGLTextureExternalOES, &texture_id_, &texture_mailbox_);
1276 } 1238 }
1277 1239
1278 void WebMediaPlayerAndroid::SetNeedsEstablishPeer(bool needs_establish_peer) { 1240 void WebMediaPlayerAndroid::EstablishSurfaceTexturePeerIfNeeded() {
1279 needs_establish_peer_ = needs_establish_peer; 1241 DCHECK(main_thread_checker_.CalledOnValidThread());
1242 if (!needs_establish_peer_ || in_fullscreen_ || needs_external_surface_ ||
1243 is_remote_ || !is_playing_ || !stream_texture_proxy_ ||
1244 (!hasVideo() && !IsHLSStream())) {
1245 return;
1246 }
1247
1248 stream_texture_factory_->EstablishPeer(stream_id_, player_id_);
1249 if (cached_stream_texture_size_ != natural_size_) {
1250 stream_texture_factory_->SetStreamTextureSize(
1251 stream_id_, gfx::Size(natural_size_.width, natural_size_.height));
1252 cached_stream_texture_size_ = natural_size_;
1253 }
1254 needs_establish_peer_ = false;
1280 } 1255 }
1281 1256
1282 void WebMediaPlayerAndroid::setPoster(const blink::WebURL& poster) { 1257 void WebMediaPlayerAndroid::setPoster(const blink::WebURL& poster) {
1283 player_manager_->SetPoster(player_id_, poster); 1258 player_manager_->SetPoster(player_id_, poster);
1284 } 1259 }
1285 1260
1286 void WebMediaPlayerAndroid::UpdatePlayingState(bool is_playing) { 1261 void WebMediaPlayerAndroid::UpdatePlayingState(bool is_playing) {
1287 is_playing_ = is_playing; 1262 is_playing_ = is_playing;
1263 EstablishSurfaceTexturePeerIfNeeded();
1288 if (!delegate_) 1264 if (!delegate_)
1289 return; 1265 return;
1290 if (is_playing) 1266 if (is_playing)
1291 delegate_->DidPlay(this); 1267 delegate_->DidPlay(this);
1292 else 1268 else
1293 delegate_->DidPause(this); 1269 delegate_->DidPause(this);
1294 } 1270 }
1295 1271
1296 #if defined(VIDEO_HOLE) 1272 #if defined(VIDEO_HOLE)
1297 bool WebMediaPlayerAndroid::UpdateBoundaryRectangle() { 1273 bool WebMediaPlayerAndroid::UpdateBoundaryRectangle() {
(...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after
1747 decryptor_ready_cb.Run(web_cdm_->GetDecryptor(), base::Bind(DoNothing)); 1723 decryptor_ready_cb.Run(web_cdm_->GetDecryptor(), base::Bind(DoNothing));
1748 return; 1724 return;
1749 } 1725 }
1750 1726
1751 decryptor_ready_cb_ = decryptor_ready_cb; 1727 decryptor_ready_cb_ = decryptor_ready_cb;
1752 } 1728 }
1753 1729
1754 void WebMediaPlayerAndroid::enterFullscreen() { 1730 void WebMediaPlayerAndroid::enterFullscreen() {
1755 if (player_manager_->CanEnterFullscreen(frame_)) { 1731 if (player_manager_->CanEnterFullscreen(frame_)) {
1756 player_manager_->EnterFullscreen(player_id_, frame_); 1732 player_manager_->EnterFullscreen(player_id_, frame_);
1757 SetNeedsEstablishPeer(false);
1758 } 1733 }
1734 in_fullscreen_ = true;
1735 needs_establish_peer_ = true;
1736 EstablishSurfaceTexturePeerIfNeeded();
1759 } 1737 }
1760 1738
1761 bool WebMediaPlayerAndroid::canEnterFullscreen() const { 1739 bool WebMediaPlayerAndroid::canEnterFullscreen() const {
1762 return player_manager_->CanEnterFullscreen(frame_); 1740 return player_manager_->CanEnterFullscreen(frame_);
1763 } 1741 }
1764 1742
1765 bool WebMediaPlayerAndroid::IsHLSStream() const { 1743 bool WebMediaPlayerAndroid::IsHLSStream() const {
1766 std::string mime; 1744 std::string mime;
1767 GURL url = redirected_url_.is_empty() ? url_ : redirected_url_; 1745 GURL url = redirected_url_.is_empty() ? url_ : redirected_url_;
1768 if (!net::GetMimeTypeFromFile(base::FilePath(url.path()), &mime)) 1746 if (!net::GetMimeTypeFromFile(base::FilePath(url.path()), &mime))
1769 return false; 1747 return false;
1770 return !mime.compare("application/x-mpegurl"); 1748 return !mime.compare("application/x-mpegurl");
1771 } 1749 }
1772 1750
1773 } // namespace content 1751 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698