diff --git a/conf_files/msmnile/msmnile.mk b/conf_files/msmnile/msmnile.mk
index f61caf7..5e24709 100644
--- a/conf_files/msmnile/msmnile.mk
+++ b/conf_files/msmnile/msmnile.mk
@@ -9,7 +9,6 @@
     $(CONFIG_PATH)/media_codecs_performance.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_performance.xml \
     $(CONFIG_PATH)/media_codecs_vendor.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_vendor.xml \
     $(CONFIG_PATH)/media_codecs_vendor_audio.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_vendor_audio.xml \
-    $(CONFIG_PATH)/media_profiles.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_profiles_vendor.xml \
     $(CONFIG_PATH)/mediacodec-seccomp.policy:$(TARGET_COPY_OUT_VENDOR)/etc/seccomp_policy/mediacodec.policy \
     $(CONFIG_PATH)/system_properties.xml:$(TARGET_COPY_OUT_VENDOR)/etc/system_properties.xml
 
@@ -28,7 +27,8 @@
     PRODUCT_ODM_PROPERTIES += debug.stagefright.ccodec=4
     PRODUCT_ODM_PROPERTIES += debug.stagefright.omx_default_rank=1000
     PRODUCT_COPY_FILES += \
-      device/qcom/common/media/media_profiles.xml:$(TARGET_COPY_OUT_ODM)/etc/media_profiles_V1_0.xml
+      device/qcom/common/media/media_profiles.xml:$(TARGET_COPY_OUT_ODM)/etc/media_profiles_V1_0.xml \
+      device/qcom/common/media/media_profiles.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_profiles_vendor.xml
 else
     $(warning "Enabling codec2.0 SW only for non-generic odm build variant")
     DEVICE_MANIFEST_FILE += hardware/qcom/media/conf_files/msmnile/c2_manifest.xml
@@ -37,5 +37,6 @@
     PRODUCT_PROPERTY_OVERRIDES += debug.stagefright.omx_default_rank=0
     PRODUCT_PROPERTY_OVERRIDES += media.settings.xml=/vendor/etc/media_profiles_vendor.xml
     PRODUCT_COPY_FILES += \
-      $(CONFIG_PATH)/media_profiles.xml:$(TARGET_COPY_OUT_ODM)/etc/media_profiles_V1_0.xml
+      $(CONFIG_PATH)/media_profiles.xml:$(TARGET_COPY_OUT_ODM)/etc/media_profiles_V1_0.xml \
+      $(CONFIG_PATH)/media_profiles.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_profiles_vendor.xml
 endif
diff --git a/conf_files/sm6150/sm6150.mk b/conf_files/sm6150/sm6150.mk
index 9872d92..547951e 100644
--- a/conf_files/sm6150/sm6150.mk
+++ b/conf_files/sm6150/sm6150.mk
@@ -15,7 +15,6 @@
     $(CONFIG_PATH)/media_codecs_vendor_sdmmagpie_v1.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_vendor_v2.xml \
     $(CONFIG_PATH)/media_codecs_performance_sdmmagpie_v0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_performance_v1.xml \
     $(CONFIG_PATH)/media_codecs_performance_sdmmagpie_v1.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_performance_v2.xml \
-    $(CONFIG_PATH)/media_profiles.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_profiles_vendor.xml \
     $(CONFIG_PATH)/mediacodec-seccomp.policy:$(TARGET_COPY_OUT_VENDOR)/etc/seccomp_policy/mediacodec.policy \
     $(CONFIG_PATH)/system_properties.xml:$(TARGET_COPY_OUT_VENDOR)/etc/system_properties.xml
 
@@ -39,7 +38,8 @@
   PRODUCT_ODM_PROPERTIES += debug.stagefright.ccodec=4
   PRODUCT_ODM_PROPERTIES += debug.stagefright.omx_default_rank=1000
   PRODUCT_COPY_FILES += \
-      device/qcom/common/media/media_profiles.xml:$(TARGET_COPY_OUT_ODM)/etc/media_profiles_V1_0.xml
+      device/qcom/common/media/media_profiles.xml:$(TARGET_COPY_OUT_ODM)/etc/media_profiles_V1_0.xml \
+      device/qcom/common/media/media_profiles.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_profiles_vendor.xml
 else
   $(warning "Enabling codec2.0 SW only for non-generic odm build variant")
   DEVICE_MANIFEST_FILE += hardware/qcom/media/conf_files/sm6150/c2_manifest.xml
