Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "webkit/media/webmediaplayer_ms.h" | 5 #include "webkit/media/webmediaplayer_ms.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 38 base::WeakPtr<WebMediaPlayerDelegate> delegate, | 38 base::WeakPtr<WebMediaPlayerDelegate> delegate, |
| 39 MediaStreamClient* media_stream_client, | 39 MediaStreamClient* media_stream_client, |
| 40 media::MediaLog* media_log) | 40 media::MediaLog* media_log) |
| 41 : frame_(frame), | 41 : frame_(frame), |
| 42 network_state_(WebMediaPlayer::NetworkStateEmpty), | 42 network_state_(WebMediaPlayer::NetworkStateEmpty), |
| 43 ready_state_(WebMediaPlayer::ReadyStateHaveNothing), | 43 ready_state_(WebMediaPlayer::ReadyStateHaveNothing), |
| 44 buffered_(static_cast<size_t>(1)), | 44 buffered_(static_cast<size_t>(1)), |
| 45 client_(client), | 45 client_(client), |
| 46 delegate_(delegate), | 46 delegate_(delegate), |
| 47 media_stream_client_(media_stream_client), | 47 media_stream_client_(media_stream_client), |
| 48 video_frame_provider_started_(false), | |
| 49 paused_(true), | 48 paused_(true), |
| 50 pending_repaint_(false), | 49 pending_repaint_(false), |
| 51 got_first_frame_(false), | 50 received_first_frame_(false), |
| 51 sequence_started_(false), | |
| 52 total_frame_count_(0), | 52 total_frame_count_(0), |
| 53 dropped_frame_count_(0), | 53 dropped_frame_count_(0), |
| 54 media_log_(media_log) { | 54 media_log_(media_log) { |
| 55 DVLOG(1) << "WebMediaPlayerMS::ctor"; | 55 DVLOG(1) << "WebMediaPlayerMS::ctor"; |
| 56 DCHECK(media_stream_client); | 56 DCHECK(media_stream_client); |
| 57 media_log_->AddEvent( | 57 media_log_->AddEvent( |
| 58 media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED)); | 58 media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED)); |
| 59 } | 59 } |
| 60 | 60 |
| 61 WebMediaPlayerMS::~WebMediaPlayerMS() { | 61 WebMediaPlayerMS::~WebMediaPlayerMS() { |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 85 | 85 |
| 86 // Check if this url is media stream. | 86 // Check if this url is media stream. |
| 87 video_frame_provider_ = media_stream_client_->GetVideoFrameProvider( | 87 video_frame_provider_ = media_stream_client_->GetVideoFrameProvider( |
| 88 url, | 88 url, |
| 89 base::Bind(&WebMediaPlayerMS::OnSourceError, AsWeakPtr()), | 89 base::Bind(&WebMediaPlayerMS::OnSourceError, AsWeakPtr()), |
| 90 base::Bind(&WebMediaPlayerMS::OnFrameAvailable, AsWeakPtr())); | 90 base::Bind(&WebMediaPlayerMS::OnFrameAvailable, AsWeakPtr())); |
| 91 if (video_frame_provider_) { | 91 if (video_frame_provider_) { |
| 92 SetNetworkState(WebMediaPlayer::NetworkStateLoaded); | 92 SetNetworkState(WebMediaPlayer::NetworkStateLoaded); |
| 93 GetClient()->sourceOpened(); | 93 GetClient()->sourceOpened(); |
| 94 GetClient()->setOpaque(true); | 94 GetClient()->setOpaque(true); |
| 95 SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata); | 95 video_frame_provider_->Start(); |
| 96 SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData); | |
| 97 RepaintInternal(); | |
| 98 } else { | 96 } else { |
| 99 SetNetworkState(WebMediaPlayer::NetworkStateNetworkError); | 97 SetNetworkState(WebMediaPlayer::NetworkStateNetworkError); |
| 100 } | 98 } |
| 101 } | 99 } |
| 102 | 100 |
| 103 void WebMediaPlayerMS::cancelLoad() { | 101 void WebMediaPlayerMS::cancelLoad() { |
| 104 DCHECK(thread_checker_.CalledOnValidThread()); | 102 DCHECK(thread_checker_.CalledOnValidThread()); |
| 105 } | 103 } |
| 106 | 104 |
| 107 void WebMediaPlayerMS::play() { | 105 void WebMediaPlayerMS::play() { |
| 108 DVLOG(1) << "WebMediaPlayerMS::play"; | 106 DVLOG(1) << "WebMediaPlayerMS::play"; |
| 109 DCHECK(thread_checker_.CalledOnValidThread()); | 107 DCHECK(thread_checker_.CalledOnValidThread()); |
| 110 | 108 |
| 109 if (video_frame_provider_ && paused_) { | |
| 110 video_frame_provider_->Play(); | |
| 111 } | |
| 111 paused_ = false; | 112 paused_ = false; |
| 112 if (video_frame_provider_) { | 113 |
| 113 if (video_frame_provider_started_) { | |
| 114 video_frame_provider_->Play(); | |
| 115 } else { | |
| 116 video_frame_provider_started_ = true; | |
| 117 video_frame_provider_->Start(); | |
| 118 } | |
| 119 } | |
| 120 // TODO(wjia): add audio. See crbug.com/142988. | 114 // TODO(wjia): add audio. See crbug.com/142988. |
| 121 | 115 |
| 122 media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PLAY)); | 116 media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PLAY)); |
| 123 | 117 |
| 124 if (delegate_) | 118 if (delegate_) |
| 125 delegate_->DidPlay(this); | 119 delegate_->DidPlay(this); |
| 126 } | 120 } |
| 127 | 121 |
| 128 void WebMediaPlayerMS::pause() { | 122 void WebMediaPlayerMS::pause() { |
| 129 DVLOG(1) << "WebMediaPlayerMS::pause"; | 123 DVLOG(1) << "WebMediaPlayerMS::pause"; |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 339 if (web_video_frame) { | 333 if (web_video_frame) { |
| 340 delete web_video_frame; | 334 delete web_video_frame; |
| 341 } | 335 } |
| 342 } | 336 } |
| 343 | 337 |
| 344 void WebMediaPlayerMS::OnFrameAvailable( | 338 void WebMediaPlayerMS::OnFrameAvailable( |
| 345 const scoped_refptr<media::VideoFrame>& frame) { | 339 const scoped_refptr<media::VideoFrame>& frame) { |
| 346 DVLOG(3) << "WebMediaPlayerMS::OnFrameAvailable"; | 340 DVLOG(3) << "WebMediaPlayerMS::OnFrameAvailable"; |
| 347 DCHECK(thread_checker_.CalledOnValidThread()); | 341 DCHECK(thread_checker_.CalledOnValidThread()); |
| 348 ++total_frame_count_; | 342 ++total_frame_count_; |
| 349 if (!got_first_frame_) { | 343 if (!received_first_frame_) { |
| 350 got_first_frame_ = true; | 344 received_first_frame_ = true; |
| 345 current_frame_ = media::VideoFrame::CreateBlackFrame(frame->natural_size()); | |
| 346 SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata); | |
| 347 SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData); | |
| 348 GetClient()->sizeChanged(); | |
| 349 } | |
| 350 | |
| 351 // Do not update |current_frame_| when paused. | |
| 352 if (paused_) | |
| 353 return; | |
| 354 | |
| 355 if (!sequence_started_) { | |
| 356 sequence_started_ = true; | |
| 351 start_time_ = frame->GetTimestamp(); | 357 start_time_ = frame->GetTimestamp(); |
|
scherkus (not reviewing)
2012/10/22 17:40:05
when we play, then pause, then play again won't ti
| |
| 352 } | 358 } |
| 353 bool size_changed = !current_frame_ || | 359 bool size_changed = !current_frame_ || |
| 354 current_frame_->natural_size() != frame->natural_size(); | 360 current_frame_->natural_size() != frame->natural_size(); |
| 355 | 361 |
| 356 current_frame_ = frame; | 362 current_frame_ = frame; |
| 357 current_frame_->SetTimestamp(frame->GetTimestamp() - start_time_); | 363 current_frame_->SetTimestamp(frame->GetTimestamp() - start_time_); |
| 358 | 364 |
| 359 if (size_changed) | 365 if (size_changed) |
| 360 GetClient()->sizeChanged(); | 366 GetClient()->sizeChanged(); |
| 361 | 367 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 397 GetClient()->readyStateChanged(); | 403 GetClient()->readyStateChanged(); |
| 398 } | 404 } |
| 399 | 405 |
| 400 WebKit::WebMediaPlayerClient* WebMediaPlayerMS::GetClient() { | 406 WebKit::WebMediaPlayerClient* WebMediaPlayerMS::GetClient() { |
| 401 DCHECK(thread_checker_.CalledOnValidThread()); | 407 DCHECK(thread_checker_.CalledOnValidThread()); |
| 402 DCHECK(client_); | 408 DCHECK(client_); |
| 403 return client_; | 409 return client_; |
| 404 } | 410 } |
| 405 | 411 |
| 406 } // namespace webkit_media | 412 } // namespace webkit_media |
| OLD | NEW |