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