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

Unified Diff: media/base/android/media_source_player_unittest.cc

Issue 257323003: Remove the IPC to request DemuxerConfigs when config changes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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 side-by-side diff with in-line comments
Download patch
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 c730c84792b3c4d056f5a6becd2854b0841b57c2..a9c3572efa2a26f996a0d9eaa2218a0a365a86d9 100644
--- a/media/base/android/media_source_player_unittest.cc
+++ b/media/base/android/media_source_player_unittest.cc
@@ -135,14 +135,10 @@ class MockDemuxerAndroid : public DemuxerAndroid {
: message_loop_(message_loop),
num_data_requests_(0),
num_seek_requests_(0),
- num_browser_seek_requests_(0),
- num_config_requests_(0) {}
+ num_browser_seek_requests_(0) {}
virtual ~MockDemuxerAndroid() {}
virtual void Initialize(DemuxerAndroidClient* client) OVERRIDE {}
- virtual void RequestDemuxerConfigs() OVERRIDE {
- num_config_requests_++;
- }
virtual void RequestDemuxerData(DemuxerStream::Type type) OVERRIDE {
num_data_requests_++;
if (message_loop_->is_running())
@@ -158,7 +154,6 @@ class MockDemuxerAndroid : public DemuxerAndroid {
int num_data_requests() const { return num_data_requests_; }
int num_seek_requests() const { return num_seek_requests_; }
int num_browser_seek_requests() const { return num_browser_seek_requests_; }
- int num_config_requests() const { return num_config_requests_; }
private:
base::MessageLoop* message_loop_;
@@ -172,9 +167,6 @@ class MockDemuxerAndroid : public DemuxerAndroid {
// The number of browser seek requests this object has seen.
int num_browser_seek_requests_;
- // The number of demuxer config requests this object has seen.
- int num_config_requests_;
-
DISALLOW_COPY_AND_ASSIGN(MockDemuxerAndroid);
};
@@ -529,6 +521,8 @@ class MediaSourcePlayerTest : public testing::Test {
data.access_units[i] = CreateAccessUnitWithData(is_audio, i);
data.access_units[config_unit_index].status = DemuxerStream::kConfigChanged;
+ data.demuxer_configs.resize(1);
+ data.demuxer_configs[0] = CreateDemuxerConfigs(is_audio, !is_audio);
return data;
}
@@ -603,8 +597,6 @@ class MediaSourcePlayerTest : public testing::Test {
void StartConfigChange(bool is_audio,
bool config_unit_in_prefetch,
int config_unit_index) {
- int expected_num_config_requests = demuxer_->num_config_requests();
-
EXPECT_FALSE(GetMediaDecoderJob(is_audio));
if (is_audio) {
StartAudioDecoderJob(true);
@@ -629,19 +621,15 @@ class MediaSourcePlayerTest : public testing::Test {
EXPECT_EQ(expected_num_data_requests, demuxer_->num_data_requests());
}
- EXPECT_EQ(expected_num_config_requests, demuxer_->num_config_requests());
-
// Feed and decode access units with data for any units prior to
// |config_unit_index|, and a |kConfigChanged| unit at that index.
// Player should prepare to reconfigure the decoder job, and should request
// new demuxer configs.
player_.OnDemuxerDataAvailable(
CreateReadFromDemuxerAckWithConfigChanged(is_audio, config_unit_index));
- WaitForDecodeDone(is_audio, !is_audio);
-
- expected_num_config_requests++;
- EXPECT_EQ(expected_num_data_requests, demuxer_->num_data_requests());
- EXPECT_EQ(expected_num_config_requests, demuxer_->num_config_requests());
+ // Run until decoder starts to request new data.
+ while (demuxer_->num_data_requests() == expected_num_data_requests)
+ message_loop_.RunUntilIdle();
}
void CreateNextTextureAndSetVideoSurface() {
@@ -1199,15 +1187,11 @@ TEST_F(MediaSourcePlayerTest, AV_PlaybackCompletionAcrossConfigChange) {
Start(CreateAudioVideoDemuxerConfigs(), true);
player_.OnDemuxerDataAvailable(CreateEOSAck(true)); // Audio EOS
- EXPECT_EQ(0, demuxer_->num_config_requests());
player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckWithConfigChanged(
false, 0)); // Video |kConfigChanged| as first unit.
WaitForAudioVideoDecodeDone();
- EXPECT_EQ(1, demuxer_->num_config_requests());
- EXPECT_EQ(2, demuxer_->num_data_requests());
- player_.OnDemuxerConfigsAvailable(CreateAudioVideoDemuxerConfigs());
EXPECT_EQ(3, demuxer_->num_data_requests());
// At no time after completing audio EOS decode, above, should the
@@ -1227,17 +1211,11 @@ TEST_F(MediaSourcePlayerTest, VA_PlaybackCompletionAcrossConfigChange) {
Start(CreateAudioVideoDemuxerConfigs(), true);
player_.OnDemuxerDataAvailable(CreateEOSAck(false)); // Video EOS
- EXPECT_EQ(0, demuxer_->num_config_requests());
player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckWithConfigChanged(
true, 0)); // Audio |kConfigChanged| as first unit.
WaitForAudioVideoDecodeDone();
- // TODO(wolenetz/qinmin): Prevent redundant demuxer config request and change
- // expectation to 1 here. See http://crbug.com/325528.
- EXPECT_EQ(2, demuxer_->num_config_requests());
- EXPECT_EQ(2, demuxer_->num_data_requests());
- player_.OnDemuxerConfigsAvailable(CreateAudioVideoDemuxerConfigs());
EXPECT_EQ(3, demuxer_->num_data_requests());
// At no time after completing video EOS decode, above, should the
@@ -1592,9 +1570,7 @@ TEST_F(MediaSourcePlayerTest, PrerollContinuesAcrossConfigChange) {
// sending an AU with |kConfigChanged|. Player should prepare to reconfigure
// the audio decoder job, and should request new demuxer configs.
DemuxerData data = CreateReadFromDemuxerAckWithConfigChanged(true, 0);
- EXPECT_EQ(0, demuxer_->num_config_requests());
player_.OnDemuxerDataAvailable(data);
- EXPECT_EQ(1, demuxer_->num_config_requests());
// Simulate arrival of new configs.
player_.OnDemuxerConfigsAvailable(CreateAudioDemuxerConfigs(kCodecVorbis));
@@ -1617,28 +1593,16 @@ TEST_F(MediaSourcePlayerTest, SimultaneousAudioVideoConfigChange) {
// 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 more data requested yet.
+ EXPECT_EQ(4, demuxer_->num_data_requests()); // No more data requested yet.
wolenetz 2014/05/02 22:25:30 nit: remove the incorrect(?) comment
qinmin 2014/05/05 20:52:19 Done.
// No job re-creation should occur until the requested configs arrive.
wolenetz 2014/05/02 22:25:30 nit: adjust the wording of comment: Both jobs shou
qinmin 2014/05/05 20:52:19 Done.
- 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());
+ EXPECT_NE(first_audio_job, GetMediaDecoderJob(true));
wolenetz 2014/05/02 22:25:30 nit: these pointer checks can be flaky. I think we
qinmin 2014/05/05 20:52:19 Done.
+ EXPECT_NE(first_video_job, GetMediaDecoderJob(false));
+ EXPECT_TRUE(GetMediaDecoderJob(true) && GetMediaDecoderJob(false));
}
TEST_F(MediaSourcePlayerTest, DemuxerConfigRequestedIfInPrefetchUnit0) {
@@ -1703,90 +1667,27 @@ TEST_F(MediaSourcePlayerTest, BrowserSeek_PrerollAfterBrowserSeek) {
TEST_F(MediaSourcePlayerTest, VideoDemuxerConfigChange) {
SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE();
- // Test that video config change notification results in request for demuxer
- // configuration, and that a video decoder job results without any browser
- // seek necessary once the new demuxer config arrives.
+ // Test that video config change notification results in creating a new
+ // video decoder job results without any browser seek.
StartConfigChange(false, true, 1);
- MediaDecoderJob* first_job = GetMediaDecoderJob(false);
- EXPECT_TRUE(first_job);
- EXPECT_EQ(1, demuxer_->num_data_requests());
- EXPECT_EQ(1, demuxer_->num_config_requests());
-
- // Simulate arrival of new configs.
- player_.OnDemuxerConfigsAvailable(CreateVideoDemuxerConfigs());
-
- // New video decoder job should have been created and configured, without any
- // browser seek.
- MediaDecoderJob* second_job = GetMediaDecoderJob(false);
- EXPECT_TRUE(second_job);
- EXPECT_NE(first_job, second_job);
+ EXPECT_TRUE(GetMediaDecoderJob(false));
EXPECT_EQ(2, demuxer_->num_data_requests());
- EXPECT_EQ(1, demuxer_->num_config_requests());
EXPECT_EQ(0, demuxer_->num_seek_requests());
}
-TEST_F(MediaSourcePlayerTest, VideoConfigChangeContinuesAcrossSeek) {
+TEST_F(MediaSourcePlayerTest, NewSurfaceAfterChangingConfigs) {
SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE();
- // Test if a demuxer config request is pending (due to previously receiving
- // |kConfigChanged|), and a seek request arrives prior to demuxer configs,
- // then seek is processed first, followed by the decoder config change.
- // This assumes the demuxer sends |kConfigChanged| read response prior to
- // canceling any reads pending seek; no |kAborted| is involved in this test.
+ // Test that no seek results from a SetVideoSurface() that occurs after
+ // the player processes new demuxer configs. This test may be good to keep
+ // beyond browser seek hack.
StartConfigChange(false, false, 1);
- MediaDecoderJob* first_job = GetMediaDecoderJob(false);
- EXPECT_TRUE(first_job);
- EXPECT_EQ(1, demuxer_->num_config_requests());
- EXPECT_EQ(2, demuxer_->num_data_requests());
- EXPECT_EQ(0, demuxer_->num_seek_requests());
-
- player_.SeekTo(base::TimeDelta::FromMilliseconds(100));
-
- // Verify that the seek is requested immediately.
- EXPECT_EQ(1, demuxer_->num_seek_requests());
-
- // Simulate unlikely delayed arrival of the demuxer configs, completing the
- // config change.
- // TODO(wolenetz): Is it even possible for requested demuxer configs to be
- // delayed until after a SeekTo request arrives?
- player_.OnDemuxerConfigsAvailable(CreateVideoDemuxerConfigs());
-
- MediaDecoderJob* second_job = GetMediaDecoderJob(false);
- EXPECT_NE(first_job, second_job);
- EXPECT_TRUE(second_job);
-
- // Send back the seek done notification. This should finish the seek and
- // trigger the player to request more data.
- EXPECT_EQ(2, demuxer_->num_data_requests());
- player_.OnDemuxerSeekDone(kNoTimestamp());
+ EXPECT_TRUE(GetMediaDecoderJob(false));
EXPECT_EQ(3, demuxer_->num_data_requests());
-}
-
-TEST_F(MediaSourcePlayerTest, NewSurfaceWhileChangingConfigs) {
- SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE();
-
- // Test that no seek or duplicated demuxer config request results from a
- // SetVideoSurface() that occurs while the player is expecting new demuxer
- // configs. This test may be good to keep beyond browser seek hack.
- StartConfigChange(false, false, 1);
- MediaDecoderJob* first_job = GetMediaDecoderJob(false);
- EXPECT_TRUE(first_job);
- EXPECT_EQ(1, demuxer_->num_config_requests());
- EXPECT_EQ(2, demuxer_->num_data_requests());
CreateNextTextureAndSetVideoSurface();
-
- // Surface change processing (including decoder job re-creation) should
- // not occur until the pending video config change is completed.
- EXPECT_EQ(first_job, GetMediaDecoderJob(false));
-
- player_.OnDemuxerConfigsAvailable(CreateVideoDemuxerConfigs());
- MediaDecoderJob* second_job = GetMediaDecoderJob(false);
- EXPECT_NE(first_job, second_job);
- EXPECT_TRUE(second_job);
-
+ EXPECT_TRUE(GetMediaDecoderJob(false));
EXPECT_EQ(3, demuxer_->num_data_requests());
- EXPECT_EQ(1, demuxer_->num_config_requests());
EXPECT_EQ(0, demuxer_->num_seek_requests());
}
@@ -1975,19 +1876,15 @@ TEST_F(MediaSourcePlayerTest, ConfigChangedThenReleaseThenConfigsAvailable) {
StartConfigChange(true, true, 0);
ReleasePlayer();
- player_.OnDemuxerConfigsAvailable(CreateAudioDemuxerConfigs(kCodecVorbis));
EXPECT_FALSE(GetMediaDecoderJob(true));
EXPECT_FALSE(player_.IsPlaying());
- EXPECT_EQ(1, demuxer_->num_data_requests());
+ EXPECT_EQ(2, demuxer_->num_data_requests());
// Player should resume upon Start(), even without further configs supplied.
player_.Start();
EXPECT_TRUE(GetMediaDecoderJob(true));
EXPECT_TRUE(player_.IsPlaying());
EXPECT_EQ(2, demuxer_->num_data_requests());
-
- // No further config request should have occurred since StartConfigChange().
- EXPECT_EQ(1, demuxer_->num_config_requests());
}
TEST_F(MediaSourcePlayerTest, ConfigChangedThenReleaseThenStart) {
wolenetz 2014/05/02 22:25:30 This test is now entirely a subset of the previous
qinmin 2014/05/05 20:52:19 merged with the above one On 2014/05/02 22:25:30,
@@ -2001,15 +1898,8 @@ TEST_F(MediaSourcePlayerTest, ConfigChangedThenReleaseThenStart) {
player_.Start();
EXPECT_TRUE(player_.IsPlaying());
- EXPECT_FALSE(GetMediaDecoderJob(true));
- EXPECT_EQ(1, demuxer_->num_data_requests());
-
- player_.OnDemuxerConfigsAvailable(CreateAudioDemuxerConfigs(kCodecVorbis));
EXPECT_TRUE(GetMediaDecoderJob(true));
EXPECT_EQ(2, demuxer_->num_data_requests());
-
- // No further config request should have occurred since StartConfigChange().
- EXPECT_EQ(1, demuxer_->num_config_requests());
}
TEST_F(MediaSourcePlayerTest, BrowserSeek_ThenReleaseThenDemuxerSeekDone) {
@@ -2116,9 +2006,6 @@ TEST_F(MediaSourcePlayerTest, CurrentTimeKeepsIncreasingAfterConfigChange) {
DemuxerData data = CreateReadFromDemuxerAckWithConfigChanged(true, 0);
player_.OnDemuxerDataAvailable(data);
WaitForAudioDecodeDone();
-
- // Simulate arrival of new configs.
- player_.OnDemuxerConfigsAvailable(CreateAudioDemuxerConfigs(kCodecVorbis));
DecodeAudioDataUntilOutputBecomesAvailable();
}
« media/base/android/media_decoder_job.cc ('K') | « media/base/android/media_source_player.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698