overlayMdp.h revision a653efede03423aa840da24634f1ec6f20796f1e
1ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/* 2ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* Copyright (C) 2008 The Android Open Source Project 3ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* Copyright (c) 2010-2013, The Linux Foundation. All rights reserved. 4ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* 5ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* Licensed under the Apache License, Version 2.0 (the "License"); 6ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* you may not use this file except in compliance with the License. 7ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* You may obtain a copy of the License at 8ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* 9ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* http://www.apache.org/licenses/LICENSE-2.0 10ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* 11ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* Unless required by applicable law or agreed to in writing, software 12ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* distributed under the License is distributed on an "AS IS" BASIS, 13ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* See the License for the specific language governing permissions and 15ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* limitations under the License. 16ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson*/ 17ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 18ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#ifndef OVERLAY_MDP_H 19ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#define OVERLAY_MDP_H 20ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 21ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#include <linux/msm_mdp.h> 22ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 23ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#include "overlayUtils.h" 24ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#include "mdpWrapper.h" 25ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#include "qdMetaData.h" 26ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#ifdef USES_POST_PROCESSING 27ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#include "lib-postproc.h" 28ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#endif 29ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 30ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonnamespace overlay{ 31ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 32ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/* 33ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* Mdp Ctrl holds corresponding fd and MDP related struct. 34ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* It is simple wrapper to MDP services 35ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* */ 36ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonclass MdpCtrl { 37ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonpublic: 38ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* ctor reset */ 39a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson explicit MdpCtrl(const int& dpy); 40ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* dtor close */ 41ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ~MdpCtrl(); 42a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson /* init underlying device using fbnum for dpy */ 43a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson bool init(const int& dpy); 44ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* unset overlay, reset and close fd */ 45ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson bool close(); 46ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* reset and set ov id to -1 / MSMFB_NEW_REQUEST */ 47ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson void reset(); 48ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* calls overlay set 49ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * Set would always consult last good known ov instance. 50ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * Only if it is different, set would actually exectue ioctl. 51ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * On a sucess ioctl. last good known ov instance is updated */ 52ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson bool set(); 53ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* Sets the source total width, height, format */ 54ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson void setSource(const utils::PipeArgs& pargs); 55ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* 56ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * Sets ROI, the unpadded region, for source buffer. 57ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * Dim - ROI dimensions. 58ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson */ 59ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson void setCrop(const utils::Dim& d); 60a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson /* set color for mdp pipe */ 61a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson void setColor(const uint32_t color); 62ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson void setTransform(const utils::eTransform& orient); 63ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* given a dim and w/h, set overlay dim */ 64ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson void setPosition(const utils::Dim& dim); 65ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* using user_data, sets/unsets roationvalue in mdp flags */ 66ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson void setRotationFlags(); 67ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* Performs downscale calculations */ 68ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson void setDownscale(int dscale_factor); 69ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* Update the src format with rotator's dest*/ 70ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson void updateSrcFormat(const uint32_t& rotDstFormat); 71ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* dump state of the object */ 72ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson void dump() const; 73ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* Return the dump in the specified buffer */ 74ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson void getDump(char *buf, size_t len); 75ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* returns session id */ 76ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson int getPipeId() const; 77ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* returns the fd associated to ctrl*/ 78ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson int getFd() const; 79ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* returns a copy ro dst rect dim */ 80ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson utils::Dim getDstRectDim() const; 81ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* returns a copy to src rect dim */ 82ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson utils::Dim getSrcRectDim() const; 83ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* setVisualParam */ 84ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson bool setVisualParams(const MetaData_t& data); 85ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 86a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson static bool validateAndSet(MdpCtrl* mdpCtrlArray[], const int& count, 87a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson const int& fbFd); 88ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonprivate: 89ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* Perform transformation calculations */ 90ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson void doTransform(); 91ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson void doDownscale(); 92ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* get orient / user_data[0] */ 93a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson int getOrient() const; 94ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* returns flags from mdp structure */ 95ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson int getFlags() const; 96ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* set flags to mdp structure */ 97ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson void setFlags(int f); 98ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* set z order */ 99ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson void setZ(utils::eZorder z); 100ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* set isFg flag */ 101ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson void setIsFg(utils::eIsFg isFg); 102ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* return a copy of src whf*/ 103ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson utils::Whf getSrcWhf() const; 104ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* set plane alpha */ 105ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson void setPlaneAlpha(int planeAlpha); 106ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* set blending method */ 107ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson void setBlending(overlay::utils::eBlending blending); 108ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 109ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* set src whf */ 110ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson void setSrcWhf(const utils::Whf& whf); 111ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* set src/dst rect dim */ 112ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson void setSrcRectDim(const utils::Dim d); 113ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson void setDstRectDim(const utils::Dim d); 114ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* returns user_data[0]*/ 115ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson int getUserData() const; 116ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* sets user_data[0] */ 117ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson void setUserData(int v); 118ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 119ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson utils::eTransform mOrientation; //Holds requested orientation 120ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* Actual overlay mdp structure */ 121ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mdp_overlay mOVInfo; 122ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* FD for the mdp fbnum */ 123ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson OvFD mFd; 124ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson int mDownscale; 125a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson int mDpy; 126ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 127ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#ifdef USES_POST_PROCESSING 128ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* PP Compute Params */ 129ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson struct compute_params mParams; 130ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#endif 131ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson}; 132ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 133ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 134ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/* MDP 3D related ctrl */ 135ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonclass MdpCtrl3D { 136ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonpublic: 137ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* ctor reset data */ 138ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson MdpCtrl3D(); 139ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* calls MSMFB_OVERLAY_3D */ 140ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson bool close(); 141ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* set w/h. format is ignored*/ 142ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson void setWh(const utils::Whf& whf); 143ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* set is_3d calls MSMFB_OVERLAY_3D */ 144ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson bool useVirtualFB(); 145ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* set fd to be used in ioctl */ 146ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson void setFd(int fd); 147ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* dump */ 148ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson void dump() const; 149ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonprivate: 150ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* reset */ 151ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson void reset(); 152ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* actual MSM 3D info */ 153ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson msmfb_overlay_3d m3DOVInfo; 154ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* FD for the mdp 3D */ 155ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson OvFD mFd; 156ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson}; 157ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 158ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/* MDP data */ 159ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonclass MdpData { 160ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonpublic: 161ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* ctor reset data */ 162a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson explicit MdpData(const int& dpy); 163ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* dtor close*/ 164ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ~MdpData(); 165ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* init FD */ 166a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson bool init(const int& dpy); 167ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* memset0 the underlying mdp object */ 168ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson void reset(); 169ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* close fd, and reset */ 170ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson bool close(); 171ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* set id of mdp data */ 172ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson void setPipeId(int id); 173ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* return ses id of data */ 174ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson int getPipeId() const; 175ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* get underlying fd*/ 176ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson int getFd() const; 177ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* get memory_id */ 178ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson int getSrcMemoryId() const; 179ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* calls wrapper play */ 180ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson bool play(int fd, uint32_t offset); 181ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* dump state of the object */ 182ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson void dump() const; 183ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* Return the dump in the specified buffer */ 184ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson void getDump(char *buf, size_t len); 185ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 186ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonprivate: 187ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 188ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* actual overlay mdp data */ 189ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson msmfb_overlay_data mOvData; 190ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* fd to mdp fbnum */ 191ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson OvFD mFd; 192ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson}; 193ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 194ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson//--------------Inlines--------------------------------- 195ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 196ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson///// MdpCtrl ////// 197ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 198a653efede03423aa840da24634f1ec6f20796f1eSimon Wilsoninline MdpCtrl::MdpCtrl(const int& dpy) { 199ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson reset(); 200a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson init(dpy); 201ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 202ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 203ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline MdpCtrl::~MdpCtrl() { 204ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson close(); 205ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 206ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 207ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline int MdpCtrl::getOrient() const { 208ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return getUserData(); 209ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 210ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 211ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline int MdpCtrl::getPipeId() const { 212ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return mOVInfo.id; 213ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 214ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 215ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline int MdpCtrl::getFd() const { 216ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return mFd.getFD(); 217ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 218ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 219ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline int MdpCtrl::getFlags() const { 220ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return mOVInfo.flags; 221ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 222ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 223ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline void MdpCtrl::setFlags(int f) { 224ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mOVInfo.flags = f; 225ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 226ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 227ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline void MdpCtrl::setZ(overlay::utils::eZorder z) { 228ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mOVInfo.z_order = z; 229ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 230ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 231ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline void MdpCtrl::setIsFg(overlay::utils::eIsFg isFg) { 232ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mOVInfo.is_fg = isFg; 233ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 234ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 235ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline void MdpCtrl::setDownscale(int dscale) { 236ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mDownscale = dscale; 237ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 238ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 239ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline void MdpCtrl::setPlaneAlpha(int planeAlpha) { 240ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mOVInfo.alpha = planeAlpha; 241ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 242ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 243ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline void MdpCtrl::setBlending(overlay::utils::eBlending blending) { 244ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson switch((int) blending) { 245ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson case utils::OVERLAY_BLENDING_OPAQUE: 246ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mOVInfo.blend_op = BLEND_OP_OPAQUE; 247ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson break; 248ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson case utils::OVERLAY_BLENDING_PREMULT: 249ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mOVInfo.blend_op = BLEND_OP_PREMULTIPLIED; 250ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson break; 251ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson case utils::OVERLAY_BLENDING_COVERAGE: 252ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson default: 253ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mOVInfo.blend_op = BLEND_OP_COVERAGE; 254ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson } 255ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 256ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 257ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline overlay::utils::Whf MdpCtrl::getSrcWhf() const { 258ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return utils::Whf( mOVInfo.src.width, 259ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mOVInfo.src.height, 260ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mOVInfo.src.format); 261ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 262ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 263ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline void MdpCtrl::setSrcWhf(const overlay::utils::Whf& whf) { 264ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mOVInfo.src.width = whf.w; 265ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mOVInfo.src.height = whf.h; 266ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mOVInfo.src.format = whf.format; 267ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 268ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 269ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline overlay::utils::Dim MdpCtrl::getSrcRectDim() const { 270ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return utils::Dim( mOVInfo.src_rect.x, 271ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mOVInfo.src_rect.y, 272ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mOVInfo.src_rect.w, 273ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mOVInfo.src_rect.h); 274ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 275ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 276ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline void MdpCtrl::setSrcRectDim(const overlay::utils::Dim d) { 277ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mOVInfo.src_rect.x = d.x; 278ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mOVInfo.src_rect.y = d.y; 279ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mOVInfo.src_rect.w = d.w; 280ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mOVInfo.src_rect.h = d.h; 281ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 282ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 283ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline overlay::utils::Dim MdpCtrl::getDstRectDim() const { 284ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return utils::Dim( mOVInfo.dst_rect.x, 285ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mOVInfo.dst_rect.y, 286ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mOVInfo.dst_rect.w, 287ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mOVInfo.dst_rect.h); 288ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 289ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 290ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline void MdpCtrl::setDstRectDim(const overlay::utils::Dim d) { 291ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mOVInfo.dst_rect.x = d.x; 292ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mOVInfo.dst_rect.y = d.y; 293ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mOVInfo.dst_rect.w = d.w; 294ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mOVInfo.dst_rect.h = d.h; 295ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 296ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 297ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline int MdpCtrl::getUserData() const { return mOVInfo.user_data[0]; } 298ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 299ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline void MdpCtrl::setUserData(int v) { mOVInfo.user_data[0] = v; } 300ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 301ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline void MdpCtrl::setRotationFlags() { 302ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson const int u = getUserData(); 303ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson if (u & MDP_ROT_90) 304ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mOVInfo.flags |= MDP_SOURCE_ROTATED_90; 305ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 306ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 307ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/////// MdpCtrl3D ////// 308ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 309ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline MdpCtrl3D::MdpCtrl3D() { reset(); } 310ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline bool MdpCtrl3D::close() { 311ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson if (m3DOVInfo.is_3d) { 312ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson m3DOVInfo.is_3d = 0; 313ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson if(!mdp_wrapper::set3D(mFd.getFD(), m3DOVInfo)) { 314ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("MdpCtrl3D close failed set3D with 0"); 315ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return false; 316ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson } 317ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson } 318ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson reset(); 319ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return true; 320ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 321ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline void MdpCtrl3D::reset() { 322ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson utils::memset0(m3DOVInfo); 323ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 324ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 325ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline void MdpCtrl3D::setFd(int fd) { 326ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mFd.copy(fd); 327ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson OVASSERT(mFd.valid(), "MdpCtrl3D setFd, FD should be valid"); 328ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 329ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 330ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline void MdpCtrl3D::setWh(const utils::Whf& whf) { 331ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson // ignore fmt. Needed for useVirtualFB callflow 332ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson m3DOVInfo.width = whf.w; 333ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson m3DOVInfo.height = whf.h; 334ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 335ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 336ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline bool MdpCtrl3D::useVirtualFB() { 337ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson if(!m3DOVInfo.is_3d) { 338ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson m3DOVInfo.is_3d = 1; 339ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson if(!mdp_wrapper::set3D(mFd.getFD(), m3DOVInfo)) { 340ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("MdpCtrl3D close failed set3D with 0"); 341ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return false; 342ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson } 343ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson } 344ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return true; 345ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 346ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 347ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/////// MdpData ////// 348ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 349a653efede03423aa840da24634f1ec6f20796f1eSimon Wilsoninline MdpData::MdpData(const int& dpy) { 350a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson reset(); 351a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson init(dpy); 352a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson} 353ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 354ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline MdpData::~MdpData() { close(); } 355ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 356ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline void MdpData::reset() { 357ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson overlay::utils::memset0(mOvData); 358ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mOvData.data.memory_id = -1; 359ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 360ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 361ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline bool MdpData::close() { 362ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson reset(); 363ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return mFd.close(); 364ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 365ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 366ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline int MdpData::getSrcMemoryId() const { return mOvData.data.memory_id; } 367ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 368ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline void MdpData::setPipeId(int id) { mOvData.id = id; } 369ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 370ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline int MdpData::getPipeId() const { return mOvData.id; } 371ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 372ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline int MdpData::getFd() const { return mFd.getFD(); } 373ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 374ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline bool MdpData::play(int fd, uint32_t offset) { 375ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mOvData.data.memory_id = fd; 376ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mOvData.data.offset = offset; 377ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson if(!mdp_wrapper::play(mFd.getFD(), mOvData)){ 378ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("MdpData failed to play"); 379ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson dump(); 380ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return false; 381ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson } 382ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return true; 383ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 384ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 385ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} // overlay 386ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 387ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#endif // OVERLAY_MDP_H 388