129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* 2580dfd3c4aa61ffe48dc24dd4168ec8c2eb1cd43Sushil Chauhan* Copyright (c) 2011-2013, The Linux Foundation. All rights reserved. 329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* 429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* Redistribution and use in source and binary forms, with or without 529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* modification, are permitted provided that the following conditions are 629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* met: 729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* * Redistributions of source code must retain the above copyright 829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* notice, this list of conditions and the following disclaimer. 929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* * Redistributions in binary form must reproduce the above 1029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* copyright notice, this list of conditions and the following 1129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* disclaimer in the documentation and/or other materials provided 1229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* with the distribution. 13a43fb8fce6d9be5577de1e0f49c99bd4fe2f6d44Duy Truong* * Neither the name of The Linux Foundation nor the names of its 1429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* contributors may be used to endorse or promote products derived 1529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* from this software without specific prior written permission. 1629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* 1729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 1829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 1929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 2029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 2129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 2429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 2529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 2629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 2729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed*/ 2929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 3029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#ifndef OVERLAY_UTILS_H 3129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#define OVERLAY_UTILS_H 3229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 3329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include <cutils/log.h> // ALOGE, etc 3429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include <errno.h> 3529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include <fcntl.h> // open, O_RDWR, etc 3629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include <hardware/hardware.h> 3729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include <hardware/gralloc.h> // buffer_handle_t 38f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed#include <linux/msm_mdp.h> // flags 39f48c59032a351cda58b2057423b2646423acd7c7Saurabh Shah#include <linux/msm_rotator.h> 4029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include <stdio.h> 4129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include <stdlib.h> 4229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include <string.h> 4329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include <sys/stat.h> 4429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include <sys/types.h> 4529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include <utils/Log.h> 46f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed#include "gralloc_priv.h" //for interlace 47d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed 48580dfd3c4aa61ffe48dc24dd4168ec8c2eb1cd43Sushil Chauhan// Older platforms do not support Venus. 49580dfd3c4aa61ffe48dc24dd4168ec8c2eb1cd43Sushil Chauhan#ifndef VENUS_COLOR_FORMAT 50f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah#define MDP_Y_CBCR_H2V2_VENUS MDP_IMGTYPE_LIMIT 51d28fbcbdca035d5ca238aeba5628add89172c573Sushil Chauhan#endif 52d28fbcbdca035d5ca238aeba5628add89172c573Sushil Chauhan 5329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* 5429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* 5529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* Collection of utilities functions/structs/enums etc... 5629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* 5729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* */ 5829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 5929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed// comment that out if you want to remove asserts 6029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed// or put it as -D in Android.mk. your choice. 6129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#define OVERLAY_HAS_ASSERT 6229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 6329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#ifdef OVERLAY_HAS_ASSERT 6429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed# define OVASSERT(x, ...) if(!(x)) { ALOGE(__VA_ARGS__); abort(); } 6529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#else 6629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed# define OVASSERT(x, ...) ALOGE_IF(!(x), __VA_ARGS__) 6729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#endif // OVERLAY_HAS_ASSERT 6829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 6929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#define DEBUG_OVERLAY 0 7029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#define PROFILE_OVERLAY 0 7129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 726457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah#ifndef MDSS_MDP_RIGHT_MIXER 736457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah#define MDSS_MDP_RIGHT_MIXER 0x100 746457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah#endif 756457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah 766371fcefbcaf155e7402b3a7343d800470631d04Jeykumar Sankaran#ifndef MDP_OV_PIPE_FORCE_DMA 776371fcefbcaf155e7402b3a7343d800470631d04Jeykumar Sankaran#define MDP_OV_PIPE_FORCE_DMA 0x4000 786371fcefbcaf155e7402b3a7343d800470631d04Jeykumar Sankaran#endif 796371fcefbcaf155e7402b3a7343d800470631d04Jeykumar Sankaran 8044d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah#define FB_DEVICE_TEMPLATE "/dev/graphics/fb%u" 8144d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah 8229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmednamespace overlay { 8329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 8429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed// fwd 8529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedclass Overlay; 86e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shahclass OvFD; 87e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah 88e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah/* helper function to open by using fbnum */ 89e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shahbool open(OvFD& fd, uint32_t fbnum, const char* const dev, 90e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah int flags = O_RDWR); 9129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 9229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmednamespace utils { 9329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedstruct Whf; 9429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedstruct Dim; 9529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 9629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline uint32_t setBit(uint32_t x, uint32_t mask) { 9729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return (x | mask); 9829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 9929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 10029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline uint32_t clrBit(uint32_t x, uint32_t mask) { 10129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return (x & ~mask); 10229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 10329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 10429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* Utility class to help avoid copying instances by making the copy ctor 10529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* and assignment operator private 10629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* 10729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* Usage: 108f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed* class SomeClass : utils::NoCopy {...}; 10929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed*/ 11029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedclass NoCopy { 11129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedprotected: 11229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed NoCopy(){} 11329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ~NoCopy() {} 11429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedprivate: 11529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed NoCopy(const NoCopy&); 11629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed const NoCopy& operator=(const NoCopy&); 11729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 11829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 11929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 12029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* 3D related utils, defines etc... 12129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * The compound format passed to the overlay is 12229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * ABCCC where A is the input 3D format 12329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * B is the output 3D format 12429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * CCC is the color format e.g YCbCr420SP YCrCb420SP etc */ 12529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedenum { SHIFT_OUT_3D = 12, 12629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed SHIFT_TOT_3D = 16 }; 12729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedenum { INPUT_3D_MASK = 0xFFFF0000, 12829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed OUTPUT_3D_MASK = 0x0000FFFF }; 12929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedenum { BARRIER_LAND = 1, 13029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed BARRIER_PORT = 2 }; 13129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 13229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline uint32_t format3D(uint32_t x) { return x & 0xFF000; } 13329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline uint32_t format3DOutput(uint32_t x) { 13429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return (x & 0xF000) >> SHIFT_OUT_3D; } 13529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline uint32_t format3DInput(uint32_t x) { return x & 0xF0000; } 13629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 13729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedbool isHDMIConnected (); 13829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedbool is3DTV(); 13929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedbool isPanel3D(); 14029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedbool usePanel3D(); 14129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedbool send3DInfoPacket (uint32_t fmt); 14229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedbool enableBarrier (uint32_t orientation); 14329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmeduint32_t getS3DFormat(uint32_t fmt); 144379167d52f574c0ddf0ac47272aec7dfd15929a1Sushil Chauhanbool isMdssRotator(); 145d527210b2308a79ee6211b93356fda472438e211Sushil Chauhanvoid normalizeCrop(uint32_t& xy, uint32_t& wh); 146f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed 14729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedtemplate <int CHAN> 148f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmedbool getPositionS3D(const Whf& whf, Dim& out); 149f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed 15029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedtemplate <int CHAN> 151f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmedbool getCropS3D(const Dim& in, Dim& out, uint32_t fmt); 152f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed 15329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedtemplate <class Type> 154f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmedvoid swapWidthHeight(Type& width, Type& height); 15529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 15629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedstruct Dim { 15729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed Dim () : x(0), y(0), 15829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed w(0), h(0), 15929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed o(0) {} 16029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed Dim(uint32_t _x, uint32_t _y, uint32_t _w, uint32_t _h) : 16129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed x(_x), y(_y), 16229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed w(_w), h(_h) {} 16329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed Dim(uint32_t _x, uint32_t _y, uint32_t _w, uint32_t _h, uint32_t _o) : 16429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed x(_x), y(_y), 16529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed w(_w), h(_h), 16629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed o(_o) {} 16729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed bool check(uint32_t _w, uint32_t _h) const { 16829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return (x+w <= _w && y+h <= _h); 16929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 17029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 17129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 17229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed bool operator==(const Dim& d) const { 17329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return d.x == x && d.y == y && 17429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed d.w == w && d.h == h && 17529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed d.o == o; 17629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 17729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 17829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed bool operator!=(const Dim& d) const { 17929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return !operator==(d); 18029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 18129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 18229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed void dump() const; 18329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed uint32_t x; 18429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed uint32_t y; 18529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed uint32_t w; 18629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed uint32_t h; 18729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed uint32_t o; 18829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 18929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 19029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed// TODO have Whfz 19129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 19229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedstruct Whf { 19329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed Whf() : w(0), h(0), format(0), size(0) {} 19429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed Whf(uint32_t wi, uint32_t he, uint32_t f) : 19529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed w(wi), h(he), format(f), size(0) {} 19629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed Whf(uint32_t wi, uint32_t he, uint32_t f, uint32_t s) : 19729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed w(wi), h(he), format(f), size(s) {} 19829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // FIXME not comparing size at the moment 19929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed bool operator==(const Whf& whf) const { 20029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return whf.w == w && whf.h == h && 20129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed whf.format == format; 20229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 20329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed bool operator!=(const Whf& whf) const { 20429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return !operator==(whf); 20529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 20629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed void dump() const; 20729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed uint32_t w; 20829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed uint32_t h; 20929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed uint32_t format; 21029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed uint32_t size; 21129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 21229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 21329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedenum { MAX_PATH_LEN = 256 }; 21429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 21518bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmedenum { DEFAULT_PLANE_ALPHA = 0xFF }; 21618bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed 21729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/** 21829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * Rotator flags: not to be confused with orientation flags. 21936963690317abceae79621f14ba41ff62b3ff489Saurabh Shah * Usually, you want to open the rotator to make sure it is 22029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * ready for business. 22129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * */ 222d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan enum eRotFlags { 223d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan ROT_FLAGS_NONE = 0, 224d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan //Use rotator for 0 rotation. It is used anyway for others. 225d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan ROT_0_ENABLED = 1 << 0, 226d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan //Enable rotator downscale optimization for hardware bugs not handled in 227d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan //driver. If downscale optimizatation is required, 228d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan //then rotator will be used even if its 0 rotation case. 229d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan ROT_DOWNSCALE_ENABLED = 1 << 1, 23036963690317abceae79621f14ba41ff62b3ff489Saurabh Shah ROT_PREROTATED = 1 << 2, 231d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan}; 232d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan 233d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnanenum eRotDownscale { 234d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan ROT_DS_NONE = 0, 235d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan ROT_DS_HALF = 1, 236d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan ROT_DS_FOURTH = 2, 237d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan ROT_DS_EIGHTH = 3, 23829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 23929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 24029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* The values for is_fg flag for control alpha and transp 24129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * IS_FG_OFF means is_fg = 0 24229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * IS_FG_SET means is_fg = 1 24329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed */ 24429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedenum eIsFg { 24529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed IS_FG_OFF = 0, 24629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed IS_FG_SET = 1 24729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 24829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 24929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* 25029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * Various mdp flags like PIPE SHARE, DEINTERLACE etc... 25129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * kernel/common/linux/msm_mdp.h 25229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * INTERLACE_MASK: hardware/qcom/display/libgralloc/badger/fb_priv.h 25329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * */ 25429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedenum eMdpFlags { 25529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed OV_MDP_FLAGS_NONE = 0, 25629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed OV_MDP_PIPE_SHARE = MDP_OV_PIPE_SHARE, 2576371fcefbcaf155e7402b3a7343d800470631d04Jeykumar Sankaran OV_MDP_PIPE_FORCE_DMA = MDP_OV_PIPE_FORCE_DMA, 25829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed OV_MDP_DEINTERLACE = MDP_DEINTERLACE, 259f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed OV_MDP_SECURE_OVERLAY_SESSION = MDP_SECURE_OVERLAY_SESSION, 260f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed OV_MDP_SOURCE_ROTATED_90 = MDP_SOURCE_ROTATED_90, 261799a39759ba03b08cb96ffb4bb7a2359a2959d93Saurabh Shah OV_MDP_BACKEND_COMPOSITION = MDP_BACKEND_COMPOSITION, 26291a6a994e8d799ea2d4c4cbe6ff2e9be76105988Saurabh Shah OV_MDP_BLEND_FG_PREMULT = MDP_BLEND_FG_PREMULT, 263e87b66d295a83b90e22bf4b7c48051eaea01ef75Saurabh Shah OV_MDP_FLIP_H = MDP_FLIP_LR, 264e87b66d295a83b90e22bf4b7c48051eaea01ef75Saurabh Shah OV_MDP_FLIP_V = MDP_FLIP_UD, 2656457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah OV_MDSS_MDP_RIGHT_MIXER = MDSS_MDP_RIGHT_MIXER, 266e2b94da0a7de2a5cad9ecb90ed3eee5dca219863Saurabh Shah OV_MDP_PP_EN = MDP_OVERLAY_PP_CFG_EN, 2673932d9e448c02ac953cbc0f3ef7c0573400a5570Sushil Chauhan OV_MDSS_MDP_BWC_EN = MDP_BWC_EN, 26829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 26929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 27029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedenum eZorder { 27136963690317abceae79621f14ba41ff62b3ff489Saurabh Shah ZORDER_0 = 0, 27229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ZORDER_1, 27329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ZORDER_2, 274d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed ZORDER_3, 27529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed Z_SYSTEM_ALLOC = 0xFFFF 27629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 27729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 27829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedenum eMdpPipeType { 27944d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah OV_MDP_PIPE_RGB = 0, 280d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed OV_MDP_PIPE_VG, 2816371fcefbcaf155e7402b3a7343d800470631d04Jeykumar Sankaran OV_MDP_PIPE_DMA, 282d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed OV_MDP_PIPE_ANY, //Any 28329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 28429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 28544d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah// Identify destination pipes 28644d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah// TODO Names useless, replace with int and change all interfaces 28729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedenum eDest { 28844d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah OV_P0 = 0, 28944d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah OV_P1, 29044d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah OV_P2, 29144d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah OV_P3, 29244d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah OV_P4, 29344d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah OV_P5, 29444d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah OV_P6, 29544d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah OV_P7, 29644d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah OV_P8, 29744d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah OV_P9, 298d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed OV_INVALID, 29944d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah OV_MAX = OV_INVALID, 300d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed}; 301d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed 302d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed/* Used when a buffer is split over 2 pipes and sent to display */ 303d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmedenum { 304d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed OV_LEFT_SPLIT = 0, 305d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed OV_RIGHT_SPLIT, 30629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 30729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 30829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* values for copybit_set_parameter(OVERLAY_TRANSFORM) */ 30929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedenum eTransform { 31029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* No rot */ 311f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed OVERLAY_TRANSFORM_0 = 0x0, 312f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed /* flip source image horizontally 0x1 */ 313f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed OVERLAY_TRANSFORM_FLIP_H = HAL_TRANSFORM_FLIP_H, 314f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed /* flip source image vertically 0x2 */ 315f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed OVERLAY_TRANSFORM_FLIP_V = HAL_TRANSFORM_FLIP_V, 31629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* rotate source image 180 degrees 31729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * It is basically bit-or-ed H | V == 0x3 */ 318f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed OVERLAY_TRANSFORM_ROT_180 = HAL_TRANSFORM_ROT_180, 319f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed /* rotate source image 90 degrees 0x4 */ 320f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed OVERLAY_TRANSFORM_ROT_90 = HAL_TRANSFORM_ROT_90, 321f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed /* rotate source image 90 degrees and flip horizontally 0x5 */ 322f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed OVERLAY_TRANSFORM_ROT_90_FLIP_H = HAL_TRANSFORM_ROT_90 | 323f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed HAL_TRANSFORM_FLIP_H, 324f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed /* rotate source image 90 degrees and flip vertically 0x6 */ 325f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed OVERLAY_TRANSFORM_ROT_90_FLIP_V = HAL_TRANSFORM_ROT_90 | 326f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed HAL_TRANSFORM_FLIP_V, 32729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* rotate source image 270 degrees 32829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * Basically 180 | 90 == 0x7 */ 329f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed OVERLAY_TRANSFORM_ROT_270 = HAL_TRANSFORM_ROT_270, 33029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* rotate invalid like in Transform.h */ 331f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed OVERLAY_TRANSFORM_INV = 0x80 33229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 33329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 33418bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmedenum eBlending { 33518bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed OVERLAY_BLENDING_UNDEFINED = 0x0, 33618bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed /* No blending */ 33718bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed OVERLAY_BLENDING_OPAQUE, 33818bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed /* src.rgb + dst.rgb*(1-src_alpha) */ 33918bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed OVERLAY_BLENDING_PREMULT, 34018bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed /* src.rgb * src_alpha + dst.rgb (1 - src_alpha) */ 34118bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed OVERLAY_BLENDING_COVERAGE, 34218bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed}; 34318bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed 34429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed// Used to consolidate pipe params 34529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedstruct PipeArgs { 34629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PipeArgs() : mdpFlags(OV_MDP_FLAGS_NONE), 34729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed zorder(Z_SYSTEM_ALLOC), 34829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed isFg(IS_FG_OFF), 34918bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed rotFlags(ROT_FLAGS_NONE), 35018bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed planeAlpha(DEFAULT_PLANE_ALPHA), 35118bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed blending(OVERLAY_BLENDING_COVERAGE){ 35229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 35329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 354f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed PipeArgs(eMdpFlags f, Whf _whf, 35518bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed eZorder z, eIsFg fg, eRotFlags r, 35618bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed int pA, eBlending b) : 35729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed mdpFlags(f), 35829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed whf(_whf), 35929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed zorder(z), 36029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed isFg(fg), 36118bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed rotFlags(r), 36218bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed planeAlpha(pA), 36318bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed blending(b){ 36429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 36529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 366f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed eMdpFlags mdpFlags; // for mdp_overlay flags 36729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed Whf whf; 36829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed eZorder zorder; // stage number 36929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed eIsFg isFg; // control alpha & transp 37029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed eRotFlags rotFlags; 37118bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed int planeAlpha; 37218bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed eBlending blending; 37329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 37429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 37544d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah// Cannot use HW_OVERLAY_MAGNIFICATION_LIMIT, since at the time 37644d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah// of integration, HW_OVERLAY_MAGNIFICATION_LIMIT was a define 37744d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shahenum { HW_OV_MAGNIFICATION_LIMIT = 20, 37844d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah HW_OV_MINIFICATION_LIMIT = 8 37944d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah}; 38044d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah 38129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void setMdpFlags(eMdpFlags& f, eMdpFlags v) { 38229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed f = static_cast<eMdpFlags>(setBit(f, v)); 38329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 38429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 38529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void clearMdpFlags(eMdpFlags& f, eMdpFlags v) { 38629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed f = static_cast<eMdpFlags>(clrBit(f, v)); 38729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 38829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 38929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedenum { FB0, FB1, FB2 }; 39029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 39129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedstruct ScreenInfo { 39229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ScreenInfo() : mFBWidth(0), 39329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed mFBHeight(0), 39429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed mFBbpp(0), 39529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed mFBystride(0) {} 39629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed void dump(const char* const s) const; 39729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed uint32_t mFBWidth; 39829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed uint32_t mFBHeight; 39929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed uint32_t mFBbpp; 40029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed uint32_t mFBystride; 40129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 40229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 40329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedint getMdpFormat(int format); 4044e2cfc92692f8b9c03cb35702fa5ffeda0d29571Saurabh Shahint getHALFormat(int mdpFormat); 40536963690317abceae79621f14ba41ff62b3ff489Saurabh Shahint getDownscaleFactor(const int& src_w, const int& src_h, 40636963690317abceae79621f14ba41ff62b3ff489Saurabh Shah const int& dst_w, const int& dst_h); 4077d6f482d36c30eb0d1954c862b46457bf20658dfSaurabh Shahvoid getDecimationFactor(const int& src_w, const int& src_h, 4087d6f482d36c30eb0d1954c862b46457bf20658dfSaurabh Shah const int& dst_w, const int& dst_h, float& horDscale, 4097d6f482d36c30eb0d1954c862b46457bf20658dfSaurabh Shah float& verDscale); 4104e2cfc92692f8b9c03cb35702fa5ffeda0d29571Saurabh Shah 41129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* flip is upside down and such. V, H flip 41229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * rotation is 90, 180 etc 41329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * It returns MDP related enum/define that match rot+flip*/ 41429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedint getMdpOrient(eTransform rotation); 4159c876d9f8c446aaf01cf8dc3a2cd5cff48dc3585Saurabh Shahconst char* getFormatString(int format); 41629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 41729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedtemplate <class T> 418f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmedinline void memset0(T& t) { ::memset(&t, 0, sizeof(T)); } 41929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 42029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedtemplate <class T> inline void swap ( T& a, T& b ) 42129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed{ 42229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed T c(a); a=b; b=c; 42329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 42429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 42529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline int alignup(int value, int a) { 42629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed //if align = 0, return the value. Else, do alignment. 42729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return a ? ((((value - 1) / a) + 1) * a) : value; 42829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 42929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 430d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnaninline int aligndown(int value, int a) { 431d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan //if align = 0, return the value. Else, do alignment. 432d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan return a ? ((value) & ~(a-1)) : value; 433d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan} 434d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan 43529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed// FIXME that align should replace the upper one. 43629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline int align(int value, int a) { 43729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed //if align = 0, return the value. Else, do alignment. 43829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return a ? ((value + (a-1)) & ~(a-1)) : value; 43929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 44029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 44129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedenum eRotOutFmt { 44229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ROT_OUT_FMT_DEFAULT, 44329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ROT_OUT_FMT_Y_CRCB_H2V2 44429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 44529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 44629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedtemplate <int ROT_OUT_FMT> struct RotOutFmt; 44729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 44829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed// FIXME, taken from gralloc_priv.h. Need to 44929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed// put it back as soon as overlay takes place of the old one 45029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* possible formats for 3D content*/ 45129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedenum { 45229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed HAL_NO_3D = 0x0000, 45329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed HAL_3D_IN_SIDE_BY_SIDE_L_R = 0x10000, 45429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed HAL_3D_IN_TOP_BOTTOM = 0x20000, 45529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed HAL_3D_IN_INTERLEAVE = 0x40000, 45629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed HAL_3D_IN_SIDE_BY_SIDE_R_L = 0x80000, 45729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed HAL_3D_OUT_SIDE_BY_SIDE = 0x1000, 45829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed HAL_3D_OUT_TOP_BOTTOM = 0x2000, 45929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed HAL_3D_OUT_INTERLEAVE = 0x4000, 46029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed HAL_3D_OUT_MONOSCOPIC = 0x8000 46129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 46229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 46329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedenum { HAL_3D_OUT_SBS_MASK = 46429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed HAL_3D_OUT_SIDE_BY_SIDE >> overlay::utils::SHIFT_OUT_3D, 46529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed HAL_3D_OUT_TOP_BOT_MASK = 46629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed HAL_3D_OUT_TOP_BOTTOM >> overlay::utils::SHIFT_OUT_3D, 46729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed HAL_3D_OUT_INTERL_MASK = 46829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed HAL_3D_OUT_INTERLEAVE >> overlay::utils::SHIFT_OUT_3D, 46929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed HAL_3D_OUT_MONOS_MASK = 47029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed HAL_3D_OUT_MONOSCOPIC >> overlay::utils::SHIFT_OUT_3D 47129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 47229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 47329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 47429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline bool isYuv(uint32_t format) { 47529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed switch(format){ 47629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case MDP_Y_CBCR_H2V1: 47729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case MDP_Y_CBCR_H2V2: 47829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case MDP_Y_CRCB_H2V2: 479b121e140e51d0dfcd4885289d56fb54b4d0d8e6eSaurabh Shah case MDP_Y_CRCB_H1V1: 480b121e140e51d0dfcd4885289d56fb54b4d0d8e6eSaurabh Shah case MDP_Y_CRCB_H2V1: 48129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case MDP_Y_CRCB_H2V2_TILE: 48229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case MDP_Y_CBCR_H2V2_TILE: 483b121e140e51d0dfcd4885289d56fb54b4d0d8e6eSaurabh Shah case MDP_Y_CR_CB_H2V2: 484ae1044e0cbab8d26851782e85525ee9e0e6127e6Saurabh Shah case MDP_Y_CR_CB_GH2V2: 485d28fbcbdca035d5ca238aeba5628add89172c573Sushil Chauhan case MDP_Y_CBCR_H2V2_VENUS: 48629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return true; 48729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed default: 48829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return false; 48929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 49029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return false; 49129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 49229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 49329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline bool isRgb(uint32_t format) { 49429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed switch(format) { 49529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case MDP_RGBA_8888: 49629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case MDP_BGRA_8888: 49729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case MDP_RGBX_8888: 49829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case MDP_RGB_565: 49929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return true; 50029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed default: 50129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return false; 50229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 50329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return false; 50429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 50529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 5069c876d9f8c446aaf01cf8dc3a2cd5cff48dc3585Saurabh Shahinline const char* getFormatString(int format){ 507f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah #define STR(f) #f; 508f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah static const char* formats[MDP_IMGTYPE_LIMIT + 1] = {0}; 509f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah formats[MDP_RGB_565] = STR(MDP_RGB_565); 510f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah formats[MDP_XRGB_8888] = STR(MDP_XRGB_8888); 511f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah formats[MDP_Y_CBCR_H2V2] = STR(MDP_Y_CBCR_H2V2); 512f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah formats[MDP_Y_CBCR_H2V2_ADRENO] = STR(MDP_Y_CBCR_H2V2_ADRENO); 513f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah formats[MDP_ARGB_8888] = STR(MDP_ARGB_8888); 514f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah formats[MDP_RGB_888] = STR(MDP_RGB_888); 515f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah formats[MDP_Y_CRCB_H2V2] = STR(MDP_Y_CRCB_H2V2); 516f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah formats[MDP_YCRYCB_H2V1] = STR(MDP_YCRYCB_H2V1); 517f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah formats[MDP_CBYCRY_H2V1] = STR(MDP_CBYCRY_H2V1); 518f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah formats[MDP_Y_CRCB_H2V1] = STR(MDP_Y_CRCB_H2V1); 519f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah formats[MDP_Y_CBCR_H2V1] = STR(MDP_Y_CBCR_H2V1); 520f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah formats[MDP_Y_CRCB_H1V2] = STR(MDP_Y_CRCB_H1V2); 521f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah formats[MDP_Y_CBCR_H1V2] = STR(MDP_Y_CBCR_H1V2); 522f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah formats[MDP_RGBA_8888] = STR(MDP_RGBA_8888); 523f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah formats[MDP_BGRA_8888] = STR(MDP_BGRA_8888); 524f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah formats[MDP_RGBX_8888] = STR(MDP_RGBX_8888); 525f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah formats[MDP_Y_CRCB_H2V2_TILE] = STR(MDP_Y_CRCB_H2V2_TILE); 526f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah formats[MDP_Y_CBCR_H2V2_TILE] = STR(MDP_Y_CBCR_H2V2_TILE); 527f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah formats[MDP_Y_CR_CB_H2V2] = STR(MDP_Y_CR_CB_H2V2); 528f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah formats[MDP_Y_CR_CB_GH2V2] = STR(MDP_Y_CR_CB_GH2V2); 529f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah formats[MDP_Y_CB_CR_H2V2] = STR(MDP_Y_CB_CR_H2V2); 530f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah formats[MDP_Y_CRCB_H1V1] = STR(MDP_Y_CRCB_H1V1); 531f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah formats[MDP_Y_CBCR_H1V1] = STR(MDP_Y_CBCR_H1V1); 532f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah formats[MDP_YCRCB_H1V1] = STR(MDP_YCRCB_H1V1); 533f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah formats[MDP_YCBCR_H1V1] = STR(MDP_YCBCR_H1V1); 534f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah formats[MDP_BGR_565] = STR(MDP_BGR_565); 535f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah formats[MDP_BGR_888] = STR(MDP_BGR_888); 536f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah formats[MDP_Y_CBCR_H2V2_VENUS] = STR(MDP_Y_CBCR_H2V2_VENUS); 537f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah formats[MDP_BGRX_8888] = STR(MDP_BGRX_8888); 538f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah formats[MDP_IMGTYPE_LIMIT] = STR(MDP_IMGTYPE_LIMIT); 539f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah 540f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah if(format < 0 || format >= MDP_IMGTYPE_LIMIT) { 5419c876d9f8c446aaf01cf8dc3a2cd5cff48dc3585Saurabh Shah ALOGE("%s wrong fmt %d", __FUNCTION__, format); 5429c876d9f8c446aaf01cf8dc3a2cd5cff48dc3585Saurabh Shah return "Unsupported format"; 5439c876d9f8c446aaf01cf8dc3a2cd5cff48dc3585Saurabh Shah } 544f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah if(formats[format] == 0) { 545f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah ALOGE("%s: table missing format %d from header", __FUNCTION__, format); 546f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah return ""; 547f55c0dfba47d5754e307c3349a99bb0677801376Saurabh Shah } 54829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return formats[format]; 54929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 55029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 55129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void Whf::dump() const { 55229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ALOGE("== Dump WHF w=%d h=%d f=%d s=%d start/end ==", 55329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed w, h, format, size); 55429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 55529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 55629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void Dim::dump() const { 55729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ALOGE("== Dump Dim x=%d y=%d w=%d h=%d start/end ==", x, y, w, h); 55829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 55929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 56029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed// FB0 56129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedtemplate <int CHAN> 56229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline Dim getPositionS3DImpl(const Whf& whf) 56329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed{ 56429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed switch (whf.format & OUTPUT_3D_MASK) 56529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed { 56629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case HAL_3D_OUT_SBS_MASK: 56729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // x, y, w, h 56829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return Dim(0, 0, whf.w/2, whf.h); 56929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case HAL_3D_OUT_TOP_BOT_MASK: 57029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return Dim(0, 0, whf.w, whf.h/2); 57129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case HAL_3D_OUT_MONOS_MASK: 57229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return Dim(); 57329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case HAL_3D_OUT_INTERL_MASK: 57429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // FIXME error? 57529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ALOGE("%s HAL_3D_OUT_INTERLEAVE_MASK", __FUNCTION__); 57629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return Dim(); 57729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed default: 57829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ALOGE("%s Unsupported 3D output format %d", __FUNCTION__, 57929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed whf.format); 58029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 58129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return Dim(); 58229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 58329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 58429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedtemplate <> 585d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmedinline Dim getPositionS3DImpl<utils::OV_RIGHT_SPLIT>(const Whf& whf) 58629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed{ 58729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed switch (whf.format & OUTPUT_3D_MASK) 58829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed { 58929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case HAL_3D_OUT_SBS_MASK: 59029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return Dim(whf.w/2, 0, whf.w/2, whf.h); 59129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case HAL_3D_OUT_TOP_BOT_MASK: 59229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return Dim(0, whf.h/2, whf.w, whf.h/2); 59329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case HAL_3D_OUT_MONOS_MASK: 59429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return Dim(0, 0, whf.w, whf.h); 59529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case HAL_3D_OUT_INTERL_MASK: 59629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // FIXME error? 59729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ALOGE("%s HAL_3D_OUT_INTERLEAVE_MASK", __FUNCTION__); 59829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return Dim(); 59929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed default: 60029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ALOGE("%s Unsupported 3D output format %d", __FUNCTION__, 60129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed whf.format); 60229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 60329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return Dim(); 60429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 60529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 60629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedtemplate <int CHAN> 60729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline bool getPositionS3D(const Whf& whf, Dim& out) { 60829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed out = getPositionS3DImpl<CHAN>(whf); 60929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return (out != Dim()); 61029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 61129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 61229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedtemplate <int CHAN> 61329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline Dim getCropS3DImpl(const Dim& in, uint32_t fmt) { 61429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed switch (fmt & INPUT_3D_MASK) 61529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed { 61629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case HAL_3D_IN_SIDE_BY_SIDE_L_R: 61729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return Dim(0, 0, in.w/2, in.h); 61829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case HAL_3D_IN_SIDE_BY_SIDE_R_L: 61929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return Dim(in.w/2, 0, in.w/2, in.h); 62029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case HAL_3D_IN_TOP_BOTTOM: 62129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return Dim(0, 0, in.w, in.h/2); 62229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case HAL_3D_IN_INTERLEAVE: 62329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ALOGE("%s HAL_3D_IN_INTERLEAVE", __FUNCTION__); 62429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed break; 62529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed default: 62629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ALOGE("%s Unsupported 3D format %d", __FUNCTION__, fmt); 62729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed break; 62829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 62929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return Dim(); 63029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 63129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 63229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedtemplate <> 633d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmedinline Dim getCropS3DImpl<utils::OV_RIGHT_SPLIT>(const Dim& in, uint32_t fmt) { 63429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed switch (fmt & INPUT_3D_MASK) 63529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed { 63629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case HAL_3D_IN_SIDE_BY_SIDE_L_R: 63729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return Dim(in.w/2, 0, in.w/2, in.h); 63829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case HAL_3D_IN_SIDE_BY_SIDE_R_L: 63929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return Dim(0, 0, in.w/2, in.h); 64029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case HAL_3D_IN_TOP_BOTTOM: 64129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return Dim(0, in.h/2, in.w, in.h/2); 64229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case HAL_3D_IN_INTERLEAVE: 64329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ALOGE("%s HAL_3D_IN_INTERLEAVE", __FUNCTION__); 64429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed break; 64529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed default: 64629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ALOGE("%s Unsupported 3D format %d", __FUNCTION__, fmt); 64729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed break; 64829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 64929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return Dim(); 65029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 65129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 65229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedtemplate <int CHAN> 65329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline bool getCropS3D(const Dim& in, Dim& out, uint32_t fmt) 65429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed{ 65529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed out = getCropS3DImpl<CHAN>(in, fmt); 65629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return (out != Dim()); 65729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 65829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 65929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedtemplate <class Type> 66029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedvoid swapWidthHeight(Type& width, Type& height) { 66129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed Type tmp = width; 66229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed width = height; 66329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed height = tmp; 66429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 66529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 66629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void ScreenInfo::dump(const char* const s) const { 66729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ALOGE("== Dump %s ScreenInfo w=%d h=%d" 66829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed " bpp=%d stride=%d start/end ==", 66929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed s, mFBWidth, mFBHeight, mFBbpp, mFBystride); 67029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 67129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 672e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shahinline bool openDev(OvFD& fd, int fbnum, 673e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah const char* const devpath, int flags) { 674e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah return overlay::open(fd, fbnum, devpath, flags); 675e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah} 676e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah 677b121e140e51d0dfcd4885289d56fb54b4d0d8e6eSaurabh Shahtemplate <class T> 678b121e140e51d0dfcd4885289d56fb54b4d0d8e6eSaurabh Shahinline void even_ceil(T& value) { 679b121e140e51d0dfcd4885289d56fb54b4d0d8e6eSaurabh Shah if(value & 1) 680b121e140e51d0dfcd4885289d56fb54b4d0d8e6eSaurabh Shah value++; 681b121e140e51d0dfcd4885289d56fb54b4d0d8e6eSaurabh Shah} 682b121e140e51d0dfcd4885289d56fb54b4d0d8e6eSaurabh Shah 683b121e140e51d0dfcd4885289d56fb54b4d0d8e6eSaurabh Shahtemplate <class T> 684b121e140e51d0dfcd4885289d56fb54b4d0d8e6eSaurabh Shahinline void even_floor(T& value) { 685b121e140e51d0dfcd4885289d56fb54b4d0d8e6eSaurabh Shah if(value & 1) 686b121e140e51d0dfcd4885289d56fb54b4d0d8e6eSaurabh Shah value--; 687b121e140e51d0dfcd4885289d56fb54b4d0d8e6eSaurabh Shah} 688b121e140e51d0dfcd4885289d56fb54b4d0d8e6eSaurabh Shah 6890dab964bf13bdd788234fc4eddd8690e6ba1ebebSaurabh Shahvoid preRotateSource(const eTransform& tr, Whf& whf, Dim& srcCrop); 690f48c59032a351cda58b2057423b2646423acd7c7Saurabh Shahvoid getDump(char *buf, size_t len, const char *prefix, const mdp_overlay& ov); 691f48c59032a351cda58b2057423b2646423acd7c7Saurabh Shahvoid getDump(char *buf, size_t len, const char *prefix, const msmfb_img& ov); 692f48c59032a351cda58b2057423b2646423acd7c7Saurabh Shahvoid getDump(char *buf, size_t len, const char *prefix, const mdp_rect& ov); 693f48c59032a351cda58b2057423b2646423acd7c7Saurabh Shahvoid getDump(char *buf, size_t len, const char *prefix, 694f48c59032a351cda58b2057423b2646423acd7c7Saurabh Shah const msmfb_overlay_data& ov); 695f48c59032a351cda58b2057423b2646423acd7c7Saurabh Shahvoid getDump(char *buf, size_t len, const char *prefix, const msmfb_data& ov); 696f48c59032a351cda58b2057423b2646423acd7c7Saurabh Shahvoid getDump(char *buf, size_t len, const char *prefix, 697f48c59032a351cda58b2057423b2646423acd7c7Saurabh Shah const msm_rotator_img_info& ov); 698f48c59032a351cda58b2057423b2646423acd7c7Saurabh Shahvoid getDump(char *buf, size_t len, const char *prefix, 699f48c59032a351cda58b2057423b2646423acd7c7Saurabh Shah const msm_rotator_data_info& ov); 700f48c59032a351cda58b2057423b2646423acd7c7Saurabh Shah 70129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} // namespace utils ends 70229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 70329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed//--------------------Class Res stuff (namespace overlay only) ----------- 70429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 70529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedclass Res { 70629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedpublic: 70729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // /dev/graphics/fb%u 708f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed static const char* const fbPath; 70929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // /dev/msm_rotator 71029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed static const char* const rotPath; 71129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // /sys/class/graphics/fb1/format_3d 71229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed static const char* const format3DFile; 71329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // /sys/class/graphics/fb1/3d_present 71429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed static const char* const edid3dInfoFile; 71529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // /sys/devices/platform/mipi_novatek.0/enable_3d_barrier 71629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed static const char* const barrierFile; 71729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 71829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 71929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 72029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed//--------------------Class OvFD stuff (namespace overlay only) ----------- 72129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 72229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* 72329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* Holds one FD 72429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* Dtor will NOT close the underlying FD. 72529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* That enables us to copy that object around 72629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* */ 72729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedclass OvFD { 72829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedpublic: 72929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* Ctor */ 73029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed explicit OvFD(); 73129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 73229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* dtor will NOT close the underlying FD */ 73329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ~OvFD(); 73429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 73529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* Open fd using the path given by dev. 73629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * return false in failure */ 73729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed bool open(const char* const dev, 73829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int flags = O_RDWR); 73929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 74029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* populate path */ 74129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed void setPath(const char* const dev); 74229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 74329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* Close fd if we have a valid fd. */ 74429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed bool close(); 74529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 74629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* returns underlying fd.*/ 74729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int getFD() const; 74829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 74929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* returns true if fd is valid */ 75029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed bool valid() const; 75129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 75229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* like operator= */ 75329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed void copy(int fd); 75429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 75529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* dump the state of the instance */ 75629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed void dump() const; 75729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedprivate: 75829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* helper enum for determine valid/invalid fd */ 75929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed enum { INVAL = -1 }; 76029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 76129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* actual os fd */ 76229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int mFD; 76329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 76429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* path, for debugging */ 76529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed char mPath[utils::MAX_PATH_LEN]; 76629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 76729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 76829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed//-------------------Inlines-------------------------- 76929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 77029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline bool open(OvFD& fd, uint32_t fbnum, const char* const dev, int flags) 77129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed{ 77229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed char dev_name[64] = {0}; 77329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed snprintf(dev_name, sizeof(dev_name), dev, fbnum); 77429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return fd.open(dev_name, flags); 77529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 77629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 77729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline OvFD::OvFD() : mFD (INVAL) { 77829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed mPath[0] = 0; 77929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 78029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 781f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmedinline OvFD::~OvFD() { 782f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed //no op since copy() can be used to share fd, in 3d cases. 783f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed} 78429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 78529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline bool OvFD::open(const char* const dev, int flags) 78629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed{ 78729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed mFD = ::open(dev, flags, 0); 78829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed if (mFD < 0) { 78929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // FIXME errno, strerror in bionic? 79029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ALOGE("Cant open device %s err=%d", dev, errno); 79129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return false; 79229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 79329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed setPath(dev); 79429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return true; 79529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 79629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 79729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void OvFD::setPath(const char* const dev) 79829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed{ 79929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ::strncpy(mPath, dev, utils::MAX_PATH_LEN); 80029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 80129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 80229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline bool OvFD::close() 80329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed{ 80429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int ret = 0; 80529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed if(valid()) { 80629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ret = ::close(mFD); 80729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed mFD = INVAL; 80829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 80929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return (ret == 0); 81029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 81129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 81229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline bool OvFD::valid() const 81329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed{ 81429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return (mFD != INVAL); 81529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 81629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 81729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline int OvFD::getFD() const { return mFD; } 81829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 81929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void OvFD::copy(int fd) { 82029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed mFD = fd; 82129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 82229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 82329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void OvFD::dump() const 82429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed{ 82529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ALOGE("== Dump OvFD fd=%d path=%s start/end ==", 82629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed mFD, mPath); 82729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 82829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 82929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed//--------------- class OvFD stuff ends --------------------- 83029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 83129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} // overlay 83229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 83329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 83429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#endif // OVERLAY_UTILS_H 835