Imported Upstream version 0.1.0+git20131207+e452e83
[deb_libhybris.git] / hybris / egl / platforms / common / nativewindowbase.h
1 #ifndef NATIVEWINDOWBASE_H
2 #define NATIVEWINDOWBASE_H
3
4 /* for ICS window.h */
5 #include <string.h>
6 #include <android/system/window.h>
7 #include <EGL/egl.h>
8 #include "support.h"
9 #include <stdarg.h>
10 #include <assert.h>
11
12 #ifdef DEBUG
13 #include <stdio.h>
14 #endif
15
16 #define NO_ERROR 0L
17 #define BAD_VALUE -1
18
19 /**
20 * @brief A Class to do common ANativeBuffer initialization and thunk c-style
21 * callbacks into C++ method calls.
22 **/
23 class BaseNativeWindowBuffer : public ANativeWindowBuffer
24 {
25 protected:
26 BaseNativeWindowBuffer();
27 virtual ~BaseNativeWindowBuffer() ;
28
29 public:
30 /* When passing the buffer to EGL functions it's required to pass always the native
31 * buffer. This method takes care about proper casting. */
32 ANativeWindowBuffer* getNativeBuffer() const;
33
34 private:
35 unsigned int refcount;
36 static void _decRef(struct android_native_base_t* base);
37 static void _incRef(struct android_native_base_t* base);
38 };
39
40 /**
41 * @brief A Class to do common ANativeWindow initialization and thunk c-style
42 * callbacks into C++ method calls.
43 **/
44 class BaseNativeWindow : public ANativeWindow
45 {
46 public:
47 operator EGLNativeWindowType()
48 {
49 EGLNativeWindowType ret = reinterpret_cast<EGLNativeWindowType>(static_cast<ANativeWindow *>(this));
50 return ret;
51 }
52
53 protected:
54 BaseNativeWindow();
55 virtual ~BaseNativeWindow();
56
57 // does this require more magic?
58 unsigned int refcount;
59 static void _decRef(struct android_native_base_t* base);
60 static void _incRef(struct android_native_base_t* base);
61
62 // these have to be implemented in the concrete implementation, eg. FBDEV or offscreen window
63 virtual int setSwapInterval(int interval) = 0;
64
65 virtual int dequeueBuffer(BaseNativeWindowBuffer **buffer, int *fenceFd) = 0;
66 virtual int queueBuffer(BaseNativeWindowBuffer *buffer, int fenceFd) = 0;
67 virtual int cancelBuffer(BaseNativeWindowBuffer *buffer, int fenceFd) = 0;
68 virtual int lockBuffer(BaseNativeWindowBuffer *buffer) = 0; // DEPRECATED
69
70 virtual unsigned int type() const = 0;
71 virtual unsigned int width() const = 0;
72 virtual unsigned int height() const = 0;
73 virtual unsigned int format() const = 0;
74 virtual unsigned int defaultWidth() const = 0;
75 virtual unsigned int defaultHeight() const = 0;
76 virtual unsigned int queueLength() const = 0;
77 virtual unsigned int transformHint() const = 0;
78 //perform interfaces
79 virtual int setBuffersFormat(int format) = 0;
80 virtual int setBuffersDimensions(int width, int height) = 0;
81 virtual int setUsage(int usage) = 0;
82 virtual int setBufferCount(int cnt) = 0;
83 private:
84 static int _setSwapInterval(struct ANativeWindow* window, int interval);
85 static int _dequeueBuffer_DEPRECATED(ANativeWindow* window, ANativeWindowBuffer** buffer);
86 static const char *_native_window_operation(int what);
87 static const char *_native_query_operation(int what);
88 static int _lockBuffer_DEPRECATED(struct ANativeWindow* window, ANativeWindowBuffer* buffer);
89 static int _queueBuffer_DEPRECATED(struct ANativeWindow* window, ANativeWindowBuffer* buffer);
90 static int _query(const struct ANativeWindow* window, int what, int* value);
91 static int _perform(struct ANativeWindow* window, int operation, ... );
92 static int _cancelBuffer_DEPRECATED(struct ANativeWindow* window, ANativeWindowBuffer* buffer);
93 static int _queueBuffer(struct ANativeWindow *window, ANativeWindowBuffer *buffer, int fenceFd);
94 static int _dequeueBuffer(struct ANativeWindow *window, ANativeWindowBuffer **buffer, int *fenceFd);
95 static int _cancelBuffer(struct ANativeWindow *window, ANativeWindowBuffer *buffer, int fenceFd);
96 };
97
98 #endif