hwc_utils.h revision f01e10a58786e9cb3200a757f65547868a29773d
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
106bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed};
107bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed
10816791f95b2570b9d48fa360875676e9c8559c0a1Naseer Ahmedstruct LayerProp {
10916791f95b2570b9d48fa360875676e9c8559c0a1Naseer Ahmed    uint32_t mFlags; //qcom specific layer flags
110bc037e0bbb3d1778fb4bde55582fd1d4e666f957Jeykumar Sankaran    LayerProp():mFlags(0){};
11116791f95b2570b9d48fa360875676e9c8559c0a1Naseer Ahmed};
11216791f95b2570b9d48fa360875676e9c8559c0a1Naseer Ahmed
11310d293b379d1b8bdaa383b67c05b187365c5d1afNaseer Ahmedstruct VsyncState {
11410d293b379d1b8bdaa383b67c05b187365c5d1afNaseer Ahmed    bool enable;
11510d293b379d1b8bdaa383b67c05b187365c5d1afNaseer Ahmed    bool fakevsync;
11610d293b379d1b8bdaa383b67c05b187365c5d1afNaseer Ahmed};
11710d293b379d1b8bdaa383b67c05b187365c5d1afNaseer Ahmed
118f0a7a20029deae76ea13d90099a09cc5e540f6baSaurabh Shahstruct BwcPM {
119f0a7a20029deae76ea13d90099a09cc5e540f6baSaurabh Shah    static void setBwc(hwc_context_t *ctx, const hwc_rect_t& crop,
120f0a7a20029deae76ea13d90099a09cc5e540f6baSaurabh Shah            const hwc_rect_t& dst, const int& transform,
121f0a7a20029deae76ea13d90099a09cc5e540f6baSaurabh Shah            ovutils::eMdpFlags& mdpFlags);
122f0a7a20029deae76ea13d90099a09cc5e540f6baSaurabh Shah};
123f0a7a20029deae76ea13d90099a09cc5e540f6baSaurabh Shah
12416791f95b2570b9d48fa360875676e9c8559c0a1Naseer Ahmed// LayerProp::flag values
125c85d6b7428ded41c74a9455f580f3ee8b451bbdeNaseer Ahmedenum {
12616791f95b2570b9d48fa360875676e9c8559c0a1Naseer Ahmed    HWC_MDPCOMP = 0x00000001,
12704a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed    HWC_COPYBIT = 0x00000002,
128c85d6b7428ded41c74a9455f580f3ee8b451bbdeNaseer Ahmed};
129c85d6b7428ded41c74a9455f580f3ee8b451bbdeNaseer Ahmed
130f01e10a58786e9cb3200a757f65547868a29773dSushil Chauhan// HAL specific features
131f01e10a58786e9cb3200a757f65547868a29773dSushil Chauhanenum {
132f01e10a58786e9cb3200a757f65547868a29773dSushil Chauhan    HWC_FORMAT_RB_SWAP = 0x00000040,
133f01e10a58786e9cb3200a757f65547868a29773dSushil Chauhan};
134f01e10a58786e9cb3200a757f65547868a29773dSushil Chauhan
13543addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shahclass LayerRotMap {
13643addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shahpublic:
13743addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah    LayerRotMap() { reset(); }
13843addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah    enum { MAX_SESS = 3 };
13943addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah    void add(hwc_layer_1_t* layer, overlay::Rotator *rot);
14043addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah    void reset();
14143addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah    uint32_t getCount() const;
14243addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah    hwc_layer_1_t* getLayer(uint32_t index) const;
14343addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah    overlay::Rotator* getRot(uint32_t index) const;
14443addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah    void setReleaseFd(const int& fence);
14543addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shahprivate:
14643addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah    hwc_layer_1_t* mLayer[MAX_SESS];
14743addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah    overlay::Rotator* mRot[MAX_SESS];
14843addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah    uint32_t mCount;
14943addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah};
15043addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah
15143addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shahinline uint32_t LayerRotMap::getCount() const {
15243addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah    return mCount;
15343addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah}
15443addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah
15543addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shahinline hwc_layer_1_t* LayerRotMap::getLayer(uint32_t index) const {
15643addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah    if(index >= mCount) return NULL;
15743addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah    return mLayer[index];
15843addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah}
15943addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah
16043addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shahinline overlay::Rotator* LayerRotMap::getRot(uint32_t index) const {
16143addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah    if(index >= mCount) return NULL;
16243addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah    return mRot[index];
16343addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah}
16443addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah
165befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// -----------------------------------------------------------------------------
166befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// Utility functions - implemented in hwc_utils.cpp
167660267c43bb3370ab49f4e95562c027171d8fb83Naseer Ahmedvoid dumpLayer(hwc_layer_1_t const* l);
1682e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shahvoid setListStats(hwc_context_t *ctx, const hwc_display_contents_1_t *list,
1692e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah        int dpy);
170befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedvoid initContext(hwc_context_t *ctx);
171befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedvoid closeContext(hwc_context_t *ctx);
172ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed//Crops source buffer against destination and FB boundaries
173ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmedvoid calculate_crop_rects(hwc_rect_t& crop, hwc_rect_t& dst,
174c8d563c4df56d25bf6ac6f38fb6703150458737aJeykumar Sankaran                         const hwc_rect_t& scissor, int orient);
17504a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmedvoid getNonWormholeRegion(hwc_display_contents_1_t* list,
17604a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed                              hwc_rect_t& nwr);
177f9572cdbe3541d85522adea584f925671b375300Jeykumar Sankaranbool isSecuring(hwc_context_t* ctx, hwc_layer_1_t const* layer);
1786b90a0c838871669457f5f81361ec062feb7539dSushil Chauhanbool isSecureModePolicy(int mdpVersion);
1792e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shahbool isExternalActive(hwc_context_t* ctx);
18044625ff6484744d1307c0bb0d00e8c0ad90325ffSushil Chauhanbool needsScaling(hwc_context_t* ctx, hwc_layer_1_t const* layer,
18144625ff6484744d1307c0bb0d00e8c0ad90325ffSushil Chauhan                  const int& dpy);
18244625ff6484744d1307c0bb0d00e8c0ad90325ffSushil Chauhanbool needsScalingWithSplit(hwc_context_t* ctx, hwc_layer_1_t const* layer,
18344625ff6484744d1307c0bb0d00e8c0ad90325ffSushil Chauhan                           const int& dpy);
18444625ff6484744d1307c0bb0d00e8c0ad90325ffSushil Chauhanvoid sanitizeSourceCrop(hwc_rect_t& cropL, hwc_rect_t& cropR,
18544625ff6484744d1307c0bb0d00e8c0ad90325ffSushil Chauhan                        private_handle_t *hnd);
186a6b4d9570f8cc6d57f8b4f724c06e6ec6877b4a4Sravan Kumar D.V.Nbool isAlphaPresent(hwc_layer_1_t const* layer);
18755290a90518c4a8e2cc41d7bdb40918248a9920eNaseer Ahmedint hwc_vsync_control(hwc_context_t* ctx, int dpy, int enable);
18812a7b537b1e043a61b06db3d083c2372c11ef1f2Naseer Ahmedint getBlending(int blending);
189a71a7ecd0323a16fe7728271474f8b7056c679d8Saurabh Shah
19093138887ec8fb0f232340c4fb852e3dbcb3542e4Naseer Ahmed//Helper function to dump logs
19193138887ec8fb0f232340c4fb852e3dbcb3542e4Naseer Ahmedvoid dumpsys_log(android::String8& buf, const char* fmt, ...);
19293138887ec8fb0f232340c4fb852e3dbcb3542e4Naseer Ahmed
19397c10c26c62d57a3fc31197fdd37d1bbfb8d1c2aRamkumar Radhakrishnanint getExtOrientation(hwc_context_t* ctx);
19497c10c26c62d57a3fc31197fdd37d1bbfb8d1c2aRamkumar Radhakrishnan
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,
20077846b8bdb582d03273ccaf9be58f8544659cd10Prabhanjan Kandula                        const hwc_display_contents_1_t *list, const int& dpy);
20177846b8bdb582d03273ccaf9be58f8544659cd10Prabhanjan Kandula
2020ae34e340382b0b3b767b844305db19e91257eddArun Kumar K.R/* Calculates the destination position based on the action safe rectangle */
20323421d260e81161813b0d8a14dac30d4d89ed380Arun Kumar K.Rvoid getActionSafePosition(hwc_context_t *ctx, int dpy, hwc_rect_t& dst);
2040ae34e340382b0b3b767b844305db19e91257eddArun Kumar K.R
20523421d260e81161813b0d8a14dac30d4d89ed380Arun Kumar K.Rvoid getAspectRatioPosition(int destWidth, int destHeight, int srcWidth,
20623421d260e81161813b0d8a14dac30d4d89ed380Arun Kumar K.R                                int srcHeight, hwc_rect_t& rect);
2073b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.R
20823421d260e81161813b0d8a14dac30d4d89ed380Arun Kumar K.Rvoid getAspectRatioPosition(hwc_context_t* ctx, int dpy, int extOrientation,
20923421d260e81161813b0d8a14dac30d4d89ed380Arun Kumar K.R                                hwc_rect_t& inRect, hwc_rect_t& outRect);
21023421d260e81161813b0d8a14dac30d4d89ed380Arun Kumar K.R
21123421d260e81161813b0d8a14dac30d4d89ed380Arun Kumar K.Rbool isPrimaryPortrait(hwc_context_t *ctx);
21223421d260e81161813b0d8a14dac30d4d89ed380Arun Kumar K.R
213fea63d61337f1efeb2d1c7a7a4fafe472611704cAmara Venkata Mastan Manoj Kumarbool isOrientationPortrait(hwc_context_t *ctx);
214fea63d61337f1efeb2d1c7a7a4fafe472611704cAmara Venkata Mastan Manoj Kumar
21523421d260e81161813b0d8a14dac30d4d89ed380Arun Kumar K.Rvoid calcExtDisplayPosition(hwc_context_t *ctx,
21697c10c26c62d57a3fc31197fdd37d1bbfb8d1c2aRamkumar Radhakrishnan                               private_handle_t *hnd,
217fea63d61337f1efeb2d1c7a7a4fafe472611704cAmara Venkata Mastan Manoj Kumar                               int dpy,
218fea63d61337f1efeb2d1c7a7a4fafe472611704cAmara Venkata Mastan Manoj Kumar                               hwc_rect_t& sourceCrop,
21997c10c26c62d57a3fc31197fdd37d1bbfb8d1c2aRamkumar Radhakrishnan                               hwc_rect_t& displayFrame,
22097c10c26c62d57a3fc31197fdd37d1bbfb8d1c2aRamkumar Radhakrishnan                               int& transform,
22197c10c26c62d57a3fc31197fdd37d1bbfb8d1c2aRamkumar Radhakrishnan                               ovutils::eTransform& orient);
22297c10c26c62d57a3fc31197fdd37d1bbfb8d1c2aRamkumar Radhakrishnan
223effbd25d502916fcdebadd1d2b83988559434e79Arun Kumar K.R// Returns the orientation that needs to be set on external for
224effbd25d502916fcdebadd1d2b83988559434e79Arun Kumar K.R// BufferMirrirMode(Sidesync)
225effbd25d502916fcdebadd1d2b83988559434e79Arun Kumar K.Rint getMirrorModeOrientation(hwc_context_t *ctx);
2263b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.R
227a2fbf2e17b5b50016125016f05cb0b52bea5ce5fSaurabh Shah//Close acquireFenceFds of all layers of incoming list
228a2fbf2e17b5b50016125016f05cb0b52bea5ce5fSaurabh Shahvoid closeAcquireFds(hwc_display_contents_1_t* list);
229a2fbf2e17b5b50016125016f05cb0b52bea5ce5fSaurabh Shah
23033147743328e88e7859db6c935072f11ca038448Kinjal Bhavsar//Sync point impl.
2314019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.Rint hwc_sync(hwc_context_t *ctx, hwc_display_contents_1_t* list, int dpy,
232327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah        int fd);
233327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah
234327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah//Trims a layer's source crop which is outside of screen boundary.
235327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahvoid trimLayer(hwc_context_t *ctx, const int& dpy, const int& transform,
236327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah        hwc_rect_t& crop, hwc_rect_t& dst);
237327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah
238327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah//Sets appropriate mdp flags for a layer.
239327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahvoid setMdpFlags(hwc_layer_1_t *layer,
240327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah        ovutils::eMdpFlags &mdpFlags,
2413e76f19cb2c0441315ebe54110f7b452d2932f52Ramkumar Radhakrishnan        int rotDownscale, int transform);
242327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah
2435365726ef260406513c4787b6ed253eda754370cPrabhanjan Kandulaint configRotator(overlay::Rotator *rot, ovutils::Whf& whf,
244e2f07405d2d04aaf5577080761cd2b11a9e3c736Sushil Chauhan        hwc_rect_t& crop, const ovutils::eMdpFlags& mdpFlags,
2453b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.R        const ovutils::eTransform& orient, const int& downscale);
2463b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.R
2473b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.Rint configMdp(overlay::Overlay *ov, const ovutils::PipeArgs& parg,
2483b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.R        const ovutils::eTransform& orient, const hwc_rect_t& crop,
2493b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.R        const hwc_rect_t& pos, const MetaData_t *metadata,
2503b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.R        const ovutils::eDest& dest);
2513b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.R
2523b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.Rvoid updateSource(ovutils::eTransform& orient, ovutils::Whf& whf,
2533b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.R        hwc_rect_t& crop);
2543b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.R
255327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah//Routine to configure low resolution panels (<= 2048 width)
256f8c680dacf0a357ea1f56542fb329bbc9749b6b5Saurabh Shahint configureNonSplit(hwc_context_t *ctx, hwc_layer_1_t *layer, const int& dpy,
257a0e87cbc523323604e8fb7cb5526f410a1ed26dfRamkumar Radhakrishnan        ovutils::eMdpFlags& mdpFlags, ovutils::eZorder& z,
258a0e87cbc523323604e8fb7cb5526f410a1ed26dfRamkumar Radhakrishnan        ovutils::eIsFg& isFg, const ovutils::eDest& dest,
259327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah        overlay::Rotator **rot);
260327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah
261327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah//Routine to configure high resolution panels (> 2048 width)
262f8c680dacf0a357ea1f56542fb329bbc9749b6b5Saurabh Shahint configureSplit(hwc_context_t *ctx, hwc_layer_1_t *layer, const int& dpy,
263a0e87cbc523323604e8fb7cb5526f410a1ed26dfRamkumar Radhakrishnan        ovutils::eMdpFlags& mdpFlags, ovutils::eZorder& z,
264a0e87cbc523323604e8fb7cb5526f410a1ed26dfRamkumar Radhakrishnan        ovutils::eIsFg& isFg, const ovutils::eDest& lDest,
265327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah        const ovutils::eDest& rDest, overlay::Rotator **rot);
26633147743328e88e7859db6c935072f11ca038448Kinjal Bhavsar
267e188278e86ebb2f7f1ed3762855f15062b7f9d03Saurabh Shah//On certain targets DMA pipes are used for rotation and they won't be available
268e188278e86ebb2f7f1ed3762855f15062b7f9d03Saurabh Shah//for line operations. On a per-target basis we can restrict certain use cases
269e188278e86ebb2f7f1ed3762855f15062b7f9d03Saurabh Shah//from using rotator, since we know before-hand that such scenarios can lead to
270e188278e86ebb2f7f1ed3762855f15062b7f9d03Saurabh Shah//extreme unavailability of pipes. This can also be done via hybrid calculations
271e188278e86ebb2f7f1ed3762855f15062b7f9d03Saurabh Shah//also involving many more variables like number of write-back interfaces etc,
272e188278e86ebb2f7f1ed3762855f15062b7f9d03Saurabh Shah//but the variety of scenarios is too high to warrant that.
27386adeda0140053bfc618f5fc087d30c7221459daAmara Venkata Mastan Manoj Kumarbool canUseRotator(hwc_context_t *ctx, int dpy);
274e188278e86ebb2f7f1ed3762855f15062b7f9d03Saurabh Shah
2759640e380d8f815ef7ca71c1fdf23eb6f7b30db1eSaurabh Shahint getLeftSplit(hwc_context_t *ctx, const int& dpy);
2769640e380d8f815ef7ca71c1fdf23eb6f7b30db1eSaurabh Shah
277f8c680dacf0a357ea1f56542fb329bbc9749b6b5Saurabh Shahbool isDisplaySplit(hwc_context_t* ctx, int dpy);
278f8c680dacf0a357ea1f56542fb329bbc9749b6b5Saurabh Shah
279befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// Inline utility functions
280660267c43bb3370ab49f4e95562c027171d8fb83Naseer Ahmedstatic inline bool isSkipLayer(const hwc_layer_1_t* l) {
281befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return (UNLIKELY(l && (l->flags & HWC_SKIP_LAYER)));
282befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
283befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
284befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// Returns true if the buffer is yuv
285befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedstatic inline bool isYuvBuffer(const private_handle_t* hnd) {
286befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return (hnd && (hnd->bufferType == BUFFER_TYPE_VIDEO));
287befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
288befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
289ed68f0b13f56426735e7897519aa1c43072ceb90Saurabh Shah// Returns true if the buffer is secure
290ed68f0b13f56426735e7897519aa1c43072ceb90Saurabh Shahstatic inline bool isSecureBuffer(const private_handle_t* hnd) {
291ed68f0b13f56426735e7897519aa1c43072ceb90Saurabh Shah    return (hnd && (private_handle_t::PRIV_FLAGS_SECURE_BUFFER & hnd->flags));
292ed68f0b13f56426735e7897519aa1c43072ceb90Saurabh Shah}
293befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed//Return true if buffer is marked locked
294befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedstatic inline bool isBufferLocked(const private_handle_t* hnd) {
295befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return (hnd && (private_handle_t::PRIV_FLAGS_HWC_LOCK & hnd->flags));
296befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
297bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed
2985d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed//Return true if buffer is for external display only
2995d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmedstatic inline bool isExtOnly(const private_handle_t* hnd) {
3005d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed    return (hnd && (hnd->flags & private_handle_t::PRIV_FLAGS_EXTERNAL_ONLY));
3015d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed}
3025d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed
3035d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed//Return true if buffer is for external display only with a BLOCK flag.
3045d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmedstatic inline bool isExtBlock(const private_handle_t* hnd) {
3055d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed    return (hnd && (hnd->flags & private_handle_t::PRIV_FLAGS_EXTERNAL_BLOCK));
3065d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed}
3075d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed
3085d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed//Return true if buffer is for external display only with a Close Caption flag.
3095d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmedstatic inline bool isExtCC(const private_handle_t* hnd) {
3105d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed    return (hnd && (hnd->flags & private_handle_t::PRIV_FLAGS_EXTERNAL_CC));
3115d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed}
3125d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed
3131b28b60e15c27fee703a16fbd1e42e3b41b031fdRamkumar Radhakrishnan//Return true if the buffer is intended for Secure Display
3141b28b60e15c27fee703a16fbd1e42e3b41b031fdRamkumar Radhakrishnanstatic inline bool isSecureDisplayBuffer(const private_handle_t* hnd) {
3151b28b60e15c27fee703a16fbd1e42e3b41b031fdRamkumar Radhakrishnan    return (hnd && (hnd->flags & private_handle_t::PRIV_FLAGS_SECURE_DISPLAY));
3161b28b60e15c27fee703a16fbd1e42e3b41b031fdRamkumar Radhakrishnan}
3171b28b60e15c27fee703a16fbd1e42e3b41b031fdRamkumar Radhakrishnan
31804a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmedtemplate<typename T> inline T max(T a, T b) { return (a > b) ? a : b; }
31904a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmedtemplate<typename T> inline T min(T a, T b) { return (a < b) ? a : b; }
32004a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed
3211589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed// Initialize uevent thread
3221589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmedvoid init_uevent_thread(hwc_context_t* ctx);
323aff82051a79fbaf752d3769667d34828cee2841dNaseer Ahmed// Initialize vsync thread
324aff82051a79fbaf752d3769667d34828cee2841dNaseer Ahmedvoid init_vsync_thread(hwc_context_t* ctx);
325befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
326660267c43bb3370ab49f4e95562c027171d8fb83Naseer Ahmedinline void getLayerResolution(const hwc_layer_1_t* layer,
32712a7b537b1e043a61b06db3d083c2372c11ef1f2Naseer Ahmed                               int& width, int& height) {
328c85d6b7428ded41c74a9455f580f3ee8b451bbdeNaseer Ahmed    hwc_rect_t displayFrame  = layer->displayFrame;
329c85d6b7428ded41c74a9455f580f3ee8b451bbdeNaseer Ahmed    width = displayFrame.right - displayFrame.left;
330c85d6b7428ded41c74a9455f580f3ee8b451bbdeNaseer Ahmed    height = displayFrame.bottom - displayFrame.top;
331c85d6b7428ded41c74a9455f580f3ee8b451bbdeNaseer Ahmed}
3322e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah
3332e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shahstatic inline int openFb(int dpy) {
3342e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah    int fd = -1;
3352e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah    const char *devtmpl = "/dev/graphics/fb%u";
3362e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah    char name[64] = {0};
3372e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah    snprintf(name, 64, devtmpl, dpy);
3382e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah    fd = open(name, O_RDWR);
3392e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah    return fd;
3402e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah}
3412e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah
3429a678455a788dc76a43ad93459ae6a792f0fd114Saurabh Shahtemplate <class T>
3439a678455a788dc76a43ad93459ae6a792f0fd114Saurabh Shahinline void swap(T& a, T& b) {
3449a678455a788dc76a43ad93459ae6a792f0fd114Saurabh Shah    T tmp = a;
3459a678455a788dc76a43ad93459ae6a792f0fd114Saurabh Shah    a = b;
3469a678455a788dc76a43ad93459ae6a792f0fd114Saurabh Shah    b = tmp;
3479a678455a788dc76a43ad93459ae6a792f0fd114Saurabh Shah}
3489a678455a788dc76a43ad93459ae6a792f0fd114Saurabh Shah
349ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed}; //qhwc namespace
350befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
351befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// -----------------------------------------------------------------------------
352befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// HWC context
353befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// This structure contains overall state
354befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedstruct hwc_context_t {
355660267c43bb3370ab49f4e95562c027171d8fb83Naseer Ahmed    hwc_composer_device_1_t device;
356359c544e1ca5ad76be326d9ee809e7bee51f94b4Jesse Hall    const hwc_procs_t* proc;
3574019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R
3584019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R    //CopyBit objects
3590df43c5a5da262ea6716f7614019fc710562028bAmara Venkata Mastan Manoj Kumar    qhwc::CopyBit *mCopyBit[HWC_NUM_DISPLAY_TYPES];
3604019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R
361befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    //Overlay object - NULL for non overlay devices
36247377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed    overlay::Overlay *mOverlay;
363327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah    //Holds a few rot objects
364327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah    overlay::RotMgr *mRotMgr;
365640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah
366640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah    //Primary and external FB updater
3670df43c5a5da262ea6716f7614019fc710562028bAmara Venkata Mastan Manoj Kumar    qhwc::IFBUpdate *mFBUpdate[HWC_NUM_DISPLAY_TYPES];
368ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed    // External display related information
3691589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed    qhwc::ExternalDisplay *mExtDisplay;
370361900d9a618d2c4d2276a10ca76919214f6759fJeykumar Sankaran    qhwc::VirtualDisplay *mVirtualDisplay;
371b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmed    qhwc::MDPInfo mMDP;
37210d293b379d1b8bdaa383b67c05b187365c5d1afNaseer Ahmed    qhwc::VsyncState vstate;
3730df43c5a5da262ea6716f7614019fc710562028bAmara Venkata Mastan Manoj Kumar    qhwc::DisplayAttributes dpyAttr[HWC_NUM_DISPLAY_TYPES];
3740df43c5a5da262ea6716f7614019fc710562028bAmara Venkata Mastan Manoj Kumar    qhwc::ListStats listStats[HWC_NUM_DISPLAY_TYPES];
3750df43c5a5da262ea6716f7614019fc710562028bAmara Venkata Mastan Manoj Kumar    qhwc::LayerProp *layerProp[HWC_NUM_DISPLAY_TYPES];
3760df43c5a5da262ea6716f7614019fc710562028bAmara Venkata Mastan Manoj Kumar    qhwc::MDPComp *mMDPComp[HWC_NUM_DISPLAY_TYPES];
3770df43c5a5da262ea6716f7614019fc710562028bAmara Venkata Mastan Manoj Kumar    qhwc::HwcDebug *mHwcDebug[HWC_NUM_DISPLAY_TYPES];
378f1c9077e23f3fd814c27445ad73f6967a1ce5d9eSaurabh Shah    qhwc::AssertiveDisplay *mAD;
379c439b604bcd6441e3706fdcaa5084ec58cbaf16dNaseer Ahmed    qhwc::VPUClient *mVPUClient;
3809f0b36a26d1c37ad0d31e59136b1e5d6f4d7efdeNaseer Ahmed
381a0e87cbc523323604e8fb7cb5526f410a1ed26dfRamkumar Radhakrishnan    // No animation on External display feature
382a0e87cbc523323604e8fb7cb5526f410a1ed26dfRamkumar Radhakrishnan    // Notifies hwcomposer about the device orientation before animation.
383a0e87cbc523323604e8fb7cb5526f410a1ed26dfRamkumar Radhakrishnan    int deviceOrientation;
384a0e87cbc523323604e8fb7cb5526f410a1ed26dfRamkumar Radhakrishnan    // Stores the crop, dest rect and transform value of video before animation.
385a0e87cbc523323604e8fb7cb5526f410a1ed26dfRamkumar Radhakrishnan    hwc_rect_t mPrevCropVideo;
386a0e87cbc523323604e8fb7cb5526f410a1ed26dfRamkumar Radhakrishnan    hwc_rect_t mPrevDestVideo;
387a0e87cbc523323604e8fb7cb5526f410a1ed26dfRamkumar Radhakrishnan    int mPrevTransformVideo;
388bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah    //Securing in progress indicator
389bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah    bool mSecuring;
390361900d9a618d2c4d2276a10ca76919214f6759fJeykumar Sankaran    //WFD on proprietary stack
391361900d9a618d2c4d2276a10ca76919214f6759fJeykumar Sankaran    bool mVirtualonExtActive;
392bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah    //Display in secure mode indicator
393bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah    bool mSecureMode;
3941a050829890735bc5a936ad65bf9cad80295306bSaurabh Shah    //Lock to protect drawing data structures
3951a050829890735bc5a936ad65bf9cad80295306bSaurabh Shah    mutable Locker mDrawLock;
396586aedccc2eaa76923bc22a3325fc2e4eff415e2Saurabh Shah    //Drawing round when we use GPU
397586aedccc2eaa76923bc22a3325fc2e4eff415e2Saurabh Shah    bool isPaddingRound;
3983b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.R    // External Orientation
3993b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.R    int mExtOrientation;
40056d570f1d7eb34ab0db968298efb8e75b849c893Saurabh Shah    //Flags the transition of a video session
40156d570f1d7eb34ab0db968298efb8e75b849c893Saurabh Shah    bool mVideoTransFlag;
402effbd25d502916fcdebadd1d2b83988559434e79Arun Kumar K.R
403effbd25d502916fcdebadd1d2b83988559434e79Arun Kumar K.R    //Used for SideSync feature
404effbd25d502916fcdebadd1d2b83988559434e79Arun Kumar K.R    //which overrides the mExtOrientation
405effbd25d502916fcdebadd1d2b83988559434e79Arun Kumar K.R    bool mBufferMirrorMode;
406effbd25d502916fcdebadd1d2b83988559434e79Arun Kumar K.R
4070df43c5a5da262ea6716f7614019fc710562028bAmara Venkata Mastan Manoj Kumar    qhwc::LayerRotMap *mLayerRotMap[HWC_NUM_DISPLAY_TYPES];
408befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed};
409befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
410327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahnamespace qhwc {
411c18b3a0ef41fe474fe37e2e1833ef1bb11c85b11Saurabh Shahstatic inline bool isSkipPresent (hwc_context_t *ctx, int dpy) {
412c18b3a0ef41fe474fe37e2e1833ef1bb11c85b11Saurabh Shah    return  ctx->listStats[dpy].skipCount;
413c18b3a0ef41fe474fe37e2e1833ef1bb11c85b11Saurabh Shah}
414c18b3a0ef41fe474fe37e2e1833ef1bb11c85b11Saurabh Shah
415c18b3a0ef41fe474fe37e2e1833ef1bb11c85b11Saurabh Shahstatic inline bool isYuvPresent (hwc_context_t *ctx, int dpy) {
416c18b3a0ef41fe474fe37e2e1833ef1bb11c85b11Saurabh Shah    return  ctx->listStats[dpy].yuvCount;
417c18b3a0ef41fe474fe37e2e1833ef1bb11c85b11Saurabh Shah}
418efab1d5273ce9a284e306f2607e501410cfbc8b9Saurabh Shah
419efab1d5273ce9a284e306f2607e501410cfbc8b9Saurabh Shahstatic inline bool has90Transform(hwc_layer_1_t *layer) {
420efab1d5273ce9a284e306f2607e501410cfbc8b9Saurabh Shah    return (layer->transform & HWC_TRANSFORM_ROT_90);
421efab1d5273ce9a284e306f2607e501410cfbc8b9Saurabh Shah}
422efab1d5273ce9a284e306f2607e501410cfbc8b9Saurabh Shah
423327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah};
424c18b3a0ef41fe474fe37e2e1833ef1bb11c85b11Saurabh Shah
425befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#endif //HWC_UTILS_H
426