diff options
Diffstat (limited to 'media/base/android/media_source_player_unittest.cc')
-rw-r--r-- | media/base/android/media_source_player_unittest.cc | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/media/base/android/media_source_player_unittest.cc b/media/base/android/media_source_player_unittest.cc index 9c6a062..7324336 100644 --- a/media/base/android/media_source_player_unittest.cc +++ b/media/base/android/media_source_player_unittest.cc @@ -2067,4 +2067,55 @@ TEST_F(MediaSourcePlayerTest, SurfaceChangeClearedEvenIfMediaCryptoAbsent) { EXPECT_FALSE(GetMediaDecoderJob(false)); } +TEST_F(MediaSourcePlayerTest, CurrentTimeUpdatedWhileDecoderStarved) { + SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); + + // Test that current time is updated while decoder is starved. + StartAudioDecoderJob(true); + for (int i = 0; i < 3; ++i) { + player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckForAudio(i)); + WaitForAudioDecodeDone(); + } + base::TimeDelta current_time = player_.GetCurrentTime(); + + // Trigger starvation while the decoder is decoding. + player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckForAudio(3)); + TriggerPlayerStarvation(); + WaitForAudioDecodeDone(); + + // Current time should be updated. + EXPECT_LT(current_time.InMillisecondsF(), + player_.GetCurrentTime().InMillisecondsF()); +} + +TEST_F(MediaSourcePlayerTest, CurrentTimeKeepsIncreasingAfterConfigChange) { + SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); + + // Test current time keep on increasing after audio config change. + // Test that current time is updated while decoder is starved. + StartAudioDecoderJob(true); + + for (int i = 0; i < 4; ++i) { + player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckForAudio(i)); + WaitForAudioDecodeDone(); + } + base::TimeDelta current_time = player_.GetCurrentTime(); + EXPECT_LT(0.0, current_time.InMillisecondsF()); + + DemuxerData data = CreateReadFromDemuxerAckWithConfigChanged(true, 0); + player_.OnDemuxerDataAvailable(data); + WaitForAudioDecodeDone(); + + // Simulate arrival of new configs. + player_.OnDemuxerConfigsAvailable(CreateAudioDemuxerConfigs(kCodecVorbis)); + for (int i = 0; i < 4; ++i) { + player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckForAudio(i)); + WaitForAudioDecodeDone(); + base::TimeDelta new_current_time = player_.GetCurrentTime(); + EXPECT_LE(current_time.InMillisecondsF(), + new_current_time.InMillisecondsF()); + current_time = new_current_time; + } +} + } // namespace media |