Chromium Code Reviews| Index: media/filters/source_buffer_stream.cc |
| diff --git a/media/filters/source_buffer_stream.cc b/media/filters/source_buffer_stream.cc |
| index 7c66f28f059c37894477984355f38513fb875e9d..e7258867308ec74756befd089917b83988984780 100644 |
| --- a/media/filters/source_buffer_stream.cc |
| +++ b/media/filters/source_buffer_stream.cc |
| @@ -503,7 +503,7 @@ bool SourceBufferStream::Append(const BufferQueue& buffers) { |
| // segment, then we must make sure that we start with a keyframe. |
| // This can happen if the GOP in the previous append gets destroyed |
| // by a Remove() call. |
| - if (!new_media_segment_ && !buffers.front()->IsKeyframe()) { |
| + if (!new_media_segment_) { |
| BufferQueue::const_iterator itr = buffers.begin(); |
| // Scan past all the non-keyframes. |
| @@ -517,13 +517,15 @@ bool SourceBufferStream::Append(const BufferQueue& buffers) { |
| last_appended_buffer_timestamp_ = buffers.back()->GetDecodeTimestamp(); |
| last_appended_buffer_is_keyframe_ = buffers.back()->IsKeyframe(); |
| return true; |
| + } else if (itr != buffers.begin()) { |
| + // Copy the first keyframe and everything after it into |
| + // |trimmed_buffers|. |
| + trimmed_buffers.assign(itr, buffers.end()); |
| + buffers_for_new_range = &trimmed_buffers; |
| } |
| - // Copy the first keyframe and everything after it into |trimmed_buffers|. |
| - trimmed_buffers.assign(itr, buffers.end()); |
| - |
| - new_range_start_time = trimmed_buffers.front()->GetDecodeTimestamp(); |
| - buffers_for_new_range = &trimmed_buffers; |
| + new_range_start_time = |
| + buffers_for_new_range->front()->GetDecodeTimestamp(); |
| } |
| range_for_next_append_ = |
| @@ -1619,6 +1621,8 @@ void SourceBufferStream::DeleteAndRemoveRange(RangeList::iterator* itr) { |
| if (*itr == range_for_next_append_) { |
| DVLOG(1) << __FUNCTION__ << " deleting range_for_next_append_."; |
| range_for_next_append_ = ranges_.end(); |
| + last_appended_buffer_timestamp_ = kNoTimestamp(); |
|
acolwell GONE FROM CHROMIUM
2014/06/10 23:11:13
This prevents the interbuffer distance calculation
|
| + last_appended_buffer_is_keyframe_ = false; |
| } |
| delete **itr; |