1befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/*
2a9776b10e38f4ebdc7466955e933217fd15ae180Zohaib Alam* Copyright (c) 2011-2014, The Linux Foundation. All rights reserved.
3befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed*
4befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* Redistribution and use in source and binary forms, with or without
5befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* modification, are permitted provided that the following conditions are
6befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* met:
7befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed*    * Redistributions of source code must retain the above copyright
8befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed*      notice, this list of conditions and the following disclaimer.
9befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed*    * Redistributions in binary form must reproduce the above
10befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed*      copyright notice, this list of conditions and the following
11befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed*      disclaimer in the documentation and/or other materials provided
12befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed*      with the distribution.
135070c694011ddc30673ec68a9d1d74dc713c49f2Duy Truong*    * Neither the name of The Linux Foundation nor the names of its
14befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed*      contributors may be used to endorse or promote products derived
15befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed*      from this software without specific prior written permission.
16befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed*
17befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
18befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
20befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
21befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
24befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
26befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed*/
29befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
30befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#ifndef OVERLAY_UTILS_H
31befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#define OVERLAY_UTILS_H
32befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
33befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <cutils/log.h> // ALOGE, etc
34befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <errno.h>
35befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <fcntl.h> // open, O_RDWR, etc
36befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <hardware/hardware.h>
37befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <hardware/gralloc.h> // buffer_handle_t
38ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed#include <linux/msm_mdp.h> // flags
39a22f5873a9974b00f352370e077db9788ad67699Saurabh Shah#include <linux/msm_rotator.h>
40befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <stdio.h>
41befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <stdlib.h>
42befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <string.h>
43befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <sys/stat.h>
44befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <sys/types.h>
45befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <utils/Log.h>
46ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed#include "gralloc_priv.h" //for interlace
4747377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed
4897a328f8ca47ed26d7b076c466f7fa324eb2440fSushil Chauhan// Older platforms do not support Venus
4997a328f8ca47ed26d7b076c466f7fa324eb2440fSushil Chauhan#ifndef VENUS_COLOR_FORMAT
505ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah#define MDP_Y_CBCR_H2V2_VENUS MDP_IMGTYPE_LIMIT
5197a328f8ca47ed26d7b076c466f7fa324eb2440fSushil Chauhan#endif
5297a328f8ca47ed26d7b076c466f7fa324eb2440fSushil Chauhan
53befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/*
54befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed*
55befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* Collection of utilities functions/structs/enums etc...
56befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed*
57befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* */
58befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
59befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// comment that out if you want to remove asserts
60befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// or put it as -D in Android.mk. your choice.
61befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#define OVERLAY_HAS_ASSERT
62befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
63befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#ifdef OVERLAY_HAS_ASSERT
64befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed# define OVASSERT(x, ...) if(!(x)) { ALOGE(__VA_ARGS__); abort(); }
65befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#else
66befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed# define OVASSERT(x, ...) ALOGE_IF(!(x), __VA_ARGS__)
67befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#endif // OVERLAY_HAS_ASSERT
68befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
69befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#define DEBUG_OVERLAY 0
70befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#define PROFILE_OVERLAY 0
71befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
72640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah#ifndef MDSS_MDP_RIGHT_MIXER
73640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah#define MDSS_MDP_RIGHT_MIXER 0x100
74640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah#endif
75640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah
76c8d563c4df56d25bf6ac6f38fb6703150458737aJeykumar Sankaran#ifndef MDP_OV_PIPE_FORCE_DMA
77c8d563c4df56d25bf6ac6f38fb6703150458737aJeykumar Sankaran#define MDP_OV_PIPE_FORCE_DMA 0x4000
78c8d563c4df56d25bf6ac6f38fb6703150458737aJeykumar Sankaran#endif
79c8d563c4df56d25bf6ac6f38fb6703150458737aJeykumar Sankaran
80515d0fcdee1025c9ea57bb793259adad4d1a72aaSaurabh Shah#ifndef MDSS_MDP_DUAL_PIPE
81515d0fcdee1025c9ea57bb793259adad4d1a72aaSaurabh Shah#define MDSS_MDP_DUAL_PIPE 0x200
82515d0fcdee1025c9ea57bb793259adad4d1a72aaSaurabh Shah#endif
83515d0fcdee1025c9ea57bb793259adad4d1a72aaSaurabh Shah
846e146950e61327d425750c1de36bfd70d526acadSushil Chauhan#define FB_DEVICE_TEMPLATE "/dev/graphics/fb%u"
856e146950e61327d425750c1de36bfd70d526acadSushil Chauhan
86befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmednamespace overlay {
87befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
88befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// fwd
89befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedclass Overlay;
90bf4ef717fabff427327613de76b69f964c51484dSaurabh Shahclass OvFD;
91bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah
92bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah/* helper function to open by using fbnum */
93bf4ef717fabff427327613de76b69f964c51484dSaurabh Shahbool open(OvFD& fd, uint32_t fbnum, const char* const dev,
94bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah    int flags = O_RDWR);
95befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
96befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmednamespace utils {
97befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedstruct Whf;
98befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedstruct Dim;
99befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
100befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline uint32_t setBit(uint32_t x, uint32_t mask) {
101befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return (x | mask);
102befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
103befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
104befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline uint32_t clrBit(uint32_t x, uint32_t mask) {
105befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return (x & ~mask);
106befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
107befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
108befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* Utility class to help avoid copying instances by making the copy ctor
109befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* and assignment operator private
110befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed*
111befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* Usage:
112ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed*    class SomeClass : utils::NoCopy {...};
113befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed*/
114befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedclass NoCopy {
115befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedprotected:
116befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    NoCopy(){}
117befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    ~NoCopy() {}
118befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedprivate:
119befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    NoCopy(const NoCopy&);
120befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    const NoCopy& operator=(const NoCopy&);
121befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed};
122befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
123befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
124befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* 3D related utils, defines etc...
125befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * The compound format passed to the overlay is
126befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * ABCCC where A is the input 3D format
127befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * B is the output 3D format
128befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * CCC is the color format e.g YCbCr420SP YCrCb420SP etc */
129befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedenum { SHIFT_OUT_3D = 12,
130befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    SHIFT_TOT_3D = 16 };
131befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedenum { INPUT_3D_MASK = 0xFFFF0000,
132befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    OUTPUT_3D_MASK = 0x0000FFFF };
133befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedenum { BARRIER_LAND = 1,
134befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    BARRIER_PORT = 2 };
135befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
136befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline uint32_t format3D(uint32_t x) { return x & 0xFF000; }
137befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline uint32_t format3DOutput(uint32_t x) {
138befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return (x & 0xF000) >> SHIFT_OUT_3D; }
139befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline uint32_t format3DInput(uint32_t x) { return x & 0xF0000; }
140befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
141befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedbool isHDMIConnected ();
142befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedbool is3DTV();
143befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedbool isPanel3D();
144befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedbool usePanel3D();
145befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedbool send3DInfoPacket (uint32_t fmt);
146befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedbool enableBarrier (uint32_t orientation);
147befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmeduint32_t getS3DFormat(uint32_t fmt);
1486be1d0f8c034cbb734a770fc04f00615cea943aaSushil Chauhanbool isMdssRotator();
149e2f07405d2d04aaf5577080761cd2b11a9e3c736Sushil Chauhanvoid normalizeCrop(uint32_t& xy, uint32_t& wh);
150ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed
151befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedtemplate <int CHAN>
152ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmedbool getPositionS3D(const Whf& whf, Dim& out);
153ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed
154befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedtemplate <int CHAN>
155ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmedbool getCropS3D(const Dim& in, Dim& out, uint32_t fmt);
156ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed
157befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedtemplate <class Type>
158ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmedvoid swapWidthHeight(Type& width, Type& height);
159befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
160befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedstruct Dim {
161befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    Dim () : x(0), y(0),
162befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    w(0), h(0),
163befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    o(0) {}
164befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    Dim(uint32_t _x, uint32_t _y, uint32_t _w, uint32_t _h) :
165befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        x(_x), y(_y),
166befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        w(_w), h(_h) {}
167befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    Dim(uint32_t _x, uint32_t _y, uint32_t _w, uint32_t _h, uint32_t _o) :
168befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        x(_x), y(_y),
169befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        w(_w), h(_h),
170befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        o(_o) {}
171befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    bool check(uint32_t _w, uint32_t _h) const {
172befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        return (x+w <= _w && y+h <= _h);
173befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
174befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    }
175befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
176befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    bool operator==(const Dim& d) const {
177befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        return d.x == x && d.y == y &&
178befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed                d.w == w && d.h == h &&
179befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed                d.o == o;
180befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    }
181befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
182befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    bool operator!=(const Dim& d) const {
183befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        return !operator==(d);
184befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    }
185befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
186befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    void dump() const;
187befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    uint32_t x;
188befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    uint32_t y;
189befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    uint32_t w;
190befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    uint32_t h;
191befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    uint32_t o;
192befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed};
193befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
194befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// TODO have Whfz
195befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
196befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedstruct Whf {
197befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    Whf() : w(0), h(0), format(0), size(0) {}
198befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    Whf(uint32_t wi, uint32_t he, uint32_t f) :
199befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        w(wi), h(he), format(f), size(0) {}
200befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    Whf(uint32_t wi, uint32_t he, uint32_t f, uint32_t s) :
201befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        w(wi), h(he), format(f), size(s) {}
202befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    // FIXME not comparing size at the moment
203befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    bool operator==(const Whf& whf) const {
204befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        return whf.w == w && whf.h == h &&
205befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed                whf.format == format;
206befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    }
207befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    bool operator!=(const Whf& whf) const {
208befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        return !operator==(whf);
209befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    }
210befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    void dump() const;
211befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    uint32_t w;
212befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    uint32_t h;
213befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    uint32_t format;
214befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    uint32_t size;
215befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed};
216befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
217befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedenum { MAX_PATH_LEN = 256 };
218befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
21912a7b537b1e043a61b06db3d083c2372c11ef1f2Naseer Ahmedenum { DEFAULT_PLANE_ALPHA = 0xFF };
22012a7b537b1e043a61b06db3d083c2372c11ef1f2Naseer Ahmed
221befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/**
222befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * Rotator flags: not to be confused with orientation flags.
223327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah * Usually, you want to open the rotator to make sure it is
224befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * ready for business.
225befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * */
2268b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan enum eRotFlags {
2278b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan    ROT_FLAGS_NONE = 0,
2288b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan    //Use rotator for 0 rotation. It is used anyway for others.
2298b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan    ROT_0_ENABLED = 1 << 0,
2308b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan    //Enable rotator downscale optimization for hardware bugs not handled in
2318b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan    //driver. If downscale optimizatation is required,
2328b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan    //then rotator will be used even if its 0 rotation case.
2338b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan    ROT_DOWNSCALE_ENABLED = 1 << 1,
234327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah    ROT_PREROTATED = 1 << 2,
2358b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan};
2368b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan
2378b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnanenum eRotDownscale {
2388b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan    ROT_DS_NONE = 0,
2398b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan    ROT_DS_HALF = 1,
2408b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan    ROT_DS_FOURTH = 2,
2418b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan    ROT_DS_EIGHTH = 3,
242befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed};
243befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
244befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* The values for is_fg flag for control alpha and transp
245befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * IS_FG_OFF means is_fg = 0
246befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * IS_FG_SET means is_fg = 1
247befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed */
248befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedenum eIsFg {
249befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    IS_FG_OFF = 0,
250befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    IS_FG_SET = 1
251befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed};
252befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
253befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/*
254befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * Various mdp flags like PIPE SHARE, DEINTERLACE etc...
255befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * kernel/common/linux/msm_mdp.h
256befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * INTERLACE_MASK: hardware/qcom/display/libgralloc/badger/fb_priv.h
257befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * */
258befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedenum eMdpFlags {
259befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    OV_MDP_FLAGS_NONE = 0,
260befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    OV_MDP_PIPE_SHARE =  MDP_OV_PIPE_SHARE,
261c8d563c4df56d25bf6ac6f38fb6703150458737aJeykumar Sankaran    OV_MDP_PIPE_FORCE_DMA = MDP_OV_PIPE_FORCE_DMA,
262befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    OV_MDP_DEINTERLACE = MDP_DEINTERLACE,
263ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    OV_MDP_SECURE_OVERLAY_SESSION = MDP_SECURE_OVERLAY_SESSION,
2641b28b60e15c27fee703a16fbd1e42e3b41b031fdRamkumar Radhakrishnan    OV_MDP_SECURE_DISPLAY_OVERLAY_SESSION = MDP_SECURE_DISPLAY_OVERLAY_SESSION,
265ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    OV_MDP_SOURCE_ROTATED_90 = MDP_SOURCE_ROTATED_90,
266a79e534d42353d8e75b668f5e77b6f6357a08e07Saurabh Shah    OV_MDP_BACKEND_COMPOSITION = MDP_BACKEND_COMPOSITION,
267b5e3a690995208ad018a083456d6a05628300e92Saurabh Shah    OV_MDP_BLEND_FG_PREMULT = MDP_BLEND_FG_PREMULT,
268d7dd5e35374e461d250dd8cc430a47624d6485c7Saurabh Shah    OV_MDP_FLIP_H = MDP_FLIP_LR,
269d7dd5e35374e461d250dd8cc430a47624d6485c7Saurabh Shah    OV_MDP_FLIP_V = MDP_FLIP_UD,
270640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah    OV_MDSS_MDP_RIGHT_MIXER = MDSS_MDP_RIGHT_MIXER,
2715d50448ce691782fde0c26ec8247b3d5d6b2de82Saurabh Shah    OV_MDP_PP_EN = MDP_OVERLAY_PP_CFG_EN,
27230323b98c1abab90dce91c3d226d4e65a24076fcSushil Chauhan    OV_MDSS_MDP_BWC_EN = MDP_BWC_EN,
273515d0fcdee1025c9ea57bb793259adad4d1a72aaSaurabh Shah    OV_MDSS_MDP_DUAL_PIPE = MDSS_MDP_DUAL_PIPE,
27421f37c4ebb7be110d093d2a28c28251dbbdf525aSushil Chauhan    OV_MDP_SOLID_FILL = MDP_SOLID_FILL,
275befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed};
276befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
277befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedenum eZorder {
278327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah    ZORDER_0 = 0,
279befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    ZORDER_1,
280befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    ZORDER_2,
28147377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed    ZORDER_3,
282befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    Z_SYSTEM_ALLOC = 0xFFFF
283befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed};
284befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
285befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedenum eMdpPipeType {
2866e146950e61327d425750c1de36bfd70d526acadSushil Chauhan    OV_MDP_PIPE_RGB = 0,
28747377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed    OV_MDP_PIPE_VG,
288c8d563c4df56d25bf6ac6f38fb6703150458737aJeykumar Sankaran    OV_MDP_PIPE_DMA,
28947377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed    OV_MDP_PIPE_ANY, //Any
290befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed};
291befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
2926e146950e61327d425750c1de36bfd70d526acadSushil Chauhan// Identify destination pipes
2936e146950e61327d425750c1de36bfd70d526acadSushil Chauhan// TODO Names useless, replace with int and change all interfaces
294befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedenum eDest {
2956e146950e61327d425750c1de36bfd70d526acadSushil Chauhan    OV_P0 = 0,
2966e146950e61327d425750c1de36bfd70d526acadSushil Chauhan    OV_P1,
2976e146950e61327d425750c1de36bfd70d526acadSushil Chauhan    OV_P2,
2986e146950e61327d425750c1de36bfd70d526acadSushil Chauhan    OV_P3,
2996e146950e61327d425750c1de36bfd70d526acadSushil Chauhan    OV_P4,
3006e146950e61327d425750c1de36bfd70d526acadSushil Chauhan    OV_P5,
3016e146950e61327d425750c1de36bfd70d526acadSushil Chauhan    OV_P6,
3026e146950e61327d425750c1de36bfd70d526acadSushil Chauhan    OV_P7,
3036e146950e61327d425750c1de36bfd70d526acadSushil Chauhan    OV_P8,
3046e146950e61327d425750c1de36bfd70d526acadSushil Chauhan    OV_P9,
30547377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed    OV_INVALID,
3066e146950e61327d425750c1de36bfd70d526acadSushil Chauhan    OV_MAX = OV_INVALID,
30747377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed};
30847377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed
30947377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed/* Used when a buffer is split over 2 pipes and sent to display */
31047377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmedenum {
31147377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed    OV_LEFT_SPLIT = 0,
31247377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed    OV_RIGHT_SPLIT,
313befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed};
314befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
315befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* values for copybit_set_parameter(OVERLAY_TRANSFORM) */
316befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedenum eTransform {
317befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    /* No rot */
318ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    OVERLAY_TRANSFORM_0 = 0x0,
319ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    /* flip source image horizontally 0x1 */
320ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    OVERLAY_TRANSFORM_FLIP_H = HAL_TRANSFORM_FLIP_H,
321ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    /* flip source image vertically 0x2 */
322ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    OVERLAY_TRANSFORM_FLIP_V = HAL_TRANSFORM_FLIP_V,
323befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    /* rotate source image 180 degrees
324befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed     * It is basically bit-or-ed  H | V == 0x3 */
325ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    OVERLAY_TRANSFORM_ROT_180 = HAL_TRANSFORM_ROT_180,
326ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    /* rotate source image 90 degrees 0x4 */
327ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    OVERLAY_TRANSFORM_ROT_90 = HAL_TRANSFORM_ROT_90,
328ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    /* rotate source image 90 degrees and flip horizontally 0x5 */
329ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    OVERLAY_TRANSFORM_ROT_90_FLIP_H = HAL_TRANSFORM_ROT_90 |
330ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed                                      HAL_TRANSFORM_FLIP_H,
331ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    /* rotate source image 90 degrees and flip vertically 0x6 */
332ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    OVERLAY_TRANSFORM_ROT_90_FLIP_V = HAL_TRANSFORM_ROT_90 |
333ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed                                      HAL_TRANSFORM_FLIP_V,
334befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    /* rotate source image 270 degrees
335befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed     * Basically 180 | 90 == 0x7 */
336ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    OVERLAY_TRANSFORM_ROT_270 = HAL_TRANSFORM_ROT_270,
337befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    /* rotate invalid like in Transform.h */
338ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    OVERLAY_TRANSFORM_INV = 0x80
339befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed};
340befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
34112a7b537b1e043a61b06db3d083c2372c11ef1f2Naseer Ahmedenum eBlending {
34212a7b537b1e043a61b06db3d083c2372c11ef1f2Naseer Ahmed    OVERLAY_BLENDING_UNDEFINED = 0x0,
34312a7b537b1e043a61b06db3d083c2372c11ef1f2Naseer Ahmed    /* No blending */
34412a7b537b1e043a61b06db3d083c2372c11ef1f2Naseer Ahmed    OVERLAY_BLENDING_OPAQUE,
34512a7b537b1e043a61b06db3d083c2372c11ef1f2Naseer Ahmed    /* src.rgb + dst.rgb*(1-src_alpha) */
34612a7b537b1e043a61b06db3d083c2372c11ef1f2Naseer Ahmed    OVERLAY_BLENDING_PREMULT,
34712a7b537b1e043a61b06db3d083c2372c11ef1f2Naseer Ahmed    /* src.rgb * src_alpha + dst.rgb (1 - src_alpha) */
34812a7b537b1e043a61b06db3d083c2372c11ef1f2Naseer Ahmed    OVERLAY_BLENDING_COVERAGE,
34912a7b537b1e043a61b06db3d083c2372c11ef1f2Naseer Ahmed};
35012a7b537b1e043a61b06db3d083c2372c11ef1f2Naseer Ahmed
351befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// Used to consolidate pipe params
352befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedstruct PipeArgs {
353befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    PipeArgs() : mdpFlags(OV_MDP_FLAGS_NONE),
354befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        zorder(Z_SYSTEM_ALLOC),
355befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        isFg(IS_FG_OFF),
35612a7b537b1e043a61b06db3d083c2372c11ef1f2Naseer Ahmed        rotFlags(ROT_FLAGS_NONE),
35712a7b537b1e043a61b06db3d083c2372c11ef1f2Naseer Ahmed        planeAlpha(DEFAULT_PLANE_ALPHA),
35812a7b537b1e043a61b06db3d083c2372c11ef1f2Naseer Ahmed        blending(OVERLAY_BLENDING_COVERAGE){
359befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    }
360befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
361ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    PipeArgs(eMdpFlags f, Whf _whf,
36212a7b537b1e043a61b06db3d083c2372c11ef1f2Naseer Ahmed            eZorder z, eIsFg fg, eRotFlags r,
36312a7b537b1e043a61b06db3d083c2372c11ef1f2Naseer Ahmed            int pA = DEFAULT_PLANE_ALPHA, eBlending b = OVERLAY_BLENDING_COVERAGE) :
364befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        mdpFlags(f),
365befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        whf(_whf),
366befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        zorder(z),
367befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        isFg(fg),
36812a7b537b1e043a61b06db3d083c2372c11ef1f2Naseer Ahmed        rotFlags(r),
36912a7b537b1e043a61b06db3d083c2372c11ef1f2Naseer Ahmed        planeAlpha(pA),
37012a7b537b1e043a61b06db3d083c2372c11ef1f2Naseer Ahmed        blending(b){
371befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    }
372befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
373ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    eMdpFlags mdpFlags; // for mdp_overlay flags
374befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    Whf whf;
375befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    eZorder zorder; // stage number
376befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    eIsFg isFg; // control alpha & transp
377befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    eRotFlags rotFlags;
37812a7b537b1e043a61b06db3d083c2372c11ef1f2Naseer Ahmed    int planeAlpha;
37912a7b537b1e043a61b06db3d083c2372c11ef1f2Naseer Ahmed    eBlending blending;
380befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed};
381befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
3826e146950e61327d425750c1de36bfd70d526acadSushil Chauhan// Cannot use HW_OVERLAY_MAGNIFICATION_LIMIT, since at the time
3836e146950e61327d425750c1de36bfd70d526acadSushil Chauhan// of integration, HW_OVERLAY_MAGNIFICATION_LIMIT was a define
3846e146950e61327d425750c1de36bfd70d526acadSushil Chauhanenum { HW_OV_MAGNIFICATION_LIMIT = 20,
3856e146950e61327d425750c1de36bfd70d526acadSushil Chauhan    HW_OV_MINIFICATION_LIMIT  = 8
3866e146950e61327d425750c1de36bfd70d526acadSushil Chauhan};
3876e146950e61327d425750c1de36bfd70d526acadSushil Chauhan
388befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline void setMdpFlags(eMdpFlags& f, eMdpFlags v) {
389befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    f = static_cast<eMdpFlags>(setBit(f, v));
390befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
391befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
392befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline void clearMdpFlags(eMdpFlags& f, eMdpFlags v) {
393befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    f = static_cast<eMdpFlags>(clrBit(f, v));
394befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
395befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
396befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedenum { FB0, FB1, FB2 };
397befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
398befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedstruct ScreenInfo {
399befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    ScreenInfo() : mFBWidth(0),
400befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    mFBHeight(0),
401befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    mFBbpp(0),
402befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    mFBystride(0) {}
403befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    void dump(const char* const s) const;
404befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    uint32_t mFBWidth;
405befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    uint32_t mFBHeight;
406befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    uint32_t mFBbpp;
407befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    uint32_t mFBystride;
408befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed};
409befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
410befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedint getMdpFormat(int format);
411c38cdae859e0ee12ad3284a308eaeef9d2708c74Manoj Kumar AVMint getMdpFormat(int format, bool tileEnabled);
412e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shahint getHALFormat(int mdpFormat);
413327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahint getDownscaleFactor(const int& src_w, const int& src_h,
414327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah        const int& dst_w, const int& dst_h);
415f0a7a20029deae76ea13d90099a09cc5e540f6baSaurabh Shahvoid getDecimationFactor(const int& src_w, const int& src_h,
416f0a7a20029deae76ea13d90099a09cc5e540f6baSaurabh Shah        const int& dst_w, const int& dst_h, float& horDscale,
417f0a7a20029deae76ea13d90099a09cc5e540f6baSaurabh Shah        float& verDscale);
418e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shah
419befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* flip is upside down and such. V, H flip
420befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * rotation is 90, 180 etc
421befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * It returns MDP related enum/define that match rot+flip*/
422befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedint getMdpOrient(eTransform rotation);
423a8ce3500c19eccd70526396ed5ccc48057e9c7b0Saurabh Shahconst char* getFormatString(int format);
424befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
425befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedtemplate <class T>
4268bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shahinline void memset0(T& t) { ::memset(&t, 0, sizeof(t)); }
427befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
428befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedtemplate <class T> inline void swap ( T& a, T& b )
429befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed{
430befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    T c(a); a=b; b=c;
431befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
432befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
433befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline int alignup(int value, int a) {
434befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    //if align = 0, return the value. Else, do alignment.
435befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return a ? ((((value - 1) / a) + 1) * a) : value;
436befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
437befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
4388b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnaninline int aligndown(int value, int a) {
4398b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan    //if align = 0, return the value. Else, do alignment.
4408b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan    return a ? ((value) & ~(a-1)) : value;
4418b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan}
4428b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan
443befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// FIXME that align should replace the upper one.
444befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline int align(int value, int a) {
445befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    //if align = 0, return the value. Else, do alignment.
446befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return a ? ((value + (a-1)) & ~(a-1)) : value;
447befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
448befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
449befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedenum eRotOutFmt {
450befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    ROT_OUT_FMT_DEFAULT,
451befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    ROT_OUT_FMT_Y_CRCB_H2V2
452befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed};
453befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
454befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedtemplate <int ROT_OUT_FMT> struct RotOutFmt;
455befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
456befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// FIXME, taken from gralloc_priv.h. Need to
457befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// put it back as soon as overlay takes place of the old one
458befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* possible formats for 3D content*/
459befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedenum {
460befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    HAL_NO_3D                         = 0x0000,
461befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    HAL_3D_IN_SIDE_BY_SIDE_L_R        = 0x10000,
462befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    HAL_3D_IN_TOP_BOTTOM              = 0x20000,
463befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    HAL_3D_IN_INTERLEAVE              = 0x40000,
464befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    HAL_3D_IN_SIDE_BY_SIDE_R_L        = 0x80000,
465befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    HAL_3D_OUT_SIDE_BY_SIDE           = 0x1000,
466befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    HAL_3D_OUT_TOP_BOTTOM             = 0x2000,
467befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    HAL_3D_OUT_INTERLEAVE             = 0x4000,
468befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    HAL_3D_OUT_MONOSCOPIC             = 0x8000
469befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed};
470befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
471befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedenum { HAL_3D_OUT_SBS_MASK =
472befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    HAL_3D_OUT_SIDE_BY_SIDE >> overlay::utils::SHIFT_OUT_3D,
473befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    HAL_3D_OUT_TOP_BOT_MASK =
474befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            HAL_3D_OUT_TOP_BOTTOM >> overlay::utils::SHIFT_OUT_3D,
475befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    HAL_3D_OUT_INTERL_MASK =
476befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            HAL_3D_OUT_INTERLEAVE >> overlay::utils::SHIFT_OUT_3D,
477befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    HAL_3D_OUT_MONOS_MASK =
478befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            HAL_3D_OUT_MONOSCOPIC >> overlay::utils::SHIFT_OUT_3D
479befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed};
480befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
481befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
482befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline bool isYuv(uint32_t format) {
483befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    switch(format){
484befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        case MDP_Y_CBCR_H2V1:
485befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        case MDP_Y_CBCR_H2V2:
486befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        case MDP_Y_CRCB_H2V2:
48797f90b097454424374c34f4e79aaf1025eef1cd0Saurabh Shah        case MDP_Y_CRCB_H1V1:
48897f90b097454424374c34f4e79aaf1025eef1cd0Saurabh Shah        case MDP_Y_CRCB_H2V1:
489befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        case MDP_Y_CRCB_H2V2_TILE:
490befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        case MDP_Y_CBCR_H2V2_TILE:
49197f90b097454424374c34f4e79aaf1025eef1cd0Saurabh Shah        case MDP_Y_CR_CB_H2V2:
492b27c26b9c995b583cb91320bc1daf84bad7f34bdSaurabh Shah        case MDP_Y_CR_CB_GH2V2:
4932d9ebfd924dfc0e86b7b6fda9ec7a538a1e91955Sushil Chauhan        case MDP_Y_CBCR_H2V2_VENUS:
49422977805cde2da4defc7ee3f49577a388b01c3dbRamkumar Radhakrishnan        case MDP_YCBYCR_H2V1:
49522977805cde2da4defc7ee3f49577a388b01c3dbRamkumar Radhakrishnan        case MDP_YCRYCB_H2V1:
496befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            return true;
497befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        default:
498befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            return false;
499befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    }
500befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return false;
501befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
502befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
503befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline bool isRgb(uint32_t format) {
504befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    switch(format) {
505befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        case MDP_RGBA_8888:
506befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        case MDP_BGRA_8888:
507befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        case MDP_RGBX_8888:
508befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        case MDP_RGB_565:
509befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            return true;
510befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        default:
511befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            return false;
512befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    }
513befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return false;
514befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
515befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
516a8ce3500c19eccd70526396ed5ccc48057e9c7b0Saurabh Shahinline const char* getFormatString(int format){
5175ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    #define STR(f) #f;
5185ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    static const char* formats[MDP_IMGTYPE_LIMIT + 1] = {0};
5195ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    formats[MDP_RGB_565] = STR(MDP_RGB_565);
5205ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    formats[MDP_XRGB_8888] = STR(MDP_XRGB_8888);
5215ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    formats[MDP_Y_CBCR_H2V2] = STR(MDP_Y_CBCR_H2V2);
5225ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    formats[MDP_Y_CBCR_H2V2_ADRENO] = STR(MDP_Y_CBCR_H2V2_ADRENO);
5235ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    formats[MDP_ARGB_8888] = STR(MDP_ARGB_8888);
5245ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    formats[MDP_RGB_888] = STR(MDP_RGB_888);
5255ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    formats[MDP_Y_CRCB_H2V2] = STR(MDP_Y_CRCB_H2V2);
52622977805cde2da4defc7ee3f49577a388b01c3dbRamkumar Radhakrishnan    formats[MDP_YCBYCR_H2V1] = STR(MDP_YCBYCR_H2V1);
5275ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    formats[MDP_YCRYCB_H2V1] = STR(MDP_YCRYCB_H2V1);
5285ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    formats[MDP_CBYCRY_H2V1] = STR(MDP_CBYCRY_H2V1);
5295ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    formats[MDP_Y_CRCB_H2V1] = STR(MDP_Y_CRCB_H2V1);
5305ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    formats[MDP_Y_CBCR_H2V1] = STR(MDP_Y_CBCR_H2V1);
5315ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    formats[MDP_Y_CRCB_H1V2] = STR(MDP_Y_CRCB_H1V2);
5325ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    formats[MDP_Y_CBCR_H1V2] = STR(MDP_Y_CBCR_H1V2);
5335ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    formats[MDP_RGBA_8888] = STR(MDP_RGBA_8888);
5345ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    formats[MDP_BGRA_8888] = STR(MDP_BGRA_8888);
5355ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    formats[MDP_RGBX_8888] = STR(MDP_RGBX_8888);
5365ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    formats[MDP_Y_CRCB_H2V2_TILE] = STR(MDP_Y_CRCB_H2V2_TILE);
5375ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    formats[MDP_Y_CBCR_H2V2_TILE] = STR(MDP_Y_CBCR_H2V2_TILE);
5385ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    formats[MDP_Y_CR_CB_H2V2] = STR(MDP_Y_CR_CB_H2V2);
5395ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    formats[MDP_Y_CR_CB_GH2V2] = STR(MDP_Y_CR_CB_GH2V2);
5405ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    formats[MDP_Y_CB_CR_H2V2] = STR(MDP_Y_CB_CR_H2V2);
5415ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    formats[MDP_Y_CRCB_H1V1] = STR(MDP_Y_CRCB_H1V1);
5425ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    formats[MDP_Y_CBCR_H1V1] = STR(MDP_Y_CBCR_H1V1);
5435ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    formats[MDP_YCRCB_H1V1] = STR(MDP_YCRCB_H1V1);
5445ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    formats[MDP_YCBCR_H1V1] = STR(MDP_YCBCR_H1V1);
5455ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    formats[MDP_BGR_565] = STR(MDP_BGR_565);
5465ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    formats[MDP_BGR_888] = STR(MDP_BGR_888);
5475ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    formats[MDP_Y_CBCR_H2V2_VENUS] = STR(MDP_Y_CBCR_H2V2_VENUS);
5485ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    formats[MDP_BGRX_8888] = STR(MDP_BGRX_8888);
549c38cdae859e0ee12ad3284a308eaeef9d2708c74Manoj Kumar AVM    formats[MDP_RGBA_8888_TILE] = STR(MDP_RGBA_8888_TILE);
550c38cdae859e0ee12ad3284a308eaeef9d2708c74Manoj Kumar AVM    formats[MDP_ARGB_8888_TILE] = STR(MDP_ARGB_8888_TILE);
551c38cdae859e0ee12ad3284a308eaeef9d2708c74Manoj Kumar AVM    formats[MDP_ABGR_8888_TILE] = STR(MDP_ABGR_8888_TILE);
552c38cdae859e0ee12ad3284a308eaeef9d2708c74Manoj Kumar AVM    formats[MDP_BGRA_8888_TILE] = STR(MDP_BGRA_8888_TILE);
553c38cdae859e0ee12ad3284a308eaeef9d2708c74Manoj Kumar AVM    formats[MDP_RGBX_8888_TILE] = STR(MDP_RGBX_8888_TILE);
554c38cdae859e0ee12ad3284a308eaeef9d2708c74Manoj Kumar AVM    formats[MDP_XRGB_8888_TILE] = STR(MDP_XRGB_8888_TILE);
555c38cdae859e0ee12ad3284a308eaeef9d2708c74Manoj Kumar AVM    formats[MDP_XBGR_8888_TILE] = STR(MDP_XBGR_8888_TILE);
556c38cdae859e0ee12ad3284a308eaeef9d2708c74Manoj Kumar AVM    formats[MDP_BGRX_8888_TILE] = STR(MDP_BGRX_8888_TILE);
5576a8289a1767dad8ba243735041ae28adf7311042Manoj Kumar AVM    formats[MDP_RGB_565_TILE] = STR(MDP_RGB_565_TILE);
5585ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    formats[MDP_IMGTYPE_LIMIT] = STR(MDP_IMGTYPE_LIMIT);
5595ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah
5605ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    if(format < 0 || format >= MDP_IMGTYPE_LIMIT) {
561a8ce3500c19eccd70526396ed5ccc48057e9c7b0Saurabh Shah        ALOGE("%s wrong fmt %d", __FUNCTION__, format);
562a8ce3500c19eccd70526396ed5ccc48057e9c7b0Saurabh Shah        return "Unsupported format";
563a8ce3500c19eccd70526396ed5ccc48057e9c7b0Saurabh Shah    }
5645ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    if(formats[format] == 0) {
5655ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah        ALOGE("%s: table missing format %d from header", __FUNCTION__, format);
5665ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah        return "";
5675ca82ebccaf75b32fd37f65a51f6c1ed94eaa7dcSaurabh Shah    }
568befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return formats[format];
569befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
570befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
571befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline void Whf::dump() const {
572befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    ALOGE("== Dump WHF w=%d h=%d f=%d s=%d start/end ==",
573befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            w, h, format, size);
574befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
575befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
576befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline void Dim::dump() const {
577befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    ALOGE("== Dump Dim x=%d y=%d w=%d h=%d start/end ==", x, y, w, h);
578befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
579befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
580befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// FB0
581befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedtemplate <int CHAN>
582befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline Dim getPositionS3DImpl(const Whf& whf)
583befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed{
584befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    switch (whf.format & OUTPUT_3D_MASK)
585befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    {
586befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        case HAL_3D_OUT_SBS_MASK:
587befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            // x, y, w, h
588befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            return Dim(0, 0, whf.w/2, whf.h);
589befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        case HAL_3D_OUT_TOP_BOT_MASK:
590befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            return Dim(0, 0, whf.w, whf.h/2);
591befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        case HAL_3D_OUT_MONOS_MASK:
592befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            return Dim();
593befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        case HAL_3D_OUT_INTERL_MASK:
594befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            // FIXME error?
595befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            ALOGE("%s HAL_3D_OUT_INTERLEAVE_MASK", __FUNCTION__);
596befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            return Dim();
597befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        default:
598befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            ALOGE("%s Unsupported 3D output format %d", __FUNCTION__,
599befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed                    whf.format);
600befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    }
601befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return Dim();
602befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
603befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
604befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedtemplate <>
60547377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmedinline Dim getPositionS3DImpl<utils::OV_RIGHT_SPLIT>(const Whf& whf)
606befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed{
607befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    switch (whf.format & OUTPUT_3D_MASK)
608befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    {
609befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        case HAL_3D_OUT_SBS_MASK:
610befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            return Dim(whf.w/2, 0, whf.w/2, whf.h);
611befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        case HAL_3D_OUT_TOP_BOT_MASK:
612befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            return Dim(0, whf.h/2, whf.w, whf.h/2);
613befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        case HAL_3D_OUT_MONOS_MASK:
614befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            return Dim(0, 0, whf.w, whf.h);
615befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        case HAL_3D_OUT_INTERL_MASK:
616befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            // FIXME error?
617befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            ALOGE("%s HAL_3D_OUT_INTERLEAVE_MASK", __FUNCTION__);
618befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            return Dim();
619befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        default:
620befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            ALOGE("%s Unsupported 3D output format %d", __FUNCTION__,
621befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed                    whf.format);
622befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    }
623befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return Dim();
624befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
625befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
626befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedtemplate <int CHAN>
627befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline bool getPositionS3D(const Whf& whf, Dim& out) {
628befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    out = getPositionS3DImpl<CHAN>(whf);
629befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return (out != Dim());
630befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
631befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
632befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedtemplate <int CHAN>
633befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline Dim getCropS3DImpl(const Dim& in, uint32_t fmt) {
634befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    switch (fmt & INPUT_3D_MASK)
635befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    {
636befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        case HAL_3D_IN_SIDE_BY_SIDE_L_R:
637befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            return Dim(0, 0, in.w/2, in.h);
638befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        case HAL_3D_IN_SIDE_BY_SIDE_R_L:
639befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            return Dim(in.w/2, 0, in.w/2, in.h);
640befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        case HAL_3D_IN_TOP_BOTTOM:
641befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            return Dim(0, 0, in.w, in.h/2);
642befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        case HAL_3D_IN_INTERLEAVE:
643befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            ALOGE("%s HAL_3D_IN_INTERLEAVE", __FUNCTION__);
644befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            break;
645befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        default:
646befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            ALOGE("%s Unsupported 3D format %d", __FUNCTION__, fmt);
647befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            break;
648befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    }
649befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return Dim();
650befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
651befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
652befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedtemplate <>
65347377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmedinline Dim getCropS3DImpl<utils::OV_RIGHT_SPLIT>(const Dim& in, uint32_t fmt) {
654befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    switch (fmt & INPUT_3D_MASK)
655befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    {
656befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        case HAL_3D_IN_SIDE_BY_SIDE_L_R:
657befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            return Dim(in.w/2, 0, in.w/2, in.h);
658befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        case HAL_3D_IN_SIDE_BY_SIDE_R_L:
659befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            return Dim(0, 0, in.w/2, in.h);
660befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        case HAL_3D_IN_TOP_BOTTOM:
661befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            return Dim(0, in.h/2, in.w, in.h/2);
662befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        case HAL_3D_IN_INTERLEAVE:
663befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            ALOGE("%s HAL_3D_IN_INTERLEAVE", __FUNCTION__);
664befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            break;
665befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        default:
666befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            ALOGE("%s Unsupported 3D format %d", __FUNCTION__, fmt);
667befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            break;
668befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    }
669befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return Dim();
670befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
671befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
672befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedtemplate <int CHAN>
673befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline bool getCropS3D(const Dim& in, Dim& out, uint32_t fmt)
674befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed{
675befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    out = getCropS3DImpl<CHAN>(in, fmt);
676befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return (out != Dim());
677befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
678befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
679befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedtemplate <class Type>
680befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedvoid swapWidthHeight(Type& width, Type& height) {
681befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    Type tmp = width;
682befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    width = height;
683befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    height = tmp;
684befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
685befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
686befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline void ScreenInfo::dump(const char* const s) const {
687befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    ALOGE("== Dump %s ScreenInfo w=%d h=%d"
688befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            " bpp=%d stride=%d start/end ==",
689befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            s, mFBWidth, mFBHeight, mFBbpp, mFBystride);
690befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
691befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
692bf4ef717fabff427327613de76b69f964c51484dSaurabh Shahinline bool openDev(OvFD& fd, int fbnum,
693bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah    const char* const devpath, int flags) {
694bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah    return overlay::open(fd, fbnum, devpath, flags);
695bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah}
696bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah
69797f90b097454424374c34f4e79aaf1025eef1cd0Saurabh Shahtemplate <class T>
69897f90b097454424374c34f4e79aaf1025eef1cd0Saurabh Shahinline void even_ceil(T& value) {
69997f90b097454424374c34f4e79aaf1025eef1cd0Saurabh Shah    if(value & 1)
70097f90b097454424374c34f4e79aaf1025eef1cd0Saurabh Shah        value++;
70197f90b097454424374c34f4e79aaf1025eef1cd0Saurabh Shah}
70297f90b097454424374c34f4e79aaf1025eef1cd0Saurabh Shah
70397f90b097454424374c34f4e79aaf1025eef1cd0Saurabh Shahtemplate <class T>
70497f90b097454424374c34f4e79aaf1025eef1cd0Saurabh Shahinline void even_floor(T& value) {
70597f90b097454424374c34f4e79aaf1025eef1cd0Saurabh Shah    if(value & 1)
70697f90b097454424374c34f4e79aaf1025eef1cd0Saurabh Shah        value--;
70797f90b097454424374c34f4e79aaf1025eef1cd0Saurabh Shah}
70897f90b097454424374c34f4e79aaf1025eef1cd0Saurabh Shah
70988dd176177d0830ad88a7cb975a77c8ce442410cSaurabh Shahvoid preRotateSource(const eTransform& tr, Whf& whf, Dim& srcCrop);
710a22f5873a9974b00f352370e077db9788ad67699Saurabh Shahvoid getDump(char *buf, size_t len, const char *prefix, const mdp_overlay& ov);
711a22f5873a9974b00f352370e077db9788ad67699Saurabh Shahvoid getDump(char *buf, size_t len, const char *prefix, const msmfb_img& ov);
712a22f5873a9974b00f352370e077db9788ad67699Saurabh Shahvoid getDump(char *buf, size_t len, const char *prefix, const mdp_rect& ov);
713a22f5873a9974b00f352370e077db9788ad67699Saurabh Shahvoid getDump(char *buf, size_t len, const char *prefix,
714a22f5873a9974b00f352370e077db9788ad67699Saurabh Shah        const msmfb_overlay_data& ov);
715a22f5873a9974b00f352370e077db9788ad67699Saurabh Shahvoid getDump(char *buf, size_t len, const char *prefix, const msmfb_data& ov);
716a22f5873a9974b00f352370e077db9788ad67699Saurabh Shahvoid getDump(char *buf, size_t len, const char *prefix,
717a22f5873a9974b00f352370e077db9788ad67699Saurabh Shah        const msm_rotator_img_info& ov);
718a22f5873a9974b00f352370e077db9788ad67699Saurabh Shahvoid getDump(char *buf, size_t len, const char *prefix,
719a22f5873a9974b00f352370e077db9788ad67699Saurabh Shah        const msm_rotator_data_info& ov);
720a22f5873a9974b00f352370e077db9788ad67699Saurabh Shah
721befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed} // namespace utils ends
722befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
723befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed//--------------------Class Res stuff (namespace overlay only) -----------
724befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
725befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedclass Res {
726befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedpublic:
727befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    // /dev/graphics/fb%u
728ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    static const char* const fbPath;
729befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    // /dev/msm_rotator
730befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    static const char* const rotPath;
731befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    // /sys/class/graphics/fb1/format_3d
732befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    static const char* const format3DFile;
733befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    // /sys/class/graphics/fb1/3d_present
734befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    static const char* const edid3dInfoFile;
735befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    // /sys/devices/platform/mipi_novatek.0/enable_3d_barrier
736befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    static const char* const barrierFile;
737befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed};
738befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
739befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
740befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed//--------------------Class OvFD stuff (namespace overlay only) -----------
741befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
742befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/*
743befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* Holds one FD
744befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* Dtor will NOT close the underlying FD.
745befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* That enables us to copy that object around
746befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* */
747befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedclass OvFD {
748befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedpublic:
749befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    /* Ctor */
750befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    explicit OvFD();
751befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
752befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    /* dtor will NOT close the underlying FD */
753befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    ~OvFD();
754befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
755befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    /* Open fd using the path given by dev.
756befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed     * return false in failure */
757befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    bool open(const char* const dev,
758befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            int flags = O_RDWR);
759befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
760befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    /* populate path */
761befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    void setPath(const char* const dev);
762befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
763befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    /* Close fd if we have a valid fd. */
764befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    bool close();
765befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
766befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    /* returns underlying fd.*/
767befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    int getFD() const;
768befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
769befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    /* returns true if fd is valid */
770befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    bool valid() const;
771befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
772befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    /* like operator= */
773befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    void copy(int fd);
774befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
775befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    /* dump the state of the instance */
776befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    void dump() const;
777befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedprivate:
778befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    /* helper enum for determine valid/invalid fd */
779befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    enum { INVAL = -1 };
780befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
781befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    /* actual os fd */
782befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    int mFD;
783befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
784befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    /* path, for debugging */
785befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    char mPath[utils::MAX_PATH_LEN];
786befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed};
787befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
788befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed//-------------------Inlines--------------------------
789befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
790befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline bool open(OvFD& fd, uint32_t fbnum, const char* const dev, int flags)
791befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed{
792befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    char dev_name[64] = {0};
793befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    snprintf(dev_name, sizeof(dev_name), dev, fbnum);
794befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return fd.open(dev_name, flags);
795befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
796befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
797befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline OvFD::OvFD() : mFD (INVAL) {
798befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    mPath[0] = 0;
799befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
800befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
801ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmedinline OvFD::~OvFD() {
802ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    //no op since copy() can be used to share fd, in 3d cases.
803ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed}
804befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
805befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline bool OvFD::open(const char* const dev, int flags)
806befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed{
807befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    mFD = ::open(dev, flags, 0);
808befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    if (mFD < 0) {
809befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        // FIXME errno, strerror in bionic?
810befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        ALOGE("Cant open device %s err=%d", dev, errno);
811befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        return false;
812befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    }
813befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    setPath(dev);
814befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return true;
815befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
816befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
817befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline void OvFD::setPath(const char* const dev)
818befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed{
819c9cbe63708025b7aed15e251b2fb3a914fd842a0Ramkumar Radhakrishnan    ::strlcpy(mPath, dev, sizeof(mPath));
820befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
821befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
822befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline bool OvFD::close()
823befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed{
824befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    int ret = 0;
825befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    if(valid()) {
826befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        ret = ::close(mFD);
827befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        mFD = INVAL;
828befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    }
829befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return (ret == 0);
830befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
831befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
832befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline bool OvFD::valid() const
833befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed{
834befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return (mFD != INVAL);
835befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
836befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
837befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline int OvFD::getFD() const { return mFD; }
838befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
839befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline void OvFD::copy(int fd) {
840befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    mFD = fd;
841befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
842befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
843befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline void OvFD::dump() const
844befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed{
845befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    ALOGE("== Dump OvFD fd=%d path=%s start/end ==",
846befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            mFD, mPath);
847befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
848befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
849befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed//--------------- class OvFD stuff ends ---------------------
850befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
851befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed} // overlay
852befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
853befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
854befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#endif // OVERLAY_UTILS_H
855