Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(286)

Side by Side Diff: media/base/android/media_source_player_unittest.cc

Issue 311313006: Fix some MSE tests on devices that don't support VP9 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: nits Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <string> 5 #include <string>
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/strings/stringprintf.h" 10 #include "base/strings/stringprintf.h"
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 EXPECT_EQ(audio_codec, kCodecAAC); 278 EXPECT_EQ(audio_codec, kCodecAAC);
279 279
280 configs.audio_sampling_rate = 48000; 280 configs.audio_sampling_rate = 48000;
281 uint8 aac_extra_data[] = { 0x13, 0x10 }; 281 uint8 aac_extra_data[] = { 0x13, 0x10 };
282 configs.audio_extra_data = std::vector<uint8>( 282 configs.audio_extra_data = std::vector<uint8>(
283 aac_extra_data, 283 aac_extra_data,
284 aac_extra_data + 2); 284 aac_extra_data + 2);
285 return configs; 285 return configs;
286 } 286 }
287 287
288 DemuxerConfigs CreateVideoDemuxerConfigs(VideoCodec video_codec) { 288 DemuxerConfigs CreateVideoDemuxerConfigs(bool use_larger_size) {
289 DemuxerConfigs configs; 289 DemuxerConfigs configs;
290 configs.video_codec = video_codec; 290 configs.video_codec = kCodecVP8;
291 configs.video_size = gfx::Size(320, 240); 291 configs.video_size =
292 use_larger_size ? gfx::Size(640, 480) : gfx::Size(320, 240);
292 configs.is_video_encrypted = false; 293 configs.is_video_encrypted = false;
293 configs.duration = kDefaultDuration; 294 configs.duration = kDefaultDuration;
294 return configs; 295 return configs;
295 } 296 }
296 297
297 DemuxerConfigs CreateAudioVideoDemuxerConfigs() { 298 DemuxerConfigs CreateAudioVideoDemuxerConfigs() {
298 DemuxerConfigs configs = CreateAudioDemuxerConfigs(kCodecVorbis, false); 299 DemuxerConfigs configs = CreateAudioDemuxerConfigs(kCodecVorbis, false);
299 configs.video_codec = kCodecVP8; 300 configs.video_codec = kCodecVP8;
300 configs.video_size = gfx::Size(320, 240); 301 configs.video_size = gfx::Size(320, 240);
301 configs.is_video_encrypted = false; 302 configs.is_video_encrypted = false;
302 return configs; 303 return configs;
303 } 304 }
304 305
305 DemuxerConfigs CreateDemuxerConfigs(bool have_audio, bool have_video) { 306 DemuxerConfigs CreateDemuxerConfigs(bool have_audio, bool have_video) {
306 DCHECK(have_audio || have_video); 307 DCHECK(have_audio || have_video);
307 308
308 if (have_audio && !have_video) 309 if (have_audio && !have_video)
309 return CreateAudioDemuxerConfigs(kCodecVorbis, false); 310 return CreateAudioDemuxerConfigs(kCodecVorbis, false);
310 311
311 if (have_video && !have_audio) 312 if (have_video && !have_audio)
312 return CreateVideoDemuxerConfigs(kCodecVP8); 313 return CreateVideoDemuxerConfigs(false);
313 314
314 return CreateAudioVideoDemuxerConfigs(); 315 return CreateAudioVideoDemuxerConfigs();
315 } 316 }
316 317
317 // Starts an audio decoder job. 318 // Starts an audio decoder job.
318 void StartAudioDecoderJob() { 319 void StartAudioDecoderJob() {
319 Start(CreateAudioDemuxerConfigs(kCodecVorbis, false)); 320 Start(CreateAudioDemuxerConfigs(kCodecVorbis, false));
320 } 321 }
321 322
322 // Starts a video decoder job. 323 // Starts a video decoder job.
323 void StartVideoDecoderJob() { 324 void StartVideoDecoderJob() {
324 Start(CreateVideoDemuxerConfigs(kCodecVP8)); 325 Start(CreateVideoDemuxerConfigs(false));
325 } 326 }
326 327
327 // Starts decoding the data. 328 // Starts decoding the data.
328 void Start(const DemuxerConfigs& configs) { 329 void Start(const DemuxerConfigs& configs) {
329 EXPECT_EQ(demuxer_->num_data_requests(), 0); 330 EXPECT_EQ(demuxer_->num_data_requests(), 0);
330 player_.OnDemuxerConfigsAvailable(configs); 331 player_.OnDemuxerConfigsAvailable(configs);
331 player_.Start(); 332 player_.Start();
332 333
333 EXPECT_TRUE(player_.IsPlaying()); 334 EXPECT_TRUE(player_.IsPlaying());
334 int expected_num_requests = (player_.HasAudio() ? 1 : 0) + 335 int expected_num_requests = (player_.HasAudio() ? 1 : 0) +
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 638
638 WaitForDecodeDone(is_audio, !is_audio); 639 WaitForDecodeDone(is_audio, !is_audio);
639 640
640 // We should have completed the prefetch phase at this point. 641 // We should have completed the prefetch phase at this point.
641 expected_num_data_requests++; 642 expected_num_data_requests++;
642 EXPECT_EQ(expected_num_data_requests, demuxer_->num_data_requests()); 643 EXPECT_EQ(expected_num_data_requests, demuxer_->num_data_requests());
643 } 644 }
644 645
645 DemuxerConfigs configs = is_audio ? 646 DemuxerConfigs configs = is_audio ?
646 CreateAudioDemuxerConfigs(kCodecAAC, false) : 647 CreateAudioDemuxerConfigs(kCodecAAC, false) :
647 CreateVideoDemuxerConfigs(kCodecVP9); 648 CreateVideoDemuxerConfigs(true);
648 // Feed and decode access units with data for any units prior to 649 // Feed and decode access units with data for any units prior to
649 // |config_unit_index|, and a |kConfigChanged| unit at that index. 650 // |config_unit_index|, and a |kConfigChanged| unit at that index.
650 // Player should prepare to reconfigure the decoder job, and should request 651 // Player should prepare to reconfigure the decoder job, and should request
651 // new demuxer configs. 652 // new demuxer configs.
652 player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckWithConfigChanged( 653 player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckWithConfigChanged(
653 is_audio, config_unit_index, configs)); 654 is_audio, config_unit_index, configs));
654 655
655 expected_num_data_requests++; 656 expected_num_data_requests++;
656 EXPECT_EQ(expected_num_data_requests, demuxer_->num_data_requests()); 657 EXPECT_EQ(expected_num_data_requests, demuxer_->num_data_requests());
657 if (is_audio) 658 if (is_audio)
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
909 // Test decoder job will resend a ReadFromDemuxer request after seek. 910 // Test decoder job will resend a ReadFromDemuxer request after seek.
910 StartAudioDecoderJob(); 911 StartAudioDecoderJob();
911 SeekPlayerWithAbort(true, base::TimeDelta()); 912 SeekPlayerWithAbort(true, base::TimeDelta());
912 } 913 }
913 914
914 TEST_F(MediaSourcePlayerTest, SetSurfaceWhileSeeking) { 915 TEST_F(MediaSourcePlayerTest, SetSurfaceWhileSeeking) {
915 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); 916 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE();
916 917
917 // Test SetVideoSurface() will not cause an extra seek while the player is 918 // Test SetVideoSurface() will not cause an extra seek while the player is
918 // waiting for demuxer to indicate seek is done. 919 // waiting for demuxer to indicate seek is done.
919 player_.OnDemuxerConfigsAvailable(CreateVideoDemuxerConfigs(kCodecVP8)); 920 player_.OnDemuxerConfigsAvailable(
921 CreateVideoDemuxerConfigs(false));
920 922
921 // Initiate a seek. Skip requesting element seek of renderer. 923 // Initiate a seek. Skip requesting element seek of renderer.
922 // Instead behave as if the renderer has asked us to seek. 924 // Instead behave as if the renderer has asked us to seek.
923 player_.SeekTo(base::TimeDelta()); 925 player_.SeekTo(base::TimeDelta());
924 EXPECT_EQ(1, demuxer_->num_seek_requests()); 926 EXPECT_EQ(1, demuxer_->num_seek_requests());
925 927
926 CreateNextTextureAndSetVideoSurface(); 928 CreateNextTextureAndSetVideoSurface();
927 EXPECT_EQ(1, demuxer_->num_seek_requests()); 929 EXPECT_EQ(1, demuxer_->num_seek_requests());
928 player_.Start(); 930 player_.Start();
929 931
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
1066 // Decoder is created after data is received. 1068 // Decoder is created after data is received.
1067 player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckForAudio(0)); 1069 player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckForAudio(0));
1068 EXPECT_TRUE(GetMediaCodecBridge(true)); 1070 EXPECT_TRUE(GetMediaCodecBridge(true));
1069 } 1071 }
1070 1072
1071 TEST_F(MediaSourcePlayerTest, VideoOnlyStartAfterSeekFinish) { 1073 TEST_F(MediaSourcePlayerTest, VideoOnlyStartAfterSeekFinish) {
1072 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); 1074 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE();
1073 1075
1074 // Test video decoder job will not start until pending seek event is handled. 1076 // Test video decoder job will not start until pending seek event is handled.
1075 CreateNextTextureAndSetVideoSurface(); 1077 CreateNextTextureAndSetVideoSurface();
1076 DemuxerConfigs configs = CreateVideoDemuxerConfigs(kCodecVP8); 1078 DemuxerConfigs configs = CreateVideoDemuxerConfigs(false);
1077 player_.OnDemuxerConfigsAvailable(configs); 1079 player_.OnDemuxerConfigsAvailable(configs);
1078 1080
1079 // Initiate a seek. Skip requesting element seek of renderer. 1081 // Initiate a seek. Skip requesting element seek of renderer.
1080 // Instead behave as if the renderer has asked us to seek. 1082 // Instead behave as if the renderer has asked us to seek.
1081 player_.SeekTo(base::TimeDelta()); 1083 player_.SeekTo(base::TimeDelta());
1082 EXPECT_EQ(1, demuxer_->num_seek_requests()); 1084 EXPECT_EQ(1, demuxer_->num_seek_requests());
1083 1085
1084 player_.Start(); 1086 player_.Start();
1085 EXPECT_EQ(0, demuxer_->num_data_requests()); 1087 EXPECT_EQ(0, demuxer_->num_data_requests());
1086 1088
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
1235 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); 1237 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE();
1236 1238
1237 // Test that if one stream (audio) has completed decode of EOS and the other 1239 // Test that if one stream (audio) has completed decode of EOS and the other
1238 // stream (video) processes config change, that subsequent video EOS completes 1240 // stream (video) processes config change, that subsequent video EOS completes
1239 // A/V playback. 1241 // A/V playback.
1240 // Also tests that seeking+Start() after completing playback resumes playback. 1242 // Also tests that seeking+Start() after completing playback resumes playback.
1241 CreateNextTextureAndSetVideoSurface(); 1243 CreateNextTextureAndSetVideoSurface();
1242 Start(CreateAudioVideoDemuxerConfigs()); 1244 Start(CreateAudioVideoDemuxerConfigs());
1243 1245
1244 player_.OnDemuxerDataAvailable(CreateEOSAck(true)); // Audio EOS 1246 player_.OnDemuxerDataAvailable(CreateEOSAck(true)); // Audio EOS
1245 DemuxerConfigs configs = CreateVideoDemuxerConfigs(kCodecVP9); 1247 DemuxerConfigs configs = CreateVideoDemuxerConfigs(true);
1246 player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckWithConfigChanged( 1248 player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckWithConfigChanged(
1247 false, 0, configs)); // Video |kConfigChanged| as first unit. 1249 false, 0, configs)); // Video |kConfigChanged| as first unit.
1248 1250
1249 WaitForAudioVideoDecodeDone(); 1251 WaitForAudioVideoDecodeDone();
1250 1252
1251 EXPECT_EQ(3, demuxer_->num_data_requests()); 1253 EXPECT_EQ(3, demuxer_->num_data_requests());
1252 1254
1253 // At no time after completing audio EOS decode, above, should the 1255 // At no time after completing audio EOS decode, above, should the
1254 // audio decoder job resume decoding. Send and decode video EOS. 1256 // audio decoder job resume decoding. Send and decode video EOS.
1255 VerifyPlaybackCompletesOnEOSDecode(true, false); 1257 VerifyPlaybackCompletesOnEOSDecode(true, false);
(...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after
1660 WaitForAudioVideoDecodeDone(); 1662 WaitForAudioVideoDecodeDone();
1661 1663
1662 // Simulate audio |kConfigChanged| prefetched as standalone access unit. 1664 // Simulate audio |kConfigChanged| prefetched as standalone access unit.
1663 DemuxerConfigs audio_configs = CreateAudioDemuxerConfigs(kCodecVorbis, true); 1665 DemuxerConfigs audio_configs = CreateAudioDemuxerConfigs(kCodecVorbis, true);
1664 player_.OnDemuxerDataAvailable( 1666 player_.OnDemuxerDataAvailable(
1665 CreateReadFromDemuxerAckWithConfigChanged(true, 0, audio_configs)); 1667 CreateReadFromDemuxerAckWithConfigChanged(true, 0, audio_configs));
1666 1668
1667 // Simulate video |kConfigChanged| prefetched as standalone access unit. 1669 // Simulate video |kConfigChanged| prefetched as standalone access unit.
1668 player_.OnDemuxerDataAvailable( 1670 player_.OnDemuxerDataAvailable(
1669 CreateReadFromDemuxerAckWithConfigChanged( 1671 CreateReadFromDemuxerAckWithConfigChanged(
1670 false, 0, CreateVideoDemuxerConfigs(kCodecVP9))); 1672 false, 0, CreateVideoDemuxerConfigs(true)));
1671 EXPECT_EQ(6, demuxer_->num_data_requests()); 1673 EXPECT_EQ(6, demuxer_->num_data_requests());
1672 EXPECT_TRUE(IsDrainingDecoder(true)); 1674 EXPECT_TRUE(IsDrainingDecoder(true));
1673 EXPECT_TRUE(IsDrainingDecoder(false)); 1675 EXPECT_TRUE(IsDrainingDecoder(false));
1674 1676
1675 // Waiting for decoder to finish draining. 1677 // Waiting for decoder to finish draining.
1676 while (IsDrainingDecoder(true) || IsDrainingDecoder(false)) 1678 while (IsDrainingDecoder(true) || IsDrainingDecoder(false))
1677 message_loop_.RunUntilIdle(); 1679 message_loop_.RunUntilIdle();
1678 } 1680 }
1679 1681
1680 TEST_F(MediaSourcePlayerTest, DemuxerConfigRequestedIfInPrefetchUnit0) { 1682 TEST_F(MediaSourcePlayerTest, DemuxerConfigRequestedIfInPrefetchUnit0) {
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after
2084 // also verify that the job is successfully created if SetDrmBridge(), Start() 2086 // also verify that the job is successfully created if SetDrmBridge(), Start()
2085 // and eventually OnMediaCrypto() occur. This would increase test coverage of 2087 // and eventually OnMediaCrypto() occur. This would increase test coverage of
2086 // http://crbug.com/313470 and allow us to remove inspection of internal player 2088 // http://crbug.com/313470 and allow us to remove inspection of internal player
2087 // pending event state. See http://crbug.com/313860. 2089 // pending event state. See http://crbug.com/313860.
2088 TEST_F(MediaSourcePlayerTest, SurfaceChangeClearedEvenIfMediaCryptoAbsent) { 2090 TEST_F(MediaSourcePlayerTest, SurfaceChangeClearedEvenIfMediaCryptoAbsent) {
2089 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); 2091 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE();
2090 2092
2091 // Test that |SURFACE_CHANGE_EVENT_PENDING| is not pending after 2093 // Test that |SURFACE_CHANGE_EVENT_PENDING| is not pending after
2092 // SetVideoSurface() for a player configured for encrypted video, when the 2094 // SetVideoSurface() for a player configured for encrypted video, when the
2093 // player has not yet received media crypto. 2095 // player has not yet received media crypto.
2094 DemuxerConfigs configs = CreateVideoDemuxerConfigs(kCodecVP8); 2096 DemuxerConfigs configs = CreateVideoDemuxerConfigs(false);
2095 configs.is_video_encrypted = true; 2097 configs.is_video_encrypted = true;
2096 2098
2097 player_.OnDemuxerConfigsAvailable(configs); 2099 player_.OnDemuxerConfigsAvailable(configs);
2098 CreateNextTextureAndSetVideoSurface(); 2100 CreateNextTextureAndSetVideoSurface();
2099 EXPECT_FALSE(GetMediaCodecBridge(false)); 2101 EXPECT_FALSE(GetMediaCodecBridge(false));
2100 } 2102 }
2101 2103
2102 TEST_F(MediaSourcePlayerTest, CurrentTimeUpdatedWhileDecoderStarved) { 2104 TEST_F(MediaSourcePlayerTest, CurrentTimeUpdatedWhileDecoderStarved) {
2103 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); 2105 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE();
2104 2106
(...skipping 22 matching lines...) Expand all
2127 2129
2128 DemuxerConfigs configs = CreateAudioDemuxerConfigs(kCodecVorbis, true); 2130 DemuxerConfigs configs = CreateAudioDemuxerConfigs(kCodecVorbis, true);
2129 DemuxerData data = CreateReadFromDemuxerAckWithConfigChanged( 2131 DemuxerData data = CreateReadFromDemuxerAckWithConfigChanged(
2130 true, 0, configs); 2132 true, 0, configs);
2131 player_.OnDemuxerDataAvailable(data); 2133 player_.OnDemuxerDataAvailable(data);
2132 WaitForAudioDecodeDone(); 2134 WaitForAudioDecodeDone();
2133 DecodeAudioDataUntilOutputBecomesAvailable(); 2135 DecodeAudioDataUntilOutputBecomesAvailable();
2134 } 2136 }
2135 2137
2136 } // namespace media 2138 } // namespace media
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698