diff options
author | acolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-05 16:24:07 +0000 |
---|---|---|
committer | acolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-05 16:24:07 +0000 |
commit | 525c672570ee77352c1fe74c68b45d4af10eb2df (patch) | |
tree | c761e33f21d4f33a753c945425b362da443dbe59 | |
parent | cdbcafed1be5c463d21729a40b54f0aca2f50c35 (diff) | |
download | chromium_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.cc | 61 |
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 |