diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-12-12 02:16:58 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-12-12 02:16:58 +0000 |
commit | e81522da241e4be2565f2d3ed4960d1738778cd2 (patch) | |
tree | e2db8a0f0ec4776d5f44eb5465a2724810ec7ad4 | |
parent | 9d6d0a06169919518d67cbafe09da372d7107663 (diff) | |
parent | 3086e27c0cf0433447127bad037eabe76eb743f5 (diff) | |
download | native_bridge_support-android14-qpr2-release.tar.gz |
Snap for 11206181 from 3086e27c0cf0433447127bad037eabe76eb743f5 to 24Q1-releaseandroid-14.0.0_r37android-14.0.0_r36android-14.0.0_r35android-14.0.0_r34android-14.0.0_r33android-14.0.0_r32android-14.0.0_r31android-14.0.0_r30android-14.0.0_r29android14-qpr2-s5-releaseandroid14-qpr2-s4-releaseandroid14-qpr2-s3-releaseandroid14-qpr2-s2-releaseandroid14-qpr2-s1-releaseandroid14-qpr2-release
Change-Id: Ibe3af14eb0b7896198e124e8ea311e3ed020a40e
-rw-r--r-- | libjnigraphics/Android.bp | 7 | ||||
-rw-r--r-- | libjnigraphics/proxy/libjnigraphics_trampolines.cc | 93 | ||||
-rw-r--r-- | libjnigraphics/proxy/trampolines_arm64_to_x86_64-inl.h | 45 | ||||
-rw-r--r-- | libjnigraphics/proxy/trampolines_arm_to_x86-inl.h | 45 | ||||
-rw-r--r-- | libjnigraphics/proxy/trampolines_riscv64_to_x86_64-inl.h | 45 |
5 files changed, 235 insertions, 0 deletions
diff --git a/libjnigraphics/Android.bp b/libjnigraphics/Android.bp index eb785a8..bf26c74 100644 --- a/libjnigraphics/Android.bp +++ b/libjnigraphics/Android.bp @@ -33,3 +33,10 @@ cc_library { }, shared_libs: ["libnative_bridge_guest_libandroid_runtime"], } + +filegroup { + name: "native_bridge_proxy_libjnigraphics_files", + srcs: [ + "proxy/libjnigraphics_trampolines.cc", + ], +} diff --git a/libjnigraphics/proxy/libjnigraphics_trampolines.cc b/libjnigraphics/proxy/libjnigraphics_trampolines.cc new file mode 100644 index 0000000..696618f --- /dev/null +++ b/libjnigraphics/proxy/libjnigraphics_trampolines.cc @@ -0,0 +1,93 @@ +/* +* Copyright (C) 2023 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#include <dlfcn.h> +#include <stdint.h> + +#include <android/imagedecoder.h> + +#include "berberis/base/bit_util.h" +#include "berberis/guest_abi/function_wrappers.h" +#include "berberis/proxy_loader/proxy_library_builder.h" + +namespace berberis { + +namespace { + +// int AImageDecoder_setCrop(AImageDecoder*, ARect) +void DoCustomTrampoline_AImageDecoder_setCrop(HostCode /* callee */, ProcessState* state) { +#if defined(NATIVE_BRIDGE_GUEST_ARCH_ARM) + // On arm, ARect is passed the same way as 4x int32_t. + auto [decoder, left, top, right, bottom] = + GuestParamsValues<int(AImageDecoder*, int32_t, int32_t, int32_t, int32_t)>(state); +#elif defined(NATIVE_BRIDGE_GUEST_ARCH_ARM64) || defined(NATIVE_BRIDGE_GUEST_ARCH_RISCV64) + // ARect is passed the same way as 2x int64_t. + auto [decoder, left_and_top, right_and_bottom] = + GuestParamsValues<int(AImageDecoder*, int64_t, int64_t)>(state); + int32_t left = left_and_top; + int32_t top = left_and_top >> 32; + int32_t right = right_and_bottom; + int32_t bottom = right_and_bottom >> 32; +#else +#error "Unknown guest arch" +#endif + ARect crop{left, top, right, bottom}; + auto&& [ret] = GuestReturnReference<decltype(AImageDecoder_setCrop)>(state); + ret = AImageDecoder_setCrop(decoder, crop); +} + +// ARect AImageDecoderFrameInfo_getFrameRect(const AImageDecoderFrameInfo* info) +void DoCustomTrampoline_AImageDecoderFrameInfo_getFrameRect(HostCode /* callee */, + ProcessState* state) { +#if defined(NATIVE_BRIDGE_GUEST_ARCH_ARM) + // ARect is returned by pointer which GuestArgumentInfo normally supports. + using FuncType = decltype(AImageDecoderFrameInfo_getFrameRect); + using ResType = ARect; +#elif defined(NATIVE_BRIDGE_GUEST_ARCH_ARM64) || defined(NATIVE_BRIDGE_GUEST_ARCH_RISCV64) + // ARect is returned in two integer registers which is equivalent to returning __uint128_t. + using FuncType = __uint128_t(const AImageDecoderFrameInfo* info); + using ResType = __uint128_t; +#else +#error "Unknown guest arch" +#endif + auto [info] = GuestParamsValues<FuncType>(state); + auto&& [ret] = GuestReturnReference<FuncType>(state); + ret = bit_cast<ResType>(AImageDecoderFrameInfo_getFrameRect(info)); +} + +#if defined(NATIVE_BRIDGE_GUEST_ARCH_ARM) && defined(__i386__) + +#include "trampolines_arm_to_x86-inl.h" // generated file NOLINT [build/include] + +#elif defined(NATIVE_BRIDGE_GUEST_ARCH_ARM64) && defined(__x86_64__) + +#include "trampolines_arm64_to_x86_64-inl.h" // generated file NOLINT [build/include] + +#elif defined(NATIVE_BRIDGE_GUEST_ARCH_RISCV64) && defined(__x86_64__) + +#include "trampolines_riscv64_to_x86_64-inl.h" // generated file NOLINT [build/include] + +#else + +#error "Unknown guest/host arch combination" + +#endif + +DEFINE_INIT_PROXY_LIBRARY("libjnigraphics.so") + +} // namespace + +} // namespace berberis diff --git a/libjnigraphics/proxy/trampolines_arm64_to_x86_64-inl.h b/libjnigraphics/proxy/trampolines_arm64_to_x86_64-inl.h new file mode 100644 index 0000000..e8e6f8e --- /dev/null +++ b/libjnigraphics/proxy/trampolines_arm64_to_x86_64-inl.h @@ -0,0 +1,45 @@ +// clang-format off +const KnownTrampoline kKnownTrampolines[] = { +{"AImageDecoderFrameInfo_create", GetTrampolineFunc<auto(void) -> void*>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderFrameInfo_delete", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderFrameInfo_getBlendOp", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderFrameInfo_getDisposeOp", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderFrameInfo_getDuration", GetTrampolineFunc<auto(void*) -> int64_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderFrameInfo_getFrameRect", DoCustomTrampoline_AImageDecoderFrameInfo_getFrameRect, reinterpret_cast<void*>(DoBadThunk)}, +{"AImageDecoderFrameInfo_hasAlphaWithinBounds", GetTrampolineFunc<auto(void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderHeaderInfo_getAlphaFlags", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderHeaderInfo_getAndroidBitmapFormat", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderHeaderInfo_getDataSpace", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderHeaderInfo_getHeight", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderHeaderInfo_getMimeType", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderHeaderInfo_getWidth", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_advanceFrame", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_computeSampledSize", GetTrampolineFunc<auto(void*, int32_t, void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_createFromAAsset", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_createFromBuffer", GetTrampolineFunc<auto(void*, uint64_t, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_createFromFd", GetTrampolineFunc<auto(int32_t, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_decodeImage", GetTrampolineFunc<auto(void*, void*, uint64_t, uint64_t) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_delete", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_getFrameInfo", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_getHeaderInfo", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_getMinimumStride", GetTrampolineFunc<auto(void*) -> uint64_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_getRepeatCount", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_isAnimated", GetTrampolineFunc<auto(void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_resultToString", GetTrampolineFunc<auto(int32_t) -> void*>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_rewind", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_setAndroidBitmapFormat", GetTrampolineFunc<auto(void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_setCrop", DoCustomTrampoline_AImageDecoder_setCrop, reinterpret_cast<void*>(DoBadThunk)}, +{"AImageDecoder_setDataSpace", GetTrampolineFunc<auto(void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_setInternallyHandleDisposePrevious", GetTrampolineFunc<auto(void*, uint8_t) -> void>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_setTargetSize", GetTrampolineFunc<auto(void*, int32_t, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_setUnpremultipliedRequired", GetTrampolineFunc<auto(void*, uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AndroidBitmap_compress", GetTrampolineFunc<auto(void*, int32_t, void*, int32_t, int32_t, void*, auto(*)(void*, void*, uint64_t) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AndroidBitmap_getDataSpace", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AndroidBitmap_getHardwareBuffer", GetTrampolineFunc<auto(void*, void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AndroidBitmap_getInfo", GetTrampolineFunc<auto(void*, void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AndroidBitmap_lockPixels", GetTrampolineFunc<auto(void*, void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AndroidBitmap_unlockPixels", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +}; // kKnownTrampolines +const KnownVariable kKnownVariables[] = { +}; // kKnownVariables +// clang-format on diff --git a/libjnigraphics/proxy/trampolines_arm_to_x86-inl.h b/libjnigraphics/proxy/trampolines_arm_to_x86-inl.h new file mode 100644 index 0000000..579399f --- /dev/null +++ b/libjnigraphics/proxy/trampolines_arm_to_x86-inl.h @@ -0,0 +1,45 @@ +// clang-format off +const KnownTrampoline kKnownTrampolines[] = { +{"AImageDecoderFrameInfo_create", GetTrampolineFunc<auto(void) -> void*>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderFrameInfo_delete", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderFrameInfo_getBlendOp", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderFrameInfo_getDisposeOp", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderFrameInfo_getDuration", GetTrampolineFunc<auto(void*) -> int64_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderFrameInfo_getFrameRect", DoCustomTrampoline_AImageDecoderFrameInfo_getFrameRect, reinterpret_cast<void*>(DoBadThunk)}, +{"AImageDecoderFrameInfo_hasAlphaWithinBounds", GetTrampolineFunc<auto(void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderHeaderInfo_getAlphaFlags", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderHeaderInfo_getAndroidBitmapFormat", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderHeaderInfo_getDataSpace", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderHeaderInfo_getHeight", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderHeaderInfo_getMimeType", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderHeaderInfo_getWidth", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_advanceFrame", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_computeSampledSize", GetTrampolineFunc<auto(void*, int32_t, void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_createFromAAsset", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_createFromBuffer", GetTrampolineFunc<auto(void*, uint32_t, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_createFromFd", GetTrampolineFunc<auto(int32_t, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_decodeImage", GetTrampolineFunc<auto(void*, void*, uint32_t, uint32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_delete", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_getFrameInfo", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_getHeaderInfo", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_getMinimumStride", GetTrampolineFunc<auto(void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_getRepeatCount", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_isAnimated", GetTrampolineFunc<auto(void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_resultToString", GetTrampolineFunc<auto(int32_t) -> void*>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_rewind", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_setAndroidBitmapFormat", GetTrampolineFunc<auto(void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_setCrop", DoCustomTrampoline_AImageDecoder_setCrop, reinterpret_cast<void*>(DoBadThunk)}, +{"AImageDecoder_setDataSpace", GetTrampolineFunc<auto(void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_setInternallyHandleDisposePrevious", GetTrampolineFunc<auto(void*, uint8_t) -> void>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_setTargetSize", GetTrampolineFunc<auto(void*, int32_t, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_setUnpremultipliedRequired", GetTrampolineFunc<auto(void*, uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AndroidBitmap_compress", GetTrampolineFunc<auto(void*, int32_t, void*, int32_t, int32_t, void*, auto(*)(void*, void*, uint32_t) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AndroidBitmap_getDataSpace", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AndroidBitmap_getHardwareBuffer", GetTrampolineFunc<auto(void*, void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AndroidBitmap_getInfo", GetTrampolineFunc<auto(void*, void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AndroidBitmap_lockPixels", GetTrampolineFunc<auto(void*, void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AndroidBitmap_unlockPixels", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +}; // kKnownTrampolines +const KnownVariable kKnownVariables[] = { +}; // kKnownVariables +// clang-format on diff --git a/libjnigraphics/proxy/trampolines_riscv64_to_x86_64-inl.h b/libjnigraphics/proxy/trampolines_riscv64_to_x86_64-inl.h new file mode 100644 index 0000000..e8e6f8e --- /dev/null +++ b/libjnigraphics/proxy/trampolines_riscv64_to_x86_64-inl.h @@ -0,0 +1,45 @@ +// clang-format off +const KnownTrampoline kKnownTrampolines[] = { +{"AImageDecoderFrameInfo_create", GetTrampolineFunc<auto(void) -> void*>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderFrameInfo_delete", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderFrameInfo_getBlendOp", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderFrameInfo_getDisposeOp", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderFrameInfo_getDuration", GetTrampolineFunc<auto(void*) -> int64_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderFrameInfo_getFrameRect", DoCustomTrampoline_AImageDecoderFrameInfo_getFrameRect, reinterpret_cast<void*>(DoBadThunk)}, +{"AImageDecoderFrameInfo_hasAlphaWithinBounds", GetTrampolineFunc<auto(void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderHeaderInfo_getAlphaFlags", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderHeaderInfo_getAndroidBitmapFormat", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderHeaderInfo_getDataSpace", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderHeaderInfo_getHeight", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderHeaderInfo_getMimeType", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoderHeaderInfo_getWidth", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_advanceFrame", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_computeSampledSize", GetTrampolineFunc<auto(void*, int32_t, void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_createFromAAsset", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_createFromBuffer", GetTrampolineFunc<auto(void*, uint64_t, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_createFromFd", GetTrampolineFunc<auto(int32_t, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_decodeImage", GetTrampolineFunc<auto(void*, void*, uint64_t, uint64_t) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_delete", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_getFrameInfo", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_getHeaderInfo", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_getMinimumStride", GetTrampolineFunc<auto(void*) -> uint64_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_getRepeatCount", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_isAnimated", GetTrampolineFunc<auto(void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_resultToString", GetTrampolineFunc<auto(int32_t) -> void*>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_rewind", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_setAndroidBitmapFormat", GetTrampolineFunc<auto(void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_setCrop", DoCustomTrampoline_AImageDecoder_setCrop, reinterpret_cast<void*>(DoBadThunk)}, +{"AImageDecoder_setDataSpace", GetTrampolineFunc<auto(void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_setInternallyHandleDisposePrevious", GetTrampolineFunc<auto(void*, uint8_t) -> void>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_setTargetSize", GetTrampolineFunc<auto(void*, int32_t, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AImageDecoder_setUnpremultipliedRequired", GetTrampolineFunc<auto(void*, uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AndroidBitmap_compress", GetTrampolineFunc<auto(void*, int32_t, void*, int32_t, int32_t, void*, auto(*)(void*, void*, uint64_t) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AndroidBitmap_getDataSpace", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AndroidBitmap_getHardwareBuffer", GetTrampolineFunc<auto(void*, void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AndroidBitmap_getInfo", GetTrampolineFunc<auto(void*, void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AndroidBitmap_lockPixels", GetTrampolineFunc<auto(void*, void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +{"AndroidBitmap_unlockPixels", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)}, +}; // kKnownTrampolines +const KnownVariable kKnownVariables[] = { +}; // kKnownVariables +// clang-format on |