Chromium Code Reviews| 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 9cb2b411b66c13c8d0c354ffc1db88d428167189..366ec8cd01ece8a1f6fb4bb6b6e299d700e34759 100644 |
| --- a/media/base/android/media_source_player_unittest.cc |
| +++ b/media/base/android/media_source_player_unittest.cc |
| @@ -45,6 +45,7 @@ class MockMediaPlayerManager : public MediaPlayerManager { |
| : message_loop_(message_loop), |
| playback_completed_(false), |
| num_resources_requested_(0), |
| + num_metadata_changes_(0), |
| timestamp_updated_(false) {} |
| virtual ~MockMediaPlayerManager() {} |
| @@ -62,7 +63,9 @@ class MockMediaPlayerManager : public MediaPlayerManager { |
| } |
| virtual void OnMediaMetadataChanged( |
| int player_id, base::TimeDelta duration, int width, int height, |
| - bool success) OVERRIDE {} |
| + bool success) OVERRIDE { |
| + num_metadata_changes_++; |
| + } |
| virtual void OnPlaybackComplete(int player_id) OVERRIDE { |
| playback_completed_ = true; |
| if (message_loop_->is_running()) |
| @@ -92,6 +95,10 @@ class MockMediaPlayerManager : public MediaPlayerManager { |
| return num_resources_requested_; |
| } |
| + int num_metadata_changes() const { |
| + return num_metadata_changes_; |
| + } |
| + |
| void OnMediaResourcesRequested(int player_id) { |
| num_resources_requested_++; |
| } |
| @@ -109,6 +116,8 @@ class MockMediaPlayerManager : public MediaPlayerManager { |
| bool playback_completed_; |
| // The number of resource requests this object has seen. |
| int num_resources_requested_; |
| + // The number of metadata changes reported by the player. |
| + int num_metadata_changes_; |
| // Playback timestamp was updated. |
| bool timestamp_updated_; |
| @@ -272,7 +281,7 @@ class MediaSourcePlayerTest : public testing::Test { |
| DemuxerConfigs configs; |
| configs.video_codec = kCodecVP8; |
| configs.video_size = |
| - use_larger_size ? gfx::Size(640, 480) : gfx::Size(320, 240); |
| + use_larger_size ? gfx::Size(640, 240) : gfx::Size(320, 240); |
| configs.is_video_encrypted = false; |
| configs.duration = kDefaultDuration; |
| return configs; |
| @@ -2258,4 +2267,30 @@ TEST_F(MediaSourcePlayerTest, CurrentTimeKeepsIncreasingAfterConfigChange) { |
| DecodeAudioDataUntilOutputBecomesAvailable(); |
| } |
| +TEST_F(MediaSourcePlayerTest, VideoMetadataChangeAfterConfigChange) { |
| + SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
| + |
| + // Test that after a config change, metadata change will be happen |
| + // after decoder is drained. |
| + StartConfigChange(false, true, 2, false); |
| + EXPECT_EQ(1, manager_.num_metadata_changes()); |
| + EXPECT_FALSE(IsDrainingDecoder(false)); |
| + |
| + // Create video data with new resolutions. |
| + DemuxerData data = CreateReadFromDemuxerAckForVideo(); |
| + AccessUnit unit; |
| + unit.status = DemuxerStream::kOk; |
| + scoped_refptr<DecoderBuffer> buffer = ReadTestDataFile("vp8-I-frame-640x240"); |
| + unit.data = std::vector<uint8>( |
| + buffer->data(), buffer->data() + buffer->data_size()); |
| + data.access_units[0] = unit; |
| + |
| + // Wait for the metadata change. |
| + while(manager_.num_metadata_changes() == 1) { |
|
wolenetz
2014/10/08 19:41:33
Do we need this while()? Or is WaitForVideoDecodeD
qinmin
2014/10/08 22:52:41
When the format changes, we don't know how long th
|
| + player_.OnDemuxerDataAvailable(data); |
| + WaitForVideoDecodeDone(); |
| + } |
| + EXPECT_EQ(2, manager_.num_metadata_changes()); |
| +} |
| + |
| } // namespace media |