1054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* 2054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin* Copyright (c) 2011-2013, The Linux Foundation. All rights reserved. 3054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin* 4054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin* Redistribution and use in source and binary forms, with or without 5054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin* modification, are permitted provided that the following conditions are 6054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin* met: 7054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin* * Redistributions of source code must retain the above copyright 8054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin* notice, this list of conditions and the following disclaimer. 9054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin* * Redistributions in binary form must reproduce the above 10054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin* copyright notice, this list of conditions and the following 11054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin* disclaimer in the documentation and/or other materials provided 12054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin* with the distribution. 13054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin* * Neither the name of The Linux Foundation nor the names of its 14054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin* contributors may be used to endorse or promote products derived 15054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin* from this software without specific prior written permission. 16054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin* 17054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 18054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 20054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 21054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 24054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 25054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 26054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin*/ 29054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 30054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#ifndef OVERLAY_GENERIC_PIPE_H 31054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#define OVERLAY_GENERIC_PIPE_H 32054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 33054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#include "overlayUtils.h" 34054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#include "overlayCtrlData.h" 35054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 36054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjinnamespace overlay { 37054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 38054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjinclass GenericPipe : utils::NoCopy { 39054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjinpublic: 40054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin /* ctor */ 41054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin explicit GenericPipe(const int& dpy); 42054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin /* dtor */ 43054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin ~GenericPipe(); 44054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin /* Control APIs */ 45054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin /* set source using whf, orient and wait flag */ 46054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin void setSource(const utils::PipeArgs& args); 47054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin /* set crop a.k.a the region of interest */ 48054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin void setCrop(const utils::Dim& d); 49054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin /* set color for mdp pipe */ 50054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin void setColor(const uint32_t color); 51054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin /* set orientation*/ 52054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin void setTransform(const utils::eTransform& param); 53054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin /* set mdp posision using dim */ 54054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin void setPosition(const utils::Dim& dim); 55054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin /* set visual param */ 56054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin bool setVisualParams(const MetaData_t &metadata); 57054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin /* set pipe type RGB/DMA/VG */ 58054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin void setPipeType(const utils::eMdpPipeType& pType); 59054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin /* commit changes to the overlay "set"*/ 60054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin bool commit(); 61054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin /* Data APIs */ 62054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin /* queue buffer to the overlay */ 63054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin bool queueBuffer(int fd, uint32_t offset); 64054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin /* return cached startup args */ 65054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin const utils::PipeArgs& getArgs() const; 66054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin /* retrieve cached crop data */ 67054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin utils::Dim getCrop() const; 68054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin /* return pipe priority */ 69054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint8_t getPriority() const; 70054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin /* dump the state of the object */ 71054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin void dump() const; 72054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin /* Return the dump in the specified buffer */ 73054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin void getDump(char *buf, size_t len); 74054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin int getPipeId(); 75054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 76054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin static bool validateAndSet(GenericPipe* pipeArray[], const int& count, 77054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin const int& fbFd); 78054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjinprivate: 79054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin int mDpy; 80054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin Ctrl *mCtrl; 81054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin Data *mData; 82054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin}; 83054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 84054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} //namespace overlay 85054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 86054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#endif // OVERLAY_GENERIC_PIPE_H 87