hwc_utils.h revision 94f50bebdee0b3ab9deb6d51426c542407ced5fd
1befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* 2befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * Copyright (C) 2010 The Android Open Source Project 3c8d563c4df56d25bf6ac6f38fb6703150458737aJeykumar Sankaran * Copyright (C)2012-2013, The Linux Foundation. All rights reserved. 44019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R * 54019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R * Not a Contribution, Apache license notifications and license are retained 64019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R * for attribution purposes only. 7befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * 8befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * Licensed under the Apache License, Version 2.0 (the "License"); 9befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * you may not use this file except in compliance with the License. 10befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * You may obtain a copy of the License at 11befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * 12befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * http://www.apache.org/licenses/LICENSE-2.0 13befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * 14befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * Unless required by applicable law or agreed to in writing, software 15befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * distributed under the License is distributed on an "AS IS" BASIS, 16befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * See the License for the specific language governing permissions and 18befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * limitations under the License. 19befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed */ 20befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 21befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#ifndef HWC_UTILS_H 22befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#define HWC_UTILS_H 231589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed 24660267c43bb3370ab49f4e95562c027171d8fb83Naseer Ahmed#define HWC_REMOVE_DEPRECATED_VERSIONS 1 252e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah#include <fcntl.h> 26befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <hardware/hwcomposer.h> 2777d8f24cb4fece120f062f2f997f018372338b66Naseer Ahmed#include <gr.h> 281589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed#include <gralloc_priv.h> 2993138887ec8fb0f232340c4fb852e3dbcb3542e4Naseer Ahmed#include <utils/String8.h> 30327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah#include "qdMetaData.h" 31327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah#include <overlayUtils.h> 32befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 33bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed#define ALIGN_TO(x, align) (((x) + ((align)-1)) & ~((align)-1)) 34befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#define LIKELY( exp ) (__builtin_expect( (exp) != 0, true )) 35befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#define UNLIKELY( exp ) (__builtin_expect( (exp) != 0, false )) 36d9381b134ed518570554296fbfab8fd1175ecdb8Ramkumar Radhakrishnan#define MAX_NUM_APP_LAYERS 32 37befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 381589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed//Fwrd decls 39befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedstruct hwc_context_t; 401589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed 41327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahnamespace ovutils = overlay::utils; 42327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah 431589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmednamespace overlay { 441589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmedclass Overlay; 45327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahclass Rotator; 46327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahclass RotMgr; 471589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed} 481589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed 49befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmednamespace qhwc { 501589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed//fwrd decl 511589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmedclass QueuedBufferStore; 52b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmedclass ExternalDisplay; 53361900d9a618d2c4d2276a10ca76919214f6759fJeykumar Sankaranclass VirtualDisplay; 54640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shahclass IFBUpdate; 55327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahclass IVideoOverlay; 56c18b3a0ef41fe474fe37e2e1833ef1bb11c85b11Saurabh Shahclass MDPComp; 574019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.Rclass CopyBit; 58c9889a4a83afe2e431bd6982144cee1b6370d451Ramkumar Radhakrishnanclass HwcDebug; 59f1c9077e23f3fd814c27445ad73f6967a1ce5d9eSaurabh Shahclass AssertiveDisplay; 60c439b604bcd6441e3706fdcaa5084ec58cbaf16dNaseer Ahmedclass VPUClient; 61b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmed 6204a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed 63b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmedstruct MDPInfo { 64b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmed int version; 65b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmed char panel; 66b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmed bool hasOverlay; 67b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmed}; 68befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 692e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shahstruct DisplayAttributes { 702e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah uint32_t vsync_period; //nanos 712e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah uint32_t xres; 722e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah uint32_t yres; 7316791f95b2570b9d48fa360875676e9c8559c0a1Naseer Ahmed uint32_t stride; 7479e14117f5e66a080b9f2a783ce3b215c72c8653Naseer Ahmed float xdpi; 7579e14117f5e66a080b9f2a783ce3b215c72c8653Naseer Ahmed float ydpi; 762e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah int fd; 7776443245d153635b512539fbc68fdf7a904fdf6fSaurabh Shah bool connected; //Applies only to pluggable disp. 7876443245d153635b512539fbc68fdf7a904fdf6fSaurabh Shah //Connected does not mean it ready to use. 7976443245d153635b512539fbc68fdf7a904fdf6fSaurabh Shah //It should be active also. (UNBLANKED) 802e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah bool isActive; 8190571fc7c38e38858ad22a79e95efcb99c3a8b1dAmara Venkata Mastan Manoj Kumar // In pause state, composition is bypassed 8290571fc7c38e38858ad22a79e95efcb99c3a8b1dAmara Venkata Mastan Manoj Kumar // used for WFD displays only 8390571fc7c38e38858ad22a79e95efcb99c3a8b1dAmara Venkata Mastan Manoj Kumar bool isPause; 84361900d9a618d2c4d2276a10ca76919214f6759fJeykumar Sankaran // To trigger padding round to clean up mdp 85361900d9a618d2c4d2276a10ca76919214f6759fJeykumar Sankaran // pipes 86361900d9a618d2c4d2276a10ca76919214f6759fJeykumar Sankaran bool isConfiguring; 87fea63d61337f1efeb2d1c7a7a4fafe472611704cAmara Venkata Mastan Manoj Kumar // External Display is in MDP Downscale mode indicator 88fea63d61337f1efeb2d1c7a7a4fafe472611704cAmara Venkata Mastan Manoj Kumar bool mDownScaleMode; 89bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed}; 902e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah 912e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shahstruct ListStats { 922e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah int numAppLayers; //Total - 1, excluding FB layer. 932e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah int skipCount; 942e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah int fbLayerIndex; //Always last for now. = numAppLayers 952e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah //Video specific 962e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah int yuvCount; 97d9381b134ed518570554296fbfab8fd1175ecdb8Ramkumar Radhakrishnan int yuvIndices[MAX_NUM_APP_LAYERS]; 98eb43d2b7b681164a58e3f86bd0b0d88eea6a3591Arun Kumar K.R int extOnlyLayerIndex; 9933650f2bc6096f20fb3974f5d1f98cb60ed6bdf4Naseer Ahmed bool needsAlphaScale; 1005c937230915bced21130a3e5d129c4f470fd74d3Sravan Kumar D.V.N bool preMultipliedAlpha; 101a0e87cbc523323604e8fb7cb5526f410a1ed26dfRamkumar Radhakrishnan // Notifies hwcomposer about the start and end of animation 102a0e87cbc523323604e8fb7cb5526f410a1ed26dfRamkumar Radhakrishnan // This will be set to true during animation, otherwise false. 103a0e87cbc523323604e8fb7cb5526f410a1ed26dfRamkumar Radhakrishnan bool isDisplayAnimating; 104bc037e0bbb3d1778fb4bde55582fd1d4e666f957Jeykumar Sankaran ovutils::Dim roi; 1051b28b60e15c27fee703a16fbd1e42e3b41b031fdRamkumar Radhakrishnan bool secureUI; // Secure display layer 10694f50bebdee0b3ab9deb6d51426c542407ced5fdSaurabh Shah bool isSecurePresent; 107bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed}; 108bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed 10916791f95b2570b9d48fa360875676e9c8559c0a1Naseer Ahmedstruct LayerProp { 11016791f95b2570b9d48fa360875676e9c8559c0a1Naseer Ahmed uint32_t mFlags; //qcom specific layer flags 111bc037e0bbb3d1778fb4bde55582fd1d4e666f957Jeykumar Sankaran LayerProp():mFlags(0){}; 11216791f95b2570b9d48fa360875676e9c8559c0a1Naseer Ahmed}; 11316791f95b2570b9d48fa360875676e9c8559c0a1Naseer Ahmed 11410d293b379d1b8bdaa383b67c05b187365c5d1afNaseer Ahmedstruct VsyncState { 11510d293b379d1b8bdaa383b67c05b187365c5d1afNaseer Ahmed bool enable; 11610d293b379d1b8bdaa383b67c05b187365c5d1afNaseer Ahmed bool fakevsync; 11710d293b379d1b8bdaa383b67c05b187365c5d1afNaseer Ahmed}; 11810d293b379d1b8bdaa383b67c05b187365c5d1afNaseer Ahmed 119f0a7a20029deae76ea13d90099a09cc5e540f6baSaurabh Shahstruct BwcPM { 120f0a7a20029deae76ea13d90099a09cc5e540f6baSaurabh Shah static void setBwc(hwc_context_t *ctx, const hwc_rect_t& crop, 121f0a7a20029deae76ea13d90099a09cc5e540f6baSaurabh Shah const hwc_rect_t& dst, const int& transform, 122f0a7a20029deae76ea13d90099a09cc5e540f6baSaurabh Shah ovutils::eMdpFlags& mdpFlags); 123f0a7a20029deae76ea13d90099a09cc5e540f6baSaurabh Shah}; 124f0a7a20029deae76ea13d90099a09cc5e540f6baSaurabh Shah 12516791f95b2570b9d48fa360875676e9c8559c0a1Naseer Ahmed// LayerProp::flag values 126c85d6b7428ded41c74a9455f580f3ee8b451bbdeNaseer Ahmedenum { 12716791f95b2570b9d48fa360875676e9c8559c0a1Naseer Ahmed HWC_MDPCOMP = 0x00000001, 12804a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed HWC_COPYBIT = 0x00000002, 129c85d6b7428ded41c74a9455f580f3ee8b451bbdeNaseer Ahmed}; 130c85d6b7428ded41c74a9455f580f3ee8b451bbdeNaseer Ahmed 131f01e10a58786e9cb3200a757f65547868a29773dSushil Chauhan// HAL specific features 132f01e10a58786e9cb3200a757f65547868a29773dSushil Chauhanenum { 133f01e10a58786e9cb3200a757f65547868a29773dSushil Chauhan HWC_FORMAT_RB_SWAP = 0x00000040, 134f01e10a58786e9cb3200a757f65547868a29773dSushil Chauhan}; 135f01e10a58786e9cb3200a757f65547868a29773dSushil Chauhan 13643addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shahclass LayerRotMap { 13743addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shahpublic: 13843addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah LayerRotMap() { reset(); } 13943addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah enum { MAX_SESS = 3 }; 14043addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah void add(hwc_layer_1_t* layer, overlay::Rotator *rot); 14143addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah void reset(); 14243addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah uint32_t getCount() const; 14343addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah hwc_layer_1_t* getLayer(uint32_t index) const; 14443addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah overlay::Rotator* getRot(uint32_t index) const; 14543addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah void setReleaseFd(const int& fence); 14643addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shahprivate: 14743addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah hwc_layer_1_t* mLayer[MAX_SESS]; 14843addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah overlay::Rotator* mRot[MAX_SESS]; 14943addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah uint32_t mCount; 15043addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah}; 15143addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah 15243addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shahinline uint32_t LayerRotMap::getCount() const { 15343addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah return mCount; 15443addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah} 15543addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah 15643addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shahinline hwc_layer_1_t* LayerRotMap::getLayer(uint32_t index) const { 15743addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah if(index >= mCount) return NULL; 15843addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah return mLayer[index]; 15943addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah} 16043addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah 16143addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shahinline overlay::Rotator* LayerRotMap::getRot(uint32_t index) const { 16243addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah if(index >= mCount) return NULL; 16343addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah return mRot[index]; 16443addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah} 16543addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah 166befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// ----------------------------------------------------------------------------- 167befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// Utility functions - implemented in hwc_utils.cpp 168660267c43bb3370ab49f4e95562c027171d8fb83Naseer Ahmedvoid dumpLayer(hwc_layer_1_t const* l); 1692e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shahvoid setListStats(hwc_context_t *ctx, const hwc_display_contents_1_t *list, 1702e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah int dpy); 171befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedvoid initContext(hwc_context_t *ctx); 172befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedvoid closeContext(hwc_context_t *ctx); 173ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed//Crops source buffer against destination and FB boundaries 174ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmedvoid calculate_crop_rects(hwc_rect_t& crop, hwc_rect_t& dst, 175c8d563c4df56d25bf6ac6f38fb6703150458737aJeykumar Sankaran const hwc_rect_t& scissor, int orient); 17604a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmedvoid getNonWormholeRegion(hwc_display_contents_1_t* list, 17704a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed hwc_rect_t& nwr); 178f9572cdbe3541d85522adea584f925671b375300Jeykumar Sankaranbool isSecuring(hwc_context_t* ctx, hwc_layer_1_t const* layer); 1796b90a0c838871669457f5f81361ec062feb7539dSushil Chauhanbool isSecureModePolicy(int mdpVersion); 1802e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shahbool isExternalActive(hwc_context_t* ctx); 18144625ff6484744d1307c0bb0d00e8c0ad90325ffSushil Chauhanbool needsScaling(hwc_context_t* ctx, hwc_layer_1_t const* layer, 18244625ff6484744d1307c0bb0d00e8c0ad90325ffSushil Chauhan const int& dpy); 18344625ff6484744d1307c0bb0d00e8c0ad90325ffSushil Chauhanbool needsScalingWithSplit(hwc_context_t* ctx, hwc_layer_1_t const* layer, 18444625ff6484744d1307c0bb0d00e8c0ad90325ffSushil Chauhan const int& dpy); 18544625ff6484744d1307c0bb0d00e8c0ad90325ffSushil Chauhanvoid sanitizeSourceCrop(hwc_rect_t& cropL, hwc_rect_t& cropR, 18644625ff6484744d1307c0bb0d00e8c0ad90325ffSushil Chauhan private_handle_t *hnd); 187a6b4d9570f8cc6d57f8b4f724c06e6ec6877b4a4Sravan Kumar D.V.Nbool isAlphaPresent(hwc_layer_1_t const* layer); 18855290a90518c4a8e2cc41d7bdb40918248a9920eNaseer Ahmedint hwc_vsync_control(hwc_context_t* ctx, int dpy, int enable); 18912a7b537b1e043a61b06db3d083c2372c11ef1f2Naseer Ahmedint getBlending(int blending); 190a71a7ecd0323a16fe7728271474f8b7056c679d8Saurabh Shah 19193138887ec8fb0f232340c4fb852e3dbcb3542e4Naseer Ahmed//Helper function to dump logs 19293138887ec8fb0f232340c4fb852e3dbcb3542e4Naseer Ahmedvoid dumpsys_log(android::String8& buf, const char* fmt, ...); 19393138887ec8fb0f232340c4fb852e3dbcb3542e4Naseer Ahmed 19497c10c26c62d57a3fc31197fdd37d1bbfb8d1c2aRamkumar Radhakrishnanint getExtOrientation(hwc_context_t* ctx); 195f13681b96223de6b84461174aa08fe6d2959ced0Jeykumar Sankaranbool isValidRect(const hwc_rect_t& rect); 19677846b8bdb582d03273ccaf9be58f8544659cd10Prabhanjan Kandulavoid deductRect(const hwc_layer_1_t* layer, hwc_rect_t& irect); 197f13681b96223de6b84461174aa08fe6d2959ced0Jeykumar Sankaranhwc_rect_t getIntersection(const hwc_rect_t& rect1, const hwc_rect_t& rect2); 198f13681b96223de6b84461174aa08fe6d2959ced0Jeykumar Sankaranhwc_rect_t getUnion(const hwc_rect_t& rect1, const hwc_rect_t& rect2); 19977846b8bdb582d03273ccaf9be58f8544659cd10Prabhanjan Kandulavoid optimizeLayerRects(hwc_context_t *ctx, 20036035afc0c366c26d7c330d004e7ded510c1f88cPrabhanjan Kandula const hwc_display_contents_1_t *list, const int& dpy); 20136035afc0c366c26d7c330d004e7ded510c1f88cPrabhanjan Kandulabool areLayersIntersecting(const hwc_layer_1_t* layer1, 20236035afc0c366c26d7c330d004e7ded510c1f88cPrabhanjan Kandula const hwc_layer_1_t* layer2); 20377846b8bdb582d03273ccaf9be58f8544659cd10Prabhanjan Kandula 2040ae34e340382b0b3b767b844305db19e91257eddArun Kumar K.R/* Calculates the destination position based on the action safe rectangle */ 20523421d260e81161813b0d8a14dac30d4d89ed380Arun Kumar K.Rvoid getActionSafePosition(hwc_context_t *ctx, int dpy, hwc_rect_t& dst); 2060ae34e340382b0b3b767b844305db19e91257eddArun Kumar K.R 20723421d260e81161813b0d8a14dac30d4d89ed380Arun Kumar K.Rvoid getAspectRatioPosition(int destWidth, int destHeight, int srcWidth, 20823421d260e81161813b0d8a14dac30d4d89ed380Arun Kumar K.R int srcHeight, hwc_rect_t& rect); 2093b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.R 21023421d260e81161813b0d8a14dac30d4d89ed380Arun Kumar K.Rvoid getAspectRatioPosition(hwc_context_t* ctx, int dpy, int extOrientation, 21123421d260e81161813b0d8a14dac30d4d89ed380Arun Kumar K.R hwc_rect_t& inRect, hwc_rect_t& outRect); 21223421d260e81161813b0d8a14dac30d4d89ed380Arun Kumar K.R 21323421d260e81161813b0d8a14dac30d4d89ed380Arun Kumar K.Rbool isPrimaryPortrait(hwc_context_t *ctx); 21423421d260e81161813b0d8a14dac30d4d89ed380Arun Kumar K.R 215fea63d61337f1efeb2d1c7a7a4fafe472611704cAmara Venkata Mastan Manoj Kumarbool isOrientationPortrait(hwc_context_t *ctx); 216fea63d61337f1efeb2d1c7a7a4fafe472611704cAmara Venkata Mastan Manoj Kumar 21723421d260e81161813b0d8a14dac30d4d89ed380Arun Kumar K.Rvoid calcExtDisplayPosition(hwc_context_t *ctx, 21897c10c26c62d57a3fc31197fdd37d1bbfb8d1c2aRamkumar Radhakrishnan private_handle_t *hnd, 219fea63d61337f1efeb2d1c7a7a4fafe472611704cAmara Venkata Mastan Manoj Kumar int dpy, 220fea63d61337f1efeb2d1c7a7a4fafe472611704cAmara Venkata Mastan Manoj Kumar hwc_rect_t& sourceCrop, 22197c10c26c62d57a3fc31197fdd37d1bbfb8d1c2aRamkumar Radhakrishnan hwc_rect_t& displayFrame, 22297c10c26c62d57a3fc31197fdd37d1bbfb8d1c2aRamkumar Radhakrishnan int& transform, 22397c10c26c62d57a3fc31197fdd37d1bbfb8d1c2aRamkumar Radhakrishnan ovutils::eTransform& orient); 22497c10c26c62d57a3fc31197fdd37d1bbfb8d1c2aRamkumar Radhakrishnan 225effbd25d502916fcdebadd1d2b83988559434e79Arun Kumar K.R// Returns the orientation that needs to be set on external for 226effbd25d502916fcdebadd1d2b83988559434e79Arun Kumar K.R// BufferMirrirMode(Sidesync) 227effbd25d502916fcdebadd1d2b83988559434e79Arun Kumar K.Rint getMirrorModeOrientation(hwc_context_t *ctx); 2283b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.R 229a2fbf2e17b5b50016125016f05cb0b52bea5ce5fSaurabh Shah//Close acquireFenceFds of all layers of incoming list 230a2fbf2e17b5b50016125016f05cb0b52bea5ce5fSaurabh Shahvoid closeAcquireFds(hwc_display_contents_1_t* list); 231a2fbf2e17b5b50016125016f05cb0b52bea5ce5fSaurabh Shah 23233147743328e88e7859db6c935072f11ca038448Kinjal Bhavsar//Sync point impl. 2334019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.Rint hwc_sync(hwc_context_t *ctx, hwc_display_contents_1_t* list, int dpy, 234327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah int fd); 235327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah 236327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah//Trims a layer's source crop which is outside of screen boundary. 237327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahvoid trimLayer(hwc_context_t *ctx, const int& dpy, const int& transform, 238327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah hwc_rect_t& crop, hwc_rect_t& dst); 239327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah 240327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah//Sets appropriate mdp flags for a layer. 241327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahvoid setMdpFlags(hwc_layer_1_t *layer, 242327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah ovutils::eMdpFlags &mdpFlags, 2433e76f19cb2c0441315ebe54110f7b452d2932f52Ramkumar Radhakrishnan int rotDownscale, int transform); 244327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah 2455365726ef260406513c4787b6ed253eda754370cPrabhanjan Kandulaint configRotator(overlay::Rotator *rot, ovutils::Whf& whf, 246e2f07405d2d04aaf5577080761cd2b11a9e3c736Sushil Chauhan hwc_rect_t& crop, const ovutils::eMdpFlags& mdpFlags, 2473b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.R const ovutils::eTransform& orient, const int& downscale); 2483b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.R 2493b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.Rint configMdp(overlay::Overlay *ov, const ovutils::PipeArgs& parg, 2503b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.R const ovutils::eTransform& orient, const hwc_rect_t& crop, 2513b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.R const hwc_rect_t& pos, const MetaData_t *metadata, 2523b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.R const ovutils::eDest& dest); 2533b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.R 2543b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.Rvoid updateSource(ovutils::eTransform& orient, ovutils::Whf& whf, 2553b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.R hwc_rect_t& crop); 2563b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.R 257327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah//Routine to configure low resolution panels (<= 2048 width) 258f8c680dacf0a357ea1f56542fb329bbc9749b6b5Saurabh Shahint configureNonSplit(hwc_context_t *ctx, hwc_layer_1_t *layer, const int& dpy, 259a0e87cbc523323604e8fb7cb5526f410a1ed26dfRamkumar Radhakrishnan ovutils::eMdpFlags& mdpFlags, ovutils::eZorder& z, 260a0e87cbc523323604e8fb7cb5526f410a1ed26dfRamkumar Radhakrishnan ovutils::eIsFg& isFg, const ovutils::eDest& dest, 261327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah overlay::Rotator **rot); 262327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah 263327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah//Routine to configure high resolution panels (> 2048 width) 264f8c680dacf0a357ea1f56542fb329bbc9749b6b5Saurabh Shahint configureSplit(hwc_context_t *ctx, hwc_layer_1_t *layer, const int& dpy, 265a0e87cbc523323604e8fb7cb5526f410a1ed26dfRamkumar Radhakrishnan ovutils::eMdpFlags& mdpFlags, ovutils::eZorder& z, 266a0e87cbc523323604e8fb7cb5526f410a1ed26dfRamkumar Radhakrishnan ovutils::eIsFg& isFg, const ovutils::eDest& lDest, 267327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah const ovutils::eDest& rDest, overlay::Rotator **rot); 26833147743328e88e7859db6c935072f11ca038448Kinjal Bhavsar 269e188278e86ebb2f7f1ed3762855f15062b7f9d03Saurabh Shah//On certain targets DMA pipes are used for rotation and they won't be available 270e188278e86ebb2f7f1ed3762855f15062b7f9d03Saurabh Shah//for line operations. On a per-target basis we can restrict certain use cases 271e188278e86ebb2f7f1ed3762855f15062b7f9d03Saurabh Shah//from using rotator, since we know before-hand that such scenarios can lead to 272e188278e86ebb2f7f1ed3762855f15062b7f9d03Saurabh Shah//extreme unavailability of pipes. This can also be done via hybrid calculations 273e188278e86ebb2f7f1ed3762855f15062b7f9d03Saurabh Shah//also involving many more variables like number of write-back interfaces etc, 274e188278e86ebb2f7f1ed3762855f15062b7f9d03Saurabh Shah//but the variety of scenarios is too high to warrant that. 27586adeda0140053bfc618f5fc087d30c7221459daAmara Venkata Mastan Manoj Kumarbool canUseRotator(hwc_context_t *ctx, int dpy); 276e188278e86ebb2f7f1ed3762855f15062b7f9d03Saurabh Shah 2779640e380d8f815ef7ca71c1fdf23eb6f7b30db1eSaurabh Shahint getLeftSplit(hwc_context_t *ctx, const int& dpy); 2789640e380d8f815ef7ca71c1fdf23eb6f7b30db1eSaurabh Shah 279f8c680dacf0a357ea1f56542fb329bbc9749b6b5Saurabh Shahbool isDisplaySplit(hwc_context_t* ctx, int dpy); 280f8c680dacf0a357ea1f56542fb329bbc9749b6b5Saurabh Shah 281befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// Inline utility functions 282660267c43bb3370ab49f4e95562c027171d8fb83Naseer Ahmedstatic inline bool isSkipLayer(const hwc_layer_1_t* l) { 283befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed return (UNLIKELY(l && (l->flags & HWC_SKIP_LAYER))); 284befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed} 285befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 286befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// Returns true if the buffer is yuv 287befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedstatic inline bool isYuvBuffer(const private_handle_t* hnd) { 288befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed return (hnd && (hnd->bufferType == BUFFER_TYPE_VIDEO)); 289befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed} 290befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 291ed68f0b13f56426735e7897519aa1c43072ceb90Saurabh Shah// Returns true if the buffer is secure 292ed68f0b13f56426735e7897519aa1c43072ceb90Saurabh Shahstatic inline bool isSecureBuffer(const private_handle_t* hnd) { 293ed68f0b13f56426735e7897519aa1c43072ceb90Saurabh Shah return (hnd && (private_handle_t::PRIV_FLAGS_SECURE_BUFFER & hnd->flags)); 294ed68f0b13f56426735e7897519aa1c43072ceb90Saurabh Shah} 295befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed//Return true if buffer is marked locked 296befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedstatic inline bool isBufferLocked(const private_handle_t* hnd) { 297befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed return (hnd && (private_handle_t::PRIV_FLAGS_HWC_LOCK & hnd->flags)); 298befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed} 299bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed 3005d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed//Return true if buffer is for external display only 3015d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmedstatic inline bool isExtOnly(const private_handle_t* hnd) { 3025d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed return (hnd && (hnd->flags & private_handle_t::PRIV_FLAGS_EXTERNAL_ONLY)); 3035d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed} 3045d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed 3055d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed//Return true if buffer is for external display only with a BLOCK flag. 3065d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmedstatic inline bool isExtBlock(const private_handle_t* hnd) { 3075d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed return (hnd && (hnd->flags & private_handle_t::PRIV_FLAGS_EXTERNAL_BLOCK)); 3085d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed} 3095d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed 3105d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed//Return true if buffer is for external display only with a Close Caption flag. 3115d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmedstatic inline bool isExtCC(const private_handle_t* hnd) { 3125d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed return (hnd && (hnd->flags & private_handle_t::PRIV_FLAGS_EXTERNAL_CC)); 3135d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed} 3145d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed 3151b28b60e15c27fee703a16fbd1e42e3b41b031fdRamkumar Radhakrishnan//Return true if the buffer is intended for Secure Display 3161b28b60e15c27fee703a16fbd1e42e3b41b031fdRamkumar Radhakrishnanstatic inline bool isSecureDisplayBuffer(const private_handle_t* hnd) { 3171b28b60e15c27fee703a16fbd1e42e3b41b031fdRamkumar Radhakrishnan return (hnd && (hnd->flags & private_handle_t::PRIV_FLAGS_SECURE_DISPLAY)); 3181b28b60e15c27fee703a16fbd1e42e3b41b031fdRamkumar Radhakrishnan} 3191b28b60e15c27fee703a16fbd1e42e3b41b031fdRamkumar Radhakrishnan 32004a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmedtemplate<typename T> inline T max(T a, T b) { return (a > b) ? a : b; } 32104a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmedtemplate<typename T> inline T min(T a, T b) { return (a < b) ? a : b; } 32204a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed 3231589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed// Initialize uevent thread 3241589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmedvoid init_uevent_thread(hwc_context_t* ctx); 325aff82051a79fbaf752d3769667d34828cee2841dNaseer Ahmed// Initialize vsync thread 326aff82051a79fbaf752d3769667d34828cee2841dNaseer Ahmedvoid init_vsync_thread(hwc_context_t* ctx); 327befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 328660267c43bb3370ab49f4e95562c027171d8fb83Naseer Ahmedinline void getLayerResolution(const hwc_layer_1_t* layer, 32912a7b537b1e043a61b06db3d083c2372c11ef1f2Naseer Ahmed int& width, int& height) { 330c85d6b7428ded41c74a9455f580f3ee8b451bbdeNaseer Ahmed hwc_rect_t displayFrame = layer->displayFrame; 331c85d6b7428ded41c74a9455f580f3ee8b451bbdeNaseer Ahmed width = displayFrame.right - displayFrame.left; 332c85d6b7428ded41c74a9455f580f3ee8b451bbdeNaseer Ahmed height = displayFrame.bottom - displayFrame.top; 333c85d6b7428ded41c74a9455f580f3ee8b451bbdeNaseer Ahmed} 3342e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah 3352e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shahstatic inline int openFb(int dpy) { 3362e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah int fd = -1; 3372e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah const char *devtmpl = "/dev/graphics/fb%u"; 3382e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah char name[64] = {0}; 3392e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah snprintf(name, 64, devtmpl, dpy); 3402e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah fd = open(name, O_RDWR); 3412e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah return fd; 3422e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah} 3432e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah 3449a678455a788dc76a43ad93459ae6a792f0fd114Saurabh Shahtemplate <class T> 3459a678455a788dc76a43ad93459ae6a792f0fd114Saurabh Shahinline void swap(T& a, T& b) { 3469a678455a788dc76a43ad93459ae6a792f0fd114Saurabh Shah T tmp = a; 3479a678455a788dc76a43ad93459ae6a792f0fd114Saurabh Shah a = b; 3489a678455a788dc76a43ad93459ae6a792f0fd114Saurabh Shah b = tmp; 3499a678455a788dc76a43ad93459ae6a792f0fd114Saurabh Shah} 3509a678455a788dc76a43ad93459ae6a792f0fd114Saurabh Shah 351ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed}; //qhwc namespace 352befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 353befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// ----------------------------------------------------------------------------- 354befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// HWC context 355befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// This structure contains overall state 356befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedstruct hwc_context_t { 357660267c43bb3370ab49f4e95562c027171d8fb83Naseer Ahmed hwc_composer_device_1_t device; 358359c544e1ca5ad76be326d9ee809e7bee51f94b4Jesse Hall const hwc_procs_t* proc; 3594019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R 3604019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R //CopyBit objects 3610df43c5a5da262ea6716f7614019fc710562028bAmara Venkata Mastan Manoj Kumar qhwc::CopyBit *mCopyBit[HWC_NUM_DISPLAY_TYPES]; 3624019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R 363befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed //Overlay object - NULL for non overlay devices 36447377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed overlay::Overlay *mOverlay; 365327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah //Holds a few rot objects 366327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah overlay::RotMgr *mRotMgr; 367640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah 368640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah //Primary and external FB updater 3690df43c5a5da262ea6716f7614019fc710562028bAmara Venkata Mastan Manoj Kumar qhwc::IFBUpdate *mFBUpdate[HWC_NUM_DISPLAY_TYPES]; 370ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed // External display related information 3711589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed qhwc::ExternalDisplay *mExtDisplay; 372361900d9a618d2c4d2276a10ca76919214f6759fJeykumar Sankaran qhwc::VirtualDisplay *mVirtualDisplay; 373b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmed qhwc::MDPInfo mMDP; 37410d293b379d1b8bdaa383b67c05b187365c5d1afNaseer Ahmed qhwc::VsyncState vstate; 3750df43c5a5da262ea6716f7614019fc710562028bAmara Venkata Mastan Manoj Kumar qhwc::DisplayAttributes dpyAttr[HWC_NUM_DISPLAY_TYPES]; 3760df43c5a5da262ea6716f7614019fc710562028bAmara Venkata Mastan Manoj Kumar qhwc::ListStats listStats[HWC_NUM_DISPLAY_TYPES]; 3770df43c5a5da262ea6716f7614019fc710562028bAmara Venkata Mastan Manoj Kumar qhwc::LayerProp *layerProp[HWC_NUM_DISPLAY_TYPES]; 3780df43c5a5da262ea6716f7614019fc710562028bAmara Venkata Mastan Manoj Kumar qhwc::MDPComp *mMDPComp[HWC_NUM_DISPLAY_TYPES]; 3790df43c5a5da262ea6716f7614019fc710562028bAmara Venkata Mastan Manoj Kumar qhwc::HwcDebug *mHwcDebug[HWC_NUM_DISPLAY_TYPES]; 380f1c9077e23f3fd814c27445ad73f6967a1ce5d9eSaurabh Shah qhwc::AssertiveDisplay *mAD; 381c439b604bcd6441e3706fdcaa5084ec58cbaf16dNaseer Ahmed qhwc::VPUClient *mVPUClient; 3829f0b36a26d1c37ad0d31e59136b1e5d6f4d7efdeNaseer Ahmed 383a0e87cbc523323604e8fb7cb5526f410a1ed26dfRamkumar Radhakrishnan // No animation on External display feature 384a0e87cbc523323604e8fb7cb5526f410a1ed26dfRamkumar Radhakrishnan // Notifies hwcomposer about the device orientation before animation. 385a0e87cbc523323604e8fb7cb5526f410a1ed26dfRamkumar Radhakrishnan int deviceOrientation; 386a0e87cbc523323604e8fb7cb5526f410a1ed26dfRamkumar Radhakrishnan // Stores the crop, dest rect and transform value of video before animation. 387a0e87cbc523323604e8fb7cb5526f410a1ed26dfRamkumar Radhakrishnan hwc_rect_t mPrevCropVideo; 388a0e87cbc523323604e8fb7cb5526f410a1ed26dfRamkumar Radhakrishnan hwc_rect_t mPrevDestVideo; 389a0e87cbc523323604e8fb7cb5526f410a1ed26dfRamkumar Radhakrishnan int mPrevTransformVideo; 390bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah //Securing in progress indicator 391bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah bool mSecuring; 392361900d9a618d2c4d2276a10ca76919214f6759fJeykumar Sankaran //WFD on proprietary stack 393361900d9a618d2c4d2276a10ca76919214f6759fJeykumar Sankaran bool mVirtualonExtActive; 394bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah //Display in secure mode indicator 395bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah bool mSecureMode; 3961a050829890735bc5a936ad65bf9cad80295306bSaurabh Shah //Lock to protect drawing data structures 3971a050829890735bc5a936ad65bf9cad80295306bSaurabh Shah mutable Locker mDrawLock; 398586aedccc2eaa76923bc22a3325fc2e4eff415e2Saurabh Shah //Drawing round when we use GPU 399586aedccc2eaa76923bc22a3325fc2e4eff415e2Saurabh Shah bool isPaddingRound; 4003b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.R // External Orientation 4013b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.R int mExtOrientation; 40256d570f1d7eb34ab0db968298efb8e75b849c893Saurabh Shah //Flags the transition of a video session 40356d570f1d7eb34ab0db968298efb8e75b849c893Saurabh Shah bool mVideoTransFlag; 404effbd25d502916fcdebadd1d2b83988559434e79Arun Kumar K.R 405effbd25d502916fcdebadd1d2b83988559434e79Arun Kumar K.R //Used for SideSync feature 406effbd25d502916fcdebadd1d2b83988559434e79Arun Kumar K.R //which overrides the mExtOrientation 407effbd25d502916fcdebadd1d2b83988559434e79Arun Kumar K.R bool mBufferMirrorMode; 408effbd25d502916fcdebadd1d2b83988559434e79Arun Kumar K.R 4090df43c5a5da262ea6716f7614019fc710562028bAmara Venkata Mastan Manoj Kumar qhwc::LayerRotMap *mLayerRotMap[HWC_NUM_DISPLAY_TYPES]; 410befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}; 411befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 412327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahnamespace qhwc { 413c18b3a0ef41fe474fe37e2e1833ef1bb11c85b11Saurabh Shahstatic inline bool isSkipPresent (hwc_context_t *ctx, int dpy) { 414c18b3a0ef41fe474fe37e2e1833ef1bb11c85b11Saurabh Shah return ctx->listStats[dpy].skipCount; 415c18b3a0ef41fe474fe37e2e1833ef1bb11c85b11Saurabh Shah} 416c18b3a0ef41fe474fe37e2e1833ef1bb11c85b11Saurabh Shah 417c18b3a0ef41fe474fe37e2e1833ef1bb11c85b11Saurabh Shahstatic inline bool isYuvPresent (hwc_context_t *ctx, int dpy) { 418c18b3a0ef41fe474fe37e2e1833ef1bb11c85b11Saurabh Shah return ctx->listStats[dpy].yuvCount; 419c18b3a0ef41fe474fe37e2e1833ef1bb11c85b11Saurabh Shah} 420efab1d5273ce9a284e306f2607e501410cfbc8b9Saurabh Shah 421efab1d5273ce9a284e306f2607e501410cfbc8b9Saurabh Shahstatic inline bool has90Transform(hwc_layer_1_t *layer) { 422efab1d5273ce9a284e306f2607e501410cfbc8b9Saurabh Shah return (layer->transform & HWC_TRANSFORM_ROT_90); 423efab1d5273ce9a284e306f2607e501410cfbc8b9Saurabh Shah} 424efab1d5273ce9a284e306f2607e501410cfbc8b9Saurabh Shah 42594f50bebdee0b3ab9deb6d51426c542407ced5fdSaurabh Shahinline bool isSecurePresent(hwc_context_t *ctx, int dpy) { 42694f50bebdee0b3ab9deb6d51426c542407ced5fdSaurabh Shah return ctx->listStats[dpy].isSecurePresent; 42794f50bebdee0b3ab9deb6d51426c542407ced5fdSaurabh Shah} 42894f50bebdee0b3ab9deb6d51426c542407ced5fdSaurabh Shah 429327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah}; 430c18b3a0ef41fe474fe37e2e1833ef1bb11c85b11Saurabh Shah 431befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#endif //HWC_UTILS_H 432