Index: content/common/gpu/media/omx_video_decode_accelerator.h |
diff --git a/content/common/gpu/media/omx_video_decode_accelerator.h b/content/common/gpu/media/omx_video_decode_accelerator.h |
index 4c246d0553482f244ea416cbf8bd3f03d7bddd4c..edced282a9248fa982c0325214f219cfd1b90743 100644 |
--- a/content/common/gpu/media/omx_video_decode_accelerator.h |
+++ b/content/common/gpu/media/omx_video_decode_accelerator.h |
@@ -15,7 +15,9 @@ |
#include "base/bind.h" |
#include "base/callback.h" |
+#include "base/compiler_specific.h" |
#include "base/logging.h" |
+#include "base/memory/ref_counted.h" |
#include "base/message_loop.h" |
#include "base/shared_memory.h" |
#include "media/video/video_decode_accelerator.h" |
@@ -31,12 +33,13 @@ |
// |
// This class lives on a single thread and DCHECKs that it is never accessed |
// from any other. OMX callbacks are trampolined from the OMX component's |
-// thread to maintain this invariant. |
+// thread to maintain this invariant. The only exception to thread-unsafety is |
+// that references can be added from any thread (practically used only by the |
+// OMX thread). |
class OmxVideoDecodeAccelerator : public media::VideoDecodeAccelerator { |
public: |
// Does not take ownership of |client| which must outlive |*this|. |
OmxVideoDecodeAccelerator(media::VideoDecodeAccelerator::Client* client); |
- virtual ~OmxVideoDecodeAccelerator(); |
// media::VideoDecodeAccelerator implementation. |
bool Initialize(const std::vector<uint32>& config) OVERRIDE; |
@@ -51,6 +54,8 @@ class OmxVideoDecodeAccelerator : public media::VideoDecodeAccelerator { |
void SetEglState(EGLDisplay egl_display, EGLContext egl_context); |
private: |
+ virtual ~OmxVideoDecodeAccelerator(); |
+ |
// Because OMX state-transitions are described solely by the "state reached" |
// (3.1.2.9.1, table 3-7 of the spec), we track what transition was requested |
// using this enum. Note that it is an error to request a transition while |
@@ -84,7 +89,6 @@ class OmxVideoDecodeAccelerator : public media::VideoDecodeAccelerator { |
// Create the Component for OMX. Handles all OMX initialization. |
bool CreateComponent(); |
- void ShutdownComponent(); |
// Buffer allocation/free methods for input and output buffers. |
bool AllocateInputBuffers(); |
bool AllocateOutputBuffers(); |
@@ -110,6 +114,8 @@ class OmxVideoDecodeAccelerator : public media::VideoDecodeAccelerator { |
void OnReachedLoadedInDestroying(); |
void OnReachedEOSInFlushing(); |
void OnReachedInvalidInErroring(); |
+ void ShutdownComponent(); |
+ void BusyLoopInDestroying(); |
// Port-flushing helpers. |
void FlushIOPorts(); |