Camera: Fix for mutual exclusion of color effects and whitebalance.

Apply color effects mono, negative, sepia and aqua only
if white balance manual is not already applied and vice-versa.

CRs-Fixed: 233636

Change-Id: I1b83f923508ee74238dfe6162ed372f1ff3bc9e5
diff --git a/QualcommCameraHardware.cpp b/QualcommCameraHardware.cpp
index da51230..be737fb 100644
--- a/QualcommCameraHardware.cpp
+++ b/QualcommCameraHardware.cpp
@@ -3687,7 +3687,11 @@
 
 status_t QualcommCameraHardware::setEffect(const CameraParameters& params)
 {
+
+    const char *str_wb = mParameters.get(CameraParameters::KEY_WHITE_BALANCE);
+    int32_t value_wb = attr_lookup(whitebalance, sizeof(whitebalance) / sizeof(str_map), str_wb);
     const char *str = params.get(CameraParameters::KEY_EFFECT);
+
     if (str != NULL) {
         int32_t value = attr_lookup(effects, sizeof(effects) / sizeof(str_map), str);
         if (value != NOT_FOUND) {
@@ -3697,10 +3701,20 @@
                 LOGE("Special effect parameter is not supported for this sensor");
                 return NO_ERROR;
             }
-            mParameters.set(CameraParameters::KEY_EFFECT, str);
-            bool ret = native_set_parm(CAMERA_SET_PARM_EFFECT, sizeof(value),
-                                       (void *)&value);
-            return ret ? NO_ERROR : UNKNOWN_ERROR;
+
+           if(((value == CAMERA_EFFECT_MONO) || (value == CAMERA_EFFECT_NEGATIVE)
+           || (value == CAMERA_EFFECT_AQUA) || (value == CAMERA_EFFECT_SEPIA))
+               && (value_wb != CAMERA_WB_AUTO)) {
+               LOGE("Color Effect value will not be set " \
+               "when the whitebalance selected is %s", str_wb);
+               return NO_ERROR;
+           }
+           else {
+               mParameters.set(CameraParameters::KEY_EFFECT, str);
+               bool ret = native_set_parm(CAMERA_SET_PARM_EFFECT, sizeof(value),
+                                           (void *)&value);
+               return ret ? NO_ERROR : UNKNOWN_ERROR;
+          }
         }
     }
     LOGE("Invalid effect value: %s", (str == NULL) ? "NULL" : str);
@@ -3809,18 +3823,30 @@
 
 status_t QualcommCameraHardware::setWhiteBalance(const CameraParameters& params)
 {
-    const char *str = params.get(CameraParameters::KEY_WHITE_BALANCE);
-    if (str != NULL) {
-        int32_t value = attr_lookup(whitebalance, sizeof(whitebalance) / sizeof(str_map), str);
-        if (value != NOT_FOUND) {
-            mParameters.set(CameraParameters::KEY_WHITE_BALANCE, str);
-            bool ret = native_set_parm(CAMERA_SET_PARM_WB, sizeof(value),
-                                       (void *)&value);
-            return ret ? NO_ERROR : UNKNOWN_ERROR;
+
+    const char *str_effect = mParameters.get(CameraParameters::KEY_EFFECT);
+    int32_t value_effect = attr_lookup(effects, sizeof(effects) / sizeof(str_map), str_effect);
+
+    if( (value_effect != CAMERA_EFFECT_MONO) && (value_effect != CAMERA_EFFECT_NEGATIVE)
+    && (value_effect != CAMERA_EFFECT_AQUA) && (value_effect != CAMERA_EFFECT_SEPIA)) {
+        const char *str = params.get(CameraParameters::KEY_WHITE_BALANCE);
+
+        if (str != NULL) {
+            int32_t value = attr_lookup(whitebalance, sizeof(whitebalance) / sizeof(str_map), str);
+            if (value != NOT_FOUND) {
+                mParameters.set(CameraParameters::KEY_WHITE_BALANCE, str);
+                bool ret = native_set_parm(CAMERA_SET_PARM_WB, sizeof(value),
+                                           (void *)&value);
+                return ret ? NO_ERROR : UNKNOWN_ERROR;
+            }
         }
+        LOGE("Invalid whitebalance value: %s", (str == NULL) ? "NULL" : str);
+        return BAD_VALUE;
+    } else {
+            LOGE("Whitebalance value will not be set " \
+            "when the effect selected is %s", str_effect);
+            return NO_ERROR;
     }
-    LOGE("Invalid whitebalance value: %s", (str == NULL) ? "NULL" : str);
-    return BAD_VALUE;
 }
 
 status_t QualcommCameraHardware::setFlash(const CameraParameters& params)