16a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu/* 2cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// Copyright (c) 2014 Intel Corporation 3cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// 4cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// Licensed under the Apache License, Version 2.0 (the "License"); 5cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// you may not use this file except in compliance with the License. 6cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// You may obtain a copy of the License at 7cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// 8cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// http://www.apache.org/licenses/LICENSE-2.0 9cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// 10cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// Unless required by applicable law or agreed to in writing, software 11cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// distributed under the License is distributed on an "AS IS" BASIS, 12cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// See the License for the specific language governing permissions and 14cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// limitations under the License. 15cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika*/ 166a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#ifndef DISPLAYPLANE_H_ 176a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#define DISPLAYPLANE_H_ 186a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 19e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li#include <utils/KeyedVector.h> 20e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li#include <BufferMapper.h> 210594c42af26255fd8d3d7d39c0cb0e2da5b8841bThierry Strudel#include <common/base/Drm.h> 226a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 236a6081a46a83da606cf21548879b37695adc7e1fAndy Qiunamespace android { 246a6081a46a83da606cf21548879b37695adc7e1fAndy Qiunamespace intel { 256a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 266a6081a46a83da606cf21548879b37695adc7e1fAndy Qiutypedef struct { 27e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li // align with android, using 'int' here 286a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int x; 296a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int y; 306a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int w; 316a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int h; 326a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} PlanePosition; 336a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 346a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuenum { 356a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // support up to 4 overlays 366a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu MAX_OVERLAY_COUNT = 4, 3709149b5d023fe6407dc09a6636c4b4d1d189738fJackie Li MAX_SPRITE_COUNT = 4, 386a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu}; 396a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 40466748a6f67ce4d1ad8baa944e68a88cf3c86d26Austin Huenum { 41466748a6f67ce4d1ad8baa944e68a88cf3c86d26Austin Hu // in version 1.3, HWC_FRAMEBUFFER_TARGET is defined as 3 42466748a6f67ce4d1ad8baa944e68a88cf3c86d26Austin Hu HWC_FORCE_FRAMEBUFFER = 255, 43466748a6f67ce4d1ad8baa944e68a88cf3c86d26Austin Hu}; 44466748a6f67ce4d1ad8baa944e68a88cf3c86d26Austin Hu 45d9045abeda7b707f3c55779989fc77b2197bc38eJackie Liclass ZOrderConfig; 466a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 476a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuclass DisplayPlane { 486a6081a46a83da606cf21548879b37695adc7e1fAndy Qiupublic: 496a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // plane type 506a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu enum { 51c5bd3cd6c8e854c6581105a5867e4d251b5281feJackie Li PLANE_SPRITE = 0, 526a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu PLANE_OVERLAY, 536a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu PLANE_PRIMARY, 54a6ca0e98674e3f1b0a7239f6e775cae2f667fe5cLei Zhang PLANE_CURSOR, 556a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu PLANE_MAX, 566a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu }; 57e2b2a5fe291662041d1bbec00996c2ba302dc4c9Andy Qiu 58e2b2a5fe291662041d1bbec00996c2ba302dc4c9Andy Qiu enum { 59da6edc35caf0d7dfff71b8c4c258a93eb1f86992Lei Zhang // one more than android's back buffer count to allow more space 60da6edc35caf0d7dfff71b8c4c258a93eb1f86992Lei Zhang // to do map/unmap, as plane reallocation may unmap on-screen layer. 61c5bd3cd6c8e854c6581105a5867e4d251b5281feJackie Li // each plane will cache the latest MIN_DATA_BUFFER_COUNT buffers 62c5bd3cd6c8e854c6581105a5867e4d251b5281feJackie Li // in case that these buffers are still in-using by display device 63c5bd3cd6c8e854c6581105a5867e4d251b5281feJackie Li // other buffers will be released on cache invalidation 64da6edc35caf0d7dfff71b8c4c258a93eb1f86992Lei Zhang MIN_DATA_BUFFER_COUNT = 4, 65e2b2a5fe291662041d1bbec00996c2ba302dc4c9Andy Qiu }; 66e2b2a5fe291662041d1bbec00996c2ba302dc4c9Andy Qiu 67ae31aa8b60bedde362c43f3e040138ff6bfe77ccJackie Liprotected: 68ae31aa8b60bedde362c43f3e040138ff6bfe77ccJackie Li enum { 69ae31aa8b60bedde362c43f3e040138ff6bfe77ccJackie Li PLANE_POSITION_CHANGED = 0x00000001UL, 70ae31aa8b60bedde362c43f3e040138ff6bfe77ccJackie Li PLANE_BUFFER_CHANGED = 0x00000002UL, 71ae31aa8b60bedde362c43f3e040138ff6bfe77ccJackie Li PLANE_SOURCE_CROP_CHANGED = 0x00000004UL, 72ae31aa8b60bedde362c43f3e040138ff6bfe77ccJackie Li PLANE_TRANSFORM_CHANGED = 0x00000008UL, 73ae31aa8b60bedde362c43f3e040138ff6bfe77ccJackie Li }; 746a6081a46a83da606cf21548879b37695adc7e1fAndy Qiupublic: 756a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu DisplayPlane(int index, int type, int disp); 766a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual ~DisplayPlane(); 776a6081a46a83da606cf21548879b37695adc7e1fAndy Qiupublic: 786a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual int getIndex() const { return mIndex; } 796a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual int getType() const { return mType; } 806a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool initCheck() const { return mInitialized; } 816a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 826a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // data destination 836a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual void setPosition(int x, int y, int w, int h); 846a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual void setSourceCrop(int x, int y, int w, int h); 856a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual void setTransform(int transform); 8610e89b1bb0d08ad3d037691125908641a914b58elychenx virtual void setPlaneAlpha(uint8_t alpha, uint32_t blending); 876a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 886a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // data source 896a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool setDataBuffer(uint32_t handle); 90c5bd3cd6c8e854c6581105a5867e4d251b5281feJackie Li 916a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual void invalidateBufferCache(); 926a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 936a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // display device 946a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool assignToDevice(int disp); 956a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 966a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // hardware operations 97e2ad4c047651d4442f6a0e002290016d45e9201afu jin virtual bool flip(void *ctx); 9893d8b1eff292888eeb8bf47299a766185a4fc8b0Andy Qiu virtual void postFlip(); 994a17bd5f8632806430043ab67e10c54a1406a7a2Jackie Li 100c5bd3cd6c8e854c6581105a5867e4d251b5281feJackie Li virtual bool reset(); 1016a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool enable() = 0; 1026a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool disable() = 0; 10368dbca089b413041774b80ef5bf95a4f4a858489Lei Zhang virtual bool isDisabled() = 0; 1046a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1056a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // set z order config 106d191dc7a785f312ede10d711720d8ca32a71b44cJackie Li virtual void setZOrderConfig(ZOrderConfig& config, 107d191dc7a785f312ede10d711720d8ca32a71b44cJackie Li void *nativeConfig) = 0; 108d191dc7a785f312ede10d711720d8ca32a71b44cJackie Li 109d9045abeda7b707f3c55779989fc77b2197bc38eJackie Li virtual void setZOrder(int zorder); 110d9045abeda7b707f3c55779989fc77b2197bc38eJackie Li virtual int getZOrder() const; 1116a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1126a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual void* getContext() const = 0; 1136a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 114e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li virtual bool initialize(uint32_t bufferCount); 115e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li virtual void deinitialize(); 116e2ad4c047651d4442f6a0e002290016d45e9201afu jin 1176a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuprotected: 1184a17bd5f8632806430043ab67e10c54a1406a7a2Jackie Li virtual void checkPosition(int& x, int& y, int& w, int& h); 1196a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool setDataBuffer(BufferMapper& mapper) = 0; 120e2ad4c047651d4442f6a0e002290016d45e9201afu jinprivate: 121c5bd3cd6c8e854c6581105a5867e4d251b5281feJackie Li inline BufferMapper* mapBuffer(DataBuffer *buffer); 122e2ad4c047651d4442f6a0e002290016d45e9201afu jin 123c5bd3cd6c8e854c6581105a5867e4d251b5281feJackie Li inline bool isActiveBuffer(BufferMapper *mapper); 124c5bd3cd6c8e854c6581105a5867e4d251b5281feJackie Li void updateActiveBuffers(BufferMapper *mapper); 125c5bd3cd6c8e854c6581105a5867e4d251b5281feJackie Li void invalidateActiveBuffers(); 1266a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuprotected: 1276a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int mIndex; 1286a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int mType; 129d9045abeda7b707f3c55779989fc77b2197bc38eJackie Li int mZOrder; 1306a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int mDevice; 1316a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu bool mInitialized; 132c5bd3cd6c8e854c6581105a5867e4d251b5281feJackie Li 133c5bd3cd6c8e854c6581105a5867e4d251b5281feJackie Li // cached data buffers 134e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li KeyedVector<uint64_t, BufferMapper*> mDataBuffers; 135e2ad4c047651d4442f6a0e002290016d45e9201afu jin // holding the most recent buffers 136c5bd3cd6c8e854c6581105a5867e4d251b5281feJackie Li Vector<BufferMapper*> mActiveBuffers; 137569c4d797688db12498ad1b91cd9d5ed48bfcfe5Jackie Li int mCacheCapacity; 138c5bd3cd6c8e854c6581105a5867e4d251b5281feJackie Li 1396a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu PlanePosition mPosition; 1406a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu crop_t mSrcCrop; 14125caf44022e04f4dc131e51b85b2fb8f966d57e7Andy Qiu bool mIsProtectedBuffer; 1426a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int mTransform; 1430fd589de3567b56cc3645ce014d5ad84d12fcb8eLei Zhang uint8_t mPlaneAlpha; 14410e89b1bb0d08ad3d037691125908641a914b58elychenx uint32_t mBlending; 1454a17bd5f8632806430043ab67e10c54a1406a7a2Jackie Li uint32_t mCurrentDataBuffer; 146ae31aa8b60bedde362c43f3e040138ff6bfe77ccJackie Li uint32_t mUpdateMasks; 147ab302a7c5992e3668443dc9bdac481c108c20a34Lee, Stanley drmModeModeInfo mModeInfo; 148ab302a7c5992e3668443dc9bdac481c108c20a34Lee, Stanley int mPanelOrientation; 149af3bf2227c951a59e2dcc44ab90790d247225375Andy Qiu 150af3bf2227c951a59e2dcc44ab90790d247225375Andy Qiuprotected: 151af3bf2227c951a59e2dcc44ab90790d247225375Andy Qiu bool mForceScaling; 152af3bf2227c951a59e2dcc44ab90790d247225375Andy Qiu uint32_t mDisplayWidth; 153af3bf2227c951a59e2dcc44ab90790d247225375Andy Qiu uint32_t mDisplayHeight; 154af3bf2227c951a59e2dcc44ab90790d247225375Andy Qiu crop_t mDisplayCrop; 155af3bf2227c951a59e2dcc44ab90790d247225375Andy Qiu uint32_t mScalingSource; 156af3bf2227c951a59e2dcc44ab90790d247225375Andy Qiu uint32_t mScalingTarget; 157af3bf2227c951a59e2dcc44ab90790d247225375Andy Qiu 1586a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu}; 1596a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1606a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} // namespace intel 1616a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} // namespace android 1626a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1636a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#endif /* DISPLAYPLANE_H_ */ 164