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 DISPLAYPLANEMANAGER_H_ 176a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#define DISPLAYPLANEMANAGER_H_ 186a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 190594c42af26255fd8d3d7d39c0cb0e2da5b8841bThierry Strudel#include <common/utils/Dump.h> 206a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#include <DisplayPlane.h> 210594c42af26255fd8d3d7d39c0cb0e2da5b8841bThierry Strudel#include <common/base/HwcLayer.h> 226a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#include <utils/Vector.h> 236a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 246a6081a46a83da606cf21548879b37695adc7e1fAndy Qiunamespace android { 256a6081a46a83da606cf21548879b37695adc7e1fAndy Qiunamespace intel { 266a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 279d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiustruct ZOrderLayer 289d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu{ 299d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu ZOrderLayer() { 309d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu memset(this, 0, sizeof(ZOrderLayer)); 319d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu } 329d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu 339d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu inline bool operator<(const ZOrderLayer& rhs) const { 349d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu return zorder < rhs.zorder; 359d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu } 369d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu 379d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu int planeType; 389d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu int zorder; 399d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu DisplayPlane *plane; 409d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu HwcLayer *hwcLayer; 419d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu}; 429d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu 439d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiuclass ZOrderConfig : public SortedVector<ZOrderLayer*> { 44d9045abeda7b707f3c55779989fc77b2197bc38eJackie Lipublic: 459d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu ZOrderConfig() {} 46f6d5b36e320f093f08855d64fa3d565eacae3c4bJackie Li 47d9045abeda7b707f3c55779989fc77b2197bc38eJackie Li int do_compare(const void* lhs, const void* rhs) const { 489d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu const ZOrderLayer *l = *(ZOrderLayer**)lhs; 499d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu const ZOrderLayer *r = *(ZOrderLayer**)rhs; 50d9045abeda7b707f3c55779989fc77b2197bc38eJackie Li 51d9045abeda7b707f3c55779989fc77b2197bc38eJackie Li // sorted from z order 0 to n 529d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu return l->zorder - r->zorder; 53d9045abeda7b707f3c55779989fc77b2197bc38eJackie Li } 54d9045abeda7b707f3c55779989fc77b2197bc38eJackie Li}; 55d9045abeda7b707f3c55779989fc77b2197bc38eJackie Li 569d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu 576a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuclass DisplayPlaneManager { 586a6081a46a83da606cf21548879b37695adc7e1fAndy Qiupublic: 596a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu DisplayPlaneManager(); 606a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual ~DisplayPlaneManager(); 616a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 629d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiupublic: 63e2ad4c047651d4442f6a0e002290016d45e9201afu jin virtual bool initialize(); 64e2ad4c047651d4442f6a0e002290016d45e9201afu jin virtual void deinitialize(); 656a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 669d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu virtual bool isValidZOrder(int dsp, ZOrderConfig& config) = 0; 679d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu virtual bool assignPlanes(int dsp, ZOrderConfig& config) = 0; 689d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu // TODO: remove this API 699d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu virtual void* getZOrderConfig() const = 0; 709d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu virtual int getFreePlanes(int dsp, int type); 71f6d5b36e320f093f08855d64fa3d565eacae3c4bJackie Li virtual void reclaimPlane(int dsp, DisplayPlane& plane); 72f6d5b36e320f093f08855d64fa3d565eacae3c4bJackie Li virtual void disableReclaimedPlanes(); 73009ab1d686644a8294b16d97ec1d4fe58879cf89Lei Zhang virtual bool isOverlayPlanesDisabled(); 746a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // dump interface 75f6d5b36e320f093f08855d64fa3d565eacae3c4bJackie Li virtual void dump(Dump& d); 76c5bd3cd6c8e854c6581105a5867e4d251b5281feJackie Li 77f6d5b36e320f093f08855d64fa3d565eacae3c4bJackie Liprotected: 789d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu // plane allocation & free 796a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int getPlane(uint32_t& mask); 806a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int getPlane(uint32_t& mask, int index); 819d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu DisplayPlane* getPlane(int type, int index); 829d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu DisplayPlane* getAnyPlane(int type); 836a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu void putPlane(int index, uint32_t& mask); 849d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu void putPlane(int dsp, DisplayPlane& plane); 859d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu bool isFreePlane(int type, int index); 866a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual DisplayPlane* allocPlane(int index, int type) = 0; 879d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu 88f6d5b36e320f093f08855d64fa3d565eacae3c4bJackie Liprotected: 89c5bd3cd6c8e854c6581105a5867e4d251b5281feJackie Li int mPlaneCount[DisplayPlane::PLANE_MAX]; 906a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int mTotalPlaneCount; 919d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu int mPrimaryPlaneCount; 929d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu int mSpritePlaneCount; 939d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu int mOverlayPlaneCount; 94a6ca0e98674e3f1b0a7239f6e775cae2f667fe5cLei Zhang int mCursorPlaneCount; 95e2ad4c047651d4442f6a0e002290016d45e9201afu jin 96c5bd3cd6c8e854c6581105a5867e4d251b5281feJackie Li Vector<DisplayPlane*> mPlanes[DisplayPlane::PLANE_MAX]; 976a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 986a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // Bitmap of free planes. Bit0 - plane A, bit 1 - plane B, etc. 99c5bd3cd6c8e854c6581105a5867e4d251b5281feJackie Li uint32_t mFreePlanes[DisplayPlane::PLANE_MAX]; 100c5bd3cd6c8e854c6581105a5867e4d251b5281feJackie Li uint32_t mReclaimedPlanes[DisplayPlane::PLANE_MAX]; 1016a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1026a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu bool mInitialized; 1039d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu 1049d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiuenum { 1059d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu DEFAULT_PRIMARY_PLANE_COUNT = 3 1069d1d3833469f52dbd2a017702bf0116fddc703bcAndy Qiu}; 1076a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu}; 1086a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1096a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} // namespace intel 1106a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} // namespace android 1116a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1126a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#endif /* DISPLAYPLANEMANAGER_H_ */ 113