Surface.h revision aca4e2287939b4ce3d9e9aced64c5c9641333503
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 23aca4e2287939b4ce3d9e9aced64c5c9641333503Jamie Gennis#include <utils/KeyedVector.h> 24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/RefBase.h> 25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/threads.h> 26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <ui/PixelFormat.h> 28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <ui/Region.h> 297189c0054e29a66d945f5657c48d5ecf538ea511Mathias Agopian#include <ui/egl/android_natives.h> 30076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 319cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian#include <surfaceflinger/ISurface.h> 327e27f05739c8a2655cf0f7faea35614ce0a50278Mathias Agopian#include <surfaceflinger/ISurfaceComposerClient.h> 339cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian 34e4e8cf1f19002be418aad1b89fa6bb8aeabf9f65Mathias Agopian#define ANDROID_VIEW_SURFACE_JNI_ID "mNativeSurface" 35e4e8cf1f19002be418aad1b89fa6bb8aeabf9f65Mathias Agopian 36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android { 37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 40a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopianclass GraphicBuffer; 413330b203039dea366d4981db1408a460134b2d2cMathias Agopianclass GraphicBufferMapper; 42e186431c33fa332b585e37f6b5ef5efd39b359cfAndreas Huberclass IOMX; 43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass Rect; 440926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopianclass Surface; 45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass SurfaceComposerClient; 46cbb288bfe89f585bf48371bd31b2d4aafa32f32eMathias Agopianclass SharedClient; 47cbb288bfe89f585bf48371bd31b2d4aafa32f32eMathias Agopianclass SharedBufferClient; 48d4784a3b90f849e8732968d45886fb0c8f0d8cf3Mathias Agopianclass SurfaceClient; 49076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 50076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian// --------------------------------------------------------------------------- 51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 5262185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopianclass SurfaceControl : public RefBase 5362185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian{ 5462185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopianpublic: 5562185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian static bool isValid(const sp<SurfaceControl>& surface) { 5601b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian return (surface != 0) && surface->isValid(); 5762185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian } 5801b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian bool isValid() { 5901b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian return mToken>=0 && mClient!=0; 6001b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian } 6101b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian static bool isSameSurface( 6201b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian const sp<SurfaceControl>& lhs, const sp<SurfaceControl>& rhs); 6362185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 6462185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian uint32_t getFlags() const { return mFlags; } 6562185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian uint32_t getIdentity() const { return mIdentity; } 6662185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 6762185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian // release surface data from java 6862185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian void clear(); 6962185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 7062185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t setLayer(int32_t layer); 7162185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t setPosition(int32_t x, int32_t y); 7262185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t setSize(uint32_t w, uint32_t h); 7362185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t hide(); 7462185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t show(int32_t layer = -1); 7562185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t freeze(); 7662185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t unfreeze(); 7762185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t setFlags(uint32_t flags, uint32_t mask); 7862185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t setTransparentRegionHint(const Region& transparent); 7962185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t setAlpha(float alpha=1.0f); 8062185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t setMatrix(float dsdx, float dtdx, float dsdy, float dtdy); 8162185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian status_t setFreezeTint(uint32_t tint); 8262185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 8301b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian static status_t writeSurfaceToParcel( 8401b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian const sp<SurfaceControl>& control, Parcel* parcel); 8501b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian 8601b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian sp<Surface> getSurface() const; 8701b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian 8862185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopianprivate: 8901b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian // can't be copied 9001b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian SurfaceControl& operator = (SurfaceControl& rhs); 9101b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian SurfaceControl(const SurfaceControl& rhs); 9201b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian 9301b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian 9462185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian friend class SurfaceComposerClient; 9562185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 9662185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian // camera and camcorder need access to the ISurface binder interface for preview 9762185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian friend class Camera; 9862185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian friend class MediaRecorder; 9962185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian // mediaplayer needs access to ISurface for display 10062185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian friend class MediaPlayer; 10101b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian // for testing 10262185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian friend class Test; 10362185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian const sp<ISurface>& getISurface() const { return mSurface; } 10462185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 10562185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 10662185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian friend class Surface; 10701b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian 10801b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian SurfaceControl( 10901b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian const sp<SurfaceComposerClient>& client, 11062185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian const sp<ISurface>& surface, 1117e27f05739c8a2655cf0f7faea35614ce0a50278Mathias Agopian const ISurfaceComposerClient::surface_data_t& data, 11218d8446fe1596cd50561777e1d1a8c7b39c689f6Mathias Agopian uint32_t w, uint32_t h, PixelFormat format, uint32_t flags); 11362185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 11462185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian ~SurfaceControl(); 11501b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian 116963abad79ae64dae9bf4c32bfb110d9e6314c857Mathias Agopian status_t validate() const; 11762185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian void destroy(); 11862185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 11962185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian sp<SurfaceComposerClient> mClient; 12062185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian sp<ISurface> mSurface; 12162185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian SurfaceID mToken; 12262185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian uint32_t mIdentity; 123cb6b9041647b4f080324742eee5ce709960ff610Mathias Agopian uint32_t mWidth; 124cb6b9041647b4f080324742eee5ce709960ff610Mathias Agopian uint32_t mHeight; 12562185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian PixelFormat mFormat; 12662185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian uint32_t mFlags; 12762185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian mutable Mutex mLock; 12801b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian 12901b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian mutable sp<Surface> mSurfaceData; 13062185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian}; 13162185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 13262185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian// --------------------------------------------------------------------------- 13362185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian 134076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopianclass Surface 1354b5e91e4820f03dba7dcc36e4b148331bc964b4bDianne Hackborn : public EGLNativeBase<ANativeWindow, Surface, RefBase> 136076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian{ 137edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic: 138edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project struct SurfaceInfo { 139edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t w; 140edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t h; 141076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian uint32_t s; 142076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian uint32_t usage; 143edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project PixelFormat format; 144edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void* bits; 145edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t reserved[2]; 146edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project }; 147edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 148579b3f88d03d06b897b778bd11818f5104677d1dMathias Agopian static status_t writeToParcel( 149579b3f88d03d06b897b778bd11818f5104677d1dMathias Agopian const sp<Surface>& control, Parcel* parcel); 150579b3f88d03d06b897b778bd11818f5104677d1dMathias Agopian 151aca4e2287939b4ce3d9e9aced64c5c9641333503Jamie Gennis static sp<Surface> readFromParcel(const Parcel& data); 15201b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian 15340b7f6e0433b89c27b2fe5a1c0c47f67b42eceb2Mathias Agopian static bool isValid(const sp<Surface>& surface) { 15401b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian return (surface != 0) && surface->isValid(); 15540b7f6e0433b89c27b2fe5a1c0c47f67b42eceb2Mathias Agopian } 156ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian 157ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian bool isValid(); 158ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian uint32_t getFlags() const { return mFlags; } 159ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian uint32_t getIdentity() const { return mIdentity; } 16040b7f6e0433b89c27b2fe5a1c0c47f67b42eceb2Mathias Agopian 161ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian // the lock/unlock APIs must be used from the same thread 162edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t lock(SurfaceInfo* info, bool blocking = true); 163edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t lock(SurfaceInfo* info, Region* dirty, bool blocking = true); 164edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t unlockAndPost(); 165edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 1660926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopian // setSwapRectangle() is intended to be used by GL ES clients 167edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void setSwapRectangle(const Rect& r); 168edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 169edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 170b296533607232357597b255679db29470ab5925dMathias Agopianprivate: 171b296533607232357597b255679db29470ab5925dMathias Agopian /* 172b296533607232357597b255679db29470ab5925dMathias Agopian * Android frameworks friends 173b296533607232357597b255679db29470ab5925dMathias Agopian * (eventually this should go away and be replaced by proper APIs) 174b296533607232357597b255679db29470ab5925dMathias Agopian */ 175edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // camera and camcorder need access to the ISurface binder interface for preview 176edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project friend class Camera; 177edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project friend class MediaRecorder; 178b296533607232357597b255679db29470ab5925dMathias Agopian // MediaPlayer needs access to ISurface for display 179edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project friend class MediaPlayer; 180e186431c33fa332b585e37f6b5ef5efd39b359cfAndreas Huber friend class IOMX; 181ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian // this is just to be able to write some unit tests 182ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian friend class Test; 183ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian 184b296533607232357597b255679db29470ab5925dMathias Agopianprivate: 185b296533607232357597b255679db29470ab5925dMathias Agopian friend class SurfaceComposerClient; 186b296533607232357597b255679db29470ab5925dMathias Agopian friend class SurfaceControl; 187edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 188b296533607232357597b255679db29470ab5925dMathias Agopian // can't be copied 189b296533607232357597b255679db29470ab5925dMathias Agopian Surface& operator = (Surface& rhs); 190b296533607232357597b255679db29470ab5925dMathias Agopian Surface(const Surface& rhs); 191076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 192b296533607232357597b255679db29470ab5925dMathias Agopian Surface(const sp<SurfaceControl>& control); 193a0c30e924193da57723fd53b710ce6be24fb26f5Mathias Agopian Surface(const Parcel& data, const sp<IBinder>& ref); 194b296533607232357597b255679db29470ab5925dMathias Agopian ~Surface(); 195b296533607232357597b255679db29470ab5925dMathias Agopian 196b296533607232357597b255679db29470ab5925dMathias Agopian 197b296533607232357597b255679db29470ab5925dMathias Agopian /* 1984b5e91e4820f03dba7dcc36e4b148331bc964b4bDianne Hackborn * ANativeWindow hooks 199b296533607232357597b255679db29470ab5925dMathias Agopian */ 2004b5e91e4820f03dba7dcc36e4b148331bc964b4bDianne Hackborn static int setSwapInterval(ANativeWindow* window, int interval); 2014b5e91e4820f03dba7dcc36e4b148331bc964b4bDianne Hackborn static int dequeueBuffer(ANativeWindow* window, android_native_buffer_t** buffer); 2024b5e91e4820f03dba7dcc36e4b148331bc964b4bDianne Hackborn static int lockBuffer(ANativeWindow* window, android_native_buffer_t* buffer); 2034b5e91e4820f03dba7dcc36e4b148331bc964b4bDianne Hackborn static int queueBuffer(ANativeWindow* window, android_native_buffer_t* buffer); 2044b5e91e4820f03dba7dcc36e4b148331bc964b4bDianne Hackborn static int query(ANativeWindow* window, int what, int* value); 2054b5e91e4820f03dba7dcc36e4b148331bc964b4bDianne Hackborn static int perform(ANativeWindow* window, int operation, ...); 206076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 207076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian int dequeueBuffer(android_native_buffer_t** buffer); 208076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian int lockBuffer(android_native_buffer_t* buffer); 209076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian int queueBuffer(android_native_buffer_t* buffer); 210cb6b9041647b4f080324742eee5ce709960ff610Mathias Agopian int query(int what, int* value); 2115221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian int perform(int operation, va_list args); 2120926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopian 21355fa25161a7626ae6a15bc2cc46e22771455ed80Mathias Agopian void dispatch_setUsage(va_list args); 21455fa25161a7626ae6a15bc2cc46e22771455ed80Mathias Agopian int dispatch_connect(va_list args); 21555fa25161a7626ae6a15bc2cc46e22771455ed80Mathias Agopian int dispatch_disconnect(va_list args); 216cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian int dispatch_crop(va_list args); 217f10d7fde03218c17251416a34d7b726a43ec528aMathias Agopian int dispatch_set_buffer_count(va_list args); 218a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian int dispatch_set_buffers_geometry(va_list args); 219076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 220ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian void setUsage(uint32_t reqUsage); 22155fa25161a7626ae6a15bc2cc46e22771455ed80Mathias Agopian int connect(int api); 22255fa25161a7626ae6a15bc2cc46e22771455ed80Mathias Agopian int disconnect(int api); 223cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian int crop(Rect const* rect); 224b5b7f260da2c1a2a82e0311e2015d49a82f43667Mathias Agopian int setBufferCount(int bufferCount); 225a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian int setBuffersGeometry(int w, int h, int format); 22655fa25161a7626ae6a15bc2cc46e22771455ed80Mathias Agopian 227b296533607232357597b255679db29470ab5925dMathias Agopian /* 228b296533607232357597b255679db29470ab5925dMathias Agopian * private stuff... 229b296533607232357597b255679db29470ab5925dMathias Agopian */ 230b296533607232357597b255679db29470ab5925dMathias Agopian void init(); 231b296533607232357597b255679db29470ab5925dMathias Agopian status_t validate() const; 232b296533607232357597b255679db29470ab5925dMathias Agopian sp<ISurface> getISurface() const; 233b296533607232357597b255679db29470ab5925dMathias Agopian 234b296533607232357597b255679db29470ab5925dMathias Agopian inline const GraphicBufferMapper& getBufferMapper() const { return mBufferMapper; } 235b296533607232357597b255679db29470ab5925dMathias Agopian inline GraphicBufferMapper& getBufferMapper() { return mBufferMapper; } 236b296533607232357597b255679db29470ab5925dMathias Agopian 237a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian status_t getBufferLocked(int index, 238a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian uint32_t w, uint32_t h, uint32_t format, uint32_t usage); 239b296533607232357597b255679db29470ab5925dMathias Agopian int getBufferIndex(const sp<GraphicBuffer>& buffer) const; 240b296533607232357597b255679db29470ab5925dMathias Agopian 241a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian int getConnectedApi() const; 242ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian 243a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian bool needNewBuffer(int bufIdx, 244a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian uint32_t *pWidth, uint32_t *pHeight, 245a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian uint32_t *pFormat, uint32_t *pUsage) const; 246a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian 247aca4e2287939b4ce3d9e9aced64c5c9641333503Jamie Gennis static void cleanCachedSurfaces(); 248aca4e2287939b4ce3d9e9aced64c5c9641333503Jamie Gennis 249a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian class BufferInfo { 250a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian uint32_t mWidth; 251a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian uint32_t mHeight; 252a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian uint32_t mFormat; 253a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian uint32_t mUsage; 254a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian mutable uint32_t mDirty; 255a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian enum { 256a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian GEOMETRY = 0x01 257a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian }; 258a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian public: 259a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian BufferInfo(); 260a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian void set(uint32_t w, uint32_t h, uint32_t format); 261a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian void set(uint32_t usage); 262a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian void get(uint32_t *pWidth, uint32_t *pHeight, 263a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian uint32_t *pFormat, uint32_t *pUsage) const; 264a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian bool validateBuffer(const sp<GraphicBuffer>& buffer) const; 265a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian }; 266a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian 267ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian // constants 268b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian GraphicBufferMapper& mBufferMapper; 269b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian SurfaceClient& mClient; 270b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian SharedBufferClient* mSharedBufferClient; 271b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian status_t mInitCheck; 272edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project sp<ISurface> mSurface; 273edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t mIdentity; 274edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project PixelFormat mFormat; 275edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t mFlags; 276ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian 277ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian // protected by mSurfaceLock 278ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian Rect mSwapRectangle; 27955fa25161a7626ae6a15bc2cc46e22771455ed80Mathias Agopian int mConnected; 280cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian Rect mNextBufferCrop; 281a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian BufferInfo mBufferInfo; 282ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian 283ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian // protected by mSurfaceLock. These are also used from lock/unlock 284ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian // but in that case, they must be called form the same thread. 285edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mutable Region mDirtyRegion; 286ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian 287ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian // must be used from the lock/unlock thread 2883330b203039dea366d4981db1408a460134b2d2cMathias Agopian sp<GraphicBuffer> mLockedBuffer; 2893330b203039dea366d4981db1408a460134b2d2cMathias Agopian sp<GraphicBuffer> mPostedBuffer; 290ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian mutable Region mOldDirtyRegion; 291245e4d78c5fb304fe153c36303ec69bf8a907f65Mathias Agopian bool mReserved; 292ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian 293a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian // only used from dequeueBuffer() 294a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian Vector< sp<GraphicBuffer> > mBuffers; 295a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian 296ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian // query() must be called from dequeueBuffer() thread 297ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian uint32_t mWidth; 298ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian uint32_t mHeight; 299ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian 300ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian // Inherently thread-safe 301edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mutable Mutex mSurfaceLock; 302cbb288bfe89f585bf48371bd31b2d4aafa32f32eMathias Agopian mutable Mutex mApiLock; 303aca4e2287939b4ce3d9e9aced64c5c9641333503Jamie Gennis 304aca4e2287939b4ce3d9e9aced64c5c9641333503Jamie Gennis // A cache of Surface objects that have been deserialized into this process. 305aca4e2287939b4ce3d9e9aced64c5c9641333503Jamie Gennis static Mutex sCachedSurfacesLock; 306aca4e2287939b4ce3d9e9aced64c5c9641333503Jamie Gennis static DefaultKeyedVector<wp<IBinder>, wp<Surface> > sCachedSurfaces; 307edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 308edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 309edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android 310edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 3119cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian#endif // ANDROID_SF_SURFACE_H 312edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 313