DisplayPlane.h revision e6ecdadd57e79c2218b3e6ae407f12599f33bd22
16a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu/* 26a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * Copyright © 2012 Intel Corporation 36a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * All rights reserved. 46a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * 56a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * Permission is hereby granted, free of charge, to any person obtaining a 66a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * copy of this software and associated documentation files (the "Software"), 76a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * to deal in the Software without restriction, including without limitation 86a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * the rights to use, copy, modify, merge, publish, distribute, sublicense, 96a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * and/or sell copies of the Software, and to permit persons to whom the 106a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * Software is furnished to do so, subject to the following conditions: 116a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * 126a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * The above copyright notice and this permission notice (including the next 136a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * paragraph) shall be included in all copies or substantial portions of the 146a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * Software. 156a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * 166a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 176a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 186a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 196a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 206a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 216a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 226a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * IN THE SOFTWARE. 236a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * 246a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * Authors: 256a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * Jackie Li <yaodong.li@intel.com> 266a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * 276a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu */ 286a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#ifndef DISPLAYPLANE_H_ 296a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#define DISPLAYPLANE_H_ 306a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 31e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li#include <utils/KeyedVector.h> 32e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li#include <BufferMapper.h> 336a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 346a6081a46a83da606cf21548879b37695adc7e1fAndy Qiunamespace android { 356a6081a46a83da606cf21548879b37695adc7e1fAndy Qiunamespace intel { 366a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 376a6081a46a83da606cf21548879b37695adc7e1fAndy Qiutypedef struct { 38e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li // align with android, using 'int' here 396a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int x; 406a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int y; 416a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int w; 426a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int h; 436a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} PlanePosition; 446a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 456a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuenum { 466a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // support up to 4 overlays 476a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu MAX_OVERLAY_COUNT = 4, 486a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu}; 496a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 506a6081a46a83da606cf21548879b37695adc7e1fAndy Qiutypedef struct { 516a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int layerCount; 526a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int planeCount; 536a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int overlayCount; 546a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int overlayIndexes[MAX_OVERLAY_COUNT]; 556a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int primaryIndex; 566a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} ZOrderConfig; 576a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 586a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuclass DisplayPlane { 596a6081a46a83da606cf21548879b37695adc7e1fAndy Qiupublic: 606a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // transform 616a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu enum { 626a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu PLANE_TRANSFORM_0 = 0, 636a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu PLANE_TRANSFORM_90 = HWC_TRANSFORM_ROT_90, 646a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu PLANE_TRANSFORM_180 = HWC_TRANSFORM_ROT_180, 656a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu PLANE_TRANSFORM_270 = HWC_TRANSFORM_ROT_270, 666a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu }; 676a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 686a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // blending 696a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu enum { 706a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu PLANE_BLENDING_NONE = HWC_BLENDING_NONE, 716a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu PLANE_BLENDING_PREMULT = HWC_BLENDING_PREMULT, 726a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu }; 736a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 746a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // plane type 756a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu enum { 766a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu PLANE_SPRITE = 1, 776a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu PLANE_OVERLAY, 786a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu PLANE_PRIMARY, 796a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu PLANE_MAX, 806a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu }; 81e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li // align with android's back buffer count 82e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li static const uint32_t defaultDataBufferCount = 3; 836a6081a46a83da606cf21548879b37695adc7e1fAndy Qiupublic: 846a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu DisplayPlane(int index, int type, int disp); 856a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual ~DisplayPlane(); 866a6081a46a83da606cf21548879b37695adc7e1fAndy Qiupublic: 876a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual int getIndex() const { return mIndex; } 886a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual int getType() const { return mType; } 896a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool initCheck() const { return mInitialized; } 906a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 916a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // data destination 926a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual void setPosition(int x, int y, int w, int h); 936a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual void setSourceCrop(int x, int y, int w, int h); 946a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual void setTransform(int transform); 956a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 966a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // data source 976a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool setDataBuffer(uint32_t handle); 986a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual void invalidateBufferCache(); 996a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1006a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // display device 1016a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool assignToDevice(int disp); 1026a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1036a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // hardware operations 1046a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool reset() = 0; 1056a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool flip() = 0; 1066a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool enable() = 0; 1076a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool disable() = 0; 1086a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1096a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // set z order config 1106a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual void setZOrderConfig(ZOrderConfig& config) = 0; 1116a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1126a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual void* getContext() const = 0; 1136a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 114e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li virtual bool initialize(uint32_t bufferCount); 115e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Liprotected: 116e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li virtual void deinitialize(); 1176a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuprotected: 1186a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool setDataBuffer(BufferMapper& mapper) = 0; 1196a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuprotected: 1206a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int mIndex; 1216a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int mType; 1226a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int mDevice; 1236a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu bool mInitialized; 124e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li KeyedVector<uint64_t, BufferMapper*> mDataBuffers; 1256a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu PlanePosition mPosition; 1266a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu crop_t mSrcCrop; 1276a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int mTransform; 1286a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu}; 1296a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1306a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} // namespace intel 1316a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} // namespace android 1326a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1336a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#endif /* DISPLAYPLANE_H_ */ 134