diff -r 000000000000 -r 6474c204b198 gfx/thebes/nsSurfaceTexture.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gfx/thebes/nsSurfaceTexture.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,70 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +// vim:set ts=2 sts=2 sw=2 et cin: +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef nsSurfaceTexture_h__ +#define nsSurfaceTexture_h__ +#ifdef MOZ_WIDGET_ANDROID + +#include +#include "nsIRunnable.h" +#include "gfxPlatform.h" +#include "GLDefs.h" + +namespace mozilla { +namespace gfx { +class Matrix4x4; +} +} + +/** + * This class is a wrapper around Android's SurfaceTexture class. + * Usage is pretty much exactly like the Java class, so see + * the Android documentation for details. + */ +class nsSurfaceTexture MOZ_FINAL { + NS_INLINE_DECL_THREADSAFE_REFCOUNTING(nsSurfaceTexture) + +public: + static nsSurfaceTexture* Create(GLuint aTexture); + static nsSurfaceTexture* Find(int id); + + // Returns with reasonable certainty whether or not we'll + // be able to create and use a SurfaceTexture + static bool Check(); + + // This is an ANativeWindow. Use AndroidBridge::LockWindow and + // friends for manipulating it. + void* GetNativeWindow(); + + // This attaches the updated data to the TEXTURE_EXTERNAL target + void UpdateTexImage(); + + bool GetTransformMatrix(mozilla::gfx::Matrix4x4& aMatrix); + int ID() { return mID; } + + // The callback is guaranteed to be called on the main thread even + // if the upstream callback is received on a different thread + void SetFrameAvailableCallback(nsIRunnable* aRunnable); + + // Only should be called by AndroidJNI when we get a + // callback from the underlying SurfaceTexture instance + void NotifyFrameAvailable(); +private: + nsSurfaceTexture(); + + // Private destructor, to discourage deletion outside of Release(): + ~nsSurfaceTexture(); + + bool Init(GLuint aTexture); + + jobject mSurfaceTexture; + void* mNativeWindow; + int mID; + nsRefPtr mFrameAvailableCallback; +}; + +#endif +#endif