stagefright: IOMX: pass native handle in sp<NativeHandle>

This clarifies ownership of the native handle

Bug: 28644266
Bug: 27856976
Change-Id: I7a617513d7ac93dd58d74af9469663418735aaf3
diff --git a/media/libmedia/IOMX.cpp b/media/libmedia/IOMX.cpp
index 61fba35..b1d38b6 100644
--- a/media/libmedia/IOMX.cpp
+++ b/media/libmedia/IOMX.cpp
@@ -25,6 +25,7 @@
 #include <media/IOMX.h>
 #include <media/stagefright/foundation/ADebug.h>
 #include <media/openmax/OMX_IndexExt.h>
+#include <utils/NativeHandle.h>
 
 namespace android {
 
@@ -465,7 +466,7 @@
 
     virtual status_t allocateSecureBuffer(
             node_id node, OMX_U32 port_index, size_t size,
-            buffer_id *buffer, void **buffer_data, native_handle_t **native_handle) {
+            buffer_id *buffer, void **buffer_data, sp<NativeHandle> *native_handle) {
         Parcel data, reply;
         data.writeInterfaceToken(IOMX::getInterfaceDescriptor());
         data.writeInt32((int32_t)node);
@@ -484,7 +485,8 @@
         *buffer = (buffer_id)reply.readInt32();
         *buffer_data = (void *)reply.readInt64();
         if (*buffer_data == NULL) {
-            *native_handle = reply.readNativeHandle();
+            *native_handle = NativeHandle::create(
+                    reply.readNativeHandle(), true /* ownsHandle */);
         } else {
             *native_handle = NULL;
         }
@@ -1063,7 +1065,7 @@
 
             buffer_id buffer;
             void *buffer_data = NULL;
-            native_handle_t *native_handle = NULL;
+            sp<NativeHandle> native_handle;
             status_t err = allocateSecureBuffer(
                     node, port_index, size, &buffer, &buffer_data, &native_handle);
             reply->writeInt32(err);
@@ -1072,7 +1074,7 @@
                 reply->writeInt32((int32_t)buffer);
                 reply->writeInt64((uintptr_t)buffer_data);
                 if (buffer_data == NULL) {
-                    reply->writeNativeHandle(native_handle);
+                    reply->writeNativeHandle(native_handle == NULL ? NULL : native_handle->handle());
                 }
             }