1*61046927SAndroid Build Coastguard Worker /* 2*61046927SAndroid Build Coastguard Worker * Copyright (C) 2017 The Android Open Source Project 3*61046927SAndroid Build Coastguard Worker * 4*61046927SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*61046927SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*61046927SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*61046927SAndroid Build Coastguard Worker * 8*61046927SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*61046927SAndroid Build Coastguard Worker * 10*61046927SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*61046927SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*61046927SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*61046927SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*61046927SAndroid Build Coastguard Worker * limitations under the License. 15*61046927SAndroid Build Coastguard Worker */ 16*61046927SAndroid Build Coastguard Worker 17*61046927SAndroid Build Coastguard Worker #pragma once 18*61046927SAndroid Build Coastguard Worker 19*61046927SAndroid Build Coastguard Worker #include <stdint.h> 20*61046927SAndroid Build Coastguard Worker #include <stdbool.h> 21*61046927SAndroid Build Coastguard Worker #include <string.h> 22*61046927SAndroid Build Coastguard Worker #include <sys/cdefs.h> 23*61046927SAndroid Build Coastguard Worker #include <system/graphics-base.h> 24*61046927SAndroid Build Coastguard Worker #include <cutils/native_handle.h> 25*61046927SAndroid Build Coastguard Worker 26*61046927SAndroid Build Coastguard Worker __BEGIN_DECLS 27*61046927SAndroid Build Coastguard Worker 28*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus 29*61046927SAndroid Build Coastguard Worker #define ANDROID_NATIVE_UNSIGNED_CAST(x) static_cast<unsigned int>(x) 30*61046927SAndroid Build Coastguard Worker #else 31*61046927SAndroid Build Coastguard Worker #define ANDROID_NATIVE_UNSIGNED_CAST(x) ((unsigned int)(x)) 32*61046927SAndroid Build Coastguard Worker #endif 33*61046927SAndroid Build Coastguard Worker 34*61046927SAndroid Build Coastguard Worker #define ANDROID_NATIVE_MAKE_CONSTANT(a,b,c,d) \ 35*61046927SAndroid Build Coastguard Worker ((ANDROID_NATIVE_UNSIGNED_CAST(a) << 24) | \ 36*61046927SAndroid Build Coastguard Worker (ANDROID_NATIVE_UNSIGNED_CAST(b) << 16) | \ 37*61046927SAndroid Build Coastguard Worker (ANDROID_NATIVE_UNSIGNED_CAST(c) << 8) | \ 38*61046927SAndroid Build Coastguard Worker (ANDROID_NATIVE_UNSIGNED_CAST(d))) 39*61046927SAndroid Build Coastguard Worker 40*61046927SAndroid Build Coastguard Worker #define ANDROID_NATIVE_BUFFER_MAGIC ANDROID_NATIVE_MAKE_CONSTANT('_','b','f','r') 41*61046927SAndroid Build Coastguard Worker 42*61046927SAndroid Build Coastguard Worker 43*61046927SAndroid Build Coastguard Worker typedef struct android_native_base_t 44*61046927SAndroid Build Coastguard Worker { 45*61046927SAndroid Build Coastguard Worker /* a magic value defined by the actual EGL native type */ 46*61046927SAndroid Build Coastguard Worker int magic; 47*61046927SAndroid Build Coastguard Worker 48*61046927SAndroid Build Coastguard Worker /* the sizeof() of the actual EGL native type */ 49*61046927SAndroid Build Coastguard Worker int version; 50*61046927SAndroid Build Coastguard Worker 51*61046927SAndroid Build Coastguard Worker void* reserved[4]; 52*61046927SAndroid Build Coastguard Worker 53*61046927SAndroid Build Coastguard Worker /* reference-counting interface */ 54*61046927SAndroid Build Coastguard Worker void (*incRef)(struct android_native_base_t* base); 55*61046927SAndroid Build Coastguard Worker void (*decRef)(struct android_native_base_t* base); 56*61046927SAndroid Build Coastguard Worker } android_native_base_t; 57*61046927SAndroid Build Coastguard Worker 58*61046927SAndroid Build Coastguard Worker typedef struct android_native_rect_t 59*61046927SAndroid Build Coastguard Worker { 60*61046927SAndroid Build Coastguard Worker int32_t left; 61*61046927SAndroid Build Coastguard Worker int32_t top; 62*61046927SAndroid Build Coastguard Worker int32_t right; 63*61046927SAndroid Build Coastguard Worker int32_t bottom; 64*61046927SAndroid Build Coastguard Worker } android_native_rect_t; 65*61046927SAndroid Build Coastguard Worker 66*61046927SAndroid Build Coastguard Worker typedef struct ANativeWindowBuffer 67*61046927SAndroid Build Coastguard Worker { 68*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus ANativeWindowBufferANativeWindowBuffer69*61046927SAndroid Build Coastguard Worker ANativeWindowBuffer() { 70*61046927SAndroid Build Coastguard Worker common.magic = ANDROID_NATIVE_BUFFER_MAGIC; 71*61046927SAndroid Build Coastguard Worker common.version = sizeof(ANativeWindowBuffer); 72*61046927SAndroid Build Coastguard Worker memset(common.reserved, 0, sizeof(common.reserved)); 73*61046927SAndroid Build Coastguard Worker } 74*61046927SAndroid Build Coastguard Worker 75*61046927SAndroid Build Coastguard Worker // Implement the methods that sp<ANativeWindowBuffer> expects so that it 76*61046927SAndroid Build Coastguard Worker // can be used to automatically refcount ANativeWindowBuffer's. incStrongANativeWindowBuffer77*61046927SAndroid Build Coastguard Worker void incStrong(const void* /*id*/) const { 78*61046927SAndroid Build Coastguard Worker common.incRef(const_cast<android_native_base_t*>(&common)); 79*61046927SAndroid Build Coastguard Worker } decStrongANativeWindowBuffer80*61046927SAndroid Build Coastguard Worker void decStrong(const void* /*id*/) const { 81*61046927SAndroid Build Coastguard Worker common.decRef(const_cast<android_native_base_t*>(&common)); 82*61046927SAndroid Build Coastguard Worker } 83*61046927SAndroid Build Coastguard Worker #endif 84*61046927SAndroid Build Coastguard Worker 85*61046927SAndroid Build Coastguard Worker struct android_native_base_t common; 86*61046927SAndroid Build Coastguard Worker 87*61046927SAndroid Build Coastguard Worker int width; 88*61046927SAndroid Build Coastguard Worker int height; 89*61046927SAndroid Build Coastguard Worker int stride; 90*61046927SAndroid Build Coastguard Worker int format; 91*61046927SAndroid Build Coastguard Worker int usage_deprecated; 92*61046927SAndroid Build Coastguard Worker uintptr_t layerCount; 93*61046927SAndroid Build Coastguard Worker 94*61046927SAndroid Build Coastguard Worker void* reserved[1]; 95*61046927SAndroid Build Coastguard Worker 96*61046927SAndroid Build Coastguard Worker const native_handle_t* handle; 97*61046927SAndroid Build Coastguard Worker uint64_t usage; 98*61046927SAndroid Build Coastguard Worker 99*61046927SAndroid Build Coastguard Worker // we needed extra space for storing the 64-bits usage flags 100*61046927SAndroid Build Coastguard Worker // the number of slots to use from reserved_proc depends on the 101*61046927SAndroid Build Coastguard Worker // architecture. 102*61046927SAndroid Build Coastguard Worker void* reserved_proc[8 - (sizeof(uint64_t) / sizeof(void*))]; 103*61046927SAndroid Build Coastguard Worker } ANativeWindowBuffer_t; 104*61046927SAndroid Build Coastguard Worker 105*61046927SAndroid Build Coastguard Worker typedef struct ANativeWindowBuffer ANativeWindowBuffer; 106*61046927SAndroid Build Coastguard Worker 107*61046927SAndroid Build Coastguard Worker // Old typedef for backwards compatibility. 108*61046927SAndroid Build Coastguard Worker typedef ANativeWindowBuffer_t android_native_buffer_t; 109*61046927SAndroid Build Coastguard Worker 110*61046927SAndroid Build Coastguard Worker __END_DECLS 111