@@ -48,5 +48,6 @@
   PRODUCT_PROPERTY_OVERRIDES += debug.stagefright.omx_default_rank=0
   PRODUCT_PROPERTY_OVERRIDES += media.settings.xml=/vendor/etc/media_profiles_vendor.xml
   PRODUCT_COPY_FILES += \
-      device/qcom/common/media/media_profiles.xml:$(TARGET_COPY_OUT_ODM)/etc/media_profiles_V1_0.xml
+      device/qcom/common/media/media_profiles.xml:$(TARGET_COPY_OUT_ODM)/etc/media_profiles_V1_0.xml \
+      $(CONFIG_PATH)/media_profiles.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_profiles_vendor.xml
 endif
diff --git a/mm-video-v4l2/vidc/common/Android.mk b/mm-video-v4l2/vidc/common/Android.mk
index f0c7edc..0013278 100644
--- a/mm-video-v4l2/vidc/common/Android.mk
+++ b/mm-video-v4l2/vidc/common/Android.mk
@@ -1,6 +1,8 @@
 ROOT_DIR := $(call my-dir)
+LIBION_HEADER_PATH_WRAPPER := $(QC_OPEN_PATH)/core-utils/build/libion_header_paths/libion_path.mk
 
 include $(CLEAR_VARS)
+include $(LIBION_HEADER_PATH_WRAPPER)
 LOCAL_PATH:= $(ROOT_DIR)
 
 # ---------------------------------------------------------------------------------
@@ -25,6 +27,7 @@
 libmm-vidc-inc      += $(QCOM_MEDIA_ROOT)/libc2dcolorconvert
 libmm-vidc-inc      += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
 libmm-vidc-inc      += $(TOP)/hardware/libhardware/include
+libmm-vidc-inc      += $(LIBION_HEADER_PATHS)
 
 LOCAL_MODULE                    := libOmxVidcCommon
 LOCAL_MODULE_TAGS               := optional
diff --git a/mm-video-v4l2/vidc/vdec/Android.mk b/mm-video-v4l2/vidc/vdec/Android.mk
index 7e8a4a8..323eba2 100644
--- a/mm-video-v4l2/vidc/vdec/Android.mk
+++ b/mm-video-v4l2/vidc/vdec/Android.mk
@@ -1,5 +1,8 @@
 LOCAL_PATH := $(call my-dir)
+LIBION_HEADER_PATH_WRAPPER := $(QC_OPEN_PATH)/core-utils/build/libion_header_paths/libion_path.mk
+
 include $(CLEAR_VARS)
+include $(LIBION_HEADER_PATH_WRAPPER)
 
 # ---------------------------------------------------------------------------------
 # 				Common definitons
@@ -56,8 +59,7 @@
 
 # Common Includes
 libmm-vdec-inc          := $(LOCAL_PATH)/inc
-libmm-vdec-inc          += $(TOP)/system/memory/libion/include
-libmm-vdec-inc          += $(TOP)/system/memory/libion/kernel-headers
+libmm-vdec-inc          += $(LIBION_HEADER_PATHS)
 libmm-vdec-inc          += $(QCOM_MEDIA_ROOT)/mm-video-v4l2/vidc/common/inc
 libmm-vdec-inc          += $(QCOM_MEDIA_ROOT)/mm-core/inc
 libmm-vdec-inc          += $(QCOM_MEDIA_ROOT)/libplatformconfig
