OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <string> | 5 #include <string> |
6 | 6 |
7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
10 #include "media/base/android/media_codec_bridge.h" | 10 #include "media/base/android/media_codec_bridge.h" |
(...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
424 // Send back the seek done notification. This should trigger the player to | 424 // Send back the seek done notification. This should trigger the player to |
425 // call OnReadFromDemuxer() again. | 425 // call OnReadFromDemuxer() again. |
426 EXPECT_EQ(original_num_data_requests, demuxer_->num_data_requests()); | 426 EXPECT_EQ(original_num_data_requests, demuxer_->num_data_requests()); |
427 player_.OnDemuxerSeekDone(kNoTimestamp()); | 427 player_.OnDemuxerSeekDone(kNoTimestamp()); |
428 EXPECT_EQ(original_num_data_requests + 1, demuxer_->num_data_requests()); | 428 EXPECT_EQ(original_num_data_requests + 1, demuxer_->num_data_requests()); |
429 | 429 |
430 // No other seek should have been requested. | 430 // No other seek should have been requested. |
431 EXPECT_EQ(original_num_seeks + 1, demuxer_->num_seek_requests()); | 431 EXPECT_EQ(original_num_seeks + 1, demuxer_->num_seek_requests()); |
432 } | 432 } |
433 | 433 |
434 // Preroll the decoder job to |target_timestamp|. The first access unit | |
435 // to decode will have a timestamp equal to |start_timestamp|. | |
436 // TODO(qinmin): Add additional test cases for out-of-order decodes. | |
wolenetz
2014/01/02 23:24:22
nit: I would prefer we add a Chromium bug to track
qinmin
2014/01/02 23:35:22
Done.
| |
437 void PrerollDecoderToTime(bool is_audio, | |
438 const base::TimeDelta& start_timestamp, | |
439 const base::TimeDelta& target_timestamp) { | |
440 EXPECT_EQ(target_timestamp, player_.GetCurrentTime()); | |
441 // |start_timestamp| must be smaller than |target_timestamp|. | |
442 EXPECT_LE(start_timestamp, target_timestamp); | |
443 DemuxerData data = is_audio ? CreateReadFromDemuxerAckForAudio(1) : | |
444 CreateReadFromDemuxerAckForVideo(); | |
445 int current_timestamp = start_timestamp.InMilliseconds(); | |
446 | |
447 // Send some data with access unit timestamps before the |target_timestamp|, | |
448 // and continue sending the data until preroll finishes. | |
449 // This simulates the common condition that AUs received after browser | |
450 // seek begin with timestamps before the seek target, and don't | |
451 // immediately complete preroll. | |
452 while (IsPrerolling(is_audio)) { | |
453 data.access_units[0].timestamp = | |
454 base::TimeDelta::FromMilliseconds(current_timestamp); | |
455 player_.OnDemuxerDataAvailable(data); | |
456 EXPECT_TRUE(GetMediaDecoderJob(is_audio)->is_decoding()); | |
457 EXPECT_EQ(target_timestamp, player_.GetCurrentTime()); | |
458 current_timestamp += 30; | |
459 message_loop_.Run(); | |
460 } | |
461 EXPECT_LT(target_timestamp, player_.GetCurrentTime()); | |
wolenetz
2014/01/02 23:24:22
It's possible that prerolling has completed and th
qinmin
2014/01/02 23:35:22
Done.
| |
462 } | |
463 | |
434 DemuxerData CreateReadFromDemuxerAckWithConfigChanged(bool is_audio, | 464 DemuxerData CreateReadFromDemuxerAckWithConfigChanged(bool is_audio, |
435 int config_unit_index) { | 465 int config_unit_index) { |
436 DemuxerData data; | 466 DemuxerData data; |
437 data.type = is_audio ? DemuxerStream::AUDIO : DemuxerStream::VIDEO; | 467 data.type = is_audio ? DemuxerStream::AUDIO : DemuxerStream::VIDEO; |
438 data.access_units.resize(config_unit_index + 1); | 468 data.access_units.resize(config_unit_index + 1); |
439 | 469 |
440 for (int i = 0; i < config_unit_index; ++i) | 470 for (int i = 0; i < config_unit_index; ++i) |
441 data.access_units[i] = CreateAccessUnitWithData(is_audio, i); | 471 data.access_units[i] = CreateAccessUnitWithData(is_audio, i); |
442 | 472 |
443 data.access_units[config_unit_index].status = DemuxerStream::kConfigChanged; | 473 data.access_units[config_unit_index].status = DemuxerStream::kConfigChanged; |
(...skipping 896 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1340 } | 1370 } |
1341 | 1371 |
1342 TEST_F(MediaSourcePlayerTest, PrerollAudioAfterSeek) { | 1372 TEST_F(MediaSourcePlayerTest, PrerollAudioAfterSeek) { |
1343 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 1373 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
1344 | 1374 |
1345 // Test decoder job will preroll the media to the seek position. | 1375 // Test decoder job will preroll the media to the seek position. |
1346 StartAudioDecoderJob(true); | 1376 StartAudioDecoderJob(true); |
1347 | 1377 |
1348 SeekPlayerWithAbort(true, base::TimeDelta::FromMilliseconds(100)); | 1378 SeekPlayerWithAbort(true, base::TimeDelta::FromMilliseconds(100)); |
1349 EXPECT_TRUE(IsPrerolling(true)); | 1379 EXPECT_TRUE(IsPrerolling(true)); |
1350 EXPECT_EQ(100.0, GetPrerollTimestamp().InMillisecondsF()); | 1380 PrerollDecoderToTime( |
1351 | 1381 true, base::TimeDelta(), base::TimeDelta::FromMilliseconds(100)); |
1352 // Send some data before the seek position. | |
1353 for (int i = 1; i < 4; ++i) { | |
1354 player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckForAudio(i)); | |
1355 EXPECT_TRUE(GetMediaDecoderJob(true)->is_decoding()); | |
1356 message_loop_.Run(); | |
1357 } | |
1358 EXPECT_EQ(100.0, player_.GetCurrentTime().InMillisecondsF()); | |
1359 EXPECT_TRUE(IsPrerolling(true)); | |
1360 | |
1361 // Send data after the seek position. | |
1362 DemuxerData data = CreateReadFromDemuxerAckForAudio(3); | |
1363 data.access_units[0].timestamp = base::TimeDelta::FromMilliseconds(100); | |
1364 player_.OnDemuxerDataAvailable(data); | |
1365 message_loop_.Run(); | |
1366 EXPECT_LT(100.0, player_.GetCurrentTime().InMillisecondsF()); | |
1367 EXPECT_FALSE(IsPrerolling(true)); | |
1368 } | 1382 } |
1369 | 1383 |
1370 TEST_F(MediaSourcePlayerTest, PrerollVideoAfterSeek) { | 1384 TEST_F(MediaSourcePlayerTest, PrerollVideoAfterSeek) { |
1371 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 1385 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
1372 | 1386 |
1373 // Test decoder job will preroll the media to the seek position. | 1387 // Test decoder job will preroll the media to the seek position. |
1374 CreateNextTextureAndSetVideoSurface(); | 1388 CreateNextTextureAndSetVideoSurface(); |
1375 StartVideoDecoderJob(true); | 1389 StartVideoDecoderJob(true); |
1376 | 1390 |
1377 SeekPlayerWithAbort(false, base::TimeDelta::FromMilliseconds(100)); | 1391 SeekPlayerWithAbort(false, base::TimeDelta::FromMilliseconds(100)); |
1378 EXPECT_TRUE(IsPrerolling(false)); | 1392 EXPECT_TRUE(IsPrerolling(false)); |
1379 EXPECT_EQ(100.0, GetPrerollTimestamp().InMillisecondsF()); | 1393 PrerollDecoderToTime( |
1380 | 1394 false, base::TimeDelta(), base::TimeDelta::FromMilliseconds(100)); |
1381 // Send some data before the seek position. | |
1382 DemuxerData data; | |
1383 for (int i = 1; i < 4; ++i) { | |
1384 data = CreateReadFromDemuxerAckForVideo(); | |
1385 data.access_units[0].timestamp = base::TimeDelta::FromMilliseconds(i * 30); | |
1386 player_.OnDemuxerDataAvailable(data); | |
1387 EXPECT_TRUE(GetMediaDecoderJob(false)->is_decoding()); | |
1388 message_loop_.Run(); | |
1389 } | |
1390 EXPECT_EQ(100.0, player_.GetCurrentTime().InMillisecondsF()); | |
1391 EXPECT_TRUE(IsPrerolling(false)); | |
1392 | |
1393 // Send data at the seek position. | |
1394 data = CreateReadFromDemuxerAckForVideo(); | |
1395 data.access_units[0].timestamp = base::TimeDelta::FromMilliseconds(100); | |
1396 player_.OnDemuxerDataAvailable(data); | |
1397 message_loop_.Run(); | |
1398 | |
1399 // TODO(wolenetz/qinmin): Player's maintenance of current time for video-only | |
1400 // streams depends on decoder output, which may be initially inaccurate, and | |
1401 // encoded video test data may also need updating. Verify at least that AU | |
1402 // timestamp-based preroll logic has determined video preroll has completed. | |
1403 // See http://crbug.com/310823 and http://b/11356652. | |
1404 EXPECT_FALSE(IsPrerolling(false)); | |
1405 } | 1395 } |
1406 | 1396 |
1407 TEST_F(MediaSourcePlayerTest, SeekingAfterCompletingPrerollRestartsPreroll) { | 1397 TEST_F(MediaSourcePlayerTest, SeekingAfterCompletingPrerollRestartsPreroll) { |
1408 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 1398 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
1409 | 1399 |
1410 // Test decoder job will begin prerolling upon seek, when it was not | 1400 // Test decoder job will begin prerolling upon seek, when it was not |
1411 // prerolling prior to the seek. | 1401 // prerolling prior to the seek. |
1412 StartAudioDecoderJob(true); | 1402 StartAudioDecoderJob(true); |
1413 MediaDecoderJob* decoder_job = GetMediaDecoderJob(true); | 1403 MediaDecoderJob* decoder_job = GetMediaDecoderJob(true); |
1414 EXPECT_TRUE(IsPrerolling(true)); | 1404 EXPECT_TRUE(IsPrerolling(true)); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1446 EXPECT_EQ(decoder_job, GetMediaDecoderJob(true)); | 1436 EXPECT_EQ(decoder_job, GetMediaDecoderJob(true)); |
1447 } | 1437 } |
1448 | 1438 |
1449 TEST_F(MediaSourcePlayerTest, PrerollContinuesAcrossReleaseAndStart) { | 1439 TEST_F(MediaSourcePlayerTest, PrerollContinuesAcrossReleaseAndStart) { |
1450 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 1440 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
1451 | 1441 |
1452 // Test decoder job will resume media prerolling if interrupted by Release() | 1442 // Test decoder job will resume media prerolling if interrupted by Release() |
1453 // and Start(). | 1443 // and Start(). |
1454 StartAudioDecoderJob(true); | 1444 StartAudioDecoderJob(true); |
1455 | 1445 |
1456 SeekPlayerWithAbort(true, base::TimeDelta::FromMilliseconds(100)); | 1446 base::TimeDelta target_timestamp = base::TimeDelta::FromMilliseconds(100); |
1447 SeekPlayerWithAbort(true, target_timestamp); | |
1457 EXPECT_TRUE(IsPrerolling(true)); | 1448 EXPECT_TRUE(IsPrerolling(true)); |
1458 EXPECT_EQ(100.0, GetPrerollTimestamp().InMillisecondsF()); | 1449 EXPECT_EQ(100.0, GetPrerollTimestamp().InMillisecondsF()); |
1459 | 1450 |
1460 // Send some data before the seek position. | 1451 // Send some data before the seek position. |
1461 // Test uses 'large' number of iterations because decoder job may not get | 1452 // Test uses 'large' number of iterations because decoder job may not get |
1462 // MEDIA_CODEC_OK output status until after a few dequeue output attempts. | 1453 // MEDIA_CODEC_OK output status until after a few dequeue output attempts. |
1463 // This allows decoder status to stabilize prior to AU timestamp reaching | 1454 // This allows decoder status to stabilize prior to AU timestamp reaching |
1464 // the preroll target. | 1455 // the preroll target. |
1465 DemuxerData data; | 1456 DemuxerData data; |
1466 for (int i = 0; i < 10; ++i) { | 1457 for (int i = 0; i < 10; ++i) { |
(...skipping 18 matching lines...) Expand all Loading... | |
1485 player_.OnDemuxerDataAvailable(data); | 1476 player_.OnDemuxerDataAvailable(data); |
1486 EXPECT_TRUE(GetMediaDecoderJob(true)->is_decoding()); | 1477 EXPECT_TRUE(GetMediaDecoderJob(true)->is_decoding()); |
1487 message_loop_.Run(); | 1478 message_loop_.Run(); |
1488 } | 1479 } |
1489 EXPECT_TRUE(IsPrerolling(true)); | 1480 EXPECT_TRUE(IsPrerolling(true)); |
1490 } | 1481 } |
1491 EXPECT_EQ(100.0, player_.GetCurrentTime().InMillisecondsF()); | 1482 EXPECT_EQ(100.0, player_.GetCurrentTime().InMillisecondsF()); |
1492 EXPECT_TRUE(IsPrerolling(true)); | 1483 EXPECT_TRUE(IsPrerolling(true)); |
1493 | 1484 |
1494 // Send data after the seek position. | 1485 // Send data after the seek position. |
1495 data = CreateReadFromDemuxerAckForAudio(3); | 1486 PrerollDecoderToTime(true, target_timestamp, target_timestamp); |
1496 data.access_units[0].timestamp = base::TimeDelta::FromMilliseconds(100); | |
1497 player_.OnDemuxerDataAvailable(data); | |
1498 message_loop_.Run(); | |
1499 EXPECT_LT(100.0, player_.GetCurrentTime().InMillisecondsF()); | |
1500 EXPECT_FALSE(IsPrerolling(true)); | |
1501 } | 1487 } |
1502 | 1488 |
1503 TEST_F(MediaSourcePlayerTest, PrerollContinuesAcrossConfigChange) { | 1489 TEST_F(MediaSourcePlayerTest, PrerollContinuesAcrossConfigChange) { |
1504 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 1490 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
1505 | 1491 |
1506 // Test decoder job will resume media prerolling if interrupted by | 1492 // Test decoder job will resume media prerolling if interrupted by |
1507 // |kConfigChanged| and OnDemuxerConfigsAvailable(). | 1493 // |kConfigChanged| and OnDemuxerConfigsAvailable(). |
1508 StartAudioDecoderJob(true); | 1494 StartAudioDecoderJob(true); |
1509 | 1495 |
1510 SeekPlayerWithAbort(true, base::TimeDelta::FromMilliseconds(100)); | 1496 SeekPlayerWithAbort(true, base::TimeDelta::FromMilliseconds(100)); |
1511 EXPECT_TRUE(IsPrerolling(true)); | 1497 EXPECT_TRUE(IsPrerolling(true)); |
1512 EXPECT_EQ(100.0, GetPrerollTimestamp().InMillisecondsF()); | 1498 EXPECT_EQ(100.0, GetPrerollTimestamp().InMillisecondsF()); |
1513 | 1499 |
1514 // In response to data request, simulate that demuxer signals config change by | 1500 // In response to data request, simulate that demuxer signals config change by |
1515 // sending an AU with |kConfigChanged|. Player should prepare to reconfigure | 1501 // sending an AU with |kConfigChanged|. Player should prepare to reconfigure |
1516 // the audio decoder job, and should request new demuxer configs. | 1502 // the audio decoder job, and should request new demuxer configs. |
1517 DemuxerData data = CreateReadFromDemuxerAckWithConfigChanged(true, 0); | 1503 DemuxerData data = CreateReadFromDemuxerAckWithConfigChanged(true, 0); |
1518 EXPECT_EQ(0, demuxer_->num_config_requests()); | 1504 EXPECT_EQ(0, demuxer_->num_config_requests()); |
1519 player_.OnDemuxerDataAvailable(data); | 1505 player_.OnDemuxerDataAvailable(data); |
1520 EXPECT_EQ(1, demuxer_->num_config_requests()); | 1506 EXPECT_EQ(1, demuxer_->num_config_requests()); |
1521 | 1507 |
1522 // Simulate arrival of new configs. | 1508 // Simulate arrival of new configs. |
1523 player_.OnDemuxerConfigsAvailable(CreateAudioDemuxerConfigs(kCodecVorbis)); | 1509 player_.OnDemuxerConfigsAvailable(CreateAudioDemuxerConfigs(kCodecVorbis)); |
1524 | 1510 |
1525 // Send some data before the seek position. | 1511 PrerollDecoderToTime( |
1526 for (int i = 1; i < 4; ++i) { | 1512 true, base::TimeDelta(), base::TimeDelta::FromMilliseconds(100)); |
1527 player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckForAudio(i)); | |
1528 EXPECT_TRUE(GetMediaDecoderJob(true)->is_decoding()); | |
1529 message_loop_.Run(); | |
1530 } | |
1531 EXPECT_EQ(100.0, player_.GetCurrentTime().InMillisecondsF()); | |
1532 EXPECT_TRUE(IsPrerolling(true)); | |
1533 | |
1534 // Send data after the seek position. | |
1535 data = CreateReadFromDemuxerAckForAudio(3); | |
1536 data.access_units[0].timestamp = base::TimeDelta::FromMilliseconds(100); | |
1537 player_.OnDemuxerDataAvailable(data); | |
1538 message_loop_.Run(); | |
1539 EXPECT_LT(100.0, player_.GetCurrentTime().InMillisecondsF()); | |
1540 EXPECT_FALSE(IsPrerolling(true)); | |
1541 } | 1513 } |
1542 | 1514 |
1543 TEST_F(MediaSourcePlayerTest, SimultaneousAudioVideoConfigChange) { | 1515 TEST_F(MediaSourcePlayerTest, SimultaneousAudioVideoConfigChange) { |
1544 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 1516 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
1545 | 1517 |
1546 // Test that the player allows simultaneous audio and video config change, | 1518 // Test that the player allows simultaneous audio and video config change, |
1547 // such as might occur during OnPrefetchDone() if next access unit for both | 1519 // such as might occur during OnPrefetchDone() if next access unit for both |
1548 // audio and video jobs is |kConfigChanged|. | 1520 // audio and video jobs is |kConfigChanged|. |
1549 CreateNextTextureAndSetVideoSurface(); | 1521 CreateNextTextureAndSetVideoSurface(); |
1550 Start(CreateAudioVideoDemuxerConfigs(), true); | 1522 Start(CreateAudioVideoDemuxerConfigs(), true); |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1626 BrowserSeekPlayer(false); | 1598 BrowserSeekPlayer(false); |
1627 | 1599 |
1628 // Simulate browser seek is done, but to a later time than was requested. | 1600 // Simulate browser seek is done, but to a later time than was requested. |
1629 EXPECT_LT(player_.GetCurrentTime().InMillisecondsF(), 100); | 1601 EXPECT_LT(player_.GetCurrentTime().InMillisecondsF(), 100); |
1630 player_.OnDemuxerSeekDone(base::TimeDelta::FromMilliseconds(100)); | 1602 player_.OnDemuxerSeekDone(base::TimeDelta::FromMilliseconds(100)); |
1631 EXPECT_TRUE(GetMediaDecoderJob(false)); | 1603 EXPECT_TRUE(GetMediaDecoderJob(false)); |
1632 EXPECT_EQ(100.0, player_.GetCurrentTime().InMillisecondsF()); | 1604 EXPECT_EQ(100.0, player_.GetCurrentTime().InMillisecondsF()); |
1633 EXPECT_EQ(100.0, GetPrerollTimestamp().InMillisecondsF()); | 1605 EXPECT_EQ(100.0, GetPrerollTimestamp().InMillisecondsF()); |
1634 EXPECT_EQ(2, demuxer_->num_data_requests()); | 1606 EXPECT_EQ(2, demuxer_->num_data_requests()); |
1635 | 1607 |
1636 // Send some data with access unit timestamps before the actual browser seek | 1608 PrerollDecoderToTime( |
1637 // position. This is a bit unrealistic in this case where the browser seek | 1609 false, base::TimeDelta(), base::TimeDelta::FromMilliseconds(100)); |
1638 // jumped forward and next data from demuxer would normally begin at this | |
1639 // browser seek position, immediately completing preroll. For simplicity and | |
1640 // coverage, this test simulates the more common condition that AUs received | |
1641 // after browser seek begin with timestamps before the seek target, and don't | |
1642 // immediately complete preroll. | |
1643 DemuxerData data; | |
1644 for (int i = 1; i < 4; ++i) { | |
1645 data = CreateReadFromDemuxerAckForVideo(); | |
1646 data.access_units[0].timestamp = base::TimeDelta::FromMilliseconds(i * 30); | |
1647 player_.OnDemuxerDataAvailable(data); | |
1648 EXPECT_TRUE(GetMediaDecoderJob(false)->is_decoding()); | |
1649 message_loop_.Run(); | |
1650 EXPECT_TRUE(IsPrerolling(false)); | |
1651 } | |
1652 | |
1653 EXPECT_EQ(100.0, player_.GetCurrentTime().InMillisecondsF()); | |
1654 | |
1655 // Send data after the browser seek position. | |
1656 data = CreateReadFromDemuxerAckForVideo(); | |
1657 data.access_units[0].timestamp = base::TimeDelta::FromMilliseconds(120); | |
1658 player_.OnDemuxerDataAvailable(data); | |
1659 message_loop_.Run(); | |
1660 EXPECT_FALSE(IsPrerolling(false)); | |
1661 } | 1610 } |
1662 | 1611 |
1663 TEST_F(MediaSourcePlayerTest, VideoDemuxerConfigChange) { | 1612 TEST_F(MediaSourcePlayerTest, VideoDemuxerConfigChange) { |
1664 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 1613 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
1665 | 1614 |
1666 // Test that video config change notification results in request for demuxer | 1615 // Test that video config change notification results in request for demuxer |
1667 // configuration, and that a video decoder job results without any browser | 1616 // configuration, and that a video decoder job results without any browser |
1668 // seek necessary once the new demuxer config arrives. | 1617 // seek necessary once the new demuxer config arrives. |
1669 StartConfigChange(false, true, 1); | 1618 StartConfigChange(false, true, 1); |
1670 MediaDecoderJob* first_job = GetMediaDecoderJob(false); | 1619 MediaDecoderJob* first_job = GetMediaDecoderJob(false); |
(...skipping 442 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2113 | 2062 |
2114 std::vector<std::string> codec_avc(1, "avc1"); | 2063 std::vector<std::string> codec_avc(1, "avc1"); |
2115 EXPECT_FALSE(IsTypeSupported(invalid_uuid, kL3, kVideoMp4, codec_avc)); | 2064 EXPECT_FALSE(IsTypeSupported(invalid_uuid, kL3, kVideoMp4, codec_avc)); |
2116 EXPECT_FALSE(IsTypeSupported(invalid_uuid, kL1, kVideoMp4, codec_avc)); | 2065 EXPECT_FALSE(IsTypeSupported(invalid_uuid, kL1, kVideoMp4, codec_avc)); |
2117 } | 2066 } |
2118 | 2067 |
2119 // TODO(xhwang): Are these IsTypeSupported tests device specific? | 2068 // TODO(xhwang): Are these IsTypeSupported tests device specific? |
2120 // TODO(xhwang): Add more IsTypeSupported tests. | 2069 // TODO(xhwang): Add more IsTypeSupported tests. |
2121 | 2070 |
2122 } // namespace media | 2071 } // namespace media |
OLD | NEW |