libgralloc: disable UBWC for video encoder usecase

check for target specific system property "video.disable.ubwc"
to disable UBWC for the targets where encoder doesn't
support UBWC color-format.

Change-Id: Ifd050c3b44768870fc74a16e941e8286e3ea0c13
diff --git a/libgralloc/alloc_controller.cpp b/libgralloc/alloc_controller.cpp
index 7411c38..430d7fd 100644
--- a/libgralloc/alloc_controller.cpp
+++ b/libgralloc/alloc_controller.cpp
@@ -413,6 +413,10 @@
 IonController::IonController()
 {
     allocateIonMem();
+
+    char property[PROPERTY_VALUE_MAX];
+    property_get("video.disable.ubwc", property, "0");
+    mDisableUBWCForEncode = atoi(property);
 }
 
 void IonController::allocateIonMem()
@@ -906,6 +910,11 @@
     if (isUBwcFormat(format))
         return true;
 
+    if ((usage & GRALLOC_USAGE_HW_VIDEO_ENCODER) &&
+        gralloc::IAllocController::getInstance()->isDisableUBWCForEncoder()) {
+            return false;
+    }
+
     // Allow UBWC, if an OpenGL client sets UBWC usage flag and GPU plus MDP
     // support the format. OR if a non-OpenGL client like Rotator, sets UBWC
     // usage flag and MDP supports the format.
diff --git a/libgralloc/alloc_controller.h b/libgralloc/alloc_controller.h
index 919e572..8216b0c 100644
--- a/libgralloc/alloc_controller.h
+++ b/libgralloc/alloc_controller.h
@@ -56,6 +56,8 @@
 
     virtual IMemAlloc* getAllocator(int flags) = 0;
 
+    virtual bool isDisableUBWCForEncoder();
+
     virtual ~IAllocController() {};
 
     static IAllocController* getInstance(void);
@@ -72,10 +74,15 @@
 
     virtual IMemAlloc* getAllocator(int flags);
 
+    virtual bool isDisableUBWCForEncoder() {
+        return mDisableUBWCForEncode;
+    }
+
     IonController();
 
     private:
     IonAlloc* mIonAlloc;
+    bool mDisableUBWCForEncode;
     void allocateIonMem();
 
 };