• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2018 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 /**
18  * @addtogroup SurfaceTexture
19  * @{
20  */
21 
22 /**
23  * @file surface_texture.h
24  */
25 
26 #ifndef ANDROID_NATIVE_SURFACE_TEXTURE_H
27 #define ANDROID_NATIVE_SURFACE_TEXTURE_H
28 
29 /******************************************************************
30  *
31  * IMPORTANT NOTICE:
32  *
33  *   This file is part of Android's set of stable system headers
34  *   exposed by the Android NDK (Native Development Kit).
35  *
36  *   Third-party source AND binary code relies on the definitions
37  *   here to be FROZEN ON ALL UPCOMING PLATFORM RELEASES.
38  *
39  *   - DO NOT MODIFY ENUMS (EXCEPT IF YOU ADD NEW 32-BIT VALUES)
40  *   - DO NOT MODIFY CONSTANTS OR FUNCTIONAL MACROS
41  *   - DO NOT CHANGE THE SIGNATURE OF FUNCTIONS IN ANY WAY
42  *   - DO NOT CHANGE THE LAYOUT OR SIZE OF STRUCTURES
43  */
44 
45 #include <stdint.h>
46 #include <sys/cdefs.h>
47 
48 #include <android/native_window.h>
49 
50 __BEGIN_DECLS
51 
52 struct ASurfaceTexture;
53 
54 /**
55  * {@link ASurfaceTexture} is an opaque type to manage SurfaceTexture from native code
56  *
57  * {@link ASurfaceTexture} can be obtained from an android.graphics.SurfaceTexture object using
58  * ASurfaceTexture_fromSurfaceTexture().
59  */
60 typedef struct ASurfaceTexture ASurfaceTexture;
61 
62 /**
63  * Release the reference to the native ASurfaceTexture acquired with
64  * ASurfaceTexture_fromSurfaceTexture().
65  * Failing to do so will result in leaked memory and graphic resources.
66  *
67  * Available since API level 28.
68  *
69  * \param st A ASurfaceTexture reference acquired with ASurfaceTexture_fromSurfaceTexture()
70  */
71 void ASurfaceTexture_release(ASurfaceTexture* st) __INTRODUCED_IN(28);
72 
73 /**
74  * Returns a reference to an ANativeWindow (i.e. the Producer) for this SurfaceTexture.
75  * This is equivalent to Java's: Surface sur = new Surface(surfaceTexture);
76  *
77  * Available since API level 28.
78  *
79  * \param st A ASurfaceTexture reference acquired with ASurfaceTexture_fromSurfaceTexture()
80  * @return A reference to an ANativeWindow. This reference MUST BE released when no longer needed
81  * using ANativeWindow_release(). Failing to do so will result in leaked resources. nullptr is
82  * returned if \p st is null or if it's not an instance of android.graphics.SurfaceTexture
83  */
84 ANativeWindow* ASurfaceTexture_acquireANativeWindow(ASurfaceTexture* st) __INTRODUCED_IN(28);
85 
86 /**
87  * Attach the SurfaceTexture to the OpenGL ES context that is current on the calling thread.  A
88  * new OpenGL ES texture object is created and populated with the SurfaceTexture image frame
89  * that was current at the time of the last call to {@link ASurfaceTexture_detachFromGLContext}.
90  * This new texture is bound to the GL_TEXTURE_EXTERNAL_OES texture target.
91  *
92  * This can be used to access the SurfaceTexture image contents from multiple OpenGL ES
93  * contexts.  Note, however, that the image contents are only accessible from one OpenGL ES
94  * context at a time.
95  *
96  * Available since API level 28.
97  *
98  * \param st A ASurfaceTexture reference acquired with ASurfaceTexture_fromSurfaceTexture()
99  * \param texName The name of the OpenGL ES texture that will be created.  This texture name
100  * must be unusued in the OpenGL ES context that is current on the calling thread.
101  * \return 0 on success, negative posix error code otherwise (see <errno.h>)
102  */
103 int ASurfaceTexture_attachToGLContext(ASurfaceTexture* st, uint32_t texName) __INTRODUCED_IN(28);
104 
105 /**
106  * Detach the SurfaceTexture from the OpenGL ES context that owns the OpenGL ES texture object.
107  * This call must be made with the OpenGL ES context current on the calling thread.  The OpenGL
108  * ES texture object will be deleted as a result of this call.  After calling this method all
109  * calls to {@link ASurfaceTexture_updateTexImage} will fail until a successful call to
110  * {@link ASurfaceTexture_attachToGLContext} is made.
111  *
112  * This can be used to access the SurfaceTexture image contents from multiple OpenGL ES
113  * contexts.  Note, however, that the image contents are only accessible from one OpenGL ES
114  * context at a time.
115  *
116  * Available since API level 28.
117  *
118  * \param st A ASurfaceTexture reference acquired with ASurfaceTexture_fromSurfaceTexture()
119  * \return 0 on success, negative posix error code otherwise (see <errno.h>)
120  */
121 int ASurfaceTexture_detachFromGLContext(ASurfaceTexture* st) __INTRODUCED_IN(28);
122 
123 /**
124  * Update the texture image to the most recent frame from the image stream.  This may only be
125  * called while the OpenGL ES context that owns the texture is current on the calling thread.
126  * It will implicitly bind its texture to the GL_TEXTURE_EXTERNAL_OES texture target.
127  *
128  * Available since API level 28.
129  *
130  * \param st A ASurfaceTexture reference acquired with ASurfaceTexture_fromSurfaceTexture()
131  * \return 0 on success, negative posix error code otherwise (see <errno.h>)
132  */
133 int ASurfaceTexture_updateTexImage(ASurfaceTexture* st) __INTRODUCED_IN(28);
134 
135 /**
136  * Retrieve the 4x4 texture coordinate transform matrix associated with the texture image set by
137  * the most recent call to updateTexImage.
138  *
139  * This transform matrix maps 2D homogeneous texture coordinates of the form (s, t, 0, 1) with s
140  * and t in the inclusive range [0, 1] to the texture coordinate that should be used to sample
141  * that location from the texture.  Sampling the texture outside of the range of this transform
142  * is undefined.
143  *
144  * The matrix is stored in column-major order so that it may be passed directly to OpenGL ES via
145  * the glLoadMatrixf or glUniformMatrix4fv functions.
146  *
147  * Available since API level 28.
148  *
149  * \param st A ASurfaceTexture reference acquired with ASurfaceTexture_fromSurfaceTexture()
150  * \param mtx the array into which the 4x4 matrix will be stored.  The array must have exactly
151  *     16 elements.
152  */
153 void ASurfaceTexture_getTransformMatrix(ASurfaceTexture* st, float mtx[16]) __INTRODUCED_IN(28);
154 
155 /**
156  * Retrieve the timestamp associated with the texture image set by the most recent call to
157  * updateTexImage.
158  *
159  * This timestamp is in nanoseconds, and is normally monotonically increasing. The timestamp
160  * should be unaffected by time-of-day adjustments, and for a camera should be strictly
161  * monotonic but for a MediaPlayer may be reset when the position is set.  The
162  * specific meaning and zero point of the timestamp depends on the source providing images to
163  * the SurfaceTexture. Unless otherwise specified by the image source, timestamps cannot
164  * generally be compared across SurfaceTexture instances, or across multiple program
165  * invocations. It is mostly useful for determining time offsets between subsequent frames.
166  *
167  * For EGL/Vulkan producers, this timestamp is the desired present time set with the
168  * EGL_ANDROID_presentation_time or VK_GOOGLE_display_timing extensions
169  *
170  * Available since API level 28.
171  *
172  * \param st A ASurfaceTexture reference acquired with ASurfaceTexture_fromSurfaceTexture()
173  */
174 int64_t ASurfaceTexture_getTimestamp(ASurfaceTexture* st) __INTRODUCED_IN(28);
175 
176 __END_DECLS
177 
178 #endif /* ANDROID_NATIVE_SURFACE_TEXTURE_H */
179 
180 /** @} */
181