ANativeObjectBase.h revision ec10d231c0eaadbcb143932e5c1bb7c1953125a7
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> 25ec10d231c0eaadbcb143932e5c1bb7c1953125a7Iliyan Malchev// FIXME: remove this header, it's for legacy use. native_window is pulled from frameworks/base/native/include/android/ 264b5e91e4820f03dba7dcc36e4b148331bc964b4bDianne Hackborn#include <android/native_window.h> 27aa8c0ff7a36b4840dcf3e72c9696b86d192c4314Mathias Agopian// --------------------------------------------------------------------------- 28076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 29076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian/* FIXME: this is legacy for pixmaps */ 30238a66e67b155d7e1fcdb19b672ffc0ae4a6fc94Mathias Agopiantypedef struct egl_native_pixmap_t 31076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian{ 32076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian int32_t version; /* must be 32 */ 33076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian int32_t width; 34076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian int32_t height; 35076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian int32_t stride; 36076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian uint8_t* data; 37076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian uint8_t format; 38076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian uint8_t rfu[3]; 39076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian union { 40076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian uint32_t compressedFormat; 41076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian int32_t vstride; 42076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian }; 43076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian int32_t reserved; 44238a66e67b155d7e1fcdb19b672ffc0ae4a6fc94Mathias Agopian} egl_native_pixmap_t; 45076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 46076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian/*****************************************************************************/ 47076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 48076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#ifdef __cplusplus 49076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 50076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#include <utils/RefBase.h> 51076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 52076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopiannamespace android { 53076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 54076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian/* 55076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * This helper class turns an EGL android_native_xxx type into a C++ 56076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian * reference-counted object; with proper type conversions. 57076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian */ 58076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopiantemplate <typename NATIVE_TYPE, typename TYPE, typename REF> 59076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopianclass EGLNativeBase : public NATIVE_TYPE, public REF 60076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian{ 615e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennispublic: 625e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis // Disambiguate between the incStrong in REF and NATIVE_TYPE 635e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis void incStrong(const void* id) const { 645e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis REF::incStrong(id); 655e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis } 665e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis void decStrong(const void* id) const { 675e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis REF::decStrong(id); 685e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis } 695e67f87430d581155c700bb33ac0b43ed5de20b7Jamie Gennis 70076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopianprotected: 71076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian typedef EGLNativeBase<NATIVE_TYPE, TYPE, REF> BASE; 72076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian EGLNativeBase() : NATIVE_TYPE(), REF() { 73076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian NATIVE_TYPE::common.incRef = incRef; 74076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian NATIVE_TYPE::common.decRef = decRef; 75076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian } 76076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian static inline TYPE* getSelf(NATIVE_TYPE* self) { 77076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian return static_cast<TYPE*>(self); 78076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian } 79076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian static inline TYPE const* getSelf(NATIVE_TYPE const* self) { 80076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian return static_cast<TYPE const *>(self); 81076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian } 82076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian static inline TYPE* getSelf(android_native_base_t* base) { 83076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian return getSelf(reinterpret_cast<NATIVE_TYPE*>(base)); 84076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian } 85076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian static inline TYPE const * getSelf(android_native_base_t const* base) { 86076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian return getSelf(reinterpret_cast<NATIVE_TYPE const*>(base)); 87076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian } 88076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian static void incRef(android_native_base_t* base) { 89076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian EGLNativeBase* self = getSelf(base); 90076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian self->incStrong(self); 91076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian } 92076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian static void decRef(android_native_base_t* base) { 93076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian EGLNativeBase* self = getSelf(base); 94076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian self->decStrong(self); 95076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian } 96076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian}; 97076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 98076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian} // namespace android 99076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#endif // __cplusplus 100076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 101076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian/*****************************************************************************/ 102076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 103076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#endif /* ANDROID_ANDROID_NATIVES_H */ 104