Surface.h revision ba5972ffdc7179dd9a387f22032eb18666d97917
1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/* 2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * you may not use this file except in compliance with the License. 6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * You may obtain a copy of the License at 7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * See the License for the specific language governing permissions and 14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * limitations under the License. 15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#ifndef ANDROID_UI_SURFACE_H 18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define ANDROID_UI_SURFACE_H 19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdint.h> 21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <sys/types.h> 22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/RefBase.h> 24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/threads.h> 25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <ui/ISurface.h> 27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <ui/PixelFormat.h> 28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <ui/Region.h> 29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <ui/ISurfaceFlingerClient.h> 30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 317189c0054e29a66d945f5657c48d5ecf538ea511Mathias Agopian#include <ui/egl/android_natives.h> 32076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android { 34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 370926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopianclass BufferMapper; 38e186431c33fa332b585e37f6b5ef5efd39b359cfAndreas Huberclass IOMX; 39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass Rect; 400926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopianclass Surface; 41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass SurfaceComposerClient; 42076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopianstruct per_client_cblk_t; 43076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopianstruct layer_cblk_t; 44076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 45076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian// --------------------------------------------------------------------------- 46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 4762185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopianclass SurfaceControl : public RefBase 4862185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian{ 4962185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopianpublic: 5062185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian static bool isValid(const sp<SurfaceControl>& surface) { 5101b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian return (surface != 0) && surface->isValid(); 5262185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian } 5301b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian bool isValid() { 5401b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian return mToken>=0 && mClient!=0; 5501b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian } 5601b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian static bool isSameSurface( 5701b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian const sp<SurfaceControl>& lhs, const sp<SurfaceControl>& rhs); 5862185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 5962185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian SurfaceID ID() const { return mToken; } 6062185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian uint32_t getFlags() const { return mFlags; } 6162185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian uint32_t getIdentity() const { return mIdentity; } 6262185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 6362185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian // release surface data from java 6462185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian void clear(); 6562185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 6662185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t setLayer(int32_t layer); 6762185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t setPosition(int32_t x, int32_t y); 6862185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t setSize(uint32_t w, uint32_t h); 6962185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t hide(); 7062185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t show(int32_t layer = -1); 7162185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t freeze(); 7262185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t unfreeze(); 7362185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t setFlags(uint32_t flags, uint32_t mask); 7462185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t setTransparentRegionHint(const Region& transparent); 7562185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t setAlpha(float alpha=1.0f); 7662185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t setMatrix(float dsdx, float dtdx, float dsdy, float dtdy); 7762185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t setFreezeTint(uint32_t tint); 7862185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 7901b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian static status_t writeSurfaceToParcel( 8001b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian const sp<SurfaceControl>& control, Parcel* parcel); 8101b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian 8201b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian sp<Surface> getSurface() const; 8301b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian 8462185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopianprivate: 8501b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian // can't be copied 8601b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian SurfaceControl& operator = (SurfaceControl& rhs); 8701b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian SurfaceControl(const SurfaceControl& rhs); 8801b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian 8901b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian 9062185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian friend class SurfaceComposerClient; 9162185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 9262185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian // camera and camcorder need access to the ISurface binder interface for preview 9362185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian friend class Camera; 9462185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian friend class MediaRecorder; 9562185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian // mediaplayer needs access to ISurface for display 9662185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian friend class MediaPlayer; 9701b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian // for testing 9862185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian friend class Test; 9962185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian const sp<ISurface>& getISurface() const { return mSurface; } 10062185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 10162185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 10262185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian friend class Surface; 10301b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian 10401b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian SurfaceControl( 10501b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian const sp<SurfaceComposerClient>& client, 10662185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian const sp<ISurface>& surface, 10762185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian const ISurfaceFlingerClient::surface_data_t& data, 10818d8446fe1596cd50561777e1d1a8c7b39c689f6Mathias Agopian uint32_t w, uint32_t h, PixelFormat format, uint32_t flags); 10962185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 11062185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian ~SurfaceControl(); 11101b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian 11262185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t validate(per_client_cblk_t const* cblk) const; 11362185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian void destroy(); 11462185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 11562185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian sp<SurfaceComposerClient> mClient; 11662185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian sp<ISurface> mSurface; 11762185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian SurfaceID mToken; 11862185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian uint32_t mIdentity; 119cb6b9041647b4f080324742eee5ce709960ff610Mathias Agopian uint32_t mWidth; 120cb6b9041647b4f080324742eee5ce709960ff610Mathias Agopian uint32_t mHeight; 12162185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian PixelFormat mFormat; 12262185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian uint32_t mFlags; 12362185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian mutable Mutex mLock; 12401b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian 12501b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian mutable sp<Surface> mSurfaceData; 12662185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian}; 12762185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 12862185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian// --------------------------------------------------------------------------- 12962185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 130076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopianclass Surface 131076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian : public EGLNativeBase<android_native_window_t, Surface, RefBase> 132076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian{ 133edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic: 134edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project struct SurfaceInfo { 135edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t w; 136edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t h; 137076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian uint32_t s; 138076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian uint32_t usage; 139edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project PixelFormat format; 140edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void* bits; 141edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t reserved[2]; 142edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project }; 143edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 14401b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian Surface(const Parcel& data); 14501b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian 14640b7f6e0433b89c27b2fe5a1c0c47f67b42eceb2Mathias Agopian static bool isValid(const sp<Surface>& surface) { 14701b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian return (surface != 0) && surface->isValid(); 14840b7f6e0433b89c27b2fe5a1c0c47f67b42eceb2Mathias Agopian } 149ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian 15001b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian static bool isSameSurface( 15101b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian const sp<Surface>& lhs, const sp<Surface>& rhs); 152edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 153ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian bool isValid(); 154ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian SurfaceID ID() const { return mToken; } 155ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian uint32_t getFlags() const { return mFlags; } 156ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian uint32_t getIdentity() const { return mIdentity; } 15740b7f6e0433b89c27b2fe5a1c0c47f67b42eceb2Mathias Agopian 158ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian // the lock/unlock APIs must be used from the same thread 159edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t lock(SurfaceInfo* info, bool blocking = true); 160edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t lock(SurfaceInfo* info, Region* dirty, bool blocking = true); 161edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t unlockAndPost(); 162edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 1630926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopian // setSwapRectangle() is intended to be used by GL ES clients 164edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void setSwapRectangle(const Rect& r); 165edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 166edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate: 16701b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian // can't be copied 16801b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian Surface& operator = (Surface& rhs); 16901b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian Surface(const Surface& rhs); 17001b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian 17101b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian Surface(const sp<SurfaceControl>& control); 17201b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian void init(); 17301b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian ~Surface(); 17401b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian 175edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project friend class SurfaceComposerClient; 17601b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian friend class SurfaceControl; 177edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 178ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian 179edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // camera and camcorder need access to the ISurface binder interface for preview 180edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project friend class Camera; 181edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project friend class MediaRecorder; 182edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // mediaplayer needs access to ISurface for display 183edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project friend class MediaPlayer; 184e186431c33fa332b585e37f6b5ef5efd39b359cfAndreas Huber friend class IOMX; 185ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian // this is just to be able to write some unit tests 186ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian friend class Test; 187ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian 188ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian sp<SurfaceComposerClient> getClient() const; 189ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian sp<ISurface> getISurface() const; 190edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 1915221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian status_t getBufferLocked(int index, int usage); 192076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 193076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian status_t validate(per_client_cblk_t const* cblk) const; 194076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian static void _send_dirty_region(layer_cblk_t* lcblk, const Region& dirty); 195076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 1960926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopian inline const BufferMapper& getBufferMapper() const { return mBufferMapper; } 1970926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopian inline BufferMapper& getBufferMapper() { return mBufferMapper; } 198076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 199076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian static int setSwapInterval(android_native_window_t* window, int interval); 200076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian static int dequeueBuffer(android_native_window_t* window, android_native_buffer_t** buffer); 201076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian static int lockBuffer(android_native_window_t* window, android_native_buffer_t* buffer); 202076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian static int queueBuffer(android_native_window_t* window, android_native_buffer_t* buffer); 203cb6b9041647b4f080324742eee5ce709960ff610Mathias Agopian static int query(android_native_window_t* window, int what, int* value); 2045221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian static int perform(android_native_window_t* window, int operation, ...); 205076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 206076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian int dequeueBuffer(android_native_buffer_t** buffer); 207076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian int lockBuffer(android_native_buffer_t* buffer); 208076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian int queueBuffer(android_native_buffer_t* buffer); 209cb6b9041647b4f080324742eee5ce709960ff610Mathias Agopian int query(int what, int* value); 2105221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian int perform(int operation, va_list args); 2110926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopian 2120926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopian status_t dequeueBuffer(sp<SurfaceBuffer>* buffer); 2130926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopian status_t lockBuffer(const sp<SurfaceBuffer>& buffer); 2140926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopian status_t queueBuffer(const sp<SurfaceBuffer>& buffer); 2150926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopian 216076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 217ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian void setUsage(uint32_t reqUsage); 218ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian 219ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian // constants 220edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project sp<SurfaceComposerClient> mClient; 221edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project sp<ISurface> mSurface; 222edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project SurfaceID mToken; 223edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t mIdentity; 224edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project PixelFormat mFormat; 225edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t mFlags; 226ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian BufferMapper& mBufferMapper; 227ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian 228ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian // protected by mSurfaceLock 229ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian Rect mSwapRectangle; 230ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian uint32_t mUsage; 231ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian bool mUsageChanged; 232ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian 233ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian // protected by mSurfaceLock. These are also used from lock/unlock 234ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian // but in that case, they must be called form the same thread. 235ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian sp<SurfaceBuffer> mBuffers[2]; 236edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mutable Region mDirtyRegion; 237edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mutable uint8_t mBackbufferIndex; 238ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian 239ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian // must be used from the lock/unlock thread 240ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian sp<SurfaceBuffer> mLockedBuffer; 241ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian mutable Region mOldDirtyRegion; 242ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian 243ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian // query() must be called from dequeueBuffer() thread 244ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian uint32_t mWidth; 245ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian uint32_t mHeight; 246ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian 247ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian // Inherently thread-safe 248edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mutable Mutex mSurfaceLock; 249edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 250edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 251edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android 252edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 253edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // ANDROID_UI_SURFACE_H 254edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 255