129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* 2e33e6a894950f7d258d79bc48441575e2b0981dbRaj kamal* 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. 13d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed* * 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 30f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed#ifndef OVERlAY_ROTATOR_H 31f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed#define OVERlAY_ROTATOR_H 3229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 3329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include <stdlib.h> 3429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 3529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include "mdpWrapper.h" 3629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include "overlayUtils.h" 3729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include "overlayMem.h" 3829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 3929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmednamespace overlay { 40f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed 4129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* 42f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed Manages the case where new rotator memory needs to be 43f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed allocated, before previous is freed, due to resolution change etc. If we make 44f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed rotator memory to be always max size, irrespctive of source resolution then 45f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed we don't need this RotMem wrapper. The inner class is sufficient. 46f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed*/ 47f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmedstruct RotMem { 48f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed // Max rotator memory allocations 49f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed enum { MAX_ROT_MEM = 2}; 50f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed 51f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed //Manages the rotator buffer offsets. 52f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed struct Mem { 531e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah Mem(); 541e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah ~Mem(); 55f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed bool valid() { return m.valid(); } 56f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed bool close() { return m.close(); } 57f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed uint32_t size() const { return m.bufSz(); } 581e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah void setReleaseFd(const int& fence); 59f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed // Max rotator buffers 60f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed enum { ROT_NUM_BUFS = 2 }; 61f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed // rotator data info dst offset 62f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed uint32_t mRotOffset[ROT_NUM_BUFS]; 631e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah int mRelFence[ROT_NUM_BUFS]; 64f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed // current offset slot from mRotOffset 65f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed uint32_t mCurrOffset; 66f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed OvMem m; 67f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed }; 68f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed 69f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed RotMem() : _curr(0) {} 70f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed Mem& curr() { return m[_curr % MAX_ROT_MEM]; } 71f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed const Mem& curr() const { return m[_curr % MAX_ROT_MEM]; } 72f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed Mem& prev() { return m[(_curr+1) % MAX_ROT_MEM]; } 73f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed RotMem& operator++() { ++_curr; return *this; } 741e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah void setReleaseFd(const int& fence) { curr().setReleaseFd(fence); } 75f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed bool close(); 76f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed uint32_t _curr; 77f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed Mem m[MAX_ROT_MEM]; 78f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed}; 7929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 801e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shahclass Rotator 811e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah{ 821e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shahpublic: 831e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah enum { TYPE_MDP, TYPE_MDSS }; 841e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah virtual ~Rotator(); 851e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah virtual void setSource(const utils::Whf& wfh) = 0; 862e89cad843d9f442be47feb2d9347cffe3c4948eNaseer Ahmed virtual void setSource(const utils::Whf& awhf, const utils::Whf& owhf) = 0; 871e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah virtual void setFlags(const utils::eMdpFlags& flags) = 0; 881e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah virtual void setTransform(const utils::eTransform& rot) = 0; 891e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah virtual bool commit() = 0; 901e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah virtual void setDownscale(int ds) = 0; 911e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah virtual int getDstMemId() const = 0; 921e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah virtual uint32_t getDstOffset() const = 0; 931e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah virtual uint32_t getDstFormat() const = 0; 941e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah virtual uint32_t getSessId() const = 0; 951e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah virtual bool queueBuffer(int fd, uint32_t offset) = 0; 961e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah virtual void dump() const = 0; 971e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah virtual void getDump(char *buf, size_t len) const = 0; 981e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah void setReleaseFd(const int& fence) { mMem.setReleaseFd(fence); } 991e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah static Rotator *getRotator(); 1001e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah 1011e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shahprotected: 1021e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah /* Rotator memory manager */ 1031e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah RotMem mMem; 1041e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah explicit Rotator() {} 1051e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah static uint32_t calcOutputBufSize(const utils::Whf& destWhf); 1061e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah 1071e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shahprivate: 1081e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah /*Returns rotator h/w type */ 1091e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah static int getRotatorHwType(); 1101e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah friend class RotMgr; 1111e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah}; 1121e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah 11329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* 114f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed* MDP rot holds MDP's rotation related structures. 115f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed* 11629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* */ 117d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmedclass MdpRot : public Rotator { 11829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedpublic: 119d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed virtual ~MdpRot(); 120d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed virtual void setSource(const utils::Whf& wfh); 1212e89cad843d9f442be47feb2d9347cffe3c4948eNaseer Ahmed virtual void setSource(const utils::Whf& awhf, const utils::Whf& owhf); 122f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed virtual void setFlags(const utils::eMdpFlags& flags); 123d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan virtual void setTransform(const utils::eTransform& rot); 124d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed virtual bool commit(); 125d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan virtual void setDownscale(int ds); 126d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed virtual int getDstMemId() const; 127d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed virtual uint32_t getDstOffset() const; 128e33e6a894950f7d258d79bc48441575e2b0981dbRaj kamal virtual uint32_t getDstFormat() const; 129d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed virtual uint32_t getSessId() const; 130d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed virtual bool queueBuffer(int fd, uint32_t offset); 131d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed virtual void dump() const; 132f48c59032a351cda58b2057423b2646423acd7c7Saurabh Shah virtual void getDump(char *buf, size_t len) const; 13329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 13429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedprivate: 135d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed explicit MdpRot(); 13636963690317abceae79621f14ba41ff62b3ff489Saurabh Shah bool init(); 13736963690317abceae79621f14ba41ff62b3ff489Saurabh Shah bool close(); 13836963690317abceae79621f14ba41ff62b3ff489Saurabh Shah void setRotations(uint32_t r); 13936963690317abceae79621f14ba41ff62b3ff489Saurabh Shah bool enabled () const; 140f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed /* remap rot buffers */ 141f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed bool remap(uint32_t numbufs); 142f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed bool open_i(uint32_t numbufs, uint32_t bufsz); 143f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed /* Deferred transform calculations */ 144f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed void doTransform(); 145f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed /* reset underlying data, basically memset 0 */ 146f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed void reset(); 147c23b380f5c97906717e3f71e20133e88bb5d8e77Saurabh Shah /* return true if current rotator config is different 148c23b380f5c97906717e3f71e20133e88bb5d8e77Saurabh Shah * than last known config */ 149c23b380f5c97906717e3f71e20133e88bb5d8e77Saurabh Shah bool rotConfChanged() const; 150c23b380f5c97906717e3f71e20133e88bb5d8e77Saurabh Shah /* save mRotImgInfo to be last known good config*/ 151c23b380f5c97906717e3f71e20133e88bb5d8e77Saurabh Shah void save(); 1524e2cfc92692f8b9c03cb35702fa5ffeda0d29571Saurabh Shah /* Calculates the rotator's o/p buffer size post the transform calcs and 1534e2cfc92692f8b9c03cb35702fa5ffeda0d29571Saurabh Shah * knowing the o/p format depending on whether fastYuv is enabled or not */ 1544e2cfc92692f8b9c03cb35702fa5ffeda0d29571Saurabh Shah uint32_t calcOutputBufSize(); 155c23b380f5c97906717e3f71e20133e88bb5d8e77Saurabh Shah 156f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed /* rot info*/ 157f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed msm_rotator_img_info mRotImgInfo; 1582e89cad843d9f442be47feb2d9347cffe3c4948eNaseer Ahmed /* Original buffer dimensions*/ 1592e89cad843d9f442be47feb2d9347cffe3c4948eNaseer Ahmed utils::Whf mOrigWhf; 160c23b380f5c97906717e3f71e20133e88bb5d8e77Saurabh Shah /* Last saved rot info*/ 161c23b380f5c97906717e3f71e20133e88bb5d8e77Saurabh Shah msm_rotator_img_info mLSRotImgInfo; 162f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed /* rot data */ 163f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed msm_rotator_data_info mRotDataInfo; 164f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed /* Orientation */ 165f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed utils::eTransform mOrientation; 166f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed /* rotator fd */ 167f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed OvFD mFd; 168d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed 169d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed friend Rotator* Rotator::getRotator(); 17029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 17129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 172e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah/* 173e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah+* MDSS Rot holds MDSS's rotation related structures. 174e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah+* 175e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah+* */ 176d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmedclass MdssRot : public Rotator { 177e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shahpublic: 178d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed virtual ~MdssRot(); 1792e89cad843d9f442be47feb2d9347cffe3c4948eNaseer Ahmed virtual void setSource(const utils::Whf& whf); 1802e89cad843d9f442be47feb2d9347cffe3c4948eNaseer Ahmed virtual void setSource(const utils::Whf& awhf, const utils::Whf& owhf); 181e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah virtual void setFlags(const utils::eMdpFlags& flags); 182d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan virtual void setTransform(const utils::eTransform& rot); 183d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed virtual bool commit(); 184d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan virtual void setDownscale(int ds); 185d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed virtual int getDstMemId() const; 186d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed virtual uint32_t getDstOffset() const; 187e33e6a894950f7d258d79bc48441575e2b0981dbRaj kamal virtual uint32_t getDstFormat() const; 188d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed virtual uint32_t getSessId() const; 189d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed virtual bool queueBuffer(int fd, uint32_t offset); 190d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed virtual void dump() const; 191f48c59032a351cda58b2057423b2646423acd7c7Saurabh Shah virtual void getDump(char *buf, size_t len) const; 192e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah 193e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shahprivate: 194d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed explicit MdssRot(); 19536963690317abceae79621f14ba41ff62b3ff489Saurabh Shah bool init(); 19636963690317abceae79621f14ba41ff62b3ff489Saurabh Shah bool close(); 19736963690317abceae79621f14ba41ff62b3ff489Saurabh Shah void setRotations(uint32_t r); 19836963690317abceae79621f14ba41ff62b3ff489Saurabh Shah bool enabled () const; 199e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah /* remap rot buffers */ 200e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah bool remap(uint32_t numbufs); 201e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah bool open_i(uint32_t numbufs, uint32_t bufsz); 202e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah /* Deferred transform calculations */ 203e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah void doTransform(); 204e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah /* reset underlying data, basically memset 0 */ 205e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah void reset(); 2064e2cfc92692f8b9c03cb35702fa5ffeda0d29571Saurabh Shah /* Calculates the rotator's o/p buffer size post the transform calcs and 2074e2cfc92692f8b9c03cb35702fa5ffeda0d29571Saurabh Shah * knowing the o/p format depending on whether fastYuv is enabled or not */ 2084e2cfc92692f8b9c03cb35702fa5ffeda0d29571Saurabh Shah uint32_t calcOutputBufSize(); 209e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah 210e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah /* MdssRot info structure */ 211e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah mdp_overlay mRotInfo; 212e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah /* MdssRot data structure */ 213e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah msmfb_overlay_data mRotData; 214e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah /* Orientation */ 215e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah utils::eTransform mOrientation; 216e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah /* rotator fd */ 217e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah OvFD mFd; 218e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah /* Enable/Disable Mdss Rot*/ 219e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah bool mEnabled; 22029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 221d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed friend Rotator* Rotator::getRotator(); 222d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed}; 223e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah 22436963690317abceae79621f14ba41ff62b3ff489Saurabh Shah// Holder of rotator objects. Manages lifetimes 22536963690317abceae79621f14ba41ff62b3ff489Saurabh Shahclass RotMgr { 22636963690317abceae79621f14ba41ff62b3ff489Saurabh Shahpublic: 22736963690317abceae79621f14ba41ff62b3ff489Saurabh Shah //Maximum sessions based on VG pipes, since rotator is used only for videos. 22836963690317abceae79621f14ba41ff62b3ff489Saurabh Shah //Even though we can have 4 mixer stages, that much may be unnecessary. 22936963690317abceae79621f14ba41ff62b3ff489Saurabh Shah enum { MAX_ROT_SESS = 3 }; 23036963690317abceae79621f14ba41ff62b3ff489Saurabh Shah RotMgr(); 23136963690317abceae79621f14ba41ff62b3ff489Saurabh Shah ~RotMgr(); 23236963690317abceae79621f14ba41ff62b3ff489Saurabh Shah void configBegin(); 23336963690317abceae79621f14ba41ff62b3ff489Saurabh Shah void configDone(); 23436963690317abceae79621f14ba41ff62b3ff489Saurabh Shah overlay::Rotator *getNext(); 23536963690317abceae79621f14ba41ff62b3ff489Saurabh Shah void clear(); //Removes all instances 23636963690317abceae79621f14ba41ff62b3ff489Saurabh Shah /* Returns rot dump. 23736963690317abceae79621f14ba41ff62b3ff489Saurabh Shah * Expects a NULL terminated buffer of big enough size. 23836963690317abceae79621f14ba41ff62b3ff489Saurabh Shah */ 23936963690317abceae79621f14ba41ff62b3ff489Saurabh Shah void getDump(char *buf, size_t len); 2401e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah int getRotDevFd(); //Called on A-fam only 24136963690317abceae79621f14ba41ff62b3ff489Saurabh Shahprivate: 24236963690317abceae79621f14ba41ff62b3ff489Saurabh Shah overlay::Rotator *mRot[MAX_ROT_SESS]; 24336963690317abceae79621f14ba41ff62b3ff489Saurabh Shah int mUseCount; 2441e2af0f047ca851e6063729239bc82c6b4a78b42Saurabh Shah int mRotDevFd; //A-fam 24536963690317abceae79621f14ba41ff62b3ff489Saurabh Shah}; 24636963690317abceae79621f14ba41ff62b3ff489Saurabh Shah 24736963690317abceae79621f14ba41ff62b3ff489Saurabh Shah 248f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed} // overlay 24929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 250f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed#endif // OVERlAY_ROTATOR_H 251