OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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_codec_player.h" |
| 6 |
5 #include <stdint.h> | 7 #include <stdint.h> |
| 8 #include <utility> |
6 | 9 |
7 #include "base/bind.h" | 10 #include "base/bind.h" |
8 #include "base/logging.h" | 11 #include "base/logging.h" |
9 #include "base/macros.h" | 12 #include "base/macros.h" |
10 #include "base/timer/timer.h" | 13 #include "base/timer/timer.h" |
11 #include "media/base/android/demuxer_android.h" | 14 #include "media/base/android/demuxer_android.h" |
12 #include "media/base/android/media_codec_player.h" | |
13 #include "media/base/android/media_codec_util.h" | 15 #include "media/base/android/media_codec_util.h" |
14 #include "media/base/android/media_player_manager.h" | 16 #include "media/base/android/media_player_manager.h" |
15 #include "media/base/android/media_task_runner.h" | 17 #include "media/base/android/media_task_runner.h" |
16 #include "media/base/android/sdk_media_codec_bridge.h" | 18 #include "media/base/android/sdk_media_codec_bridge.h" |
17 #include "media/base/android/test_data_factory.h" | 19 #include "media/base/android/test_data_factory.h" |
18 #include "media/base/android/test_statistics.h" | 20 #include "media/base/android/test_statistics.h" |
19 #include "media/base/timestamp_constants.h" | 21 #include "media/base/timestamp_constants.h" |
20 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" |
21 #include "ui/gl/android/surface_texture.h" | 23 #include "ui/gl/android/surface_texture.h" |
22 | 24 |
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
338 // Helper methods that enable using a weak pointer when posting to the player. | 340 // Helper methods that enable using a weak pointer when posting to the player. |
339 void OnDemuxerDataAvailable(const DemuxerData& chunk); | 341 void OnDemuxerDataAvailable(const DemuxerData& chunk); |
340 void OnDemuxerSeekDone(base::TimeDelta reported_seek_time); | 342 void OnDemuxerSeekDone(base::TimeDelta reported_seek_time); |
341 | 343 |
342 // Sets the callback that is fired when demuxer is deleted (deletion | 344 // Sets the callback that is fired when demuxer is deleted (deletion |
343 // happens on the Media thread). | 345 // happens on the Media thread). |
344 void SetDemuxerDeletedCallback(base::Closure cb) { demuxer_deleted_cb_ = cb; } | 346 void SetDemuxerDeletedCallback(base::Closure cb) { demuxer_deleted_cb_ = cb; } |
345 | 347 |
346 // Sets the audio data factory. | 348 // Sets the audio data factory. |
347 void SetAudioFactory(scoped_ptr<AudioFactory> factory) { | 349 void SetAudioFactory(scoped_ptr<AudioFactory> factory) { |
348 audio_factory_ = factory.Pass(); | 350 audio_factory_ = std::move(factory); |
349 } | 351 } |
350 | 352 |
351 // Sets the video data factory. | 353 // Sets the video data factory. |
352 void SetVideoFactory(scoped_ptr<VideoFactory> factory) { | 354 void SetVideoFactory(scoped_ptr<VideoFactory> factory) { |
353 video_factory_ = factory.Pass(); | 355 video_factory_ = std::move(factory); |
354 } | 356 } |
355 | 357 |
356 // Accessors for data factories. | 358 // Accessors for data factories. |
357 AudioFactory* audio_factory() const { return audio_factory_.get(); } | 359 AudioFactory* audio_factory() const { return audio_factory_.get(); } |
358 VideoFactory* video_factory() const { return video_factory_.get(); } | 360 VideoFactory* video_factory() const { return video_factory_.get(); } |
359 | 361 |
360 // Set the preroll interval after seek for audio stream. | 362 // Set the preroll interval after seek for audio stream. |
361 void SetAudioPrerollInterval(base::TimeDelta value) { | 363 void SetAudioPrerollInterval(base::TimeDelta value) { |
362 audio_preroll_interval_ = value; | 364 audio_preroll_interval_ = value; |
363 } | 365 } |
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
643 scoped_ptr<MockDemuxerAndroid>(demuxer_), GURL()); | 645 scoped_ptr<MockDemuxerAndroid>(demuxer_), GURL()); |
644 | 646 |
645 DCHECK(player_); | 647 DCHECK(player_); |
646 } | 648 } |
647 | 649 |
648 void MediaCodecPlayerTest::SetVideoSurface() { | 650 void MediaCodecPlayerTest::SetVideoSurface() { |
649 surface_texture_a_ = gfx::SurfaceTexture::Create(0); | 651 surface_texture_a_ = gfx::SurfaceTexture::Create(0); |
650 gfx::ScopedJavaSurface surface(surface_texture_a_.get()); | 652 gfx::ScopedJavaSurface surface(surface_texture_a_.get()); |
651 | 653 |
652 ASSERT_NE(nullptr, player_); | 654 ASSERT_NE(nullptr, player_); |
653 player_->SetVideoSurface(surface.Pass()); | 655 player_->SetVideoSurface(std::move(surface)); |
654 } | 656 } |
655 | 657 |
656 void MediaCodecPlayerTest::SetVideoSurfaceB() { | 658 void MediaCodecPlayerTest::SetVideoSurfaceB() { |
657 surface_texture_b_ = gfx::SurfaceTexture::Create(1); | 659 surface_texture_b_ = gfx::SurfaceTexture::Create(1); |
658 gfx::ScopedJavaSurface surface(surface_texture_b_.get()); | 660 gfx::ScopedJavaSurface surface(surface_texture_b_.get()); |
659 | 661 |
660 ASSERT_NE(nullptr, player_); | 662 ASSERT_NE(nullptr, player_); |
661 player_->SetVideoSurface(surface.Pass()); | 663 player_->SetVideoSurface(std::move(surface)); |
662 } | 664 } |
663 | 665 |
664 void MediaCodecPlayerTest::RemoveVideoSurface() { | 666 void MediaCodecPlayerTest::RemoveVideoSurface() { |
665 player_->SetVideoSurface(gfx::ScopedJavaSurface()); | 667 player_->SetVideoSurface(gfx::ScopedJavaSurface()); |
666 surface_texture_a_ = NULL; | 668 surface_texture_a_ = NULL; |
667 } | 669 } |
668 | 670 |
669 bool MediaCodecPlayerTest::WaitForCondition(const Predicate& condition, | 671 bool MediaCodecPlayerTest::WaitForCondition(const Predicate& condition, |
670 const base::TimeDelta& timeout) { | 672 const base::TimeDelta& timeout) { |
671 // Let the message_loop_ process events. | 673 // Let the message_loop_ process events. |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
742 } | 744 } |
743 | 745 |
744 return true; | 746 return true; |
745 } | 747 } |
746 | 748 |
747 bool MediaCodecPlayerTest::StartAVPlayback( | 749 bool MediaCodecPlayerTest::StartAVPlayback( |
748 scoped_ptr<AudioFactory> audio_factory, | 750 scoped_ptr<AudioFactory> audio_factory, |
749 scoped_ptr<VideoFactory> video_factory, | 751 scoped_ptr<VideoFactory> video_factory, |
750 uint32_t flags, | 752 uint32_t flags, |
751 const char* test_name) { | 753 const char* test_name) { |
752 demuxer_->SetAudioFactory(audio_factory.Pass()); | 754 demuxer_->SetAudioFactory(std::move(audio_factory)); |
753 demuxer_->SetVideoFactory(video_factory.Pass()); | 755 demuxer_->SetVideoFactory(std::move(video_factory)); |
754 | 756 |
755 CreatePlayer(); | 757 CreatePlayer(); |
756 SetVideoSurface(); | 758 SetVideoSurface(); |
757 | 759 |
758 // Wait till the player is initialized on media thread. | 760 // Wait till the player is initialized on media thread. |
759 EXPECT_TRUE(WaitForCondition(base::Bind(&MockDemuxerAndroid::IsInitialized, | 761 EXPECT_TRUE(WaitForCondition(base::Bind(&MockDemuxerAndroid::IsInitialized, |
760 base::Unretained(demuxer_)))); | 762 base::Unretained(demuxer_)))); |
761 | 763 |
762 if (!demuxer_->IsInitialized()) { | 764 if (!demuxer_->IsInitialized()) { |
763 DVLOG(0) << test_name << ": demuxer is not initialized"; | 765 DVLOG(0) << test_name << ": demuxer is not initialized"; |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
803 } | 805 } |
804 | 806 |
805 bool MediaCodecPlayerTest::StartAVSeekAndPreroll( | 807 bool MediaCodecPlayerTest::StartAVSeekAndPreroll( |
806 scoped_ptr<AudioFactory> audio_factory, | 808 scoped_ptr<AudioFactory> audio_factory, |
807 scoped_ptr<VideoFactory> video_factory, | 809 scoped_ptr<VideoFactory> video_factory, |
808 base::TimeDelta seek_position, | 810 base::TimeDelta seek_position, |
809 uint32_t flags, | 811 uint32_t flags, |
810 const char* test_name) { | 812 const char* test_name) { |
811 // Initialize A/V playback | 813 // Initialize A/V playback |
812 | 814 |
813 demuxer_->SetAudioFactory(audio_factory.Pass()); | 815 demuxer_->SetAudioFactory(std::move(audio_factory)); |
814 demuxer_->SetVideoFactory(video_factory.Pass()); | 816 demuxer_->SetVideoFactory(std::move(video_factory)); |
815 | 817 |
816 CreatePlayer(); | 818 CreatePlayer(); |
817 SetVideoSurface(); | 819 SetVideoSurface(); |
818 | 820 |
819 // Wait till the player is initialized on media thread. | 821 // Wait till the player is initialized on media thread. |
820 EXPECT_TRUE(WaitForCondition(base::Bind(&MockDemuxerAndroid::IsInitialized, | 822 EXPECT_TRUE(WaitForCondition(base::Bind(&MockDemuxerAndroid::IsInitialized, |
821 base::Unretained(demuxer_)))); | 823 base::Unretained(demuxer_)))); |
822 | 824 |
823 if (!demuxer_->IsInitialized()) { | 825 if (!demuxer_->IsInitialized()) { |
824 DVLOG(0) << test_name << ": demuxer is not initialized"; | 826 DVLOG(0) << test_name << ": demuxer is not initialized"; |
(...skipping 713 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1538 // per frame it would take 250 ms to preroll. | 1540 // per frame it would take 250 ms to preroll. |
1539 base::TimeDelta seek_position = base::TimeDelta::FromMilliseconds(1000); | 1541 base::TimeDelta seek_position = base::TimeDelta::FromMilliseconds(1000); |
1540 base::TimeDelta preroll_intvl = base::TimeDelta::FromMilliseconds(500); | 1542 base::TimeDelta preroll_intvl = base::TimeDelta::FromMilliseconds(500); |
1541 base::TimeDelta preroll_timeout = base::TimeDelta::FromMilliseconds(1000); | 1543 base::TimeDelta preroll_timeout = base::TimeDelta::FromMilliseconds(1000); |
1542 | 1544 |
1543 scoped_ptr<AudioFactory> audio_factory(new AudioFactory(duration)); | 1545 scoped_ptr<AudioFactory> audio_factory(new AudioFactory(duration)); |
1544 scoped_ptr<VideoFactory> video_factory(new VideoFactory(duration)); | 1546 scoped_ptr<VideoFactory> video_factory(new VideoFactory(duration)); |
1545 | 1547 |
1546 demuxer_->SetVideoPrerollInterval(preroll_intvl); | 1548 demuxer_->SetVideoPrerollInterval(preroll_intvl); |
1547 | 1549 |
1548 ASSERT_TRUE(StartAVSeekAndPreroll(audio_factory.Pass(), video_factory.Pass(), | 1550 ASSERT_TRUE(StartAVSeekAndPreroll(std::move(audio_factory), |
1549 seek_position, 0, | 1551 std::move(video_factory), seek_position, 0, |
1550 "AVPrerollAudioWaitsForVideo")); | 1552 "AVPrerollAudioWaitsForVideo")); |
1551 | 1553 |
1552 // Wait till preroll finishes and the real playback starts. | 1554 // Wait till preroll finishes and the real playback starts. |
1553 EXPECT_TRUE( | 1555 EXPECT_TRUE( |
1554 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsPlaybackStarted, | 1556 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsPlaybackStarted, |
1555 base::Unretained(&manager_)), | 1557 base::Unretained(&manager_)), |
1556 preroll_timeout)); | 1558 preroll_timeout)); |
1557 | 1559 |
1558 // Ensure that the first audio and video pts are close to each other and are | 1560 // Ensure that the first audio and video pts are close to each other and are |
1559 // reported at the close moments in time. | 1561 // reported at the close moments in time. |
(...skipping 27 matching lines...) Expand all Loading... |
1587 base::TimeDelta preroll_intvl = base::TimeDelta::FromMilliseconds(500); | 1589 base::TimeDelta preroll_intvl = base::TimeDelta::FromMilliseconds(500); |
1588 | 1590 |
1589 base::TimeDelta start_timeout = base::TimeDelta::FromMilliseconds(800); | 1591 base::TimeDelta start_timeout = base::TimeDelta::FromMilliseconds(800); |
1590 base::TimeDelta preroll_timeout = base::TimeDelta::FromMilliseconds(1000); | 1592 base::TimeDelta preroll_timeout = base::TimeDelta::FromMilliseconds(1000); |
1591 | 1593 |
1592 scoped_ptr<AudioFactory> audio_factory(new AudioFactory(duration)); | 1594 scoped_ptr<AudioFactory> audio_factory(new AudioFactory(duration)); |
1593 scoped_ptr<VideoFactory> video_factory(new VideoFactory(duration)); | 1595 scoped_ptr<VideoFactory> video_factory(new VideoFactory(duration)); |
1594 | 1596 |
1595 demuxer_->SetVideoPrerollInterval(preroll_intvl); | 1597 demuxer_->SetVideoPrerollInterval(preroll_intvl); |
1596 | 1598 |
1597 ASSERT_TRUE(StartAVSeekAndPreroll(audio_factory.Pass(), video_factory.Pass(), | 1599 ASSERT_TRUE(StartAVSeekAndPreroll(std::move(audio_factory), |
1598 seek_position, 0, | 1600 std::move(video_factory), seek_position, 0, |
1599 "AVPrerollReleaseAndRestart")); | 1601 "AVPrerollReleaseAndRestart")); |
1600 | 1602 |
1601 // Issue Release(). | 1603 // Issue Release(). |
1602 player_->Release(); | 1604 player_->Release(); |
1603 | 1605 |
1604 // Make sure we have not been playing. | 1606 // Make sure we have not been playing. |
1605 WaitForDelay(base::TimeDelta::FromMilliseconds(400)); | 1607 WaitForDelay(base::TimeDelta::FromMilliseconds(400)); |
1606 | 1608 |
1607 EXPECT_FALSE(manager_.HasFirstFrame(DemuxerStream::AUDIO)); | 1609 EXPECT_FALSE(manager_.HasFirstFrame(DemuxerStream::AUDIO)); |
1608 EXPECT_FALSE(manager_.HasFirstFrame(DemuxerStream::VIDEO)); | 1610 EXPECT_FALSE(manager_.HasFirstFrame(DemuxerStream::VIDEO)); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1661 base::TimeDelta preroll_intvl = base::TimeDelta::FromMilliseconds(500); | 1663 base::TimeDelta preroll_intvl = base::TimeDelta::FromMilliseconds(500); |
1662 | 1664 |
1663 base::TimeDelta start_timeout = base::TimeDelta::FromMilliseconds(800); | 1665 base::TimeDelta start_timeout = base::TimeDelta::FromMilliseconds(800); |
1664 base::TimeDelta preroll_timeout = base::TimeDelta::FromMilliseconds(1000); | 1666 base::TimeDelta preroll_timeout = base::TimeDelta::FromMilliseconds(1000); |
1665 | 1667 |
1666 scoped_ptr<AudioFactory> audio_factory(new AudioFactory(duration)); | 1668 scoped_ptr<AudioFactory> audio_factory(new AudioFactory(duration)); |
1667 scoped_ptr<VideoFactory> video_factory(new VideoFactory(duration)); | 1669 scoped_ptr<VideoFactory> video_factory(new VideoFactory(duration)); |
1668 | 1670 |
1669 demuxer_->SetVideoPrerollInterval(preroll_intvl); | 1671 demuxer_->SetVideoPrerollInterval(preroll_intvl); |
1670 | 1672 |
1671 ASSERT_TRUE(StartAVSeekAndPreroll(audio_factory.Pass(), video_factory.Pass(), | 1673 ASSERT_TRUE(StartAVSeekAndPreroll(std::move(audio_factory), |
1672 seek_position, 0, | 1674 std::move(video_factory), seek_position, 0, |
1673 "AVPrerollStopAndRestart")); | 1675 "AVPrerollStopAndRestart")); |
1674 | 1676 |
1675 // Video stream should be prerolling. Request to stop. | 1677 // Video stream should be prerolling. Request to stop. |
1676 EXPECT_FALSE(IsPaused()); | 1678 EXPECT_FALSE(IsPaused()); |
1677 player_->Pause(true); | 1679 player_->Pause(true); |
1678 | 1680 |
1679 EXPECT_TRUE(WaitForCondition( | 1681 EXPECT_TRUE(WaitForCondition( |
1680 base::Bind(&MediaCodecPlayerTest::IsPaused, base::Unretained(this)))); | 1682 base::Bind(&MediaCodecPlayerTest::IsPaused, base::Unretained(this)))); |
1681 | 1683 |
1682 // Test that we have not been playing. | 1684 // Test that we have not been playing. |
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1904 base::TimeDelta config_change_position = | 1906 base::TimeDelta config_change_position = |
1905 base::TimeDelta::FromMilliseconds(1000); | 1907 base::TimeDelta::FromMilliseconds(1000); |
1906 | 1908 |
1907 base::TimeDelta completion_timeout = base::TimeDelta::FromMilliseconds(3000); | 1909 base::TimeDelta completion_timeout = base::TimeDelta::FromMilliseconds(3000); |
1908 | 1910 |
1909 scoped_ptr<AudioFactory> audio_factory(new AudioFactory(duration)); | 1911 scoped_ptr<AudioFactory> audio_factory(new AudioFactory(duration)); |
1910 scoped_ptr<VideoFactory> video_factory(new VideoFactory(duration)); | 1912 scoped_ptr<VideoFactory> video_factory(new VideoFactory(duration)); |
1911 | 1913 |
1912 video_factory->RequestConfigChange(config_change_position); | 1914 video_factory->RequestConfigChange(config_change_position); |
1913 | 1915 |
1914 ASSERT_TRUE(StartAVPlayback(audio_factory.Pass(), video_factory.Pass(), | 1916 ASSERT_TRUE(StartAVPlayback(std::move(audio_factory), |
1915 kAlwaysReconfigVideo, | 1917 std::move(video_factory), kAlwaysReconfigVideo, |
1916 "AVVideoConfigChangeWhilePlaying")); | 1918 "AVVideoConfigChangeWhilePlaying")); |
1917 | 1919 |
1918 // Wait till completion | 1920 // Wait till completion |
1919 EXPECT_TRUE( | 1921 EXPECT_TRUE( |
1920 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsPlaybackCompleted, | 1922 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsPlaybackCompleted, |
1921 base::Unretained(&manager_)), | 1923 base::Unretained(&manager_)), |
1922 completion_timeout)); | 1924 completion_timeout)); |
1923 | 1925 |
1924 // The audio codec should be kept. | 1926 // The audio codec should be kept. |
1925 EXPECT_EQ(1, manager_.num_audio_codecs_created()); | 1927 EXPECT_EQ(1, manager_.num_audio_codecs_created()); |
(...skipping 24 matching lines...) Expand all Loading... |
1950 base::TimeDelta config_change_position = | 1952 base::TimeDelta config_change_position = |
1951 base::TimeDelta::FromMilliseconds(1000); | 1953 base::TimeDelta::FromMilliseconds(1000); |
1952 | 1954 |
1953 base::TimeDelta completion_timeout = base::TimeDelta::FromMilliseconds(3000); | 1955 base::TimeDelta completion_timeout = base::TimeDelta::FromMilliseconds(3000); |
1954 | 1956 |
1955 scoped_ptr<AudioFactory> audio_factory(new AudioFactory(duration)); | 1957 scoped_ptr<AudioFactory> audio_factory(new AudioFactory(duration)); |
1956 scoped_ptr<VideoFactory> video_factory(new VideoFactory(duration)); | 1958 scoped_ptr<VideoFactory> video_factory(new VideoFactory(duration)); |
1957 | 1959 |
1958 audio_factory->RequestConfigChange(config_change_position); | 1960 audio_factory->RequestConfigChange(config_change_position); |
1959 | 1961 |
1960 ASSERT_TRUE(StartAVPlayback(audio_factory.Pass(), video_factory.Pass(), | 1962 ASSERT_TRUE(StartAVPlayback(std::move(audio_factory), |
1961 kAlwaysReconfigAudio, | 1963 std::move(video_factory), kAlwaysReconfigAudio, |
1962 "AVAudioConfigChangeWhilePlaying")); | 1964 "AVAudioConfigChangeWhilePlaying")); |
1963 | 1965 |
1964 // Wait till completion | 1966 // Wait till completion |
1965 EXPECT_TRUE( | 1967 EXPECT_TRUE( |
1966 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsPlaybackCompleted, | 1968 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsPlaybackCompleted, |
1967 base::Unretained(&manager_)), | 1969 base::Unretained(&manager_)), |
1968 completion_timeout)); | 1970 completion_timeout)); |
1969 | 1971 |
1970 // The audio codec should be recreated upon config changes. | 1972 // The audio codec should be recreated upon config changes. |
1971 EXPECT_EQ(2, manager_.num_audio_codecs_created()); | 1973 EXPECT_EQ(2, manager_.num_audio_codecs_created()); |
(...skipping 24 matching lines...) Expand all Loading... |
1996 base::TimeDelta config_change_video = base::TimeDelta::FromMilliseconds(1000); | 1998 base::TimeDelta config_change_video = base::TimeDelta::FromMilliseconds(1000); |
1997 | 1999 |
1998 base::TimeDelta completion_timeout = base::TimeDelta::FromMilliseconds(3000); | 2000 base::TimeDelta completion_timeout = base::TimeDelta::FromMilliseconds(3000); |
1999 | 2001 |
2000 scoped_ptr<AudioFactory> audio_factory(new AudioFactory(duration)); | 2002 scoped_ptr<AudioFactory> audio_factory(new AudioFactory(duration)); |
2001 scoped_ptr<VideoFactory> video_factory(new VideoFactory(duration)); | 2003 scoped_ptr<VideoFactory> video_factory(new VideoFactory(duration)); |
2002 | 2004 |
2003 audio_factory->RequestConfigChange(config_change_audio); | 2005 audio_factory->RequestConfigChange(config_change_audio); |
2004 video_factory->RequestConfigChange(config_change_video); | 2006 video_factory->RequestConfigChange(config_change_video); |
2005 | 2007 |
2006 ASSERT_TRUE(StartAVPlayback(audio_factory.Pass(), video_factory.Pass(), | 2008 ASSERT_TRUE(StartAVPlayback(std::move(audio_factory), |
| 2009 std::move(video_factory), |
2007 kAlwaysReconfigAudio | kAlwaysReconfigVideo, | 2010 kAlwaysReconfigAudio | kAlwaysReconfigVideo, |
2008 "AVSimultaneousConfigChange_1")); | 2011 "AVSimultaneousConfigChange_1")); |
2009 | 2012 |
2010 // Wait till completion | 2013 // Wait till completion |
2011 EXPECT_TRUE( | 2014 EXPECT_TRUE( |
2012 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsPlaybackCompleted, | 2015 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsPlaybackCompleted, |
2013 base::Unretained(&manager_)), | 2016 base::Unretained(&manager_)), |
2014 completion_timeout)); | 2017 completion_timeout)); |
2015 | 2018 |
2016 // The audio codec should be recreated upon config changes. | 2019 // The audio codec should be recreated upon config changes. |
(...skipping 26 matching lines...) Expand all Loading... |
2043 base::TimeDelta config_change_video = base::TimeDelta::FromMilliseconds(1000); | 2046 base::TimeDelta config_change_video = base::TimeDelta::FromMilliseconds(1000); |
2044 | 2047 |
2045 base::TimeDelta completion_timeout = base::TimeDelta::FromMilliseconds(3000); | 2048 base::TimeDelta completion_timeout = base::TimeDelta::FromMilliseconds(3000); |
2046 | 2049 |
2047 scoped_ptr<AudioFactory> audio_factory(new AudioFactory(duration)); | 2050 scoped_ptr<AudioFactory> audio_factory(new AudioFactory(duration)); |
2048 scoped_ptr<VideoFactory> video_factory(new VideoFactory(duration)); | 2051 scoped_ptr<VideoFactory> video_factory(new VideoFactory(duration)); |
2049 | 2052 |
2050 audio_factory->RequestConfigChange(config_change_audio); | 2053 audio_factory->RequestConfigChange(config_change_audio); |
2051 video_factory->RequestConfigChange(config_change_video); | 2054 video_factory->RequestConfigChange(config_change_video); |
2052 | 2055 |
2053 ASSERT_TRUE(StartAVPlayback(audio_factory.Pass(), video_factory.Pass(), | 2056 ASSERT_TRUE(StartAVPlayback(std::move(audio_factory), |
| 2057 std::move(video_factory), |
2054 kAlwaysReconfigAudio | kAlwaysReconfigVideo, | 2058 kAlwaysReconfigAudio | kAlwaysReconfigVideo, |
2055 "AVSimultaneousConfigChange_2")); | 2059 "AVSimultaneousConfigChange_2")); |
2056 | 2060 |
2057 // Wait till completion | 2061 // Wait till completion |
2058 EXPECT_TRUE( | 2062 EXPECT_TRUE( |
2059 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsPlaybackCompleted, | 2063 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsPlaybackCompleted, |
2060 base::Unretained(&manager_)), | 2064 base::Unretained(&manager_)), |
2061 completion_timeout)); | 2065 completion_timeout)); |
2062 | 2066 |
2063 // The audio codec should be recreated upon config changes. | 2067 // The audio codec should be recreated upon config changes. |
(...skipping 23 matching lines...) Expand all Loading... |
2087 base::TimeDelta video_duration = base::TimeDelta::FromMilliseconds(1200); | 2091 base::TimeDelta video_duration = base::TimeDelta::FromMilliseconds(1200); |
2088 base::TimeDelta config_change_video = base::TimeDelta::FromMilliseconds(1000); | 2092 base::TimeDelta config_change_video = base::TimeDelta::FromMilliseconds(1000); |
2089 | 2093 |
2090 base::TimeDelta completion_timeout = base::TimeDelta::FromMilliseconds(3000); | 2094 base::TimeDelta completion_timeout = base::TimeDelta::FromMilliseconds(3000); |
2091 | 2095 |
2092 scoped_ptr<AudioFactory> audio_factory(new AudioFactory(audio_duration)); | 2096 scoped_ptr<AudioFactory> audio_factory(new AudioFactory(audio_duration)); |
2093 scoped_ptr<VideoFactory> video_factory(new VideoFactory(video_duration)); | 2097 scoped_ptr<VideoFactory> video_factory(new VideoFactory(video_duration)); |
2094 | 2098 |
2095 video_factory->RequestConfigChange(config_change_video); | 2099 video_factory->RequestConfigChange(config_change_video); |
2096 | 2100 |
2097 ASSERT_TRUE(StartAVPlayback(audio_factory.Pass(), video_factory.Pass(), | 2101 ASSERT_TRUE(StartAVPlayback(std::move(audio_factory), |
2098 kAlwaysReconfigVideo, | 2102 std::move(video_factory), kAlwaysReconfigVideo, |
2099 "AVAudioEndsAcrossVideoConfigChange")); | 2103 "AVAudioEndsAcrossVideoConfigChange")); |
2100 | 2104 |
2101 // Wait till completion | 2105 // Wait till completion |
2102 EXPECT_TRUE( | 2106 EXPECT_TRUE( |
2103 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsPlaybackCompleted, | 2107 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsPlaybackCompleted, |
2104 base::Unretained(&manager_)), | 2108 base::Unretained(&manager_)), |
2105 completion_timeout)); | 2109 completion_timeout)); |
2106 | 2110 |
2107 // The audio codec should not be recreated. | 2111 // The audio codec should not be recreated. |
2108 EXPECT_EQ(1, manager_.num_audio_codecs_created()); | 2112 EXPECT_EQ(1, manager_.num_audio_codecs_created()); |
(...skipping 27 matching lines...) Expand all Loading... |
2136 base::TimeDelta video_duration = base::TimeDelta::FromMilliseconds(1000); | 2140 base::TimeDelta video_duration = base::TimeDelta::FromMilliseconds(1000); |
2137 base::TimeDelta config_change_audio = base::TimeDelta::FromMilliseconds(1000); | 2141 base::TimeDelta config_change_audio = base::TimeDelta::FromMilliseconds(1000); |
2138 | 2142 |
2139 base::TimeDelta completion_timeout = base::TimeDelta::FromMilliseconds(3000); | 2143 base::TimeDelta completion_timeout = base::TimeDelta::FromMilliseconds(3000); |
2140 | 2144 |
2141 scoped_ptr<AudioFactory> audio_factory(new AudioFactory(audio_duration)); | 2145 scoped_ptr<AudioFactory> audio_factory(new AudioFactory(audio_duration)); |
2142 scoped_ptr<VideoFactory> video_factory(new VideoFactory(video_duration)); | 2146 scoped_ptr<VideoFactory> video_factory(new VideoFactory(video_duration)); |
2143 | 2147 |
2144 audio_factory->RequestConfigChange(config_change_audio); | 2148 audio_factory->RequestConfigChange(config_change_audio); |
2145 | 2149 |
2146 ASSERT_TRUE(StartAVPlayback(audio_factory.Pass(), video_factory.Pass(), | 2150 ASSERT_TRUE(StartAVPlayback(std::move(audio_factory), |
2147 kAlwaysReconfigAudio, | 2151 std::move(video_factory), kAlwaysReconfigAudio, |
2148 "AVVideoEndsAcrossAudioConfigChange")); | 2152 "AVVideoEndsAcrossAudioConfigChange")); |
2149 | 2153 |
2150 // Wait till completion | 2154 // Wait till completion |
2151 EXPECT_TRUE( | 2155 EXPECT_TRUE( |
2152 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsPlaybackCompleted, | 2156 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsPlaybackCompleted, |
2153 base::Unretained(&manager_)), | 2157 base::Unretained(&manager_)), |
2154 completion_timeout)); | 2158 completion_timeout)); |
2155 | 2159 |
2156 // The audio codec should be recreated upon config changes. | 2160 // The audio codec should be recreated upon config changes. |
2157 EXPECT_EQ(2, manager_.num_audio_codecs_created()); | 2161 EXPECT_EQ(2, manager_.num_audio_codecs_created()); |
(...skipping 21 matching lines...) Expand all Loading... |
2179 base::TimeDelta video_preroll_intvl = base::TimeDelta::FromMilliseconds(500); | 2183 base::TimeDelta video_preroll_intvl = base::TimeDelta::FromMilliseconds(500); |
2180 base::TimeDelta preroll_timeout = base::TimeDelta::FromMilliseconds(3000); | 2184 base::TimeDelta preroll_timeout = base::TimeDelta::FromMilliseconds(3000); |
2181 | 2185 |
2182 demuxer_->SetVideoPrerollInterval(video_preroll_intvl); | 2186 demuxer_->SetVideoPrerollInterval(video_preroll_intvl); |
2183 | 2187 |
2184 scoped_ptr<AudioFactory> audio_factory(new AudioFactory(duration)); | 2188 scoped_ptr<AudioFactory> audio_factory(new AudioFactory(duration)); |
2185 | 2189 |
2186 scoped_ptr<VideoFactory> video_factory(new VideoFactory(duration)); | 2190 scoped_ptr<VideoFactory> video_factory(new VideoFactory(duration)); |
2187 video_factory->RequestConfigChange(config_change_position); | 2191 video_factory->RequestConfigChange(config_change_position); |
2188 | 2192 |
2189 ASSERT_TRUE(StartAVSeekAndPreroll(audio_factory.Pass(), video_factory.Pass(), | 2193 ASSERT_TRUE(StartAVSeekAndPreroll( |
2190 seek_position, kAlwaysReconfigVideo, | 2194 std::move(audio_factory), std::move(video_factory), seek_position, |
2191 "AVPrerollAcrossVideoConfigChange")); | 2195 kAlwaysReconfigVideo, "AVPrerollAcrossVideoConfigChange")); |
2192 | 2196 |
2193 // Wait till preroll finishes and the real playback starts. | 2197 // Wait till preroll finishes and the real playback starts. |
2194 EXPECT_TRUE( | 2198 EXPECT_TRUE( |
2195 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsPlaybackStarted, | 2199 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsPlaybackStarted, |
2196 base::Unretained(&manager_)), | 2200 base::Unretained(&manager_)), |
2197 preroll_timeout)); | 2201 preroll_timeout)); |
2198 | 2202 |
2199 // The presense of config change should not affect preroll behavior: | 2203 // The presense of config change should not affect preroll behavior: |
2200 | 2204 |
2201 // Ensure that the first audio and video pts are close to each other and are | 2205 // Ensure that the first audio and video pts are close to each other and are |
(...skipping 26 matching lines...) Expand all Loading... |
2228 base::TimeDelta audio_preroll_intvl = base::TimeDelta::FromMilliseconds(400); | 2232 base::TimeDelta audio_preroll_intvl = base::TimeDelta::FromMilliseconds(400); |
2229 base::TimeDelta preroll_timeout = base::TimeDelta::FromMilliseconds(3000); | 2233 base::TimeDelta preroll_timeout = base::TimeDelta::FromMilliseconds(3000); |
2230 | 2234 |
2231 demuxer_->SetAudioPrerollInterval(audio_preroll_intvl); | 2235 demuxer_->SetAudioPrerollInterval(audio_preroll_intvl); |
2232 | 2236 |
2233 scoped_ptr<AudioFactory> audio_factory(new AudioFactory(duration)); | 2237 scoped_ptr<AudioFactory> audio_factory(new AudioFactory(duration)); |
2234 audio_factory->RequestConfigChange(config_change_position); | 2238 audio_factory->RequestConfigChange(config_change_position); |
2235 | 2239 |
2236 scoped_ptr<VideoFactory> video_factory(new VideoFactory(duration)); | 2240 scoped_ptr<VideoFactory> video_factory(new VideoFactory(duration)); |
2237 | 2241 |
2238 ASSERT_TRUE(StartAVSeekAndPreroll(audio_factory.Pass(), video_factory.Pass(), | 2242 ASSERT_TRUE(StartAVSeekAndPreroll( |
2239 seek_position, kAlwaysReconfigAudio, | 2243 std::move(audio_factory), std::move(video_factory), seek_position, |
2240 "AVPrerollAcrossAudioConfigChange")); | 2244 kAlwaysReconfigAudio, "AVPrerollAcrossAudioConfigChange")); |
2241 | 2245 |
2242 // Wait till preroll finishes and the real playback starts. | 2246 // Wait till preroll finishes and the real playback starts. |
2243 EXPECT_TRUE( | 2247 EXPECT_TRUE( |
2244 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsPlaybackStarted, | 2248 WaitForCondition(base::Bind(&MockMediaPlayerManager::IsPlaybackStarted, |
2245 base::Unretained(&manager_)), | 2249 base::Unretained(&manager_)), |
2246 preroll_timeout)); | 2250 preroll_timeout)); |
2247 | 2251 |
2248 // The presense of config change should not affect preroll behavior: | 2252 // The presense of config change should not affect preroll behavior: |
2249 | 2253 |
2250 // Ensure that the first audio and video pts are close to each other and are | 2254 // Ensure that the first audio and video pts are close to each other and are |
(...skipping 16 matching lines...) Expand all Loading... |
2267 // TODO(timav): maybe we should not call the testing callback for | 2271 // TODO(timav): maybe we should not call the testing callback for |
2268 // kRenderAfterPreroll for video (for audio we already do not call). | 2272 // kRenderAfterPreroll for video (for audio we already do not call). |
2269 // EXPECT_TRUE(AlmostEqual(manager_.FirstFrameTime(DemuxerStream::AUDIO), | 2273 // EXPECT_TRUE(AlmostEqual(manager_.FirstFrameTime(DemuxerStream::AUDIO), |
2270 // manager_.FirstFrameTime(DemuxerStream::VIDEO), 50)); | 2274 // manager_.FirstFrameTime(DemuxerStream::VIDEO), 50)); |
2271 | 2275 |
2272 // The playback should start at |seek_position| | 2276 // The playback should start at |seek_position| |
2273 EXPECT_TRUE(AlmostEqual(seek_position, manager_.pts_stat_.min(), 25)); | 2277 EXPECT_TRUE(AlmostEqual(seek_position, manager_.pts_stat_.min(), 25)); |
2274 } | 2278 } |
2275 | 2279 |
2276 } // namespace media | 2280 } // namespace media |
OLD | NEW |