Surface.h revision edbf3b6af777b721cd2a1ef461947e51e88241e1
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 31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android { 32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass Rect; 36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass SurfaceComposerClient; 37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass Surface : public RefBase 39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic: 42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project struct SurfaceInfo { 43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t w; 44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t h; 45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t bpr; 46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project PixelFormat format; 47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void* bits; 48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void* base; 49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t reserved[2]; 50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project }; 51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project bool isValid() const { return this && mToken>=0 && mClient!=0; } 53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project SurfaceID ID() const { return mToken; } 54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t lock(SurfaceInfo* info, bool blocking = true); 56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t lock(SurfaceInfo* info, Region* dirty, bool blocking = true); 57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t unlockAndPost(); 58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t unlock(); 59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void* heapBase(int i) const; 61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t getFlags() const { return mFlags; } 62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // setSwapRectangle() is mainly used by EGL 64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void setSwapRectangle(const Rect& r); 65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const Rect& swapRectangle() const; 66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t nextBuffer(SurfaceInfo* info); 67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project sp<Surface> dup() const; 69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project static sp<Surface> readFromParcel(Parcel* parcel); 70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project static status_t writeToParcel(const sp<Surface>& surface, Parcel* parcel); 71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project static bool isSameSurface(const sp<Surface>& lhs, const sp<Surface>& rhs); 72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t setLayer(int32_t layer); 74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t setPosition(int32_t x, int32_t y); 75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t setSize(uint32_t w, uint32_t h); 76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t hide(); 77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t show(int32_t layer = -1); 78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t freeze(); 79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t unfreeze(); 80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t setFlags(uint32_t flags, uint32_t mask); 81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t setTransparentRegionHint(const Region& transparent); 82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t setAlpha(float alpha=1.0f); 83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t setMatrix(float dsdx, float dtdx, float dsdy, float dtdy); 84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t setFreezeTint(uint32_t tint); 85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t getIdentity() const { return mIdentity; } 87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate: 88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project friend class SurfaceComposerClient; 89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // camera and camcorder need access to the ISurface binder interface for preview 91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project friend class Camera; 92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project friend class MediaRecorder; 93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // mediaplayer needs access to ISurface for display 94edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project friend class MediaPlayer; 95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project friend class Test; 96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const sp<ISurface>& getISurface() const { return mSurface; } 97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // can't be copied 99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Surface& operator = (Surface& rhs); 100edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Surface(const Surface& rhs); 101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Surface(const sp<SurfaceComposerClient>& client, 103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const sp<ISurface>& surface, 104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const ISurfaceFlingerClient::surface_data_t& data, 105edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t w, uint32_t h, PixelFormat format, uint32_t flags, 106edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project bool owner = true); 107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 108edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Surface(Surface const* rhs); 109edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 110edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ~Surface(); 111edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 112edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Region dirtyRegion() const; 113edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void setDirtyRegion(const Region& region) const; 114edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 115edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // this locks protects calls to lockSurface() / unlockSurface() 116edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // and is called by SurfaceComposerClient. 117edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Mutex& getLock() const { return mSurfaceLock; } 118edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 119edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project sp<SurfaceComposerClient> mClient; 120edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project sp<ISurface> mSurface; 121edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project sp<IMemoryHeap> mHeap[2]; 122edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project SurfaceID mToken; 123edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t mIdentity; 124edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project PixelFormat mFormat; 125edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t mFlags; 126edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const bool mOwner; 127edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mutable void* mSurfaceHeapBase[2]; 128edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mutable Region mDirtyRegion; 129edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mutable Rect mSwapRectangle; 130edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mutable uint8_t mBackbufferIndex; 131edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mutable Mutex mSurfaceLock; 132edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 133edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 134edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android 135edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 136edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // ANDROID_UI_SURFACE_H 137edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 138