| Index: media/filters/chunk_demuxer.cc
|
| diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc
|
| index 66eb09a011eb0c2f121d5fab0d69fbb79c001248..1edff064182e70886fadbf469cb46652ecad3123 100644
|
| --- a/media/filters/chunk_demuxer.cc
|
| +++ b/media/filters/chunk_demuxer.cc
|
| @@ -1209,7 +1209,8 @@ bool ChunkDemuxer::IsValidId(const std::string& source_id) const {
|
| }
|
|
|
| void ChunkDemuxer::UpdateDuration(TimeDelta new_duration) {
|
| - DCHECK(duration_ != new_duration);
|
| + DCHECK(duration_ != new_duration ||
|
| + user_specified_duration_ != new_duration.InSecondsF());
|
| user_specified_duration_ = -1;
|
| duration_ = new_duration;
|
| host_->SetDuration(new_duration);
|
| @@ -1249,8 +1250,12 @@ void ChunkDemuxer::DecreaseDurationIfNecessary() {
|
| if (max_duration.is_zero())
|
| return;
|
|
|
| - if (max_duration < duration_)
|
| + // Note: be careful to also check |user_specified_duration_|, which may have
|
| + // higher precision than |duration_|.
|
| + if (max_duration < duration_ ||
|
| + max_duration.InSecondsF() < user_specified_duration_) {
|
| UpdateDuration(max_duration);
|
| + }
|
| }
|
|
|
| Ranges<TimeDelta> ChunkDemuxer::GetBufferedRanges() const {
|
|
|