display: Use getMetaData in hwc2

Use getMetaData API to get the metadata information in hwc2.
As it maps the metadata in the process before accessing it.

Change-Id: I346d223058e6eadb00f16bb9f2be8a46e87fbdef
CRs-fixed: 2019985
diff --git a/libqdutils/qdMetaData.cpp b/libqdutils/qdMetaData.cpp
index 8f1e617..cd7727f 100644
--- a/libqdutils/qdMetaData.cpp
+++ b/libqdutils/qdMetaData.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2016, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2017, 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
@@ -145,8 +145,9 @@
 
 int getMetaData(private_handle_t *handle, DispFetchParamType paramType,
                                                     void *param) {
-    if (!handle) {
-        ALOGE("%s: Private handle is null!", __func__);
+    int ret = -1;
+    if (private_handle_t::validate(handle)) {
+        ALOGE("%s: Private handle is invalid! handle=%p", __func__, handle);
         return -1;
     }
     if (handle->fd_metadata == -1) {
@@ -158,6 +159,8 @@
         return -1;
     }
     unsigned long size = ROUND_UP_PAGESIZE(sizeof(MetaData_t));
+    // TODO: must be mmapped once and freed when the handle gets freed rather
+    // than mapping and un-mapping while getting each metadata field
     void *base = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_SHARED,
         handle->fd_metadata, 0);
     if (base == reinterpret_cast<void*>(MAP_FAILED)) {
@@ -168,41 +171,77 @@
     MetaData_t *data = reinterpret_cast <MetaData_t *>(base);
     switch (paramType) {
         case GET_PP_PARAM_INTERLACED:
-            *((int32_t *)param) = data->interlaced;
+            if (data->operation & PP_PARAM_INTERLACED) {
+                *((int32_t *)param) = data->interlaced;
+                ret = 0;
+            }
             break;
         case GET_BUFFER_GEOMETRY:
-            *((BufferDim_t *)param) = data->bufferDim;
+            if (data->operation & UPDATE_BUFFER_GEOMETRY) {
+                *((BufferDim_t *)param) = data->bufferDim;
+                ret = 0;
+            }
             break;
         case GET_REFRESH_RATE:
-            *((float *)param) = data->refreshrate;
+            if (data->operation & UPDATE_REFRESH_RATE) {
+                *((float *)param) = data->refreshrate;
+                ret = 0;
+            }
             break;
         case GET_COLOR_SPACE:
-            *((ColorSpace_t *)param) = data->colorSpace;
+            if (data->operation & UPDATE_COLOR_SPACE) {
+                *((ColorSpace_t *)param) = data->colorSpace;
+                ret = 0;
+            }
             break;
         case GET_MAP_SECURE_BUFFER:
-            *((int32_t *)param) = data->mapSecureBuffer;
+            if (data->operation & MAP_SECURE_BUFFER) {
+                *((int32_t *)param) = data->mapSecureBuffer;
+                ret = 0;
+            }
             break;
         case GET_S3D_FORMAT:
-            *((uint32_t *)param) = data->s3dFormat;
+            if (data->operation & S3D_FORMAT) {
+                *((uint32_t *)param) = data->s3dFormat;
+                ret = 0;
+            }
             break;
         case GET_LINEAR_FORMAT:
-            *((uint32_t *)param) = data->linearFormat;
+            if (data->operation & LINEAR_FORMAT) {
+                *((uint32_t *)param) = data->linearFormat;
+                ret = 0;
+            }
             break;
         case GET_IGC:
-            *((IGC_t *)param) = data->igc;
+            if (data->operation & SET_IGC) {
+                *((IGC_t *)param) = data->igc;
+                ret = 0;
+            }
             break;
         case GET_SINGLE_BUFFER_MODE:
-            *((uint32_t *)param) = data->isSingleBufferMode ;
+            if (data->operation & SET_SINGLE_BUFFER_MODE) {
+                *((uint32_t *)param) = data->isSingleBufferMode;
+                ret = 0;
+            }
             break;
         case GET_S3D_COMP:
-            *((S3DGpuComp_t *)param) = data->s3dComp;
+            if (data->operation & SET_S3D_COMP) {
+                *((S3DGpuComp_t *)param) = data->s3dComp;
+                ret = 0;
+            }
             break;
         case GET_VT_TIMESTAMP:
-            *((uint64_t *)param) = data->vtTimeStamp;
+            if (data->operation & SET_VT_TIMESTAMP) {
+                *((uint64_t *)param) = data->vtTimeStamp;
+                ret = 0;
+            }
             break;
 #ifdef USE_COLOR_METADATA
         case GET_COLOR_METADATA:
-            *((ColorMetaData *)param) = data->color;
+            if (data->operation & COLOR_METADATA) {
+                *((ColorMetaData *)param) = data->color;
+                ret = 0;
+            }
 #endif
             break;
         default:
@@ -212,7 +251,7 @@
     if(munmap(base, size))
         ALOGE("%s: failed to unmap ptr %p, err %d", __func__, (void*)base,
                                                                         errno);
-    return 0;
+    return ret;
 }
 
 int copyMetaData(struct private_handle_t *src, struct private_handle_t *dst) {