Index: content/renderer/media/webmediaplayer_ms_unittest.cc |
diff --git a/content/renderer/media/webmediaplayer_ms_unittest.cc b/content/renderer/media/webmediaplayer_ms_unittest.cc |
index d02bb0d1ec59c477d8cb989f33f6517a6874a332..96ed019d19a9ba284522e89be7e192d851612a61 100644 |
--- a/content/renderer/media/webmediaplayer_ms_unittest.cc |
+++ b/content/renderer/media/webmediaplayer_ms_unittest.cc |
@@ -137,7 +137,8 @@ class MockMediaStreamVideoRenderer : public MediaStreamVideoRenderer { |
void QueueFrames(const std::vector<int>& timestamps_or_frame_type, |
bool opaque_frame = true, |
bool odd_size_frame = false, |
- int double_size_index = -1); |
+ int double_size_index = -1, |
+ media::VideoRotation rotation = media::VIDEO_ROTATION_0); |
bool Started() { return started_; } |
bool Paused() { return paused_; } |
@@ -197,7 +198,8 @@ void MockMediaStreamVideoRenderer::QueueFrames( |
const std::vector<int>& timestamp_or_frame_type, |
bool opaque_frame, |
bool odd_size_frame, |
- int double_size_index) { |
+ int double_size_index, |
+ media::VideoRotation rotation) { |
gfx::Size standard_size = gfx::Size(kStandardWidth, kStandardHeight); |
for (size_t i = 0; i < timestamp_or_frame_type.size(); i++) { |
const int token = timestamp_or_frame_type[i]; |
@@ -222,11 +224,14 @@ void MockMediaStreamVideoRenderer::QueueFrames( |
} else { |
frame_size.SetSize(standard_size.width(), standard_size.height()); |
} |
+ |
auto frame = media::VideoFrame::CreateZeroInitializedFrame( |
opaque_frame ? media::PIXEL_FORMAT_YV12 : media::PIXEL_FORMAT_YV12A, |
frame_size, gfx::Rect(frame_size), frame_size, |
base::TimeDelta::FromMilliseconds(token)); |
+ frame->metadata()->SetRotation(media::VideoFrameMetadata::ROTATION, |
+ rotation); |
frame->metadata()->SetTimeTicks( |
media::VideoFrameMetadata::Key::REFERENCE_TIME, |
base::TimeTicks::Now() + base::TimeDelta::FromMilliseconds(token)); |
@@ -575,6 +580,9 @@ TEST_F(WebMediaPlayerMSTest, Playing_Normal) { |
CheckSizeChanged(gfx::Size(kStandardWidth, kStandardHeight))); |
message_loop_controller_.RunAndWaitForStatus( |
media::PipelineStatus::PIPELINE_OK); |
+ const blink::WebSize& natural_size = player_->naturalSize(); |
+ EXPECT_EQ(kStandardWidth, natural_size.width); |
+ EXPECT_EQ(kStandardHeight, natural_size.height); |
testing::Mock::VerifyAndClearExpectations(this); |
EXPECT_CALL(*this, DoSetWebLayer(false)); |
@@ -709,6 +717,35 @@ INSTANTIATE_TEST_CASE_P(, |
::testing::Combine(::testing::Bool(), |
::testing::Bool())); |
+// During this test, we check that when we send rotated video frames, it applies |
+// to player's natural size. |
+TEST_F(WebMediaPlayerMSTest, RotatedVideoFrame) { |
+ MockMediaStreamVideoRenderer* provider = LoadAndGetFrameProvider(true); |
+ |
+ static int tokens[] = {0, 33, 66}; |
+ std::vector<int> timestamps(tokens, tokens + sizeof(tokens) / sizeof(int)); |
+ provider->QueueFrames(timestamps, false, false, 17, media::VIDEO_ROTATION_90); |
+ |
+ EXPECT_CALL(*this, DoSetWebLayer(true)); |
+ EXPECT_CALL(*this, DoStartRendering()); |
+ EXPECT_CALL(*this, DoReadyStateChanged( |
+ blink::WebMediaPlayer::ReadyStateHaveMetadata)); |
+ EXPECT_CALL(*this, DoReadyStateChanged( |
+ blink::WebMediaPlayer::ReadyStateHaveEnoughData)); |
+ EXPECT_CALL(*this, |
+ CheckSizeChanged(gfx::Size(kStandardWidth, kStandardHeight))); |
+ message_loop_controller_.RunAndWaitForStatus( |
+ media::PipelineStatus::PIPELINE_OK); |
+ const blink::WebSize& natural_size = player_->naturalSize(); |
+ // Check that height and width are flipped. |
+ EXPECT_EQ(kStandardHeight, natural_size.width); |
+ EXPECT_EQ(kStandardWidth, natural_size.height); |
+ testing::Mock::VerifyAndClearExpectations(this); |
+ |
+ EXPECT_CALL(*this, DoSetWebLayer(false)); |
+ EXPECT_CALL(*this, DoStopRendering()); |
+} |
+ |
TEST_F(WebMediaPlayerMSTest, BackgroundRendering) { |
// During this test, we will switch to background rendering mode, in which |
// WebMediaPlayerMS::pause does not get called, but |