diff --git a/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h b/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h
index 05b1ce5..d72d658 100644
--- a/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h
+++ b/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h
@@ -1,5 +1,5 @@
 /*--------------------------------------------------------------------------
-Copyright (c) 2010 - 2019, The Linux Foundation. All rights reserved.
+Copyright (c) 2010 - 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
@@ -1470,12 +1470,15 @@
         void get_preferred_color_aspects(ColorAspects& preferredColorAspects);
         void get_preferred_hdr_info(HDRStaticInfo& preferredHDRInfo);
         bool vdec_query_cap(struct v4l2_queryctrl &cap);
-        bool store_hdr10plusinfo(DescribeHDR10PlusInfoParams *hdr10plusinfo);
+        bool store_vp9_hdr10plusinfo(DescribeHDR10PlusInfoParams *hdr10plusinfo);
+        bool store_hevc_hdr10plusinfo(uint32_t payload_size,
+            msm_vidc_stream_userdata_payload *hdr10plusdata);
         void update_hdr10plusinfo_cookie_using_timestamp(OMX_PTR cookie, OMX_TICKS timestamp);
         void convert_hdr10plusinfo_to_metadata(OMX_PTR cookie, ColorMetaData &colorData);
         void remove_hdr10plusinfo_using_cookie(OMX_PTR cookie);
         void clear_hdr10plusinfo();
         void get_hdr10plusinfo(DescribeHDR10PlusInfoParams *hdr10plusdata);
+        void print_hdr10plusinfo(DescribeHDR10PlusInfoParams *hdr10plusdata);
 public:
         bool is_down_scalar_enabled;
         bool m_is_split_mode;
diff --git a/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp b/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp
index 10a51c9..a8c4dff 100644
--- a/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp
+++ b/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp
@@ -1,5 +1,5 @@
 /*--------------------------------------------------------------------------
-Copyright (c) 2010 - 2019, The Linux Foundation. All rights reserved.
+Copyright (c) 2010 - 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 met:
@@ -153,14 +153,13 @@
 #define MAX(x,y) (((x) > (y)) ? (x) : (y))
 
 /*
-To enable sending vp9 hdr10plus metadata via private gralloc
-handle to display, define VP9_HDR10PLUS_GRALLOC_PATH_ENABLE
-as 1. This disables sending metadata via framework.
-To enable sending vp9 hdr10plus metadata via framework, define
-VP9_HDR10PLUS_GRALLOC_PATH_ENABLE as 0. This disables sending
-metadata via gralloc handle.
+To enable sending vp9/hevc hdr10plus metadata via private gralloc
+handle to display, define HDR10PLUS_SETMETADATA_ENABLE as 1.This
+disables sending metadata via framework. To enable sending vp9/hevc
+hdr10plus metadata via framework, define HDR10PLUS_SETMETADATA_ENABLE
+as 0. This disables sending metadata via gralloc handle.
 */
-#define VP9HDR10PLUS_SETMETADATA_ENABLE 1
+#define HDR10_SETMETADATA_ENABLE 0
 
 using namespace android;
 
@@ -1612,8 +1611,9 @@
                                             pThis->omx_report_error ();
                                             break;
                                         }
-#if !VP9HDR10PLUS_SETMETADATA_ENABLE
-                                        if (pThis->output_capability != V4L2_PIX_FMT_VP9)
+#if !HDR10_SETMETADATA_ENABLE
+                                        if (pThis->output_capability != V4L2_PIX_FMT_VP9 &&
+                                            pThis->output_capability != V4L2_PIX_FMT_HEVC)
                                             break;
 
                                         if (!pThis->m_cb.EventHandler) {
@@ -5389,7 +5389,7 @@
             print_debug_color_aspects(&(m_client_color_space.sAspects), "GetConfig Client");
             print_debug_color_aspects(&(m_internal_color_space.sAspects), "GetConfig Internal");
             get_preferred_color_aspects(params->sAspects);
-            print_debug_color_aspects(&(params->sAspects), "GetConfig");
+            print_debug_color_aspects(&(params->sAspects), "Frameworks path GetConfig Color Aspects");
 
             break;
         }
@@ -5400,7 +5400,7 @@
             print_debug_hdr_color_info(&(m_client_hdr_info.sInfo), "GetConfig Client HDR");
             print_debug_hdr_color_info(&(m_internal_hdr_info.sInfo), "GetConfig Internal HDR");
             get_preferred_hdr_info(params->sInfo);
-            print_debug_hdr_color_info(&(params->sInfo), "GetConfig HDR");
+            print_debug_hdr_color_info(&(params->sInfo), "Frameworks path GetConfig HDR");
 
             break;
         }
@@ -5409,6 +5409,7 @@
             VALIDATE_OMX_PARAM_DATA(configData, DescribeHDR10PlusInfoParams);
             DescribeHDR10PlusInfoParams *params = (DescribeHDR10PlusInfoParams *)configData;
             get_hdr10plusinfo(params);
+            print_hdr10plusinfo(params);
             break;
         }
         case OMX_IndexConfigAndroidVendorExtension:
