is_buffering_ = false;
current_position_ = base::TimeDelta();
is_seeking_ = false;
+ is_readytoseek_ = false;
expected_seek_ = false;
seek_position_ = base::TimeDelta();
pending_seek_ = false;
}
is_seeking_ = true;
+ is_readytoseek_ = false;
seek_position_ = time;
pending_seek_ = false;
pending_seek_position_ = base::TimeDelta();
UpdateBufferedDtsDifference();
expected_seek_ = true;
+ SetShouldFeed(DemuxerStream::AUDIO, false);
+ SetShouldFeed(DemuxerStream::VIDEO, false);
ClearBufferQueue(DemuxerStream::VIDEO);
ClearBufferQueue(DemuxerStream::AUDIO);
buffer_observer_->ResetBufferStatus();
case kBufferUnderrun:
case kBufferMinThreshold:
case kBufferNormal:
- is_buffering_ = true;
- SetShouldFeed(type, true);
- ReadBuffer(type);
+ if (is_seeking_ && is_readytoseek_ == false) {
+ LOG_ID(INFO, player_id_)
+ << "Ignore the buffer status before read to seek";
+ } else {
+ is_buffering_ = true;
+ SetShouldFeed(type, true);
+ ReadBuffer(type);
+ }
break;
case kBufferMaxThreshold:
case kBufferOverflow:
return;
}
LOG_ID(INFO, player_id_) << "(" << static_cast<void*>(this) << ") "
- << __func__ << " : "
+ << __func__ << " (clear queue first): "
<< DemuxerStream::GetTypeName(
GetDemuxerStreamType(stream_type))
<< " : " << seek_time;
LOG_ID(INFO, player_id_) << "player is destroyed:" << (void*)this;
return;
}
-
+ is_readytoseek_ = true;
+ ClearBufferQueue(GetDemuxerStreamType(stream_type));
SetShouldFeed(GetDemuxerStreamType(stream_type), true);
SetIsEos(GetDemuxerStreamType(stream_type), false);
ReadBuffer(GetDemuxerStreamType(stream_type));
current_position_ = seek_position_;
is_seeking_ = false;
expected_seek_ = false;
+ is_readytoseek_ = false;
seek_position_ = base::TimeDelta();
if (!is_paused_)