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 |