@@ -5611,7 +5612,7 @@
 
     } else if ((int)configIndex == (int)OMX_QTIIndexConfigDescribeHDR10PlusInfo) {
         VALIDATE_OMX_PARAM_DATA(configData, DescribeHDR10PlusInfoParams);
-        if (!store_hdr10plusinfo((DescribeHDR10PlusInfoParams *)configData)) {
+        if (!store_vp9_hdr10plusinfo((DescribeHDR10PlusInfoParams *)configData)) {
             DEBUG_PRINT_ERROR("Failed to set hdr10plus info");
         }
         return ret;
@@ -11197,7 +11198,7 @@
         mastering_display.primaries.rgbPrimaries[2][1] = hdr_info.sType1.mB.y;
         mastering_display.primaries.whitePoint[0] = hdr_info.sType1.mW.x;
         mastering_display.primaries.whitePoint[1] = hdr_info.sType1.mW.y;
-        mastering_display.maxDisplayLuminance = hdr_info.sType1.mMaxDisplayLuminance * LUMINANCE_DIV_FACTOR;
+        mastering_display.maxDisplayLuminance = hdr_info.sType1.mMaxDisplayLuminance;
         mastering_display.minDisplayLuminance = hdr_info.sType1.mMinDisplayLuminance;
         content_light.lightLevelSEIEnabled = true;
         content_light.maxContentLightLevel = hdr_info.sType1.mMaxContentLightLevel;
@@ -11526,10 +11527,14 @@
                             (payload_len > HDR_DYNAMIC_META_DATA_SZ)) {
                             DEBUG_PRINT_ERROR("Invalid User extradata size %u for HDR10+", data->nDataSize);
                         } else {
+#if HDR10_SETMETADATA_ENABLE
                             color_mdata.dynamicMetaDataValid = true;
                             color_mdata.dynamicMetaDataLen = payload_len;
                             memcpy(color_mdata.dynamicMetaDataPayload, userdata_payload->data, payload_len);
                             DEBUG_PRINT_HIGH("Copied %u bytes of HDR10+ extradata", payload_len);
+#else
+                            store_hevc_hdr10plusinfo(payload_len, userdata_payload);
+#endif
                         }
                     }
                     if (client_extradata & OMX_EXTNUSER_EXTRADATA) {
@@ -11597,15 +11602,15 @@
                     final_color_aspects.mMatrixCoeffs = ColorAspects::MatrixBT601_6;
                 }
                 get_preferred_hdr_info(final_hdr_info);
-                convert_color_aspects_to_metadata(final_color_aspects, color_mdata);
+#if HDR10_SETMETADATA_ENABLE
                 convert_hdr_info_to_metadata(final_hdr_info, color_mdata);
-#if VP9HDR10PLUS_SETMETADATA_ENABLE
                 convert_hdr10plusinfo_to_metadata(p_buf_hdr->pMarkData, color_mdata);
                 remove_hdr10plusinfo_using_cookie(p_buf_hdr->pMarkData);
-#endif
+                convert_color_aspects_to_metadata(final_color_aspects, color_mdata);
                 print_debug_hdr_color_info_mdata(&color_mdata);
                 print_debug_hdr10plus_metadata(color_mdata);
                 set_colormetadata_in_handle(&color_mdata, buf_index);
+#endif
         }
 
     }
@@ -13165,7 +13170,7 @@
     return rc;
 }
 
-bool omx_vdec::store_hdr10plusinfo(DescribeHDR10PlusInfoParams *hdr10plusdata)
+bool omx_vdec::store_vp9_hdr10plusinfo(DescribeHDR10PlusInfoParams *hdr10plusdata)
 {
     struct hdr10plusInfo metadata;
 
@@ -13214,6 +13219,44 @@
     return true;
 }
 
