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

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

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