Index: media/filters/chunk_demuxer_unittest.cc |
diff --git a/media/filters/chunk_demuxer_unittest.cc b/media/filters/chunk_demuxer_unittest.cc |
index 4ac5616b72e6b5dda8dd7b7d2e3d3f7d64687565..a410fe00e9227879c89a6ca6285f1d538f2a19a3 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) { |
@@ -591,24 +595,33 @@ class ChunkDemuxerTest : public ::testing::Test { |
} |
} |
- void AppendInitSegment(int stream_flags) { |
- AppendInitSegmentWithSourceId(kSourceId, stream_flags); |
+ void AppendInitSegment(int stream_flags, bool expect_init_segment_received) { |
+ AppendInitSegmentWithSourceId(kSourceId, stream_flags, |
+ expect_init_segment_received); |
} |
void AppendInitSegmentWithSourceId(const std::string& source_id, |
- int stream_flags) { |
- AppendInitSegmentWithEncryptedInfo(source_id, stream_flags, false, false); |
+ int stream_flags, |
+ bool expect_init_segment_received) { |
+ AppendInitSegmentWithEncryptedInfo(source_id, stream_flags, |
+ expect_init_segment_received, |
+ false, false); |
} |
void AppendInitSegmentWithEncryptedInfo(const std::string& source_id, |
int stream_flags, |
+ bool expect_init_segment_received, |
bool is_audio_encrypted, |
bool is_video_encrypted) { |
+ DCHECK(!expect_init_segment_received || stream_flags > 0) |
+ << "Do not expect an init segment received when there are no tracks"; |
scoped_ptr<uint8[]> info_tracks; |
int info_tracks_size = 0; |
CreateInitSegment(stream_flags, |
is_audio_encrypted, is_video_encrypted, |
&info_tracks, &info_tracks_size); |
+ if (expect_init_segment_received) |
+ EXPECT_CALL(*this, InitSegmentReceived()); |
AppendData(source_id, info_tracks.get(), info_tracks_size); |
} |
@@ -664,6 +677,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); |
@@ -671,7 +692,7 @@ class ChunkDemuxerTest : public ::testing::Test { |
return false; |
AppendInitSegmentWithEncryptedInfo( |
- kSourceId, stream_flags, |
+ kSourceId, stream_flags, false, |
is_audio_encrypted, is_video_encrypted); |
return true; |
} |
@@ -696,8 +717,8 @@ class ChunkDemuxerTest : public ::testing::Test { |
video_flags |= HAS_TEXT; |
} |
- AppendInitSegmentWithSourceId(audio_id, audio_flags); |
- AppendInitSegmentWithSourceId(video_id, video_flags); |
+ AppendInitSegmentWithSourceId(audio_id, audio_flags, true); |
+ AppendInitSegmentWithSourceId(video_id, video_flags, true); |
return true; |
} |
@@ -729,6 +750,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 +779,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 +788,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) }"); |
@@ -1087,6 +1113,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 |
@@ -1131,6 +1158,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)); |
@@ -1155,6 +1184,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_; |
@@ -1337,10 +1367,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"), |
@@ -1378,7 +1410,7 @@ TEST_F(ChunkDemuxerTest, InitSegmentSetsNeedRandomAccessPointFlag) { |
MuxedStreamInfo(kTextTrackNum, "25K 40K")); |
CheckExpectedRanges(kSourceId, "{ [23,46) }"); |
- AppendInitSegment(HAS_TEXT | HAS_AUDIO | HAS_VIDEO); |
+ AppendInitSegment(HAS_TEXT | HAS_AUDIO | HAS_VIDEO, true); |
AppendMuxedCluster( |
MuxedStreamInfo(kAudioTrackNum, "46K 69K"), |
MuxedStreamInfo(kVideoTrackNum, "60 90K"), |
@@ -1401,7 +1433,7 @@ TEST_F(ChunkDemuxerTest, Shutdown_BeforeAllInitSegmentsAppended) { |
EXPECT_EQ(AddId("audio", HAS_AUDIO), ChunkDemuxer::kOk); |
EXPECT_EQ(AddId("video", HAS_VIDEO), ChunkDemuxer::kOk); |
- AppendInitSegmentWithSourceId("audio", HAS_AUDIO); |
+ AppendInitSegmentWithSourceId("audio", HAS_AUDIO, true); |
ShutdownDemuxer(); |
} |
@@ -1418,7 +1450,7 @@ TEST_F(ChunkDemuxerTest, Shutdown_BeforeAllInitSegmentsAppendedText) { |
EXPECT_CALL(host_, AddTextStream(_, _)) |
.Times(Exactly(1)); |
- AppendInitSegmentWithSourceId("video_and_text", HAS_VIDEO | HAS_TEXT); |
+ AppendInitSegmentWithSourceId("video_and_text", HAS_VIDEO | HAS_TEXT, true); |
ShutdownDemuxer(); |
} |
@@ -1526,7 +1558,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. |
@@ -1562,7 +1595,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) { |
@@ -1587,7 +1621,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) { |
@@ -1612,7 +1647,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_); |
} |
@@ -1923,6 +1959,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); |
@@ -2081,7 +2118,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) { |
@@ -2095,7 +2133,7 @@ TEST_F(ChunkDemuxerTest, AVHeadersWithAudioOnlyType) { |
ASSERT_EQ(demuxer_->AddId(kSourceId, "audio/webm", codecs), |
ChunkDemuxer::kOk); |
- AppendInitSegment(HAS_AUDIO | HAS_VIDEO); |
+ AppendInitSegment(HAS_AUDIO | HAS_VIDEO, false); |
} |
TEST_F(ChunkDemuxerTest, AVHeadersWithVideoOnlyType) { |
@@ -2109,7 +2147,7 @@ TEST_F(ChunkDemuxerTest, AVHeadersWithVideoOnlyType) { |
ASSERT_EQ(demuxer_->AddId(kSourceId, "video/webm", codecs), |
ChunkDemuxer::kOk); |
- AppendInitSegment(HAS_AUDIO | HAS_VIDEO); |
+ AppendInitSegment(HAS_AUDIO | HAS_VIDEO, false); |
} |
TEST_F(ChunkDemuxerTest, MultipleHeaders) { |
@@ -2118,7 +2156,7 @@ TEST_F(ChunkDemuxerTest, MultipleHeaders) { |
AppendCluster(kDefaultFirstCluster()); |
// Append another identical initialization segment. |
- AppendInitSegment(HAS_AUDIO | HAS_VIDEO); |
+ AppendInitSegment(HAS_AUDIO | HAS_VIDEO, true); |
acolwell GONE FROM CHROMIUM
2014/09/10 18:02:38
nit: I'm not sure this bool param is helping all t
wolenetz
2014/09/11 22:40:37
Done.
|
AppendCluster(kDefaultSecondCluster()); |
@@ -2172,7 +2210,7 @@ TEST_F(ChunkDemuxerTest, AddIdFailures) { |
// Adding an id with audio/video should fail because we already added audio. |
ASSERT_EQ(AddId(), ChunkDemuxer::kReachedIdLimit); |
- AppendInitSegmentWithSourceId(audio_id, HAS_AUDIO); |
+ AppendInitSegmentWithSourceId(audio_id, HAS_AUDIO, true); |
// Adding an id after append should fail. |
ASSERT_EQ(AddId(video_id, HAS_VIDEO), ChunkDemuxer::kReachedIdLimit); |
@@ -2404,7 +2442,7 @@ TEST_F(ChunkDemuxerTest, GetBufferedRanges_AudioIdOnly) { |
&host_, CreateInitDoneCB(kDefaultDuration(), PIPELINE_OK), true); |
ASSERT_EQ(AddId(kSourceId, HAS_AUDIO), ChunkDemuxer::kOk); |
- AppendInitSegment(HAS_AUDIO); |
+ AppendInitSegment(HAS_AUDIO, true); |
// Test a simple cluster. |
AppendCluster( |
@@ -2426,7 +2464,7 @@ TEST_F(ChunkDemuxerTest, GetBufferedRanges_VideoIdOnly) { |
&host_, CreateInitDoneCB(kDefaultDuration(), PIPELINE_OK), true); |
ASSERT_EQ(AddId(kSourceId, HAS_VIDEO), ChunkDemuxer::kOk); |
- AppendInitSegment(HAS_VIDEO); |
+ AppendInitSegment(HAS_VIDEO, true); |
// Test a simple cluster. |
AppendCluster( |
@@ -3004,6 +3042,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. |
@@ -3047,6 +3086,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. |
@@ -3406,6 +3446,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); |
@@ -3432,6 +3473,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, "{ }"); |
@@ -3441,6 +3483,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); |