Index: media/filters/source_buffer_stream.cc |
diff --git a/media/filters/source_buffer_stream.cc b/media/filters/source_buffer_stream.cc |
index 619ff47ab7d4c54a1dcc070384c3ab0bfcfe5c70..8187fa90ecfb297b7599699460594f6e7eb820a9 100644 |
--- a/media/filters/source_buffer_stream.cc |
+++ b/media/filters/source_buffer_stream.cc |
@@ -730,7 +730,7 @@ bool SourceBufferStream::GarbageCollectIfNeeded(DecodeTimestamp media_time, |
if (bytes_freed < bytes_to_free) { |
size_t front2 = FreeBuffers(bytes_to_free - bytes_freed, |
ranges_.back()->GetEndTimestamp(), false); |
- DVLOG(3) << __FUNCTION__ << " Removed " << front << " bytes from the" |
+ DVLOG(3) << __FUNCTION__ << " Removed " << front2 << " bytes from the" |
<< " front. ranges_=" << RangesToString(ranges_); |
bytes_freed += front2; |
} |
@@ -855,13 +855,17 @@ size_t SourceBufferStream::FreeBuffers(size_t total_bytes_to_free, |
} else { |
current_range = ranges_.front(); |
DVLOG(5) << "current_range=" << RangeToString(*current_range); |
- if (!current_range->FirstGOPEarlierThanMediaTime(media_time)) { |
+ if (!current_range->FirstGOPEarlierThanMediaTime(media_time) || |
+ current_range->FirstGOPContainsNextBufferPosition()) { |
wolenetz
2016/02/13 01:35:07
This is the core of the fix...
servolk
2016/02/16 19:28:38
Have you been able to figure out exactly how this
wolenetz
2016/02/16 20:12:47
Yes. I've confirmed at least one way this happens
servolk
2016/02/16 23:11:24
ok, but this requires seeking to a very precise po
chcunningham
2016/02/16 23:36:25
After chatting f2f we settled on doing the "altern
wolenetz
2016/02/16 23:37:55
Acknowledged. Unfortunately, I have been hitting t
|
// We have removed all data up to the GOP that contains current playback |
// position, we can't delete any further. |
DVLOG(5) << "current_range contains playback position, stopping GC"; |
break; |
} |
- DVLOG(4) << "Deleting GOP from front: " << RangeToString(*current_range); |
+ DVLOG(4) << "Deleting GOP from front: " << RangeToString(*current_range) |
+ << ", media_time: " << media_time.InMicroseconds() |
+ << ", current_range->HasNextBufferPosition(): " |
+ << current_range->HasNextBufferPosition(); |
bytes_deleted = current_range->DeleteGOPFromFront(&buffers); |
} |