ANativeObjectBase.h revision 5e67f87430d581155c700bb33ac0b43ed5de20b7
1076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian/* 2076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * Copyright (C) 2009 The Android Open Source Project 3076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * 4076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 5076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * you may not use this file except in compliance with the License. 6076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * You may obtain a copy of the License at 7076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * 8076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 9076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * 10076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * Unless required by applicable law or agreed to in writing, software 11076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 12076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * See the License for the specific language governing permissions and 14076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * limitations under the License. 15076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian */ 16076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 17076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#ifndef ANDROID_ANDROID_NATIVES_H 18076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#define ANDROID_ANDROID_NATIVES_H 19076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 20076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#include <sys/types.h> 21076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#include <string.h> 22076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 23076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#include <hardware/gralloc.h> 24076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 25076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#ifdef __cplusplus 26076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopianextern "C" { 27076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#endif 28076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 29076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian/*****************************************************************************/ 30076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 31076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#define ANDROID_NATIVE_MAKE_CONSTANT(a,b,c,d) \ 32076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian (((unsigned)(a)<<24)|((unsigned)(b)<<16)|((unsigned)(c)<<8)|(unsigned)(d)) 33076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 34076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#define ANDROID_NATIVE_WINDOW_MAGIC \ 35076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian ANDROID_NATIVE_MAKE_CONSTANT('_','w','n','d') 36076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 37076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#define ANDROID_NATIVE_BUFFER_MAGIC \ 38076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian ANDROID_NATIVE_MAKE_CONSTANT('_','b','f','r') 39076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 40076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian// --------------------------------------------------------------------------- 41076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 42076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopianstruct android_native_buffer_t; 43076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 44cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopiantypedef struct android_native_rect_t 45cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian{ 46cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian int32_t left; 47cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian int32_t top; 48cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian int32_t right; 49cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian int32_t bottom; 50cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian} android_native_rect_t; 51cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian 52076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian// --------------------------------------------------------------------------- 53076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 54238a66e67b155d7e1fcdb19b672ffc0ae4a6fc94Mathias Agopiantypedef struct android_native_base_t 55076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian{ 56076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian /* a magic value defined by the actual EGL native type */ 57076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian int magic; 58076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 59076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian /* the sizeof() of the actual EGL native type */ 60076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian int version; 61076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 62076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian void* reserved[4]; 63076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 64076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian /* reference-counting interface */ 6537b2a3744c2045cbf15a50dc1312fdd8c67ae8b1Mathias Agopian void (*incRef)(struct android_native_base_t* base); 6637b2a3744c2045cbf15a50dc1312fdd8c67ae8b1Mathias Agopian void (*decRef)(struct android_native_base_t* base); 67238a66e67b155d7e1fcdb19b672ffc0ae4a6fc94Mathias Agopian} android_native_base_t; 68076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 69aa8c0ff7a36b4840dcf3e72c9696b86d192c4314Mathias Agopian// --------------------------------------------------------------------------- 70076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 71cb6b9041647b4f080324742eee5ce709960ff610Mathias Agopian/* attributes queriable with query() */ 72cb6b9041647b4f080324742eee5ce709960ff610Mathias Agopianenum { 73cb6b9041647b4f080324742eee5ce709960ff610Mathias Agopian NATIVE_WINDOW_WIDTH = 0, 74cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian NATIVE_WINDOW_HEIGHT, 75cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian NATIVE_WINDOW_FORMAT, 76cb6b9041647b4f080324742eee5ce709960ff610Mathias Agopian}; 77cb6b9041647b4f080324742eee5ce709960ff610Mathias Agopian 785221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian/* valid operations for the (*perform)() hook */ 795221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopianenum { 80e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian NATIVE_WINDOW_SET_USAGE = 0, 81cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian NATIVE_WINDOW_CONNECT, 82cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian NATIVE_WINDOW_DISCONNECT, 83cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian NATIVE_WINDOW_SET_CROP, 84e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian}; 85e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian 86e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian/* parameter for NATIVE_WINDOW_[DIS]CONNECT */ 87e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopianenum { 88e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian NATIVE_WINDOW_API_EGL = 1 895221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian}; 905221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian 91238a66e67b155d7e1fcdb19b672ffc0ae4a6fc94Mathias Agopiantypedef struct android_native_window_t 92076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian{ 93076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#ifdef __cplusplus 94076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian android_native_window_t() 95076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian : flags(0), minSwapInterval(0), maxSwapInterval(0), xdpi(0), ydpi(0) 96076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian { 97076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian common.magic = ANDROID_NATIVE_WINDOW_MAGIC; 98076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian common.version = sizeof(android_native_window_t); 99076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian memset(common.reserved, 0, sizeof(common.reserved)); 100076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian } 1015e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis 1025e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis // Implement the methods that sp<android_native_window_t> expects so that it 1035e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis // can be used to automatically refcount android_native_window_t's. 1045e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis void incStrong(const void* id) const { 1055e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis common.incRef(const_cast<android_native_base_t*>(&common)); 1065e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis } 1075e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis void decStrong(const void* id) const { 1085e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis common.decRef(const_cast<android_native_base_t*>(&common)); 1095e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis } 110076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#endif 111076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 112076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian struct android_native_base_t common; 113076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 114076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian /* flags describing some attributes of this surface or its updater */ 115076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian const uint32_t flags; 116076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 117076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian /* min swap interval supported by this updated */ 118076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian const int minSwapInterval; 119076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 120076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian /* max swap interval supported by this updated */ 121076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian const int maxSwapInterval; 122076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 123076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian /* horizontal and vertical resolution in DPI */ 124076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian const float xdpi; 125076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian const float ydpi; 126076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 127076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian /* Some storage reserved for the OEM's driver. */ 128076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian intptr_t oem[4]; 129076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 130076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 131076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian /* 132076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * Set the swap interval for this surface. 133076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * 134076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * Returns 0 on success or -errno on error. 135076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian */ 13637b2a3744c2045cbf15a50dc1312fdd8c67ae8b1Mathias Agopian int (*setSwapInterval)(struct android_native_window_t* window, 137076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian int interval); 138076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 139076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian /* 140076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * hook called by EGL to acquire a buffer. After this call, the buffer 141076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * is not locked, so its content cannot be modified. 1420926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopian * this call may block if no buffers are available. 143076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * 144076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * Returns 0 on success or -errno on error. 145076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian */ 146cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian int (*dequeueBuffer)(struct android_native_window_t* window, 147076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian struct android_native_buffer_t** buffer); 148076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 149076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian /* 150076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * hook called by EGL to lock a buffer. This MUST be called before modifying 151076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * the content of a buffer. The buffer must have been acquired with 152076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * dequeueBuffer first. 153076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * 154076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * Returns 0 on success or -errno on error. 155076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian */ 15637b2a3744c2045cbf15a50dc1312fdd8c67ae8b1Mathias Agopian int (*lockBuffer)(struct android_native_window_t* window, 157076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian struct android_native_buffer_t* buffer); 158076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian /* 159076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * hook called by EGL when modifications to the render buffer are done. 160076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * This unlocks and post the buffer. 161076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * 162076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * Buffers MUST be queued in the same order than they were dequeued. 163076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * 164076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * Returns 0 on success or -errno on error. 165076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian */ 16637b2a3744c2045cbf15a50dc1312fdd8c67ae8b1Mathias Agopian int (*queueBuffer)(struct android_native_window_t* window, 167076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian struct android_native_buffer_t* buffer); 168076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 169cb6b9041647b4f080324742eee5ce709960ff610Mathias Agopian /* 170cb6b9041647b4f080324742eee5ce709960ff610Mathias Agopian * hook used to retrieve information about the native window. 171cb6b9041647b4f080324742eee5ce709960ff610Mathias Agopian * 172cb6b9041647b4f080324742eee5ce709960ff610Mathias Agopian * Returns 0 on success or -errno on error. 173cb6b9041647b4f080324742eee5ce709960ff610Mathias Agopian */ 17437b2a3744c2045cbf15a50dc1312fdd8c67ae8b1Mathias Agopian int (*query)(struct android_native_window_t* window, 1755221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian int what, int* value); 1765221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian 1775221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian /* 1785221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian * hook used to perform various operations on the surface. 1795221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian * (*perform)() is a generic mechanism to add functionality to 1805221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian * android_native_window_t while keeping backward binary compatibility. 1815221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian * 1825221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian * This hook should not be called directly, instead use the helper functions 1835221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian * defined below. 1845221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian * 185e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian * (*perform)() returns -ENOENT if the 'what' parameter is not supported 186e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian * by the surface's implementation. 187e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian * 1885221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian * The valid operations are: 1895221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian * NATIVE_WINDOW_SET_USAGE 190e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian * NATIVE_WINDOW_CONNECT 191e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian * NATIVE_WINDOW_DISCONNECT 192cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian * NATIVE_WINDOW_SET_CROP 1935221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian * 1945221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian */ 195076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 19637b2a3744c2045cbf15a50dc1312fdd8c67ae8b1Mathias Agopian int (*perform)(struct android_native_window_t* window, 1975221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian int operation, ... ); 1985221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian 1995221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian void* reserved_proc[3]; 200238a66e67b155d7e1fcdb19b672ffc0ae4a6fc94Mathias Agopian} android_native_window_t; 201076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 2025221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian 2035221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian/* 2045221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian * native_window_set_usage() sets the intended usage flags for the next 2055221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian * buffers acquired with (*lockBuffer)() and on. 2065221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian * By default (if this function is never called), a usage of 2075221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian * GRALLOC_USAGE_HW_RENDER | GRALLOC_USAGE_HW_TEXTURE 2085221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian * is assumed. 2095221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian * Calling this function will usually cause following buffers to be 2105221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian * reallocated. 2115221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian */ 2125221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian 213fae3e73b6157555e8605f8b0c1d5b0bcc5b5ea00Dima Zavinstatic inline int native_window_set_usage( 214238a66e67b155d7e1fcdb19b672ffc0ae4a6fc94Mathias Agopian android_native_window_t* window, int usage) 2155221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian{ 2165221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian return window->perform(window, NATIVE_WINDOW_SET_USAGE, usage); 2175221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian} 2185221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian 219e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian/* 220e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian * native_window_connect(..., NATIVE_WINDOW_API_EGL) must be called 221e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian * by EGL when the window is made current. 222e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian * Returns -EINVAL if for some reason the window cannot be connected, which 223e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian * can happen if it's connected to some other API. 224e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian */ 225e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopianstatic inline int native_window_connect( 226e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian android_native_window_t* window, int api) 227e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian{ 228e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian return window->perform(window, NATIVE_WINDOW_CONNECT, api); 229e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian} 230e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian 231e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian/* 232e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian * native_window_disconnect(..., NATIVE_WINDOW_API_EGL) must be called 233e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian * by EGL when the window is made not current. 234e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian * An error is returned if for instance the window wasn't connected in the 235e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian * first place. 236e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian */ 237e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopianstatic inline int native_window_disconnect( 238e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian android_native_window_t* window, int api) 239e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian{ 240e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian return window->perform(window, NATIVE_WINDOW_DISCONNECT, api); 241e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian} 242e156e6478f8393dc519a903d48ef09b3eabf32adMathias Agopian 243cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian/* 244cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian * native_window_set_crop(..., crop) sets which region of the next queued 245cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian * buffers needs to be considered. 246cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian * A buffer's crop region is scaled to match the surface's size. 247cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian * 248cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian * The specified crop region applies to all buffers queued after it is called. 249cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian * 250cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian * if 'crop' is NULL, subsequently queued buffers won't be cropped. 251cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian * 252cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian * An error is returned if for instance the crop region is invalid, 253cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian * out of the buffer's bound or if the window is invalid. 254cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian */ 255cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopianstatic inline int native_window_set_crop( 256cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian android_native_window_t* window, 257cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian android_native_rect_t const * crop) 258cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian{ 259cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian return window->perform(window, NATIVE_WINDOW_SET_CROP, crop); 260cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian} 2615221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian 262aa8c0ff7a36b4840dcf3e72c9696b86d192c4314Mathias Agopian// --------------------------------------------------------------------------- 263076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 264076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian/* FIXME: this is legacy for pixmaps */ 265238a66e67b155d7e1fcdb19b672ffc0ae4a6fc94Mathias Agopiantypedef struct egl_native_pixmap_t 266076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian{ 267076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian int32_t version; /* must be 32 */ 268076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian int32_t width; 269076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian int32_t height; 270076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian int32_t stride; 271076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian uint8_t* data; 272076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian uint8_t format; 273076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian uint8_t rfu[3]; 274076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian union { 275076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian uint32_t compressedFormat; 276076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian int32_t vstride; 277076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian }; 278076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian int32_t reserved; 279238a66e67b155d7e1fcdb19b672ffc0ae4a6fc94Mathias Agopian} egl_native_pixmap_t; 280076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 281076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian/*****************************************************************************/ 282076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 283076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#ifdef __cplusplus 284076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian} 285076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#endif 286076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 287076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 288076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian/*****************************************************************************/ 289076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 290076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#ifdef __cplusplus 291076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 292076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#include <utils/RefBase.h> 293076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 294076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopiannamespace android { 295076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 296076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian/* 297076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * This helper class turns an EGL android_native_xxx type into a C++ 298076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * reference-counted object; with proper type conversions. 299076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian */ 300076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopiantemplate <typename NATIVE_TYPE, typename TYPE, typename REF> 301076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopianclass EGLNativeBase : public NATIVE_TYPE, public REF 302076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian{ 3035e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennispublic: 3045e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis // Disambiguate between the incStrong in REF and NATIVE_TYPE 3055e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis void incStrong(const void* id) const { 3065e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis REF::incStrong(id); 3075e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis } 3085e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis void decStrong(const void* id) const { 3095e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis REF::decStrong(id); 3105e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis } 3115e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis 312076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopianprotected: 313076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian typedef EGLNativeBase<NATIVE_TYPE, TYPE, REF> BASE; 314076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian EGLNativeBase() : NATIVE_TYPE(), REF() { 315076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian NATIVE_TYPE::common.incRef = incRef; 316076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian NATIVE_TYPE::common.decRef = decRef; 317076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian } 318076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian static inline TYPE* getSelf(NATIVE_TYPE* self) { 319076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian return static_cast<TYPE*>(self); 320076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian } 321076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian static inline TYPE const* getSelf(NATIVE_TYPE const* self) { 322076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian return static_cast<TYPE const *>(self); 323076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian } 324076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian static inline TYPE* getSelf(android_native_base_t* base) { 325076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian return getSelf(reinterpret_cast<NATIVE_TYPE*>(base)); 326076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian } 327076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian static inline TYPE const * getSelf(android_native_base_t const* base) { 328076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian return getSelf(reinterpret_cast<NATIVE_TYPE const*>(base)); 329076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian } 330076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian static void incRef(android_native_base_t* base) { 331076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian EGLNativeBase* self = getSelf(base); 332076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian self->incStrong(self); 333076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian } 334076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian static void decRef(android_native_base_t* base) { 335076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian EGLNativeBase* self = getSelf(base); 336076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian self->decStrong(self); 337076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian } 338076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian}; 339076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 340076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian} // namespace android 341076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#endif // __cplusplus 342076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 343076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian/*****************************************************************************/ 344076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 345076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#endif /* ANDROID_ANDROID_NATIVES_H */ 346