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 */