diff --git a/sdm/include/core/layer_stack.h b/sdm/include/core/layer_stack.h
index 17e866a..37182cc 100644
--- a/sdm/include/core/layer_stack.h
+++ b/sdm/include/core/layer_stack.h
@@ -74,6 +74,12 @@
                           //!< Only one layer shall be marked as target buffer by the caller.
 };
 
+enum LayerColorSpace {
+  kLimitedRange601,       //!< 601 limited range color space
+  kFullRange601,          //!< 601 full range color space
+  kLimitedRange709,       //!< 709 limited range color space
+};
+
 /*! @brief This structure defines rotation and flip values for a display layer.
 
   @sa Layer
@@ -213,8 +219,10 @@
 
   uint32_t frame_rate;              //!< Rate at which frames are being updated for this layer.
 
+  LayerColorSpace color_space;      //!< Color Space of the layer
+
   Layer() : input_buffer(NULL), composition(kCompositionGPU), blending(kBlendingOpaque),
-            plane_alpha(0), frame_rate(0) { }
+            plane_alpha(0), frame_rate(0), color_space(kLimitedRange601) { }
 };
 
 /*! @brief This structure defines a layer stack that contains layers which need to be composed and
diff --git a/sdm/libs/core/fb/hw_device.cpp b/sdm/libs/core/fb/hw_device.cpp
index 31b3da9..380a058 100644
--- a/sdm/libs/core/fb/hw_device.cpp
+++ b/sdm/libs/core/fb/hw_device.cpp
@@ -250,6 +250,7 @@
         SetRect(pipe_info->src_roi, &mdp_layer.src_rect);
         SetRect(pipe_info->dst_roi, &mdp_layer.dst_rect);
         SetMDPFlags(layer, is_rotator_used, &mdp_layer.flags);
+        SetColorSpace(layer.color_space, &mdp_layer.color_space);
 
         if (pipe_info->scale_data.enable_pixel_ext) {
           if ((mdp_layer.flags & MDP_LAYER_DEINTERLACE) && (layer.transform.rotation == 90.0f)) {
@@ -929,5 +930,13 @@
   }
 }
 
+void HWDevice::SetColorSpace(LayerColorSpace source, mdp_color_space *color_space) {
+  switch (source) {
+  case kLimitedRange601:    *color_space = MDP_CSC_ITU_R_601;      break;
+  case kFullRange601:       *color_space = MDP_CSC_ITU_R_601_FR;   break;
+  case kLimitedRange709:    *color_space = MDP_CSC_ITU_R_709;      break;
+  }
+}
+
 }  // namespace sdm
 
diff --git a/sdm/libs/core/fb/hw_device.h b/sdm/libs/core/fb/hw_device.h
index 7d617f0..35a1c1d 100644
--- a/sdm/libs/core/fb/hw_device.h
+++ b/sdm/libs/core/fb/hw_device.h
@@ -92,6 +92,7 @@
   mdp_scale_data* GetScaleDataRef(uint32_t index) { return &scale_data_[index]; }
   void SetHWScaleData(const ScaleData &scale, uint32_t index);
   void ResetDisplayParams();
+  void SetColorSpace(LayerColorSpace source, mdp_color_space *color_space);
 
   bool EnableHotPlugDetection(int enable);
 
diff --git a/sdm/libs/hwc/hwc_display.cpp b/sdm/libs/hwc/hwc_display.cpp
index 24bfcaa..193e9b2 100644
--- a/sdm/libs/hwc/hwc_display.cpp
+++ b/sdm/libs/hwc/hwc_display.cpp
@@ -32,7 +32,6 @@
 #include <gralloc_priv.h>
 #include <gr.h>
 #include <utils/constants.h>
-#include <qdMetaData.h>
 #include <sync/sync.h>
 #include <cutils/properties.h>
 
@@ -350,13 +349,9 @@
     }
 
     layer->frame_rate = fps;
-    MetaData_t *meta_data = reinterpret_cast<MetaData_t *>(pvt_handle->base_metadata);
-    if (meta_data && meta_data->operation & UPDATE_REFRESH_RATE) {
-      layer->frame_rate = RoundToStandardFPS(meta_data->refreshrate);
-    }
-
-    if (meta_data && meta_data->operation == PP_PARAM_INTERLACED && meta_data->interlaced) {
-      layer_buffer->flags.interlace = true;
+    const MetaData_t *meta_data = reinterpret_cast<MetaData_t *>(pvt_handle->base_metadata);
+    if (meta_data && (SetMetaData(*meta_data, layer) != kErrorNone)) {
+      return -EINVAL;
     }
 
     if (pvt_handle->flags & private_handle_t::PRIV_FLAGS_SECURE_DISPLAY) {
@@ -1051,5 +1046,36 @@
 void HWCDisplay::ApplyScanAdjustment(hwc_rect_t *display_frame) {
 }
 
+DisplayError HWCDisplay::SetColorSpace(const ColorSpace_t source, LayerColorSpace *target) {
+  switch (source) {
+  case ITU_R_601:      *target = kLimitedRange601;   break;
+  case ITU_R_601_FR:   *target = kFullRange601;      break;
+  case ITU_R_709:      *target = kLimitedRange709;   break;
+  default:
+    DLOGE("Unsupported Color Space: %d", source);
+    return kErrorNotSupported;
+  }
+
+  return kErrorNone;
+}
+
+DisplayError HWCDisplay::SetMetaData(const MetaData_t &meta_data, Layer *layer) {
+  if (meta_data.operation & UPDATE_REFRESH_RATE) {
+    layer->frame_rate = RoundToStandardFPS(meta_data.refreshrate);
+  }
+
+  if ((meta_data.operation & PP_PARAM_INTERLACED) && meta_data.interlaced) {
+    layer->input_buffer->flags.interlace = true;
+  }
+
+  if (meta_data.operation & UPDATE_COLOR_SPACE) {
+    if (SetColorSpace(meta_data.colorSpace, &layer->color_space) != kErrorNone) {
+      return kErrorNotSupported;
+    }
+  }
+
+  return kErrorNone;
+}
+
 }  // namespace sdm
 
diff --git a/sdm/libs/hwc/hwc_display.h b/sdm/libs/hwc/hwc_display.h
index b20b00b..d69c490 100644
--- a/sdm/libs/hwc/hwc_display.h
+++ b/sdm/libs/hwc/hwc_display.h
@@ -27,6 +27,7 @@
 
 #include <hardware/hwcomposer.h>
 #include <core/core_interface.h>
+#include <qdMetaData.h>
 
 namespace sdm {
 
@@ -113,6 +114,8 @@
   void CloseAcquireFences(hwc_display_contents_1_t *content_list);
   uint32_t RoundToStandardFPS(uint32_t fps);
   virtual void ApplyScanAdjustment(hwc_rect_t *display_frame);
+  DisplayError SetColorSpace(const ColorSpace_t source, LayerColorSpace *target);
+  DisplayError SetMetaData(const MetaData_t &meta_data, Layer *layer);
 
   enum {
     INPUT_LAYER_DUMP,
