19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17dff8e58d47ede6e748c0b02e128ca33b42a4f362Mathias Agopian#ifndef ANDROID_FRAMEBUFFER_NATIVE_WINDOW_H 18dff8e58d47ede6e748c0b02e128ca33b42a4f362Mathias Agopian#define ANDROID_FRAMEBUFFER_NATIVE_WINDOW_H 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdint.h> 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <sys/types.h> 221473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <EGL/egl.h> 241473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian 251473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian#include <utils/threads.h> 2694720d7ec40d2b5ee200d95a46588cdb0fb30e66Erik Gilling#include <utils/String8.h> 271473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian#include <ui/Rect.h> 281473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian 291473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian#include <pixelflinger/pixelflinger.h> 301473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian 31ac2523b161df2bb507cc88906bb070878266770dMathias Agopian#include <ui/egl/android_natives.h> 32ac2523b161df2bb507cc88906bb070878266770dMathias Agopian 3384043438cfa7f0f934cb8884315e9db2fd3c7e2cRodrigo Obregon#define NUM_FRAME_BUFFERS 2 341473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian 351473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopianextern "C" EGLNativeWindowType android_createDisplaySurface(void); 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// --------------------------------------------------------------------------- 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android { 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// --------------------------------------------------------------------------- 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass Surface; 42ac2523b161df2bb507cc88906bb070878266770dMathias Agopianclass NativeBuffer; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 441473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian// --------------------------------------------------------------------------- 451473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian 461473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopianclass FramebufferNativeWindow 471473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian : public EGLNativeBase< 488b49bd1a2f8117e1c22884f0150e72cbcf838f32Dianne Hackborn ANativeWindow, 491473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian FramebufferNativeWindow, 501473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian LightRefBase<FramebufferNativeWindow> > 511473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian{ 521473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopianpublic: 531473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian FramebufferNativeWindow(); 541473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian 551473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian framebuffer_device_t const * getDevice() const { return fbDev; } 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5797b8056c3182a973c67d3c1b196150d4b9e30f3aMathias Agopian bool isUpdateOnDemand() const { return mUpdateOnDemand; } 5897b8056c3182a973c67d3c1b196150d4b9e30f3aMathias Agopian status_t setUpdateRectangle(const Rect& updateRect); 59b1a1874625a6aca967601fcda53a82d8d712df45Mathias Agopian status_t compositionComplete(); 6094720d7ec40d2b5ee200d95a46588cdb0fb30e66Erik Gilling 6194720d7ec40d2b5ee200d95a46588cdb0fb30e66Erik Gilling void dump(String8& result); 6294720d7ec40d2b5ee200d95a46588cdb0fb30e66Erik Gilling 6304262e9f842edf20168399b6a70f0d67e518fe69Mathias Agopian // for debugging only 6404262e9f842edf20168399b6a70f0d67e518fe69Mathias Agopian int getCurrentBufferIndex() const; 6504262e9f842edf20168399b6a70f0d67e518fe69Mathias Agopian 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate: 671473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian friend class LightRefBase<FramebufferNativeWindow>; 681473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian ~FramebufferNativeWindow(); // this class cannot be overloaded 698b49bd1a2f8117e1c22884f0150e72cbcf838f32Dianne Hackborn static int setSwapInterval(ANativeWindow* window, int interval); 70b2a153adc9860616acdb96d7cdd64494d5a2a0f2Iliyan Malchev static int dequeueBuffer(ANativeWindow* window, ANativeWindowBuffer** buffer); 71b2a153adc9860616acdb96d7cdd64494d5a2a0f2Iliyan Malchev static int lockBuffer(ANativeWindow* window, ANativeWindowBuffer* buffer); 72b2a153adc9860616acdb96d7cdd64494d5a2a0f2Iliyan Malchev static int queueBuffer(ANativeWindow* window, ANativeWindowBuffer* buffer); 734d7c1ce651bd5e283e694fa34641e1dc080613c0Iliyan Malchev static int query(const ANativeWindow* window, int what, int* value); 748b49bd1a2f8117e1c22884f0150e72cbcf838f32Dianne Hackborn static int perform(ANativeWindow* window, int operation, ...); 751473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian 761473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian framebuffer_device_t* fbDev; 771473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian alloc_device_t* grDev; 781473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian 7984043438cfa7f0f934cb8884315e9db2fd3c7e2cRodrigo Obregon sp<NativeBuffer> buffers[NUM_FRAME_BUFFERS]; 801473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian sp<NativeBuffer> front; 811473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian 821473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian mutable Mutex mutex; 831473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian Condition mCondition; 841473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian int32_t mNumBuffers; 851473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian int32_t mNumFreeBuffers; 861473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian int32_t mBufferHead; 8704262e9f842edf20168399b6a70f0d67e518fe69Mathias Agopian int32_t mCurrentBufferIndex; 8897b8056c3182a973c67d3c1b196150d4b9e30f3aMathias Agopian bool mUpdateOnDemand; 89cbc4c9f8d56317b2fe8964c15c9785ebeef98ca7Mathias Agopian}; 90cbc4c9f8d56317b2fe8964c15c9785ebeef98ca7Mathias Agopian 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// --------------------------------------------------------------------------- 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; // namespace android 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// --------------------------------------------------------------------------- 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 95dff8e58d47ede6e748c0b02e128ca33b42a4f362Mathias Agopian#endif // ANDROID_FRAMEBUFFER_NATIVE_WINDOW_H 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 97