diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /gfx/gl/AndroidSurfaceTexture.h | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'gfx/gl/AndroidSurfaceTexture.h')
-rw-r--r-- | gfx/gl/AndroidSurfaceTexture.h | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/gfx/gl/AndroidSurfaceTexture.h b/gfx/gl/AndroidSurfaceTexture.h new file mode 100644 index 000000000..056fab326 --- /dev/null +++ b/gfx/gl/AndroidSurfaceTexture.h @@ -0,0 +1,107 @@ +/* -*- 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 AndroidSurfaceTexture_h__ +#define AndroidSurfaceTexture_h__ +#ifdef MOZ_WIDGET_ANDROID + +#include <jni.h> +#include <android/native_window.h> +#include "nsIRunnable.h" +#include "gfxPlatform.h" +#include "GLDefs.h" +#include "mozilla/gfx/2D.h" +#include "mozilla/gfx/MatrixFwd.h" +#include "mozilla/Monitor.h" + +#include "GeneratedJNIWrappers.h" +#include "SurfaceTexture.h" + +namespace mozilla { +namespace gl { + +class GLContext; + +/** + * 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 AndroidSurfaceTexture { + NS_INLINE_DECL_THREADSAFE_REFCOUNTING(AndroidSurfaceTexture) + +public: + + // The SurfaceTexture is created in an attached state. This method requires + // Android Ice Cream Sandwich. + static already_AddRefed<AndroidSurfaceTexture> Create(GLContext* aGLContext, GLuint aTexture); + + // Here the SurfaceTexture will be created in a detached state. You must call + // Attach() with the GLContext you wish to composite with. It must be done + // on the thread where that GLContext is current. This method requires + // Android Jelly Bean. + static already_AddRefed<AndroidSurfaceTexture> Create(); + + // If we are on Jelly Bean, the SurfaceTexture can be detached and reattached + // to allow consumption from different GLContexts. It is recommended to only + // attach while you are consuming in order to allow this. + // + // Only one GLContext may be attached at any given time. If another is already + // attached, we try to wait for it to become detached. + nsresult Attach(GLContext* aContext, PRIntervalTime aTiemout = PR_INTERVAL_NO_TIMEOUT); + + nsresult Detach(); + + // Ability to detach is based on API version (16+), and we also block PowerVR + // since it has some type of fencing problem. Bug 1100126. + bool CanDetach() const; + + GLContext* AttachedContext() const { return mAttachedContext; } + + ANativeWindow* NativeWindow() const { + return mNativeWindow; + } + + // This attaches the updated data to the TEXTURE_EXTERNAL target + void UpdateTexImage(); + + void GetTransformMatrix(mozilla::gfx::Matrix4x4& aMatrix) const; + + void SetDefaultSize(mozilla::gfx::IntSize size); + + // 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); + + GLuint Texture() const { return mTexture; } + const java::sdk::Surface::Ref& JavaSurface() const { return mSurface; } + +private: + class Listener; + + AndroidSurfaceTexture(); + ~AndroidSurfaceTexture(); + + bool Init(GLContext* aContext, GLuint aTexture); + + GLuint mTexture; + java::sdk::SurfaceTexture::GlobalRef mSurfaceTexture; + java::sdk::Surface::GlobalRef mSurface; + java::SurfaceTextureListener::GlobalRef mListener; + + GLContext* mAttachedContext; + + ANativeWindow* mNativeWindow; + + Monitor mMonitor; +}; + +} +} + + +#endif +#endif |