liboverlay: Refactor, bug-fixes, upgrade.

* Fix memory leak during copying pipe objects.
* Remove unused / unnecessary code.
* setMemoryId API is merged with queueBuffer.
* setParameter API is setTransform now.
* Rotator upgraded to:
  --Allow different rotator hardware types.
  --Remove dependency on MDP code.
  --Allocate memory only during first playback,
  close when the associated pipe is closed.
* Have single commit implementation.
* Include new format types.
* Remove WAIT and CHANNEL enums and usage. Replace BypassPipe with
  GenericPipe. Client expected to set alignments and parameters.
  Add transform combination enums.
* Allow APIs to be called in any order. Do transform calcs in commit.
  Move ext type setter and getter functions.
* Add calculations for 180 transform.
* Add secure session support in rotator
* Implement all rotations in terms of H flip, V flip and 90 rotation.

Change-Id: I34a9a2a0f1255b3467a0abbaa254d0b584e901ce
diff --git a/liboverlay/overlayMdp.h b/liboverlay/overlayMdp.h
index 29f8fd5..30bda79 100644
--- a/liboverlay/overlayMdp.h
+++ b/liboverlay/overlayMdp.h
@@ -22,12 +22,9 @@
 
 #include "overlayUtils.h"
 #include "mdpWrapper.h"
-#include "overlayRotator.h"
 
 namespace overlay{
 
-class RotatorBase;
-
 /*
 * Mdp Ctrl holds corresponding fd and MDP related struct.
 * It is simple wrapper to MDP services
@@ -40,20 +37,20 @@
     /* dtor close */
     ~MdpCtrl();
 
-    /* Open underlying device using fbnum */
-    bool open(uint32_t fbnum);
+    /* init underlying device using fbnum */
+    bool init(uint32_t fbnum);
 
     /* unset overlay, reset and close fd */
     bool close();
 
-    /* reset and set ov id to -1*/
+    /* reset and set ov id to -1 / MSMFB_NEW_REQUEST */
     void reset();
 
     /* get orient / user_data[0] */
     int getOrient() const;
 
     /* returns session id */
-    int getId() const;
+    int getPipeId() const;
 
     /* returns the fd associated to ctrl*/
     int getFd() const;
@@ -64,29 +61,15 @@
     /* overlay get */
     bool get();
 
-    /* returns flags from mdp structure.
-     * Flags are WAIT/NOWAIT/PIPE SHARED*/
+    /* returns flags from mdp structure */
     int getFlags() const;
 
     /* set flags to mdp structure */
     void setFlags(int f);
 
-    /* code taken from OverlayControlChannel::setOverlayInformation  */
-    bool setInfo(RotatorBase* r,
-            const utils::PipeArgs& args,
-            const utils::ScreenInfo& info);
-
-    /* given whf, update src */
-    void updateSource(RotatorBase* r,
-            const utils::PipeArgs& args,
-            const utils::ScreenInfo& info);
-
     /* set z order */
     void setZ(utils::eZorder z);
 
-    /* set Wait/nowait */
-    void setWait(utils::eWait wait);
-
     /* set isFg flag */
     void setIsFg(utils::eIsFg isFg);
 
@@ -102,8 +85,8 @@
     /* set src whf */
     void setSrcWhf(const utils::Whf& whf);
 
-    /* set source format based on rot info */
-    void setSrcFormat(const utils::Whf& whf);
+    /* adjust source width height format based on rot info */
+    void adjustSrcWhf(const bool& rotUsed);
 
     /* swap src w/h*/
     void swapSrcWH();
@@ -128,7 +111,7 @@
     void setUserData(int v);
 
     /* return true if current overlay is different
-     * than lask known good overlay */
+     * than last known good overlay */
     bool ovChanged() const;
 
     /* save mOVInfo to be last known good ov*/
@@ -137,6 +120,9 @@
     /* restore last known good ov to be the current */
     void restore();
 
+    /* Sets the source total width, height, format */
+    bool setSource(const utils::PipeArgs& pargs);
+
     /*
      * Sets ROI, the unpadded region, for source buffer.
      * Should be called before a setPosition, for small clips.
@@ -144,6 +130,8 @@
      */
     bool setCrop(const utils::Dim& d);
 
+    bool setTransform(const utils::eTransform& orient, const bool& rotUsed);
+
     /* given a dim and w/h, set overlay dim */
     bool setPosition(const utils::Dim& dim, int w, int h);
 
@@ -152,8 +140,19 @@
 
     /* dump state of the object */
     void dump() const;
+
 private:
 
+    /* helper functions for overlayTransform */
+    void doTransform();
+    void overlayTransFlipH();
+    void overlayTransFlipV();
+    void overlayTransRot90();
+
+    utils::eTransform mOrientation; //Holds requested orientation
+    bool mRotUsed; //whether rotator should be used even if requested
+                   //orientation is 0.
+
     /* last good known ov info */
     mdp_overlay   mLkgo;
 
@@ -162,9 +161,6 @@
 
     /* FD for the mdp fbnum */
     OvFD          mFd;
-
-    /* cached size FIXME do we need it? */
-    uint32_t mSize;
 };
 
 
