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