| Index: webkit/glue/webmediaplayer_impl.cc
|
| diff --git a/webkit/glue/webmediaplayer_impl.cc b/webkit/glue/webmediaplayer_impl.cc
|
| index a7d687876d69bbdb15c842e62a203092724141de..ad690bc94c6ece9adc436a268d2a86cb90aaa3a5 100644
|
| --- a/webkit/glue/webmediaplayer_impl.cc
|
| +++ b/webkit/glue/webmediaplayer_impl.cc
|
| @@ -40,6 +40,7 @@
|
| using WebKit::WebCanvas;
|
| using WebKit::WebRect;
|
| using WebKit::WebSize;
|
| +using media::NetworkEvent;
|
| using media::PipelineStatus;
|
|
|
| namespace {
|
| @@ -118,7 +119,8 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(
|
| delegate_(delegate),
|
| media_stream_client_(media_stream_client),
|
| media_log_(media_log),
|
| - incremented_externally_allocated_memory_(false) {
|
| + incremented_externally_allocated_memory_(false),
|
| + can_play_through_(false) {
|
| // Saves the current message loop.
|
| DCHECK(!main_loop_);
|
| main_loop_ = MessageLoop::current();
|
| @@ -326,9 +328,8 @@ void WebMediaPlayerImpl::seek(float seconds) {
|
| base::TimeDelta seek_time = ConvertSecondsToTimestamp(seconds);
|
|
|
| // Update our paused time.
|
| - if (paused_) {
|
| + if (paused_)
|
| paused_time_ = seek_time;
|
| - }
|
|
|
| seeking_ = true;
|
|
|
| @@ -449,9 +450,8 @@ float WebMediaPlayerImpl::duration() const {
|
|
|
| float WebMediaPlayerImpl::currentTime() const {
|
| DCHECK_EQ(main_loop_, MessageLoop::current());
|
| - if (paused_) {
|
| + if (paused_)
|
| return static_cast<float>(paused_time_.InSecondsF());
|
| - }
|
| return static_cast<float>(pipeline_->GetCurrentTime().InSecondsF());
|
| }
|
|
|
| @@ -696,15 +696,11 @@ void WebMediaPlayerImpl::OnPipelineInitialize(PipelineStatus status) {
|
| static_cast<float>(pipeline_->GetMediaDuration().InSecondsF());
|
| buffered_.swap(new_buffered);
|
|
|
| - if (pipeline_->IsLoaded()) {
|
| + if (pipeline_->IsLoaded())
|
| SetNetworkState(WebKit::WebMediaPlayer::Loaded);
|
| - }
|
|
|
| - // Since we have initialized the pipeline, say we have everything otherwise
|
| - // we'll remain either loading/idle.
|
| - // TODO(hclam): change this to report the correct status.
|
| SetReadyState(WebKit::WebMediaPlayer::HaveMetadata);
|
| - SetReadyState(WebKit::WebMediaPlayer::HaveEnoughData);
|
| + SetReadyState(WebKit::WebMediaPlayer::HaveFutureData);
|
| } else {
|
| // TODO(hclam): should use |status| to determine the state
|
| // properly and reports error using MediaError.
|
| @@ -729,20 +725,22 @@ void WebMediaPlayerImpl::OnPipelineSeek(PipelineStatus status) {
|
|
|
| if (status == media::PIPELINE_OK) {
|
| // Update our paused time.
|
| - if (paused_) {
|
| + if (paused_)
|
| paused_time_ = pipeline_->GetCurrentTime();
|
| - }
|
|
|
| - SetReadyState(WebKit::WebMediaPlayer::HaveEnoughData);
|
| + if (can_play_through_)
|
| + SetReadyState(WebKit::WebMediaPlayer::HaveFutureData);
|
| + else
|
| + SetReadyState(WebKit::WebMediaPlayer::HaveEnoughData);
|
| +
|
| GetClient()->timeChanged();
|
| }
|
| }
|
|
|
| void WebMediaPlayerImpl::OnPipelineEnded(PipelineStatus status) {
|
| DCHECK_EQ(main_loop_, MessageLoop::current());
|
| - if (status == media::PIPELINE_OK) {
|
| + if (status == media::PIPELINE_OK)
|
| GetClient()->timeChanged();
|
| - }
|
| }
|
|
|
| void WebMediaPlayerImpl::OnPipelineError(PipelineStatus error) {
|
| @@ -786,12 +784,24 @@ void WebMediaPlayerImpl::OnPipelineError(PipelineStatus error) {
|
| Repaint();
|
| }
|
|
|
| -void WebMediaPlayerImpl::OnNetworkEvent(bool is_downloading_data) {
|
| +void WebMediaPlayerImpl::OnNetworkEvent(NetworkEvent type) {
|
| DCHECK_EQ(main_loop_, MessageLoop::current());
|
| - if (is_downloading_data)
|
| - SetNetworkState(WebKit::WebMediaPlayer::Loading);
|
| - else
|
| - SetNetworkState(WebKit::WebMediaPlayer::Idle);
|
| + switch(type) {
|
| + case media::DOWNLOAD_CONTINUED:
|
| + SetNetworkState(WebKit::WebMediaPlayer::Loading);
|
| + break;
|
| + case media::DOWNLOAD_PAUSED:
|
| + SetNetworkState(WebKit::WebMediaPlayer::Idle);
|
| + break;
|
| + case media::CAN_PLAY_THROUGH:
|
| + if (!can_play_through_) {
|
| + can_play_through_ = true;
|
| + SetReadyState(WebKit::WebMediaPlayer::HaveEnoughData);
|
| + }
|
| + break;
|
| + default:
|
| + NOTREACHED();
|
| + }
|
| }
|
|
|
| void WebMediaPlayerImpl::OnDemuxerOpened() {
|
|
|