OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "media/base/android/media_codec_player.h" | 5 #include "media/base/android/media_codec_player.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 920 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
931 // Configuration should propagate through the player and to the manager. | 931 // Configuration should propagate through the player and to the manager. |
932 EXPECT_TRUE( | 932 EXPECT_TRUE( |
933 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsMetadataChanged, | 933 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsMetadataChanged, |
934 base::Unretained(&manager_)))); | 934 base::Unretained(&manager_)))); |
935 | 935 |
936 EXPECT_EQ(duration, manager_.media_metadata_.duration); | 936 EXPECT_EQ(duration, manager_.media_metadata_.duration); |
937 EXPECT_EQ(320, manager_.media_metadata_.width); | 937 EXPECT_EQ(320, manager_.media_metadata_.width); |
938 EXPECT_EQ(240, manager_.media_metadata_.height); | 938 EXPECT_EQ(240, manager_.media_metadata_.height); |
939 } | 939 } |
940 | 940 |
941 TEST_F(MediaCodecPlayerTest, AudioPlayTillCompletion) { | 941 TEST_F(MediaCodecPlayerTest, DISABLED_AudioPlayTillCompletion) { |
942 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 942 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
943 | 943 |
944 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(1000); | 944 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(1000); |
945 base::TimeDelta timeout = base::TimeDelta::FromMilliseconds(2000); | 945 base::TimeDelta timeout = base::TimeDelta::FromMilliseconds(2000); |
946 | 946 |
947 demuxer_->SetAudioFactory( | 947 demuxer_->SetAudioFactory( |
948 scoped_ptr<AudioFactory>(new AudioFactory(duration))); | 948 scoped_ptr<AudioFactory>(new AudioFactory(duration))); |
949 | 949 |
950 CreatePlayer(); | 950 CreatePlayer(); |
951 | 951 |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1046 player_->Start(); | 1046 player_->Start(); |
1047 | 1047 |
1048 // Playback should not start. | 1048 // Playback should not start. |
1049 EXPECT_FALSE( | 1049 EXPECT_FALSE( |
1050 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsPlaybackStarted, | 1050 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsPlaybackStarted, |
1051 base::Unretained(&manager_)), | 1051 base::Unretained(&manager_)), |
1052 start_timeout)); | 1052 start_timeout)); |
1053 } | 1053 } |
1054 | 1054 |
1055 // http://crbug.com/518900 | 1055 // http://crbug.com/518900 |
1056 TEST_F(MediaCodecPlayerTest, AudioSeekAfterStop) { | 1056 TEST_F(MediaCodecPlayerTest, DISABLED_AudioSeekAfterStop) { |
1057 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 1057 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
1058 | 1058 |
1059 // Play for 300 ms, then Pause, then Seek to beginning. The playback should | 1059 // Play for 300 ms, then Pause, then Seek to beginning. The playback should |
1060 // start from the beginning. | 1060 // start from the beginning. |
1061 | 1061 |
1062 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(2000); | 1062 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(2000); |
1063 | 1063 |
1064 demuxer_->SetAudioFactory( | 1064 demuxer_->SetAudioFactory( |
1065 scoped_ptr<AudioFactory>(new AudioFactory(duration))); | 1065 scoped_ptr<AudioFactory>(new AudioFactory(duration))); |
1066 | 1066 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1105 base::Unretained(&manager_)))); | 1105 base::Unretained(&manager_)))); |
1106 | 1106 |
1107 // Make sure we started from the beginninig | 1107 // Make sure we started from the beginninig |
1108 EXPECT_GT(base::TimeDelta::FromMilliseconds(40), manager_.pts_stat_.min()); | 1108 EXPECT_GT(base::TimeDelta::FromMilliseconds(40), manager_.pts_stat_.min()); |
1109 | 1109 |
1110 // The player should have reported the seek completion to the manager. | 1110 // The player should have reported the seek completion to the manager. |
1111 EXPECT_TRUE(WaitForCondition(base::Bind( | 1111 EXPECT_TRUE(WaitForCondition(base::Bind( |
1112 &MockMediaPlayerManager::IsSeekCompleted, base::Unretained(&manager_)))); | 1112 &MockMediaPlayerManager::IsSeekCompleted, base::Unretained(&manager_)))); |
1113 } | 1113 } |
1114 | 1114 |
1115 TEST_F(MediaCodecPlayerTest, AudioSeekThenPlay) { | 1115 TEST_F(MediaCodecPlayerTest, DISABLED_AudioSeekThenPlay) { |
1116 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 1116 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
1117 | 1117 |
1118 // Issue Seek command immediately followed by Start. The playback should | 1118 // Issue Seek command immediately followed by Start. The playback should |
1119 // start at the seek position. | 1119 // start at the seek position. |
1120 | 1120 |
1121 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(2000); | 1121 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(2000); |
1122 base::TimeDelta seek_position = base::TimeDelta::FromMilliseconds(500); | 1122 base::TimeDelta seek_position = base::TimeDelta::FromMilliseconds(500); |
1123 | 1123 |
1124 demuxer_->SetAudioFactory( | 1124 demuxer_->SetAudioFactory( |
1125 scoped_ptr<AudioFactory>(new AudioFactory(duration))); | 1125 scoped_ptr<AudioFactory>(new AudioFactory(duration))); |
(...skipping 13 matching lines...) Expand all Loading... |
1139 base::Unretained(&manager_)))); | 1139 base::Unretained(&manager_)))); |
1140 | 1140 |
1141 // The playback should start at |seek_position| | 1141 // The playback should start at |seek_position| |
1142 EXPECT_TRUE(AlmostEqual(seek_position, manager_.pts_stat_.min(), 25)); | 1142 EXPECT_TRUE(AlmostEqual(seek_position, manager_.pts_stat_.min(), 25)); |
1143 | 1143 |
1144 // The player should have reported the seek completion to the manager. | 1144 // The player should have reported the seek completion to the manager. |
1145 EXPECT_TRUE(WaitForCondition(base::Bind( | 1145 EXPECT_TRUE(WaitForCondition(base::Bind( |
1146 &MockMediaPlayerManager::IsSeekCompleted, base::Unretained(&manager_)))); | 1146 &MockMediaPlayerManager::IsSeekCompleted, base::Unretained(&manager_)))); |
1147 } | 1147 } |
1148 | 1148 |
1149 TEST_F(MediaCodecPlayerTest, AudioSeekThenPlayThenConfig) { | 1149 TEST_F(MediaCodecPlayerTest, DISABLED_AudioSeekThenPlayThenConfig) { |
1150 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 1150 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
1151 | 1151 |
1152 // Issue Seek command immediately followed by Start but without prior demuxer | 1152 // Issue Seek command immediately followed by Start but without prior demuxer |
1153 // configuration. Start should wait for configuration. After it has been | 1153 // configuration. Start should wait for configuration. After it has been |
1154 // posted the playback should start at the seek position. | 1154 // posted the playback should start at the seek position. |
1155 | 1155 |
1156 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(2000); | 1156 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(2000); |
1157 base::TimeDelta seek_position = base::TimeDelta::FromMilliseconds(500); | 1157 base::TimeDelta seek_position = base::TimeDelta::FromMilliseconds(500); |
1158 | 1158 |
1159 demuxer_->SetAudioFactory( | 1159 demuxer_->SetAudioFactory( |
(...skipping 19 matching lines...) Expand all Loading... |
1179 | 1179 |
1180 // The playback should start at |seek_position| | 1180 // The playback should start at |seek_position| |
1181 EXPECT_TRUE(AlmostEqual(seek_position, manager_.pts_stat_.min(), 25)); | 1181 EXPECT_TRUE(AlmostEqual(seek_position, manager_.pts_stat_.min(), 25)); |
1182 | 1182 |
1183 // The player should have reported the seek completion to the manager. | 1183 // The player should have reported the seek completion to the manager. |
1184 EXPECT_TRUE(WaitForCondition(base::Bind( | 1184 EXPECT_TRUE(WaitForCondition(base::Bind( |
1185 &MockMediaPlayerManager::IsSeekCompleted, base::Unretained(&manager_)))); | 1185 &MockMediaPlayerManager::IsSeekCompleted, base::Unretained(&manager_)))); |
1186 } | 1186 } |
1187 | 1187 |
1188 // http://crbug.com/518900 | 1188 // http://crbug.com/518900 |
1189 TEST_F(MediaCodecPlayerTest, AudioSeekWhilePlaying) { | 1189 TEST_F(MediaCodecPlayerTest, DISABLED_AudioSeekWhilePlaying) { |
1190 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 1190 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
1191 | 1191 |
1192 // Play for 300 ms, then issue several Seek commands in the row. | 1192 // Play for 300 ms, then issue several Seek commands in the row. |
1193 // The playback should continue at the last seek position. | 1193 // The playback should continue at the last seek position. |
1194 | 1194 |
1195 // To test this condition without analyzing the reported time details | 1195 // To test this condition without analyzing the reported time details |
1196 // and without introducing dependency on implementation I make a long (10s) | 1196 // and without introducing dependency on implementation I make a long (10s) |
1197 // duration and test that the playback resumes after big time jump (5s) in a | 1197 // duration and test that the playback resumes after big time jump (5s) in a |
1198 // short period of time (200 ms). | 1198 // short period of time (200 ms). |
1199 base::TimeDelta duration = base::TimeDelta::FromSeconds(10); | 1199 base::TimeDelta duration = base::TimeDelta::FromSeconds(10); |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1258 base::Unretained(demuxer_)))); | 1258 base::Unretained(demuxer_)))); |
1259 | 1259 |
1260 // Playback should continue with a new surface. Wait till completion. | 1260 // Playback should continue with a new surface. Wait till completion. |
1261 EXPECT_TRUE( | 1261 EXPECT_TRUE( |
1262 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsPlaybackCompleted, | 1262 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsPlaybackCompleted, |
1263 base::Unretained(&manager_)), | 1263 base::Unretained(&manager_)), |
1264 timeout)); | 1264 timeout)); |
1265 EXPECT_LE(duration, manager_.pts_stat_.max()); | 1265 EXPECT_LE(duration, manager_.pts_stat_.max()); |
1266 } | 1266 } |
1267 | 1267 |
1268 TEST_F(MediaCodecPlayerTest, VideoRemoveAndSetSurface) { | 1268 TEST_F(MediaCodecPlayerTest, DISABLED_VideoRemoveAndSetSurface) { |
1269 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 1269 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
1270 | 1270 |
1271 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(1000); | 1271 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(1000); |
1272 | 1272 |
1273 ASSERT_TRUE(StartVideoPlayback(duration, "VideoRemoveAndSetSurface")); | 1273 ASSERT_TRUE(StartVideoPlayback(duration, "VideoRemoveAndSetSurface")); |
1274 | 1274 |
1275 // Wait for some time and check statistics. | 1275 // Wait for some time and check statistics. |
1276 WaitForDelay(base::TimeDelta::FromMilliseconds(200)); | 1276 WaitForDelay(base::TimeDelta::FromMilliseconds(200)); |
1277 | 1277 |
1278 // Make sure we played at least 100 ms. | 1278 // Make sure we played at least 100 ms. |
(...skipping 29 matching lines...) Expand all Loading... |
1308 EXPECT_TRUE( | 1308 EXPECT_TRUE( |
1309 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsPlaybackStarted, | 1309 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsPlaybackStarted, |
1310 base::Unretained(&manager_)), | 1310 base::Unretained(&manager_)), |
1311 reconfigure_timeout)); | 1311 reconfigure_timeout)); |
1312 | 1312 |
1313 // Timestamps should not go back. | 1313 // Timestamps should not go back. |
1314 EXPECT_LE(max_pts_before_removal, manager_.pts_stat_.max()); | 1314 EXPECT_LE(max_pts_before_removal, manager_.pts_stat_.max()); |
1315 } | 1315 } |
1316 | 1316 |
1317 // http://crbug.com/518900 | 1317 // http://crbug.com/518900 |
1318 TEST_F(MediaCodecPlayerTest, VideoReleaseAndStart) { | 1318 TEST_F(MediaCodecPlayerTest, DISABLED_VideoReleaseAndStart) { |
1319 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 1319 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
1320 | 1320 |
1321 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(1000); | 1321 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(1000); |
1322 | 1322 |
1323 ASSERT_TRUE(StartVideoPlayback(duration, "VideoReleaseAndStart")); | 1323 ASSERT_TRUE(StartVideoPlayback(duration, "VideoReleaseAndStart")); |
1324 | 1324 |
1325 // Wait for some time and check statistics. | 1325 // Wait for some time and check statistics. |
1326 WaitForDelay(base::TimeDelta::FromMilliseconds(200)); | 1326 WaitForDelay(base::TimeDelta::FromMilliseconds(200)); |
1327 | 1327 |
1328 // Make sure we played at least 100 ms. | 1328 // Make sure we played at least 100 ms. |
(...skipping 27 matching lines...) Expand all Loading... |
1356 base::TimeDelta reconfigure_timeout = base::TimeDelta::FromMilliseconds(800); | 1356 base::TimeDelta reconfigure_timeout = base::TimeDelta::FromMilliseconds(800); |
1357 EXPECT_TRUE( | 1357 EXPECT_TRUE( |
1358 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsPlaybackStarted, | 1358 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsPlaybackStarted, |
1359 base::Unretained(&manager_)), | 1359 base::Unretained(&manager_)), |
1360 reconfigure_timeout)); | 1360 reconfigure_timeout)); |
1361 | 1361 |
1362 // Timestamps should not go back. | 1362 // Timestamps should not go back. |
1363 EXPECT_LE(max_pts_before_backgrounding, manager_.pts_stat_.max()); | 1363 EXPECT_LE(max_pts_before_backgrounding, manager_.pts_stat_.max()); |
1364 } | 1364 } |
1365 | 1365 |
1366 TEST_F(MediaCodecPlayerTest, VideoSeekAndRelease) { | 1366 TEST_F(MediaCodecPlayerTest, DISABLED_VideoSeekAndRelease) { |
1367 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 1367 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
1368 | 1368 |
1369 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(2000); | 1369 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(2000); |
1370 base::TimeDelta seek_position = base::TimeDelta::FromMilliseconds(1000); | 1370 base::TimeDelta seek_position = base::TimeDelta::FromMilliseconds(1000); |
1371 | 1371 |
1372 ASSERT_TRUE(StartVideoPlayback(duration, "VideoSeekAndRelease")); | 1372 ASSERT_TRUE(StartVideoPlayback(duration, "VideoSeekAndRelease")); |
1373 | 1373 |
1374 // Wait for some time and check statistics. | 1374 // Wait for some time and check statistics. |
1375 WaitForDelay(base::TimeDelta::FromMilliseconds(200)); | 1375 WaitForDelay(base::TimeDelta::FromMilliseconds(200)); |
1376 | 1376 |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1519 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsPlaybackCompleted, | 1519 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsPlaybackCompleted, |
1520 base::Unretained(&manager_)))); | 1520 base::Unretained(&manager_)))); |
1521 | 1521 |
1522 // The first pts should be equal than seek position even if video frames | 1522 // The first pts should be equal than seek position even if video frames |
1523 // started 100 ms eralier than the seek request. | 1523 // started 100 ms eralier than the seek request. |
1524 EXPECT_EQ(seek_position, manager_.pts_stat_.min()); | 1524 EXPECT_EQ(seek_position, manager_.pts_stat_.min()); |
1525 | 1525 |
1526 EXPECT_EQ(6, manager_.pts_stat_.num_values()); | 1526 EXPECT_EQ(6, manager_.pts_stat_.num_values()); |
1527 } | 1527 } |
1528 | 1528 |
1529 TEST_F(MediaCodecPlayerTest, AVPrerollAudioWaitsForVideo) { | 1529 TEST_F(MediaCodecPlayerTest, DISABLED_AVPrerollAudioWaitsForVideo) { |
1530 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 1530 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
1531 | 1531 |
1532 // Test that during prerolling neither audio nor video plays and that both | 1532 // Test that during prerolling neither audio nor video plays and that both |
1533 // resume simultaneously after preroll is finished. In other words, test | 1533 // resume simultaneously after preroll is finished. In other words, test |
1534 // that preroll works. | 1534 // that preroll works. |
1535 // We put the video into the long preroll and intercept the time when first | 1535 // We put the video into the long preroll and intercept the time when first |
1536 // rendering happens in each stream. The moment of rendering is approximated | 1536 // rendering happens in each stream. The moment of rendering is approximated |
1537 // with a decoder PTS that is delivered by a test-only callback. | 1537 // with a decoder PTS that is delivered by a test-only callback. |
1538 | 1538 |
1539 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(2000); | 1539 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(2000); |
(...skipping 30 matching lines...) Expand all Loading... |
1570 EXPECT_TRUE(AlmostEqual(manager_.FirstFramePTS(DemuxerStream::AUDIO), | 1570 EXPECT_TRUE(AlmostEqual(manager_.FirstFramePTS(DemuxerStream::AUDIO), |
1571 manager_.FirstFramePTS(DemuxerStream::VIDEO), 25)); | 1571 manager_.FirstFramePTS(DemuxerStream::VIDEO), 25)); |
1572 | 1572 |
1573 EXPECT_TRUE(AlmostEqual(manager_.FirstFrameTime(DemuxerStream::AUDIO), | 1573 EXPECT_TRUE(AlmostEqual(manager_.FirstFrameTime(DemuxerStream::AUDIO), |
1574 manager_.FirstFrameTime(DemuxerStream::VIDEO), 50)); | 1574 manager_.FirstFrameTime(DemuxerStream::VIDEO), 50)); |
1575 | 1575 |
1576 // The playback should start at |seek_position| | 1576 // The playback should start at |seek_position| |
1577 EXPECT_TRUE(AlmostEqual(seek_position, manager_.pts_stat_.min(), 25)); | 1577 EXPECT_TRUE(AlmostEqual(seek_position, manager_.pts_stat_.min(), 25)); |
1578 } | 1578 } |
1579 | 1579 |
1580 TEST_F(MediaCodecPlayerTest, AVPrerollReleaseAndRestart) { | 1580 TEST_F(MediaCodecPlayerTest, DISABLED_AVPrerollReleaseAndRestart) { |
1581 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 1581 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
1582 | 1582 |
1583 // Test that player will resume prerolling if prerolling is interrupted by | 1583 // Test that player will resume prerolling if prerolling is interrupted by |
1584 // Release() and Start(). | 1584 // Release() and Start(). |
1585 | 1585 |
1586 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(2000); | 1586 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(2000); |
1587 | 1587 |
1588 // Set significant preroll interval. 500 ms means 25 frames, at 10 ms | 1588 // Set significant preroll interval. 500 ms means 25 frames, at 10 ms |
1589 // per frame it would take 250 ms to preroll. | 1589 // per frame it would take 250 ms to preroll. |
1590 base::TimeDelta seek_position = base::TimeDelta::FromMilliseconds(1000); | 1590 base::TimeDelta seek_position = base::TimeDelta::FromMilliseconds(1000); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1644 manager_.FirstFramePTS(DemuxerStream::VIDEO), 50)); | 1644 manager_.FirstFramePTS(DemuxerStream::VIDEO), 50)); |
1645 | 1645 |
1646 EXPECT_TRUE(AlmostEqual(manager_.FirstFrameTime(DemuxerStream::AUDIO), | 1646 EXPECT_TRUE(AlmostEqual(manager_.FirstFrameTime(DemuxerStream::AUDIO), |
1647 manager_.FirstFrameTime(DemuxerStream::VIDEO), 50)); | 1647 manager_.FirstFrameTime(DemuxerStream::VIDEO), 50)); |
1648 | 1648 |
1649 // The playback should start at |seek_position|, but Release() might discard | 1649 // The playback should start at |seek_position|, but Release() might discard |
1650 // the first audio frame. | 1650 // the first audio frame. |
1651 EXPECT_TRUE(AlmostEqual(seek_position, manager_.pts_stat_.min(), 50)); | 1651 EXPECT_TRUE(AlmostEqual(seek_position, manager_.pts_stat_.min(), 50)); |
1652 } | 1652 } |
1653 | 1653 |
1654 TEST_F(MediaCodecPlayerTest, AVPrerollStopAndRestart) { | 1654 TEST_F(MediaCodecPlayerTest, DISABLED_AVPrerollStopAndRestart) { |
1655 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 1655 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
1656 | 1656 |
1657 // Test that if Pause() happens during the preroll phase, | 1657 // Test that if Pause() happens during the preroll phase, |
1658 // we continue to do preroll after restart. | 1658 // we continue to do preroll after restart. |
1659 | 1659 |
1660 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(1200); | 1660 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(1200); |
1661 | 1661 |
1662 // Set significant preroll interval. 500 ms means 25 frames, at 10 ms | 1662 // Set significant preroll interval. 500 ms means 25 frames, at 10 ms |
1663 // per frame it would take 250 ms to preroll. | 1663 // per frame it would take 250 ms to preroll. |
1664 base::TimeDelta seek_position = base::TimeDelta::FromMilliseconds(1000); | 1664 base::TimeDelta seek_position = base::TimeDelta::FromMilliseconds(1000); |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1736 EXPECT_TRUE(AlmostEqual(manager_.FirstFramePTS(DemuxerStream::AUDIO), | 1736 EXPECT_TRUE(AlmostEqual(manager_.FirstFramePTS(DemuxerStream::AUDIO), |
1737 manager_.FirstFramePTS(DemuxerStream::VIDEO), 25)); | 1737 manager_.FirstFramePTS(DemuxerStream::VIDEO), 25)); |
1738 | 1738 |
1739 EXPECT_TRUE(AlmostEqual(manager_.FirstFrameTime(DemuxerStream::AUDIO), | 1739 EXPECT_TRUE(AlmostEqual(manager_.FirstFrameTime(DemuxerStream::AUDIO), |
1740 manager_.FirstFrameTime(DemuxerStream::VIDEO), 50)); | 1740 manager_.FirstFrameTime(DemuxerStream::VIDEO), 50)); |
1741 | 1741 |
1742 // The playback should start at |seek_position| | 1742 // The playback should start at |seek_position| |
1743 EXPECT_TRUE(AlmostEqual(seek_position, manager_.pts_stat_.min(), 25)); | 1743 EXPECT_TRUE(AlmostEqual(seek_position, manager_.pts_stat_.min(), 25)); |
1744 } | 1744 } |
1745 | 1745 |
1746 TEST_F(MediaCodecPlayerTest, AVPrerollVideoEndsWhilePrerolling) { | 1746 TEST_F(MediaCodecPlayerTest, DISABLED_AVPrerollVideoEndsWhilePrerolling) { |
1747 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 1747 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
1748 | 1748 |
1749 // Test that when one stream ends in the preroll phase and another is not | 1749 // Test that when one stream ends in the preroll phase and another is not |
1750 // the preroll finishes and playback continues after it. | 1750 // the preroll finishes and playback continues after it. |
1751 | 1751 |
1752 // http://crbug.com/526755 | 1752 // http://crbug.com/526755 |
1753 // TODO(timav): remove these logs after verifying that the bug is fixed. | 1753 // TODO(timav): remove these logs after verifying that the bug is fixed. |
1754 DVLOG(0) << "AVPrerollVideoEndsWhilePrerolling: begin"; | 1754 DVLOG(0) << "AVPrerollVideoEndsWhilePrerolling: begin"; |
1755 | 1755 |
1756 base::TimeDelta audio_duration = base::TimeDelta::FromMilliseconds(1100); | 1756 base::TimeDelta audio_duration = base::TimeDelta::FromMilliseconds(1100); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1821 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsPlaybackCompleted, | 1821 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsPlaybackCompleted, |
1822 base::Unretained(&manager_)))); | 1822 base::Unretained(&manager_)))); |
1823 | 1823 |
1824 // There should not be any video frames. | 1824 // There should not be any video frames. |
1825 EXPECT_FALSE(manager_.HasFirstFrame(DemuxerStream::VIDEO)); | 1825 EXPECT_FALSE(manager_.HasFirstFrame(DemuxerStream::VIDEO)); |
1826 | 1826 |
1827 // http://crbug.com/526755 | 1827 // http://crbug.com/526755 |
1828 DVLOG(0) << "AVPrerollVideoEndsWhilePrerolling: end"; | 1828 DVLOG(0) << "AVPrerollVideoEndsWhilePrerolling: end"; |
1829 } | 1829 } |
1830 | 1830 |
1831 TEST_F(MediaCodecPlayerTest, VideoConfigChangeWhilePlaying) { | 1831 TEST_F(MediaCodecPlayerTest, DISABLED_VideoConfigChangeWhilePlaying) { |
1832 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 1832 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
1833 | 1833 |
1834 // Test that video only playback continues after video config change. | 1834 // Test that video only playback continues after video config change. |
1835 | 1835 |
1836 // Initialize video playback | 1836 // Initialize video playback |
1837 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(1200); | 1837 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(1200); |
1838 base::TimeDelta config_change_position = | 1838 base::TimeDelta config_change_position = |
1839 base::TimeDelta::FromMilliseconds(1000); | 1839 base::TimeDelta::FromMilliseconds(1000); |
1840 | 1840 |
1841 base::TimeDelta start_timeout = base::TimeDelta::FromMilliseconds(2000); | 1841 base::TimeDelta start_timeout = base::TimeDelta::FromMilliseconds(2000); |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1938 | 1938 |
1939 // Check that we did not miss audio frames. We expect one postponed frames | 1939 // Check that we did not miss audio frames. We expect one postponed frames |
1940 // that are not reported. | 1940 // that are not reported. |
1941 // For Nexus 4 KitKat the AAC decoder seems to swallow the first frame | 1941 // For Nexus 4 KitKat the AAC decoder seems to swallow the first frame |
1942 // but reports the last pts twice, maybe it just shifts the reported PTS. | 1942 // but reports the last pts twice, maybe it just shifts the reported PTS. |
1943 int expected_audio_frames = GetFrameCount(duration, kAudioFramePeriod, 0) - 1; | 1943 int expected_audio_frames = GetFrameCount(duration, kAudioFramePeriod, 0) - 1; |
1944 EXPECT_EQ(expected_audio_frames, | 1944 EXPECT_EQ(expected_audio_frames, |
1945 manager_.render_stat_[DemuxerStream::AUDIO].num_values()); | 1945 manager_.render_stat_[DemuxerStream::AUDIO].num_values()); |
1946 } | 1946 } |
1947 | 1947 |
1948 TEST_F(MediaCodecPlayerTest, AVAudioConfigChangeWhilePlaying) { | 1948 TEST_F(MediaCodecPlayerTest, DISABLED_AVAudioConfigChangeWhilePlaying) { |
1949 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 1949 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
1950 | 1950 |
1951 // Test that A/V playback continues after audio config change. | 1951 // Test that A/V playback continues after audio config change. |
1952 | 1952 |
1953 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(1200); | 1953 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(1200); |
1954 base::TimeDelta config_change_position = | 1954 base::TimeDelta config_change_position = |
1955 base::TimeDelta::FromMilliseconds(1000); | 1955 base::TimeDelta::FromMilliseconds(1000); |
1956 | 1956 |
1957 base::TimeDelta completion_timeout = base::TimeDelta::FromMilliseconds(3000); | 1957 base::TimeDelta completion_timeout = base::TimeDelta::FromMilliseconds(3000); |
1958 | 1958 |
(...skipping 23 matching lines...) Expand all Loading... |
1982 EXPECT_EQ(expected_video_frames, | 1982 EXPECT_EQ(expected_video_frames, |
1983 manager_.render_stat_[DemuxerStream::VIDEO].num_values()); | 1983 manager_.render_stat_[DemuxerStream::VIDEO].num_values()); |
1984 | 1984 |
1985 // Check that we did not miss audio frames. We expect two postponed frames | 1985 // Check that we did not miss audio frames. We expect two postponed frames |
1986 // that are not reported. | 1986 // that are not reported. |
1987 int expected_audio_frames = GetFrameCount(duration, kAudioFramePeriod, 1) - 2; | 1987 int expected_audio_frames = GetFrameCount(duration, kAudioFramePeriod, 1) - 2; |
1988 EXPECT_EQ(expected_audio_frames, | 1988 EXPECT_EQ(expected_audio_frames, |
1989 manager_.render_stat_[DemuxerStream::AUDIO].num_values()); | 1989 manager_.render_stat_[DemuxerStream::AUDIO].num_values()); |
1990 } | 1990 } |
1991 | 1991 |
1992 TEST_F(MediaCodecPlayerTest, AVSimultaneousConfigChange_1) { | 1992 TEST_F(MediaCodecPlayerTest, DISABLED_AVSimultaneousConfigChange_1) { |
1993 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 1993 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
1994 | 1994 |
1995 // Test that the playback continues if audio and video config changes happen | 1995 // Test that the playback continues if audio and video config changes happen |
1996 // at the same time. | 1996 // at the same time. |
1997 | 1997 |
1998 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(1200); | 1998 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(1200); |
1999 base::TimeDelta config_change_audio = base::TimeDelta::FromMilliseconds(1000); | 1999 base::TimeDelta config_change_audio = base::TimeDelta::FromMilliseconds(1000); |
2000 base::TimeDelta config_change_video = base::TimeDelta::FromMilliseconds(1000); | 2000 base::TimeDelta config_change_video = base::TimeDelta::FromMilliseconds(1000); |
2001 | 2001 |
2002 base::TimeDelta completion_timeout = base::TimeDelta::FromMilliseconds(3000); | 2002 base::TimeDelta completion_timeout = base::TimeDelta::FromMilliseconds(3000); |
(...skipping 26 matching lines...) Expand all Loading... |
2029 EXPECT_EQ(expected_video_frames, | 2029 EXPECT_EQ(expected_video_frames, |
2030 manager_.render_stat_[DemuxerStream::VIDEO].num_values()); | 2030 manager_.render_stat_[DemuxerStream::VIDEO].num_values()); |
2031 | 2031 |
2032 // Check that we did not miss audio frames. We expect two postponed frames | 2032 // Check that we did not miss audio frames. We expect two postponed frames |
2033 // that are not reported. | 2033 // that are not reported. |
2034 int expected_audio_frames = GetFrameCount(duration, kAudioFramePeriod, 1) - 2; | 2034 int expected_audio_frames = GetFrameCount(duration, kAudioFramePeriod, 1) - 2; |
2035 EXPECT_EQ(expected_audio_frames, | 2035 EXPECT_EQ(expected_audio_frames, |
2036 manager_.render_stat_[DemuxerStream::AUDIO].num_values()); | 2036 manager_.render_stat_[DemuxerStream::AUDIO].num_values()); |
2037 } | 2037 } |
2038 | 2038 |
2039 TEST_F(MediaCodecPlayerTest, AVSimultaneousConfigChange_2) { | 2039 TEST_F(MediaCodecPlayerTest, DISABLED_AVSimultaneousConfigChange_2) { |
2040 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 2040 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
2041 | 2041 |
2042 // Test that the playback continues if audio and video config changes happen | 2042 // Test that the playback continues if audio and video config changes happen |
2043 // at the same time. Move audio change moment slightly to make it drained | 2043 // at the same time. Move audio change moment slightly to make it drained |
2044 // after video. | 2044 // after video. |
2045 | 2045 |
2046 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(1200); | 2046 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(1200); |
2047 base::TimeDelta config_change_audio = base::TimeDelta::FromMilliseconds(1020); | 2047 base::TimeDelta config_change_audio = base::TimeDelta::FromMilliseconds(1020); |
2048 base::TimeDelta config_change_video = base::TimeDelta::FromMilliseconds(1000); | 2048 base::TimeDelta config_change_video = base::TimeDelta::FromMilliseconds(1000); |
2049 | 2049 |
(...skipping 27 matching lines...) Expand all Loading... |
2077 EXPECT_EQ(expected_video_frames, | 2077 EXPECT_EQ(expected_video_frames, |
2078 manager_.render_stat_[DemuxerStream::VIDEO].num_values()); | 2078 manager_.render_stat_[DemuxerStream::VIDEO].num_values()); |
2079 | 2079 |
2080 // Check that we did not miss audio frames. We expect two postponed frames | 2080 // Check that we did not miss audio frames. We expect two postponed frames |
2081 // that are not reported. | 2081 // that are not reported. |
2082 int expected_audio_frames = GetFrameCount(duration, kAudioFramePeriod, 1) - 2; | 2082 int expected_audio_frames = GetFrameCount(duration, kAudioFramePeriod, 1) - 2; |
2083 EXPECT_EQ(expected_audio_frames, | 2083 EXPECT_EQ(expected_audio_frames, |
2084 manager_.render_stat_[DemuxerStream::AUDIO].num_values()); | 2084 manager_.render_stat_[DemuxerStream::AUDIO].num_values()); |
2085 } | 2085 } |
2086 | 2086 |
2087 TEST_F(MediaCodecPlayerTest, AVAudioEndsAcrossVideoConfigChange) { | 2087 TEST_F(MediaCodecPlayerTest, DISABLED_AVAudioEndsAcrossVideoConfigChange) { |
2088 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 2088 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
2089 | 2089 |
2090 // Test that audio can end while video config change processing. | 2090 // Test that audio can end while video config change processing. |
2091 | 2091 |
2092 base::TimeDelta audio_duration = base::TimeDelta::FromMilliseconds(1000); | 2092 base::TimeDelta audio_duration = base::TimeDelta::FromMilliseconds(1000); |
2093 base::TimeDelta video_duration = base::TimeDelta::FromMilliseconds(1200); | 2093 base::TimeDelta video_duration = base::TimeDelta::FromMilliseconds(1200); |
2094 base::TimeDelta config_change_video = base::TimeDelta::FromMilliseconds(1000); | 2094 base::TimeDelta config_change_video = base::TimeDelta::FromMilliseconds(1000); |
2095 | 2095 |
2096 base::TimeDelta completion_timeout = base::TimeDelta::FromMilliseconds(3000); | 2096 base::TimeDelta completion_timeout = base::TimeDelta::FromMilliseconds(3000); |
2097 | 2097 |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2166 EXPECT_EQ(1, manager_.num_video_codecs_created()); | 2166 EXPECT_EQ(1, manager_.num_video_codecs_created()); |
2167 | 2167 |
2168 // Check that we did not miss audio frames. We expect two postponed frames | 2168 // Check that we did not miss audio frames. We expect two postponed frames |
2169 // that are not reported. | 2169 // that are not reported. |
2170 int expected_audio_frames = | 2170 int expected_audio_frames = |
2171 GetFrameCount(audio_duration, kAudioFramePeriod, 1) - 2; | 2171 GetFrameCount(audio_duration, kAudioFramePeriod, 1) - 2; |
2172 EXPECT_EQ(expected_audio_frames, | 2172 EXPECT_EQ(expected_audio_frames, |
2173 manager_.render_stat_[DemuxerStream::AUDIO].num_values()); | 2173 manager_.render_stat_[DemuxerStream::AUDIO].num_values()); |
2174 } | 2174 } |
2175 | 2175 |
2176 TEST_F(MediaCodecPlayerTest, AVPrerollAcrossVideoConfigChange) { | 2176 TEST_F(MediaCodecPlayerTest, DISABLED_AVPrerollAcrossVideoConfigChange) { |
2177 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 2177 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
2178 | 2178 |
2179 // Test that preroll continues if interrupted by video config change. | 2179 // Test that preroll continues if interrupted by video config change. |
2180 | 2180 |
2181 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(1200); | 2181 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(1200); |
2182 base::TimeDelta seek_position = base::TimeDelta::FromMilliseconds(1000); | 2182 base::TimeDelta seek_position = base::TimeDelta::FromMilliseconds(1000); |
2183 base::TimeDelta config_change_position = | 2183 base::TimeDelta config_change_position = |
2184 base::TimeDelta::FromMilliseconds(800); | 2184 base::TimeDelta::FromMilliseconds(800); |
2185 base::TimeDelta video_preroll_intvl = base::TimeDelta::FromMilliseconds(500); | 2185 base::TimeDelta video_preroll_intvl = base::TimeDelta::FromMilliseconds(500); |
2186 base::TimeDelta preroll_timeout = base::TimeDelta::FromMilliseconds(3000); | 2186 base::TimeDelta preroll_timeout = base::TimeDelta::FromMilliseconds(3000); |
(...skipping 28 matching lines...) Expand all Loading... |
2215 EXPECT_TRUE(AlmostEqual(manager_.FirstFramePTS(DemuxerStream::AUDIO), | 2215 EXPECT_TRUE(AlmostEqual(manager_.FirstFramePTS(DemuxerStream::AUDIO), |
2216 manager_.FirstFramePTS(DemuxerStream::VIDEO), 25)); | 2216 manager_.FirstFramePTS(DemuxerStream::VIDEO), 25)); |
2217 | 2217 |
2218 EXPECT_TRUE(AlmostEqual(manager_.FirstFrameTime(DemuxerStream::AUDIO), | 2218 EXPECT_TRUE(AlmostEqual(manager_.FirstFrameTime(DemuxerStream::AUDIO), |
2219 manager_.FirstFrameTime(DemuxerStream::VIDEO), 50)); | 2219 manager_.FirstFrameTime(DemuxerStream::VIDEO), 50)); |
2220 | 2220 |
2221 // The playback should start at |seek_position| | 2221 // The playback should start at |seek_position| |
2222 EXPECT_TRUE(AlmostEqual(seek_position, manager_.pts_stat_.min(), 25)); | 2222 EXPECT_TRUE(AlmostEqual(seek_position, manager_.pts_stat_.min(), 25)); |
2223 } | 2223 } |
2224 | 2224 |
2225 TEST_F(MediaCodecPlayerTest, AVPrerollAcrossAudioConfigChange) { | 2225 TEST_F(MediaCodecPlayerTest, DISABLED_AVPrerollAcrossAudioConfigChange) { |
2226 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 2226 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
2227 | 2227 |
2228 // Test that preroll continues if interrupted by video config change. | 2228 // Test that preroll continues if interrupted by video config change. |
2229 | 2229 |
2230 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(1200); | 2230 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(1200); |
2231 base::TimeDelta seek_position = base::TimeDelta::FromMilliseconds(1000); | 2231 base::TimeDelta seek_position = base::TimeDelta::FromMilliseconds(1000); |
2232 base::TimeDelta config_change_position = | 2232 base::TimeDelta config_change_position = |
2233 base::TimeDelta::FromMilliseconds(800); | 2233 base::TimeDelta::FromMilliseconds(800); |
2234 base::TimeDelta audio_preroll_intvl = base::TimeDelta::FromMilliseconds(400); | 2234 base::TimeDelta audio_preroll_intvl = base::TimeDelta::FromMilliseconds(400); |
2235 base::TimeDelta preroll_timeout = base::TimeDelta::FromMilliseconds(3000); | 2235 base::TimeDelta preroll_timeout = base::TimeDelta::FromMilliseconds(3000); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2273 // TODO(timav): maybe we should not call the testing callback for | 2273 // TODO(timav): maybe we should not call the testing callback for |
2274 // kRenderAfterPreroll for video (for audio we already do not call). | 2274 // kRenderAfterPreroll for video (for audio we already do not call). |
2275 // EXPECT_TRUE(AlmostEqual(manager_.FirstFrameTime(DemuxerStream::AUDIO), | 2275 // EXPECT_TRUE(AlmostEqual(manager_.FirstFrameTime(DemuxerStream::AUDIO), |
2276 // manager_.FirstFrameTime(DemuxerStream::VIDEO), 50)); | 2276 // manager_.FirstFrameTime(DemuxerStream::VIDEO), 50)); |
2277 | 2277 |
2278 // The playback should start at |seek_position| | 2278 // The playback should start at |seek_position| |
2279 EXPECT_TRUE(AlmostEqual(seek_position, manager_.pts_stat_.min(), 25)); | 2279 EXPECT_TRUE(AlmostEqual(seek_position, manager_.pts_stat_.min(), 25)); |
2280 } | 2280 } |
2281 | 2281 |
2282 } // namespace media | 2282 } // namespace media |
OLD | NEW |