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