diff --git a/libqdmetadata/qdMetaData.cpp b/libqdmetadata/qdMetaData.cpp
index 6434ea3..fb32095 100644
--- a/libqdmetadata/qdMetaData.cpp
+++ b/libqdmetadata/qdMetaData.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2020, 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
@@ -35,6 +35,61 @@
 #include <gralloc_priv.h>
 #include "qdMetaData.h"
 
+static int colorMetaDataToColorSpace(ColorMetaData in, ColorSpace_t *out) {
+  if (in.colorPrimaries == ColorPrimaries_BT601_6_525 ||
+      in.colorPrimaries == ColorPrimaries_BT601_6_625) {
+    if (in.range == Range_Full) {
+      *out = ITU_R_601_FR;
+    } else {
+      *out = ITU_R_601;
+    }
+  } else if (in.colorPrimaries == ColorPrimaries_BT2020) {
+    if (in.range == Range_Full) {
+      *out = ITU_R_2020_FR;
+    } else {
+      *out = ITU_R_2020;
+    }
+  } else if (in.colorPrimaries == ColorPrimaries_BT709_5) {
+    *out = ITU_R_709;
+  } else {
+    ALOGE("Cannot convert ColorMetaData to ColorSpace_t");
+    return -1;
+  }
+
+  return 0;
+}
+
+static int colorSpaceToColorMetadata(ColorSpace_t in, ColorMetaData *out) {
+  out->transfer = Transfer_sRGB;
+  switch (in) {
+    case ITU_R_601:
+      out->colorPrimaries = ColorPrimaries_BT601_6_525;
+      out->range = Range_Limited;
+      break;
+    case ITU_R_601_FR:
+      out->colorPrimaries = ColorPrimaries_BT601_6_525;
+      out->range = Range_Full;
+      break;
+    case ITU_R_709:
+      out->colorPrimaries = ColorPrimaries_BT709_5;
+      out->range = Range_Limited;
+      break;
+    case ITU_R_2020:
+      out->colorPrimaries = ColorPrimaries_BT2020;
+      out->range = Range_Limited;
+      break;
+    case ITU_R_2020_FR:
+      out->colorPrimaries = ColorPrimaries_BT2020;
+      out->range = Range_Full;
+      break;
+    default:
+      ALOGE("Cannot convert ColorSpace_t to ColorMetaData");
+      return -1;
+      break;
+  }
+
+  return 0;
+}
 unsigned long getMetaDataSize() {
     return static_cast<unsigned long>(ROUND_UP_PAGESIZE(sizeof(MetaData_t)));
 }
@@ -102,9 +157,13 @@
         case UPDATE_REFRESH_RATE:
             data->refreshrate = *((float *)param);
             break;
-        case UPDATE_COLOR_SPACE:
-            data->colorSpace = *((ColorSpace_t *)param);
-            break;
+        case UPDATE_COLOR_SPACE: {
+          ColorMetaData color;
+          if (!colorSpaceToColorMetadata(*((ColorSpace_t *)param), &color)) {
+            data->color = color;
+          }
+          break;
+        }
         case MAP_SECURE_BUFFER:
             data->mapSecureBuffer = *((int32_t *)param);
             break;
@@ -114,15 +173,9 @@
         case LINEAR_FORMAT:
             data->linearFormat = *((uint32_t *)param);
             break;
-        case SET_IGC:
-            data->igc = *((IGC_t *)param);
-            break;
         case SET_SINGLE_BUFFER_MODE:
             data->isSingleBufferMode = *((uint32_t *)param);
             break;
-        case SET_S3D_COMP:
-            data->s3dComp = *((S3DGpuComp_t *)param);
-            break;
         case SET_VT_TIMESTAMP:
             data->vtTimeStamp = *((uint64_t *)param);
             break;
@@ -205,10 +258,6 @@
         return -EINVAL;
     data->operation &= ~paramType;
     switch (paramType) {
-        case SET_S3D_COMP:
-            data->s3dComp.displayId = -1;
-            data->s3dComp.s3dMode = 0;
-            break;
         case SET_VIDEO_PERF_MODE:
             data->isVideoPerfMode = 0;
             break;
@@ -264,7 +313,10 @@
             break;
         case GET_COLOR_SPACE:
             if (data->operation & UPDATE_COLOR_SPACE) {
-                *((ColorSpace_t *)param) = data->colorSpace;
+              ColorSpace_t color_space;
+              if (!colorMetaDataToColorSpace(data->color, &color_space)) {
+                *((ColorSpace_t *)param) = color_space;
+              }
                 ret = 0;
             }
             break;
@@ -286,24 +338,12 @@
                 ret = 0;
             }
             break;
-        case GET_IGC:
-            if (data->operation & SET_IGC) {
-                *((IGC_t *)param) = data->igc;
-                ret = 0;
-            }
-            break;
         case GET_SINGLE_BUFFER_MODE:
             if (data->operation & SET_SINGLE_BUFFER_MODE) {
                 *((uint32_t *)param) = data->isSingleBufferMode;
                 ret = 0;
             }
             break;
-        case GET_S3D_COMP:
-            if (data->operation & SET_S3D_COMP) {
-                *((S3DGpuComp_t *)param) = data->s3dComp;
-                ret = 0;
-            }
-            break;
         case GET_VT_TIMESTAMP:
             if (data->operation & SET_VT_TIMESTAMP) {
                 *((uint64_t *)param) = data->vtTimeStamp;
diff --git a/libqdmetadata/qdMetaData.h b/libqdmetadata/qdMetaData.h
index ca16a94..fe396f2 100644
--- a/libqdmetadata/qdMetaData.h
+++ b/libqdmetadata/qdMetaData.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2020, 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
@@ -48,18 +48,6 @@
     ITU_R_2020_FR,
 };
 
-enum IGC_t {
-    IGC_NotSpecified,
-    IGC_sRGB,
-};
-
-struct HSICData_t {
-    int32_t hue;
-    float   saturation;
-    int32_t intensity;
-    float   contrast;
-};
-
 struct BufferDim_t {
     int32_t sliceWidth;
     int32_t sliceHeight;
@@ -96,11 +84,6 @@
     };
 };
 
-struct S3DGpuComp_t {
-    int32_t displayId; /* on which display S3D is composed by client */
-    uint32_t s3dMode; /* the S3D format of this layer to be accessed by client */
-};
-
 typedef struct GraphicsMetadata {
     uint32_t size;
     uint32_t data[GRAPHICS_METADATA_SIZE];
@@ -147,8 +130,6 @@
     int32_t interlaced;
     struct BufferDim_t bufferDim;
     float refreshrate;
-    enum ColorSpace_t colorSpace;
-    enum IGC_t igc;
      /* Gralloc sets PRIV_SECURE_BUFFER flag to inform that the buffers are from
       * ION_SECURE. which should not be mapped. However, for GPU post proc
       * feature, GFX needs to map this buffer, in the client context and in SF
@@ -164,9 +145,6 @@
     /* Set by graphics to indicate that this buffer will be written to but not
      * swapped out */
     uint32_t isSingleBufferMode;
-    /* Indicate GPU to draw S3D layer on dedicate display device */
-    struct S3DGpuComp_t s3dComp;
-
     /* Set by camera to program the VT Timestamp */
     uint64_t vtTimeStamp;
     /* Color Aspects + HDR info */
