Merge "overlay: Request specific pipe type"
diff --git a/liboverlay/overlay.cpp b/liboverlay/overlay.cpp
index fe7bd2c..de880c6 100644
--- a/liboverlay/overlay.cpp
+++ b/liboverlay/overlay.cpp
@@ -346,20 +346,8 @@
         utils::eDest dest) {
     validate((int)dest);
 
-    PipeArgs newArgs(args);
-    if(PipeBook::getPipeType(dest) == OV_MDP_PIPE_VG) {
-        setMdpFlags(newArgs.mdpFlags, OV_MDP_PIPE_SHARE);
-    } else {
-        clearMdpFlags(newArgs.mdpFlags, OV_MDP_PIPE_SHARE);
-    }
-
-    if(PipeBook::getPipeType(dest) == OV_MDP_PIPE_DMA) {
-        setMdpFlags(newArgs.mdpFlags, OV_MDP_PIPE_FORCE_DMA);
-    } else {
-        clearMdpFlags(newArgs.mdpFlags, OV_MDP_PIPE_FORCE_DMA);
-    }
-
-    mPipeBook[dest].mPipe->setSource(newArgs);
+    setPipeType(dest, PipeBook::getPipeType(dest));
+    mPipeBook[dest].mPipe->setSource(args);
 }
 
 void Overlay::setVisualParams(const MetaData_t& metadata, utils::eDest dest) {
@@ -367,6 +355,11 @@
     mPipeBook[dest].mPipe->setVisualParams(metadata);
 }
 
+void Overlay::setPipeType(utils::eDest pipeIndex,
+        const utils::eMdpPipeType pType) {
+    mPipeBook[pipeIndex].mPipe->setPipeType(pType);
+}
+
 Overlay* Overlay::getInstance() {
     if(sInstance == NULL) {
         sInstance = new Overlay();
diff --git a/liboverlay/overlay.h b/liboverlay/overlay.h
index 99186db..c8f68b0 100644
--- a/liboverlay/overlay.h
+++ b/liboverlay/overlay.h
@@ -179,6 +179,8 @@
     static void initScalar();
     /* Destroys the scalar object using libscale.so */
     static void destroyScalar();
+    /* Sets the pipe type RGB/VG/DMA*/
+    void setPipeType(utils::eDest pipeIndex, const utils::eMdpPipeType pType);
 
     /* Just like a Facebook for pipes, but much less profile info */
     struct PipeBook {
diff --git a/liboverlay/overlayCtrlData.h b/liboverlay/overlayCtrlData.h
index 51209a7..5cadebd 100644
--- a/liboverlay/overlayCtrlData.h
+++ b/liboverlay/overlayCtrlData.h
@@ -65,6 +65,8 @@
     void setPosition(const utils::Dim& dim);
     /* set mdp visual params using metadata */
     bool setVisualParams(const MetaData_t &metadata);
+    /* set pipe type RGB/DMA/VG */
+    void setPipeType(const utils::eMdpPipeType& pType);
     /* mdp set overlay/commit changes */
     bool commit();
 
@@ -159,6 +161,11 @@
     return true;
 }
 
+inline void Ctrl::setPipeType(const utils::eMdpPipeType& pType)
+{
+    mMdp->setPipeType(pType);
+}
+
 inline void Ctrl::dump() const {
     ALOGE("== Dump Ctrl start ==");
     mMdp->dump();
diff --git a/liboverlay/overlayMdp.cpp b/liboverlay/overlayMdp.cpp
index c4427ae..4622d16 100644
--- a/liboverlay/overlayMdp.cpp
+++ b/liboverlay/overlayMdp.cpp
@@ -120,6 +120,23 @@
     mOrientation = static_cast<utils::eTransform>(rot);
 }
 
+void MdpCtrl::setPipeType(const utils::eMdpPipeType& pType){
+    switch((int) pType){
+        case utils::OV_MDP_PIPE_RGB:
+            mOVInfo.pipe_type = PIPE_TYPE_RGB;
+            break;
+        case utils::OV_MDP_PIPE_VG:
+            mOVInfo.pipe_type = PIPE_TYPE_VIG;
+            break;
+        case utils::OV_MDP_PIPE_DMA:
+            mOVInfo.pipe_type = PIPE_TYPE_DMA;
+            break;
+        default:
+            mOVInfo.pipe_type = PIPE_TYPE_AUTO;
+            break;
+    }
+}
+
 void MdpCtrl::doTransform() {
     setRotationFlags();
     utils::Whf whf = getSrcWhf();
diff --git a/liboverlay/overlayMdp.h b/liboverlay/overlayMdp.h
index d312c2e..f7d64f0 100644
--- a/liboverlay/overlayMdp.h
+++ b/liboverlay/overlayMdp.h
@@ -84,6 +84,8 @@
     uint8_t getPriority() const;
     /* setVisualParam */
     bool setVisualParams(const MetaData_t& data);
+    /* sets pipe type RGB/DMA/VG */
+    void setPipeType(const utils::eMdpPipeType& pType);
 
     static bool validateAndSet(MdpCtrl* mdpCtrlArray[], const int& count,
             const int& fbFd);
diff --git a/liboverlay/pipes/overlayGenPipe.cpp b/liboverlay/pipes/overlayGenPipe.cpp
index 303cd34..41cb271 100644
--- a/liboverlay/pipes/overlayGenPipe.cpp
+++ b/liboverlay/pipes/overlayGenPipe.cpp
@@ -68,6 +68,10 @@
         return mCtrl->setVisualParams(metadata);
 }
 
+void GenericPipe::setPipeType(const utils::eMdpPipeType& pType) {
+    mCtrl->setPipeType(pType);
+}
+
 bool GenericPipe::commit() {
     bool ret = false;
     int downscale_factor = utils::ROT_DS_NONE;
diff --git a/liboverlay/pipes/overlayGenPipe.h b/liboverlay/pipes/overlayGenPipe.h
index ee6f9ad..c7e16f3 100644
--- a/liboverlay/pipes/overlayGenPipe.h
+++ b/liboverlay/pipes/overlayGenPipe.h
@@ -54,6 +54,8 @@
     void setPosition(const utils::Dim& dim);
     /* set visual param */
     bool setVisualParams(const MetaData_t &metadata);
+    /* set pipe type RGB/DMA/VG */
+    void setPipeType(const utils::eMdpPipeType& pType);
     /* commit changes to the overlay "set"*/
     bool commit();
     /* Data APIs */