1bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah/* 247377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed * Copyright (C) 2008 The Android Open Source Project 3fbda988d2909e2b8527098b5ffc93fa38fb0219eArun Kumar K.R * Copyright (c) 2010-2014, The Linux Foundation. All rights reserved. 447377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed * Not a Contribution, Apache license notifications and license are retained 547377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed * for attribution purposes only. 647377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed * 747377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed * Licensed under the Apache License, Version 2.0 (the "License"); 847377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed * you may not use this file except in compliance with the License. 947377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed * You may obtain a copy of the License at 1047377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed * 1147377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed * http://www.apache.org/licenses/LICENSE-2.0 1247377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed * 1347377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed * Unless required by applicable law or agreed to in writing, software 1447377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed * distributed under the License is distributed on an "AS IS" BASIS, 1547377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1647377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed * See the License for the specific language governing permissions and 1747377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed * limitations under the License. 18bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah*/ 19bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 20bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah#include "overlayUtils.h" 21bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah#include "overlayRotator.h" 22bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 23bf4ef717fabff427327613de76b69f964c51484dSaurabh Shahnamespace ovutils = overlay::utils; 24bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 25bf4ef717fabff427327613de76b69f964c51484dSaurabh Shahnamespace overlay { 26bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 2747377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer AhmedMdpRot::MdpRot() { 2847377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed reset(); 2947377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed init(); 3047377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed} 3147377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed 3247377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer AhmedMdpRot::~MdpRot() { close(); } 3347377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed 34327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahbool MdpRot::enabled() const { return mRotImgInfo.enable; } 3547377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed 36327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahvoid MdpRot::setRotations(uint32_t r) { mRotImgInfo.rotations = r; } 3747377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed 38327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahint MdpRot::getDstMemId() const { 3947377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed return mRotDataInfo.dst.memory_id; 4047377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed} 4147377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed 42327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahuint32_t MdpRot::getDstOffset() const { 4347377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed return mRotDataInfo.dst.offset; 4447377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed} 4547377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed 46327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahuint32_t MdpRot::getDstFormat() const { 4747c130ffbafe12d6ddf6e8df4ffdd9916318c379Raj kamal return mRotImgInfo.dst.format; 4847c130ffbafe12d6ddf6e8df4ffdd9916318c379Raj kamal} 4947c130ffbafe12d6ddf6e8df4ffdd9916318c379Raj kamal 50327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahuint32_t MdpRot::getSessId() const { return mRotImgInfo.session_id; } 5147377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed 528b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnanvoid MdpRot::setDownscale(int ds) { 53bb21d541c9e0f60060e4cb077ad51b8a7f48523fRamkumar Radhakrishnan if ((utils::ROT_DS_EIGHTH == ds) && (mRotImgInfo.src_rect.h & 0xF)) { 548b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan // Ensure src_rect.h is a multiple of 16 for 1/8 downscaling. 558b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan // This is an undocumented MDP Rotator constraint. 56bb21d541c9e0f60060e4cb077ad51b8a7f48523fRamkumar Radhakrishnan mRotImgInfo.src_rect.h = utils::aligndown(mRotImgInfo.src_rect.h, 16); 578b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan } 588b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan mRotImgInfo.downscale_ratio = ds; 598b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan} 608b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan 61327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahvoid MdpRot::save() { 6247377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed mLSRotImgInfo = mRotImgInfo; 6347377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed} 6447377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed 65327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahbool MdpRot::rotConfChanged() const { 6647377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed // 0 means same 6747377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed if(0 == ::memcmp(&mRotImgInfo, &mLSRotImgInfo, 6847377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed sizeof (msm_rotator_img_info))) { 6947377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed return false; 7047377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed } 7147377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed return true; 7247377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed} 7347377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed 74bf4ef717fabff427327613de76b69f964c51484dSaurabh Shahbool MdpRot::init() 75bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah{ 76bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah if(!mFd.open(Res::rotPath, O_RDWR)){ 77bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah ALOGE("MdpRot failed to init %s", Res::rotPath); 78bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah return false; 79bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah } 80bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah return true; 81bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah} 82bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 83bf4ef717fabff427327613de76b69f964c51484dSaurabh Shahvoid MdpRot::setSource(const overlay::utils::Whf& awhf) { 84bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah utils::Whf whf(awhf); 85bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mRotImgInfo.src.format = whf.format; 86bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 87bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mRotImgInfo.src.width = whf.w; 88bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mRotImgInfo.src.height = whf.h; 89bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 90bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mRotImgInfo.src_rect.w = whf.w; 91bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mRotImgInfo.src_rect.h = whf.h; 92bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 93bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mRotImgInfo.dst.width = whf.w; 94bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mRotImgInfo.dst.height = whf.h; 95bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah} 96bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 97fbda988d2909e2b8527098b5ffc93fa38fb0219eArun Kumar K.Rvoid MdpRot::setCrop(const utils::Dim& /*crop*/) { 98e7fd567eb00aea104a726a88540dba639e17bf29Sushil Chauhan // NO-OP for non-mdss rotator due to possible h/w limitations 99e7fd567eb00aea104a726a88540dba639e17bf29Sushil Chauhan} 100e7fd567eb00aea104a726a88540dba639e17bf29Sushil Chauhan 101327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahvoid MdpRot::setFlags(const utils::eMdpFlags& flags) { 102bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mRotImgInfo.secure = 0; 103bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah if(flags & utils::OV_MDP_SECURE_OVERLAY_SESSION) 104bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mRotImgInfo.secure = 1; 105bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah} 106bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 107327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahvoid MdpRot::setTransform(const utils::eTransform& rot) 108bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah{ 109bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah int r = utils::getMdpOrient(rot); 110bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah setRotations(r); 111bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mOrientation = static_cast<utils::eTransform>(r); 112bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah ALOGE_IF(DEBUG_OVERLAY, "%s: r=%d", __FUNCTION__, r); 1138b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan} 114bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 115327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahvoid MdpRot::doTransform() { 116bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah if(mOrientation & utils::OVERLAY_TRANSFORM_ROT_90) 117bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah utils::swap(mRotImgInfo.dst.width, mRotImgInfo.dst.height); 118bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah} 119bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 120bf4ef717fabff427327613de76b69f964c51484dSaurabh Shahbool MdpRot::commit() { 121bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah doTransform(); 1221a78fb1256ec5b65ee29506be00c50c52ed786f2Saurabh Shah if(rotConfChanged()) { 123327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah mRotImgInfo.enable = 1; 1241a78fb1256ec5b65ee29506be00c50c52ed786f2Saurabh Shah if(!overlay::mdp_wrapper::startRotator(mFd.getFD(), mRotImgInfo)) { 1251a78fb1256ec5b65ee29506be00c50c52ed786f2Saurabh Shah ALOGE("MdpRot commit failed"); 1261a78fb1256ec5b65ee29506be00c50c52ed786f2Saurabh Shah dump(); 127327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah mRotImgInfo.enable = 0; 1281a78fb1256ec5b65ee29506be00c50c52ed786f2Saurabh Shah return false; 1291a78fb1256ec5b65ee29506be00c50c52ed786f2Saurabh Shah } 1301a78fb1256ec5b65ee29506be00c50c52ed786f2Saurabh Shah save(); 1311a78fb1256ec5b65ee29506be00c50c52ed786f2Saurabh Shah mRotDataInfo.session_id = mRotImgInfo.session_id; 132bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah } 133bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah return true; 134bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah} 135bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 136e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shahuint32_t MdpRot::calcOutputBufSize() { 137e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shah ovutils::Whf destWhf(mRotImgInfo.dst.width, 138e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shah mRotImgInfo.dst.height, mRotImgInfo.dst.format); 139e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shah return Rotator::calcOutputBufSize(destWhf); 140e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shah} 141e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shah 142bf4ef717fabff427327613de76b69f964c51484dSaurabh Shahbool MdpRot::open_i(uint32_t numbufs, uint32_t bufsz) 143bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah{ 144bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah OvMem mem; 145bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 146bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah OVASSERT(MAP_FAILED == mem.addr(), "MAP failed in open_i"); 147bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 148bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah if(!mem.open(numbufs, bufsz, mRotImgInfo.secure)){ 149bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah ALOGE("%s: Failed to open", __func__); 150bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mem.close(); 151bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah return false; 152bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah } 153bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 154bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah OVASSERT(MAP_FAILED != mem.addr(), "MAP failed"); 155bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah OVASSERT(mem.getFD() != -1, "getFd is -1"); 156bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 157bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mRotDataInfo.dst.memory_id = mem.getFD(); 158bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mRotDataInfo.dst.offset = 0; 1598bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah mMem.mem = mem; 160bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah return true; 161bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah} 162bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 163bf4ef717fabff427327613de76b69f964c51484dSaurabh Shahbool MdpRot::close() { 164bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah bool success = true; 16547377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed if(mFd.valid() && (getSessId() != 0)) { 166bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah if(!mdp_wrapper::endRotator(mFd.getFD(), getSessId())) { 16747377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed ALOGE("Mdp Rot error endRotator, fd=%d sessId=%u", 168bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mFd.getFD(), getSessId()); 169bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah success = false; 170bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah } 171bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah } 172bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah if (!mFd.close()) { 173bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah ALOGE("Mdp Rot error closing fd"); 174bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah success = false; 175bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah } 176bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah if (!mMem.close()) { 177bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah ALOGE("Mdp Rot error closing mem"); 178bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah success = false; 179bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah } 180bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah reset(); 181bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah return success; 182bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah} 183bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 184bf4ef717fabff427327613de76b69f964c51484dSaurabh Shahbool MdpRot::remap(uint32_t numbufs) { 185bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah // if current size changed, remap 186e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shah uint32_t opBufSize = calcOutputBufSize(); 1878bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah if(opBufSize == mMem.size()) { 188e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shah ALOGE_IF(DEBUG_OVERLAY, "%s: same size %d", __FUNCTION__, opBufSize); 189bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah return true; 190bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah } 191bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 1928bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah if(!mMem.close()) { 1938bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah ALOGE("%s error in closing prev rot mem", __FUNCTION__); 1948bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah return false; 1958bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah } 1968bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah 197bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah ALOGE_IF(DEBUG_OVERLAY, "%s: size changed - remapping", __FUNCTION__); 198bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 199e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shah if(!open_i(numbufs, opBufSize)) { 200bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah ALOGE("%s Error could not open", __FUNCTION__); 201bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah return false; 202bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah } 2038bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah 204bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah for (uint32_t i = 0; i < numbufs; ++i) { 2058bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah mMem.mRotOffset[i] = i * opBufSize; 206bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah } 2078bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah 208bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah return true; 209bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah} 210bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 211bf4ef717fabff427327613de76b69f964c51484dSaurabh Shahvoid MdpRot::reset() { 212bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah ovutils::memset0(mRotImgInfo); 2131a78fb1256ec5b65ee29506be00c50c52ed786f2Saurabh Shah ovutils::memset0(mLSRotImgInfo); 214bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah ovutils::memset0(mRotDataInfo); 2158bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah ovutils::memset0(mMem.mRotOffset); 2168bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah mMem.mCurrIndex = 0; 217bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mOrientation = utils::OVERLAY_TRANSFORM_0; 218bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah} 219bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 220bf4ef717fabff427327613de76b69f964c51484dSaurabh Shahbool MdpRot::queueBuffer(int fd, uint32_t offset) { 221bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah if(enabled()) { 222bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mRotDataInfo.src.memory_id = fd; 223bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mRotDataInfo.src.offset = offset; 224bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 2258bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah if(false == remap(RotMem::ROT_NUM_BUFS)) { 2268bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah ALOGE("%s Remap failed, not queueing", __FUNCTION__); 2278bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah return false; 2288bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah } 2298bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah 230bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mRotDataInfo.dst.offset = 2318bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah mMem.mRotOffset[mMem.mCurrIndex]; 2328bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah mMem.mCurrIndex = 2338bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah (mMem.mCurrIndex + 1) % mMem.mem.numBufs(); 234bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 235bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah if(!overlay::mdp_wrapper::rotate(mFd.getFD(), mRotDataInfo)) { 236bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah ALOGE("MdpRot failed rotate"); 237bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah dump(); 238bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah return false; 239bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah } 240bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah } 241bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah return true; 242bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah} 243bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 244bf4ef717fabff427327613de76b69f964c51484dSaurabh Shahvoid MdpRot::dump() const { 245bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah ALOGE("== Dump MdpRot start =="); 246bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mFd.dump(); 2478bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah mMem.mem.dump(); 248bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mdp_wrapper::dump("mRotImgInfo", mRotImgInfo); 249bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mdp_wrapper::dump("mRotDataInfo", mRotDataInfo); 250bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah ALOGE("== Dump MdpRot end =="); 251bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah} 252bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 253a22f5873a9974b00f352370e077db9788ad67699Saurabh Shahvoid MdpRot::getDump(char *buf, size_t len) const { 2544762db4eb027284225be9d10f08d87252612064cSaurabh Shah ovutils::getDump(buf, len, "MdpRotCtrl", mRotImgInfo); 2554762db4eb027284225be9d10f08d87252612064cSaurabh Shah ovutils::getDump(buf, len, "MdpRotData", mRotDataInfo); 256a22f5873a9974b00f352370e077db9788ad67699Saurabh Shah} 257a22f5873a9974b00f352370e077db9788ad67699Saurabh Shah 258bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah} // namespace overlay 259