| Index: content/common/gpu/media/vaapi_video_decode_accelerator.h
|
| diff --git a/content/common/gpu/media/vaapi_video_decode_accelerator.h b/content/common/gpu/media/vaapi_video_decode_accelerator.h
|
| index 6624792c6bd9e7337a334618d074c8a0cb324021..9fdffdee27cf282f870e01cf94e71d164a9d96cf 100644
|
| --- a/content/common/gpu/media/vaapi_video_decode_accelerator.h
|
| +++ b/content/common/gpu/media/vaapi_video_decode_accelerator.h
|
| @@ -32,12 +32,18 @@
|
| // Class to provide video decode acceleration for Intel systems with hardware
|
| // support for it, and on which libva is available.
|
| // Decoding tasks are performed in a separate decoding thread.
|
| +//
|
| +// Threading/life-cycle: this object is created & destroyed on the GPU
|
| +// ChildThread. A few methods on it are called on the decoder thread which is
|
| +// stopped during |this->Destroy()|, so any tasks posted to the decoder thread
|
| +// can assume |*this| is still alive. See |weak_this_| below for more details.
|
| class CONTENT_EXPORT VaapiVideoDecodeAccelerator :
|
| public media::VideoDecodeAccelerator {
|
| public:
|
| VaapiVideoDecodeAccelerator(
|
| Client* client,
|
| const base::Callback<bool(void)>& make_context_current);
|
| + virtual ~VaapiVideoDecodeAccelerator();
|
|
|
| // media::VideoDecodeAccelerator implementation.
|
| virtual bool Initialize(media::VideoCodecProfile profile) OVERRIDE;
|
| @@ -53,8 +59,6 @@ class CONTENT_EXPORT VaapiVideoDecodeAccelerator :
|
| void SetGlxState(Display* x_display, GLXContext glx_context);
|
|
|
| private:
|
| - virtual ~VaapiVideoDecodeAccelerator();
|
| -
|
| // Ensure data has been synced with the output texture and notify
|
| // the client it is ready for displaying.
|
| void SyncAndNotifyPictureReady(int32 input_id, int32 output_id);
|
| @@ -116,6 +120,9 @@ class CONTENT_EXPORT VaapiVideoDecodeAccelerator :
|
| // finished.
|
| void FinishReset();
|
|
|
| + // Helper for Destroy(), doing all the actual work except for deleting self.
|
| + void Cleanup();
|
| +
|
| // Client-provided X/GLX state.
|
| Display* x_display_;
|
| GLXContext glx_context_;
|
| @@ -174,6 +181,14 @@ class CONTENT_EXPORT VaapiVideoDecodeAccelerator :
|
| // ChildThread's message loop
|
| MessageLoop* message_loop_;
|
|
|
| + // WeakPtr<> pointing to |this| for use in posting tasks from the decoder
|
| + // thread back to the ChildThread. Because the decoder thread is a member of
|
| + // this class, any task running on the decoder thread is guaranteed that this
|
| + // object is still alive. As a result, tasks posted from ChildThread to
|
| + // decoder thread should use base::Unretained(this), and tasks posted from the
|
| + // decoder thread to the ChildThread should use |weak_this_|.
|
| + base::WeakPtr<VaapiVideoDecodeAccelerator> weak_this_;
|
| +
|
| // To expose client callbacks from VideoDecodeAccelerator.
|
| // NOTE: all calls to these objects *MUST* be executed on message_loop_.
|
| base::WeakPtrFactory<Client> client_ptr_factory_;
|
|
|