Chromium Code Reviews| 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..440914774c2dd3700c4cd87c8785705d87991add 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), destroyed_(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(destroyed_); |
| +} |
| + |
| +VideoLayerImpl* VideoFrameProviderClientImpl::ActiveVideoLayer() const { |
| + DCHECK(thread_checker_.CalledOnValidThread()); |
| + return active_video_layer_; |
| +} |
| + |
| void VideoFrameProviderClientImpl::SetActiveVideoLayer( |
| VideoLayerImpl* video_layer) { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| @@ -46,20 +52,20 @@ void VideoFrameProviderClientImpl::SetActiveVideoLayer( |
| active_video_layer_ = video_layer; |
| } |
| -void VideoFrameProviderClientImpl::Stop() { |
| - // It's called when the main thread is blocked, so lock isn't needed. |
| - if (!provider_) |
| - return; |
| +void VideoFrameProviderClientImpl::Destroy() { |
|
danakj
2015/03/26 22:38:35
I would weakly prefer to keep these as Stop()/Stop
sunnyps
2015/03/27 00:38:46
Done.
|
| 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; |
| + destroyed_ = true; |
| } |
| -bool VideoFrameProviderClientImpl::Stopped() { |
| +bool VideoFrameProviderClientImpl::Destroyed() 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 destroyed_; |
| } |
| 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. |