/* * Copyright 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef _ANDROID_GRAPHICS_SURFACE_TEXTURE_PLATFORM_H #define _ANDROID_GRAPHICS_SURFACE_TEXTURE_PLATFORM_H #include #include #include #include #include // This file provides a facade API on top of SurfaceTexture, which avoids using // C++ types. This is still a C++ unstable API though. Ideally features here // will be exposed via public NDK API and this file will be deleted. struct ASurfaceTexture; namespace android { // Trampoline functions allowing libandroid.so to define the NDK symbols without including // the entirety of libnativedisplay as a whole static lib. As libnativedisplay // maintains global state, libnativedisplay can never be directly statically // linked so that global state won't be duplicated. This way libandroid.so can // reroute the NDK methods into the implementations defined by libnativedisplay ANativeWindow* ASurfaceTexture_routeAcquireANativeWindow(ASurfaceTexture* st); int ASurfaceTexture_routeAttachToGLContext(ASurfaceTexture* st, uint32_t texName); int ASurfaceTexture_routeDetachFromGLContext(ASurfaceTexture* st); void ASurfaceTexture_routeRelease(ASurfaceTexture* st); int ASurfaceTexture_routeUpdateTexImage(ASurfaceTexture* st); void ASurfaceTexture_routeGetTransformMatrix(ASurfaceTexture* st, float mtx[16]); int64_t ASurfaceTexture_routeGetTimestamp(ASurfaceTexture* st); ASurfaceTexture* ASurfaceTexture_routeFromSurfaceTexture(JNIEnv* env, jobject surfacetexture); /** * ASurfaceTexture_getCurrentTextureTarget returns the texture target of the * current texture. */ unsigned int ASurfaceTexture_getCurrentTextureTarget(ASurfaceTexture* st); /** * ASurfaceTexture_takeConsumerOwnership attaches an ASurfaceTexture that is * currently in the 'detached' state to a consumer context. */ void ASurfaceTexture_takeConsumerOwnership(ASurfaceTexture* st); /** * ASurfaceTexture_releaseConsumerOwnership detaches a SurfaceTexture from * a consumer context. */ void ASurfaceTexture_releaseConsumerOwnership(ASurfaceTexture* st); /** * Callback function needed by ASurfaceTexture_dequeueBuffer. It creates a * fence that is signalled when the previous buffer is no longer in use by the * consumer (usually HWUI RenderThread) and can be written to by the producer. */ typedef int (*ASurfaceTexture_createReleaseFence)(bool useFenceSync, EGLSyncKHR* eglFence, EGLDisplay* display, int* releaseFence, void* fencePassThroughHandle); /** * Callback function needed by ASurfaceTexture_dequeueBuffer. It waits for the * new buffer fence to signal before issuing any draw commands. */ typedef int (*ASurfaceTexture_fenceWait)(int fence, void* fencePassThroughHandle); /** * ASurfaceTexture_dequeueBuffer returns the next available AHardwareBuffer. * The caller gets ownership of the buffer and need to release it with * AHardwareBuffer_release. */ AHardwareBuffer* ASurfaceTexture_dequeueBuffer( ASurfaceTexture* st, int* outSlotid, android_dataspace* outDataspace, AHdrMetadataType* outHdrType, android_cta861_3_metadata* outCta861_3, android_smpte2086_metadata* outSmpte2086, float* outTransformMatrix, uint32_t* outTransform, bool* outNewContent, ASurfaceTexture_createReleaseFence createFence, ASurfaceTexture_fenceWait fenceWait, void* fencePassThroughHandle, ARect* currentCrop); } // namespace android #endif // _ANDROID_GRAPHICS_SURFACE_TEXTURE_PLATFORM_H