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

Unified Diff: content/renderer/media/webmediaplayer_ms.cc

Issue 2547773003: Reset WebMediaPlayerMS video layer on rotation change (Closed)
Patch Set: Reset WebMediaPlayerMS video layer on rotation change Created 4 years 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
« no previous file with comments | « content/renderer/media/webmediaplayer_ms.h ('k') | content/renderer/media/webmediaplayer_ms_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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());
« no previous file with comments | « content/renderer/media/webmediaplayer_ms.h ('k') | content/renderer/media/webmediaplayer_ms_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698