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

Unified Diff: cc/layers/video_frame_provider_client_impl.cc

Issue 1033563002: cc: Various code safety improvements in video compositing code. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments Created 5 years, 9 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: cc/layers/video_frame_provider_client_impl.cc
diff --git a/cc/layers/video_frame_provider_client_impl.cc b/cc/layers/video_frame_provider_client_impl.cc
index 4bbd92f284b74584f3e6c37ddc0b30f21179fe7f..68e10dc58edfbffaa3d53cf4466a2a675aad305d 100644
--- a/cc/layers/video_frame_provider_client_impl.cc
+++ b/cc/layers/video_frame_provider_client_impl.cc
@@ -13,17 +13,13 @@ namespace cc {
// static
scoped_refptr<VideoFrameProviderClientImpl>
- VideoFrameProviderClientImpl::Create(
- VideoFrameProvider* provider) {
- return make_scoped_refptr(
- new VideoFrameProviderClientImpl(provider));
+VideoFrameProviderClientImpl::Create(VideoFrameProvider* provider) {
+ return make_scoped_refptr(new VideoFrameProviderClientImpl(provider));
}
-VideoFrameProviderClientImpl::~VideoFrameProviderClientImpl() {}
-
VideoFrameProviderClientImpl::VideoFrameProviderClientImpl(
VideoFrameProvider* provider)
- : active_video_layer_(nullptr), provider_(provider) {
+ : provider_(provider), active_video_layer_(nullptr), stopped_(false) {
// This only happens during a commit on the compositor thread while the main
// thread is blocked. That makes this a thread-safe call to set the video
// frame provider client that does not require a lock. The same is true of
@@ -39,6 +35,16 @@ VideoFrameProviderClientImpl::VideoFrameProviderClientImpl(
0.0, 0.0, 0.0, 1.0);
}
+VideoFrameProviderClientImpl::~VideoFrameProviderClientImpl() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(stopped_);
+}
+
+VideoLayerImpl* VideoFrameProviderClientImpl::ActiveVideoLayer() const {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ return active_video_layer_;
+}
+
void VideoFrameProviderClientImpl::SetActiveVideoLayer(
VideoLayerImpl* video_layer) {
DCHECK(thread_checker_.CalledOnValidThread());
@@ -47,19 +53,19 @@ void VideoFrameProviderClientImpl::SetActiveVideoLayer(
}
void VideoFrameProviderClientImpl::Stop() {
- // It's called when the main thread is blocked, so lock isn't needed.
- if (!provider_)
- return;
DCHECK(thread_checker_.CalledOnValidThread());
- provider_->SetVideoFrameProviderClient(nullptr);
- provider_ = nullptr;
+ // It's called when the main thread is blocked, so lock isn't needed.
+ if (provider_) {
+ provider_->SetVideoFrameProviderClient(nullptr);
+ provider_ = nullptr;
+ }
+ active_video_layer_ = nullptr;
+ stopped_ = true;
}
-bool VideoFrameProviderClientImpl::Stopped() {
+bool VideoFrameProviderClientImpl::Stopped() const {
DCHECK(thread_checker_.CalledOnValidThread());
- // |provider_| is changed while the main thread is blocked, and not changed
- // thereafter, so lock isn't needed.
- return !provider_;
+ return stopped_;
}
scoped_refptr<media::VideoFrame>
@@ -85,6 +91,12 @@ void VideoFrameProviderClientImpl::ReleaseLock() {
provider_lock_.Release();
}
+const gfx::Transform& VideoFrameProviderClientImpl::StreamTextureMatrix()
+ const {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ return stream_texture_matrix_;
+}
+
void VideoFrameProviderClientImpl::StopUsingProvider() {
// Block the provider from shutting down until this client is done
// using the frame.

Powered by Google App Engine
This is Rietveld 408576698