Merge "MediaCas: use HidlMemory to avoid handle leaks"
diff --git a/media/extractors/mpeg2/Android.bp b/media/extractors/mpeg2/Android.bp
index 818f9b0..b012b5d 100644
--- a/media/extractors/mpeg2/Android.bp
+++ b/media/extractors/mpeg2/Android.bp
@@ -18,6 +18,7 @@
"libbinder",
"libcrypto",
"libcutils",
+ "libhidlallocatorutils",
"libhidlbase",
"liblog",
"libmediaextractor",
diff --git a/media/libstagefright/ACodecBufferChannel.cpp b/media/libstagefright/ACodecBufferChannel.cpp
index 3c7ae3e..710ae68 100644
--- a/media/libstagefright/ACodecBufferChannel.cpp
+++ b/media/libstagefright/ACodecBufferChannel.cpp
@@ -22,6 +22,7 @@
#include <android/hardware/cas/native/1.0/IDescrambler.h>
#include <binder/MemoryDealer.h>
+#include <hidlmemory/FrameworkUtils.h>
#include <media/openmax/OMX_Core.h>
#include <media/stagefright/foundation/AMessage.h>
#include <media/stagefright/foundation/AUtils.h>
@@ -34,6 +35,7 @@
#include "include/SharedMemoryBuffer.h"
namespace android {
+using hardware::fromHeap;
using hardware::hidl_handle;
using hardware::hidl_string;
using hardware::hidl_vec;
@@ -162,7 +164,7 @@
size_t size;
it->mSharedEncryptedBuffer->getMemory(&offset, &size);
hardware::cas::native::V1_0::SharedBuffer srcBuffer = {
- .heapBase = mHidlMemory,
+ .heapBase = *mHidlMemory,
.offset = (uint64_t) offset,
.size = size
};
@@ -308,11 +310,8 @@
}
} else if (mDescrambler != nullptr) {
sp<IMemoryHeap> heap = dealer->getMemoryHeap();
- native_handle_t* nativeHandle = native_handle_create(1, 0);
- if (nativeHandle != nullptr) {
- int fd = heap->getHeapID();
- nativeHandle->data[0] = fd;
- mHidlMemory = hidl_memory("ashmem", hidl_handle(nativeHandle), heap->getSize());
+ mHidlMemory = fromHeap(heap);
+ if (mHidlMemory != NULL) {
ALOGV("created hidl_memory for descrambler");
} else {
ALOGE("failed to create hidl_memory for descrambler");
diff --git a/media/libstagefright/Android.bp b/media/libstagefright/Android.bp
index 8a15a50..e704c88 100644
--- a/media/libstagefright/Android.bp
+++ b/media/libstagefright/Android.bp
@@ -138,6 +138,7 @@
"libstagefright_xmlparser",
"libdl",
"libRScpp",
+ "libhidlallocatorutils",
"libhidlbase",
"libhidlmemory",
// TODO: Remove libv4l2_c2_componentstore.
diff --git a/media/libstagefright/httplive/Android.bp b/media/libstagefright/httplive/Android.bp
index f64e437..8a77401 100644
--- a/media/libstagefright/httplive/Android.bp
+++ b/media/libstagefright/httplive/Android.bp
@@ -40,6 +40,7 @@
"libstagefright",
"libstagefright_foundation",
"libutils",
+ "libhidlallocatorutils",
"libhidlbase",
"android.hardware.cas@1.0",
"android.hardware.cas.native@1.0",
diff --git a/media/libstagefright/include/ACodecBufferChannel.h b/media/libstagefright/include/ACodecBufferChannel.h
index f253a52..7c01e45 100644
--- a/media/libstagefright/include/ACodecBufferChannel.h
+++ b/media/libstagefright/include/ACodecBufferChannel.h
@@ -29,8 +29,10 @@
#include <media/IOMX.h>
namespace android {
-
-using hardware::hidl_memory;
+namespace hardware {
+class HidlMemory;
+};
+using hardware::HidlMemory;
/**
* BufferChannelBase implementation for ACodec.
@@ -119,7 +121,7 @@
sp<MemoryDealer> mDealer;
sp<IMemory> mDecryptDestination;
int32_t mHeapSeqNum;
- hidl_memory mHidlMemory;
+ sp<HidlMemory> mHidlMemory;
// These should only be accessed via std::atomic_* functions.
//
diff --git a/media/libstagefright/mpeg2ts/ATSParser.cpp b/media/libstagefright/mpeg2ts/ATSParser.cpp
index 9b12b2d..bef2db4 100644
--- a/media/libstagefright/mpeg2ts/ATSParser.cpp
+++ b/media/libstagefright/mpeg2ts/ATSParser.cpp
@@ -26,6 +26,7 @@
#include <binder/IMemory.h>
#include <binder/MemoryDealer.h>
#include <cutils/native_handle.h>
+#include <hidlmemory/FrameworkUtils.h>
#include <media/stagefright/foundation/ABitReader.h>
#include <media/stagefright/foundation/ABuffer.h>
#include <media/stagefright/foundation/ADebug.h>
@@ -44,10 +45,10 @@
#include <inttypes.h>
namespace android {
-using hardware::hidl_handle;
-using hardware::hidl_memory;
+using hardware::fromHeap;
using hardware::hidl_string;
using hardware::hidl_vec;
+using hardware::HidlMemory;
using namespace hardware::cas::V1_0;
using namespace hardware::cas::native::V1_0;
@@ -210,6 +211,7 @@
sp<AMessage> mSampleAesKeyItem;
sp<IMemory> mMem;
sp<MemoryDealer> mDealer;
+ sp<HidlMemory> mHidlMemory;
hardware::cas::native::V1_0::SharedBuffer mDescramblerSrcBuffer;
sp<ABuffer> mDescrambledBuffer;
List<SubSampleInfo> mSubSamples;
@@ -852,14 +854,9 @@
if (heap == NULL) {
return false;
}
- native_handle_t* nativeHandle = native_handle_create(1, 0);
- if (!nativeHandle) {
- ALOGE("[stream %d] failed to create native handle", mElementaryPID);
- 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;
diff --git a/media/libstagefright/mpeg2ts/Android.bp b/media/libstagefright/mpeg2ts/Android.bp
index 0b2a48f..fbf1496 100644
--- a/media/libstagefright/mpeg2ts/Android.bp
+++ b/media/libstagefright/mpeg2ts/Android.bp
@@ -33,7 +33,7 @@
shared_libs: [
"libcrypto",
"libmedia",
- "libhidlmemory",
+ "libhidlallocatorutils",
"android.hardware.cas.native@1.0",
"android.hidl.memory@1.0",
],