| 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/webmediaplayer_ms.h" | 5 #include "content/renderer/media/webmediaplayer_ms.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <limits> | 8 #include <limits> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 base::ThreadChecker io_thread_checker_; | 136 base::ThreadChecker io_thread_checker_; |
| 137 | 137 |
| 138 base::WeakPtrFactory<FrameDeliverer> weak_factory_; | 138 base::WeakPtrFactory<FrameDeliverer> weak_factory_; |
| 139 | 139 |
| 140 DISALLOW_COPY_AND_ASSIGN(FrameDeliverer); | 140 DISALLOW_COPY_AND_ASSIGN(FrameDeliverer); |
| 141 }; | 141 }; |
| 142 | 142 |
| 143 WebMediaPlayerMS::WebMediaPlayerMS( | 143 WebMediaPlayerMS::WebMediaPlayerMS( |
| 144 blink::WebFrame* frame, | 144 blink::WebFrame* frame, |
| 145 blink::WebMediaPlayerClient* client, | 145 blink::WebMediaPlayerClient* client, |
| 146 base::WeakPtr<media::WebMediaPlayerDelegate> delegate, | 146 media::WebMediaPlayerDelegate* delegate, |
| 147 media::MediaLog* media_log, | 147 media::MediaLog* media_log, |
| 148 std::unique_ptr<MediaStreamRendererFactory> factory, | 148 std::unique_ptr<MediaStreamRendererFactory> factory, |
| 149 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner, | 149 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner, |
| 150 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner, | 150 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner, |
| 151 scoped_refptr<base::SingleThreadTaskRunner> media_task_runner, | 151 scoped_refptr<base::SingleThreadTaskRunner> media_task_runner, |
| 152 scoped_refptr<base::TaskRunner> worker_task_runner, | 152 scoped_refptr<base::TaskRunner> worker_task_runner, |
| 153 media::GpuVideoAcceleratorFactories* gpu_factories, | 153 media::GpuVideoAcceleratorFactories* gpu_factories, |
| 154 const blink::WebString& sink_id, | 154 const blink::WebString& sink_id, |
| 155 const blink::WebSecurityOrigin& security_origin) | 155 const blink::WebSecurityOrigin& security_origin) |
| 156 : frame_(frame), | 156 : frame_(frame), |
| (...skipping 14 matching lines...) Expand all Loading... |
| 171 gpu_factories_(gpu_factories), | 171 gpu_factories_(gpu_factories), |
| 172 initial_audio_output_device_id_(sink_id.utf8()), | 172 initial_audio_output_device_id_(sink_id.utf8()), |
| 173 initial_security_origin_(security_origin.isNull() | 173 initial_security_origin_(security_origin.isNull() |
| 174 ? url::Origin() | 174 ? url::Origin() |
| 175 : url::Origin(security_origin)), | 175 : url::Origin(security_origin)), |
| 176 volume_(1.0), | 176 volume_(1.0), |
| 177 volume_multiplier_(1.0), | 177 volume_multiplier_(1.0), |
| 178 should_play_upon_shown_(false) { | 178 should_play_upon_shown_(false) { |
| 179 DVLOG(1) << __func__; | 179 DVLOG(1) << __func__; |
| 180 DCHECK(client); | 180 DCHECK(client); |
| 181 if (delegate_) | 181 DCHECK(delegate_); |
| 182 delegate_id_ = delegate_->AddObserver(this); | 182 delegate_id_ = delegate_->AddObserver(this); |
| 183 | 183 |
| 184 media_log_->AddEvent( | 184 media_log_->AddEvent( |
| 185 media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED)); | 185 media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED)); |
| 186 } | 186 } |
| 187 | 187 |
| 188 WebMediaPlayerMS::~WebMediaPlayerMS() { | 188 WebMediaPlayerMS::~WebMediaPlayerMS() { |
| 189 DVLOG(1) << __func__; | 189 DVLOG(1) << __func__; |
| 190 DCHECK(thread_checker_.CalledOnValidThread()); | 190 DCHECK(thread_checker_.CalledOnValidThread()); |
| 191 | 191 |
| 192 // Destruct compositor resources in the proper order. | 192 // Destruct compositor resources in the proper order. |
| 193 get_client()->setWebLayer(nullptr); | 193 get_client()->setWebLayer(nullptr); |
| 194 if (video_weblayer_) | 194 if (video_weblayer_) |
| 195 static_cast<cc::VideoLayer*>(video_weblayer_->layer())->StopUsingProvider(); | 195 static_cast<cc::VideoLayer*>(video_weblayer_->layer())->StopUsingProvider(); |
| 196 | 196 |
| 197 if (frame_deliverer_) | 197 if (frame_deliverer_) |
| 198 io_task_runner_->DeleteSoon(FROM_HERE, frame_deliverer_.release()); | 198 io_task_runner_->DeleteSoon(FROM_HERE, frame_deliverer_.release()); |
| 199 | 199 |
| 200 if (compositor_) | 200 if (compositor_) |
| 201 compositor_->StopUsingProvider(); | 201 compositor_->StopUsingProvider(); |
| 202 | 202 |
| 203 if (video_frame_provider_) | 203 if (video_frame_provider_) |
| 204 video_frame_provider_->Stop(); | 204 video_frame_provider_->Stop(); |
| 205 | 205 |
| 206 if (audio_renderer_) | 206 if (audio_renderer_) |
| 207 audio_renderer_->Stop(); | 207 audio_renderer_->Stop(); |
| 208 | 208 |
| 209 media_log_->AddEvent( | 209 media_log_->AddEvent( |
| 210 media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_DESTROYED)); | 210 media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_DESTROYED)); |
| 211 | 211 |
| 212 if (delegate_) { | 212 delegate_->PlayerGone(delegate_id_); |
| 213 delegate_->PlayerGone(delegate_id_); | 213 delegate_->RemoveObserver(delegate_id_); |
| 214 delegate_->RemoveObserver(delegate_id_); | |
| 215 } | |
| 216 } | 214 } |
| 217 | 215 |
| 218 void WebMediaPlayerMS::load(LoadType load_type, | 216 void WebMediaPlayerMS::load(LoadType load_type, |
| 219 const blink::WebMediaPlayerSource& source, | 217 const blink::WebMediaPlayerSource& source, |
| 220 CORSMode /*cors_mode*/) { | 218 CORSMode /*cors_mode*/) { |
| 221 DVLOG(1) << __func__; | 219 DVLOG(1) << __func__; |
| 222 DCHECK(thread_checker_.CalledOnValidThread()); | 220 DCHECK(thread_checker_.CalledOnValidThread()); |
| 223 | 221 |
| 224 // TODO(acolwell): Change this to DCHECK_EQ(load_type, LoadTypeMediaStream) | 222 // TODO(acolwell): Change this to DCHECK_EQ(load_type, LoadTypeMediaStream) |
| 225 // once Blink-side changes land. | 223 // once Blink-side changes land. |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 284 return; | 282 return; |
| 285 | 283 |
| 286 if (video_frame_provider_) | 284 if (video_frame_provider_) |
| 287 video_frame_provider_->Resume(); | 285 video_frame_provider_->Resume(); |
| 288 | 286 |
| 289 compositor_->StartRendering(); | 287 compositor_->StartRendering(); |
| 290 | 288 |
| 291 if (audio_renderer_) | 289 if (audio_renderer_) |
| 292 audio_renderer_->Play(); | 290 audio_renderer_->Play(); |
| 293 | 291 |
| 294 if (delegate_) { | 292 // TODO(perkj, magjed): We use OneShot focus type here so that it takes |
| 295 // TODO(perkj, magjed): We use OneShot focus type here so that it takes | 293 // audio focus once it starts, and then will not respond to further audio |
| 296 // audio focus once it starts, and then will not respond to further audio | 294 // focus changes. See http://crbug.com/596516 for more details. |
| 297 // focus changes. See http://crbug.com/596516 for more details. | 295 delegate_->DidPlay(delegate_id_, hasVideo(), hasAudio(), |
| 298 delegate_->DidPlay(delegate_id_, hasVideo(), hasAudio(), | 296 media::MediaContentType::OneShot); |
| 299 media::MediaContentType::OneShot); | 297 delegate_->SetIdle(delegate_id_, false); |
| 300 delegate_->SetIdle(delegate_id_, false); | |
| 301 } | |
| 302 | 298 |
| 303 paused_ = false; | 299 paused_ = false; |
| 304 } | 300 } |
| 305 | 301 |
| 306 void WebMediaPlayerMS::pause() { | 302 void WebMediaPlayerMS::pause() { |
| 307 DVLOG(1) << __func__; | 303 DVLOG(1) << __func__; |
| 308 DCHECK(thread_checker_.CalledOnValidThread()); | 304 DCHECK(thread_checker_.CalledOnValidThread()); |
| 309 | 305 |
| 310 should_play_upon_shown_ = false; | 306 should_play_upon_shown_ = false; |
| 311 media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PAUSE)); | 307 media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PAUSE)); |
| 312 if (paused_) | 308 if (paused_) |
| 313 return; | 309 return; |
| 314 | 310 |
| 315 if (video_frame_provider_) | 311 if (video_frame_provider_) |
| 316 video_frame_provider_->Pause(); | 312 video_frame_provider_->Pause(); |
| 317 | 313 |
| 318 compositor_->StopRendering(); | 314 compositor_->StopRendering(); |
| 319 compositor_->ReplaceCurrentFrameWithACopy(); | 315 compositor_->ReplaceCurrentFrameWithACopy(); |
| 320 | 316 |
| 321 if (audio_renderer_) | 317 if (audio_renderer_) |
| 322 audio_renderer_->Pause(); | 318 audio_renderer_->Pause(); |
| 323 | 319 |
| 324 if (delegate_) { | 320 delegate_->DidPause(delegate_id_); |
| 325 delegate_->DidPause(delegate_id_); | 321 delegate_->SetIdle(delegate_id_, true); |
| 326 delegate_->SetIdle(delegate_id_, true); | |
| 327 } | |
| 328 | 322 |
| 329 paused_ = true; | 323 paused_ = true; |
| 330 } | 324 } |
| 331 | 325 |
| 332 bool WebMediaPlayerMS::supportsSave() const { | 326 bool WebMediaPlayerMS::supportsSave() const { |
| 333 DCHECK(thread_checker_.CalledOnValidThread()); | 327 DCHECK(thread_checker_.CalledOnValidThread()); |
| 334 return false; | 328 return false; |
| 335 } | 329 } |
| 336 | 330 |
| 337 void WebMediaPlayerMS::seek(double seconds) { | 331 void WebMediaPlayerMS::seek(double seconds) { |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 527 #endif // defined(OS_ANDROID) | 521 #endif // defined(OS_ANDROID) |
| 528 } | 522 } |
| 529 | 523 |
| 530 void WebMediaPlayerMS::OnFrameClosed() { | 524 void WebMediaPlayerMS::OnFrameClosed() { |
| 531 #if defined(OS_ANDROID) | 525 #if defined(OS_ANDROID) |
| 532 if (!paused_) { | 526 if (!paused_) { |
| 533 pause(); | 527 pause(); |
| 534 should_play_upon_shown_ = true; | 528 should_play_upon_shown_ = true; |
| 535 } | 529 } |
| 536 | 530 |
| 537 if (delegate_) | 531 delegate_->PlayerGone(delegate_id_); |
| 538 delegate_->PlayerGone(delegate_id_); | |
| 539 | 532 |
| 540 if (frame_deliverer_) { | 533 if (frame_deliverer_) { |
| 541 io_task_runner_->PostTask( | 534 io_task_runner_->PostTask( |
| 542 FROM_HERE, base::Bind(&FrameDeliverer::SetRenderFrameSuspended, | 535 FROM_HERE, base::Bind(&FrameDeliverer::SetRenderFrameSuspended, |
| 543 base::Unretained(frame_deliverer_.get()), true)); | 536 base::Unretained(frame_deliverer_.get()), true)); |
| 544 } | 537 } |
| 545 #endif // defined(OS_ANDROID) | 538 #endif // defined(OS_ANDROID) |
| 546 } | 539 } |
| 547 | 540 |
| 548 void WebMediaPlayerMS::OnFrameShown() { | 541 void WebMediaPlayerMS::OnFrameShown() { |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 703 void WebMediaPlayerMS::ResetCanvasCache() { | 696 void WebMediaPlayerMS::ResetCanvasCache() { |
| 704 DCHECK(thread_checker_.CalledOnValidThread()); | 697 DCHECK(thread_checker_.CalledOnValidThread()); |
| 705 video_renderer_.ResetCache(); | 698 video_renderer_.ResetCache(); |
| 706 } | 699 } |
| 707 | 700 |
| 708 void WebMediaPlayerMS::TriggerResize() { | 701 void WebMediaPlayerMS::TriggerResize() { |
| 709 get_client()->sizeChanged(); | 702 get_client()->sizeChanged(); |
| 710 } | 703 } |
| 711 | 704 |
| 712 } // namespace content | 705 } // namespace content |
| OLD | NEW |