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> 24ec10d231c0eaadbcb143932e5c1bb7c1953125a7Iliyan Malchev#include <system/window.h> 255f2165f9455d4893b581b73a67c5431f4344b47eMathias Agopian 26aa8c0ff7a36b4840dcf3e72c9696b86d192c4314Mathias Agopian// --------------------------------------------------------------------------- 27076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 28076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian/* FIXME: this is legacy for pixmaps */ 29238a66e67b155d7e1fcdb19b672ffc0ae4a6fc94Mathias Agopiantypedef struct egl_native_pixmap_t 30076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian{ 31076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian int32_t version; /* must be 32 */ 32076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian int32_t width; 33076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian int32_t height; 34076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian int32_t stride; 35076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian uint8_t* data; 36076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian uint8_t format; 37076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian uint8_t rfu[3]; 38076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian union { 39076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian uint32_t compressedFormat; 40076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian int32_t vstride; 41076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian }; 42076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian int32_t reserved; 43238a66e67b155d7e1fcdb19b672ffc0ae4a6fc94Mathias Agopian} egl_native_pixmap_t; 44076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 45076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian/*****************************************************************************/ 46076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 47076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#ifdef __cplusplus 48076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 49076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#include <utils/RefBase.h> 50076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 51076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopiannamespace android { 52076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 53076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian/* 545f2165f9455d4893b581b73a67c5431f4344b47eMathias Agopian * This helper class turns a ANativeXXX object type into a C++ 55076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * reference-counted object; with proper type conversions. 56076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian */ 57076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopiantemplate <typename NATIVE_TYPE, typename TYPE, typename REF> 585f2165f9455d4893b581b73a67c5431f4344b47eMathias Agopianclass ANativeObjectBase : public NATIVE_TYPE, public REF 59076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian{ 605e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennispublic: 615e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis // Disambiguate between the incStrong in REF and NATIVE_TYPE 625e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis void incStrong(const void* id) const { 635e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis REF::incStrong(id); 645e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis } 655e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis void decStrong(const void* id) const { 665e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis REF::decStrong(id); 675e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis } 685e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis 69076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopianprotected: 705f2165f9455d4893b581b73a67c5431f4344b47eMathias Agopian typedef ANativeObjectBase<NATIVE_TYPE, TYPE, REF> BASE; 715f2165f9455d4893b581b73a67c5431f4344b47eMathias Agopian ANativeObjectBase() : NATIVE_TYPE(), REF() { 72076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian NATIVE_TYPE::common.incRef = incRef; 73076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian NATIVE_TYPE::common.decRef = decRef; 74076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian } 75076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian static inline TYPE* getSelf(NATIVE_TYPE* self) { 76076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian return static_cast<TYPE*>(self); 77076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian } 78076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian static inline TYPE const* getSelf(NATIVE_TYPE const* self) { 79076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian return static_cast<TYPE const *>(self); 80076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian } 81076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian static inline TYPE* getSelf(android_native_base_t* base) { 82076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian return getSelf(reinterpret_cast<NATIVE_TYPE*>(base)); 83076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian } 84076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian static inline TYPE const * getSelf(android_native_base_t const* base) { 85076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian return getSelf(reinterpret_cast<NATIVE_TYPE const*>(base)); 86076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian } 87076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian static void incRef(android_native_base_t* base) { 885f2165f9455d4893b581b73a67c5431f4344b47eMathias Agopian ANativeObjectBase* self = getSelf(base); 89076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian self->incStrong(self); 90076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian } 91076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian static void decRef(android_native_base_t* base) { 925f2165f9455d4893b581b73a67c5431f4344b47eMathias Agopian ANativeObjectBase* self = getSelf(base); 93076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian self->decStrong(self); 94076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian } 95076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian}; 96076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 97076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian} // namespace android 98076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#endif // __cplusplus 99076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 100076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian/*****************************************************************************/ 101076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 102076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#endif /* ANDROID_ANDROID_NATIVES_H */ 103