129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* 229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* Copyright (C) 2008 The Android Open Source Project 3e33e6a894950f7d258d79bc48441575e2b0981dbRaj kamal* Copyright (c) 2010-2013, The Linux Foundation. All rights reserved. 429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* 529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* Licensed under the Apache License, Version 2.0 (the "License"); 629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* you may not use this file except in compliance with the License. 729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* You may obtain a copy of the License at 829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* 929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* http://www.apache.org/licenses/LICENSE-2.0 1029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* 1129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* Unless required by applicable law or agreed to in writing, software 1229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* distributed under the License is distributed on an "AS IS" BASIS, 1329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* See the License for the specific language governing permissions and 1529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* limitations under the License. 1629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed*/ 1729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 1829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#ifndef OVERLAY_MDP_H 1929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#define OVERLAY_MDP_H 2029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 2129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include <linux/msm_mdp.h> 2229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 2329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include "overlayUtils.h" 2429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include "mdpWrapper.h" 25e2b94da0a7de2a5cad9ecb90ed3eee5dca219863Saurabh Shah#include "qdMetaData.h" 26e2b94da0a7de2a5cad9ecb90ed3eee5dca219863Saurabh Shah#ifdef USES_POST_PROCESSING 27e2b94da0a7de2a5cad9ecb90ed3eee5dca219863Saurabh Shah#include "lib-postproc.h" 28e2b94da0a7de2a5cad9ecb90ed3eee5dca219863Saurabh Shah#endif 2929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 3029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmednamespace overlay{ 3129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 3229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* 3329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* Mdp Ctrl holds corresponding fd and MDP related struct. 3429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* It is simple wrapper to MDP services 3529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* */ 3629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedclass MdpCtrl { 3729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedpublic: 3829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* ctor reset */ 3929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed explicit MdpCtrl(); 4029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* dtor close */ 4129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ~MdpCtrl(); 42f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed /* init underlying device using fbnum */ 43f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed bool init(uint32_t fbnum); 4429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* unset overlay, reset and close fd */ 4529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed bool close(); 46f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed /* reset and set ov id to -1 / MSMFB_NEW_REQUEST */ 4729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed void reset(); 4836963690317abceae79621f14ba41ff62b3ff489Saurabh Shah /* calls overlay set 4936963690317abceae79621f14ba41ff62b3ff489Saurabh Shah * Set would always consult last good known ov instance. 5036963690317abceae79621f14ba41ff62b3ff489Saurabh Shah * Only if it is different, set would actually exectue ioctl. 5136963690317abceae79621f14ba41ff62b3ff489Saurabh Shah * On a sucess ioctl. last good known ov instance is updated */ 5236963690317abceae79621f14ba41ff62b3ff489Saurabh Shah bool set(); 5336963690317abceae79621f14ba41ff62b3ff489Saurabh Shah /* Sets the source total width, height, format */ 5436963690317abceae79621f14ba41ff62b3ff489Saurabh Shah void setSource(const utils::PipeArgs& pargs); 5536963690317abceae79621f14ba41ff62b3ff489Saurabh Shah /* 5636963690317abceae79621f14ba41ff62b3ff489Saurabh Shah * Sets ROI, the unpadded region, for source buffer. 5736963690317abceae79621f14ba41ff62b3ff489Saurabh Shah * Dim - ROI dimensions. 5836963690317abceae79621f14ba41ff62b3ff489Saurabh Shah */ 5936963690317abceae79621f14ba41ff62b3ff489Saurabh Shah void setCrop(const utils::Dim& d); 6036963690317abceae79621f14ba41ff62b3ff489Saurabh Shah void setTransform(const utils::eTransform& orient); 6136963690317abceae79621f14ba41ff62b3ff489Saurabh Shah /* given a dim and w/h, set overlay dim */ 6236963690317abceae79621f14ba41ff62b3ff489Saurabh Shah void setPosition(const utils::Dim& dim); 6336963690317abceae79621f14ba41ff62b3ff489Saurabh Shah /* using user_data, sets/unsets roationvalue in mdp flags */ 6436963690317abceae79621f14ba41ff62b3ff489Saurabh Shah void setRotationFlags(); 6536963690317abceae79621f14ba41ff62b3ff489Saurabh Shah /* Performs downscale calculations */ 6636963690317abceae79621f14ba41ff62b3ff489Saurabh Shah void setDownscale(int dscale_factor); 6736963690317abceae79621f14ba41ff62b3ff489Saurabh Shah /* Update the src format with rotator's dest*/ 6836963690317abceae79621f14ba41ff62b3ff489Saurabh Shah void updateSrcFormat(const uint32_t& rotDstFormat); 6936963690317abceae79621f14ba41ff62b3ff489Saurabh Shah /* dump state of the object */ 7036963690317abceae79621f14ba41ff62b3ff489Saurabh Shah void dump() const; 7136963690317abceae79621f14ba41ff62b3ff489Saurabh Shah /* Return the dump in the specified buffer */ 7236963690317abceae79621f14ba41ff62b3ff489Saurabh Shah void getDump(char *buf, size_t len); 7329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 7429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* returns session id */ 75f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed int getPipeId() const; 7629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* returns the fd associated to ctrl*/ 7729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int getFd() const; 7836963690317abceae79621f14ba41ff62b3ff489Saurabh Shah /* returns a copy ro dst rect dim */ 7936963690317abceae79621f14ba41ff62b3ff489Saurabh Shah utils::Dim getDstRectDim() const; 8036963690317abceae79621f14ba41ff62b3ff489Saurabh Shah /* returns a copy to src rect dim */ 8136963690317abceae79621f14ba41ff62b3ff489Saurabh Shah utils::Dim getSrcRectDim() const; 82e2b94da0a7de2a5cad9ecb90ed3eee5dca219863Saurabh Shah /* setVisualParam */ 83e2b94da0a7de2a5cad9ecb90ed3eee5dca219863Saurabh Shah bool setVisualParams(const MetaData_t& data); 84817dac3acfc9887b58a3aff61805f4c31f8c7939Saurabh Shah void forceSet(); 8529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 8636963690317abceae79621f14ba41ff62b3ff489Saurabh Shahprivate: 8736963690317abceae79621f14ba41ff62b3ff489Saurabh Shah /* Perform transformation calculations */ 8836963690317abceae79621f14ba41ff62b3ff489Saurabh Shah void doTransform(); 8936963690317abceae79621f14ba41ff62b3ff489Saurabh Shah void doDownscale(); 9036963690317abceae79621f14ba41ff62b3ff489Saurabh Shah /* get orient / user_data[0] */ 9136963690317abceae79621f14ba41ff62b3ff489Saurabh Shah int getOrient() const; 9229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* overlay get */ 9329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed bool get(); 94f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed /* returns flags from mdp structure */ 9529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int getFlags() const; 9629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* set flags to mdp structure */ 9729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed void setFlags(int f); 9829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* set z order */ 9929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed void setZ(utils::eZorder z); 10029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* set isFg flag */ 10129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed void setIsFg(utils::eIsFg isFg); 10218bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed /* return a copy of src whf*/ 10329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed utils::Whf getSrcWhf() const; 10418bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed /* set plane alpha */ 10518bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed void setPlaneAlpha(int planeAlpha); 10618bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed /* set blending method */ 10718bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed void setBlending(overlay::utils::eBlending blending); 10818bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed 10929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* set src whf */ 11029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed void setSrcWhf(const utils::Whf& whf); 11129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* set src/dst rect dim */ 11229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed void setSrcRectDim(const utils::Dim d); 11329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed void setDstRectDim(const utils::Dim d); 11429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* returns user_data[0]*/ 11529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int getUserData() const; 11629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* sets user_data[0] */ 11729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed void setUserData(int v); 11829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* return true if current overlay is different 119f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed * than last known good overlay */ 12029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed bool ovChanged() const; 12129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* save mOVInfo to be last known good ov*/ 12229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed void save(); 12329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* restore last known good ov to be the current */ 12429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed void restore(); 12529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 126f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed utils::eTransform mOrientation; //Holds requested orientation 12729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* last good known ov info */ 12829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed mdp_overlay mLkgo; 12929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* Actual overlay mdp structure */ 13029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed mdp_overlay mOVInfo; 13129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* FD for the mdp fbnum */ 13229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed OvFD mFd; 13336963690317abceae79621f14ba41ff62b3ff489Saurabh Shah int mDownscale; 134817dac3acfc9887b58a3aff61805f4c31f8c7939Saurabh Shah bool mForceSet; 135817dac3acfc9887b58a3aff61805f4c31f8c7939Saurabh Shah 136e2b94da0a7de2a5cad9ecb90ed3eee5dca219863Saurabh Shah#ifdef USES_POST_PROCESSING 137e2b94da0a7de2a5cad9ecb90ed3eee5dca219863Saurabh Shah /* PP Compute Params */ 138e2b94da0a7de2a5cad9ecb90ed3eee5dca219863Saurabh Shah struct compute_params mParams; 139e2b94da0a7de2a5cad9ecb90ed3eee5dca219863Saurabh Shah /* indicate if PP params have been changed */ 140e2b94da0a7de2a5cad9ecb90ed3eee5dca219863Saurabh Shah bool mPPChanged; 141e2b94da0a7de2a5cad9ecb90ed3eee5dca219863Saurabh Shah#endif 14229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 14329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 14429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 14529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* MDP 3D related ctrl */ 14629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedclass MdpCtrl3D { 14729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedpublic: 14829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* ctor reset data */ 14929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed MdpCtrl3D(); 15029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* calls MSMFB_OVERLAY_3D */ 15129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed bool close(); 15229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* set w/h. format is ignored*/ 15329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed void setWh(const utils::Whf& whf); 15429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* set is_3d calls MSMFB_OVERLAY_3D */ 15529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed bool useVirtualFB(); 15629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* set fd to be used in ioctl */ 15729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed void setFd(int fd); 15829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* dump */ 15929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed void dump() const; 16029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedprivate: 16129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* reset */ 16229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed void reset(); 16329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* actual MSM 3D info */ 16429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed msmfb_overlay_3d m3DOVInfo; 16529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* FD for the mdp 3D */ 16629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed OvFD mFd; 16729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 16829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 16929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* MDP data */ 17029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedclass MdpData { 17129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedpublic: 17229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* ctor reset data */ 17329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed explicit MdpData(); 17429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* dtor close*/ 17529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ~MdpData(); 176f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed /* init FD */ 177f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed bool init(uint32_t fbnum); 17829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* memset0 the underlying mdp object */ 17929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed void reset(); 18029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* close fd, and reset */ 18129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed bool close(); 18229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* set id of mdp data */ 183f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed void setPipeId(int id); 18429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* return ses id of data */ 185f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed int getPipeId() const; 18629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* get underlying fd*/ 18729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int getFd() const; 18829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* get memory_id */ 189f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed int getSrcMemoryId() const; 19029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* calls wrapper play */ 191f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed bool play(int fd, uint32_t offset); 19229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* dump state of the object */ 19329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed void dump() const; 194f48c59032a351cda58b2057423b2646423acd7c7Saurabh Shah /* Return the dump in the specified buffer */ 195f48c59032a351cda58b2057423b2646423acd7c7Saurabh Shah void getDump(char *buf, size_t len); 196f48c59032a351cda58b2057423b2646423acd7c7Saurabh Shah 19729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedprivate: 19829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 19929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* actual overlay mdp data */ 20029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed msmfb_overlay_data mOvData; 20129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* fd to mdp fbnum */ 20229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed OvFD mFd; 20329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 20429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 20529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed//--------------Inlines--------------------------------- 20629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 20729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed///// MdpCtrl ////// 20829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 209f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmedinline MdpCtrl::MdpCtrl() { 21029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed reset(); 21129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 21229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 21329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline MdpCtrl::~MdpCtrl() { 21429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed close(); 21529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 21629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 21729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline int MdpCtrl::getOrient() const { 21829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return getUserData(); 21929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 22029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 221f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmedinline int MdpCtrl::getPipeId() const { 22229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return mOVInfo.id; 22329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 22429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 22529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline int MdpCtrl::getFd() const { 22629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return mFd.getFD(); 22729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 22829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 22929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline int MdpCtrl::getFlags() const { 23029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return mOVInfo.flags; 23129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 23229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 23329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpCtrl::setFlags(int f) { 23429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed mOVInfo.flags = f; 23529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 23629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 23729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpCtrl::setZ(overlay::utils::eZorder z) { 23829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed mOVInfo.z_order = z; 23929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 24029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 24129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpCtrl::setIsFg(overlay::utils::eIsFg isFg) { 24229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed mOVInfo.is_fg = isFg; 24329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 24429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 24536963690317abceae79621f14ba41ff62b3ff489Saurabh Shahinline void MdpCtrl::setDownscale(int dscale) { 24636963690317abceae79621f14ba41ff62b3ff489Saurabh Shah mDownscale = dscale; 24736963690317abceae79621f14ba41ff62b3ff489Saurabh Shah} 24836963690317abceae79621f14ba41ff62b3ff489Saurabh Shah 24918bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmedinline void MdpCtrl::setPlaneAlpha(int planeAlpha) { 25018bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed mOVInfo.alpha = planeAlpha; 25118bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed} 25218bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed 25318bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmedinline void MdpCtrl::setBlending(overlay::utils::eBlending blending) { 25418bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed switch((int) blending) { 25518bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed case utils::OVERLAY_BLENDING_OPAQUE: 25618bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed mOVInfo.blend_op = BLEND_OP_OPAQUE; 25718bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed break; 25818bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed case utils::OVERLAY_BLENDING_PREMULT: 25918bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed mOVInfo.blend_op = BLEND_OP_PREMULTIPLIED; 26018bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed break; 26118bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed case utils::OVERLAY_BLENDING_COVERAGE: 26218bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed default: 26318bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed mOVInfo.blend_op = BLEND_OP_COVERAGE; 26418bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed } 26518bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed} 26618bdb52a00d4762d423b060e3142fd958664303eNaseer Ahmed 26729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline bool MdpCtrl::ovChanged() const { 268e2b94da0a7de2a5cad9ecb90ed3eee5dca219863Saurabh Shah#ifdef USES_POST_PROCESSING 269e2b94da0a7de2a5cad9ecb90ed3eee5dca219863Saurabh Shah // Some pp params are stored as pointer address, 270e2b94da0a7de2a5cad9ecb90ed3eee5dca219863Saurabh Shah // so can't compare their content directly. 271e2b94da0a7de2a5cad9ecb90ed3eee5dca219863Saurabh Shah if (mPPChanged) { 272e2b94da0a7de2a5cad9ecb90ed3eee5dca219863Saurabh Shah return true; 273e2b94da0a7de2a5cad9ecb90ed3eee5dca219863Saurabh Shah } 274e2b94da0a7de2a5cad9ecb90ed3eee5dca219863Saurabh Shah#endif 27529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // 0 means same 27629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed if(0 == ::memcmp(&mOVInfo, &mLkgo, sizeof (mdp_overlay))) { 27729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return false; 27829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 27929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return true; 28029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 28129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 28229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpCtrl::save() { 283f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed if(static_cast<ssize_t>(mOVInfo.id) == MSMFB_NEW_REQUEST) { 28429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ALOGE("MdpCtrl current ov has id -1, will not save"); 28529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return; 28629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 28729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed mLkgo = mOVInfo; 28829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 28929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 29029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpCtrl::restore() { 291f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed if(static_cast<ssize_t>(mLkgo.id) == MSMFB_NEW_REQUEST) { 29229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ALOGE("MdpCtrl Lkgo ov has id -1, will not restore"); 29329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return; 29429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 29529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed mOVInfo = mLkgo; 29629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 29729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 29829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline overlay::utils::Whf MdpCtrl::getSrcWhf() const { 299f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed return utils::Whf( mOVInfo.src.width, 300f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed mOVInfo.src.height, 301f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed mOVInfo.src.format); 30229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 30329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 30429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpCtrl::setSrcWhf(const overlay::utils::Whf& whf) { 30529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed mOVInfo.src.width = whf.w; 30629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed mOVInfo.src.height = whf.h; 30729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed mOVInfo.src.format = whf.format; 30829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 30929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 31029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline overlay::utils::Dim MdpCtrl::getSrcRectDim() const { 311f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed return utils::Dim( mOVInfo.src_rect.x, 312f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed mOVInfo.src_rect.y, 313f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed mOVInfo.src_rect.w, 314f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed mOVInfo.src_rect.h); 31529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 31629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 31729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpCtrl::setSrcRectDim(const overlay::utils::Dim d) { 31829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed mOVInfo.src_rect.x = d.x; 31929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed mOVInfo.src_rect.y = d.y; 32029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed mOVInfo.src_rect.w = d.w; 32129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed mOVInfo.src_rect.h = d.h; 32229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 32329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 32429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline overlay::utils::Dim MdpCtrl::getDstRectDim() const { 325f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed return utils::Dim( mOVInfo.dst_rect.x, 326f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed mOVInfo.dst_rect.y, 327f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed mOVInfo.dst_rect.w, 328f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed mOVInfo.dst_rect.h); 32929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 33029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 33129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpCtrl::setDstRectDim(const overlay::utils::Dim d) { 33229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed mOVInfo.dst_rect.x = d.x; 33329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed mOVInfo.dst_rect.y = d.y; 33429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed mOVInfo.dst_rect.w = d.w; 33529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed mOVInfo.dst_rect.h = d.h; 33629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 33729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 33829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline int MdpCtrl::getUserData() const { return mOVInfo.user_data[0]; } 33929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 34029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpCtrl::setUserData(int v) { mOVInfo.user_data[0] = v; } 34129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 34229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpCtrl::setRotationFlags() { 34329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed const int u = getUserData(); 3440dab964bf13bdd788234fc4eddd8690e6ba1ebebSaurabh Shah if (u & MDP_ROT_90) 34529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed mOVInfo.flags |= MDP_SOURCE_ROTATED_90; 34629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 34729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 348817dac3acfc9887b58a3aff61805f4c31f8c7939Saurabh Shahinline void MdpCtrl::forceSet() { 349817dac3acfc9887b58a3aff61805f4c31f8c7939Saurabh Shah mForceSet = true; 350817dac3acfc9887b58a3aff61805f4c31f8c7939Saurabh Shah} 351817dac3acfc9887b58a3aff61805f4c31f8c7939Saurabh Shah 35229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/////// MdpCtrl3D ////// 35329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 35429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline MdpCtrl3D::MdpCtrl3D() { reset(); } 35529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline bool MdpCtrl3D::close() { 35629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed if (m3DOVInfo.is_3d) { 35729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed m3DOVInfo.is_3d = 0; 35829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed if(!mdp_wrapper::set3D(mFd.getFD(), m3DOVInfo)) { 35929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ALOGE("MdpCtrl3D close failed set3D with 0"); 36029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return false; 36129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 36229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 36329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed reset(); 36429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return true; 36529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 36629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpCtrl3D::reset() { 36729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed utils::memset0(m3DOVInfo); 36829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 36929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 37029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpCtrl3D::setFd(int fd) { 37129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed mFd.copy(fd); 37229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed OVASSERT(mFd.valid(), "MdpCtrl3D setFd, FD should be valid"); 37329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 37429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 37529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpCtrl3D::setWh(const utils::Whf& whf) { 37629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // ignore fmt. Needed for useVirtualFB callflow 37729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed m3DOVInfo.width = whf.w; 37829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed m3DOVInfo.height = whf.h; 37929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 38029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 38129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline bool MdpCtrl3D::useVirtualFB() { 38229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed if(!m3DOVInfo.is_3d) { 38329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed m3DOVInfo.is_3d = 1; 38429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed if(!mdp_wrapper::set3D(mFd.getFD(), m3DOVInfo)) { 38529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ALOGE("MdpCtrl3D close failed set3D with 0"); 38629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return false; 38729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 38829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 38929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return true; 39029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 39129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 39229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/////// MdpData ////// 39329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 39429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline MdpData::MdpData() { reset(); } 39529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 39629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline MdpData::~MdpData() { close(); } 39729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 398f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmedinline bool MdpData::init(uint32_t fbnum) { 399f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed // FD init 400f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed if(!utils::openDev(mFd, fbnum, Res::fbPath, O_RDWR)){ 401f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed ALOGE("Ctrl failed to init fbnum=%d", fbnum); 40229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return false; 40329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 40429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return true; 40529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 40629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 40729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpData::reset() { 40829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed overlay::utils::memset0(mOvData); 40929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed mOvData.data.memory_id = -1; 41029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 41129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 41229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline bool MdpData::close() { 41329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed reset(); 4148e1ae95d9dd49199bba1d7343ac7ffb842ddd10bSaurabh Shah return mFd.close(); 41529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 41629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 417f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmedinline int MdpData::getSrcMemoryId() const { return mOvData.data.memory_id; } 41829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 419f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmedinline void MdpData::setPipeId(int id) { mOvData.id = id; } 42029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 421f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmedinline int MdpData::getPipeId() const { return mOvData.id; } 42229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 42329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline int MdpData::getFd() const { return mFd.getFD(); } 42429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 425f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmedinline bool MdpData::play(int fd, uint32_t offset) { 426f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed mOvData.data.memory_id = fd; 427f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed mOvData.data.offset = offset; 42829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed if(!mdp_wrapper::play(mFd.getFD(), mOvData)){ 42929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ALOGE("MdpData failed to play"); 430f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed dump(); 43129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return false; 43229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 43329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return true; 43429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 43529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 43629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} // overlay 43729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 43829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#endif // OVERLAY_MDP_H 439