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