| Index: content/renderer/media/webmediaplayer_ms.cc
|
| diff --git a/content/renderer/media/webmediaplayer_ms.cc b/content/renderer/media/webmediaplayer_ms.cc
|
| index 7d8f77ecc76a90d2fe46b022377d59f59a0dfd8c..e447c524c9465087ed8e2105358dfd501a0c8a4c 100644
|
| --- a/content/renderer/media/webmediaplayer_ms.cc
|
| +++ b/content/renderer/media/webmediaplayer_ms.cc
|
| @@ -498,7 +498,11 @@ void WebMediaPlayerMS::OnFrameAvailable(
|
| } else {
|
| TRACE_EVENT0("webrtc", "WebMediaPlayerMS::OnFrameAvailable");
|
| }
|
| +
|
| const bool is_opaque = media::IsOpaque(frame->format());
|
| + media::VideoRotation video_rotation = media::VIDEO_ROTATION_0;
|
| + ignore_result(frame->metadata()->GetRotation(
|
| + media::VideoFrameMetadata::ROTATION, &video_rotation));
|
|
|
| if (!received_first_frame_) {
|
| received_first_frame_ = true;
|
| @@ -506,28 +510,36 @@ void WebMediaPlayerMS::OnFrameAvailable(
|
| SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata);
|
| SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData);
|
|
|
| - if (video_frame_provider_.get()) {
|
| - ignore_result(frame->metadata()->GetRotation(
|
| - media::VideoFrameMetadata::ROTATION, &video_rotation_));
|
| -
|
| - video_weblayer_.reset(new cc_blink::WebLayerImpl(
|
| - cc::VideoLayer::Create(compositor_.get(), video_rotation_)));
|
| + if (video_frame_provider_.get())
|
| + OnRotationChanged(video_rotation, is_opaque);
|
| + } else {
|
| + // Only configure opacity on changes, since marking it as transparent is
|
| + // expensive, see https://crbug.com/647886.
|
| + if (last_frame_opaque_ != is_opaque) {
|
| + last_frame_opaque_ = is_opaque;
|
| video_weblayer_->layer()->SetContentsOpaque(is_opaque);
|
| - video_weblayer_->SetContentsOpaqueIsFixed(true);
|
| - get_client()->setWebLayer(video_weblayer_.get());
|
| }
|
| - }
|
| -
|
| - // Only configure opacity on changes, since marking it as transparent is
|
| - // expensive, see https://crbug.com/647886.
|
| - if (video_weblayer_ && last_frame_opaque_ != is_opaque) {
|
| - last_frame_opaque_ = is_opaque;
|
| - video_weblayer_->layer()->SetContentsOpaque(is_opaque);
|
| + // Reset |video_weblayer_| with the updated rotation.
|
| + if (video_rotation_ != video_rotation)
|
| + OnRotationChanged(video_rotation, is_opaque);
|
| }
|
|
|
| compositor_->EnqueueFrame(frame);
|
| }
|
|
|
| +void WebMediaPlayerMS::OnRotationChanged(media::VideoRotation video_rotation,
|
| + bool is_opaque) {
|
| + DVLOG(1) << __func__;
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| + video_rotation_ = video_rotation;
|
| +
|
| + video_weblayer_.reset(new cc_blink::WebLayerImpl(
|
| + cc::VideoLayer::Create(compositor_.get(), video_rotation)));
|
| + video_weblayer_->layer()->SetContentsOpaque(is_opaque);
|
| + video_weblayer_->SetContentsOpaqueIsFixed(true);
|
| + get_client()->setWebLayer(video_weblayer_.get());
|
| +}
|
| +
|
| void WebMediaPlayerMS::RepaintInternal() {
|
| DVLOG(1) << __func__;
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
|
|