ANativeObjectBase.h revision 5f2165f9455d4893b581b73a67c5431f4344b47e
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