Index: media/filters/source_buffer_stream.cc |
diff --git a/media/filters/source_buffer_stream.cc b/media/filters/source_buffer_stream.cc |
index 7081f1aee41350c6d4ad9a44c15c1383115995ed..c80504f2de2220ff7268f4205ae1a641daeeda03 100644 |
--- a/media/filters/source_buffer_stream.cc |
+++ b/media/filters/source_buffer_stream.cc |
@@ -825,12 +825,18 @@ SourceBufferRange* SourceBufferRange::SplitRange(base::TimeDelta timestamp) { |
new SourceBufferRange( |
removed_buffers, kNoTimestamp(), interbuffer_distance_cb_); |
- // If |next_buffer_index_| points to a buffer in |split_range|, update the |
- // |next_buffer_index_| of this range and |split_range| accordingly. |
+ // If the next buffer position is now in |split_range|, update the state of |
+ // this range and |split_range| accordingly. |
if (next_buffer_index_ >= static_cast<int>(buffers_.size())) { |
+ DCHECK(!waiting_for_keyframe_); |
split_range->next_buffer_index_ = next_buffer_index_ - keyframe_index; |
- next_buffer_index_ = -1; |
+ ResetNextBufferPosition(); |
+ } else if (waiting_for_keyframe_) { |
+ split_range->waiting_for_keyframe_ = true; |
+ split_range->next_keyframe_timestamp_ = next_keyframe_timestamp_; |
+ ResetNextBufferPosition(); |
} |
+ |
return split_range; |
} |
@@ -885,7 +891,7 @@ bool SourceBufferRange::TruncateAt( |
BufferQueue saved(starting_point + next_buffer_offset, buffers_.end()); |
removed_buffers->swap(saved); |
} |
- next_buffer_index_ = -1; |
+ ResetNextBufferPosition(); |
removed_next_buffer = true; |
} |
} |