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 "media/blink/webmediaplayer_impl.h" | 5 #include "media/blink/webmediaplayer_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
303 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 303 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
304 return supports_save_; | 304 return supports_save_; |
305 } | 305 } |
306 | 306 |
307 void WebMediaPlayerImpl::seek(double seconds) { | 307 void WebMediaPlayerImpl::seek(double seconds) { |
308 DVLOG(1) << __FUNCTION__ << "(" << seconds << "s)"; | 308 DVLOG(1) << __FUNCTION__ << "(" << seconds << "s)"; |
309 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 309 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
310 | 310 |
311 ended_ = false; | 311 ended_ = false; |
312 | 312 |
313 ReadyState old_state = ready_state_; | |
313 if (ready_state_ > WebMediaPlayer::ReadyStateHaveMetadata) | 314 if (ready_state_ > WebMediaPlayer::ReadyStateHaveMetadata) |
314 SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata); | 315 SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata); |
315 | 316 |
316 base::TimeDelta seek_time = ConvertSecondsToTimestamp(seconds); | 317 base::TimeDelta seek_time = ConvertSecondsToTimestamp(seconds); |
317 | 318 |
318 if (seeking_) { | 319 if (seeking_) { |
319 pending_seek_ = true; | 320 pending_seek_ = true; |
320 pending_seek_seconds_ = seconds; | 321 pending_seek_seconds_ = seconds; |
321 if (chunk_demuxer_) | 322 if (chunk_demuxer_) |
322 chunk_demuxer_->CancelPendingSeek(seek_time); | 323 chunk_demuxer_->CancelPendingSeek(seek_time); |
323 return; | 324 return; |
324 } | 325 } |
325 | 326 |
326 media_log_->AddEvent(media_log_->CreateSeekEvent(seconds)); | 327 media_log_->AddEvent(media_log_->CreateSeekEvent(seconds)); |
327 | 328 |
328 // Update our paused time. | 329 // Update our paused time. |
329 // In paused state ignore the seek operations to current time and generate | 330 // In paused state ignore the seek operations to current time and generate |
330 // OnPipelineSeeked and OnPipelineBufferingStateChanged events | 331 // OnPipelineSeeked and OnPipelineBufferingStateChanged events |
331 // to eventually fire seeking and seeked events | 332 // to eventually fire seeking and seeked events |
332 if (paused_) { | 333 if (paused_) { |
333 if (paused_time_ != seek_time) { | 334 if (paused_time_ != seek_time || old_state != ReadyStateHaveEnoughData) { |
DaleCurtis
2015/01/06 19:18:55
Can you see if this allows the removal of OnPipeli
| |
334 paused_time_ = seek_time; | 335 paused_time_ = seek_time; |
335 } else { | 336 } else { |
336 main_task_runner_->PostTask( | 337 main_task_runner_->PostTask( |
337 FROM_HERE, base::Bind(&WebMediaPlayerImpl::OnPipelineSeeked, | 338 FROM_HERE, base::Bind(&WebMediaPlayerImpl::OnPipelineSeeked, |
338 AsWeakPtr(), false, PIPELINE_OK)); | 339 AsWeakPtr(), false, PIPELINE_OK)); |
339 main_task_runner_->PostTask( | 340 main_task_runner_->PostTask( |
340 FROM_HERE, | 341 FROM_HERE, |
341 base::Bind(&WebMediaPlayerImpl::OnPipelineBufferingStateChanged, | 342 base::Bind(&WebMediaPlayerImpl::OnPipelineBufferingStateChanged, |
342 AsWeakPtr(), BUFFERING_HAVE_ENOUGH)); | 343 AsWeakPtr(), BUFFERING_HAVE_ENOUGH)); |
343 return; | 344 return; |
(...skipping 682 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1026 compositor_task_runner_->PostTask(FROM_HERE, | 1027 compositor_task_runner_->PostTask(FROM_HERE, |
1027 base::Bind(&GetCurrentFrameAndSignal, | 1028 base::Bind(&GetCurrentFrameAndSignal, |
1028 base::Unretained(compositor_), | 1029 base::Unretained(compositor_), |
1029 &video_frame, | 1030 &video_frame, |
1030 &event)); | 1031 &event)); |
1031 event.Wait(); | 1032 event.Wait(); |
1032 return video_frame; | 1033 return video_frame; |
1033 } | 1034 } |
1034 | 1035 |
1035 } // namespace media | 1036 } // namespace media |
OLD | NEW |