Layer.h revision a402c4c9913cfbc6c3da21719c57a93a11f091f0
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 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef ANDROID_LAYER_H 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define ANDROID_LAYER_H 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdint.h> 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <sys/types.h> 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 23b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <gui/SurfaceTexture.h> 24ebf9a0d8a888042c16ec0cb6dd8419f18038663fMike Lockwood 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <pixelflinger/pixelflinger.h> 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <ui/GraphicBuffer.h> 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <ui/PixelFormat.h> 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <EGL/egl.h> 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <EGL/eglext.h> 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <GLES/gl.h> 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <GLES/glext.h> 33ebf9a0d8a888042c16ec0cb6dd8419f18038663fMike Lockwood 348335f1ccccedb6655d96d9d5b697a7f0938235ddMathias Agopian#include "LayerBase.h" 358335f1ccccedb6655d96d9d5b697a7f0938235ddMathias Agopian#include "SurfaceTextureLayer.h" 368335f1ccccedb6655d96d9d5b697a7f0938235ddMathias Agopian#include "Transform.h" 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android { 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 40bc7261130a51dc9f3461d3970eee1b923bcbf193Mathias Agopian// --------------------------------------------------------------------------- 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass Client; 43627e7b50be41e4fdee758a1bfad3a55de56b4e27Mathias Agopianclass GLExtensions; 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// --------------------------------------------------------------------------- 46bc7261130a51dc9f3461d3970eee1b923bcbf193Mathias Agopian 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass Layer : public LayerBaseClient 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Layer(SurfaceFlinger* flinger, DisplayID display, 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const sp<Client>& client); 52bc7261130a51dc9f3461d3970eee1b923bcbf193Mathias Agopian 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ~Layer(); 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual const char* getTypeId() const { return "Layer"; } 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // the this layer's size and format 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t setBuffers(uint32_t w, uint32_t h, 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PixelFormat format, uint32_t flags=0); 60a8826d67097b12cf9d6b14a7e32c0862f17b189aMathias Agopian 61a8826d67097b12cf9d6b14a7e32c0862f17b189aMathias Agopian bool isFixedSize() const; 62a8826d67097b12cf9d6b14a7e32c0862f17b189aMathias Agopian 63a8826d67097b12cf9d6b14a7e32c0862f17b189aMathias Agopian // LayerBase interface 64a8826d67097b12cf9d6b14a7e32c0862f17b189aMathias Agopian virtual void setGeometry(hwc_layer_t* hwcl); 65a8826d67097b12cf9d6b14a7e32c0862f17b189aMathias Agopian virtual void setPerFrameData(hwc_layer_t* hwcl); 66a8826d67097b12cf9d6b14a7e32c0862f17b189aMathias Agopian virtual void onDraw(const Region& clip) const; 67a8826d67097b12cf9d6b14a7e32c0862f17b189aMathias Agopian virtual uint32_t doTransaction(uint32_t transactionFlags); 68a8826d67097b12cf9d6b14a7e32c0862f17b189aMathias Agopian virtual void lockPageFlip(bool& recomputeVisibleRegions); 69a8826d67097b12cf9d6b14a7e32c0862f17b189aMathias Agopian virtual void unlockPageFlip(const Transform& planeTransform, Region& outDirtyRegion); 70a8826d67097b12cf9d6b14a7e32c0862f17b189aMathias Agopian virtual bool isOpaque() const; 71a8826d67097b12cf9d6b14a7e32c0862f17b189aMathias Agopian virtual bool needsDithering() const { return mNeedsDithering; } 72a8826d67097b12cf9d6b14a7e32c0862f17b189aMathias Agopian virtual bool isSecure() const { return mSecure; } 73a8826d67097b12cf9d6b14a7e32c0862f17b189aMathias Agopian virtual bool isProtected() const; 74d3782b26b2026e60a8e0d4b967a156369f2a46f8Kevin Hester virtual void onRemoved(); 75083b84cf8880bb7f0d2c2dc1b45c7d610656dbd1Jesse Hall virtual sp<Layer> getLayer() const { return const_cast<Layer*>(this); } 76ebf9a0d8a888042c16ec0cb6dd8419f18038663fMike Lockwood virtual void setName(const String8& name); 77a8826d67097b12cf9d6b14a7e32c0862f17b189aMathias Agopian 78a8826d67097b12cf9d6b14a7e32c0862f17b189aMathias Agopian // LayerBaseClient interface 79a8826d67097b12cf9d6b14a7e32c0862f17b189aMathias Agopian virtual wp<IBinder> getSurfaceTextureBinder() const; 80a8826d67097b12cf9d6b14a7e32c0862f17b189aMathias Agopian 81a8826d67097b12cf9d6b14a7e32c0862f17b189aMathias Agopian // only for debugging 82a8826d67097b12cf9d6b14a7e32c0862f17b189aMathias Agopian inline const sp<GraphicBuffer>& getActiveBuffer() const { return mActiveBuffer; } 83a8826d67097b12cf9d6b14a7e32c0862f17b189aMathias Agopian 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprotected: 850c1eeb3c8ab53954218d3b8f4be08ff21be3e985Mykola Kondratenko virtual void onFirstRef(); 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void dump(String8& result, char* scratch, size_t size) const; 87ebf9a0d8a888042c16ec0cb6dd8419f18038663fMike Lockwood 88a8826d67097b12cf9d6b14a7e32c0862f17b189aMathias Agopianprivate: 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project friend class SurfaceTextureLayer; 90d3782b26b2026e60a8e0d4b967a156369f2a46f8Kevin Hester void onFrameQueued(); 91d3782b26b2026e60a8e0d4b967a156369f2a46f8Kevin Hester virtual sp<ISurface> createSurface(); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t getEffectiveUsage(uint32_t usage) const; 93ebf9a0d8a888042c16ec0cb6dd8419f18038663fMike Lockwood uint32_t getTransformHint() const; 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool isCropped() const; 95b2cf954cb47a73065aa4b7fed753877615614f41Mathias Agopian static bool getOpacityForFormat(uint32_t format); 96b2cf954cb47a73065aa4b7fed753877615614f41Mathias Agopian 97b2cf954cb47a73065aa4b7fed753877615614f41Mathias Agopian // ----------------------------------------------------------------------- 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // constants 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<SurfaceTextureLayer> mSurfaceTexture; 10117f638b39f2e8b610ecfa1290e5bc42ab7700c98Mathias Agopian GLuint mTextureName; 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 103afd31e08299008fdc5c2813f21b2573f29dc53dfNarayan Kamath // thread-safe 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project volatile int32_t mQueuedFrames; 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // main thread 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<GraphicBuffer> mActiveBuffer; 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLfloat mTextureMatrix[16]; 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Rect mCurrentCrop; 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t mCurrentTransform; 111 uint32_t mCurrentScalingMode; 112 bool mCurrentOpacity; 113 114 // constants 115 PixelFormat mFormat; 116 const GLExtensions& mGLExtensions; 117 bool mOpaqueLayer; 118 bool mNeedsDithering; 119 120 // page-flip thread (currently main thread) 121 bool mSecure; // no screenshots 122 bool mProtectedByApp; // application requires protected path to external sink 123 Region mPostedDirtyRegion; 124 125 // binder thread, transaction thread 126 mutable Mutex mLock; 127}; 128 129// --------------------------------------------------------------------------- 130 131}; // namespace android 132 133#endif // ANDROID_LAYER_H 134