summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoracolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-05 16:24:07 +0000
committeracolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-05 16:24:07 +0000
commit525c672570ee77352c1fe74c68b45d4af10eb2df (patch)
treec761e33f21d4f33a753c945425b362da443dbe59
parentcdbcafed1be5c463d21729a40b54f0aca2f50c35 (diff)
downloadchromium_src-525c672570ee77352c1fe74c68b45d4af10eb2df.zip
chromium_src-525c672570ee77352c1fe74c68b45d4af10eb2df.tar.gz
chromium_src-525c672570ee77352c1fe74c68b45d4af10eb2df.tar.bz2
Add a unit test to verify seek behavior when WebM cues are before the first cluster.
BUG=98714 TEST=FFmpegDemuxerTest::SeekWithCuesBeforeFirstCluster Review URL: http://codereview.chromium.org/8103011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@104111 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--media/filters/ffmpeg_demuxer_unittest.cc61
1 files changed, 61 insertions, 0 deletions
diff --git a/media/filters/ffmpeg_demuxer_unittest.cc b/media/filters/ffmpeg_demuxer_unittest.cc
index c12972f..0622e01 100644
--- a/media/filters/ffmpeg_demuxer_unittest.cc
+++ b/media/filters/ffmpeg_demuxer_unittest.cc
@@ -577,4 +577,65 @@ TEST_F(FFmpegDemuxerTest, ProtocolIsStreaming) {
EXPECT_FALSE(demuxer_->IsStreaming());
}
+// Verify that seek works properly when the WebM cues data is at the start of
+// the file instead of at the end.
+TEST_F(FFmpegDemuxerTest, SeekWithCuesBeforeFirstCluster) {
+ InitializeDemuxer(CreateDataSource("bear-320x240-cues-in-front.webm"));
+
+ // Get our streams.
+ scoped_refptr<DemuxerStream> video =
+ demuxer_->GetStream(DemuxerStream::VIDEO);
+ scoped_refptr<DemuxerStream> audio =
+ demuxer_->GetStream(DemuxerStream::AUDIO);
+ ASSERT_TRUE(video);
+ ASSERT_TRUE(audio);
+
+ // Read a video packet and release it.
+ scoped_refptr<DemuxerStreamReader> reader(new DemuxerStreamReader());
+ reader->Read(video);
+ message_loop_.RunAllPending();
+ EXPECT_TRUE(reader->called());
+ ValidateBuffer(FROM_HERE, reader->buffer(), 22084, 0);
+
+ // Release the video packet and verify the other packets are still queued.
+ reader->Reset();
+ message_loop_.RunAllPending();
+
+ // Issue a simple forward seek, which should discard queued packets.
+ demuxer_->Seek(base::TimeDelta::FromMicroseconds(2500000),
+ NewExpectedStatusCB(PIPELINE_OK));
+ message_loop_.RunAllPending();
+
+ // Audio read #1.
+ reader->Read(audio);
+ message_loop_.RunAllPending();
+ EXPECT_TRUE(reader->called());
+ ValidateBuffer(FROM_HERE, reader->buffer(), 40, 2403000);
+
+ // Audio read #2.
+ reader->Reset();
+ reader->Read(audio);
+ message_loop_.RunAllPending();
+ EXPECT_TRUE(reader->called());
+ ValidateBuffer(FROM_HERE, reader->buffer(), 42, 2406000);
+
+ // Video read #1.
+ reader->Reset();
+ reader->Read(video);
+ message_loop_.RunAllPending();
+ EXPECT_TRUE(reader->called());
+ ValidateBuffer(FROM_HERE, reader->buffer(), 5276, 2402000);
+
+ // Video read #2.
+ reader->Reset();
+ reader->Read(video);
+ message_loop_.RunAllPending();
+ EXPECT_TRUE(reader->called());
+ ValidateBuffer(FROM_HERE, reader->buffer(), 1740, 2436000);
+
+ // Manually release the last reference to the buffer and verify it was freed.
+ reader->Reset();
+ message_loop_.RunAllPending();
+}
+
} // namespace media