overlayMdp.h revision 29a26818d7294055539167b2fbfdaa168bcf725c
129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/*
229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* Copyright (C) 2008 The Android Open Source Project
329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* Copyright (c) 2010-2012, Code Aurora Forum. All rights reserved.
429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed*
529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* Licensed under the Apache License, Version 2.0 (the "License");
629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* you may not use this file except in compliance with the License.
729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* You may obtain a copy of the License at
829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed*
929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed*      http://www.apache.org/licenses/LICENSE-2.0
1029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed*
1129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* Unless required by applicable law or agreed to in writing, software
1229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* distributed under the License is distributed on an "AS IS" BASIS,
1329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* See the License for the specific language governing permissions and
1529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* limitations under the License.
1629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed*/
1729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
1829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#ifndef OVERLAY_MDP_H
1929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#define OVERLAY_MDP_H
2029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
2129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include <linux/msm_mdp.h>
2229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
2329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include "overlayUtils.h"
2429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include "mdpWrapper.h"
2529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include "overlayRotator.h"
2629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
2729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmednamespace overlay{
2829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
2929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedclass RotatorBase;
3029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
3129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/*
3229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* Mdp Ctrl holds corresponding fd and MDP related struct.
3329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* It is simple wrapper to MDP services
3429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* */
3529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedclass MdpCtrl {
3629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedpublic:
3729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* ctor reset */
3829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    explicit MdpCtrl();
3929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
4029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* dtor close */
4129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    ~MdpCtrl();
4229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
4329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* Open underlying device using fbnum */
4429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    bool open(uint32_t fbnum);
4529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
4629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* unset overlay, reset and close fd */
4729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    bool close();
4829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
4929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* reset and set ov id to -1*/
5029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    void reset();
5129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
5229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* get orient / user_data[0] */
5329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    int getOrient() const;
5429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
5529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* returns session id */
5629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    int getId() const;
5729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
5829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* returns the fd associated to ctrl*/
5929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    int getFd() const;
6029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
6129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* Get screen info. out: info*/
6229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    bool getScreenInfo(utils::ScreenInfo& info);
6329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
6429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* overlay get */
6529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    bool get();
6629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
6729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* returns flags from mdp structure.
6829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * Flags are WAIT/NOWAIT/PIPE SHARED*/
6929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    int getFlags() const;
7029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
7129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* set flags to mdp structure */
7229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    void setFlags(int f);
7329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
7429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* code taken from OverlayControlChannel::setOverlayInformation  */
7529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    bool setInfo(RotatorBase* r,
7629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed            const utils::PipeArgs& args,
7729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed            const utils::ScreenInfo& info);
7829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
7929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* given whf, update src */
8029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    void updateSource(RotatorBase* r,
8129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed            const utils::PipeArgs& args,
8229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed            const utils::ScreenInfo& info);
8329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
8429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* set z order */
8529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    void setZ(utils::eZorder z);
8629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
8729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* set Wait/nowait */
8829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    void setWait(utils::eWait wait);
8929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
9029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* set isFg flag */
9129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    void setIsFg(utils::eIsFg isFg);
9229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
9329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* calls overlay set
9429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * Set would always consult last good known ov instance.
9529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * Only if it is different, set would actually exectue ioctl.
9629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * On a sucess ioctl. last good known ov instance is updated */
9729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    bool set();
9829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
9929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* return a copy of src whf*/
10029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    utils::Whf getSrcWhf() const;
10129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
10229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* set src whf */
10329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    void setSrcWhf(const utils::Whf& whf);
10429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
10529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* set source format based on rot info */
10629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    void setSrcFormat(const utils::Whf& whf);
10729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
10829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* swap src w/h*/
10929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    void swapSrcWH();
11029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
11129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* swap src rect w/h */
11229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    void swapSrcRectWH();
11329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
11429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* returns a copy to src rect dim */
11529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    utils::Dim getSrcRectDim() const;
11629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
11729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* set src/dst rect dim */
11829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    void setSrcRectDim(const utils::Dim d);
11929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    void setDstRectDim(const utils::Dim d);
12029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
12129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* returns a copy ro dst rect dim */
12229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    utils::Dim getDstRectDim() const;
12329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
12429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* returns user_data[0]*/
12529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    int getUserData() const;
12629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
12729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* sets user_data[0] */
12829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    void setUserData(int v);
12929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
13029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* return true if current overlay is different
13129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * than lask known good overlay */
13229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    bool ovChanged() const;
13329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
13429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* save mOVInfo to be last known good ov*/
13529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    void save();
13629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
13729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* restore last known good ov to be the current */
13829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    void restore();
13929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
14029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /*
14129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * Sets ROI, the unpadded region, for source buffer.
14229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * Should be called before a setPosition, for small clips.
14329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * Dim - ROI dimensions.
14429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     */
14529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    bool setCrop(const utils::Dim& d);
14629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
14729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* given a dim and w/h, set overlay dim */
14829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    bool setPosition(const utils::Dim& dim, int w, int h);
14929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
15029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* using user_data, sets/unsets roationvalue in mdp flags */
15129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    void setRotationFlags();
15229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
15329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* dump state of the object */
15429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    void dump() const;
15529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedprivate:
15629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
15729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* last good known ov info */
15829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    mdp_overlay   mLkgo;
15929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
16029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* Actual overlay mdp structure */
16129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    mdp_overlay   mOVInfo;
16229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
16329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* FD for the mdp fbnum */
16429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    OvFD          mFd;
16529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
16629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* cached size FIXME do we need it? */
16729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    uint32_t mSize;
16829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed};
16929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
17029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
17129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* MDP 3D related ctrl */
17229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedclass MdpCtrl3D {
17329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedpublic:
17429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* ctor reset data */
17529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    MdpCtrl3D();
17629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* calls MSMFB_OVERLAY_3D */
17729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    bool close();
17829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* set w/h. format is ignored*/
17929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    void setWh(const utils::Whf& whf);
18029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* set is_3d calls MSMFB_OVERLAY_3D */
18129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    bool useVirtualFB();
18229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* set fd to be used in ioctl */
18329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    void setFd(int fd);
18429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* dump */
18529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    void dump() const;
18629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedprivate:
18729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* reset */
18829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    void reset();
18929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* actual MSM 3D info */
19029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    msmfb_overlay_3d m3DOVInfo;
19129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* FD for the mdp 3D */
19229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    OvFD mFd;
19329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed};
19429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
19529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* MDP data */
19629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedclass MdpData {
19729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedpublic:
19829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* ctor reset data */
19929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    explicit MdpData();
20029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
20129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* dtor close*/
20229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    ~MdpData();
20329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
20429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* open FD */
20529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    bool open(uint32_t fbnum);
20629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
20729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* memset0 the underlying mdp object */
20829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    void reset();
20929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
21029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* close fd, and reset */
21129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    bool close();
21229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
21329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* Set FD / memid */
21429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    void setMemoryId(int id);
21529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
21629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* set id of mdp data */
21729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    void setId(int id);
21829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
21929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* return ses id of data */
22029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    int getId() const;
22129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
22229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* get underlying fd*/
22329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    int getFd() const;
22429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
22529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* get memory_id */
22629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    int getMemoryId() const;
22729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
22829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* set offset in underlying mdp obj */
22929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    void setOffset(uint32_t o);
23029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
23129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* calls wrapper play */
23229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    bool play();
23329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
23429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* calls wrapper playWait */
23529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    bool playWait();
23629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
23729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* dump state of the object */
23829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    void dump() const;
23929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedprivate:
24029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
24129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* actual overlay mdp data */
24229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    msmfb_overlay_data mOvData;
24329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
24429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* fd to mdp fbnum */
24529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    OvFD mFd;
24629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed};
24729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
24829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed//--------------Inlines---------------------------------
24929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmednamespace utils {
25029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    inline bool openDev(OvFD& fd, int fb,
25129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed            const char* const s,
25229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed            int flags) {
25329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed        return overlay::open(fd, fb, Res::devTemplate, O_RDWR);
25429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    }
25529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
25629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
25729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedtemplate <class T>
25829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed        inline void init(T& t) {
25929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed            memset(&t, 0, sizeof(T));
26029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed        }
26129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
26229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/////   MdpCtrl  //////
26329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
26429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline MdpCtrl::MdpCtrl() : mSize(0) {
26529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    reset();
26629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
26729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
26829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline MdpCtrl::~MdpCtrl() {
26929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    close();
27029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
27129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
27229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline int MdpCtrl::getOrient() const {
27329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    return getUserData();
27429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
27529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
27629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline int MdpCtrl::getId() const {
27729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    return mOVInfo.id;
27829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
27929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
28029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline int MdpCtrl::getFd() const {
28129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    return mFd.getFD();
28229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
28329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
28429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline int MdpCtrl::getFlags() const {
28529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    return mOVInfo.flags;
28629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
28729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
28829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpCtrl::setFlags(int f) {
28929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    mOVInfo.flags = f;
29029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
29129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
29229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpCtrl::setZ(overlay::utils::eZorder z) {
29329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    mOVInfo.z_order = z;
29429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
29529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
29629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpCtrl::setWait(overlay::utils::eWait wait) {
29729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    mOVInfo.flags = utils::setWait(wait, mOVInfo.flags);
29829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
29929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
30029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpCtrl::setIsFg(overlay::utils::eIsFg isFg) {
30129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    mOVInfo.is_fg = isFg;
30229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
30329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
30429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline bool MdpCtrl::ovChanged() const {
30529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    // 0 means same
30629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    if(0 == ::memcmp(&mOVInfo, &mLkgo, sizeof (mdp_overlay))) {
30729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed        return false;
30829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    }
30929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    return true;
31029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
31129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
31229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpCtrl::save() {
31329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    if(static_cast<ssize_t>(mOVInfo.id) == -1) {
31429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed        ALOGE("MdpCtrl current ov has id -1, will not save");
31529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed        // FIXME dump both?
31629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed        return;
31729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    }
31829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    mLkgo = mOVInfo;
31929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
32029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
32129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpCtrl::restore() {
32229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    if(static_cast<ssize_t>(mLkgo.id) == -1) {
32329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed        ALOGE("MdpCtrl Lkgo ov has id -1, will not restore");
32429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed        // FIXME dump both?
32529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed        return;
32629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    }
32729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    mOVInfo = mLkgo;
32829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
32929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
33029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline overlay::utils::Whf MdpCtrl::getSrcWhf() const {
33129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    return utils::Whf(mOVInfo.src.width,
33229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed            mOVInfo.src.height,
33329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed            mOVInfo.src.format);
33429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
33529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
33629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpCtrl::setSrcWhf(const overlay::utils::Whf& whf) {
33729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    mOVInfo.src.width  = whf.w;
33829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    mOVInfo.src.height = whf.h;
33929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    mOVInfo.src.format = whf.format;
34029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
34129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
34229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline overlay::utils::Dim MdpCtrl::getSrcRectDim() const {
34329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    return utils::Dim(mOVInfo.src_rect.x,
34429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed            mOVInfo.src_rect.y,
34529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed            mOVInfo.src_rect.w,
34629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed            mOVInfo.src_rect.h);
34729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
34829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
34929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpCtrl::setSrcRectDim(const overlay::utils::Dim d) {
35029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    mOVInfo.src_rect.x = d.x;
35129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    mOVInfo.src_rect.y = d.y;
35229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    mOVInfo.src_rect.w = d.w;
35329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    mOVInfo.src_rect.h = d.h;
35429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
35529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
35629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline overlay::utils::Dim MdpCtrl::getDstRectDim() const {
35729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    return utils::Dim(mOVInfo.dst_rect.x,
35829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed            mOVInfo.dst_rect.y,
35929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed            mOVInfo.dst_rect.w,
36029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed            mOVInfo.dst_rect.h);
36129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
36229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
36329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpCtrl::setDstRectDim(const overlay::utils::Dim d) {
36429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    mOVInfo.dst_rect.x = d.x;
36529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    mOVInfo.dst_rect.y = d.y;
36629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    mOVInfo.dst_rect.w = d.w;
36729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    mOVInfo.dst_rect.h = d.h;
36829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
36929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
37029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline int MdpCtrl::getUserData() const { return mOVInfo.user_data[0]; }
37129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
37229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpCtrl::setUserData(int v) { mOVInfo.user_data[0] = v; }
37329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
37429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpCtrl::setRotationFlags() {
37529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    const int u = getUserData();
37629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    if (u == MDP_ROT_90 || u == MDP_ROT_270)
37729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed        mOVInfo.flags |= MDP_SOURCE_ROTATED_90;
37829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    else
37929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed        mOVInfo.flags &= ~MDP_SOURCE_ROTATED_90;
38029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
38129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
38229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
38329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpCtrl::swapSrcWH() {
38429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    utils::swap(mOVInfo.src.width,
38529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed            mOVInfo.src.height); }
38629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
38729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpCtrl::swapSrcRectWH() {
38829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    utils::swap(mOVInfo.src_rect.h,
38929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed            mOVInfo.src_rect.w); }
39029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
39129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed///////    MdpCtrl3D //////
39229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
39329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline MdpCtrl3D::MdpCtrl3D() { reset(); }
39429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline bool MdpCtrl3D::close() {
39529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    if (m3DOVInfo.is_3d) {
39629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed        m3DOVInfo.is_3d = 0;
39729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed        if(!mdp_wrapper::set3D(mFd.getFD(), m3DOVInfo)) {
39829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed            ALOGE("MdpCtrl3D close failed set3D with 0");
39929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed            return false;
40029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed        }
40129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    }
40229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    reset();
40329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    return true;
40429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
40529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpCtrl3D::reset() {
40629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    utils::memset0(m3DOVInfo);
40729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
40829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
40929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpCtrl3D::setFd(int fd) {
41029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    mFd.copy(fd);
41129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    OVASSERT(mFd.valid(), "MdpCtrl3D setFd, FD should be valid");
41229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
41329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
41429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpCtrl3D::setWh(const utils::Whf& whf) {
41529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    // ignore fmt. Needed for useVirtualFB callflow
41629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    m3DOVInfo.width = whf.w;
41729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    m3DOVInfo.height = whf.h;
41829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
41929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
42029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline bool MdpCtrl3D::useVirtualFB() {
42129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    if(!m3DOVInfo.is_3d) {
42229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed        m3DOVInfo.is_3d = 1;
42329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed        if(!mdp_wrapper::set3D(mFd.getFD(), m3DOVInfo)) {
42429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed            ALOGE("MdpCtrl3D close failed set3D with 0");
42529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed            return false;
42629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed        }
42729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    }
42829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    return true;
42929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
43029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
43129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed///////    MdpData   //////
43229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
43329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline MdpData::MdpData() { reset(); }
43429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
43529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline MdpData::~MdpData() { close(); }
43629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
43729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline bool MdpData::open(uint32_t fbnum) {
43829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    // FD open
43929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    if(!utils::openDev(mFd, fbnum, Res::devTemplate, O_RDWR)){
44029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed        ALOGE("Ctrl failed to open fbnum=%d", fbnum);
44129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed        return false;
44229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    }
44329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    return true;
44429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
44529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
44629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpData::reset() {
44729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    overlay::utils::memset0(mOvData);
44829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    mOvData.data.memory_id = -1;
44929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
45029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
45129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline bool MdpData::close() {
45229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    if(-1 == mOvData.data.memory_id) return true;
45329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    reset();
45429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    if(!mFd.close()) {
45529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed        return false;
45629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    }
45729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    return true;
45829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
45929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
46029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpData::setMemoryId(int id) { mOvData.data.memory_id = id; }
46129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline int MdpData::getMemoryId() const { return mOvData.data.memory_id; }
46229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
46329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpData::setId(int id) { mOvData.id = id; }
46429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
46529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline int MdpData::getId() const { return mOvData.id; }
46629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
46729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline int MdpData::getFd() const { return mFd.getFD(); }
46829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
46929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline void MdpData::setOffset(uint32_t o) { mOvData.data.offset = o; }
47029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
47129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline bool MdpData::play() {
47229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    if(!mdp_wrapper::play(mFd.getFD(), mOvData)){
47329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed        ALOGE("MdpData failed to play");
47429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed        return false;
47529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    }
47629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    return true;
47729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
47829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
47929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedinline bool MdpData::playWait() {
48029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    if(!mdp_wrapper::playWait(mFd.getFD(), mOvData)){
48129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed        ALOGE("MdpData failed to playWait");
48229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed        return false;
48329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    }
48429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    return true;
48529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
48629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
48729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} // overlay
48829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
48929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#endif // OVERLAY_MDP_H
490