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 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
155 namespace content { | 155 namespace content { |
156 | 156 |
157 WebMediaPlayerAndroid::WebMediaPlayerAndroid( | 157 WebMediaPlayerAndroid::WebMediaPlayerAndroid( |
158 blink::WebFrame* frame, | 158 blink::WebFrame* frame, |
159 blink::WebMediaPlayerClient* client, | 159 blink::WebMediaPlayerClient* client, |
160 blink::WebMediaPlayerEncryptedMediaClient* encrypted_client, | 160 blink::WebMediaPlayerEncryptedMediaClient* encrypted_client, |
161 base::WeakPtr<media::WebMediaPlayerDelegate> delegate, | 161 base::WeakPtr<media::WebMediaPlayerDelegate> delegate, |
162 RendererMediaPlayerManager* player_manager, | 162 RendererMediaPlayerManager* player_manager, |
163 media::CdmFactory* cdm_factory, | 163 media::CdmFactory* cdm_factory, |
164 scoped_refptr<StreamTextureFactory> factory, | 164 scoped_refptr<StreamTextureFactory> factory, |
165 int frame_id, | |
165 const media::WebMediaPlayerParams& params) | 166 const media::WebMediaPlayerParams& params) |
166 : RenderFrameObserver(RenderFrame::FromWebFrame(frame)), | 167 : RenderFrameObserver(RenderFrame::FromWebFrame(frame)), |
167 frame_(frame), | 168 frame_(frame), |
168 client_(client), | 169 client_(client), |
169 encrypted_client_(encrypted_client), | 170 encrypted_client_(encrypted_client), |
170 delegate_(delegate), | 171 delegate_(delegate), |
171 defer_load_cb_(params.defer_load_cb()), | 172 defer_load_cb_(params.defer_load_cb()), |
172 buffered_(static_cast<size_t>(1)), | 173 buffered_(static_cast<size_t>(1)), |
173 media_task_runner_(params.media_task_runner()), | 174 media_task_runner_(params.media_task_runner()), |
174 ignore_metadata_duration_change_(false), | 175 ignore_metadata_duration_change_(false), |
175 pending_seek_(false), | 176 pending_seek_(false), |
176 seeking_(false), | 177 seeking_(false), |
177 did_loading_progress_(false), | 178 did_loading_progress_(false), |
178 player_manager_(player_manager), | 179 player_manager_(player_manager), |
179 cdm_factory_(cdm_factory), | 180 cdm_factory_(cdm_factory), |
180 media_permission_(params.media_permission()), | 181 media_permission_(params.media_permission()), |
181 network_state_(WebMediaPlayer::NetworkStateEmpty), | 182 network_state_(WebMediaPlayer::NetworkStateEmpty), |
182 ready_state_(WebMediaPlayer::ReadyStateHaveNothing), | 183 ready_state_(WebMediaPlayer::ReadyStateHaveNothing), |
183 texture_id_(0), | 184 texture_id_(0), |
184 stream_id_(0), | 185 stream_id_(0), |
185 is_player_initialized_(false), | 186 is_player_initialized_(false), |
186 is_playing_(false), | 187 is_playing_(false), |
187 needs_establish_peer_(true), | 188 needs_establish_peer_(true), |
188 has_size_info_(false), | 189 has_size_info_(false), |
189 // Threaded compositing isn't enabled universally yet. | 190 // Threaded compositing isn't enabled universally yet. |
190 compositor_task_runner_( | 191 compositor_task_runner_(params.compositor_task_runner() |
191 params.compositor_task_runner() | 192 ? params.compositor_task_runner() |
192 ? params.compositor_task_runner() | 193 : base::ThreadTaskRunnerHandle::Get()), |
193 : base::ThreadTaskRunnerHandle::Get()), | |
194 stream_texture_factory_(factory), | 194 stream_texture_factory_(factory), |
195 needs_external_surface_(false), | 195 needs_external_surface_(false), |
196 is_fullscreen_(false), | 196 is_fullscreen_(false), |
197 video_frame_provider_client_(NULL), | 197 video_frame_provider_client_(NULL), |
198 player_type_(MEDIA_PLAYER_TYPE_URL), | 198 player_type_(MEDIA_PLAYER_TYPE_URL), |
199 is_remote_(false), | 199 is_remote_(false), |
200 media_log_(params.media_log()), | 200 media_log_(params.media_log()), |
201 init_data_type_(media::EmeInitDataType::UNKNOWN), | 201 init_data_type_(media::EmeInitDataType::UNKNOWN), |
202 cdm_context_(NULL), | 202 cdm_context_(NULL), |
203 allow_stored_credentials_(false), | 203 allow_stored_credentials_(false), |
204 is_local_resource_(false), | 204 is_local_resource_(false), |
205 interpolator_(&default_tick_clock_), | 205 interpolator_(&default_tick_clock_), |
206 frame_id_(frame_id), | |
206 weak_factory_(this) { | 207 weak_factory_(this) { |
207 DCHECK(player_manager_); | 208 DCHECK(player_manager_); |
208 DCHECK(cdm_factory_); | 209 DCHECK(cdm_factory_); |
209 | 210 |
210 DCHECK(main_thread_checker_.CalledOnValidThread()); | 211 DCHECK(main_thread_checker_.CalledOnValidThread()); |
211 stream_texture_factory_->AddObserver(this); | 212 stream_texture_factory_->AddObserver(this); |
212 | 213 |
213 player_id_ = player_manager_->RegisterMediaPlayer(this); | 214 player_id_ = player_manager_->RegisterMediaPlayer(this); |
214 | 215 |
215 #if defined(VIDEO_HOLE) | 216 #if defined(VIDEO_HOLE) |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
266 | 267 |
267 if (media_source_delegate_) { | 268 if (media_source_delegate_) { |
268 // Part of |media_source_delegate_| needs to be stopped on the media thread. | 269 // Part of |media_source_delegate_| needs to be stopped on the media thread. |
269 // Wait until |media_source_delegate_| is fully stopped before tearing | 270 // Wait until |media_source_delegate_| is fully stopped before tearing |
270 // down other objects. | 271 // down other objects. |
271 base::WaitableEvent waiter(false, false); | 272 base::WaitableEvent waiter(false, false); |
272 media_source_delegate_->Stop( | 273 media_source_delegate_->Stop( |
273 base::Bind(&base::WaitableEvent::Signal, base::Unretained(&waiter))); | 274 base::Bind(&base::WaitableEvent::Signal, base::Unretained(&waiter))); |
274 waiter.Wait(); | 275 waiter.Wait(); |
275 } | 276 } |
277 frame_id_ = 0; | |
no sievers
2015/11/06 22:08:41
nit: not needed
sivag
2015/11/09 14:06:32
Done.
| |
276 } | 278 } |
277 | 279 |
278 void WebMediaPlayerAndroid::load(LoadType load_type, | 280 void WebMediaPlayerAndroid::load(LoadType load_type, |
279 const blink::WebURL& url, | 281 const blink::WebURL& url, |
280 CORSMode cors_mode) { | 282 CORSMode cors_mode) { |
281 if (!defer_load_cb_.is_null()) { | 283 if (!defer_load_cb_.is_null()) { |
282 defer_load_cb_.Run(base::Bind(&WebMediaPlayerAndroid::DoLoad, | 284 defer_load_cb_.Run(base::Bind(&WebMediaPlayerAndroid::DoLoad, |
283 weak_factory_.GetWeakPtr(), load_type, url, | 285 weak_factory_.GetWeakPtr(), load_type, url, |
284 cors_mode)); | 286 cors_mode)); |
285 return; | 287 return; |
(...skipping 1097 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1383 } | 1385 } |
1384 } | 1386 } |
1385 } | 1387 } |
1386 | 1388 |
1387 void WebMediaPlayerAndroid::EstablishSurfaceTexturePeer() { | 1389 void WebMediaPlayerAndroid::EstablishSurfaceTexturePeer() { |
1388 DCHECK(main_thread_checker_.CalledOnValidThread()); | 1390 DCHECK(main_thread_checker_.CalledOnValidThread()); |
1389 if (!stream_texture_proxy_) | 1391 if (!stream_texture_proxy_) |
1390 return; | 1392 return; |
1391 | 1393 |
1392 if (stream_texture_factory_.get() && stream_id_) | 1394 if (stream_texture_factory_.get() && stream_id_) |
1393 stream_texture_factory_->EstablishPeer(stream_id_, player_id_); | 1395 stream_texture_factory_->EstablishPeer(stream_id_, player_id_, frame_id_); |
1394 | 1396 |
1395 // Set the deferred size because the size was changed in remote mode. | 1397 // Set the deferred size because the size was changed in remote mode. |
1396 if (!is_remote_ && cached_stream_texture_size_ != natural_size_) { | 1398 if (!is_remote_ && cached_stream_texture_size_ != natural_size_) { |
1397 stream_texture_factory_->SetStreamTextureSize( | 1399 stream_texture_factory_->SetStreamTextureSize( |
1398 stream_id_, gfx::Size(natural_size_.width, natural_size_.height)); | 1400 stream_id_, gfx::Size(natural_size_.width, natural_size_.height)); |
1399 cached_stream_texture_size_ = natural_size_; | 1401 cached_stream_texture_size_ = natural_size_; |
1400 } | 1402 } |
1401 | 1403 |
1402 needs_establish_peer_ = false; | 1404 needs_establish_peer_ = false; |
1403 } | 1405 } |
(...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1922 | 1924 |
1923 bool is_hls = IsHLSStream(); | 1925 bool is_hls = IsHLSStream(); |
1924 UMA_HISTOGRAM_BOOLEAN("Media.Android.IsHttpLiveStreamingMedia", is_hls); | 1926 UMA_HISTOGRAM_BOOLEAN("Media.Android.IsHttpLiveStreamingMedia", is_hls); |
1925 if (is_hls) { | 1927 if (is_hls) { |
1926 media::RecordOriginOfHLSPlayback( | 1928 media::RecordOriginOfHLSPlayback( |
1927 GURL(frame_->document().securityOrigin().toString())); | 1929 GURL(frame_->document().securityOrigin().toString())); |
1928 } | 1930 } |
1929 } | 1931 } |
1930 | 1932 |
1931 } // namespace content | 1933 } // namespace content |
OLD | NEW |