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 got_first_frame_(false), |
| 52 total_frame_count_(0), | 51 total_frame_count_(0), |
| 53 dropped_frame_count_(0), | 52 dropped_frame_count_(0), |
| 54 media_log_(media_log) { | 53 media_log_(media_log) { |
| 55 DVLOG(1) << "WebMediaPlayerMS::ctor"; | 54 DVLOG(1) << "WebMediaPlayerMS::ctor"; |
| 56 DCHECK(media_stream_client); | 55 DCHECK(media_stream_client); |
| 57 media_log_->AddEvent( | 56 media_log_->AddEvent( |
| 58 media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED)); | 57 media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED)); |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 86 // Check if this url is media stream. | 85 // Check if this url is media stream. |
| 87 video_frame_provider_ = media_stream_client_->GetVideoFrameProvider( | 86 video_frame_provider_ = media_stream_client_->GetVideoFrameProvider( |
| 88 url, | 87 url, |
| 89 base::Bind(&WebMediaPlayerMS::OnSourceError, AsWeakPtr()), | 88 base::Bind(&WebMediaPlayerMS::OnSourceError, AsWeakPtr()), |
| 90 base::Bind(&WebMediaPlayerMS::OnFrameAvailable, AsWeakPtr())); | 89 base::Bind(&WebMediaPlayerMS::OnFrameAvailable, AsWeakPtr())); |
| 91 if (video_frame_provider_) { | 90 if (video_frame_provider_) { |
| 92 SetNetworkState(WebMediaPlayer::NetworkStateLoaded); | 91 SetNetworkState(WebMediaPlayer::NetworkStateLoaded); |
| 93 GetClient()->sourceOpened(); | 92 GetClient()->sourceOpened(); |
| 94 GetClient()->setOpaque(true); | 93 GetClient()->setOpaque(true); |
| 95 SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata); | 94 SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata); |
| 96 SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData); | 95 video_frame_provider_->Start(); |
| 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 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 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 (!got_first_frame_) { |
| 350 got_first_frame_ = true; | 344 got_first_frame_ = true; |
| 351 start_time_ = frame->GetTimestamp(); | 345 start_time_ = frame->GetTimestamp(); |
| 346 paused_ = false; | |
|
scherkus (not reviewing)
2012/10/19 22:16:37
as discussed offline... you shouldn't set this
wjia(left Chromium)
2012/10/21 22:11:12
Done.
| |
| 347 SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData); | |
| 348 RepaintInternal(); | |
| 352 } | 349 } |
| 353 bool size_changed = !current_frame_ || | 350 bool size_changed = !current_frame_ || |
| 354 current_frame_->natural_size() != frame->natural_size(); | 351 current_frame_->natural_size() != frame->natural_size(); |
| 355 | 352 |
| 356 current_frame_ = frame; | 353 current_frame_ = frame; |
| 357 current_frame_->SetTimestamp(frame->GetTimestamp() - start_time_); | 354 current_frame_->SetTimestamp(frame->GetTimestamp() - start_time_); |
| 358 | 355 |
| 359 if (size_changed) | 356 if (size_changed) |
| 360 GetClient()->sizeChanged(); | 357 GetClient()->sizeChanged(); |
| 361 | 358 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 397 GetClient()->readyStateChanged(); | 394 GetClient()->readyStateChanged(); |
| 398 } | 395 } |
| 399 | 396 |
| 400 WebKit::WebMediaPlayerClient* WebMediaPlayerMS::GetClient() { | 397 WebKit::WebMediaPlayerClient* WebMediaPlayerMS::GetClient() { |
| 401 DCHECK(thread_checker_.CalledOnValidThread()); | 398 DCHECK(thread_checker_.CalledOnValidThread()); |
| 402 DCHECK(client_); | 399 DCHECK(client_); |
| 403 return client_; | 400 return client_; |
| 404 } | 401 } |
| 405 | 402 |
| 406 } // namespace webkit_media | 403 } // namespace webkit_media |
| OLD | NEW |