Merge "commonsys-intf: display: add CVP metadata support"
diff --git a/gralloc/gralloc_priv.h b/gralloc/gralloc_priv.h
index 075a6e4..f9338d6 100644
--- a/gralloc/gralloc_priv.h
+++ b/gralloc/gralloc_priv.h
@@ -83,6 +83,9 @@
 /* This flag indicates PI format is being used */
 #define GRALLOC_USAGE_PRIVATE_ALLOC_UBWC_PI 1ULL << 49
 
+/* This flag is set while CDSP accesses the buffer */
+#define GRALLOC_USAGE_PRIVATE_CDSP 1ULL << 50
+
 /* Legacy gralloc1 definitions */
 /* Some clients may still be using the old flags */
 #define GRALLOC1_PRODUCER_USAGE_PRIVATE_ADSP_HEAP GRALLOC_USAGE_PRIVATE_ADSP_HEAP
diff --git a/libqdmetadata/Android.bp b/libqdmetadata/Android.bp
index 5c2766e..fdf577f 100644
--- a/libqdmetadata/Android.bp
+++ b/libqdmetadata/Android.bp
@@ -1,6 +1,6 @@
 cc_library_shared {
     name: "libqdMetaData",
-    vendor: true,
+    vendor_available: true,
     cflags: [
         "-Wno-sign-conversion",
         "-DLOG_TAG=\"qdmetadata\"",
diff --git a/libqdmetadata/qdMetaData.cpp b/libqdmetadata/qdMetaData.cpp
index 3cbafb7..427bbd0 100644
--- a/libqdmetadata/qdMetaData.cpp
+++ b/libqdmetadata/qdMetaData.cpp
@@ -64,6 +64,13 @@
     return 0;
 }
 
+static void unmapAndReset(private_handle_t *handle) {
+    if (private_handle_t::validate(handle) == 0 && handle->base_metadata) {
+        munmap(reinterpret_cast<void *>(handle->base_metadata), getMetaDataSize());
+        handle->base_metadata = 0;
+    }
+}
+
 int setMetaData(private_handle_t *handle, DispParamType paramType,
                 void *param) {
     auto err = validateAndMap(handle);
@@ -378,3 +385,17 @@
     return 0;
 }
 
+int setMetaDataAndUnmap(struct private_handle_t *handle, enum DispParamType paramType,
+                        void *param) {
+    auto ret = setMetaData(handle, paramType, param);
+    unmapAndReset(handle);
+    return ret;
+}
+
+int getMetaDataAndUnmap(struct private_handle_t *handle,
+                        enum DispFetchParamType paramType,
+                        void *param) {
+    auto ret = getMetaData(handle, paramType, param);
+    unmapAndReset(handle);
+    return ret;
+}
diff --git a/libqdmetadata/qdMetaData.h b/libqdmetadata/qdMetaData.h
index b98384f..c106c8a 100644
--- a/libqdmetadata/qdMetaData.h
+++ b/libqdmetadata/qdMetaData.h
@@ -223,6 +223,14 @@
 
 unsigned long getMetaDataSize();
 
+// Map, access metadata and unmap. Used by clients that do not import/free but
+//  clone and delete native_handle
+int setMetaDataAndUnmap(struct private_handle_t *handle, enum DispParamType paramType,
+                        void *param);
+int getMetaDataAndUnmap(struct private_handle_t *handle,
+                        enum DispFetchParamType paramType,
+                        void *param);
+
 #ifdef __cplusplus
 }
 #endif