libmediautils: move AImageReader_getHGBPFromHandle from libmediandk.

This allows us to remove camerserver's dependency on libmediandk,
thereby reducing its vss increase (brought about due to many of
libmediandk's dependencies, which cameraserver does not need)

Bug: 119582723

Test: mm -j64
Test: showmap <pid of cameraserver> vss before change: 50628
Test: showmap <pid of cameraserver> vss after change: 31256
Test: AImageReaderWindowHandleTest

Change-Id: I8dec6430adda538cb293cdd0d087b9ae1767b900
Signed-off-by: Jayant Chowdhary <jchowdhary@google.com>
diff --git a/media/ndk/Android.bp b/media/ndk/Android.bp
index b21a1bb..541ba3e 100644
--- a/media/ndk/Android.bp
+++ b/media/ndk/Android.bp
@@ -161,6 +161,7 @@
     shared_libs: [
         "libbinder",
         "libmediandk",
+        "libmediautils",
         "libnativewindow",
         "libgui",
         "libutils",
diff --git a/media/ndk/NdkImageReader.cpp b/media/ndk/NdkImageReader.cpp
index 1adecb9..b86ab42 100644
--- a/media/ndk/NdkImageReader.cpp
+++ b/media/ndk/NdkImageReader.cpp
@@ -647,31 +647,6 @@
     return nh;
 }
 
-static sp<HGraphicBufferProducer> convertNativeHandleToHGBP (
-        const native_handle_t *handle) {
-    // Read the size of the halToken vec<uint8_t>
-    hidl_vec<uint8_t> halToken;
-    halToken.setToExternal(
-        reinterpret_cast<uint8_t *>(const_cast<int *>(&(handle->data[1]))),
-        handle->data[0]);
-    sp<HGraphicBufferProducer> hgbp =
-        HGraphicBufferProducer::castFrom(retrieveHalInterface(halToken));
-    return hgbp;
-}
-
-EXPORT
-sp<HGraphicBufferProducer> AImageReader_getHGBPFromHandle(
-    const native_handle_t *handle) {
-    if (handle == nullptr) {
-        return nullptr;
-    }
-    if (handle->numFds != 0  ||
-        handle->numInts < ceil(sizeof(size_t) / sizeof(int))) {
-        return nullptr;
-    }
-    return convertNativeHandleToHGBP(handle);
-}
-
 EXPORT
 media_status_t AImageReader_new(
         int32_t width, int32_t height, int32_t format, int32_t maxImages,
diff --git a/media/ndk/NdkImageReaderPriv.h b/media/ndk/NdkImageReaderPriv.h
index d9ddfd9..78152d2 100644
--- a/media/ndk/NdkImageReaderPriv.h
+++ b/media/ndk/NdkImageReaderPriv.h
@@ -169,8 +169,4 @@
     Mutex                      mLock;
 };
 
-// Retrieves HGraphicBufferProducer corresponding to the native_handle_t
-// provided (this native handle MUST have been obtained by AImageReader_getWindowNativeHandle()).
-sp<HGraphicBufferProducer> AImageReader_getHGBPFromHandle(const native_handle_t *handle);
-
 #endif // _NDK_IMAGE_READER_PRIV_H
diff --git a/media/ndk/tests/AImageReaderWindowHandleTest.cpp b/media/ndk/tests/AImageReaderWindowHandleTest.cpp
index 3b5e358..ef0ff67 100644
--- a/media/ndk/tests/AImageReaderWindowHandleTest.cpp
+++ b/media/ndk/tests/AImageReaderWindowHandleTest.cpp
@@ -17,6 +17,7 @@
 #include <gtest/gtest.h>
 #include <media/NdkImageReader.h>
 #include <media/NdkImage.h>
+#include <mediautils/AImageReaderUtils.h>
 #include <gui/IGraphicBufferProducer.h>
 #include <gui/bufferqueue/1.0/H2BGraphicBufferProducer.h>
 #include <NdkImageReaderPriv.h>
@@ -26,6 +27,8 @@
 namespace android {
 
 using hardware::graphics::bufferqueue::V1_0::utils::H2BGraphicBufferProducer;
+using aimg::AImageReader_getHGBPFromHandle;
+
 typedef IGraphicBufferProducer::QueueBufferInput QueueBufferInput;
 typedef IGraphicBufferProducer::QueueBufferOutput QueueBufferOutput;
 
diff --git a/media/utils/AImageReaderUtils.cpp b/media/utils/AImageReaderUtils.cpp
new file mode 100644
index 0000000..d97c340
--- /dev/null
+++ b/media/utils/AImageReaderUtils.cpp
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <cmath>
+
+#include <mediautils/AImageReaderUtils.h>
+#include <hidl/HybridInterface.h>
+
+namespace android {
+namespace aimg {
+
+using hardware::hidl_vec;
+
+static sp<HGraphicBufferProducer> convertNativeHandleToHGBP (
+        const native_handle_t *handle) {
+    // Read the size of the halToken vec<uint8_t>
+    hidl_vec<uint8_t> halToken;
+    halToken.setToExternal(
+        reinterpret_cast<uint8_t *>(const_cast<int *>(&(handle->data[1]))),
+        handle->data[0]);
+    sp<HGraphicBufferProducer> hgbp =
+        HGraphicBufferProducer::castFrom(retrieveHalInterface(halToken));
+    return hgbp;
+}
+
+sp<HGraphicBufferProducer> AImageReader_getHGBPFromHandle(
+    const native_handle_t *handle) {
+    if (handle == nullptr) {
+        return nullptr;
+    }
+    if (handle->numFds != 0  ||
+        handle->numInts < std::ceil(sizeof(size_t) / sizeof(int))) {
+        return nullptr;
+    }
+    return convertNativeHandleToHGBP(handle);
+}
+
+} //namespace aimg
+} //namespace android
diff --git a/media/utils/Android.bp b/media/utils/Android.bp
index f5b3f92..b05e022 100644
--- a/media/utils/Android.bp
+++ b/media/utils/Android.bp
@@ -16,6 +16,7 @@
     name: "libmediautils",
 
     srcs: [
+        "AImageReaderUtils.cpp",
         "BatteryNotifier.cpp",
         "ISchedulingPolicyService.cpp",
         "MemoryLeakTrackUtil.cpp",
@@ -30,6 +31,9 @@
         "liblog",
         "libutils",
         "libmemunreachable",
+        "libhidlbase",
+        "android.hardware.graphics.bufferqueue@1.0",
+        "android.hidl.token@1.0-utils",
     ],
 
     logtags: ["EventLogTags.logtags"],
diff --git a/media/utils/include/mediautils/AImageReaderUtils.h b/media/utils/include/mediautils/AImageReaderUtils.h
new file mode 100644
index 0000000..c9bde1f
--- /dev/null
+++ b/media/utils/include/mediautils/AImageReaderUtils.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef AIMAGE_READER_UTILS_H
+#define AIMAGE_READER_UTILS_H
+
+#include <cutils/native_handle.h>
+#include <android/hardware/graphics/bufferqueue/1.0/IGraphicBufferProducer.h>
+
+namespace android {
+namespace aimg {
+
+using HGraphicBufferProducer = hardware::graphics::bufferqueue::V1_0::IGraphicBufferProducer;
+
+// Retrieves HGraphicBufferProducer corresponding to the native_handle_t
+// provided (this native handle MUST have been obtained by AImageReader_getWindowNativeHandle()).
+sp<HGraphicBufferProducer> AImageReader_getHGBPFromHandle(const native_handle_t *handle);
+
+}// namespace aimg
+}// namespace android
+
+#endif //AIMAGE_READER_UTILS_H