| 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 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 288 | 288 |
| 289 compositor_->StartRendering(); | 289 compositor_->StartRendering(); |
| 290 | 290 |
| 291 if (audio_renderer_) | 291 if (audio_renderer_) |
| 292 audio_renderer_->Play(); | 292 audio_renderer_->Play(); |
| 293 | 293 |
| 294 if (delegate_) { | 294 if (delegate_) { |
| 295 // 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 |
| 296 // 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 |
| 297 // focus changes. See http://crbug.com/596516 for more details. | 297 // focus changes. See http://crbug.com/596516 for more details. |
| 298 delegate_->DidPlay(delegate_id_, hasVideo(), hasAudio(), false, | 298 delegate_->DidPlay(delegate_id_, hasVideo(), hasAudio(), |
| 299 media::MediaContentType::OneShot); | 299 media::MediaContentType::OneShot); |
| 300 delegate_->SetIdle(delegate_id_, false); |
| 300 } | 301 } |
| 301 | 302 |
| 302 paused_ = false; | 303 paused_ = false; |
| 303 } | 304 } |
| 304 | 305 |
| 305 void WebMediaPlayerMS::pause() { | 306 void WebMediaPlayerMS::pause() { |
| 306 DVLOG(1) << __func__; | 307 DVLOG(1) << __func__; |
| 307 DCHECK(thread_checker_.CalledOnValidThread()); | 308 DCHECK(thread_checker_.CalledOnValidThread()); |
| 308 | 309 |
| 309 should_play_upon_shown_ = false; | 310 should_play_upon_shown_ = false; |
| 310 media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PAUSE)); | 311 media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PAUSE)); |
| 311 if (paused_) | 312 if (paused_) |
| 312 return; | 313 return; |
| 313 | 314 |
| 314 if (video_frame_provider_) | 315 if (video_frame_provider_) |
| 315 video_frame_provider_->Pause(); | 316 video_frame_provider_->Pause(); |
| 316 | 317 |
| 317 compositor_->StopRendering(); | 318 compositor_->StopRendering(); |
| 318 compositor_->ReplaceCurrentFrameWithACopy(); | 319 compositor_->ReplaceCurrentFrameWithACopy(); |
| 319 | 320 |
| 320 if (audio_renderer_) | 321 if (audio_renderer_) |
| 321 audio_renderer_->Pause(); | 322 audio_renderer_->Pause(); |
| 322 | 323 |
| 323 if (delegate_) | 324 if (delegate_) { |
| 324 delegate_->DidPause(delegate_id_, false); | 325 delegate_->DidPause(delegate_id_); |
| 326 delegate_->SetIdle(delegate_id_, true); |
| 327 } |
| 325 | 328 |
| 326 paused_ = true; | 329 paused_ = true; |
| 327 } | 330 } |
| 328 | 331 |
| 329 bool WebMediaPlayerMS::supportsSave() const { | 332 bool WebMediaPlayerMS::supportsSave() const { |
| 330 DCHECK(thread_checker_.CalledOnValidThread()); | 333 DCHECK(thread_checker_.CalledOnValidThread()); |
| 331 return false; | 334 return false; |
| 332 } | 335 } |
| 333 | 336 |
| 334 void WebMediaPlayerMS::seek(double seconds) { | 337 void WebMediaPlayerMS::seek(double seconds) { |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 496 NOTIMPLEMENTED(); | 499 NOTIMPLEMENTED(); |
| 497 return 0; | 500 return 0; |
| 498 } | 501 } |
| 499 | 502 |
| 500 size_t WebMediaPlayerMS::videoDecodedByteCount() const { | 503 size_t WebMediaPlayerMS::videoDecodedByteCount() const { |
| 501 DCHECK(thread_checker_.CalledOnValidThread()); | 504 DCHECK(thread_checker_.CalledOnValidThread()); |
| 502 NOTIMPLEMENTED(); | 505 NOTIMPLEMENTED(); |
| 503 return 0; | 506 return 0; |
| 504 } | 507 } |
| 505 | 508 |
| 506 void WebMediaPlayerMS::OnHidden() { | 509 void WebMediaPlayerMS::OnFrameHidden() { |
| 507 #if defined(OS_ANDROID) | 510 #if defined(OS_ANDROID) |
| 508 DCHECK(thread_checker_.CalledOnValidThread()); | 511 DCHECK(thread_checker_.CalledOnValidThread()); |
| 509 | 512 |
| 510 // Method called when the RenderFrame is sent to background and suspended | 513 // Method called when the RenderFrame is sent to background and suspended |
| 511 // (android). Substitute the displayed VideoFrame with a copy to avoid | 514 // (android). Substitute the displayed VideoFrame with a copy to avoid |
| 512 // holding on to it unnecessarily. | 515 // holding on to it unnecessarily. |
| 513 // | 516 // |
| 514 // During undoable tab closures OnHidden() may be called back to back, so we | 517 // During undoable tab closures OnHidden() may be called back to back, so we |
| 515 // can't rely on |render_frame_suspended_| being false here. | 518 // can't rely on |render_frame_suspended_| being false here. |
| 516 if (frame_deliverer_) { | 519 if (frame_deliverer_) { |
| 517 io_task_runner_->PostTask( | 520 io_task_runner_->PostTask( |
| 518 FROM_HERE, base::Bind(&FrameDeliverer::SetRenderFrameSuspended, | 521 FROM_HERE, base::Bind(&FrameDeliverer::SetRenderFrameSuspended, |
| 519 base::Unretained(frame_deliverer_.get()), true)); | 522 base::Unretained(frame_deliverer_.get()), true)); |
| 520 } | 523 } |
| 521 | 524 |
| 522 if (!paused_) | 525 if (!paused_) |
| 523 compositor_->ReplaceCurrentFrameWithACopy(); | 526 compositor_->ReplaceCurrentFrameWithACopy(); |
| 524 #endif // defined(OS_ANDROID) | 527 #endif // defined(OS_ANDROID) |
| 525 } | 528 } |
| 526 | 529 |
| 527 void WebMediaPlayerMS::OnShown() { | 530 void WebMediaPlayerMS::OnFrameClosed() { |
| 531 #if defined(OS_ANDROID) |
| 532 if (!paused_) { |
| 533 pause(); |
| 534 should_play_upon_shown_ = true; |
| 535 } |
| 536 |
| 537 if (delegate_) |
| 538 delegate_->PlayerGone(delegate_id_); |
| 539 |
| 540 if (frame_deliverer_) { |
| 541 io_task_runner_->PostTask( |
| 542 FROM_HERE, base::Bind(&FrameDeliverer::SetRenderFrameSuspended, |
| 543 base::Unretained(frame_deliverer_.get()), true)); |
| 544 } |
| 545 #endif // defined(OS_ANDROID) |
| 546 } |
| 547 |
| 548 void WebMediaPlayerMS::OnFrameShown() { |
| 528 #if defined(OS_ANDROID) | 549 #if defined(OS_ANDROID) |
| 529 DCHECK(thread_checker_.CalledOnValidThread()); | 550 DCHECK(thread_checker_.CalledOnValidThread()); |
| 530 | 551 |
| 531 if (frame_deliverer_) { | 552 if (frame_deliverer_) { |
| 532 io_task_runner_->PostTask( | 553 io_task_runner_->PostTask( |
| 533 FROM_HERE, base::Bind(&FrameDeliverer::SetRenderFrameSuspended, | 554 FROM_HERE, base::Bind(&FrameDeliverer::SetRenderFrameSuspended, |
| 534 base::Unretained(frame_deliverer_.get()), false)); | 555 base::Unretained(frame_deliverer_.get()), false)); |
| 535 } | 556 } |
| 536 | 557 |
| 537 // Resume playback on visibility. play() clears |should_play_upon_shown_|. | 558 // Resume playback on visibility. play() clears |should_play_upon_shown_|. |
| 538 if (should_play_upon_shown_) | 559 if (should_play_upon_shown_) |
| 539 play(); | 560 play(); |
| 540 #endif // defined(OS_ANDROID) | 561 #endif // defined(OS_ANDROID) |
| 541 } | 562 } |
| 542 | 563 |
| 543 bool WebMediaPlayerMS::OnSuspendRequested(bool must_suspend) { | 564 void WebMediaPlayerMS::OnIdleTimeout() {} |
| 544 #if defined(OS_ANDROID) | |
| 545 if (!must_suspend) | |
| 546 return false; | |
| 547 | |
| 548 if (!paused_) { | |
| 549 pause(); | |
| 550 should_play_upon_shown_ = true; | |
| 551 } | |
| 552 | |
| 553 if (delegate_) | |
| 554 delegate_->PlayerGone(delegate_id_); | |
| 555 | |
| 556 if (frame_deliverer_) { | |
| 557 io_task_runner_->PostTask( | |
| 558 FROM_HERE, base::Bind(&FrameDeliverer::SetRenderFrameSuspended, | |
| 559 base::Unretained(frame_deliverer_.get()), true)); | |
| 560 } | |
| 561 #endif // defined(OS_ANDROID) | |
| 562 return true; | |
| 563 } | |
| 564 | 565 |
| 565 void WebMediaPlayerMS::OnPlay() { | 566 void WebMediaPlayerMS::OnPlay() { |
| 566 // TODO(perkj, magjed): It's not clear how WebRTC should work with an | 567 // TODO(perkj, magjed): It's not clear how WebRTC should work with an |
| 567 // MediaSession, until these issues are resolved, disable session controls. | 568 // MediaSession, until these issues are resolved, disable session controls. |
| 568 // http://crbug.com/595297. | 569 // http://crbug.com/595297. |
| 569 } | 570 } |
| 570 | 571 |
| 571 void WebMediaPlayerMS::OnPause() { | 572 void WebMediaPlayerMS::OnPause() { |
| 572 // TODO(perkj, magjed): See TODO in OnPlay(). | 573 // TODO(perkj, magjed): See TODO in OnPlay(). |
| 573 } | 574 } |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 702 void WebMediaPlayerMS::ResetCanvasCache() { | 703 void WebMediaPlayerMS::ResetCanvasCache() { |
| 703 DCHECK(thread_checker_.CalledOnValidThread()); | 704 DCHECK(thread_checker_.CalledOnValidThread()); |
| 704 video_renderer_.ResetCache(); | 705 video_renderer_.ResetCache(); |
| 705 } | 706 } |
| 706 | 707 |
| 707 void WebMediaPlayerMS::TriggerResize() { | 708 void WebMediaPlayerMS::TriggerResize() { |
| 708 get_client()->sizeChanged(); | 709 get_client()->sizeChanged(); |
| 709 } | 710 } |
| 710 | 711 |
| 711 } // namespace content | 712 } // namespace content |
| OLD | NEW |