Layer.h revision a67932fe6864ac346e7f78b86df11cf6c5344137
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_LAYER_H 18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define ANDROID_LAYER_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 23a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian#include <gui/SurfaceTexture.h> 24a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian 25a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian#include <pixelflinger/pixelflinger.h> 263330b203039dea366d4981db1408a460134b2d2cMathias Agopian#include <ui/GraphicBuffer.h> 27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <ui/PixelFormat.h> 28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 29076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#include <EGL/egl.h> 30076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#include <EGL/eglext.h> 31076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#include <GLES/gl.h> 32076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#include <GLES/glext.h> 33076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "LayerBase.h" 35a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian#include "SurfaceTextureLayer.h" 36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "Transform.h" 37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android { 39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 421f7bec634f19c123410a5155c8d282e177c01930Mathias Agopianclass FreezeLock; 43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass Client; 441f7bec634f19c123410a5155c8d282e177c01930Mathias Agopianclass GLExtensions; 45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass Layer : public LayerBaseClient 49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 50d606de6bb6877dc4ab93ec0be0c6bda4a8ee1ce8Mathias Agopianpublic: 51b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian Layer(SurfaceFlinger* flinger, DisplayID display, 52b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian const sp<Client>& client); 53d606de6bb6877dc4ab93ec0be0c6bda4a8ee1ce8Mathias Agopian 54b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian virtual ~Layer(); 55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 56b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian virtual const char* getTypeId() const { return "Layer"; } 57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 58b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // the this layer's size and format 59cbb288bfe89f585bf48371bd31b2d4aafa32f32eMathias Agopian status_t setBuffers(uint32_t w, uint32_t h, 60cbb288bfe89f585bf48371bd31b2d4aafa32f32eMathias Agopian PixelFormat format, uint32_t flags=0); 61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 62b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // Set this Layer's buffers size 63a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian bool isFixedSize() const; 64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 65b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // LayerBase interface 66a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian virtual void setGeometry(hwc_layer_t* hwcl); 67a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian virtual void setPerFrameData(hwc_layer_t* hwcl); 68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void onDraw(const Region& clip) const; 69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual uint32_t doTransaction(uint32_t transactionFlags); 70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void lockPageFlip(bool& recomputeVisibleRegions); 71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void unlockPageFlip(const Transform& planeTransform, Region& outDirtyRegion); 72a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian virtual bool isOpaque() const; 73401c257fba770a267f637184b1f532b4e03bed20Mathias Agopian virtual bool needsDithering() const { return mNeedsDithering; } 74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual bool isSecure() const { return mSecure; } 757a4d0dfd43558c299e6af6c4910ef76db9db3172Jamie Gennis virtual bool isProtected() const; 76d606de6bb6877dc4ab93ec0be0c6bda4a8ee1ce8Mathias Agopian virtual void onRemoved(); 77b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 78cbb288bfe89f585bf48371bd31b2d4aafa32f32eMathias Agopian // only for debugging 79a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian inline const sp<FreezeLock>& getFreezeLock() const { return mFreezeLock; } 801b5e1021b8c9b87113b70d94dfb7b50f8c5b01b8Mathias Agopian 811b5e1021b8c9b87113b70d94dfb7b50f8c5b01b8Mathias Agopianprotected: 82ca4d3602c07837d0b2ac6878685a8e327b5f30f0Mathias Agopian virtual void destroy() const; 83a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian virtual void onFirstRef(); 841b5e1021b8c9b87113b70d94dfb7b50f8c5b01b8Mathias Agopian virtual void dump(String8& result, char* scratch, size_t size) const; 851b5e1021b8c9b87113b70d94dfb7b50f8c5b01b8Mathias Agopian 86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate: 87a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian friend class SurfaceTextureLayer; 88a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian void onFrameQueued(); 89a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian virtual sp<ISurface> createSurface(); 903330b203039dea366d4981db1408a460134b2d2cMathias Agopian uint32_t getEffectiveUsage(uint32_t usage) const; 91a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian void setFixedSize(bool fixedSize); 92a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian bool isCropped() const; 93a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian static bool getOpacityForFormat(uint32_t format); 94b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 95b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // ----------------------------------------------------------------------- 96b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 97a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian // constants 98a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian sp<SurfaceTextureLayer> mSurfaceTexture; 99a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian GLuint mTextureName; 100b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 101b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // thread-safe 102a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian volatile int32_t mQueuedFrames; 103a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian 104a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian // main thread 105a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian sp<GraphicBuffer> mActiveBuffer; 106a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian GLfloat mTextureMatrix[16]; 107a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian Rect mCurrentCrop; 108a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian uint32_t mCurrentTransform; 109a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian bool mCurrentOpacity; 110b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 111b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // constants 112b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian PixelFormat mFormat; 1131f7bec634f19c123410a5155c8d282e177c01930Mathias Agopian const GLExtensions& mGLExtensions; 114a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian bool mOpaqueLayer; 115b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian bool mNeedsDithering; 116b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 117b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // page-flip thread (currently main thread) 11816f0453fee84c6aad59fe0d1c7d36f061d46cffcGlenn Kasten bool mSecure; // no screenshots 11916f0453fee84c6aad59fe0d1c7d36f061d46cffcGlenn Kasten bool mProtectedByApp; // application requires protected path to external sink 120b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian Region mPostedDirtyRegion; 121b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 122b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // page-flip thread and transaction thread (currently main thread) 123b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian sp<FreezeLock> mFreezeLock; 124b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 125b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // binder thread, transaction thread 126b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian mutable Mutex mLock; 127b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian bool mFixedSize; 128edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 129edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 130edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 131edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 132edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android 133edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 134edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // ANDROID_LAYER_H 135