Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f98fc1c5 authored by Chong Zhang's avatar Chong Zhang
Browse files

MediaCas: use HidlMemory to avoid handle leaks

bug: 67710751
test: CTS MediaCasTest, ClearKeySystemTest; VTS VtsHalCasV1_0Target
Change-Id: I379ba416e72328f8e18849ded42dedb24e34210b
parent 09571f89
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ cc_library_shared {
        "libexif",
        "libpiex",
        "libandroidfw",
        "libhidlallocatorutils",
        "libhidlbase",
        "libhidltransport",
        "android.hardware.cas@1.0",
@@ -106,6 +107,7 @@ cc_library_shared {
        "liblog",  // NDK
        "libdrmframework",  // for FileSource, MediaHTTP
        "libgui",  // for VideoFrameScheduler
        "libhidlallocatorutils",
        "libhidlbase",  // VNDK???
        "libmediandk",  // NDK
        "libpowermanager",  // for JWakeLock. to be removed
+4 −9
Original line number Diff line number Diff line
@@ -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 @@ bool JDescrambler::ensureBufferCapacity(size_t neededSize) {
        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;
+5 −1
Original line number Diff line number Diff line
@@ -28,7 +28,10 @@ namespace android {
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 @@ private:
    sp<IDescrambler> mDescrambler;
    sp<IMemory> mMem;
    sp<MemoryDealer> mDealer;
    sp<HidlMemory> mHidlMemory;
    SharedBuffer mDescramblerSrcBuffer;

    Mutex mSharedMemLock;