Merge "Revert "display: Video Encoding not working""
diff --git a/libhwcomposer/hwc_ad.cpp b/libhwcomposer/hwc_ad.cpp
index c2ea4ee..104ffce 100644
--- a/libhwcomposer/hwc_ad.cpp
+++ b/libhwcomposer/hwc_ad.cpp
@@ -192,6 +192,14 @@
 
     overlay::Writeback *wb = overlay::Writeback::getInstance();
 
+    //Set Security flag on writeback
+    if(isSecureBuffer(hnd)) {
+        if(!wb->setSecure(isSecureBuffer(hnd))) {
+            ALOGE("Failure in setting WB secure flag for ad");
+            return false;
+        }
+    }
+
     if(!wb->configureDpyInfo(hnd->width, hnd->height)) {
         ALOGE("%s: config display failed", __func__);
         mDoable = false;
@@ -209,7 +217,7 @@
     size = getBufferSizeAndDimensions(hnd->width, hnd->height,
                 format, tmpW, tmpH);
 
-    if(!wb->configureMemory(size, isSecureBuffer(hnd))) {
+    if(!wb->configureMemory(size)) {
         ALOGE("%s: config memory failed", __func__);
         mDoable = false;
         return false;
diff --git a/liboverlay/overlayWriteback.cpp b/liboverlay/overlayWriteback.cpp
index 50aa337..fdead74 100644
--- a/liboverlay/overlayWriteback.cpp
+++ b/liboverlay/overlayWriteback.cpp
@@ -75,7 +75,7 @@
 }
 
 //=========== class Writeback =================================================
-Writeback::Writeback() : mXres(0), mYres(0), mOpFmt(-1) {
+Writeback::Writeback() : mXres(0), mYres(0), mOpFmt(-1), mSecure(false) {
     int fbNum = Overlay::getFbForDpy(Overlay::DPY_WRITEBACK);
     if(!utils::openDev(mFd, fbNum, Res::fbPath, O_RDWR)) {
         ALOGE("%s failed to init %s", __func__, Res::fbPath);
@@ -136,8 +136,8 @@
     return true;
 }
 
-bool Writeback::configureMemory(uint32_t size, bool isSecure) {
-    if(!mWbMem.manageMem(size, isSecure)) {
+bool Writeback::configureMemory(uint32_t size) {
+    if(!mWbMem.manageMem(size, mSecure)) {
         ALOGE("%s failed, memory failure", __func__);
         return false;
     }
@@ -215,6 +215,22 @@
     return mOpFmt;
 }
 
+bool Writeback::setSecure(bool isSecure) {
+    if(isSecure != mSecure) {
+        // Call IOCTL to set WB interface as secure
+        struct msmfb_metadata metadata;
+        memset(&metadata, 0 , sizeof(metadata));
+        metadata.op = metadata_op_wb_secure;
+        metadata.data.secure_en = isSecure;
+        if (ioctl(mFd.getFD(), MSMFB_METADATA_SET, &metadata) < 0) {
+            ALOGE("Error setting MDP WB secure");
+            return false;
+        }
+        mSecure = isSecure;
+    }
+    return true;
+}
+
 //static
 
 Writeback *Writeback::getInstance() {
diff --git a/liboverlay/overlayWriteback.h b/liboverlay/overlayWriteback.h
index 9785b64..ebd319f 100644
--- a/liboverlay/overlayWriteback.h
+++ b/liboverlay/overlayWriteback.h
@@ -62,7 +62,7 @@
 public:
     ~Writeback();
     bool configureDpyInfo(int xres, int yres);
-    bool configureMemory(uint32_t size, bool isSecure);
+    bool configureMemory(uint32_t size);
     /* Blocking write. (queue, commit, dequeue)
      * This class will do writeback memory management.
      * This class will call display-commit on writeback mixer.
@@ -87,6 +87,7 @@
     int getFbFd() const { return mFd.getFD(); }
     int getOutputFormat();
     bool setOutputFormat(int mdpFormat);
+    bool setSecure(bool isSecure);
 
     static Writeback* getInstance();
     static void configBegin() { sUsed = false; }
@@ -108,6 +109,7 @@
     int mXres;
     int mYres;
     int mOpFmt;
+    bool mSecure;
 
     static bool sUsed;
     static Writeback *sWb;