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. |