Index: media/filters/chunk_demuxer_unittest.cc |
diff --git a/media/filters/chunk_demuxer_unittest.cc b/media/filters/chunk_demuxer_unittest.cc |
index 57b49b1f57fbf33359603c24f8b2f141b0366bfd..6271323cbb33c4a4302bf652c33fc3aad11367bf 100644 |
--- a/media/filters/chunk_demuxer_unittest.cc |
+++ b/media/filters/chunk_demuxer_unittest.cc |
@@ -162,6 +162,9 @@ class ChunkDemuxerTest : public ::testing::Test { |
ChunkDemuxerTest() |
: append_window_end_for_next_append_(kInfiniteDuration()) { |
+ init_segment_received_cb_ = |
+ base::Bind(&ChunkDemuxerTest::InitSegmentReceived, |
+ base::Unretained(this)); |
CreateNewDemuxer(); |
} |
@@ -573,7 +576,8 @@ class ChunkDemuxerTest : public ::testing::Test { |
demuxer_->AppendData(source_id, data, length, |
append_window_start_for_next_append_, |
append_window_end_for_next_append_, |
- ×tamp_offset_map_[source_id]); |
+ ×tamp_offset_map_[source_id], |
+ init_segment_received_cb_); |
} |
void AppendDataInPieces(const uint8* data, size_t length) { |
@@ -664,6 +668,14 @@ class ChunkDemuxerTest : public ::testing::Test { |
expected_duration = kDefaultDuration(); |
EXPECT_CALL(*this, DemuxerOpened()); |
+ |
+ // Adding expectation prior to CreateInitDoneCB() here because InSequence |
+ // tests require init segment received before duration set. Also, only |
+ // expect an init segment received callback if there is actually a track in |
+ // it. |
+ if (stream_flags != 0) |
+ EXPECT_CALL(*this, InitSegmentReceived()); |
+ |
demuxer_->Initialize( |
&host_, CreateInitDoneCB(expected_duration, expected_status), true); |
@@ -696,7 +708,9 @@ class ChunkDemuxerTest : public ::testing::Test { |
video_flags |= HAS_TEXT; |
} |
+ EXPECT_CALL(*this, InitSegmentReceived()); |
AppendInitSegmentWithSourceId(audio_id, audio_flags); |
+ EXPECT_CALL(*this, InitSegmentReceived()); |
AppendInitSegmentWithSourceId(video_id, video_flags); |
return true; |
} |
@@ -729,6 +743,9 @@ class ChunkDemuxerTest : public ::testing::Test { |
EXPECT_CALL(*this, DemuxerOpened()); |
+ // Adding expectation prior to CreateInitDoneCB() here because InSequence |
+ // tests require init segment received before duration set. |
+ EXPECT_CALL(*this, InitSegmentReceived()); |
demuxer_->Initialize( |
&host_, CreateInitDoneCB(base::TimeDelta::FromMilliseconds(2744), |
PIPELINE_OK), true); |
@@ -755,6 +772,7 @@ class ChunkDemuxerTest : public ::testing::Test { |
// media/test/data/bear-320x240-manifest.js which were |
// generated from media/test/data/bear-640x360.webm and |
// media/test/data/bear-320x240.webm respectively. |
+ EXPECT_CALL(*this, InitSegmentReceived()); |
AppendData(bear2->data(), 4340); |
// Append a media segment that goes from [0.527000, 1.014000). |
@@ -763,6 +781,7 @@ class ChunkDemuxerTest : public ::testing::Test { |
// Append initialization segment for bear1 & fill gap with [779-1197) |
// segment. |
+ EXPECT_CALL(*this, InitSegmentReceived()); |
AppendData(bear1->data(), 4370); |
AppendData(bear1->data() + 72737, 28183); |
CheckExpectedRanges(kSourceId, "{ [0,2736) }"); |
@@ -1098,6 +1117,7 @@ class ChunkDemuxerTest : public ::testing::Test { |
// Read a WebM file into memory and send the data to the demuxer. |
scoped_refptr<DecoderBuffer> buffer = ReadTestDataFile(filename); |
+ EXPECT_CALL(*this, InitSegmentReceived()); |
AppendDataInPieces(buffer->data(), buffer->data_size(), 512); |
// Verify that the timestamps on the first few packets match what we |
@@ -1142,6 +1162,8 @@ class ChunkDemuxerTest : public ::testing::Test { |
NeedKeyMock(type, init_data_ptr, init_data.size()); |
} |
+ MOCK_METHOD0(InitSegmentReceived, void(void)); |
+ |
void Seek(base::TimeDelta seek_time) { |
demuxer_->StartWaitingForSeek(seek_time); |
demuxer_->Seek(seek_time, NewExpectedStatusCB(PIPELINE_OK)); |
@@ -1166,6 +1188,7 @@ class ChunkDemuxerTest : public ::testing::Test { |
MockDemuxerHost host_; |
scoped_ptr<ChunkDemuxer> demuxer_; |
+ ChunkDemuxer::InitSegmentReceivedCB init_segment_received_cb_; |
base::TimeDelta append_window_start_for_next_append_; |
base::TimeDelta append_window_end_for_next_append_; |
@@ -1348,10 +1371,12 @@ TEST_F(ChunkDemuxerTest, SingleTextTrackIdChange) { |
CreateInitSegmentWithAlternateTextTrackNum(HAS_TEXT | HAS_AUDIO | HAS_VIDEO, |
false, false, |
&info_tracks, &info_tracks_size); |
+ EXPECT_CALL(*this, InitSegmentReceived()); |
demuxer_->AppendData(kSourceId, info_tracks.get(), info_tracks_size, |
append_window_start_for_next_append_, |
append_window_end_for_next_append_, |
- ×tamp_offset_map_[kSourceId]); |
+ ×tamp_offset_map_[kSourceId], |
+ init_segment_received_cb_); |
AppendMuxedCluster( |
MuxedStreamInfo(kAudioTrackNum, "46K 69K"), |
@@ -1389,6 +1414,7 @@ TEST_F(ChunkDemuxerTest, InitSegmentSetsNeedRandomAccessPointFlag) { |
MuxedStreamInfo(kTextTrackNum, "25K 40K")); |
CheckExpectedRanges(kSourceId, "{ [23,46) }"); |
+ EXPECT_CALL(*this, InitSegmentReceived()); |
AppendInitSegment(HAS_TEXT | HAS_AUDIO | HAS_VIDEO); |
AppendMuxedCluster( |
MuxedStreamInfo(kAudioTrackNum, "46K 69K"), |
@@ -1412,6 +1438,7 @@ TEST_F(ChunkDemuxerTest, Shutdown_BeforeAllInitSegmentsAppended) { |
EXPECT_EQ(AddId("audio", HAS_AUDIO), ChunkDemuxer::kOk); |
EXPECT_EQ(AddId("video", HAS_VIDEO), ChunkDemuxer::kOk); |
+ EXPECT_CALL(*this, InitSegmentReceived()); |
AppendInitSegmentWithSourceId("audio", HAS_AUDIO); |
ShutdownDemuxer(); |
@@ -1429,6 +1456,7 @@ TEST_F(ChunkDemuxerTest, Shutdown_BeforeAllInitSegmentsAppendedText) { |
EXPECT_CALL(host_, AddTextStream(_, _)) |
.Times(Exactly(1)); |
+ EXPECT_CALL(*this, InitSegmentReceived()); |
AppendInitSegmentWithSourceId("video_and_text", HAS_VIDEO | HAS_TEXT); |
ShutdownDemuxer(); |
@@ -1537,7 +1565,8 @@ TEST_F(ChunkDemuxerTest, AppendDataBeforeInit) { |
demuxer_->AppendData(kSourceId, info_tracks.get(), info_tracks_size, |
append_window_start_for_next_append_, |
append_window_end_for_next_append_, |
- ×tamp_offset_map_[kSourceId]); |
+ ×tamp_offset_map_[kSourceId], |
+ init_segment_received_cb_); |
} |
// Make sure Read() callbacks are dispatched with the proper data. |
@@ -1573,7 +1602,8 @@ TEST_F(ChunkDemuxerTest, OutOfOrderClusters) { |
demuxer_->AppendData(kSourceId, cluster_c->data(), cluster_c->size(), |
append_window_start_for_next_append_, |
append_window_end_for_next_append_, |
- ×tamp_offset_map_[kSourceId]); |
+ ×tamp_offset_map_[kSourceId], |
+ init_segment_received_cb_); |
} |
TEST_F(ChunkDemuxerTest, NonMonotonicButAboveClusterTimecode) { |
@@ -1598,7 +1628,8 @@ TEST_F(ChunkDemuxerTest, NonMonotonicButAboveClusterTimecode) { |
demuxer_->AppendData(kSourceId, cluster_b->data(), cluster_b->size(), |
append_window_start_for_next_append_, |
append_window_end_for_next_append_, |
- ×tamp_offset_map_[kSourceId]); |
+ ×tamp_offset_map_[kSourceId], |
+ init_segment_received_cb_); |
} |
TEST_F(ChunkDemuxerTest, BackwardsAndBeforeClusterTimecode) { |
@@ -1623,7 +1654,8 @@ TEST_F(ChunkDemuxerTest, BackwardsAndBeforeClusterTimecode) { |
demuxer_->AppendData(kSourceId, cluster_b->data(), cluster_b->size(), |
append_window_start_for_next_append_, |
append_window_end_for_next_append_, |
- ×tamp_offset_map_[kSourceId]); |
+ ×tamp_offset_map_[kSourceId], |
+ init_segment_received_cb_); |
} |
@@ -1934,6 +1966,7 @@ TEST_F(ChunkDemuxerTest, AppendingInPieces) { |
memcpy(dst, cluster_b->data(), cluster_b->size()); |
dst += cluster_b->size(); |
+ EXPECT_CALL(*this, InitSegmentReceived()); |
AppendDataInPieces(buffer.get(), buffer_size); |
GenerateExpectedReads(0, 9); |
@@ -2092,7 +2125,8 @@ TEST_F(ChunkDemuxerTest, ParseErrorDuringInit) { |
demuxer_->AppendData(kSourceId, &tmp, 1, |
append_window_start_for_next_append_, |
append_window_end_for_next_append_, |
- ×tamp_offset_map_[kSourceId]); |
+ ×tamp_offset_map_[kSourceId], |
+ init_segment_received_cb_); |
} |
TEST_F(ChunkDemuxerTest, AVHeadersWithAudioOnlyType) { |
@@ -2129,6 +2163,7 @@ TEST_F(ChunkDemuxerTest, MultipleHeaders) { |
AppendCluster(kDefaultFirstCluster()); |
// Append another identical initialization segment. |
+ EXPECT_CALL(*this, InitSegmentReceived()); |
AppendInitSegment(HAS_AUDIO | HAS_VIDEO); |
AppendCluster(kDefaultSecondCluster()); |
@@ -2183,6 +2218,7 @@ TEST_F(ChunkDemuxerTest, AddIdFailures) { |
// Adding an id with audio/video should fail because we already added audio. |
ASSERT_EQ(AddId(), ChunkDemuxer::kReachedIdLimit); |
+ EXPECT_CALL(*this, InitSegmentReceived()); |
AppendInitSegmentWithSourceId(audio_id, HAS_AUDIO); |
// Adding an id after append should fail. |
@@ -2415,6 +2451,7 @@ TEST_F(ChunkDemuxerTest, GetBufferedRanges_AudioIdOnly) { |
&host_, CreateInitDoneCB(kDefaultDuration(), PIPELINE_OK), true); |
ASSERT_EQ(AddId(kSourceId, HAS_AUDIO), ChunkDemuxer::kOk); |
+ EXPECT_CALL(*this, InitSegmentReceived()); |
AppendInitSegment(HAS_AUDIO); |
// Test a simple cluster. |
@@ -2437,6 +2474,7 @@ TEST_F(ChunkDemuxerTest, GetBufferedRanges_VideoIdOnly) { |
&host_, CreateInitDoneCB(kDefaultDuration(), PIPELINE_OK), true); |
ASSERT_EQ(AddId(kSourceId, HAS_VIDEO), ChunkDemuxer::kOk); |
+ EXPECT_CALL(*this, InitSegmentReceived()); |
AppendInitSegment(HAS_VIDEO); |
// Test a simple cluster. |
@@ -3015,6 +3053,7 @@ TEST_F(ChunkDemuxerTest, EmitBuffersDuringAbort) { |
// PTS: 353788 (0x000565fc) [= 90 kHz-Timestamp: 0:00:03.9309] |
scoped_refptr<DecoderBuffer> buffer = ReadTestDataFile("bear-1280x720.ts"); |
+ EXPECT_CALL(*this, InitSegmentReceived()); |
AppendData(kSourceId, buffer->data(), buffer->data_size()); |
// Confirm we're in the middle of parsing a media segment. |
@@ -3058,6 +3097,7 @@ TEST_F(ChunkDemuxerTest, SeekCompleteDuringAbort) { |
// PTS: 353788 (0x000565fc) [= 90 kHz-Timestamp: 0:00:03.9309] |
scoped_refptr<DecoderBuffer> buffer = ReadTestDataFile("bear-1280x720.ts"); |
+ EXPECT_CALL(*this, InitSegmentReceived()); |
AppendData(kSourceId, buffer->data(), buffer->data_size()); |
// Confirm we're in the middle of parsing a media segment. |
@@ -3447,6 +3487,7 @@ TEST_F(ChunkDemuxerTest, AppendWindow_WebMFile_AudioOnly) { |
// partial append window trim must come from a previous Append() call. |
scoped_refptr<DecoderBuffer> buffer = |
ReadTestDataFile("bear-320x240-audio-only.webm"); |
+ EXPECT_CALL(*this, InitSegmentReceived()); |
AppendDataInPieces(buffer->data(), buffer->data_size(), 128); |
DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::AUDIO); |
@@ -3473,6 +3514,7 @@ TEST_F(ChunkDemuxerTest, AppendWindow_AudioConfigUpdateRemovesPreroll) { |
// Read a WebM file into memory and append the data. |
scoped_refptr<DecoderBuffer> buffer = |
ReadTestDataFile("bear-320x240-audio-only.webm"); |
+ EXPECT_CALL(*this, InitSegmentReceived()); |
AppendDataInPieces(buffer->data(), buffer->data_size(), 512); |
CheckExpectedRanges(kSourceId, "{ }"); |
@@ -3482,6 +3524,7 @@ TEST_F(ChunkDemuxerTest, AppendWindow_AudioConfigUpdateRemovesPreroll) { |
// Read a second WebM with a different config in and append the data. |
scoped_refptr<DecoderBuffer> buffer2 = |
ReadTestDataFile("bear-320x240-audio-only-48khz.webm"); |
+ EXPECT_CALL(*this, InitSegmentReceived()); |
EXPECT_CALL(host_, SetDuration(_)).Times(AnyNumber()); |
ASSERT_TRUE(SetTimestampOffset(kSourceId, duration_1)); |
AppendDataInPieces(buffer2->data(), buffer2->data_size(), 512); |