Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1370)

Unified Diff: media/filters/source_buffer_stream.cc

Issue 324223003: Prevent incorrect start time from being used during new range creation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Reorg code to avoid a BufferQueue copy. Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
« no previous file with comments | « no previous file | media/filters/source_buffer_stream_unittest.cc » ('j') | media/filters/source_buffer_stream_unittest.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698