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

Unified Diff: media/filters/chunk_demuxer_unittest.cc

Issue 10832151: Add kSeekToStartFudgeRoom to SourceBufferStream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 4 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
« no previous file with comments | « no previous file | media/filters/source_buffer_stream.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/filters/chunk_demuxer_unittest.cc
diff --git a/media/filters/chunk_demuxer_unittest.cc b/media/filters/chunk_demuxer_unittest.cc
index 71ebe9adfd7e2d2a8a48492a52426ad07ae2f0ad..13ce02181f941eaaa93dedf1530e122d36cd9bcb 100644
--- a/media/filters/chunk_demuxer_unittest.cc
+++ b/media/filters/chunk_demuxer_unittest.cc
@@ -72,6 +72,10 @@ MATCHER_P(HasTimestamp, timestamp_in_ms, "") {
arg->GetTimestamp().InMilliseconds() == timestamp_in_ms;
}
+MATCHER(IsEndOfStream, "") {
+ return arg && arg->IsEndOfStream();
+}
+
static void OnReadDone(const base::TimeDelta& expected_time,
bool* called,
DemuxerStream::Status status,
@@ -585,6 +589,12 @@ class ChunkDemuxerTest : public testing::Test {
MOCK_METHOD2(ReadDone, void(DemuxerStream::Status status,
const scoped_refptr<DecoderBuffer>&));
+ void ExpectStall(DemuxerStream* stream) {
acolwell GONE FROM CHROMIUM 2012/08/04 00:04:51 s/ExpectStall/ExpectEndOfStream/ ? since that look
vrk (LEFT CHROMIUM) 2012/08/06 20:43:42 Done.
+ EXPECT_CALL(*this, ReadDone(DemuxerStream::kOk, IsEndOfStream()));
+ stream->Read(base::Bind(&ChunkDemuxerTest::ReadDone,
+ base::Unretained(this)));
+ }
+
void ExpectRead(DemuxerStream* stream, int64 timestamp_in_ms) {
EXPECT_CALL(*this, ReadDone(DemuxerStream::kOk,
HasTimestamp(timestamp_in_ms)));
@@ -1765,6 +1775,34 @@ TEST_F(ChunkDemuxerTest, TestDifferentStreamTimecodesSeparateSources) {
GenerateSingleStreamExpectedReads(30, 4, video, kVideoBlockDuration);
}
+TEST_F(ChunkDemuxerTest, TestDifferentStreamTimecodesOutOfRange) {
+ std::string audio_id = "audio1";
+ std::string video_id = "video1";
+ ASSERT_TRUE(InitDemuxerAudioAndVideoSources(audio_id, video_id));
+
+ scoped_refptr<DemuxerStream> audio =
+ demuxer_->GetStream(DemuxerStream::AUDIO);
+ scoped_refptr<DemuxerStream> video =
+ demuxer_->GetStream(DemuxerStream::VIDEO);
+
+ // Generate two streams where the video stream starts 10s after the audio
+ // stream and append them.
+ scoped_ptr<Cluster> cluster_v(
+ GenerateSingleStreamCluster(10000, 4 * kVideoBlockDuration + 10000,
+ kVideoTrackNum, kVideoBlockDuration));
+ scoped_ptr<Cluster> cluster_a(
+ GenerateSingleStreamCluster(0, 4 * kAudioBlockDuration + 0,
+ kAudioTrackNum, kAudioBlockDuration));
+ ASSERT_TRUE(AppendData(audio_id, cluster_a->data(), cluster_a->size()));
+ ASSERT_TRUE(AppendData(video_id, cluster_v->data(), cluster_v->size()));
+
+ // Should not be able to fulfill a seek to 0.
+ demuxer_->Seek(base::TimeDelta::FromMilliseconds(0),
+ NewExpectedStatusCB(PIPELINE_ERROR_ABORT));
+ ExpectRead(audio, 0);
+ ExpectStall(video);
+}
+
TEST_F(ChunkDemuxerTest, TestClusterWithNoBuffers) {
ASSERT_TRUE(InitDemuxer(true, true, false));
@@ -2112,22 +2150,41 @@ TEST_F(ChunkDemuxerTest, TestTimestampOffsetSeparateStreams) {
scoped_refptr<DemuxerStream> video =
demuxer_->GetStream(DemuxerStream::VIDEO);
- scoped_ptr<Cluster> cluster_a(
+ scoped_ptr<Cluster> cluster_a1(
GenerateSingleStreamCluster(
2500, 2500 + kAudioBlockDuration * 4, kAudioTrackNum,
kAudioBlockDuration));
- scoped_ptr<Cluster> cluster_v(
+ scoped_ptr<Cluster> cluster_v1(
+ GenerateSingleStreamCluster(
+ 2500, 2500 + kVideoBlockDuration * 4, kVideoTrackNum,
+ kVideoBlockDuration));
+
+ scoped_ptr<Cluster> cluster_a2(
+ GenerateSingleStreamCluster(
+ 0, kAudioBlockDuration * 4, kAudioTrackNum, kAudioBlockDuration));
+
+ scoped_ptr<Cluster> cluster_v2(
GenerateSingleStreamCluster(
0, kVideoBlockDuration * 4, kVideoTrackNum, kVideoBlockDuration));
ASSERT_TRUE(demuxer_->SetTimestampOffset(audio_id, -2.5));
- ASSERT_TRUE(AppendData(audio_id, cluster_a->data(), cluster_a->size()));
+ ASSERT_TRUE(demuxer_->SetTimestampOffset(video_id, -2.5));
+ ASSERT_TRUE(AppendData(audio_id, cluster_a1->data(), cluster_a1->size()));
+ ASSERT_TRUE(AppendData(video_id, cluster_v1->data(), cluster_v1->size()));
GenerateSingleStreamExpectedReads(0, 4, audio, kAudioBlockDuration);
+ GenerateSingleStreamExpectedReads(0, 4, video, kVideoBlockDuration);
+ demuxer_->StartWaitingForSeek();
+ demuxer_->Seek(base::TimeDelta::FromMilliseconds(27300),
+ NewExpectedStatusCB(PIPELINE_OK));
+
+ ASSERT_TRUE(demuxer_->SetTimestampOffset(audio_id, 27.3));
ASSERT_TRUE(demuxer_->SetTimestampOffset(video_id, 27.3));
- ASSERT_TRUE(AppendData(video_id, cluster_v->data(), cluster_v->size()));
+ ASSERT_TRUE(AppendData(audio_id, cluster_a2->data(), cluster_a2->size()));
+ ASSERT_TRUE(AppendData(video_id, cluster_v2->data(), cluster_v2->size()));
GenerateSingleStreamExpectedReads(27300, 4, video, kVideoBlockDuration);
+ GenerateSingleStreamExpectedReads(27300, 4, audio, kAudioBlockDuration);
}
TEST_F(ChunkDemuxerTest, TestTimestampOffsetMidParse) {
« no previous file with comments | « no previous file | media/filters/source_buffer_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698