Merge "gralloc/qdMetadata: Add mapSecureBuffer field to metadata struct"
diff --git a/libcopybit/copybit.cpp b/libcopybit/copybit.cpp
index 84d7620..2302d64 100644
--- a/libcopybit/copybit.cpp
+++ b/libcopybit/copybit.cpp
@@ -37,6 +37,7 @@
 
 #include "gralloc_priv.h"
 #include "software_converter.h"
+#include <qdMetaData.h>
 
 #define DEBUG_MDP_ERRORS 1
 
@@ -504,6 +505,13 @@
                 flags |=  MDP_BLIT_NON_CACHED;
             }
 
+            // Set Color Space for MDP to configure CSC matrix
+            req->color_space = ITU_R_601;
+            MetaData_t *metadata = (MetaData_t *)src_hnd->base_metadata;
+            if (metadata && (metadata->operation & UPDATE_COLOR_SPACE)) {
+                req->color_space = metadata->colorSpace;
+            }
+
             set_infos(ctx, req, flags);
             set_image(&req->dst, dst);
             set_image(&req->src, src);
diff --git a/libhwcomposer/hwc_copybit.cpp b/libhwcomposer/hwc_copybit.cpp
index a16ce49..67cca88 100644
--- a/libhwcomposer/hwc_copybit.cpp
+++ b/libhwcomposer/hwc_copybit.cpp
@@ -352,7 +352,8 @@
     }
 
     //Allocate render buffers if they're not allocated
-    if (ctx->mMDP.version != qdutils::MDP_V3_0_4 &&
+    if ((ctx->mMDP.version != qdutils::MDP_V3_0_4 &&
+        ctx->mMDP.version != qdutils::MDP_V3_0_5) &&
             (useCopybitForYUV || useCopybitForRGB)) {
         int ret = allocRenderBuffers(mAlignedWidth,
                                      mAlignedHeight,
@@ -378,7 +379,8 @@
         for (int i = ctx->listStats[dpy].numAppLayers-1; i >= 0 ; i--) {
             layerProp[i].mFlags |= HWC_COPYBIT;
 #ifdef QCOM_BSP
-            if (ctx->mMDP.version == qdutils::MDP_V3_0_4)
+            if (ctx->mMDP.version == qdutils::MDP_V3_0_4 ||
+               ctx->mMDP.version == qdutils::MDP_V3_0_5)
                 list->hwLayers[i].compositionType = HWC_BLIT;
             else
 #endif
@@ -499,7 +501,8 @@
        return true;
     }
     //render buffer
-    if (ctx->mMDP.version == qdutils::MDP_V3_0_4) {
+    if (ctx->mMDP.version == qdutils::MDP_V3_0_4 ||
+        ctx->mMDP.version == qdutils::MDP_V3_0_5) {
         last = (uint32_t)list->numHwLayers - 1;
         renderBuffer = (private_handle_t *)list->hwLayers[last].handle;
     } else {
@@ -574,7 +577,8 @@
         copybit_device_t *copybit = getCopyBitDevice();
         // Async mode
         copybit->flush_get_fence(copybit, fd);
-        if(ctx->mMDP.version == qdutils::MDP_V3_0_4 &&
+        if((ctx->mMDP.version == qdutils::MDP_V3_0_4 ||
+           ctx->mMDP.version == qdutils::MDP_V3_0_5) &&
                 list->hwLayers[last].acquireFenceFd >= 0) {
             close(list->hwLayers[last].acquireFenceFd);
             list->hwLayers[last].acquireFenceFd = -1;
diff --git a/libhwcomposer/hwc_utils.cpp b/libhwcomposer/hwc_utils.cpp
index 7cf390e..c409db4 100644
--- a/libhwcomposer/hwc_utils.cpp
+++ b/libhwcomposer/hwc_utils.cpp
@@ -283,8 +283,10 @@
     // Only MDP copybit is used
     if ((compositionType & (qdutils::COMPOSITION_TYPE_DYN |
             qdutils::COMPOSITION_TYPE_MDP)) &&
+            ((qdutils::MDPVersion::getInstance().getMDPVersion() ==
+            qdutils::MDP_V3_0_4) ||
             (qdutils::MDPVersion::getInstance().getMDPVersion() ==
-            qdutils::MDP_V3_0_4)) {
+            qdutils::MDP_V3_0_5))) {
         ctx->mCopyBit[HWC_DISPLAY_PRIMARY] = new CopyBit(ctx,
                                                          HWC_DISPLAY_PRIMARY);
     }
@@ -2189,7 +2191,8 @@
         if(dpy == HWC_DISPLAY_PRIMARY)
             return false;
     }
-    if(ctx->mMDP.version == qdutils::MDP_V3_0_4)
+    if((ctx->mMDP.version == qdutils::MDP_V3_0_4)
+          ||(ctx->mMDP.version == qdutils::MDP_V3_0_5))
         return false;
     return true;
 }
diff --git a/liboverlay/overlay.cpp b/liboverlay/overlay.cpp
index 85c9b78..96c057f 100644
--- a/liboverlay/overlay.cpp
+++ b/liboverlay/overlay.cpp
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2011-2013, The Linux Foundation. All rights reserved.
+* Copyright (c) 2011-2014, The Linux Foundation. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
@@ -387,7 +387,7 @@
         }
     }
 
-    if (mdpVersion < qdutils::MDSS_V5 && mdpVersion != qdutils::MDP_V3_0_4) {
+    if (mdpVersion < qdutils::MDSS_V5 && mdpVersion > qdutils::MDP_V3_0_5) {
         msmfb_mixer_info_req  req;
         mdp_mixer_info *minfo = NULL;
         char name[64];
diff --git a/liboverlay/overlayMdp.cpp b/liboverlay/overlayMdp.cpp
index ddc40ee..b8bb33e 100644
--- a/liboverlay/overlayMdp.cpp
+++ b/liboverlay/overlayMdp.cpp
@@ -218,6 +218,13 @@
 
 bool MdpCtrl::setVisualParams(const MetaData_t& data) {
     ALOGD_IF(0, "In %s: data.operation = %d", __FUNCTION__, data.operation);
+
+    // Set Color Space for MDP to configure CSC matrix
+    mOVInfo.color_space = ITU_R_601;
+    if (data.operation & UPDATE_COLOR_SPACE) {
+        mOVInfo.color_space = data.colorSpace;
+    }
+
 #ifdef USES_POST_PROCESSING
     bool needUpdate = false;
     /* calculate the data */