OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/bind.h" | 5 #include "base/bind.h" |
6 #include "media/base/audio_decoder_config.h" | 6 #include "media/base/audio_decoder_config.h" |
7 #include "media/base/decoder_buffer.h" | 7 #include "media/base/decoder_buffer.h" |
8 #include "media/base/mock_callback.h" | 8 #include "media/base/mock_callback.h" |
9 #include "media/base/mock_demuxer_host.h" | 9 #include "media/base/mock_demuxer_host.h" |
10 #include "media/base/test_data_util.h" | 10 #include "media/base/test_data_util.h" |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
249 const uint8* start = data; | 249 const uint8* start = data; |
250 const uint8* end = data + length; | 250 const uint8* end = data + length; |
251 while (start < end) { | 251 while (start < end) { |
252 int64 old_buffered_bytes = buffered_bytes_; | 252 int64 old_buffered_bytes = buffered_bytes_; |
253 size_t append_size = std::min(piece_size, | 253 size_t append_size = std::min(piece_size, |
254 static_cast<size_t>(end - start)); | 254 static_cast<size_t>(end - start)); |
255 if (!AppendData(start, append_size)) | 255 if (!AppendData(start, append_size)) |
256 return false; | 256 return false; |
257 start += append_size; | 257 start += append_size; |
258 | 258 |
259 EXPECT_GT(buffered_bytes_, old_buffered_bytes); | 259 EXPECT_GE(buffered_bytes_, old_buffered_bytes); |
260 } | 260 } |
261 return true; | 261 return true; |
262 } | 262 } |
263 | 263 |
264 bool AppendInitSegment(bool has_audio, bool has_video, | 264 bool AppendInitSegment(bool has_audio, bool has_video, |
265 bool video_content_encoded) { | 265 bool video_content_encoded) { |
266 return AppendInitSegment(kSourceId, has_audio, has_video, | 266 return AppendInitSegment(kSourceId, has_audio, has_video, |
267 video_content_encoded); | 267 video_content_encoded); |
268 } | 268 } |
269 | 269 |
270 bool AppendInitSegment(const std::string& source_id, | 270 bool AppendInitSegment(const std::string& source_id, |
271 bool has_audio, bool has_video, | 271 bool has_audio, bool has_video, |
272 bool video_content_encoded) { | 272 bool video_content_encoded) { |
273 scoped_array<uint8> info_tracks; | 273 scoped_array<uint8> info_tracks; |
274 int info_tracks_size = 0; | 274 int info_tracks_size = 0; |
275 CreateInitSegment(has_audio, has_video, video_content_encoded, | 275 CreateInitSegment(has_audio, has_video, video_content_encoded, |
276 &info_tracks, &info_tracks_size); | 276 &info_tracks, &info_tracks_size); |
277 return AppendData(source_id, info_tracks.get(), info_tracks_size); | 277 return AppendData(source_id, info_tracks.get(), info_tracks_size); |
278 } | 278 } |
279 | 279 |
280 void InitDoneCalled(PipelineStatus expected_status, | 280 void InitDoneCalled(PipelineStatus expected_status, |
281 PipelineStatus status) { | 281 PipelineStatus status) { |
282 EXPECT_EQ(status, expected_status); | 282 EXPECT_EQ(status, expected_status); |
283 } | 283 } |
284 | 284 |
285 PipelineStatusCB CreateInitDoneCB(const base::TimeDelta& expected_duration, | 285 PipelineStatusCB CreateInitDoneCB(const base::TimeDelta& expected_duration, |
286 PipelineStatus expected_status) { | 286 PipelineStatus expected_status) { |
287 if (expected_status == PIPELINE_OK) | 287 if (expected_status == PIPELINE_OK) { |
288 if (expected_duration != kInfiniteDuration()) | |
289 EXPECT_CALL(host_, SetTotalBytes(_)); | |
288 EXPECT_CALL(host_, SetDuration(expected_duration)); | 290 EXPECT_CALL(host_, SetDuration(expected_duration)); |
291 } | |
289 | 292 |
290 return base::Bind(&ChunkDemuxerTest::InitDoneCalled, | 293 return base::Bind(&ChunkDemuxerTest::InitDoneCalled, |
291 base::Unretained(this), | 294 base::Unretained(this), |
292 expected_status); | 295 expected_status); |
293 } | 296 } |
294 | 297 |
295 bool InitDemuxer(bool has_audio, bool has_video, | 298 bool InitDemuxer(bool has_audio, bool has_video, |
296 bool video_content_encoded) { | 299 bool video_content_encoded) { |
297 PipelineStatus expected_status = | 300 PipelineStatus expected_status = |
298 (has_audio || has_video) ? PIPELINE_OK : DEMUXER_ERROR_COULD_NOT_OPEN; | 301 (has_audio || has_video) ? PIPELINE_OK : DEMUXER_ERROR_COULD_NOT_OPEN; |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
456 DemuxerStream* stream, int block_duration) { | 459 DemuxerStream* stream, int block_duration) { |
457 CHECK_GT(block_count, 0); | 460 CHECK_GT(block_count, 0); |
458 int stream_timecode = timecode; | 461 int stream_timecode = timecode; |
459 | 462 |
460 for (int i = 0; i < block_count; i++) { | 463 for (int i = 0; i < block_count; i++) { |
461 ExpectRead(stream, stream_timecode); | 464 ExpectRead(stream, stream_timecode); |
462 stream_timecode += block_duration; | 465 stream_timecode += block_duration; |
463 } | 466 } |
464 } | 467 } |
465 | 468 |
466 std::pair<base::TimeDelta, base::TimeDelta> CreateRange( | 469 void CheckExpectedRanges(const std::string& expected) { |
467 int start_time, int block_count, int block_duration) { | 470 Ranges<base::TimeDelta> r = demuxer_->GetBufferedRanges(kSourceId); |
468 return std::make_pair(base::TimeDelta::FromMilliseconds(start_time), | |
469 base::TimeDelta::FromMilliseconds(start_time + | |
470 (block_count * block_duration))); | |
471 } | |
472 | 471 |
473 void CheckExpectedRanges(const ChunkDemuxer::Ranges& expected_times) { | 472 std::stringstream ss; |
474 ChunkDemuxer::Ranges actual_times; | 473 ss << "{ "; |
475 demuxer_->GetBufferedRanges(kSourceId, &actual_times); | 474 for (size_t i = 0; i < r.size(); ++i) { |
476 EXPECT_EQ(expected_times.size(), actual_times.size()); | 475 ss << "[" << r.start(i).InMilliseconds() << "," |
477 | 476 << r.end(i).InMilliseconds() << ") "; |
478 for (ChunkDemuxer::Ranges::const_iterator actual_itr = | |
479 actual_times.begin(), expected_itr = expected_times.begin(); | |
480 actual_itr != actual_times.end() && | |
481 expected_itr != expected_times.end(); | |
482 actual_itr++, expected_itr++) { | |
483 EXPECT_EQ(expected_itr->first, actual_itr->first); | |
484 EXPECT_EQ(expected_itr->second, actual_itr->second); | |
485 } | 477 } |
478 ss << "}"; | |
479 EXPECT_EQ(expected, ss.str()); | |
Ami GONE FROM CHROMIUM
2012/06/19 17:40:37
reverse args?
acolwell GONE FROM CHROMIUM
2012/06/19 19:50:15
This order makes |expected| appear with the error
Ami GONE FROM CHROMIUM
2012/06/19 20:23:38
True, but it runs counter to the order used in mos
acolwell GONE FROM CHROMIUM
2012/06/19 22:39:36
Switched here and in source_buffer_stream_unittest
| |
486 } | 480 } |
487 | 481 |
488 MOCK_METHOD1(ReadDone, void(const scoped_refptr<DecoderBuffer>&)); | 482 MOCK_METHOD1(ReadDone, void(const scoped_refptr<DecoderBuffer>&)); |
489 | 483 |
490 void ExpectRead(DemuxerStream* stream, int64 timestamp_in_ms) { | 484 void ExpectRead(DemuxerStream* stream, int64 timestamp_in_ms) { |
491 EXPECT_CALL(*this, ReadDone(HasTimestamp(timestamp_in_ms))); | 485 EXPECT_CALL(*this, ReadDone(HasTimestamp(timestamp_in_ms))); |
492 stream->Read(base::Bind(&ChunkDemuxerTest::ReadDone, | 486 stream->Read(base::Bind(&ChunkDemuxerTest::ReadDone, |
493 base::Unretained(this))); | 487 base::Unretained(this))); |
494 } | 488 } |
495 | 489 |
(...skipping 924 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1420 EXPECT_CALL(*client_, DemuxerOpened(_)); | 1414 EXPECT_CALL(*client_, DemuxerOpened(_)); |
1421 demuxer_->Initialize( | 1415 demuxer_->Initialize( |
1422 &host_, CreateInitDoneCB(kDefaultDuration(), PIPELINE_OK)); | 1416 &host_, CreateInitDoneCB(kDefaultDuration(), PIPELINE_OK)); |
1423 | 1417 |
1424 ASSERT_EQ(AddId(kSourceId, true, false), ChunkDemuxer::kOk); | 1418 ASSERT_EQ(AddId(kSourceId, true, false), ChunkDemuxer::kOk); |
1425 ASSERT_TRUE(AppendInitSegment(true, false, false)); | 1419 ASSERT_TRUE(AppendInitSegment(true, false, false)); |
1426 | 1420 |
1427 // Test a simple cluster. | 1421 // Test a simple cluster. |
1428 scoped_ptr<Cluster> cluster_1(GenerateSingleStreamCluster(0, 4, | 1422 scoped_ptr<Cluster> cluster_1(GenerateSingleStreamCluster(0, 4, |
1429 kAudioTrackNum, kAudioBlockDuration)); | 1423 kAudioTrackNum, kAudioBlockDuration)); |
1430 ChunkDemuxer::Ranges expected; | |
1431 expected.push_back(CreateRange(0, 4, kAudioBlockDuration)); | |
1432 | |
1433 ASSERT_TRUE(AppendData(cluster_1->data(), cluster_1->size())); | 1424 ASSERT_TRUE(AppendData(cluster_1->data(), cluster_1->size())); |
1434 | 1425 |
1435 CheckExpectedRanges(expected); | 1426 CheckExpectedRanges("{ [0,92) }"); |
Ami GONE FROM CHROMIUM
2012/06/19 17:40:37
Is it easy to see that these numbers are right, he
acolwell GONE FROM CHROMIUM
2012/06/19 19:50:15
I've changed GenerateSingleStreamCluster() so that
| |
1436 | 1427 |
1437 // Append a disjoint cluster to check for two separate ranges. | 1428 // Append a disjoint cluster to check for two separate ranges. |
1438 scoped_ptr<Cluster> cluster_2(GenerateSingleStreamCluster(150, 3, | 1429 scoped_ptr<Cluster> cluster_2(GenerateSingleStreamCluster(150, 3, |
1439 kAudioTrackNum, kAudioBlockDuration)); | 1430 kAudioTrackNum, kAudioBlockDuration)); |
1440 expected.push_back(CreateRange(150, 3, kAudioBlockDuration)); | |
1441 | 1431 |
1442 ASSERT_TRUE(AppendData(cluster_2->data(), cluster_2->size())); | 1432 ASSERT_TRUE(AppendData(cluster_2->data(), cluster_2->size())); |
1443 | 1433 |
1444 CheckExpectedRanges(expected); | 1434 CheckExpectedRanges("{ [0,92) [150,219) }"); |
1445 } | 1435 } |
1446 | 1436 |
1447 // Test ranges in a video-only stream. | 1437 // Test ranges in a video-only stream. |
1448 TEST_F(ChunkDemuxerTest, GetBufferedRanges_VideoIdOnly) { | 1438 TEST_F(ChunkDemuxerTest, GetBufferedRanges_VideoIdOnly) { |
1449 EXPECT_CALL(*client_, DemuxerOpened(_)); | 1439 EXPECT_CALL(*client_, DemuxerOpened(_)); |
1450 demuxer_->Initialize( | 1440 demuxer_->Initialize( |
1451 &host_, CreateInitDoneCB(kDefaultDuration(), PIPELINE_OK)); | 1441 &host_, CreateInitDoneCB(kDefaultDuration(), PIPELINE_OK)); |
1452 | 1442 |
1453 ASSERT_EQ(AddId(kSourceId, false, true), ChunkDemuxer::kOk); | 1443 ASSERT_EQ(AddId(kSourceId, false, true), ChunkDemuxer::kOk); |
1454 ASSERT_TRUE(AppendInitSegment(false, true, false)); | 1444 ASSERT_TRUE(AppendInitSegment(false, true, false)); |
1455 | 1445 |
1456 // Test a simple cluster. | 1446 // Test a simple cluster. |
1457 scoped_ptr<Cluster> cluster_1(GenerateSingleStreamCluster(0, 4, | 1447 scoped_ptr<Cluster> cluster_1(GenerateSingleStreamCluster(0, 4, |
1458 kVideoTrackNum, kVideoBlockDuration)); | 1448 kVideoTrackNum, kVideoBlockDuration)); |
1459 ChunkDemuxer::Ranges expected; | |
1460 expected.push_back(CreateRange(0, 4, kVideoBlockDuration)); | |
1461 | 1449 |
1462 ASSERT_TRUE(AppendData(cluster_1->data(), cluster_1->size())); | 1450 ASSERT_TRUE(AppendData(cluster_1->data(), cluster_1->size())); |
1463 | 1451 |
1464 CheckExpectedRanges(expected); | 1452 CheckExpectedRanges("{ [0,132) }"); |
1465 | 1453 |
1466 // Append a disjoint cluster to check for two separate ranges. | 1454 // Append a disjoint cluster to check for two separate ranges. |
1467 scoped_ptr<Cluster> cluster_2(GenerateSingleStreamCluster(150, 3, | 1455 scoped_ptr<Cluster> cluster_2(GenerateSingleStreamCluster(150, 3, |
1468 kVideoTrackNum, kVideoBlockDuration)); | 1456 kVideoTrackNum, kVideoBlockDuration)); |
1469 expected.push_back(CreateRange(150, 3, kVideoBlockDuration)); | |
1470 | 1457 |
1471 ASSERT_TRUE(AppendData(cluster_2->data(), cluster_2->size())); | 1458 ASSERT_TRUE(AppendData(cluster_2->data(), cluster_2->size())); |
1472 | 1459 |
1473 CheckExpectedRanges(expected); | 1460 CheckExpectedRanges("{ [0,132) [150,249) }"); |
1474 } | 1461 } |
1475 | 1462 |
1476 TEST_F(ChunkDemuxerTest, GetBufferedRanges_AudioVideo) { | 1463 TEST_F(ChunkDemuxerTest, GetBufferedRanges_AudioVideo) { |
1477 ASSERT_TRUE(InitDemuxer(true, true, false)); | 1464 ASSERT_TRUE(InitDemuxer(true, true, false)); |
1478 | 1465 |
1479 // Audio: 0 -> 23 | 1466 // Audio: 0 -> 23 |
1480 // Video: 0 -> 33 | 1467 // Video: 0 -> 33 |
1481 // Buffered Range: 0 -> 23 | 1468 // Buffered Range: 0 -> 23 |
1482 // Audio block duration is smaller than video block duration, | 1469 // Audio block duration is smaller than video block duration, |
1483 // so the buffered ranges should correspond to the audio blocks. | 1470 // so the buffered ranges should correspond to the audio blocks. |
1484 scoped_ptr<Cluster> cluster_a0( | 1471 scoped_ptr<Cluster> cluster_a0( |
1485 GenerateSingleStreamCluster(0, 1, kAudioTrackNum, kAudioBlockDuration)); | 1472 GenerateSingleStreamCluster(0, 1, kAudioTrackNum, kAudioBlockDuration)); |
1486 | 1473 |
1487 scoped_ptr<Cluster> cluster_v0( | 1474 scoped_ptr<Cluster> cluster_v0( |
1488 GenerateSingleStreamCluster(0, 1, kVideoTrackNum, kVideoBlockDuration)); | 1475 GenerateSingleStreamCluster(0, 1, kVideoTrackNum, kVideoBlockDuration)); |
1489 | 1476 |
1490 ChunkDemuxer::Ranges expected; | |
1491 expected.push_back(CreateRange(0, 1, kAudioBlockDuration)); | |
1492 | |
1493 ASSERT_TRUE(AppendData(cluster_a0->data(), cluster_a0->size())); | 1477 ASSERT_TRUE(AppendData(cluster_a0->data(), cluster_a0->size())); |
1494 ASSERT_TRUE(AppendData(cluster_v0->data(), cluster_v0->size())); | 1478 ASSERT_TRUE(AppendData(cluster_v0->data(), cluster_v0->size())); |
1495 | 1479 |
1496 CheckExpectedRanges(expected); | 1480 CheckExpectedRanges("{ [0,23) }"); |
1497 | 1481 |
1498 // Audio: 100 -> 150 | 1482 // Audio: 100 -> 150 |
1499 // Video: 120 -> 170 | 1483 // Video: 120 -> 170 |
1500 // Buffered Range: 120 -> 150 (end overlap) | 1484 // Buffered Range: 120 -> 150 (end overlap) |
1501 scoped_ptr<Cluster> cluster_a1( | 1485 scoped_ptr<Cluster> cluster_a1( |
1502 GenerateSingleStreamCluster(100, 1, kAudioTrackNum, 50)); | 1486 GenerateSingleStreamCluster(100, 1, kAudioTrackNum, 50)); |
1503 | 1487 |
1504 scoped_ptr<Cluster> cluster_v1( | 1488 scoped_ptr<Cluster> cluster_v1( |
1505 GenerateSingleStreamCluster(120, 1, kVideoTrackNum, 50)); | 1489 GenerateSingleStreamCluster(120, 1, kVideoTrackNum, 50)); |
1506 | 1490 |
1507 expected.push_back(CreateRange(120, 1, 30)); | |
1508 | |
1509 ASSERT_TRUE(AppendData(cluster_a1->data(), cluster_a1->size())); | 1491 ASSERT_TRUE(AppendData(cluster_a1->data(), cluster_a1->size())); |
1510 ASSERT_TRUE(AppendData(cluster_v1->data(), cluster_v1->size())); | 1492 ASSERT_TRUE(AppendData(cluster_v1->data(), cluster_v1->size())); |
1511 | 1493 |
1512 CheckExpectedRanges(expected); | 1494 CheckExpectedRanges("{ [0,23) [120,150) }"); |
1513 | 1495 |
1514 // Audio: 220 -> 290 | 1496 // Audio: 220 -> 290 |
1515 // Video: 200 -> 270 | 1497 // Video: 200 -> 270 |
1516 // Buffered Range: 220 -> 270 (front overlap) | 1498 // Buffered Range: 220 -> 270 (front overlap) |
1517 scoped_ptr<Cluster> cluster_a2( | 1499 scoped_ptr<Cluster> cluster_a2( |
1518 GenerateSingleStreamCluster(220, 1, kAudioTrackNum, 70)); | 1500 GenerateSingleStreamCluster(220, 1, kAudioTrackNum, 70)); |
1519 | 1501 |
1520 scoped_ptr<Cluster> cluster_v2( | 1502 scoped_ptr<Cluster> cluster_v2( |
1521 GenerateSingleStreamCluster(200, 1, kVideoTrackNum, 70)); | 1503 GenerateSingleStreamCluster(200, 1, kVideoTrackNum, 70)); |
1522 | 1504 |
1523 expected.push_back(CreateRange(220, 1, 50)); | |
1524 | |
1525 ASSERT_TRUE(AppendData(cluster_a2->data(), cluster_a2->size())); | 1505 ASSERT_TRUE(AppendData(cluster_a2->data(), cluster_a2->size())); |
1526 ASSERT_TRUE(AppendData(cluster_v2->data(), cluster_v2->size())); | 1506 ASSERT_TRUE(AppendData(cluster_v2->data(), cluster_v2->size())); |
1527 | 1507 |
1528 CheckExpectedRanges(expected); | 1508 CheckExpectedRanges("{ [0,23) [120,150) [220,270) }"); |
1529 | 1509 |
1530 // Audio: 320 -> 350 | 1510 // Audio: 320 -> 350 |
1531 // Video: 300 -> 370 | 1511 // Video: 300 -> 370 |
1532 // Buffered Range: 320 -> 350 (complete overlap, audio) | 1512 // Buffered Range: 320 -> 350 (complete overlap, audio) |
1533 scoped_ptr<Cluster> cluster_a3( | 1513 scoped_ptr<Cluster> cluster_a3( |
1534 GenerateSingleStreamCluster(320, 1, kAudioTrackNum, 30)); | 1514 GenerateSingleStreamCluster(320, 1, kAudioTrackNum, 30)); |
1535 | 1515 |
1536 scoped_ptr<Cluster> cluster_v3( | 1516 scoped_ptr<Cluster> cluster_v3( |
1537 GenerateSingleStreamCluster(300, 1, kVideoTrackNum, 70)); | 1517 GenerateSingleStreamCluster(300, 1, kVideoTrackNum, 70)); |
1538 | 1518 |
1539 expected.push_back(CreateRange(320, 1, 30)); | |
1540 | |
1541 ASSERT_TRUE(AppendData(cluster_a3->data(), cluster_a3->size())); | 1519 ASSERT_TRUE(AppendData(cluster_a3->data(), cluster_a3->size())); |
1542 ASSERT_TRUE(AppendData(cluster_v3->data(), cluster_v3->size())); | 1520 ASSERT_TRUE(AppendData(cluster_v3->data(), cluster_v3->size())); |
1543 | 1521 |
1544 CheckExpectedRanges(expected); | 1522 CheckExpectedRanges("{ [0,23) [120,150) [220,270) [320,350) }"); |
1545 | 1523 |
1546 // Audio: 400 -> 470 | 1524 // Audio: 400 -> 470 |
1547 // Video: 420 -> 450 | 1525 // Video: 420 -> 450 |
1548 // Buffered Range: 420 -> 450 (complete overlap, video) | 1526 // Buffered Range: 420 -> 450 (complete overlap, video) |
1549 scoped_ptr<Cluster> cluster_a4( | 1527 scoped_ptr<Cluster> cluster_a4( |
1550 GenerateSingleStreamCluster(400, 1, kAudioTrackNum, 70)); | 1528 GenerateSingleStreamCluster(400, 1, kAudioTrackNum, 70)); |
1551 | 1529 |
1552 scoped_ptr<Cluster> cluster_v4( | 1530 scoped_ptr<Cluster> cluster_v4( |
1553 GenerateSingleStreamCluster(420, 1, kVideoTrackNum, 30)); | 1531 GenerateSingleStreamCluster(420, 1, kVideoTrackNum, 30)); |
1554 | 1532 |
1555 expected.push_back(CreateRange(420, 1, 30)); | |
1556 | |
1557 ASSERT_TRUE(AppendData(cluster_a4->data(), cluster_a4->size())); | 1533 ASSERT_TRUE(AppendData(cluster_a4->data(), cluster_a4->size())); |
1558 ASSERT_TRUE(AppendData(cluster_v4->data(), cluster_v4->size())); | 1534 ASSERT_TRUE(AppendData(cluster_v4->data(), cluster_v4->size())); |
1559 | 1535 |
1560 CheckExpectedRanges(expected); | 1536 CheckExpectedRanges("{ [0,23) [120,150) [220,270) [320,350) [420,450) }"); |
1561 | 1537 |
1562 // Appending within buffered range should not affect buffered ranges. | 1538 // Appending within buffered range should not affect buffered ranges. |
1563 scoped_ptr<Cluster> cluster_a5( | 1539 scoped_ptr<Cluster> cluster_a5( |
1564 GenerateSingleStreamCluster(430, 1, kAudioTrackNum, 20)); | 1540 GenerateSingleStreamCluster(430, 1, kAudioTrackNum, 20)); |
1565 ASSERT_TRUE(AppendData(cluster_a5->data(), cluster_a5->size())); | 1541 ASSERT_TRUE(AppendData(cluster_a5->data(), cluster_a5->size())); |
1566 CheckExpectedRanges(expected); | 1542 CheckExpectedRanges("{ [0,23) [120,150) [220,270) [320,350) [420,450) }"); |
1567 | 1543 |
1568 // Appending to single stream outside buffered ranges should not affect | 1544 // Appending to single stream outside buffered ranges should not affect |
1569 // buffered ranges. | 1545 // buffered ranges. |
1570 scoped_ptr<Cluster> cluster_v5( | 1546 scoped_ptr<Cluster> cluster_v5( |
1571 GenerateSingleStreamCluster(530, 1, kVideoTrackNum, 10)); | 1547 GenerateSingleStreamCluster(530, 1, kVideoTrackNum, 10)); |
1572 ASSERT_TRUE(AppendData(cluster_v5->data(), cluster_v5->size())); | 1548 ASSERT_TRUE(AppendData(cluster_v5->data(), cluster_v5->size())); |
1573 CheckExpectedRanges(expected); | 1549 CheckExpectedRanges("{ [0,23) [120,150) [220,270) [320,350) [420,450) }"); |
1574 } | 1550 } |
1575 | 1551 |
1576 // Once EndOfStream() is called, GetBufferedRanges should not cut off any | 1552 // Once EndOfStream() is called, GetBufferedRanges should not cut off any |
1577 // over-hanging tails at the end of the ranges as this is likely due to block | 1553 // over-hanging tails at the end of the ranges as this is likely due to block |
1578 // duration differences. | 1554 // duration differences. |
1579 TEST_F(ChunkDemuxerTest, GetBufferedRanges_EndOfStream) { | 1555 TEST_F(ChunkDemuxerTest, GetBufferedRanges_EndOfStream) { |
1580 ASSERT_TRUE(InitDemuxer(true, true, false)); | 1556 ASSERT_TRUE(InitDemuxer(true, true, false)); |
1581 | 1557 |
1582 scoped_ptr<Cluster> cluster_a( | 1558 scoped_ptr<Cluster> cluster_a( |
1583 GenerateSingleStreamCluster(0, 1, kAudioTrackNum, 90)); | 1559 GenerateSingleStreamCluster(0, 1, kAudioTrackNum, 90)); |
1584 scoped_ptr<Cluster> cluster_v( | 1560 scoped_ptr<Cluster> cluster_v( |
1585 GenerateSingleStreamCluster(0, 1, kVideoTrackNum, 100)); | 1561 GenerateSingleStreamCluster(0, 1, kVideoTrackNum, 100)); |
1586 ChunkDemuxer::Ranges expected; | |
1587 expected.push_back(CreateRange(0, 1, 100)); | |
1588 | 1562 |
1589 ASSERT_TRUE(AppendData(cluster_a->data(), cluster_a->size())); | 1563 ASSERT_TRUE(AppendData(cluster_a->data(), cluster_a->size())); |
1590 ASSERT_TRUE(AppendData(cluster_v->data(), cluster_v->size())); | 1564 ASSERT_TRUE(AppendData(cluster_v->data(), cluster_v->size())); |
1591 | 1565 |
1566 CheckExpectedRanges("{ [0,90) }"); | |
1567 | |
1592 demuxer_->EndOfStream(PIPELINE_OK); | 1568 demuxer_->EndOfStream(PIPELINE_OK); |
1593 CheckExpectedRanges(expected); | 1569 |
1570 CheckExpectedRanges("{ [0,100) }"); | |
1594 } | 1571 } |
1595 | 1572 |
1596 TEST_F(ChunkDemuxerTest, TestDifferentStreamTimecodes) { | 1573 TEST_F(ChunkDemuxerTest, TestDifferentStreamTimecodes) { |
1597 ASSERT_TRUE(InitDemuxer(true, true, false)); | 1574 ASSERT_TRUE(InitDemuxer(true, true, false)); |
1598 | 1575 |
1599 scoped_refptr<DemuxerStream> audio = | 1576 scoped_refptr<DemuxerStream> audio = |
1600 demuxer_->GetStream(DemuxerStream::AUDIO); | 1577 demuxer_->GetStream(DemuxerStream::AUDIO); |
1601 scoped_refptr<DemuxerStream> video = | 1578 scoped_refptr<DemuxerStream> video = |
1602 demuxer_->GetStream(DemuxerStream::VIDEO); | 1579 demuxer_->GetStream(DemuxerStream::VIDEO); |
1603 | 1580 |
(...skipping 22 matching lines...) Expand all Loading... | |
1626 TEST_F(ChunkDemuxerTest, TestCodecPrefixMatching) { | 1603 TEST_F(ChunkDemuxerTest, TestCodecPrefixMatching) { |
1627 std::vector<std::string> codecs; | 1604 std::vector<std::string> codecs; |
1628 codecs.push_back("avc1.4D4041"); | 1605 codecs.push_back("avc1.4D4041"); |
1629 codecs.push_back("mp4a.40.2"); | 1606 codecs.push_back("mp4a.40.2"); |
1630 | 1607 |
1631 EXPECT_EQ(ChunkDemuxer::kOk, | 1608 EXPECT_EQ(ChunkDemuxer::kOk, |
1632 demuxer_->AddId("source_id", "video/mp4", codecs)); | 1609 demuxer_->AddId("source_id", "video/mp4", codecs)); |
1633 } | 1610 } |
1634 | 1611 |
1635 } // namespace media | 1612 } // namespace media |
OLD | NEW |