Chromium Code Reviews| 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..57155067248436865f31c4f5a019a8a1256cedc5 100644 |
| --- a/media/filters/chunk_demuxer_unittest.cc |
| +++ b/media/filters/chunk_demuxer_unittest.cc |
| @@ -324,6 +324,16 @@ 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; |
| + codecs.push_back("mp4a.40.2"); |
| + codecs.push_back("avc1.640028"); |
| + type = "video/mp2t"; |
| + 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 +2735,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(AddIdForMp2tSource(kSourceId), ChunkDemuxer::kOk); |
|
wolenetz
2014/05/06 00:04:32
nit: swap parameters to EXPECT_EQ please
damienv1
2014/05/06 00:29:00
Done.
|
| + |
| + // 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. |