| 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 "media/base/android/media_source_player.h" | 5 #include "media/base/android/media_source_player.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <string> | 9 #include <string> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 480 | 480 |
| 481 // Wait for the decode job to finish so we can process the seek request. | 481 // Wait for the decode job to finish so we can process the seek request. |
| 482 WaitForDecodeDone(is_audio, !is_audio); | 482 WaitForDecodeDone(is_audio, !is_audio); |
| 483 | 483 |
| 484 // Verify that the seek is requested. | 484 // Verify that the seek is requested. |
| 485 EXPECT_EQ(original_num_seeks + 1, demuxer_->num_seek_requests()); | 485 EXPECT_EQ(original_num_seeks + 1, demuxer_->num_seek_requests()); |
| 486 | 486 |
| 487 // Send back the seek done notification. This should trigger the player to | 487 // Send back the seek done notification. This should trigger the player to |
| 488 // call OnReadFromDemuxer() again. | 488 // call OnReadFromDemuxer() again. |
| 489 EXPECT_EQ(original_num_data_requests, demuxer_->num_data_requests()); | 489 EXPECT_EQ(original_num_data_requests, demuxer_->num_data_requests()); |
| 490 player_.OnDemuxerSeekDone(kNoTimestamp()); | 490 player_.OnDemuxerSeekDone(kNoTimestamp); |
| 491 EXPECT_EQ(original_num_data_requests + 1, demuxer_->num_data_requests()); | 491 EXPECT_EQ(original_num_data_requests + 1, demuxer_->num_data_requests()); |
| 492 | 492 |
| 493 // No other seek should have been requested. | 493 // No other seek should have been requested. |
| 494 EXPECT_EQ(original_num_seeks + 1, demuxer_->num_seek_requests()); | 494 EXPECT_EQ(original_num_seeks + 1, demuxer_->num_seek_requests()); |
| 495 } | 495 } |
| 496 | 496 |
| 497 // Preroll the decoder job to |target_timestamp|. The first access unit | 497 // Preroll the decoder job to |target_timestamp|. The first access unit |
| 498 // to decode will have a timestamp equal to |start_timestamp|. | 498 // to decode will have a timestamp equal to |start_timestamp|. |
| 499 // |is_clock_manager| indicates whether the decoder serves as the clock | 499 // |is_clock_manager| indicates whether the decoder serves as the clock |
| 500 // manager for the player. | 500 // manager for the player. |
| (...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 761 EXPECT_EQ(original_num_data_requests, demuxer_->num_data_requests()); | 761 EXPECT_EQ(original_num_data_requests, demuxer_->num_data_requests()); |
| 762 } | 762 } |
| 763 | 763 |
| 764 void VerifyCompletedPlaybackResumesOnSeekPlusStart(bool have_audio, | 764 void VerifyCompletedPlaybackResumesOnSeekPlusStart(bool have_audio, |
| 765 bool have_video) { | 765 bool have_video) { |
| 766 DCHECK(have_audio || have_video); | 766 DCHECK(have_audio || have_video); |
| 767 | 767 |
| 768 EXPECT_TRUE(manager_.playback_completed()); | 768 EXPECT_TRUE(manager_.playback_completed()); |
| 769 | 769 |
| 770 player_.SeekTo(base::TimeDelta()); | 770 player_.SeekTo(base::TimeDelta()); |
| 771 player_.OnDemuxerSeekDone(kNoTimestamp()); | 771 player_.OnDemuxerSeekDone(kNoTimestamp); |
| 772 Resume(have_audio, have_video); | 772 Resume(have_audio, have_video); |
| 773 } | 773 } |
| 774 | 774 |
| 775 // Starts the appropriate decoder jobs according to |have_audio| and | 775 // Starts the appropriate decoder jobs according to |have_audio| and |
| 776 // |have_video|. Then starts seek during decode of EOS or non-EOS according to | 776 // |have_video|. Then starts seek during decode of EOS or non-EOS according to |
| 777 // |eos_audio| and |eos_video|. Simulates seek completion and verifies that | 777 // |eos_audio| and |eos_video|. Simulates seek completion and verifies that |
| 778 // playback never completed. |eos_{audio,video}| is ignored if the | 778 // playback never completed. |eos_{audio,video}| is ignored if the |
| 779 // corresponding |have_{audio,video}| is false. | 779 // corresponding |have_{audio,video}| is false. |
| 780 void VerifySeekDuringEOSDecodePreventsPlaybackCompletion(bool have_audio, | 780 void VerifySeekDuringEOSDecodePreventsPlaybackCompletion(bool have_audio, |
| 781 bool have_video, | 781 bool have_video, |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 814 player_.OnDemuxerDataAvailable(CreateEOSAck(false)); | 814 player_.OnDemuxerDataAvailable(CreateEOSAck(false)); |
| 815 else | 815 else |
| 816 player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckForVideo(false)); | 816 player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckForVideo(false)); |
| 817 } | 817 } |
| 818 | 818 |
| 819 player_.SeekTo(base::TimeDelta()); | 819 player_.SeekTo(base::TimeDelta()); |
| 820 EXPECT_EQ(0, demuxer_->num_seek_requests()); | 820 EXPECT_EQ(0, demuxer_->num_seek_requests()); |
| 821 WaitForDecodeDone(have_audio, have_video); | 821 WaitForDecodeDone(have_audio, have_video); |
| 822 EXPECT_EQ(1, demuxer_->num_seek_requests()); | 822 EXPECT_EQ(1, demuxer_->num_seek_requests()); |
| 823 | 823 |
| 824 player_.OnDemuxerSeekDone(kNoTimestamp()); | 824 player_.OnDemuxerSeekDone(kNoTimestamp); |
| 825 EXPECT_FALSE(manager_.playback_completed()); | 825 EXPECT_FALSE(manager_.playback_completed()); |
| 826 } | 826 } |
| 827 | 827 |
| 828 base::TimeTicks StartTimeTicks() { | 828 base::TimeTicks StartTimeTicks() { |
| 829 return player_.start_time_ticks_; | 829 return player_.start_time_ticks_; |
| 830 } | 830 } |
| 831 | 831 |
| 832 bool IsRequestingDemuxerData(bool is_audio) { | 832 bool IsRequestingDemuxerData(bool is_audio) { |
| 833 return GetMediaDecoderJob(is_audio)->is_requesting_demuxer_data_; | 833 return GetMediaDecoderJob(is_audio)->is_requesting_demuxer_data_; |
| 834 } | 834 } |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 954 // Initiate a seek. Skip requesting element seek of renderer. | 954 // Initiate a seek. Skip requesting element seek of renderer. |
| 955 // Instead behave as if the renderer has asked us to seek. | 955 // Instead behave as if the renderer has asked us to seek. |
| 956 player_.SeekTo(base::TimeDelta()); | 956 player_.SeekTo(base::TimeDelta()); |
| 957 EXPECT_EQ(1, demuxer_->num_seek_requests()); | 957 EXPECT_EQ(1, demuxer_->num_seek_requests()); |
| 958 | 958 |
| 959 CreateNextTextureAndSetVideoSurface(); | 959 CreateNextTextureAndSetVideoSurface(); |
| 960 EXPECT_EQ(1, demuxer_->num_seek_requests()); | 960 EXPECT_EQ(1, demuxer_->num_seek_requests()); |
| 961 player_.Start(); | 961 player_.Start(); |
| 962 | 962 |
| 963 // Send the seek done notification. The player should start requesting data. | 963 // Send the seek done notification. The player should start requesting data. |
| 964 player_.OnDemuxerSeekDone(kNoTimestamp()); | 964 player_.OnDemuxerSeekDone(kNoTimestamp); |
| 965 EXPECT_FALSE(GetMediaCodecBridge(false)); | 965 EXPECT_FALSE(GetMediaCodecBridge(false)); |
| 966 EXPECT_EQ(1, demuxer_->num_data_requests()); | 966 EXPECT_EQ(1, demuxer_->num_data_requests()); |
| 967 player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckForVideo(false)); | 967 player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckForVideo(false)); |
| 968 EXPECT_TRUE(GetMediaCodecBridge(false)); | 968 EXPECT_TRUE(GetMediaCodecBridge(false)); |
| 969 | 969 |
| 970 // Reconfirm exactly 1 seek request has been made of demuxer, and that it | 970 // Reconfirm exactly 1 seek request has been made of demuxer, and that it |
| 971 // was not a browser seek request. | 971 // was not a browser seek request. |
| 972 EXPECT_EQ(1, demuxer_->num_seek_requests()); | 972 EXPECT_EQ(1, demuxer_->num_seek_requests()); |
| 973 EXPECT_EQ(0, demuxer_->num_browser_seek_requests()); | 973 EXPECT_EQ(0, demuxer_->num_browser_seek_requests()); |
| 974 WaitForVideoDecodeDone(); | 974 WaitForVideoDecodeDone(); |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1084 | 1084 |
| 1085 // Initiate a seek. Skip requesting element seek of renderer. | 1085 // Initiate a seek. Skip requesting element seek of renderer. |
| 1086 // Instead behave as if the renderer has asked us to seek. | 1086 // Instead behave as if the renderer has asked us to seek. |
| 1087 player_.SeekTo(base::TimeDelta()); | 1087 player_.SeekTo(base::TimeDelta()); |
| 1088 EXPECT_EQ(1, demuxer_->num_seek_requests()); | 1088 EXPECT_EQ(1, demuxer_->num_seek_requests()); |
| 1089 | 1089 |
| 1090 player_.Start(); | 1090 player_.Start(); |
| 1091 EXPECT_EQ(0, demuxer_->num_data_requests()); | 1091 EXPECT_EQ(0, demuxer_->num_data_requests()); |
| 1092 | 1092 |
| 1093 // Sending back the seek done notification. | 1093 // Sending back the seek done notification. |
| 1094 player_.OnDemuxerSeekDone(kNoTimestamp()); | 1094 player_.OnDemuxerSeekDone(kNoTimestamp); |
| 1095 EXPECT_FALSE(GetMediaCodecBridge(true)); | 1095 EXPECT_FALSE(GetMediaCodecBridge(true)); |
| 1096 EXPECT_EQ(1, demuxer_->num_data_requests()); | 1096 EXPECT_EQ(1, demuxer_->num_data_requests()); |
| 1097 | 1097 |
| 1098 // Reconfirm exactly 1 seek request has been made of demuxer. | 1098 // Reconfirm exactly 1 seek request has been made of demuxer. |
| 1099 EXPECT_EQ(1, demuxer_->num_seek_requests()); | 1099 EXPECT_EQ(1, demuxer_->num_seek_requests()); |
| 1100 | 1100 |
| 1101 // Decoder is created after data is received. | 1101 // Decoder is created after data is received. |
| 1102 player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckForAudio(0)); | 1102 player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckForAudio(0)); |
| 1103 EXPECT_TRUE(GetMediaCodecBridge(true)); | 1103 EXPECT_TRUE(GetMediaCodecBridge(true)); |
| 1104 } | 1104 } |
| 1105 | 1105 |
| 1106 TEST_F(MediaSourcePlayerTest, VideoOnlyStartAfterSeekFinish) { | 1106 TEST_F(MediaSourcePlayerTest, VideoOnlyStartAfterSeekFinish) { |
| 1107 // crbug.com/604602 and crbug.com/597836 | 1107 // crbug.com/604602 and crbug.com/597836 |
| 1108 SKIP_TEST_IF_VP8_DECODER_IS_NOT_SUPPORTED(); | 1108 SKIP_TEST_IF_VP8_DECODER_IS_NOT_SUPPORTED(); |
| 1109 | 1109 |
| 1110 // Test video decoder job will not start until pending seek event is handled. | 1110 // Test video decoder job will not start until pending seek event is handled. |
| 1111 CreateNextTextureAndSetVideoSurface(); | 1111 CreateNextTextureAndSetVideoSurface(); |
| 1112 DemuxerConfigs configs = CreateVideoDemuxerConfigs(false); | 1112 DemuxerConfigs configs = CreateVideoDemuxerConfigs(false); |
| 1113 player_.OnDemuxerConfigsAvailable(configs); | 1113 player_.OnDemuxerConfigsAvailable(configs); |
| 1114 | 1114 |
| 1115 // Initiate a seek. Skip requesting element seek of renderer. | 1115 // Initiate a seek. Skip requesting element seek of renderer. |
| 1116 // Instead behave as if the renderer has asked us to seek. | 1116 // Instead behave as if the renderer has asked us to seek. |
| 1117 player_.SeekTo(base::TimeDelta()); | 1117 player_.SeekTo(base::TimeDelta()); |
| 1118 EXPECT_EQ(1, demuxer_->num_seek_requests()); | 1118 EXPECT_EQ(1, demuxer_->num_seek_requests()); |
| 1119 | 1119 |
| 1120 player_.Start(); | 1120 player_.Start(); |
| 1121 EXPECT_EQ(0, demuxer_->num_data_requests()); | 1121 EXPECT_EQ(0, demuxer_->num_data_requests()); |
| 1122 | 1122 |
| 1123 // Sending back the seek done notification. | 1123 // Sending back the seek done notification. |
| 1124 player_.OnDemuxerSeekDone(kNoTimestamp()); | 1124 player_.OnDemuxerSeekDone(kNoTimestamp); |
| 1125 EXPECT_FALSE(GetMediaCodecBridge(false)); | 1125 EXPECT_FALSE(GetMediaCodecBridge(false)); |
| 1126 EXPECT_EQ(1, demuxer_->num_data_requests()); | 1126 EXPECT_EQ(1, demuxer_->num_data_requests()); |
| 1127 | 1127 |
| 1128 // Reconfirm exactly 1 seek request has been made of demuxer. | 1128 // Reconfirm exactly 1 seek request has been made of demuxer. |
| 1129 EXPECT_EQ(1, demuxer_->num_seek_requests()); | 1129 EXPECT_EQ(1, demuxer_->num_seek_requests()); |
| 1130 | 1130 |
| 1131 // Decoder is created after data is received. | 1131 // Decoder is created after data is received. |
| 1132 player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckForVideo(false)); | 1132 player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckForVideo(false)); |
| 1133 EXPECT_TRUE(GetMediaCodecBridge(false)); | 1133 EXPECT_TRUE(GetMediaCodecBridge(false)); |
| 1134 WaitForVideoDecodeDone(); | 1134 WaitForVideoDecodeDone(); |
| (...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1496 // still has no video codec configured, and has not requested any | 1496 // still has no video codec configured, and has not requested any |
| 1497 // further data since the surface change event became pending in | 1497 // further data since the surface change event became pending in |
| 1498 // BrowserSeekPlayer(). | 1498 // BrowserSeekPlayer(). |
| 1499 EXPECT_EQ(1, demuxer_->num_seek_requests()); | 1499 EXPECT_EQ(1, demuxer_->num_seek_requests()); |
| 1500 player_.OnDemuxerSeekDone(base::TimeDelta()); | 1500 player_.OnDemuxerSeekDone(base::TimeDelta()); |
| 1501 EXPECT_EQ(2, demuxer_->num_seek_requests()); | 1501 EXPECT_EQ(2, demuxer_->num_seek_requests()); |
| 1502 EXPECT_EQ(1, demuxer_->num_browser_seek_requests()); | 1502 EXPECT_EQ(1, demuxer_->num_browser_seek_requests()); |
| 1503 | 1503 |
| 1504 // Simulate regular seek is done and confirm player requests more data for | 1504 // Simulate regular seek is done and confirm player requests more data for |
| 1505 // new video codec. | 1505 // new video codec. |
| 1506 player_.OnDemuxerSeekDone(kNoTimestamp()); | 1506 player_.OnDemuxerSeekDone(kNoTimestamp); |
| 1507 EXPECT_FALSE(GetMediaCodecBridge(false)); | 1507 EXPECT_FALSE(GetMediaCodecBridge(false)); |
| 1508 EXPECT_EQ(3, demuxer_->num_data_requests()); | 1508 EXPECT_EQ(3, demuxer_->num_data_requests()); |
| 1509 EXPECT_EQ(2, demuxer_->num_seek_requests()); | 1509 EXPECT_EQ(2, demuxer_->num_seek_requests()); |
| 1510 player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckForVideo(false)); | 1510 player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckForVideo(false)); |
| 1511 EXPECT_TRUE(GetMediaCodecBridge(false)); | 1511 EXPECT_TRUE(GetMediaCodecBridge(false)); |
| 1512 WaitForVideoDecodeDone(); | 1512 WaitForVideoDecodeDone(); |
| 1513 } | 1513 } |
| 1514 | 1514 |
| 1515 TEST_F(MediaSourcePlayerTest, BrowserSeek_InitialReleaseAndStart) { | 1515 TEST_F(MediaSourcePlayerTest, BrowserSeek_InitialReleaseAndStart) { |
| 1516 // crbug.com/604602 and crbug.com/597836 | 1516 // crbug.com/604602 and crbug.com/597836 |
| (...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1749 | 1749 |
| 1750 // Initiate a seek. | 1750 // Initiate a seek. |
| 1751 base::TimeDelta seek_position = base::TimeDelta::FromMilliseconds(100); | 1751 base::TimeDelta seek_position = base::TimeDelta::FromMilliseconds(100); |
| 1752 player_.SeekTo(seek_position); | 1752 player_.SeekTo(seek_position); |
| 1753 player_.OnDemuxerDataAvailable(CreateAbortedAck(true)); | 1753 player_.OnDemuxerDataAvailable(CreateAbortedAck(true)); |
| 1754 player_.OnDemuxerDataAvailable(CreateAbortedAck(false)); | 1754 player_.OnDemuxerDataAvailable(CreateAbortedAck(false)); |
| 1755 WaitForDecodeDone(true, true); | 1755 WaitForDecodeDone(true, true); |
| 1756 | 1756 |
| 1757 // Verify that the seek is requested. | 1757 // Verify that the seek is requested. |
| 1758 EXPECT_EQ(1, demuxer_->num_seek_requests()); | 1758 EXPECT_EQ(1, demuxer_->num_seek_requests()); |
| 1759 player_.OnDemuxerSeekDone(kNoTimestamp()); | 1759 player_.OnDemuxerSeekDone(kNoTimestamp); |
| 1760 EXPECT_EQ(4, demuxer_->num_data_requests()); | 1760 EXPECT_EQ(4, demuxer_->num_data_requests()); |
| 1761 EXPECT_EQ(player_.GetCurrentTime().InMillisecondsF(), 100.0); | 1761 EXPECT_EQ(player_.GetCurrentTime().InMillisecondsF(), 100.0); |
| 1762 EXPECT_EQ(GetPrerollTimestamp().InMillisecondsF(), 100.0); | 1762 EXPECT_EQ(GetPrerollTimestamp().InMillisecondsF(), 100.0); |
| 1763 | 1763 |
| 1764 // Send both audio and video data to finish prefetching. | 1764 // Send both audio and video data to finish prefetching. |
| 1765 base::TimeDelta seek_ack_position = base::TimeDelta::FromMilliseconds(70); | 1765 base::TimeDelta seek_ack_position = base::TimeDelta::FromMilliseconds(70); |
| 1766 DemuxerData audio_data = CreateReadFromDemuxerAckForAudio(0); | 1766 DemuxerData audio_data = CreateReadFromDemuxerAckForAudio(0); |
| 1767 audio_data.access_units[0].timestamp = seek_ack_position; | 1767 audio_data.access_units[0].timestamp = seek_ack_position; |
| 1768 DemuxerData video_data = CreateReadFromDemuxerAckForVideo(false); | 1768 DemuxerData video_data = CreateReadFromDemuxerAckForVideo(false); |
| 1769 video_data.access_units[0].timestamp = seek_ack_position; | 1769 video_data.access_units[0].timestamp = seek_ack_position; |
| (...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1975 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 1975 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
| 1976 | 1976 |
| 1977 // Test if a decoder is being drained while receiving a seek request, draining | 1977 // Test if a decoder is being drained while receiving a seek request, draining |
| 1978 // is canceled. | 1978 // is canceled. |
| 1979 SendConfigChangeToDecoder(true, false, 0, false); | 1979 SendConfigChangeToDecoder(true, false, 0, false); |
| 1980 EXPECT_TRUE(IsDrainingDecoder(true)); | 1980 EXPECT_TRUE(IsDrainingDecoder(true)); |
| 1981 | 1981 |
| 1982 player_.SeekTo(base::TimeDelta::FromMilliseconds(100)); | 1982 player_.SeekTo(base::TimeDelta::FromMilliseconds(100)); |
| 1983 WaitForAudioDecodeDone(); | 1983 WaitForAudioDecodeDone(); |
| 1984 EXPECT_FALSE(IsDrainingDecoder(true)); | 1984 EXPECT_FALSE(IsDrainingDecoder(true)); |
| 1985 player_.OnDemuxerSeekDone(kNoTimestamp()); | 1985 player_.OnDemuxerSeekDone(kNoTimestamp); |
| 1986 | 1986 |
| 1987 EXPECT_EQ(1, demuxer_->num_seek_requests()); | 1987 EXPECT_EQ(1, demuxer_->num_seek_requests()); |
| 1988 EXPECT_EQ(4, demuxer_->num_data_requests()); | 1988 EXPECT_EQ(4, demuxer_->num_data_requests()); |
| 1989 } | 1989 } |
| 1990 | 1990 |
| 1991 TEST_F(MediaSourcePlayerTest, DecoderDrainInterruptedByRelease) { | 1991 TEST_F(MediaSourcePlayerTest, DecoderDrainInterruptedByRelease) { |
| 1992 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 1992 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
| 1993 | 1993 |
| 1994 // Test if a decoder is being drained while receiving a release request, | 1994 // Test if a decoder is being drained while receiving a release request, |
| 1995 // draining is canceled. | 1995 // draining is canceled. |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2111 // has not yet been sent, then the seek request is sent after Release(). Also, | 2111 // has not yet been sent, then the seek request is sent after Release(). Also, |
| 2112 // test if OnDemuxerSeekDone() occurs prior to next Start(), then the player | 2112 // test if OnDemuxerSeekDone() occurs prior to next Start(), then the player |
| 2113 // will resume correct post-seek preroll upon Start(). | 2113 // will resume correct post-seek preroll upon Start(). |
| 2114 StartAudioDecoderJobAndSeekToWhileDecoding( | 2114 StartAudioDecoderJobAndSeekToWhileDecoding( |
| 2115 base::TimeDelta::FromMilliseconds(100)); | 2115 base::TimeDelta::FromMilliseconds(100)); |
| 2116 ReleasePlayer(); | 2116 ReleasePlayer(); |
| 2117 EXPECT_EQ(0, demuxer_->num_seek_requests()); | 2117 EXPECT_EQ(0, demuxer_->num_seek_requests()); |
| 2118 WaitForAudioDecodeDone(); | 2118 WaitForAudioDecodeDone(); |
| 2119 EXPECT_EQ(1, demuxer_->num_seek_requests()); | 2119 EXPECT_EQ(1, demuxer_->num_seek_requests()); |
| 2120 | 2120 |
| 2121 player_.OnDemuxerSeekDone(kNoTimestamp()); | 2121 player_.OnDemuxerSeekDone(kNoTimestamp); |
| 2122 EXPECT_EQ(100.0, GetPrerollTimestamp().InMillisecondsF()); | 2122 EXPECT_EQ(100.0, GetPrerollTimestamp().InMillisecondsF()); |
| 2123 EXPECT_FALSE(GetMediaCodecBridge(true)); | 2123 EXPECT_FALSE(GetMediaCodecBridge(true)); |
| 2124 EXPECT_FALSE(player_.IsPlaying()); | 2124 EXPECT_FALSE(player_.IsPlaying()); |
| 2125 | 2125 |
| 2126 // Player should begin prefetch and resume preroll upon Start(). | 2126 // Player should begin prefetch and resume preroll upon Start(). |
| 2127 EXPECT_EQ(2, demuxer_->num_data_requests()); | 2127 EXPECT_EQ(2, demuxer_->num_data_requests()); |
| 2128 Resume(true, false); | 2128 Resume(true, false); |
| 2129 EXPECT_TRUE(IsPrerolling(true)); | 2129 EXPECT_TRUE(IsPrerolling(true)); |
| 2130 EXPECT_EQ(100.0, GetPrerollTimestamp().InMillisecondsF()); | 2130 EXPECT_EQ(100.0, GetPrerollTimestamp().InMillisecondsF()); |
| 2131 | 2131 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 2146 ReleasePlayer(); | 2146 ReleasePlayer(); |
| 2147 EXPECT_EQ(0, demuxer_->num_seek_requests()); | 2147 EXPECT_EQ(0, demuxer_->num_seek_requests()); |
| 2148 | 2148 |
| 2149 // Player should not prefetch upon Start() nor create the media codec bridge, | 2149 // Player should not prefetch upon Start() nor create the media codec bridge, |
| 2150 // due to awaiting DemuxerSeekDone. | 2150 // due to awaiting DemuxerSeekDone. |
| 2151 EXPECT_EQ(2, demuxer_->num_data_requests()); | 2151 EXPECT_EQ(2, demuxer_->num_data_requests()); |
| 2152 Resume(false, false); | 2152 Resume(false, false); |
| 2153 | 2153 |
| 2154 WaitForAudioDecodeDone(); | 2154 WaitForAudioDecodeDone(); |
| 2155 EXPECT_EQ(1, demuxer_->num_seek_requests()); | 2155 EXPECT_EQ(1, demuxer_->num_seek_requests()); |
| 2156 player_.OnDemuxerSeekDone(kNoTimestamp()); | 2156 player_.OnDemuxerSeekDone(kNoTimestamp); |
| 2157 EXPECT_TRUE(GetMediaDecoderJob(true)); | 2157 EXPECT_TRUE(GetMediaDecoderJob(true)); |
| 2158 EXPECT_TRUE(IsPrerolling(true)); | 2158 EXPECT_TRUE(IsPrerolling(true)); |
| 2159 EXPECT_EQ(100.0, GetPrerollTimestamp().InMillisecondsF()); | 2159 EXPECT_EQ(100.0, GetPrerollTimestamp().InMillisecondsF()); |
| 2160 EXPECT_EQ(3, demuxer_->num_data_requests()); | 2160 EXPECT_EQ(3, demuxer_->num_data_requests()); |
| 2161 | 2161 |
| 2162 // No further seek should have been requested since Release(), above. | 2162 // No further seek should have been requested since Release(), above. |
| 2163 EXPECT_EQ(1, demuxer_->num_seek_requests()); | 2163 EXPECT_EQ(1, demuxer_->num_seek_requests()); |
| 2164 } | 2164 } |
| 2165 | 2165 |
| 2166 TEST_F(MediaSourcePlayerTest, SeekToThenDemuxerSeekThenReleaseThenSeekDone) { | 2166 TEST_F(MediaSourcePlayerTest, SeekToThenDemuxerSeekThenReleaseThenSeekDone) { |
| 2167 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 2167 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
| 2168 | 2168 |
| 2169 // Test if Release() occurs after a SeekTo()'s subsequent DemuxerSeek IPC | 2169 // Test if Release() occurs after a SeekTo()'s subsequent DemuxerSeek IPC |
| 2170 // request and OnDemuxerSeekDone() arrives prior to the next Start(), then the | 2170 // request and OnDemuxerSeekDone() arrives prior to the next Start(), then the |
| 2171 // player will resume correct post-seek preroll upon Start(). | 2171 // player will resume correct post-seek preroll upon Start(). |
| 2172 StartAudioDecoderJobAndSeekToWhileDecoding( | 2172 StartAudioDecoderJobAndSeekToWhileDecoding( |
| 2173 base::TimeDelta::FromMilliseconds(100)); | 2173 base::TimeDelta::FromMilliseconds(100)); |
| 2174 WaitForAudioDecodeDone(); | 2174 WaitForAudioDecodeDone(); |
| 2175 EXPECT_EQ(1, demuxer_->num_seek_requests()); | 2175 EXPECT_EQ(1, demuxer_->num_seek_requests()); |
| 2176 | 2176 |
| 2177 ReleasePlayer(); | 2177 ReleasePlayer(); |
| 2178 player_.OnDemuxerSeekDone(kNoTimestamp()); | 2178 player_.OnDemuxerSeekDone(kNoTimestamp); |
| 2179 EXPECT_FALSE(player_.IsPlaying()); | 2179 EXPECT_FALSE(player_.IsPlaying()); |
| 2180 EXPECT_FALSE(GetMediaCodecBridge(true)); | 2180 EXPECT_FALSE(GetMediaCodecBridge(true)); |
| 2181 EXPECT_EQ(100.0, GetPrerollTimestamp().InMillisecondsF()); | 2181 EXPECT_EQ(100.0, GetPrerollTimestamp().InMillisecondsF()); |
| 2182 | 2182 |
| 2183 // Player should begin prefetch and resume preroll upon Start(). | 2183 // Player should begin prefetch and resume preroll upon Start(). |
| 2184 EXPECT_EQ(2, demuxer_->num_data_requests()); | 2184 EXPECT_EQ(2, demuxer_->num_data_requests()); |
| 2185 Resume(true, false); | 2185 Resume(true, false); |
| 2186 EXPECT_TRUE(IsPrerolling(true)); | 2186 EXPECT_TRUE(IsPrerolling(true)); |
| 2187 EXPECT_EQ(100.0, GetPrerollTimestamp().InMillisecondsF()); | 2187 EXPECT_EQ(100.0, GetPrerollTimestamp().InMillisecondsF()); |
| 2188 | 2188 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 2199 // correct post-seek preroll after) OnDemuxerSeekDone(). | 2199 // correct post-seek preroll after) OnDemuxerSeekDone(). |
| 2200 StartAudioDecoderJobAndSeekToWhileDecoding( | 2200 StartAudioDecoderJobAndSeekToWhileDecoding( |
| 2201 base::TimeDelta::FromMilliseconds(100)); | 2201 base::TimeDelta::FromMilliseconds(100)); |
| 2202 WaitForAudioDecodeDone(); | 2202 WaitForAudioDecodeDone(); |
| 2203 EXPECT_EQ(1, demuxer_->num_seek_requests()); | 2203 EXPECT_EQ(1, demuxer_->num_seek_requests()); |
| 2204 | 2204 |
| 2205 ReleasePlayer(); | 2205 ReleasePlayer(); |
| 2206 EXPECT_EQ(2, demuxer_->num_data_requests()); | 2206 EXPECT_EQ(2, demuxer_->num_data_requests()); |
| 2207 Resume(false, false); | 2207 Resume(false, false); |
| 2208 | 2208 |
| 2209 player_.OnDemuxerSeekDone(kNoTimestamp()); | 2209 player_.OnDemuxerSeekDone(kNoTimestamp); |
| 2210 EXPECT_FALSE(GetMediaCodecBridge(true)); | 2210 EXPECT_FALSE(GetMediaCodecBridge(true)); |
| 2211 EXPECT_TRUE(IsPrerolling(true)); | 2211 EXPECT_TRUE(IsPrerolling(true)); |
| 2212 EXPECT_EQ(100.0, GetPrerollTimestamp().InMillisecondsF()); | 2212 EXPECT_EQ(100.0, GetPrerollTimestamp().InMillisecondsF()); |
| 2213 EXPECT_EQ(3, demuxer_->num_data_requests()); | 2213 EXPECT_EQ(3, demuxer_->num_data_requests()); |
| 2214 | 2214 |
| 2215 // No further seek should have been requested since before Release(), above. | 2215 // No further seek should have been requested since before Release(), above. |
| 2216 EXPECT_EQ(1, demuxer_->num_seek_requests()); | 2216 EXPECT_EQ(1, demuxer_->num_seek_requests()); |
| 2217 } | 2217 } |
| 2218 | 2218 |
| 2219 TEST_F(MediaSourcePlayerTest, ConfigChangedThenReleaseThenStart) { | 2219 TEST_F(MediaSourcePlayerTest, ConfigChangedThenReleaseThenStart) { |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2418 | 2418 |
| 2419 EXPECT_EQ(demuxer_->num_data_requests(), 0); | 2419 EXPECT_EQ(demuxer_->num_data_requests(), 0); |
| 2420 player_.OnDemuxerConfigsAvailable(CreateDemuxerConfigs(true, true)); | 2420 player_.OnDemuxerConfigsAvailable(CreateDemuxerConfigs(true, true)); |
| 2421 | 2421 |
| 2422 manager_.set_allow_play(true); | 2422 manager_.set_allow_play(true); |
| 2423 player_.Start(); | 2423 player_.Start(); |
| 2424 EXPECT_TRUE(player_.IsPlaying()); | 2424 EXPECT_TRUE(player_.IsPlaying()); |
| 2425 } | 2425 } |
| 2426 | 2426 |
| 2427 } // namespace media | 2427 } // namespace media |
| OLD | NEW |