Import Cobalt 2.13610
diff --git a/src/cobalt/build/build.id b/src/cobalt/build/build.id index a0e7819..b3eeb13 100644 --- a/src/cobalt/build/build.id +++ b/src/cobalt/build/build.id
@@ -1 +1 @@ -13418 \ No newline at end of file +13610 \ No newline at end of file
diff --git a/src/media/base/sbplayer_pipeline.cc b/src/media/base/sbplayer_pipeline.cc index b9d2262..64497b8 100644 --- a/src/media/base/sbplayer_pipeline.cc +++ b/src/media/base/sbplayer_pipeline.cc
@@ -201,8 +201,6 @@ scoped_refptr<SbPlayerSetBoundsHelper> set_bounds_helper_; - bool flushing_; - // The following member variables can be accessed from WMPI thread but all // modifications to them happens on the pipeline thread. So any access of // them from the WMPI thread and any modification to them on the pipeline @@ -232,7 +230,6 @@ has_video_(false), audio_read_in_progress_(false), video_read_in_progress_(false), - flushing_(false), set_bounds_helper_(new SbPlayerSetBoundsHelper), suspended_(false) {} @@ -327,19 +324,17 @@ seek_cb.Run(PIPELINE_ERROR_INVALID_STATE); } + player_->PrepareForSeek(); + DCHECK(seek_cb_.is_null()); DCHECK(!seek_cb.is_null()); - flushing_ = true; - if (audio_read_in_progress_ || video_read_in_progress_) { message_loop_->PostTask( FROM_HERE, base::Bind(&SbPlayerPipeline::Seek, this, time, seek_cb)); return; } - player_->PrepareForSeek(); - { base::AutoLock auto_lock(lock_); seek_cb_ = seek_cb; @@ -637,7 +632,6 @@ DCHECK(message_loop_->BelongsToCurrentThread()); if (status == PIPELINE_OK) { - flushing_ = false; player_->Seek(seek_time_); } } @@ -682,7 +676,6 @@ video_read_in_progress_ = false; } if (!seek_cb_.is_null()) { - buffering_state_cb_.Run(kPrerollCompleted); PipelineStatusCB seek_cb; { base::AutoLock auto_lock(lock_); @@ -718,10 +711,6 @@ return; } - if (flushing_) { - return; - } - if (type == DemuxerStream::AUDIO) { if (audio_read_in_progress_) { return;
diff --git a/src/media/base/starboard_player.cc b/src/media/base/starboard_player.cc index ce5197c..2708468 100644 --- a/src/media/base/starboard_player.cc +++ b/src/media/base/starboard_player.cc
@@ -40,6 +40,7 @@ ticket_(SB_PLAYER_INITIAL_TICKET), volume_(1.0), paused_(true), + seek_pending_(false), state_(kPlaying) { DCHECK(audio_config.IsValidConfig()); DCHECK(video_config.IsValidConfig()); @@ -131,6 +132,8 @@ void StarboardPlayer::PrepareForSeek() { DCHECK(message_loop_->BelongsToCurrentThread()); ++ticket_; + SbPlayerSetPause(player_, true); + seek_pending_ = true; } void StarboardPlayer::Seek(base::TimeDelta time) { @@ -154,6 +157,10 @@ ++ticket_; SbPlayerSeek(player_, TimeDeltaToSbMediaTime(time), ticket_); + seek_pending_ = false; + if (!paused_) { + SbPlayerSetPause(player_, false); + } } void StarboardPlayer::SetVolume(float volume) { @@ -174,8 +181,10 @@ DCHECK(message_loop_->BelongsToCurrentThread()); DCHECK(SbPlayerIsValid(player_)); - SbPlayerSetPause(player_, pause); paused_ = pause; + if (!seek_pending_) { + SbPlayerSetPause(player_, pause); + } } void StarboardPlayer::GetInfo(uint32* video_frames_decoded,
diff --git a/src/media/base/starboard_player.h b/src/media/base/starboard_player.h index 0f71acb..2d9dc58 100644 --- a/src/media/base/starboard_player.h +++ b/src/media/base/starboard_player.h
@@ -131,6 +131,7 @@ int ticket_; float volume_; bool paused_; + bool seek_pending_; DecoderBufferCache decoder_buffer_cache_; // The following variables can be accessed from GetInfo(), which can be called