overlayGenPipe.cpp revision e2b94da0a7de2a5cad9ecb90ed3eee5dca219863
1d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed/*
2e33e6a894950f7d258d79bc48441575e2b0981dbRaj kamal* Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
3d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed*
4d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed* Redistribution and use in source and binary forms, with or without
5d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed* modification, are permitted provided that the following conditions are
6d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed* met:
7d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed*    * Redistributions of source code must retain the above copyright
8d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed*      notice, this list of conditions and the following disclaimer.
9d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed*    * Redistributions in binary form must reproduce the above
10d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed*      copyright notice, this list of conditions and the following
11d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed*      disclaimer in the documentation and/or other materials provided
12d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed*      with the distribution.
13d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed*    * Neither the name of The Linux Foundation nor the names of its
14d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed*      contributors may be used to endorse or promote products derived
15d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed*      from this software without specific prior written permission.
16d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed*
17d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
18d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
20d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed* ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
21d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
24d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
26d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed*/
29d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed
30d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed#include "overlayGenPipe.h"
31c9ef1b45b51f4b541da4337cd86dc510654c390bAmara Venkata Mastan Manoj Kumar#include "overlay.h"
32d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan#include "mdp_version.h"
33d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed
34d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmednamespace overlay {
35d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed
36d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer AhmedGenericPipe::GenericPipe(int dpy) : mFbNum(dpy), mRot(0), mRotUsed(false),
3736963690317abceae79621f14ba41ff62b3ff489Saurabh Shah        mRotDownscaleOpt(false), mPreRotated(false), pipeState(CLOSED) {
38d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    init();
39d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed}
40d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed
41d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer AhmedGenericPipe::~GenericPipe() {
42d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    close();
43d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed}
44d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed
45d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmedbool GenericPipe::init()
46d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed{
47d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    ALOGE_IF(DEBUG_OVERLAY, "GenericPipe init");
48d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    mRotUsed = false;
49d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan    mRotDownscaleOpt = false;
5036963690317abceae79621f14ba41ff62b3ff489Saurabh Shah    mPreRotated = false;
51c9ef1b45b51f4b541da4337cd86dc510654c390bAmara Venkata Mastan Manoj Kumar    if(mFbNum)
52c9ef1b45b51f4b541da4337cd86dc510654c390bAmara Venkata Mastan Manoj Kumar        mFbNum = Overlay::getInstance()->getExtFbNum();
53c9ef1b45b51f4b541da4337cd86dc510654c390bAmara Venkata Mastan Manoj Kumar
54c9ef1b45b51f4b541da4337cd86dc510654c390bAmara Venkata Mastan Manoj Kumar    ALOGD_IF(DEBUG_OVERLAY,"%s: mFbNum:%d",__FUNCTION__, mFbNum);
55d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed
56d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    if(!mCtrlData.ctrl.init(mFbNum)) {
57d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed        ALOGE("GenericPipe failed to init ctrl");
58d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed        return false;
59d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    }
60d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed
61d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    if(!mCtrlData.data.init(mFbNum)) {
62d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed        ALOGE("GenericPipe failed to init data");
63d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed        return false;
64d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    }
65d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed
66d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    //get a new rotator object, take ownership
67d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    mRot = Rotator::getRotator();
68d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed
69d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    return true;
70d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed}
71d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed
72d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmedbool GenericPipe::close() {
73d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    bool ret = true;
74d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed
75d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    if(!mCtrlData.ctrl.close()) {
76d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed        ALOGE("GenericPipe failed to close ctrl");
77d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed        ret = false;
78d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    }
79d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    if (!mCtrlData.data.close()) {
80d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed        ALOGE("GenericPipe failed to close data");
81d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed        ret = false;
82d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    }
83d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed
84d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    delete mRot;
85d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    mRot = 0;
86d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed
87d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    setClosed();
88d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    return ret;
89d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed}
90d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed
9136963690317abceae79621f14ba41ff62b3ff489Saurabh Shahvoid GenericPipe::setSource(const utils::PipeArgs& args) {
92d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    //Cache if user wants 0-rotation
9336963690317abceae79621f14ba41ff62b3ff489Saurabh Shah    mRotUsed = args.rotFlags & utils::ROT_0_ENABLED;
9436963690317abceae79621f14ba41ff62b3ff489Saurabh Shah    mRotDownscaleOpt = args.rotFlags & utils::ROT_DOWNSCALE_ENABLED;
9536963690317abceae79621f14ba41ff62b3ff489Saurabh Shah    mPreRotated = args.rotFlags & utils::ROT_PREROTATED;
9636963690317abceae79621f14ba41ff62b3ff489Saurabh Shah    if(mPreRotated) mRotUsed = false;
9736963690317abceae79621f14ba41ff62b3ff489Saurabh Shah    mRot->setSource(args.whf);
9836963690317abceae79621f14ba41ff62b3ff489Saurabh Shah    mRot->setFlags(args.mdpFlags);
9936963690317abceae79621f14ba41ff62b3ff489Saurabh Shah    mCtrlData.ctrl.setSource(args);
100d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed}
101d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed
10236963690317abceae79621f14ba41ff62b3ff489Saurabh Shahvoid GenericPipe::setCrop(const overlay::utils::Dim& d) {
10336963690317abceae79621f14ba41ff62b3ff489Saurabh Shah    mCtrlData.ctrl.setCrop(d);
104d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed}
105d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed
10636963690317abceae79621f14ba41ff62b3ff489Saurabh Shahvoid GenericPipe::setTransform(const utils::eTransform& orient) {
107d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    //Rotation could be enabled by user for zero-rot or the layer could have
108d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    //some transform. Mark rotation enabled in either case.
10936963690317abceae79621f14ba41ff62b3ff489Saurabh Shah    mRotUsed |= ((orient & utils::OVERLAY_TRANSFORM_ROT_90) && !mPreRotated);
110d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan    mRot->setTransform(orient);
11136963690317abceae79621f14ba41ff62b3ff489Saurabh Shah    mCtrlData.ctrl.setTransform(orient);
112d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed}
113d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed
11436963690317abceae79621f14ba41ff62b3ff489Saurabh Shahvoid GenericPipe::setPosition(const utils::Dim& d) {
11536963690317abceae79621f14ba41ff62b3ff489Saurabh Shah    mCtrlData.ctrl.setPosition(d);
116d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan}
117d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan
118e2b94da0a7de2a5cad9ecb90ed3eee5dca219863Saurabh Shahbool GenericPipe::setVisualParams(const MetaData_t &metadata)
119e2b94da0a7de2a5cad9ecb90ed3eee5dca219863Saurabh Shah{
120e2b94da0a7de2a5cad9ecb90ed3eee5dca219863Saurabh Shah        return mCtrlData.ctrl.setVisualParams(metadata);
121e2b94da0a7de2a5cad9ecb90ed3eee5dca219863Saurabh Shah}
122e2b94da0a7de2a5cad9ecb90ed3eee5dca219863Saurabh Shah
123d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmedbool GenericPipe::commit() {
124d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    bool ret = false;
125d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan    int downscale_factor = utils::ROT_DS_NONE;
126d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan
127d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan    if(mRotDownscaleOpt) {
12836963690317abceae79621f14ba41ff62b3ff489Saurabh Shah        ovutils::Dim src(mCtrlData.ctrl.getCrop());
12936963690317abceae79621f14ba41ff62b3ff489Saurabh Shah        ovutils::Dim dst(mCtrlData.ctrl.getPosition());
13036963690317abceae79621f14ba41ff62b3ff489Saurabh Shah        downscale_factor = ovutils::getDownscaleFactor(
13136963690317abceae79621f14ba41ff62b3ff489Saurabh Shah                src.w, src.h, dst.w, dst.h);
13236963690317abceae79621f14ba41ff62b3ff489Saurabh Shah        mRotUsed |= (downscale_factor && !mPreRotated);
133d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan    }
134d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan
135d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan
136d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    if(mRotUsed) {
13736963690317abceae79621f14ba41ff62b3ff489Saurabh Shah        mRot->setDownscale(downscale_factor);
138d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan        //If wanting to use rotator, start it.
139d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed        if(!mRot->commit()) {
140d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed            ALOGE("GenPipe Rotator commit failed");
141d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed            //If rot commit fails, flush rotator session, memory, fd and create
142d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed            //a hollow rotator object
143d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed            delete mRot;
144d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed            mRot = Rotator::getRotator();
145d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed            pipeState = CLOSED;
146d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed            return false;
147d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed        }
148e33e6a894950f7d258d79bc48441575e2b0981dbRaj kamal        /* Set the mdp src format to the output format of the rotator.
149e33e6a894950f7d258d79bc48441575e2b0981dbRaj kamal         * The output format of the rotator might be different depending on
150e33e6a894950f7d258d79bc48441575e2b0981dbRaj kamal         * whether fastyuv mode is enabled in the rotator.
151e33e6a894950f7d258d79bc48441575e2b0981dbRaj kamal         */
15236963690317abceae79621f14ba41ff62b3ff489Saurabh Shah        mCtrlData.ctrl.updateSrcFormat(mRot->getDstFormat());
153d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    }
154d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed
15536963690317abceae79621f14ba41ff62b3ff489Saurabh Shah    mCtrlData.ctrl.setDownscale(downscale_factor);
156d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    ret = mCtrlData.ctrl.commit();
157d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed
158d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    //If mdp commit fails, flush rotator session, memory, fd and create a hollow
159d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    //rotator object
160d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    if(ret == false) {
161d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed        delete mRot;
162d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed        mRot = Rotator::getRotator();
163d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    }
164d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed
165d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    pipeState = ret ? OPEN : CLOSED;
166d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    return ret;
167d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed}
168d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed
169d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmedbool GenericPipe::queueBuffer(int fd, uint32_t offset) {
170d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    //TODO Move pipe-id transfer to CtrlData class. Make ctrl and data private.
171d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    OVASSERT(isOpen(), "State is closed, cannot queueBuffer");
172d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    int pipeId = mCtrlData.ctrl.getPipeId();
173d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    OVASSERT(-1 != pipeId, "Ctrl ID should not be -1");
174d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    // set pipe id from ctrl to data
175d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    mCtrlData.data.setPipeId(pipeId);
176d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed
177d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    int finalFd = fd;
178d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    uint32_t finalOffset = offset;
179d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    //If rotator is to be used, queue to it, so it can ROTATE.
180d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    if(mRotUsed) {
181d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed        if(!mRot->queueBuffer(fd, offset)) {
182d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed            ALOGE("GenPipe Rotator play failed");
183d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed            return false;
184d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed        }
185d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed        //Configure MDP's source buffer as the current output buffer of rotator
186d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed        if(mRot->getDstMemId() != -1) {
187d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed            finalFd = mRot->getDstMemId();
188d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed            finalOffset = mRot->getDstOffset();
189d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed        } else {
190d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed            //Could be -1 for NullRotator, if queue above succeeds.
191d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed            //Need an actual rotator. Modify overlay State Traits.
192d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed            //Not fatal, keep queuing to MDP without rotation.
193d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed            ALOGE("Null rotator in use, where an actual is required");
194d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed        }
195d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    }
196d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    return mCtrlData.data.queueBuffer(finalFd, finalOffset);
197d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed}
198d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed
199d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmedint GenericPipe::getCtrlFd() const {
200d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    return mCtrlData.ctrl.getFd();
201d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed}
202d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed
203d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmedutils::Dim GenericPipe::getCrop() const
204d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed{
205d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    return mCtrlData.ctrl.getCrop();
206d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed}
207d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed
208d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmedvoid GenericPipe::dump() const
209d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed{
210d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    ALOGE("== Dump Generic pipe start ==");
211d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    ALOGE("pipe state = %d", (int)pipeState);
212d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    OVASSERT(mRot, "GenericPipe should have a valid Rot");
213d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    mCtrlData.ctrl.dump();
214d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    mCtrlData.data.dump();
215d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    mRot->dump();
216d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    ALOGE("== Dump Generic pipe end ==");
217d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed}
218d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed
219f48c59032a351cda58b2057423b2646423acd7c7Saurabh Shahvoid GenericPipe::getDump(char *buf, size_t len) {
220f48c59032a351cda58b2057423b2646423acd7c7Saurabh Shah    mCtrlData.ctrl.getDump(buf, len);
221f48c59032a351cda58b2057423b2646423acd7c7Saurabh Shah    mCtrlData.data.getDump(buf, len);
222f48c59032a351cda58b2057423b2646423acd7c7Saurabh Shah    if(mRotUsed && mRot)
223f48c59032a351cda58b2057423b2646423acd7c7Saurabh Shah        mRot->getDump(buf, len);
224f48c59032a351cda58b2057423b2646423acd7c7Saurabh Shah}
225f48c59032a351cda58b2057423b2646423acd7c7Saurabh Shah
226d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmedbool GenericPipe::isClosed() const  {
227d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    return (pipeState == CLOSED);
228d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed}
229d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed
230d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmedbool GenericPipe::isOpen() const  {
231d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    return (pipeState == OPEN);
232d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed}
233d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed
234d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmedbool GenericPipe::setClosed() {
235d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    pipeState = CLOSED;
236d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed    return true;
237d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed}
238d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed
239d82ce1da8ebdba46e6d0119fac1aa8d4b9b033b7Ramkumar Radhakrishnan
240d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed} //namespace overlay
241