@@ -201,8 +197,8 @@
     /* dtor close*/
     ~MdpData();
 
-    /* open FD */
-    bool open(uint32_t fbnum);
+    /* init FD */
+    bool init(uint32_t fbnum);
 
     /* memset0 the underlying mdp object */
     void reset();
@@ -210,29 +206,23 @@
     /* close fd, and reset */
     bool close();
 
-    /* Set FD / memid */
-    void setMemoryId(int id);
-
     /* set id of mdp data */
-    void setId(int id);
+    void setPipeId(int id);
 
     /* return ses id of data */
-    int getId() const;
+    int getPipeId() const;
 
     /* get underlying fd*/
     int getFd() const;
 
     /* get memory_id */
-    int getMemoryId() const;
-
-    /* set offset in underlying mdp obj */
-    void setOffset(uint32_t o);
+    int getSrcMemoryId() const;
 
     /* calls wrapper play */
-    bool play();
+    bool play(int fd, uint32_t offset);
 
-    /* calls wrapper playWait */
-    bool playWait();
+    /* calls wrapper waitForVsync */
+    bool waitForVsync();
 
     /* dump state of the object */
     void dump() const;
@@ -247,21 +237,22 @@
 
 //--------------Inlines---------------------------------
 namespace utils {
-    inline bool openDev(OvFD& fd, int fb,
-            const char* const s,
-            int flags) {
-        return overlay::open(fd, fb, Res::devTemplate, O_RDWR);
-    }
+inline bool openDev(OvFD& fd, int fbnum,
+        const char* const devpath,
+        int flags) {
+    return overlay::open(fd, fbnum, devpath, flags);
 }
-
-template <class T>
-        inline void init(T& t) {
-            memset(&t, 0, sizeof(T));
-        }
+}
+namespace {
+// just a helper func for common operations x-(y+z)
+int compute(uint32_t x, uint32_t y, uint32_t z) {
+    return x-(y+z);
+}
+}
 
 /////   MdpCtrl  //////
 
-inline MdpCtrl::MdpCtrl() : mSize(0) {
+inline MdpCtrl::MdpCtrl() {
     reset();
 }
 
@@ -273,7 +264,7 @@
     return getUserData();
 }
 
-inline int MdpCtrl::getId() const {
+inline int MdpCtrl::getPipeId() const {
     return mOVInfo.id;
 }
 
@@ -293,10 +284,6 @@
     mOVInfo.z_order = z;
 }
 
-inline void MdpCtrl::setWait(overlay::utils::eWait wait) {
-    mOVInfo.flags = utils::setWait(wait, mOVInfo.flags);
-}
-
 inline void MdpCtrl::setIsFg(overlay::utils::eIsFg isFg) {
     mOVInfo.is_fg = isFg;
 }
