overlayRotator.cpp revision 4e2cfc92692f8b9c03cb35702fa5ffeda0d29571
129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* 2d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed * Copyright (C) 2008 The Android Open Source Project 3d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed * Copyright (c) 2010-2012, The Linux Foundation. All rights reserved. 4d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed * Not a Contribution, Apache license notifications and license are retained 5d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed * for attribution purposes only. 6d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed * 7d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed * Licensed under the Apache License, Version 2.0 (the "License"); 8d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed * you may not use this file except in compliance with the License. 9d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed * You may obtain a copy of the License at 10d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed * 11d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed * http://www.apache.org/licenses/LICENSE-2.0 12d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed * 13d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed * Unless required by applicable law or agreed to in writing, software 14d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed * distributed under the License is distributed on an "AS IS" BASIS, 15d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed * See the License for the specific language governing permissions and 17d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed * limitations under the License. 1829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed*/ 1929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 2029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include "overlayRotator.h" 2129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include "overlayUtils.h" 22e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah#include "mdp_version.h" 234e2cfc92692f8b9c03cb35702fa5ffeda0d29571Saurabh Shah#include "gr.h" 2429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 2529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmednamespace ovutils = overlay::utils; 2629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 2729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmednamespace overlay { 2829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 29d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer AhmedRotator::~Rotator() {} 30d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed 31d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer AhmedRotator* Rotator::getRotator() { 32d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed int type = getRotatorHwType(); 33d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed if(type == TYPE_MDP) { 34d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed return new MdpRot(); //will do reset 35d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed } else if(type == TYPE_MDSS) { 36d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed return new MdssRot(); 37d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed } else { 38d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed ALOGE("%s Unknown h/w type %d", __FUNCTION__, type); 39d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed return NULL; 40d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed } 41d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed} 42d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed 434e2cfc92692f8b9c03cb35702fa5ffeda0d29571Saurabh Shahuint32_t Rotator::calcOutputBufSize(const utils::Whf& destWhf) { 444e2cfc92692f8b9c03cb35702fa5ffeda0d29571Saurabh Shah //dummy aligned w & h. 454e2cfc92692f8b9c03cb35702fa5ffeda0d29571Saurabh Shah int alW = 0, alH = 0; 464e2cfc92692f8b9c03cb35702fa5ffeda0d29571Saurabh Shah int halFormat = ovutils::getHALFormat(destWhf.format); 474e2cfc92692f8b9c03cb35702fa5ffeda0d29571Saurabh Shah //A call into gralloc/memalloc 484e2cfc92692f8b9c03cb35702fa5ffeda0d29571Saurabh Shah return getBufferSizeAndDimensions( 494e2cfc92692f8b9c03cb35702fa5ffeda0d29571Saurabh Shah destWhf.w, destWhf.h, halFormat, alW, alH); 504e2cfc92692f8b9c03cb35702fa5ffeda0d29571Saurabh Shah} 514e2cfc92692f8b9c03cb35702fa5ffeda0d29571Saurabh Shah 52d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmedint Rotator::getRotatorHwType() { 53e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah int mdpVersion = qdutils::MDPVersion::getInstance().getMDPVersion(); 54e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah if (mdpVersion == qdutils::MDSS_V5) 55e012f7ad3026349c5a6edafbd550cd83655b99d5Saurabh Shah return TYPE_MDSS; 56f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed return TYPE_MDP; 57f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed} 5829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 59f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmedbool RotMem::close() { 60f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed bool ret = true; 61f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed for(uint32_t i=0; i < RotMem::MAX_ROT_MEM; ++i) { 62f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed // skip current, and if valid, close 63f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed if(m[i].valid()) { 64f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed if(m[i].close() == false) { 65f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed ALOGE("%s error in closing rot mem %d", __FUNCTION__, i); 66f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed ret = false; 67f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed } 68f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed } 69f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed } 70f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed return ret; 7129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 7229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 7329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 74