overlayMdssRot.cpp revision e7fd567eb00aea104a726a88540dba639e17bf29
1bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah/* 247377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed * Copyright (C) 2008 The Android Open Source Project 39698610c51504c1192fcd64f341fc7475cf7e166Saurabh Shah * Copyright (c) 2010-2013, 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 23da4e354248d655a64d0f8ef8262678ed82bb429eSushil Chauhan#ifdef VENUS_COLOR_FORMAT 24da4e354248d655a64d0f8ef8262678ed82bb429eSushil Chauhan#include <media/msm_media_info.h> 25da4e354248d655a64d0f8ef8262678ed82bb429eSushil Chauhan#else 26da4e354248d655a64d0f8ef8262678ed82bb429eSushil Chauhan#define VENUS_BUFFER_SIZE(args...) 0 27da4e354248d655a64d0f8ef8262678ed82bb429eSushil Chauhan#endif 28da4e354248d655a64d0f8ef8262678ed82bb429eSushil Chauhan 29a34d74561f653dd083c7f3765fce719eafb88521Naseer Ahmed#ifndef MDSS_MDP_ROT_ONLY 30a34d74561f653dd083c7f3765fce719eafb88521Naseer Ahmed#define MDSS_MDP_ROT_ONLY 0x80 31a34d74561f653dd083c7f3765fce719eafb88521Naseer Ahmed#endif 32a34d74561f653dd083c7f3765fce719eafb88521Naseer Ahmed 33201b32ddd456ed8ffe60818d57e88d43e7ac08c6Sushil Chauhan#define SIZE_1M 0x00100000 3426a80a197c792e833131a2abc923d52db732d5a3Sushil Chauhan#define MDSS_ROT_MASK (MDP_ROT_90 | MDP_FLIP_UD | MDP_FLIP_LR) 35201b32ddd456ed8ffe60818d57e88d43e7ac08c6Sushil Chauhan 36bf4ef717fabff427327613de76b69f964c51484dSaurabh Shahnamespace ovutils = overlay::utils; 37bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 38bf4ef717fabff427327613de76b69f964c51484dSaurabh Shahnamespace overlay { 3947377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer AhmedMdssRot::MdssRot() { 4047377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed reset(); 4147377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed init(); 4247377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed} 4347377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed 4447377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer AhmedMdssRot::~MdssRot() { close(); } 4547377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed 46327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahbool MdssRot::enabled() const { return mEnabled; } 4747377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed 48327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahvoid MdssRot::setRotations(uint32_t flags) { mRotInfo.flags |= flags; } 4947377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed 50327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahint MdssRot::getDstMemId() const { 5147377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed return mRotData.dst_data.memory_id; 5247377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed} 5347377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed 54327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahuint32_t MdssRot::getDstOffset() const { 5547377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed return mRotData.dst_data.offset; 5647377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed} 5747377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed 58327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahuint32_t MdssRot::getDstFormat() const { 5947c130ffbafe12d6ddf6e8df4ffdd9916318c379Raj kamal //For mdss src and dst formats are same 6047c130ffbafe12d6ddf6e8df4ffdd9916318c379Raj kamal return mRotInfo.src.format; 6147c130ffbafe12d6ddf6e8df4ffdd9916318c379Raj kamal} 6247c130ffbafe12d6ddf6e8df4ffdd9916318c379Raj kamal 63327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahuint32_t MdssRot::getSessId() const { return mRotInfo.id; } 6447377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed 65327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahbool MdssRot::init() { 66bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah if(!utils::openDev(mFd, 0, Res::fbPath, O_RDWR)) { 67bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah ALOGE("MdssRot failed to init fb0"); 68bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah return false; 69bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah } 70bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah return true; 71bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah} 72bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 73bf4ef717fabff427327613de76b69f964c51484dSaurabh Shahvoid MdssRot::setSource(const overlay::utils::Whf& awhf) { 74bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah utils::Whf whf(awhf); 75bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 76bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mRotInfo.src.format = whf.format; 77bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mRotInfo.src.width = whf.w; 78bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mRotInfo.src.height = whf.h; 79e7fd567eb00aea104a726a88540dba639e17bf29Sushil Chauhan} 80e7fd567eb00aea104a726a88540dba639e17bf29Sushil Chauhan 81e7fd567eb00aea104a726a88540dba639e17bf29Sushil Chauhanvoid MdssRot::setCrop(const utils::Dim& crop) { 82bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 83e7fd567eb00aea104a726a88540dba639e17bf29Sushil Chauhan mRotInfo.src_rect.x = crop.x; 84e7fd567eb00aea104a726a88540dba639e17bf29Sushil Chauhan mRotInfo.src_rect.y = crop.y; 85e7fd567eb00aea104a726a88540dba639e17bf29Sushil Chauhan mRotInfo.src_rect.w = crop.w; 86e7fd567eb00aea104a726a88540dba639e17bf29Sushil Chauhan mRotInfo.src_rect.h = crop.h; 87bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 88e7fd567eb00aea104a726a88540dba639e17bf29Sushil Chauhan mRotInfo.dst_rect.x = 0; 89e7fd567eb00aea104a726a88540dba639e17bf29Sushil Chauhan mRotInfo.dst_rect.y = 0; 90e7fd567eb00aea104a726a88540dba639e17bf29Sushil Chauhan mRotInfo.dst_rect.w = crop.w; 91e7fd567eb00aea104a726a88540dba639e17bf29Sushil Chauhan mRotInfo.dst_rect.h = crop.h; 92bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah} 93bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 94327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahvoid MdssRot::setDownscale(int ds) {} 958b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan 96327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahvoid MdssRot::setFlags(const utils::eMdpFlags& flags) { 9780c8f568158d0d65306a710d5994bc8052364ec5Sushil Chauhan mRotInfo.flags |= flags; 98bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah} 99bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 100327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahvoid MdssRot::setTransform(const utils::eTransform& rot) 101bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah{ 102565bcd227933ac067efa29c52a9660f04f3c976fSaurabh Shah // reset rotation flags to avoid stale orientation values 103565bcd227933ac067efa29c52a9660f04f3c976fSaurabh Shah mRotInfo.flags &= ~MDSS_ROT_MASK; 104bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah int flags = utils::getMdpOrient(rot); 105bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah if (flags != -1) 106bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah setRotations(flags); 107bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mOrientation = static_cast<utils::eTransform>(flags); 108bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah ALOGE_IF(DEBUG_OVERLAY, "%s: rot=%d", __FUNCTION__, flags); 1098b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan} 110bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 111327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahvoid MdssRot::doTransform() { 112bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah if(mOrientation & utils::OVERLAY_TRANSFORM_ROT_90) 113bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah utils::swap(mRotInfo.dst_rect.w, mRotInfo.dst_rect.h); 114bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah} 115bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 116bf4ef717fabff427327613de76b69f964c51484dSaurabh Shahbool MdssRot::commit() { 117bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah doTransform(); 118bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mRotInfo.flags |= MDSS_MDP_ROT_ONLY; 119327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah mEnabled = true; 120bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah if(!overlay::mdp_wrapper::setOverlay(mFd.getFD(), mRotInfo)) { 121bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah ALOGE("MdssRot commit failed!"); 122bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah dump(); 123327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah return (mEnabled = false); 124bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah } 125bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mRotData.id = mRotInfo.id; 126bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah return true; 127bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah} 128bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 129bf4ef717fabff427327613de76b69f964c51484dSaurabh Shahbool MdssRot::queueBuffer(int fd, uint32_t offset) { 130bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah if(enabled()) { 131bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mRotData.data.memory_id = fd; 132bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mRotData.data.offset = offset; 133bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 134bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah remap(RotMem::Mem::ROT_NUM_BUFS); 135bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah OVASSERT(mMem.curr().m.numBufs(), "queueBuffer numbufs is 0"); 136bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 137bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mRotData.dst_data.offset = 138bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mMem.curr().mRotOffset[mMem.curr().mCurrOffset]; 139bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mMem.curr().mCurrOffset = 140bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah (mMem.curr().mCurrOffset + 1) % mMem.curr().m.numBufs(); 141bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 142bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah if(!overlay::mdp_wrapper::play(mFd.getFD(), mRotData)) { 143bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah ALOGE("MdssRot play failed!"); 144bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah dump(); 145bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah return false; 146bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah } 147bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 148bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah // if the prev mem is valid, we need to close 149bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah if(mMem.prev().valid()) { 150bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah // FIXME if no wait for vsync the above 151bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah // play will return immediatly and might cause 152bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah // tearing when prev.close is called. 153bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah if(!mMem.prev().close()) { 154bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah ALOGE("%s error in closing prev rot mem", __FUNCTION__); 155bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah return false; 156bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah } 157bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah } 158bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah } 159bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah return true; 160bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah} 161bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 162bf4ef717fabff427327613de76b69f964c51484dSaurabh Shahbool MdssRot::open_i(uint32_t numbufs, uint32_t bufsz) 163bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah{ 164bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah OvMem mem; 165bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah OVASSERT(MAP_FAILED == mem.addr(), "MAP failed in open_i"); 1660522d5648711e45384699d4ccb295d64e7227c87Sushil Chauhan bool isSecure = mRotInfo.flags & utils::OV_MDP_SECURE_OVERLAY_SESSION; 167bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 1680522d5648711e45384699d4ccb295d64e7227c87Sushil Chauhan if(!mem.open(numbufs, bufsz, isSecure)){ 169bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah ALOGE("%s: Failed to open", __func__); 170bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mem.close(); 171bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah return false; 172bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah } 173bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 174bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah OVASSERT(MAP_FAILED != mem.addr(), "MAP failed"); 175bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah OVASSERT(mem.getFD() != -1, "getFd is -1"); 176bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 177bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mRotData.dst_data.memory_id = mem.getFD(); 178bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mRotData.dst_data.offset = 0; 179bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mMem.curr().m = mem; 180bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah return true; 181bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah} 182bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 183bf4ef717fabff427327613de76b69f964c51484dSaurabh Shahbool MdssRot::remap(uint32_t numbufs) { 184e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shah // Calculate the size based on rotator's dst format, w and h. 185e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shah uint32_t opBufSize = calcOutputBufSize(); 186e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shah // If current size changed, remap 187e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shah if(opBufSize == mMem.curr().size()) { 188e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shah ALOGE_IF(DEBUG_OVERLAY, "%s: same size %d", __FUNCTION__, opBufSize); 189bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah return true; 190bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah } 191bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 192bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah ALOGE_IF(DEBUG_OVERLAY, "%s: size changed - remapping", __FUNCTION__); 193bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah OVASSERT(!mMem.prev().valid(), "Prev should not be valid"); 194bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 195bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah // ++mMem will make curr to be prev, and prev will be curr 196bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah ++mMem; 197e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shah if(!open_i(numbufs, opBufSize)) { 198bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah ALOGE("%s Error could not open", __FUNCTION__); 199bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah return false; 200bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah } 201bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah for (uint32_t i = 0; i < numbufs; ++i) { 202e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shah mMem.curr().mRotOffset[i] = i * opBufSize; 203bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah } 204bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah return true; 205bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah} 206bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 207bf4ef717fabff427327613de76b69f964c51484dSaurabh Shahbool MdssRot::close() { 208bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah bool success = true; 209df785e9cf231c7ff755920e60553fc743c0de64dKen Zhang if(mFd.valid() && (getSessId() != (uint32_t) MSMFB_NEW_REQUEST)) { 210bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah if(!mdp_wrapper::unsetOverlay(mFd.getFD(), getSessId())) { 211bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah ALOGE("MdssRot::close unsetOverlay failed, fd=%d sessId=%d", 212bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mFd.getFD(), getSessId()); 213df785e9cf231c7ff755920e60553fc743c0de64dKen Zhang success = false; 214df785e9cf231c7ff755920e60553fc743c0de64dKen Zhang } 215bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah } 216bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 217bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah if (!mFd.close()) { 218bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah ALOGE("Mdss Rot error closing fd"); 219bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah success = false; 220bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah } 221bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah if (!mMem.close()) { 222bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah ALOGE("Mdss Rot error closing mem"); 223bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah success = false; 224bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah } 225bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah reset(); 226bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah return success; 227bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah} 228bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 229bf4ef717fabff427327613de76b69f964c51484dSaurabh Shahvoid MdssRot::reset() { 230bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah ovutils::memset0(mRotInfo); 231bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah ovutils::memset0(mRotData); 232bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mRotData.data.memory_id = -1; 233bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mRotInfo.id = MSMFB_NEW_REQUEST; 234bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah ovutils::memset0(mMem.curr().mRotOffset); 235bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah ovutils::memset0(mMem.prev().mRotOffset); 236bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mMem.curr().mCurrOffset = 0; 237bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mMem.prev().mCurrOffset = 0; 238bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mOrientation = utils::OVERLAY_TRANSFORM_0; 239bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah} 240bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 241bf4ef717fabff427327613de76b69f964c51484dSaurabh Shahvoid MdssRot::dump() const { 242bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah ALOGE("== Dump MdssRot start =="); 243bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mFd.dump(); 244bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mMem.curr().m.dump(); 245bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mdp_wrapper::dump("mRotInfo", mRotInfo); 246bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mdp_wrapper::dump("mRotData", mRotData); 247bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah ALOGE("== Dump MdssRot end =="); 248bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah} 249bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 250e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shahuint32_t MdssRot::calcOutputBufSize() { 251e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shah uint32_t opBufSize = 0; 252e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shah ovutils::Whf destWhf(mRotInfo.dst_rect.w, mRotInfo.dst_rect.h, 253e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shah mRotInfo.src.format); //mdss src and dst formats are same. 254e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shah 255e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shah opBufSize = Rotator::calcOutputBufSize(destWhf); 2566be1d0f8c034cbb734a770fc04f00615cea943aaSushil Chauhan 257201b32ddd456ed8ffe60818d57e88d43e7ac08c6Sushil Chauhan if (mRotInfo.flags & utils::OV_MDP_SECURE_OVERLAY_SESSION) 258e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shah opBufSize = utils::align(opBufSize, SIZE_1M); 259e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shah 260e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shah return opBufSize; 261270550d926a2e3c4d65b9c1c1d3b696f8a49b4ccSushil Chauhan} 262a22f5873a9974b00f352370e077db9788ad67699Saurabh Shah 263a22f5873a9974b00f352370e077db9788ad67699Saurabh Shahvoid MdssRot::getDump(char *buf, size_t len) const { 2644762db4eb027284225be9d10f08d87252612064cSaurabh Shah ovutils::getDump(buf, len, "MdssRotCtrl", mRotInfo); 2654762db4eb027284225be9d10f08d87252612064cSaurabh Shah ovutils::getDump(buf, len, "MdssRotData", mRotData); 266a22f5873a9974b00f352370e077db9788ad67699Saurabh Shah} 267a22f5873a9974b00f352370e077db9788ad67699Saurabh Shah 268bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah} // namespace overlay 269