@@ -310,27 +297,25 @@
 }
 
 inline void MdpCtrl::save() {
-    if(static_cast<ssize_t>(mOVInfo.id) == -1) {
+    if(static_cast<ssize_t>(mOVInfo.id) == MSMFB_NEW_REQUEST) {
         ALOGE("MdpCtrl current ov has id -1, will not save");
-        // FIXME dump both?
         return;
     }
     mLkgo = mOVInfo;
 }
 
 inline void MdpCtrl::restore() {
-    if(static_cast<ssize_t>(mLkgo.id) == -1) {
+    if(static_cast<ssize_t>(mLkgo.id) == MSMFB_NEW_REQUEST) {
         ALOGE("MdpCtrl Lkgo ov has id -1, will not restore");
-        // FIXME dump both?
         return;
     }
     mOVInfo = mLkgo;
 }
 
 inline overlay::utils::Whf MdpCtrl::getSrcWhf() const {
-    return utils::Whf(mOVInfo.src.width,
-            mOVInfo.src.height,
-            mOVInfo.src.format);
+    return utils::Whf(  mOVInfo.src.width,
+                        mOVInfo.src.height,
+                        mOVInfo.src.format);
 }
 
 inline void MdpCtrl::setSrcWhf(const overlay::utils::Whf& whf) {
@@ -340,10 +325,10 @@
 }
 
 inline overlay::utils::Dim MdpCtrl::getSrcRectDim() const {
-    return utils::Dim(mOVInfo.src_rect.x,
-            mOVInfo.src_rect.y,
-            mOVInfo.src_rect.w,
-            mOVInfo.src_rect.h);
+    return utils::Dim(  mOVInfo.src_rect.x,
+                        mOVInfo.src_rect.y,
+                        mOVInfo.src_rect.w,
+                        mOVInfo.src_rect.h);
 }
 
 inline void MdpCtrl::setSrcRectDim(const overlay::utils::Dim d) {
@@ -354,10 +339,10 @@
 }
 
 inline overlay::utils::Dim MdpCtrl::getDstRectDim() const {
-    return utils::Dim(mOVInfo.dst_rect.x,
-            mOVInfo.dst_rect.y,
-            mOVInfo.dst_rect.w,
-            mOVInfo.dst_rect.h);
+    return utils::Dim(  mOVInfo.dst_rect.x,
+                        mOVInfo.dst_rect.y,
+                        mOVInfo.dst_rect.w,
+                        mOVInfo.dst_rect.h);
 }
 
 inline void MdpCtrl::setDstRectDim(const overlay::utils::Dim d) {
@@ -379,14 +364,46 @@
         mOVInfo.flags &= ~MDP_SOURCE_ROTATED_90;
 }
 
-
 inline void MdpCtrl::swapSrcWH() {
     utils::swap(mOVInfo.src.width,
-            mOVInfo.src.height); }
+            mOVInfo.src.height);
+}
 
 inline void MdpCtrl::swapSrcRectWH() {
-    utils::swap(mOVInfo.src_rect.h,
-            mOVInfo.src_rect.w); }
+    utils::swap(mOVInfo.src_rect.w,
+            mOVInfo.src_rect.h);
+}
+
+inline void MdpCtrl::overlayTransFlipH()
+{
+    utils::Dim d   = getSrcRectDim();
+    utils::Whf whf = getSrcWhf();
+    d.x = compute(whf.w, d.x, d.w);
+    setSrcRectDim(d);
+}
+
+inline void MdpCtrl::overlayTransFlipV()
+{
+    utils::Dim d   = getSrcRectDim();
+    utils::Whf whf = getSrcWhf();
+    d.y = compute(whf.h, d.y, d.h);
+    setSrcRectDim(d);
+}
+
+inline void MdpCtrl::overlayTransRot90()
+{
+    utils::Dim d   = getSrcRectDim();
+    utils::Whf whf = getSrcWhf();
+    int tmp = d.x;
+    d.x = compute(whf.h,
+            d.y,
+            d.h);
+    d.y = tmp;
+    setSrcRectDim(d);
+    swapSrcWH();
+    swapSrcRectWH();
+}
+
 
 ///////    MdpCtrl3D //////
 
@@ -434,10 +451,10 @@
 
 inline MdpData::~MdpData() { close(); }
 
-inline bool MdpData::open(uint32_t fbnum) {
-    // FD open
-    if(!utils::openDev(mFd, fbnum, Res::devTemplate, O_RDWR)){
-        ALOGE("Ctrl failed to open fbnum=%d", fbnum);
+inline bool MdpData::init(uint32_t fbnum) {
+    // FD init
+    if(!utils::openDev(mFd, fbnum, Res::fbPath, O_RDWR)){
+        ALOGE("Ctrl failed to init fbnum=%d", fbnum);
         return false;
     }
     return true;
@@ -457,28 +474,29 @@
     return true;
 }
 
-inline void MdpData::setMemoryId(int id) { mOvData.data.memory_id = id; }
-inline int MdpData::getMemoryId() const { return mOvData.data.memory_id; }
+inline int MdpData::getSrcMemoryId() const { return mOvData.data.memory_id; }
 
-inline void MdpData::setId(int id) { mOvData.id = id; }
+inline void MdpData::setPipeId(int id) { mOvData.id = id; }
 
-inline int MdpData::getId() const { return mOvData.id; }
+inline int MdpData::getPipeId() const { return mOvData.id; }
 
 inline int MdpData::getFd() const { return mFd.getFD(); }
 
-inline void MdpData::setOffset(uint32_t o) { mOvData.data.offset = o; }
-
-inline bool MdpData::play() {
+inline bool MdpData::play(int fd, uint32_t offset) {
+    mOvData.data.memory_id = fd;
+    mOvData.data.offset = offset;
     if(!mdp_wrapper::play(mFd.getFD(), mOvData)){
         ALOGE("MdpData failed to play");
+        dump();
         return false;
     }
     return true;
 }
 
-inline bool MdpData::playWait() {
-    if(!mdp_wrapper::playWait(mFd.getFD(), mOvData)){
-        ALOGE("MdpData failed to playWait");
+inline bool MdpData::waitForVsync() {
+    if(!mdp_wrapper::waitForVsync(mFd.getFD(), mOvData)){
+        ALOGE("%s failed", __FUNCTION__);
+        dump();
         return false;
     }
     return true;