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