Chromium Code Reviews| 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/android/build_info.h" | 9 #include "base/android/build_info.h" |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 139 stream_texture_factory_(factory), | 139 stream_texture_factory_(factory), |
| 140 needs_external_surface_(false), | 140 needs_external_surface_(false), |
| 141 video_frame_provider_client_(NULL), | 141 video_frame_provider_client_(NULL), |
| 142 pending_playback_(false), | 142 pending_playback_(false), |
| 143 player_type_(MEDIA_PLAYER_TYPE_URL), | 143 player_type_(MEDIA_PLAYER_TYPE_URL), |
| 144 current_time_(0), | 144 current_time_(0), |
| 145 is_remote_(false), | 145 is_remote_(false), |
| 146 media_log_(media_log), | 146 media_log_(media_log), |
| 147 web_cdm_(NULL), | 147 web_cdm_(NULL), |
| 148 allow_stored_credentials_(false), | 148 allow_stored_credentials_(false), |
| 149 is_local_resource_(false), | |
| 149 weak_factory_(this) { | 150 weak_factory_(this) { |
| 150 DCHECK(player_manager_); | 151 DCHECK(player_manager_); |
| 151 DCHECK(cdm_manager_); | 152 DCHECK(cdm_manager_); |
| 152 | 153 |
| 153 DCHECK(main_thread_checker_.CalledOnValidThread()); | 154 DCHECK(main_thread_checker_.CalledOnValidThread()); |
| 154 | 155 |
| 155 player_id_ = player_manager_->RegisterMediaPlayer(this); | 156 player_id_ = player_manager_->RegisterMediaPlayer(this); |
| 156 | 157 |
| 157 #if defined(VIDEO_HOLE) | 158 #if defined(VIDEO_HOLE) |
| 158 force_use_overlay_embedded_video_ = CommandLine::ForCurrentProcess()-> | 159 force_use_overlay_embedded_video_ = CommandLine::ForCurrentProcess()-> |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 209 player_type_ = MEDIA_PLAYER_TYPE_MEDIA_SOURCE; | 210 player_type_ = MEDIA_PLAYER_TYPE_MEDIA_SOURCE; |
| 210 break; | 211 break; |
| 211 | 212 |
| 212 case LoadTypeMediaStream: | 213 case LoadTypeMediaStream: |
| 213 CHECK(false) << "WebMediaPlayerAndroid doesn't support MediaStream on " | 214 CHECK(false) << "WebMediaPlayerAndroid doesn't support MediaStream on " |
| 214 "this platform"; | 215 "this platform"; |
| 215 return; | 216 return; |
| 216 } | 217 } |
| 217 | 218 |
| 218 url_ = url; | 219 url_ = url; |
| 220 is_local_resource_ = IsLocalResource(); | |
| 219 int demuxer_client_id = 0; | 221 int demuxer_client_id = 0; |
| 220 if (player_type_ != MEDIA_PLAYER_TYPE_URL) { | 222 if (player_type_ != MEDIA_PLAYER_TYPE_URL) { |
| 221 RendererDemuxerAndroid* demuxer = | 223 RendererDemuxerAndroid* demuxer = |
| 222 RenderThreadImpl::current()->renderer_demuxer(); | 224 RenderThreadImpl::current()->renderer_demuxer(); |
| 223 demuxer_client_id = demuxer->GetNextDemuxerClientID(); | 225 demuxer_client_id = demuxer->GetNextDemuxerClientID(); |
| 224 | 226 |
| 225 media_source_delegate_.reset(new MediaSourceDelegate( | 227 media_source_delegate_.reset(new MediaSourceDelegate( |
| 226 demuxer, demuxer_client_id, media_loop_, media_log_)); | 228 demuxer, demuxer_client_id, media_loop_, media_log_)); |
| 227 | 229 |
| 228 if (player_type_ == MEDIA_PLAYER_TYPE_MEDIA_SOURCE) { | 230 if (player_type_ == MEDIA_PLAYER_TYPE_MEDIA_SOURCE) { |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 270 UpdateNetworkState(WebMediaPlayer::NetworkStateNetworkError); | 272 UpdateNetworkState(WebMediaPlayer::NetworkStateNetworkError); |
| 271 return; | 273 return; |
| 272 } | 274 } |
| 273 | 275 |
| 274 InitializePlayer( | 276 InitializePlayer( |
| 275 redirected_url, first_party_for_cookies, allow_stored_credentials, 0); | 277 redirected_url, first_party_for_cookies, allow_stored_credentials, 0); |
| 276 | 278 |
| 277 UpdateNetworkState(WebMediaPlayer::NetworkStateIdle); | 279 UpdateNetworkState(WebMediaPlayer::NetworkStateIdle); |
| 278 } | 280 } |
| 279 | 281 |
| 282 bool WebMediaPlayerAndroid::IsLocalResource() { | |
| 283 if (url_.SchemeIsFile() || url_.SchemeIsBlob()) | |
| 284 return true; | |
| 285 | |
| 286 if (url_.spec().find("//127.0.0.1/") != std::string::npos || // port 80 | |
|
qinmin
2014/08/26 03:44:17
use:
std::string host = url_.host();
if (!host.c
amogh.bihani
2014/08/26 05:31:14
Done.
| |
| 287 url_.spec().find("//localhost/") != std::string::npos || | |
| 288 url_.spec().find("//127.0.0.1:") != std::string::npos || // any port | |
| 289 url_.spec().find("//localhost:") != std::string::npos) { | |
| 290 return true; | |
| 291 } | |
| 292 | |
| 293 return false; | |
| 294 } | |
| 295 | |
| 280 void WebMediaPlayerAndroid::play() { | 296 void WebMediaPlayerAndroid::play() { |
| 281 DCHECK(main_thread_checker_.CalledOnValidThread()); | 297 DCHECK(main_thread_checker_.CalledOnValidThread()); |
| 282 #if defined(VIDEO_HOLE) | 298 #if defined(VIDEO_HOLE) |
| 283 if (hasVideo() && needs_external_surface_ && | 299 if (hasVideo() && needs_external_surface_ && |
| 284 !player_manager_->IsInFullscreen(frame_)) { | 300 !player_manager_->IsInFullscreen(frame_)) { |
| 285 DCHECK(!needs_establish_peer_); | 301 DCHECK(!needs_establish_peer_); |
| 286 player_manager_->RequestExternalSurface(player_id_, last_computed_rect_); | 302 player_manager_->RequestExternalSurface(player_id_, last_computed_rect_); |
| 287 } | 303 } |
| 288 #endif // defined(VIDEO_HOLE) | 304 #endif // defined(VIDEO_HOLE) |
| 289 | 305 |
| (...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 672 return media_source_delegate_->VideoDecodedByteCount(); | 688 return media_source_delegate_->VideoDecodedByteCount(); |
| 673 NOTIMPLEMENTED(); | 689 NOTIMPLEMENTED(); |
| 674 return 0; | 690 return 0; |
| 675 } | 691 } |
| 676 | 692 |
| 677 void WebMediaPlayerAndroid::OnMediaMetadataChanged( | 693 void WebMediaPlayerAndroid::OnMediaMetadataChanged( |
| 678 const base::TimeDelta& duration, int width, int height, bool success) { | 694 const base::TimeDelta& duration, int width, int height, bool success) { |
| 679 DCHECK(main_thread_checker_.CalledOnValidThread()); | 695 DCHECK(main_thread_checker_.CalledOnValidThread()); |
| 680 bool need_to_signal_duration_changed = false; | 696 bool need_to_signal_duration_changed = false; |
| 681 | 697 |
| 682 if (url_.SchemeIs("file")) | 698 if (is_local_resource_) |
| 683 UpdateNetworkState(WebMediaPlayer::NetworkStateLoaded); | 699 UpdateNetworkState(WebMediaPlayer::NetworkStateLoaded); |
| 684 | 700 |
| 685 // Update duration, if necessary, prior to ready state updates that may | 701 // Update duration, if necessary, prior to ready state updates that may |
| 686 // cause duration() query. | 702 // cause duration() query. |
| 687 if (!ignore_metadata_duration_change_ && duration_ != duration) { | 703 if (!ignore_metadata_duration_change_ && duration_ != duration) { |
| 688 duration_ = duration; | 704 duration_ = duration; |
| 689 | 705 |
| 690 // Client readyState transition from HAVE_NOTHING to HAVE_METADATA | 706 // Client readyState transition from HAVE_NOTHING to HAVE_METADATA |
| 691 // already triggers a durationchanged event. If this is a different | 707 // already triggers a durationchanged event. If this is a different |
| 692 // transition, remember to signal durationchanged. | 708 // transition, remember to signal durationchanged. |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 830 | 846 |
| 831 // TODO(qinmin): This is a hack. We need the media element to stop showing the | 847 // TODO(qinmin): This is a hack. We need the media element to stop showing the |
| 832 // poster image by forcing it to call setDisplayMode(video). Should move the | 848 // poster image by forcing it to call setDisplayMode(video). Should move the |
| 833 // logic into HTMLMediaElement.cpp. | 849 // logic into HTMLMediaElement.cpp. |
| 834 client_->timeChanged(); | 850 client_->timeChanged(); |
| 835 } | 851 } |
| 836 | 852 |
| 837 void WebMediaPlayerAndroid::OnTimeUpdate(const base::TimeDelta& current_time) { | 853 void WebMediaPlayerAndroid::OnTimeUpdate(const base::TimeDelta& current_time) { |
| 838 DCHECK(main_thread_checker_.CalledOnValidThread()); | 854 DCHECK(main_thread_checker_.CalledOnValidThread()); |
| 839 current_time_ = current_time.InSecondsF(); | 855 current_time_ = current_time.InSecondsF(); |
| 856 if (is_local_resource_ && current_time_ <= duration()) | |
|
amogh.bihani
2014/08/22 09:02:45
I have used a bool instead of calling IsLocalResou
| |
| 857 buffered_[0].end = current_time_; | |
| 840 } | 858 } |
| 841 | 859 |
| 842 void WebMediaPlayerAndroid::OnConnectedToRemoteDevice( | 860 void WebMediaPlayerAndroid::OnConnectedToRemoteDevice( |
| 843 const std::string& remote_playback_message) { | 861 const std::string& remote_playback_message) { |
| 844 DCHECK(main_thread_checker_.CalledOnValidThread()); | 862 DCHECK(main_thread_checker_.CalledOnValidThread()); |
| 845 DCHECK(!media_source_delegate_); | 863 DCHECK(!media_source_delegate_); |
| 846 DrawRemotePlaybackText(remote_playback_message); | 864 DrawRemotePlaybackText(remote_playback_message); |
| 847 is_remote_ = true; | 865 is_remote_ = true; |
| 848 SetNeedsEstablishPeer(false); | 866 SetNeedsEstablishPeer(false); |
| 849 } | 867 } |
| (...skipping 871 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1721 player_manager_->EnterFullscreen(player_id_, frame_); | 1739 player_manager_->EnterFullscreen(player_id_, frame_); |
| 1722 SetNeedsEstablishPeer(false); | 1740 SetNeedsEstablishPeer(false); |
| 1723 } | 1741 } |
| 1724 } | 1742 } |
| 1725 | 1743 |
| 1726 bool WebMediaPlayerAndroid::canEnterFullscreen() const { | 1744 bool WebMediaPlayerAndroid::canEnterFullscreen() const { |
| 1727 return player_manager_->CanEnterFullscreen(frame_); | 1745 return player_manager_->CanEnterFullscreen(frame_); |
| 1728 } | 1746 } |
| 1729 | 1747 |
| 1730 } // namespace content | 1748 } // namespace content |
| OLD | NEW |