Surface.h revision b296533607232357597b255679db29470ab5925d
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 179cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian#ifndef ANDROID_SF_SURFACE_H 189cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian#define ANDROID_SF_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/PixelFormat.h> 27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <ui/Region.h> 287189c0054e29a66d945f5657c48d5ecf538ea511Mathias Agopian#include <ui/egl/android_natives.h> 29076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 309cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian#include <surfaceflinger/ISurface.h> 319cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian#include <surfaceflinger/ISurfaceFlingerClient.h> 329cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian 33e4e8cf1f19002be418aad1b89fa6bb8aeabf9f65Mathias Agopian#define ANDROID_VIEW_SURFACE_JNI_ID "mNativeSurface" 34e4e8cf1f19002be418aad1b89fa6bb8aeabf9f65Mathias Agopian 35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android { 36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 393330b203039dea366d4981db1408a460134b2d2cMathias Agopianclass GraphicBufferMapper; 40e186431c33fa332b585e37f6b5ef5efd39b359cfAndreas Huberclass IOMX; 41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass Rect; 420926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopianclass Surface; 43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass SurfaceComposerClient; 44cbb288bfe89f585bf48371bd31b2d4aafa32f32eMathias Agopianclass SharedClient; 45cbb288bfe89f585bf48371bd31b2d4aafa32f32eMathias Agopianclass SharedBufferClient; 46076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 47076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian// --------------------------------------------------------------------------- 48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 4962185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopianclass SurfaceControl : public RefBase 5062185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian{ 5162185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopianpublic: 5262185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian static bool isValid(const sp<SurfaceControl>& surface) { 5301b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian return (surface != 0) && surface->isValid(); 5462185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian } 5501b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian bool isValid() { 5601b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian return mToken>=0 && mClient!=0; 5701b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian } 5801b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian static bool isSameSurface( 5901b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian const sp<SurfaceControl>& lhs, const sp<SurfaceControl>& rhs); 6062185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 6162185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian SurfaceID ID() const { return mToken; } 6262185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian uint32_t getFlags() const { return mFlags; } 6362185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian uint32_t getIdentity() const { return mIdentity; } 6462185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 6562185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian // release surface data from java 6662185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian void clear(); 6762185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 6862185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t setLayer(int32_t layer); 6962185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t setPosition(int32_t x, int32_t y); 7062185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t setSize(uint32_t w, uint32_t h); 7162185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t hide(); 7262185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t show(int32_t layer = -1); 7362185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t freeze(); 7462185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t unfreeze(); 7562185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t setFlags(uint32_t flags, uint32_t mask); 7662185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t setTransparentRegionHint(const Region& transparent); 7762185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t setAlpha(float alpha=1.0f); 7862185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t setMatrix(float dsdx, float dtdx, float dsdy, float dtdy); 7962185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t setFreezeTint(uint32_t tint); 8062185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 8101b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian static status_t writeSurfaceToParcel( 8201b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian const sp<SurfaceControl>& control, Parcel* parcel); 8301b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian 8401b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian sp<Surface> getSurface() const; 8501b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian 8662185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopianprivate: 8701b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian // can't be copied 8801b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian SurfaceControl& operator = (SurfaceControl& rhs); 8901b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian SurfaceControl(const SurfaceControl& rhs); 9001b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian 9101b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian 9262185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian friend class SurfaceComposerClient; 9362185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 9462185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian // camera and camcorder need access to the ISurface binder interface for preview 9562185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian friend class Camera; 9662185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian friend class MediaRecorder; 9762185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian // mediaplayer needs access to ISurface for display 9862185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian friend class MediaPlayer; 9901b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian // for testing 10062185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian friend class Test; 10162185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian const sp<ISurface>& getISurface() const { return mSurface; } 10262185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 10362185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 10462185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian friend class Surface; 10501b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian 10601b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian SurfaceControl( 10701b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian const sp<SurfaceComposerClient>& client, 10862185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian const sp<ISurface>& surface, 10962185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian const ISurfaceFlingerClient::surface_data_t& data, 11018d8446fe1596cd50561777e1d1a8c7b39c689f6Mathias Agopian uint32_t w, uint32_t h, PixelFormat format, uint32_t flags); 11162185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 11262185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian ~SurfaceControl(); 11301b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian 114963abad79ae64dae9bf4c32bfb110d9e6314c857Mathias Agopian status_t validate() const; 11562185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian void destroy(); 11662185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 11762185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian sp<SurfaceComposerClient> mClient; 11862185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian sp<ISurface> mSurface; 11962185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian SurfaceID mToken; 12062185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian uint32_t mIdentity; 121cb6b9041647b4f080324742eee5ce709960ff610Mathias Agopian uint32_t mWidth; 122cb6b9041647b4f080324742eee5ce709960ff610Mathias Agopian uint32_t mHeight; 12362185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian PixelFormat mFormat; 12462185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian uint32_t mFlags; 12562185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian mutable Mutex mLock; 12601b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian 12701b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian mutable sp<Surface> mSurfaceData; 12862185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian}; 12962185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 13062185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian// --------------------------------------------------------------------------- 13162185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 132076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopianclass Surface 133076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian : public EGLNativeBase<android_native_window_t, Surface, RefBase> 134076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian{ 135edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic: 136edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project struct SurfaceInfo { 137edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t w; 138edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t h; 139076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian uint32_t s; 140076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian uint32_t usage; 141edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project PixelFormat format; 142edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void* bits; 143edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t reserved[2]; 144edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project }; 145edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 14601b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian Surface(const Parcel& data); 14701b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian 14840b7f6e0433b89c27b2fe5a1c0c47f67b42eceb2Mathias Agopian static bool isValid(const sp<Surface>& surface) { 14901b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian return (surface != 0) && surface->isValid(); 15040b7f6e0433b89c27b2fe5a1c0c47f67b42eceb2Mathias Agopian } 151ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian 15201b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian static bool isSameSurface( 15301b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian const sp<Surface>& lhs, const sp<Surface>& rhs); 154edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 155ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian bool isValid(); 156ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian SurfaceID ID() const { return mToken; } 157ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian uint32_t getFlags() const { return mFlags; } 158ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian uint32_t getIdentity() const { return mIdentity; } 15940b7f6e0433b89c27b2fe5a1c0c47f67b42eceb2Mathias Agopian 160ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian // the lock/unlock APIs must be used from the same thread 161edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t lock(SurfaceInfo* info, bool blocking = true); 162edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t lock(SurfaceInfo* info, Region* dirty, bool blocking = true); 163edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t unlockAndPost(); 164edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 1650926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopian // setSwapRectangle() is intended to be used by GL ES clients 166edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void setSwapRectangle(const Rect& r); 167edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 168edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 169b296533607232357597b255679db29470ab5925dMathias Agopianprivate: 170b296533607232357597b255679db29470ab5925dMathias Agopian /* 171b296533607232357597b255679db29470ab5925dMathias Agopian * Android frameworks friends 172b296533607232357597b255679db29470ab5925dMathias Agopian * (eventually this should go away and be replaced by proper APIs) 173b296533607232357597b255679db29470ab5925dMathias Agopian */ 174edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // camera and camcorder need access to the ISurface binder interface for preview 175edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project friend class Camera; 176edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project friend class MediaRecorder; 177b296533607232357597b255679db29470ab5925dMathias Agopian // MediaPlayer needs access to ISurface for display 178edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project friend class MediaPlayer; 179e186431c33fa332b585e37f6b5ef5efd39b359cfAndreas Huber friend class IOMX; 180ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian // this is just to be able to write some unit tests 181ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian friend class Test; 182ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian 183b296533607232357597b255679db29470ab5925dMathias Agopianprivate: 184b296533607232357597b255679db29470ab5925dMathias Agopian friend class SurfaceComposerClient; 185b296533607232357597b255679db29470ab5925dMathias Agopian friend class SurfaceControl; 186edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 187b296533607232357597b255679db29470ab5925dMathias Agopian // can't be copied 188b296533607232357597b255679db29470ab5925dMathias Agopian Surface& operator = (Surface& rhs); 189b296533607232357597b255679db29470ab5925dMathias Agopian Surface(const Surface& rhs); 190076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 191b296533607232357597b255679db29470ab5925dMathias Agopian Surface(const sp<SurfaceControl>& control); 192b296533607232357597b255679db29470ab5925dMathias Agopian ~Surface(); 193b296533607232357597b255679db29470ab5925dMathias Agopian 194b296533607232357597b255679db29470ab5925dMathias Agopian 195b296533607232357597b255679db29470ab5925dMathias Agopian /* 196b296533607232357597b255679db29470ab5925dMathias Agopian * android_native_window_t hooks 197b296533607232357597b255679db29470ab5925dMathias Agopian */ 198076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian static int setSwapInterval(android_native_window_t* window, int interval); 199076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian static int dequeueBuffer(android_native_window_t* window, android_native_buffer_t** buffer); 200076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian static int lockBuffer(android_native_window_t* window, android_native_buffer_t* buffer); 201076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian static int queueBuffer(android_native_window_t* window, android_native_buffer_t* buffer); 202cb6b9041647b4f080324742eee5ce709960ff610Mathias Agopian static int query(android_native_window_t* window, int what, int* value); 2035221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian static int perform(android_native_window_t* window, int operation, ...); 204076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 205076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian int dequeueBuffer(android_native_buffer_t** buffer); 206076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian int lockBuffer(android_native_buffer_t* buffer); 207076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian int queueBuffer(android_native_buffer_t* buffer); 208cb6b9041647b4f080324742eee5ce709960ff610Mathias Agopian int query(int what, int* value); 2095221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian int perform(int operation, va_list args); 2100926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopian 21155fa25161a7626ae6a15bc2cc46e22771455ed80Mathias Agopian void dispatch_setUsage(va_list args); 21255fa25161a7626ae6a15bc2cc46e22771455ed80Mathias Agopian int dispatch_connect(va_list args); 21355fa25161a7626ae6a15bc2cc46e22771455ed80Mathias Agopian int dispatch_disconnect(va_list args); 214cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian int dispatch_crop(va_list args); 215076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 216ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian void setUsage(uint32_t reqUsage); 21755fa25161a7626ae6a15bc2cc46e22771455ed80Mathias Agopian int connect(int api); 21855fa25161a7626ae6a15bc2cc46e22771455ed80Mathias Agopian int disconnect(int api); 219cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian int crop(Rect const* rect); 22055fa25161a7626ae6a15bc2cc46e22771455ed80Mathias Agopian 221b296533607232357597b255679db29470ab5925dMathias Agopian /* 222b296533607232357597b255679db29470ab5925dMathias Agopian * private stuff... 223b296533607232357597b255679db29470ab5925dMathias Agopian */ 224b296533607232357597b255679db29470ab5925dMathias Agopian void init(); 225b296533607232357597b255679db29470ab5925dMathias Agopian status_t validate() const; 226b296533607232357597b255679db29470ab5925dMathias Agopian sp<SurfaceComposerClient> getClient() const; 227b296533607232357597b255679db29470ab5925dMathias Agopian sp<ISurface> getISurface() const; 228b296533607232357597b255679db29470ab5925dMathias Agopian 229b296533607232357597b255679db29470ab5925dMathias Agopian inline const GraphicBufferMapper& getBufferMapper() const { return mBufferMapper; } 230b296533607232357597b255679db29470ab5925dMathias Agopian inline GraphicBufferMapper& getBufferMapper() { return mBufferMapper; } 231b296533607232357597b255679db29470ab5925dMathias Agopian 232b296533607232357597b255679db29470ab5925dMathias Agopian status_t getBufferLocked(int index, int usage); 233b296533607232357597b255679db29470ab5925dMathias Agopian int getBufferIndex(const sp<GraphicBuffer>& buffer) const; 234b296533607232357597b255679db29470ab5925dMathias Agopian 23568a6afeb26002961387573dd64dd0ea3816bdc91Mathias Agopian uint32_t getUsage() const; 23655fa25161a7626ae6a15bc2cc46e22771455ed80Mathias Agopian int getConnectedApi() const; 237ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian 238ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian // constants 239edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project sp<SurfaceComposerClient> mClient; 240edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project sp<ISurface> mSurface; 241edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project SurfaceID mToken; 242edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t mIdentity; 243edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project PixelFormat mFormat; 244edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t mFlags; 2453330b203039dea366d4981db1408a460134b2d2cMathias Agopian GraphicBufferMapper& mBufferMapper; 246cbb288bfe89f585bf48371bd31b2d4aafa32f32eMathias Agopian SharedBufferClient* mSharedBufferClient; 247ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian 248ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian // protected by mSurfaceLock 249ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian Rect mSwapRectangle; 250ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian uint32_t mUsage; 25155fa25161a7626ae6a15bc2cc46e22771455ed80Mathias Agopian int mConnected; 252cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian Rect mNextBufferCrop; 253ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian 254ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian // protected by mSurfaceLock. These are also used from lock/unlock 255ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian // but in that case, they must be called form the same thread. 2563330b203039dea366d4981db1408a460134b2d2cMathias Agopian sp<GraphicBuffer> mBuffers[2]; 257edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mutable Region mDirtyRegion; 258ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian 259ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian // must be used from the lock/unlock thread 2603330b203039dea366d4981db1408a460134b2d2cMathias Agopian sp<GraphicBuffer> mLockedBuffer; 2613330b203039dea366d4981db1408a460134b2d2cMathias Agopian sp<GraphicBuffer> mPostedBuffer; 262ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian mutable Region mOldDirtyRegion; 263245e4d78c5fb304fe153c36303ec69bf8a907f65Mathias Agopian bool mReserved; 264ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian 265ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian // query() must be called from dequeueBuffer() thread 266ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian uint32_t mWidth; 267ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian uint32_t mHeight; 268ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian 269ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian // Inherently thread-safe 270edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mutable Mutex mSurfaceLock; 271cbb288bfe89f585bf48371bd31b2d4aafa32f32eMathias Agopian mutable Mutex mApiLock; 272edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 273edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 274edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android 275edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 2769cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian#endif // ANDROID_SF_SURFACE_H 277edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 278