+bool omx_vdec::store_hevc_hdr10plusinfo(uint32_t payload_size,
+    msm_vidc_stream_userdata_payload *hdr10plusdata)
+{
+    struct hdr10plusInfo metadata;
+
+    if (!hdr10plusdata) {
+        DEBUG_PRINT_ERROR("hdr10plus info not present");
+        return false;
+    }
+
+    if (payload_size > MAX_HDR10PLUSINFO_SIZE ||
+            payload_size < 1) {
+        DEBUG_PRINT_ERROR("Invalid hdr10plus metadata size %u", payload_size);
+        return false;
+    }
+
+    if (output_capability != V4L2_PIX_FMT_HEVC) {
+        DEBUG_PRINT_ERROR("msm_vidc_stream_userdata_payload is not supported for %d codec",
+            output_capability);
+        return false;
+    }
+
+    memset(&metadata, 0, sizeof(struct hdr10plusInfo));
+    metadata.nParamSizeUsed = payload_size;
+    memcpy(metadata.payload, hdr10plusdata->data , payload_size);
+    metadata.is_new = true;
+    if (m_etb_count) {
+        metadata.timestamp = m_etb_timestamp + 1;
+    }
+
+    pthread_mutex_lock(&m_hdr10pluslock);
+    DEBUG_PRINT_LOW("add hevc hdr10plus info to the list with size %u", payload_size);
+    m_hdr10pluslist.push_back(metadata);
+    pthread_mutex_unlock(&m_hdr10pluslock);
+
+    return true;
+}
+
 void omx_vdec::update_hdr10plusinfo_cookie_using_timestamp(OMX_PTR markdata, OMX_TICKS timestamp)
 {
     std::list<hdr10plusInfo>::reverse_iterator iter;
@@ -13221,7 +13264,8 @@
     unsigned int cookie = (unsigned int)(unsigned long)markdata;
     bool is_list_empty = false;
 
-    if (output_capability != V4L2_PIX_FMT_VP9)
+    if (output_capability != V4L2_PIX_FMT_VP9 &&
+        output_capability != V4L2_PIX_FMT_HEVC)
         return;
 
     pthread_mutex_lock(&m_hdr10pluslock);
@@ -13263,7 +13307,8 @@
     unsigned int cookie = (unsigned int)(unsigned long)markdata;
     bool is_list_empty = false;
 
-    if (output_capability != V4L2_PIX_FMT_VP9)
+    if (output_capability != V4L2_PIX_FMT_VP9 &&
+        output_capability != V4L2_PIX_FMT_HEVC)
         return;
 
     pthread_mutex_lock(&m_hdr10pluslock);
@@ -13298,7 +13343,8 @@
     unsigned int cookie = (unsigned int)(unsigned long)markdata;
     bool is_list_empty = false;
 
-    if (output_capability != V4L2_PIX_FMT_VP9)
+    if (output_capability != V4L2_PIX_FMT_VP9 &&
+        output_capability != V4L2_PIX_FMT_HEVC)
         return;
 
     pthread_mutex_lock(&m_hdr10pluslock);
@@ -13327,7 +13373,8 @@
 {
     bool is_list_empty = false;
 
-    if (output_capability != V4L2_PIX_FMT_VP9)
+    if (output_capability != V4L2_PIX_FMT_VP9 &&
+        output_capability != V4L2_PIX_FMT_HEVC)
         return;
 
     pthread_mutex_lock(&m_hdr10pluslock);
@@ -13349,7 +13396,8 @@
     std::list<hdr10plusInfo>::iterator iter;
     bool is_list_empty = false;
 
-    if (output_capability != V4L2_PIX_FMT_VP9)
+    if (output_capability != V4L2_PIX_FMT_VP9 &&
+        output_capability != V4L2_PIX_FMT_HEVC)
         return;
 
     pthread_mutex_lock(&m_hdr10pluslock);
@@ -13378,6 +13426,17 @@
     pthread_mutex_unlock(&m_hdr10pluslock);
 }
 
+void omx_vdec::print_hdr10plusinfo(DescribeHDR10PlusInfoParams *hdr10plusdata)
+{
+         DEBUG_PRINT_LOW("HDR10+ frameworks path valid data length: %d", hdr10plusdata->nParamSizeUsed);
+        for (uint32_t i = 0 ; i < hdr10plusdata->nParamSizeUsed && i+3 < 1024; i=i+4) {
+            DEBUG_PRINT_LOW("HDR10+ mdata: %02X %02X %02X %02X", hdr10plusdata->nValue[i],
+            hdr10plusdata->nValue[i+1],
+            hdr10plusdata->nValue[i+2],
+            hdr10plusdata->nValue[i+3]);
+    }
+}
+
 // No code beyond this !
 
 // inline import of vendor-extensions implementation
diff --git a/mm-video-v4l2/vidc/venc/Android.mk b/mm-video-v4l2/vidc/venc/Android.mk
index d6f0ede..de46005 100644
--- a/mm-video-v4l2/vidc/venc/Android.mk
+++ b/mm-video-v4l2/vidc/venc/Android.mk
@@ -1,5 +1,8 @@
 LOCAL_PATH := $(call my-dir)
+LIBION_HEADER_PATH_WRAPPER := $(QC_OPEN_PATH)/core-utils/build/libion_header_paths/libion_path.mk
+
 include $(CLEAR_VARS)
+include $(LIBION_HEADER_PATH_WRAPPER)
 
 # ---------------------------------------------------------------------------------
 # 				Common definitons
@@ -64,8 +67,7 @@
 
 # Common Includes
 libmm-venc-inc      := $(LOCAL_PATH)/inc
-libmm-venc-inc      += $(TOP)/core/libion/include
-libmm-venc-inc      += $(TOP)/system/memory/libion/kernel-headers
+libmm-venc-inc      += $(LIBION_HEADER_PATHS)
 libmm-venc-inc      += $(QCOM_MEDIA_ROOT)/mm-video-v4l2/vidc/common/inc
 libmm-venc-inc      += $(QCOM_MEDIA_ROOT)/mm-core/inc
 libmm-venc-inc      += $(QCOM_MEDIA_ROOT)/libstagefrighthw
