Merge "MediaCas: use HidlMemory to avoid handle leaks"
diff --git a/media/jni/Android.bp b/media/jni/Android.bp
index fe2f64f..3c8af8a 100644
--- a/media/jni/Android.bp
+++ b/media/jni/Android.bp
@@ -51,6 +51,7 @@
         "libexif",
         "libpiex",
         "libandroidfw",
+        "libhidlallocatorutils",
         "libhidlbase",
         "libhidltransport",
         "android.hardware.cas@1.0",
@@ -106,6 +107,7 @@
         "liblog",  // NDK
         "libdrmframework",  // for FileSource, MediaHTTP
         "libgui",  // for VideoFrameScheduler
+        "libhidlallocatorutils",
         "libhidlbase",  // VNDK???
         "libmediandk",  // NDK
         "libpowermanager",  // for JWakeLock. to be removed
diff --git a/media/jni/android_media_MediaDescrambler.cpp b/media/jni/android_media_MediaDescrambler.cpp
index e77e855..add47463 100644
--- a/media/jni/android_media_MediaDescrambler.cpp
+++ b/media/jni/android_media_MediaDescrambler.cpp
@@ -27,12 +27,13 @@
 #include <android/hardware/cas/native/1.0/BnHwDescrambler.h>
 #include <binder/MemoryDealer.h>
 #include <hidl/HidlSupport.h>
+#include <hidlmemory/FrameworkUtils.h>
 #include <media/stagefright/foundation/ADebug.h>
 #include <nativehelper/ScopedLocalRef.h>
 
 namespace android {
 
-using hardware::hidl_handle;
+using hardware::fromHeap;
 
 struct fields_t {
     jfieldID context;
@@ -146,14 +147,8 @@
         return false;
     }
 
-    native_handle_t* nativeHandle = native_handle_create(1, 0);
-    if (!nativeHandle) {
-        ALOGE("ensureBufferCapacity: failed to create native handle");
-        return false;
-    }
-    nativeHandle->data[0] = heap->getHeapID();
-    mDescramblerSrcBuffer.heapBase = hidl_memory("ashmem",
-            hidl_handle(nativeHandle), heap->getSize());
+    mHidlMemory = fromHeap(heap);
+    mDescramblerSrcBuffer.heapBase = *mHidlMemory;
     mDescramblerSrcBuffer.offset = (uint64_t) offset;
     mDescramblerSrcBuffer.size = (uint64_t) size;
     return true;
diff --git a/media/jni/android_media_MediaDescrambler.h b/media/jni/android_media_MediaDescrambler.h
index 015fad2..2354dc2 100644
--- a/media/jni/android_media_MediaDescrambler.h
+++ b/media/jni/android_media_MediaDescrambler.h
@@ -28,7 +28,10 @@
 class IMemory;
 class MemoryDealer;
 
-using hardware::hidl_memory;
+namespace hardware {
+class HidlMemory;
+};
+using hardware::HidlMemory;
 using hardware::hidl_string;
 using hardware::hidl_vec;
 using namespace hardware::cas::V1_0;
@@ -58,6 +61,7 @@
     sp<IDescrambler> mDescrambler;
     sp<IMemory> mMem;
     sp<MemoryDealer> mDealer;
+    sp<HidlMemory> mHidlMemory;
     SharedBuffer mDescramblerSrcBuffer;
 
     Mutex mSharedMemLock;