Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(205)

Side by Side Diff: media/filters/chunk_demuxer_unittest.cc

Issue 10558011: Fix ChunkDemuxer so it properly outputs buffered ranges. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Changed everything to use media::Ranges. Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698