Index: media/test/pipeline_integration_test.cc |
diff --git a/media/test/pipeline_integration_test.cc b/media/test/pipeline_integration_test.cc |
index 755eb1a1c726215772da945399d76ff8d78b40be..f30a5e583a40b6fee8c3dcafa7bcde2acdf8ccd9 100644 |
--- a/media/test/pipeline_integration_test.cc |
+++ b/media/test/pipeline_integration_test.cc |
@@ -555,6 +555,15 @@ class MockMediaSource { |
last_timestamp_offset_ = timestamp_offset; |
} |
+ void SetMemoryLimits(size_t limit_bytes) { |
+ chunk_demuxer_->SetMemoryLimits(DemuxerStream::AUDIO, limit_bytes); |
+ chunk_demuxer_->SetMemoryLimits(DemuxerStream::VIDEO, limit_bytes); |
+ } |
+ |
+ void EvictCodedFrames(base::TimeDelta currentMediaTime, size_t newDataSize) { |
+ chunk_demuxer_->EvictCodedFrames(kSourceId, currentMediaTime, newDataSize); |
+ } |
+ |
void EndOfStream() { |
chunk_demuxer_->MarkEndOfStream(PIPELINE_OK); |
} |
@@ -1083,6 +1092,38 @@ TEST_F(PipelineIntegrationTest, MediaSource_ConfigChange_WebM) { |
Stop(); |
} |
wolenetz
2016/01/06 19:28:41
I think explicit SourceBuffer.Remove() operations
servolk
2016/01/06 21:05:05
Good catch, done: added signalling from ChunkDemux
|
+// This test case imitates media playback with advancing media_time and |
+// continuously adding new data. At some point we should reach the buffering |
+// limit, after that MediaSource should evict some buffered data and that |
+// evicted data shold be reflected in the change of media::Pipeline buffered |
+// ranges (returned by GetBufferedTimeRanges). At that point the buffered ranges |
+// will no longer start at 0. |
+TEST_F(PipelineIntegrationTest, MediaSource_FillUp_Buffer) { |
+ const char* input_filename = "bear-320x240.webm"; |
+ MockMediaSource source(input_filename, kWebM, kAppendWholeFile); |
+ StartPipelineWithMediaSource(&source); |
+ source.SetMemoryLimits(1048576); |
+ |
+ scoped_refptr<DecoderBuffer> file = ReadTestDataFile(input_filename); |
+ |
+ auto buffered_ranges = pipeline_->GetBufferedTimeRanges(); |
+ do { |
wolenetz
2016/01/06 19:28:41
nit: before do, EXPECT_EQ(1u, buffered_ranges.size
servolk
2016/01/06 21:05:05
Done.
|
+ // Advance media_time to the end of the currently buffered data |
+ base::TimeDelta media_time = buffered_ranges.end(0); |
+ source.Seek(media_time); |
+ // Ask MediaSource to evict buffered data if buffering limit has been |
+ // reached (the data will be evicted from the front of the buffered range). |
+ source.EvictCodedFrames(media_time, file->data_size()); |
+ source.AppendAtTime(media_time, file->data(), file->data_size()); |
+ buffered_ranges = pipeline_->GetBufferedTimeRanges(); |
+ } while (buffered_ranges.size() == 1 && |
+ buffered_ranges.start(0) == base::TimeDelta::FromSeconds(0)); |
+ |
+ EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); |
+ source.Shutdown(); |
+ Stop(); |
+} |
+ |
#if !defined(DISABLE_EME_TESTS) |
TEST_F(PipelineIntegrationTest, MediaSource_ConfigChange_Encrypted_WebM) { |
MockMediaSource source("bear-320x240-16x9-aspect-av_enc-av.webm", kWebM, |