Merge remote-tracking branch 'goog/qcom/release/LA.UM.9.1.R1.10.00.00.604.038' into rvc-dev am: c7b3d621ad am: 67a6a466e3

Change-Id: Ie47ed1b0a52074d150005301b95b421a9cd1eec9
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