diff --git a/Android.bp b/Android.bp index c41bff1..187b71f 100644 --- a/Android.bp +++ b/Android.bp @@ -238,7 +238,7 @@ cc_prebuilt_binary { target: { android_arm64: { srcs: ["proprietary/vendor/bin/hw/vendor.dolby.media.c2@1.0-service"], - shared_libs: ["libbase", "liblog", "libcodec2", "libutils", "android.hardware.media.c2@1.0", "android.hardware.media.c2@1.1", "android.hardware.media.c2@1.2", "libcodec2_hidl@1.0", "libcodec2_hidl@1.1", "libcodec2_hidl@1.2", "libcodec2_vndk", "libhidlbase", "libavservices_minijail", "libbinder", "libcodec2_store_dolby", "libc++", "libc", "libm", "libdl", ], + shared_libs: ["libshim_dolby", "libbase", "liblog", "libcodec2", "libutils", "android.hardware.media.c2@1.0", "android.hardware.media.c2@1.1", "android.hardware.media.c2@1.2", "libcodec2_hidl@1.0", "libcodec2_hidl@1.1", "libcodec2_hidl@1.2", "libcodec2_vndk", "libhidlbase", "libavservices_minijail", "libbinder", "libcodec2_store_dolby", "libc++", "libc", "libm", "libdl", ], }, }, compile_multilib: "64", diff --git a/dolby.mk b/dolby.mk index 5541c9f..2349c22 100644 --- a/dolby.mk +++ b/dolby.mk @@ -41,6 +41,9 @@ PRODUCT_COPY_FILES += \ PRODUCT_PACKAGES += \ libstagefright_foundation-v33 +PRODUCT_PACKAGES += \ + libshim_dolby + # Overlays PRODUCT_PACKAGES += \ DolbyFrameworksResCommon diff --git a/libshims/Android.bp b/libshims/Android.bp new file mode 100644 index 0000000..13bead4 --- /dev/null +++ b/libshims/Android.bp @@ -0,0 +1,17 @@ +// +// Copyright (C) 2023 The LineageOS Project +// +// SPDX-License-Identifier: Apache-2.0 +// + +cc_library_shared { + name: "libshim_dolby", + srcs: ["libshim_dolby.cpp"], + compile_multilib: "64", + shared_libs: [ + "liblog", + "libdl", + "libc", + ], + vendor: true, +} diff --git a/libshims/libshim_dolby.cpp b/libshims/libshim_dolby.cpp new file mode 100644 index 0000000..1be95fd --- /dev/null +++ b/libshims/libshim_dolby.cpp @@ -0,0 +1,27 @@ +// +// SPDX-FileCopyrightText: The LineageOS Project +// SPDX-License-Identifier: Apache-2.0 +// + +#include +#include + +extern "C" void _ZNK7android7RefBase9incStrongEPKv(void* thisptr, const void* id) { + if (!thisptr) { + ALOGE("DolbyShim: incStrong called on nullptr!"); + return; + } + typedef void (*RealFunc)(void*, const void*); + static RealFunc real = (RealFunc)dlsym(RTLD_NEXT, "_ZNK7android7RefBase9incStrongEPKv"); + if (real) real(thisptr, id); +} + +extern "C" void _ZNK7android7RefBase9decStrongEPKv(void* thisptr, const void* id) { + if (!thisptr) { + ALOGE("DolbyShim: decStrong called on nullptr!"); + return; + } + typedef void (*RealFunc)(void*, const void*); + static RealFunc real = (RealFunc)dlsym(RTLD_NEXT, "_ZNK7android7RefBase9decStrongEPKv"); + if (real) real(thisptr, id); +} diff --git a/proprietary/vendor/bin/hw/vendor.dolby.media.c2@1.0-service b/proprietary/vendor/bin/hw/vendor.dolby.media.c2@1.0-service old mode 100644 new mode 100755 index c325478..30e8ec4 Binary files a/proprietary/vendor/bin/hw/vendor.dolby.media.c2@1.0-service and b/proprietary/vendor/bin/hw/vendor.dolby.media.c2@1.0-service differ