Chromium Code Reviews| Index: media/base/android/media_codec_player.cc |
| diff --git a/media/base/android/media_codec_player.cc b/media/base/android/media_codec_player.cc |
| index 44de230061e1e14901f7bc0920938ec9c0632ea1..80168a8723f188dd09d040db7793a81021c67049 100644 |
| --- a/media/base/android/media_codec_player.cc |
| +++ b/media/base/android/media_codec_player.cc |
| @@ -441,8 +441,12 @@ void MediaCodecPlayer::OnDemuxerSeekDone( |
| : seek_info_->seek_time; |
| interpolator_.SetBounds(seek_time, seek_time); |
| + |
| audio_decoder_->SetBaseTimestamp(seek_time); |
| + audio_decoder_->SetPrerollTimestamp(seek_time); |
| + video_decoder_->SetPrerollTimestamp(seek_time); |
| + |
| // The Flush() might set the state to kStateError. |
| if (state_ == kStateError) { |
| // Notify the Renderer. |
| @@ -608,6 +612,12 @@ void MediaCodecPlayer::OnPrerollDone() { |
| DCHECK(GetMediaTaskRunner()->BelongsToCurrentThread()); |
| DVLOG(1) << __FUNCTION__; |
| + if (state_ != kStatePlaying) { |
| + DVLOG(1) << __FUNCTION__ << ": in state " << AsString(state_) |
| + << ", ignoring"; |
| + return; |
| + } |
| + |
| StartStatus status = StartDecoders(); |
| if (status != kStartOk) |
| GetMediaTaskRunner()->PostTask(FROM_HERE, internal_error_cb_); |
| @@ -630,24 +640,14 @@ void MediaCodecPlayer::OnDecoderDrained(DemuxerStream::Type type) { |
| if (type == DemuxerStream::AUDIO && !VideoFinished()) { |
| DVLOG(1) << __FUNCTION__ << " requesting to stop video"; |
| - video_decoder_->SetDecodingUntilOutputIsPresent(); |
| video_decoder_->RequestToStop(); |
| } else if (type == DemuxerStream::VIDEO && !AudioFinished()) { |
| DVLOG(1) << __FUNCTION__ << " requesting to stop audio"; |
| - audio_decoder_->SetDecodingUntilOutputIsPresent(); |
| audio_decoder_->RequestToStop(); |
| } |
| break; |
| - case kStateStopping: |
| - if (type == DemuxerStream::AUDIO && !VideoFinished()) |
| - video_decoder_->SetDecodingUntilOutputIsPresent(); |
| - else if (type == DemuxerStream::VIDEO && !AudioFinished()) |
| - audio_decoder_->SetDecodingUntilOutputIsPresent(); |
| - break; |
| - |
| default: |
| - NOTREACHED(); |
| break; |
| } |
| } |
| @@ -963,9 +963,7 @@ MediaCodecPlayer::StartStatus MediaCodecPlayer::MaybePrerollDecoders( |
| bool* preroll_required) { |
| DCHECK(GetMediaTaskRunner()->BelongsToCurrentThread()); |
| - base::TimeDelta current_time = GetInterpolatedTime(); |
| - |
| - DVLOG(1) << __FUNCTION__ << " current_time:" << current_time; |
| + DVLOG(1) << __FUNCTION__ << " current_time:" << GetInterpolatedTime(); |
| // If requested, preroll is always done in the beginning of the playback, |
| // after prefetch. The request might not happen at all though, in which case |
| @@ -978,12 +976,12 @@ MediaCodecPlayer::StartStatus MediaCodecPlayer::MaybePrerollDecoders( |
| *preroll_required = false; |
| int count = 0; |
| - const bool do_audio_preroll = audio_decoder_->NotCompletedAndNeedsPreroll(); |
| - if (do_audio_preroll) |
| + const bool do_audio = audio_decoder_->NotCompletedAndNeedsPreroll(); |
| + if (do_audio) |
| ++count; |
| - const bool do_video_preroll = video_decoder_->NotCompletedAndNeedsPreroll(); |
| - if (do_video_preroll) |
| + const bool do_video = video_decoder_->NotCompletedAndNeedsPreroll(); |
| + if (do_video) |
| ++count; |
| if (count == 0) { |
| @@ -994,20 +992,20 @@ MediaCodecPlayer::StartStatus MediaCodecPlayer::MaybePrerollDecoders( |
| *preroll_required = true; |
| DCHECK(count > 0); |
| - DCHECK(do_audio_preroll || do_video_preroll); |
| + DCHECK(do_audio || do_video); |
| DVLOG(1) << __FUNCTION__ << ": preroll for " << count << " stream(s)"; |
| base::Closure preroll_cb = base::BarrierClosure( |
| count, base::Bind(&MediaCodecPlayer::OnPrerollDone, media_weak_this_)); |
| - if (do_audio_preroll) { |
| - if (!audio_decoder_->Preroll(current_time, preroll_cb)) |
| + if (do_audio) { |
|
qinmin
2015/09/03 05:30:04
simply if (do_audio && !audio_decoder_->Preroll(p
Tima Vaisburd
2015/09/03 19:55:27
Done.
|
| + if (!audio_decoder_->Preroll(preroll_cb)) |
| return kStartFailed; |
| } |
| - if (do_video_preroll) { |
| - if (!video_decoder_->Preroll(current_time, preroll_cb)) |
| + if (do_video) { |
|
qinmin
2015/09/03 05:30:04
ditto
Tima Vaisburd
2015/09/03 19:55:27
Done.
|
| + if (!video_decoder_->Preroll(preroll_cb)) |
| return kStartFailed; |
| } |