Index: media/base/android/media_source_player_unittest.cc |
diff --git a/media/base/android/media_source_player_unittest.cc b/media/base/android/media_source_player_unittest.cc |
index e329ac6eee6dc529fc3f4f6f46c40146036f6f21..720d97c3e80852b14648a3eddb9916defa96ee1e 100644 |
--- a/media/base/android/media_source_player_unittest.cc |
+++ b/media/base/android/media_source_player_unittest.cc |
@@ -1207,6 +1207,45 @@ TEST_F(MediaSourcePlayerTest, PrerollContinuesAcrossConfigChange) { |
EXPECT_FALSE(IsPrerolling(true)); |
} |
+TEST_F(MediaSourcePlayerTest, SimultaneousAudioVideoConfigChange) { |
+ SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
+ |
+ // Test that the player allows simultaneous audio and video config change, |
+ // such as might occur during OnPrefetchDone() if next access unit for both |
+ // audio and video jobs is |kConfigChanged|. |
+ Start(CreateAudioVideoDemuxerConfigs()); |
+ CreateNextTextureAndSetVideoSurface(); |
+ MediaDecoderJob* first_audio_job = GetMediaDecoderJob(true); |
+ MediaDecoderJob* first_video_job = GetMediaDecoderJob(false); |
+ EXPECT_TRUE(first_audio_job && first_video_job); |
+ |
+ // Simulate audio |kConfigChanged| prefetched as standalone access unit. |
+ player_.OnDemuxerDataAvailable( |
+ CreateReadFromDemuxerAckWithConfigChanged(true, 0)); |
+ EXPECT_EQ(0, demuxer_->num_config_requests()); // No OnPrefetchDone() yet. |
+ |
+ // Simulate video |kConfigChanged| prefetched as standalone access unit. |
+ player_.OnDemuxerDataAvailable( |
+ CreateReadFromDemuxerAckWithConfigChanged(false, 0)); |
+ EXPECT_EQ(1, demuxer_->num_config_requests()); // OnPrefetchDone() occurred. |
+ EXPECT_EQ(2, demuxer_->num_data_requests()); |
+ |
+ // No job re-creation should occur until the requested configs arrive. |
+ EXPECT_EQ(first_audio_job, GetMediaDecoderJob(true)); |
+ EXPECT_EQ(first_video_job, GetMediaDecoderJob(false)); |
+ |
+ player_.OnDemuxerConfigsAvailable(CreateAudioVideoDemuxerConfigs()); |
+ EXPECT_EQ(4, demuxer_->num_data_requests()); |
+ MediaDecoderJob* second_audio_job = GetMediaDecoderJob(true); |
+ MediaDecoderJob* second_video_job = GetMediaDecoderJob(false); |
+ EXPECT_NE(first_audio_job, second_audio_job); |
+ EXPECT_NE(first_video_job, second_video_job); |
+ EXPECT_TRUE(second_audio_job && second_video_job); |
+ |
+ // Confirm no further demuxer configs requested. |
+ EXPECT_EQ(1, demuxer_->num_config_requests()); |
+} |
+ |
TEST_F(MediaSourcePlayerTest, DemuxerConfigRequestedIfInPrefetchUnit0) { |
SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |