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