| Index: media/filters/source_buffer_stream.cc
|
| diff --git a/media/filters/source_buffer_stream.cc b/media/filters/source_buffer_stream.cc
|
| index fb699dbad5e85739b306751898c644c62013b64b..4271ab9601bb44393a6f79f0db3fd09daf7c00fd 100644
|
| --- a/media/filters/source_buffer_stream.cc
|
| +++ b/media/filters/source_buffer_stream.cc
|
| @@ -337,6 +337,11 @@ bool SourceBufferStream::Append(const BufferQueue& buffers) {
|
|
|
| track_buffer_.insert(track_buffer_.end(), deleted_buffers.begin(),
|
| deleted_buffers.end());
|
| + DVLOG(3) << __FUNCTION__ << " Added " << deleted_buffers.size()
|
| + << " deleted buffers to track buffer. TB size is now "
|
| + << track_buffer_.size();
|
| + } else {
|
| + DVLOG(3) << __FUNCTION__ << " No deleted buffers for track buffer";
|
| }
|
|
|
| // Prune any extra buffers in |track_buffer_| if new keyframes
|
| @@ -824,11 +829,14 @@ void SourceBufferStream::PrepareRangesForNextAppend(
|
| DecodeTimestamp end = new_buffers.back()->GetDecodeTimestamp();
|
| base::TimeDelta duration = new_buffers.back()->duration();
|
|
|
| - if (duration != kNoTimestamp() && duration > base::TimeDelta()) {
|
| + // Set end time for remove to include the duration of last buffer. If the
|
| + // duration is estimated, use 1 microsecond instead to ensure frames are not
|
| + // accidentally removed due to over-estimation.
|
| + if (duration != kNoTimestamp() && duration > base::TimeDelta() &&
|
| + !new_buffers.back()->is_duration_estimated()) {
|
| end += duration;
|
| } else {
|
| - // TODO(acolwell): Ensure all buffers actually have proper
|
| - // duration info so that this hack isn't needed.
|
| + // TODO(chcunningham): Emit warning when 0ms durations are not expected.
|
| // http://crbug.com/312836
|
| end += base::TimeDelta::FromInternalValue(1);
|
| }
|
| @@ -1077,6 +1085,7 @@ SourceBufferStream::Status SourceBufferStream::GetNextBufferInternal(
|
| return kConfigChange;
|
| }
|
|
|
| + DVLOG(3) << __FUNCTION__ << " Next buffer coming from track_buffer_";
|
| *out_buffer = next_buffer;
|
| track_buffer_.pop_front();
|
| last_output_buffer_timestamp_ = (*out_buffer)->GetDecodeTimestamp();
|
|
|