| Index: media/filters/chunk_demuxer_unittest.cc
|
| diff --git a/media/filters/chunk_demuxer_unittest.cc b/media/filters/chunk_demuxer_unittest.cc
|
| index e477eee1d982fb954978dfaedbd5e8127befb66e..51c5de5d868aed52124315e1a5a41b09164cd94e 100644
|
| --- a/media/filters/chunk_demuxer_unittest.cc
|
| +++ b/media/filters/chunk_demuxer_unittest.cc
|
| @@ -324,6 +324,15 @@ class ChunkDemuxerTest : public ::testing::TestWithParam<bool> {
|
| use_legacy_frame_processor_);
|
| }
|
|
|
| + ChunkDemuxer::Status AddIdForMp2tSource(const std::string& source_id) {
|
| + std::vector<std::string> codecs;
|
| + std::string type = "video/mp2t";
|
| + codecs.push_back("mp4a.40.2");
|
| + codecs.push_back("avc1.640028");
|
| + return demuxer_->AddId(source_id, type, codecs,
|
| + use_legacy_frame_processor_);
|
| + }
|
| +
|
| void AppendData(const uint8* data, size_t length) {
|
| AppendData(kSourceId, data, length);
|
| }
|
| @@ -2725,12 +2734,63 @@ TEST_P(ChunkDemuxerTest, IsParsingMediaSegmentMidMediaSegment) {
|
| // Confirm we're in the middle of parsing a media segment.
|
| ASSERT_TRUE(demuxer_->IsParsingMediaSegment(kSourceId));
|
|
|
| - demuxer_->Abort(kSourceId);
|
| + demuxer_->Abort(kSourceId,
|
| + append_window_start_for_next_append_,
|
| + append_window_end_for_next_append_,
|
| + ×tamp_offset_map_[kSourceId]);
|
| +
|
| // After Abort(), parsing should no longer be in the middle of a media
|
| // segment.
|
| ASSERT_FALSE(demuxer_->IsParsingMediaSegment(kSourceId));
|
| }
|
|
|
| +#if defined(USE_PROPRIETARY_CODECS)
|
| +#if defined(ENABLE_MPEG2TS_STREAM_PARSER)
|
| +TEST_P(ChunkDemuxerTest, EmitBuffersDuringAbort) {
|
| + EXPECT_CALL(*this, DemuxerOpened());
|
| + demuxer_->Initialize(
|
| + &host_, CreateInitDoneCB(kInfiniteDuration(), PIPELINE_OK), true);
|
| + EXPECT_EQ(ChunkDemuxer::kOk, AddIdForMp2tSource(kSourceId));
|
| +
|
| + // For info:
|
| + // DTS/PTS derived using dvbsnoop -s ts -if bear-1280x720.ts -tssubdecode
|
| + // Video: first PES:
|
| + // PTS: 126912 (0x0001efc0) [= 90 kHz-Timestamp: 0:00:01.4101]
|
| + // DTS: 123909 (0x0001e405) [= 90 kHz-Timestamp: 0:00:01.3767]
|
| + // Audio: first PES:
|
| + // PTS: 126000 (0x0001ec30) [= 90 kHz-Timestamp: 0:00:01.4000]
|
| + // DTS: 123910 (0x0001e406) [= 90 kHz-Timestamp: 0:00:01.3767]
|
| + // Video: last PES:
|
| + // PTS: 370155 (0x0005a5eb) [= 90 kHz-Timestamp: 0:00:04.1128]
|
| + // DTS: 367152 (0x00059a30) [= 90 kHz-Timestamp: 0:00:04.0794]
|
| + // Audio: last PES:
|
| + // PTS: 353788 (0x000565fc) [= 90 kHz-Timestamp: 0:00:03.9309]
|
| +
|
| + scoped_refptr<DecoderBuffer> buffer = ReadTestDataFile("bear-1280x720.ts");
|
| + AppendData(kSourceId, buffer->data(), buffer->data_size());
|
| +
|
| + // Confirm we're in the middle of parsing a media segment.
|
| + ASSERT_TRUE(demuxer_->IsParsingMediaSegment(kSourceId));
|
| +
|
| + // Abort on the Mpeg2 TS parser triggers the emission of the last video
|
| + // buffer which is pending in the stream parser.
|
| + Ranges<base::TimeDelta> range_before_abort =
|
| + demuxer_->GetBufferedRanges(kSourceId);
|
| + demuxer_->Abort(kSourceId,
|
| + append_window_start_for_next_append_,
|
| + append_window_end_for_next_append_,
|
| + ×tamp_offset_map_[kSourceId]);
|
| + Ranges<base::TimeDelta> range_after_abort =
|
| + demuxer_->GetBufferedRanges(kSourceId);
|
| +
|
| + ASSERT_EQ(range_before_abort.size(), 1u);
|
| + ASSERT_EQ(range_after_abort.size(), 1u);
|
| + EXPECT_EQ(range_after_abort.start(0), range_before_abort.start(0));
|
| + EXPECT_GT(range_after_abort.end(0), range_before_abort.end(0));
|
| +}
|
| +#endif
|
| +#endif
|
| +
|
| TEST_P(ChunkDemuxerTest, WebMIsParsingMediaSegmentDetection) {
|
| // TODO(wolenetz): Also test 'unknown' sized clusters.
|
| // See http://crbug.com/335676.
|
|
|