diff options
author | Sijie Chen <sijiec@google.com> | 2023-12-07 18:14:00 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2023-12-07 18:14:00 +0000 |
commit | 695ef5eb0598a8664b2c2efd95b165b5526abafb (patch) | |
tree | 77e48796f8c8e46a5b9b1b213136cc92eaacd16e | |
parent | f9e3c97d45da2d700aa142ff19c1f5fcfad08036 (diff) | |
parent | 8cd1540b317a56a59b361c5adb6d8b267f4a8c5a (diff) | |
download | native_bridge_support-695ef5eb0598a8664b2c2efd95b165b5526abafb.tar.gz |
[Berberis] Add libcamera2ndk library am: 8cd1540b31
Original change: https://android-review.googlesource.com/c/platform/frameworks/libs/native_bridge_support/+/2861225
Change-Id: Icc970ef4753785dd7dcf7a237f809c22c5d7e062
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r-- | libcamera2ndk/Android.bp | 14 | ||||
-rw-r--r-- | libcamera2ndk/proxy/android_camera_checks.h | 126 | ||||
-rw-r--r-- | libcamera2ndk/proxy/android_camera_trampolines.cc | 446 | ||||
-rw-r--r-- | libcamera2ndk/proxy/emulated_api_checker.cc | 17 | ||||
-rw-r--r-- | libcamera2ndk/proxy/trampolines_arm64_to_x86_64-inl.h | 77 | ||||
-rw-r--r-- | libcamera2ndk/proxy/trampolines_arm_to_x86-inl.h | 77 | ||||
-rw-r--r-- | libcamera2ndk/proxy/trampolines_riscv64_to_x86_64-inl.h | 77 |
7 files changed, 834 insertions, 0 deletions
diff --git a/libcamera2ndk/Android.bp b/libcamera2ndk/Android.bp index f114faf..d87707c 100644 --- a/libcamera2ndk/Android.bp +++ b/libcamera2ndk/Android.bp @@ -42,3 +42,17 @@ cc_library { "libutils", ], } + +filegroup { + name: "native_bridge_proxy_libcamera2ndk_files", + srcs: [ + "proxy/android_camera_trampolines.cc", + ], +} + +filegroup { + name: "native_bridge_proxy_libcamera2ndk_api_checker_files", + srcs: [ + "proxy/emulated_api_checker.cc", + ], +} diff --git a/libcamera2ndk/proxy/android_camera_checks.h b/libcamera2ndk/proxy/android_camera_checks.h new file mode 100644 index 0000000..fdf53e5 --- /dev/null +++ b/libcamera2ndk/proxy/android_camera_checks.h @@ -0,0 +1,126 @@ +/* +* 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. +*/ + +// TODO(http://b/73019835) needed by NdkCameraCaptureSession.h +#include <camera/NdkCaptureRequest.h> + +#include <camera/NdkCameraCaptureSession.h> +#include <camera/NdkCameraError.h> +#include <camera/NdkCameraManager.h> + +#include "berberis/base/struct_check.h" + +#if defined(__arm__) || defined(NATIVE_BRIDGE_GUEST_ARCH_ARM) + +// This is layout we expect from the ACameraManager_AvailabilityCallbacks +// TODO: Note that we do not really have a way to test that guest structure layout is +// the same (see http://b/78329188 for details) +CHECK_STRUCT_LAYOUT(ACameraManager_AvailabilityCallbacks, 96, 32); +CHECK_FIELD_LAYOUT(ACameraManager_AvailabilityCallbacks, context, 0, 32); +CHECK_FIELD_LAYOUT(ACameraManager_AvailabilityCallbacks, onCameraAvailable, 32, 32); +CHECK_FIELD_LAYOUT(ACameraManager_AvailabilityCallbacks, onCameraUnavailable, 64, 32); + +CHECK_STRUCT_LAYOUT(ACameraManager_ExtendedAvailabilityCallbacks, 320, 32); +CHECK_FIELD_LAYOUT(ACameraManager_ExtendedAvailabilityCallbacks, availabilityCallbacks, 0, 96); +CHECK_FIELD_LAYOUT(ACameraManager_ExtendedAvailabilityCallbacks, + onCameraAccessPrioritiesChanged, + 96, + 32); +CHECK_FIELD_LAYOUT(ACameraManager_ExtendedAvailabilityCallbacks, + onPhysicalCameraAvailable, + 128, + 32); +CHECK_FIELD_LAYOUT(ACameraManager_ExtendedAvailabilityCallbacks, + onPhysicalCameraUnavailable, + 160, + 32); +CHECK_FIELD_LAYOUT(ACameraManager_ExtendedAvailabilityCallbacks, reserved, 192, 4 * 32); + +CHECK_STRUCT_LAYOUT(ACameraCaptureSession_captureCallbacks, 256, 32); +CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, context, 0, 32); +CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, onCaptureStarted, 32, 32); +CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, onCaptureProgressed, 64, 32); +CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, onCaptureCompleted, 96, 32); +CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, onCaptureFailed, 128, 32); +CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, onCaptureSequenceCompleted, 160, 32); +CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, onCaptureSequenceAborted, 192, 32); +CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, onCaptureBufferLost, 224, 32); + +CHECK_STRUCT_LAYOUT(ACameraCaptureSession_stateCallbacks, 128, 32); +CHECK_FIELD_LAYOUT(ACameraCaptureSession_stateCallbacks, context, 0, 32); +CHECK_FIELD_LAYOUT(ACameraCaptureSession_stateCallbacks, onClosed, 32, 32); +CHECK_FIELD_LAYOUT(ACameraCaptureSession_stateCallbacks, onReady, 64, 32); +CHECK_FIELD_LAYOUT(ACameraCaptureSession_stateCallbacks, onActive, 96, 32); + +CHECK_STRUCT_LAYOUT(ACameraDevice_StateCallbacks, 96, 32); +CHECK_FIELD_LAYOUT(ACameraDevice_StateCallbacks, context, 0, 32); +CHECK_FIELD_LAYOUT(ACameraDevice_StateCallbacks, onDisconnected, 32, 32); +CHECK_FIELD_LAYOUT(ACameraDevice_StateCallbacks, onError, 64, 32); + +#elif defined(__aarch64__) || defined(NATIVE_BRIDGE_GUEST_ARCH_ARM64) || defined(NATIVE_BRIDGE_GUEST_ARCH_RISCV64) + +// This is layout we expect from the ACameraManager_AvailabilityCallbacks +// TODO: Note that we do not really have a way to test that guest structure layout is +// the same (see http://b/78329188 for details) +CHECK_STRUCT_LAYOUT(ACameraManager_AvailabilityCallbacks, 192, 64); +CHECK_FIELD_LAYOUT(ACameraManager_AvailabilityCallbacks, context, 0, 64); +CHECK_FIELD_LAYOUT(ACameraManager_AvailabilityCallbacks, onCameraAvailable, 64, 64); +CHECK_FIELD_LAYOUT(ACameraManager_AvailabilityCallbacks, onCameraUnavailable, 128, 64); + +CHECK_STRUCT_LAYOUT(ACameraManager_ExtendedAvailabilityCallbacks, 640, 64); +CHECK_FIELD_LAYOUT(ACameraManager_ExtendedAvailabilityCallbacks, availabilityCallbacks, 0, 192); +CHECK_FIELD_LAYOUT(ACameraManager_ExtendedAvailabilityCallbacks, + onCameraAccessPrioritiesChanged, + 192, + 64); +CHECK_FIELD_LAYOUT(ACameraManager_ExtendedAvailabilityCallbacks, + onPhysicalCameraAvailable, + 256, + 64); +CHECK_FIELD_LAYOUT(ACameraManager_ExtendedAvailabilityCallbacks, + onPhysicalCameraUnavailable, + 320, + 64); +CHECK_FIELD_LAYOUT(ACameraManager_ExtendedAvailabilityCallbacks, reserved, 384, 4 * 64); + +CHECK_STRUCT_LAYOUT(ACameraCaptureSession_captureCallbacks, 512, 64); +CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, context, 0, 64); +CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, onCaptureStarted, 64, 64); +CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, onCaptureProgressed, 128, 64); +CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, onCaptureCompleted, 192, 64); +CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, onCaptureFailed, 256, 64); +CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, onCaptureSequenceCompleted, 320, 64); +CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, onCaptureSequenceAborted, 384, 64); +CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, onCaptureBufferLost, 448, 64); + +CHECK_STRUCT_LAYOUT(ACameraCaptureSession_stateCallbacks, 256, 64); +CHECK_FIELD_LAYOUT(ACameraCaptureSession_stateCallbacks, context, 0, 64); +CHECK_FIELD_LAYOUT(ACameraCaptureSession_stateCallbacks, onClosed, 64, 64); +CHECK_FIELD_LAYOUT(ACameraCaptureSession_stateCallbacks, onReady, 128, 64); +CHECK_FIELD_LAYOUT(ACameraCaptureSession_stateCallbacks, onActive, 192, 64); + +CHECK_STRUCT_LAYOUT(ACameraDevice_StateCallbacks, 192, 64); +CHECK_FIELD_LAYOUT(ACameraDevice_StateCallbacks, context, 0, 64); +CHECK_FIELD_LAYOUT(ACameraDevice_StateCallbacks, onDisconnected, 64, 64); +CHECK_FIELD_LAYOUT(ACameraDevice_StateCallbacks, onError, 128, 64); + +#else + +#error "Unknown guest/host arch combination" + +#endif + +CHECK_STRUCT_LAYOUT(camera_status_t, 32, 32); diff --git a/libcamera2ndk/proxy/android_camera_trampolines.cc b/libcamera2ndk/proxy/android_camera_trampolines.cc new file mode 100644 index 0000000..5749ed0 --- /dev/null +++ b/libcamera2ndk/proxy/android_camera_trampolines.cc @@ -0,0 +1,446 @@ +/* +* 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. +*/ + +// TODO(http://b/73019835) needed by NdkCameraCaptureSession.h +#include <camera/NdkCaptureRequest.h> + +#include <camera/NdkCameraCaptureSession.h> +#include <camera/NdkCameraError.h> +#include <camera/NdkCameraManager.h> + +#include "berberis/base/logging.h" +#include "berberis/guest_abi/function_wrappers.h" +#include "berberis/proxy_loader/proxy_library_builder.h" + +#include "android_camera_checks.h" + +namespace berberis { + +namespace { + +ACameraManager_AvailabilityCallbacks* ToHostACameraManager_AvailabilityCallbacks( + const ACameraManager_AvailabilityCallbacks* guest_callback, + ACameraManager_AvailabilityCallbacks* host_callback) { + if (guest_callback == nullptr) { + return nullptr; + } + *host_callback = { + guest_callback->context, + // typedef void (*ACameraManager_AvailabilityCallback)(void* context, const char* cameraId); + WrapGuestFunction(GuestType(guest_callback->onCameraAvailable), "onCameraAvailable-callback"), + WrapGuestFunction(GuestType(guest_callback->onCameraUnavailable), + "onCameraUnavailable-callback")}; + + return host_callback; +} + +ACameraManager_ExtendedAvailabilityCallbacks* ToHostACameraManager_ExtendedAvailabilityCallbacks( + const ACameraManager_ExtendedAvailabilityCallbacks* guest_callback, + ACameraManager_ExtendedAvailabilityCallbacks* host_callback) { + if (guest_callback == nullptr) { + return nullptr; + } + + auto* base_callbacks = ToHostACameraManager_AvailabilityCallbacks( + &(guest_callback->availabilityCallbacks), &(host_callback->availabilityCallbacks)); + CHECK_EQ(base_callbacks, &(host_callback->availabilityCallbacks)); + + // typedef void (*ACameraManager_AccessPrioritiesChangedCallback)(void* context); + host_callback->onCameraAccessPrioritiesChanged = + WrapGuestFunction(GuestType(guest_callback->onCameraAccessPrioritiesChanged), + "onCameraAccessPrioritiesChanged-callback"); + + memset(&(host_callback->reserved), 0, sizeof(host_callback->reserved)); + + return host_callback; +} + +ACameraCaptureSession_captureCallbacks* ToHostACameraCaptureSession_captureCallbacks( + const ACameraCaptureSession_captureCallbacks* guest_callbacks, + ACameraCaptureSession_captureCallbacks* host_callbacks) { + if (guest_callbacks == nullptr) { + return nullptr; + } + + *host_callbacks = { + guest_callbacks->context, + // typedef void (*ACameraCaptureSession_captureCallback_start)(void* context, + // ACameraCaptureSession* session, + // const ACaptureRequest* request, + // int64_t timestamp); + WrapGuestFunction(GuestType(guest_callbacks->onCaptureStarted), "onCaptureStarted-callback"), + // typedef void (*ACameraCaptureSession_captureCallback_result)(void* context, + // ACameraCaptureSession* + // session, ACaptureRequest* + // request, const + // ACameraMetadata* result); + WrapGuestFunction(GuestType(guest_callbacks->onCaptureProgressed), + "onCaptureProgressed-callback"), + WrapGuestFunction(GuestType(guest_callbacks->onCaptureCompleted), + "onCaptureCompleted-callback"), + // typedef void (*ACameraCaptureSession_captureCallback_failed)(void* context, + // ACameraCaptureSession* + // session, ACaptureRequest* + // request, + // ACameraCaptureFailure* + // failure); + WrapGuestFunction(GuestType(guest_callbacks->onCaptureFailed), "onCaptureFailed-callback"), + // typedef void (*ACameraCaptureSession_captureCallback_sequenceEnd)( + // void* context, ACameraCaptureSession* session, int sequenceId, int64_t frameNumber); + WrapGuestFunction(GuestType(guest_callbacks->onCaptureSequenceCompleted), + "onCaptureSequenceCompleted-callback"), + // typedef void (*ACameraCaptureSession_captureCallback_sequenceAbort)( + // void* context, ACameraCaptureSession* session, int sequenceId); + WrapGuestFunction(GuestType(guest_callbacks->onCaptureSequenceAborted), + "onCaptureSequenceAborted-callback"), + // typedef void (*ACameraCaptureSession_captureCallback_bufferLost)( + // void* context, + // ACameraCaptureSession* session, + // ACaptureRequest* request, + // ANativeWindow* window, + // int64_t frameNumber); + WrapGuestFunction(GuestType(guest_callbacks->onCaptureBufferLost), + "onCaptureBufferLost-callback"), + + }; + + return host_callbacks; +} + +ACameraCaptureSession_captureCallbacksV2* ToHostACameraCaptureSession_captureCallbacksV2( + const ACameraCaptureSession_captureCallbacksV2* guest_callbacks, + ACameraCaptureSession_captureCallbacksV2* host_callbacks) { + if (guest_callbacks == nullptr) { + return nullptr; + } + + *host_callbacks = { + guest_callbacks->context, + WrapGuestFunction(GuestType(guest_callbacks->onCaptureStarted), "onCaptureStarted-callback"), + WrapGuestFunction(GuestType(guest_callbacks->onCaptureProgressed), + "onCaptureProgressed-callback"), + WrapGuestFunction(GuestType(guest_callbacks->onCaptureCompleted), + "onCaptureCompleted-callback"), + WrapGuestFunction(GuestType(guest_callbacks->onCaptureFailed), "onCaptureFailed-callback"), + WrapGuestFunction(GuestType(guest_callbacks->onCaptureSequenceCompleted), + "onCaptureSequenceCompleted-callback"), + WrapGuestFunction(GuestType(guest_callbacks->onCaptureSequenceAborted), + "onCaptureSequenceAborted-callback"), + WrapGuestFunction(GuestType(guest_callbacks->onCaptureBufferLost), + "onCaptureBufferLost-callback"), + + }; + + return host_callbacks; +} + +ACameraCaptureSession_logicalCamera_captureCallbacks* +ToHostACameraCaptureSession_logicalCamera_captureCallbacks( + const ACameraCaptureSession_logicalCamera_captureCallbacks* guest_callbacks, + ACameraCaptureSession_logicalCamera_captureCallbacks* host_callbacks) { + if (guest_callbacks == nullptr) { + return nullptr; + } + + *host_callbacks = { + guest_callbacks->context, + WrapGuestFunction(GuestType(guest_callbacks->onCaptureStarted), "onCaptureStarted-callback"), + WrapGuestFunction(GuestType(guest_callbacks->onCaptureProgressed), + "onCaptureProgressed-callback"), + WrapGuestFunction(GuestType(guest_callbacks->onLogicalCameraCaptureCompleted), + "onLogicalCameraCaptureCompleted-callback"), + WrapGuestFunction(GuestType(guest_callbacks->onLogicalCameraCaptureFailed), + "onLogicalCameraCaptureFailed-callback"), + WrapGuestFunction(GuestType(guest_callbacks->onCaptureSequenceCompleted), + "onCaptureSequenceCompleted-callback"), + WrapGuestFunction(GuestType(guest_callbacks->onCaptureSequenceAborted), + "onCaptureSequenceAborted-callback"), + WrapGuestFunction(GuestType(guest_callbacks->onCaptureBufferLost), + "onCaptureBufferLost-callback"), + }; + + return host_callbacks; +} + +ACameraCaptureSession_logicalCamera_captureCallbacksV2* +ToHostACameraCaptureSession_logicalCamera_captureCallbacksV2( + const ACameraCaptureSession_logicalCamera_captureCallbacksV2* guest_callbacks, + ACameraCaptureSession_logicalCamera_captureCallbacksV2* host_callbacks) { + if (guest_callbacks == nullptr) { + return nullptr; + } + + *host_callbacks = { + guest_callbacks->context, + WrapGuestFunction(GuestType(guest_callbacks->onCaptureStarted), "onCaptureStarted-callback"), + WrapGuestFunction(GuestType(guest_callbacks->onCaptureProgressed), + "onCaptureProgressed-callback"), + WrapGuestFunction(GuestType(guest_callbacks->onLogicalCameraCaptureCompleted), + "onLogicalCameraCaptureCompleted-callback"), + WrapGuestFunction(GuestType(guest_callbacks->onLogicalCameraCaptureFailed), + "onLogicalCameraCaptureFailed-callback"), + WrapGuestFunction(GuestType(guest_callbacks->onCaptureSequenceCompleted), + "onCaptureSequenceCompleted-callback"), + WrapGuestFunction(GuestType(guest_callbacks->onCaptureSequenceAborted), + "onCaptureSequenceAborted-callback"), + WrapGuestFunction(GuestType(guest_callbacks->onCaptureBufferLost), + "onCaptureBufferLost-callback"), + }; + + return host_callbacks; +} + +ACameraCaptureSession_stateCallbacks* ToHostACameraCaptureSession_stateCallbacks( + const ACameraCaptureSession_stateCallbacks* guest_callbacks, + ACameraCaptureSession_stateCallbacks* host_callbacks) { + if (guest_callbacks == nullptr) { + return nullptr; + } + + *host_callbacks = { + guest_callbacks->context, + // typedef void (*ACameraCaptureSession_stateCallback)(void* context, + // ACameraCaptureSession* session); + WrapGuestFunction(GuestType(guest_callbacks->onClosed), "onClosed-callback"), + WrapGuestFunction(GuestType(guest_callbacks->onReady), "onReady-callback"), + WrapGuestFunction(GuestType(guest_callbacks->onActive), "onActive-callback"), + }; + + return host_callbacks; +} + +ACameraDevice_StateCallbacks* ToHostACameraDevice_StateCallbacks( + const ACameraDevice_StateCallbacks* guest_callbacks, + ACameraDevice_StateCallbacks* host_callbacks) { + if (guest_callbacks == nullptr) { + return nullptr; + } + + *host_callbacks = { + guest_callbacks->context, + // typedef void (*ACameraDevice_StateCallback)(void* context, ACameraDevice* device); + WrapGuestFunction(GuestType(guest_callbacks->onDisconnected), "onDisconnected-callback"), + // typedef void (*ACameraDevice_ErrorStateCallback)(void* context, + // ACameraDevice* device, + // int error); + WrapGuestFunction(GuestType(guest_callbacks->onError), "onError-callback"), + + }; + + return host_callbacks; +} + +camera_status_t DoThunk_ACameraCaptureSession_capture( + ACameraCaptureSession* session, + ACameraCaptureSession_captureCallbacks* callbacks, + int numRequests, + ACaptureRequest** requests, + int* captureSequenceId) { + ACameraCaptureSession_captureCallbacks host_callbacks_holder; + auto host_callbacks = + ToHostACameraCaptureSession_captureCallbacks(callbacks, &host_callbacks_holder); + return ACameraCaptureSession_capture( + session, host_callbacks, numRequests, requests, captureSequenceId); +} + +camera_status_t DoThunk_ACameraCaptureSession_captureV2( + ACameraCaptureSession* session, + ACameraCaptureSession_captureCallbacksV2* callbacks, + int numRequests, + ACaptureRequest** requests, + int* captureSequenceId) { + ACameraCaptureSession_captureCallbacksV2 host_callbacks_holder; + auto host_callbacks = + ToHostACameraCaptureSession_captureCallbacksV2(callbacks, &host_callbacks_holder); + return ACameraCaptureSession_captureV2( + session, host_callbacks, numRequests, requests, captureSequenceId); +} + +camera_status_t DoThunk_ACameraCaptureSession_setRepeatingRequest( + ACameraCaptureSession* session, + ACameraCaptureSession_captureCallbacks* callbacks, + int numRequests, + ACaptureRequest** requests, + int* captureSequenceId) { + ACameraCaptureSession_captureCallbacks host_callbacks_holder; + auto host_callbacks = + ToHostACameraCaptureSession_captureCallbacks(callbacks, &host_callbacks_holder); + return ACameraCaptureSession_setRepeatingRequest( + session, host_callbacks, numRequests, requests, captureSequenceId); +} + +camera_status_t DoThunk_ACameraCaptureSession_setRepeatingRequestV2( + ACameraCaptureSession* session, + ACameraCaptureSession_captureCallbacksV2* callbacks, + int numRequests, + ACaptureRequest** requests, + int* captureSequenceId) { + ACameraCaptureSession_captureCallbacksV2 host_callbacks_holder; + auto host_callbacks = + ToHostACameraCaptureSession_captureCallbacksV2(callbacks, &host_callbacks_holder); + return ACameraCaptureSession_setRepeatingRequestV2( + session, host_callbacks, numRequests, requests, captureSequenceId); +} + +camera_status_t DoThunk_ACameraCaptureSession_logicalCamera_capture( + ACameraCaptureSession* session, + ACameraCaptureSession_logicalCamera_captureCallbacks* callbacks, + int numRequests, + ACaptureRequest** requests, + int* captureSequenceId) { + ACameraCaptureSession_logicalCamera_captureCallbacks host_callbacks_holder; + auto host_callbacks = + ToHostACameraCaptureSession_logicalCamera_captureCallbacks(callbacks, &host_callbacks_holder); + return ACameraCaptureSession_logicalCamera_capture( + session, host_callbacks, numRequests, requests, captureSequenceId); +} + +camera_status_t DoThunk_ACameraCaptureSession_logicalCamera_captureV2( + ACameraCaptureSession* session, + ACameraCaptureSession_logicalCamera_captureCallbacksV2* callbacks, + int numRequests, + ACaptureRequest** requests, + int* captureSequenceId) { + ACameraCaptureSession_logicalCamera_captureCallbacksV2 host_callbacks_holder; + auto host_callbacks = ToHostACameraCaptureSession_logicalCamera_captureCallbacksV2( + callbacks, &host_callbacks_holder); + return ACameraCaptureSession_logicalCamera_captureV2( + session, host_callbacks, numRequests, requests, captureSequenceId); +} + +camera_status_t DoThunk_ACameraCaptureSession_logicalCamera_setRepeatingRequest( + ACameraCaptureSession* session, + ACameraCaptureSession_logicalCamera_captureCallbacks* callbacks, + int numRequests, + ACaptureRequest** requests, + int* captureSequenceId) { + ACameraCaptureSession_logicalCamera_captureCallbacks host_callbacks_holder; + auto host_callbacks = + ToHostACameraCaptureSession_logicalCamera_captureCallbacks(callbacks, &host_callbacks_holder); + return ACameraCaptureSession_logicalCamera_setRepeatingRequest( + session, host_callbacks, numRequests, requests, captureSequenceId); +} + +camera_status_t DoThunk_ACameraCaptureSession_logicalCamera_setRepeatingRequestV2( + ACameraCaptureSession* session, + ACameraCaptureSession_logicalCamera_captureCallbacksV2* callbacks, + int numRequests, + ACaptureRequest** requests, + int* captureSequenceId) { + ACameraCaptureSession_logicalCamera_captureCallbacksV2 host_callbacks_holder; + auto host_callbacks = ToHostACameraCaptureSession_logicalCamera_captureCallbacksV2( + callbacks, &host_callbacks_holder); + return ACameraCaptureSession_logicalCamera_setRepeatingRequestV2( + session, host_callbacks, numRequests, requests, captureSequenceId); +} + +camera_status_t DoThunk_ACameraDevice_createCaptureSession( + ACameraDevice* device, + const ACaptureSessionOutputContainer* outputs, + const ACameraCaptureSession_stateCallbacks* callbacks, + ACameraCaptureSession** session) { + ACameraCaptureSession_stateCallbacks host_callbacks_holder; + auto host_callbacks = + ToHostACameraCaptureSession_stateCallbacks(callbacks, &host_callbacks_holder); + return ACameraDevice_createCaptureSession(device, outputs, host_callbacks, session); +} + +camera_status_t DoThunk_ACameraDevice_createCaptureSessionWithSessionParameters( + ACameraDevice* device, + const ACaptureSessionOutputContainer* outputs, + const ACaptureRequest* sessionParameters, + const ACameraCaptureSession_stateCallbacks* callbacks, + ACameraCaptureSession** session) { + ACameraCaptureSession_stateCallbacks host_callbacks_holder; + auto host_callbacks = + ToHostACameraCaptureSession_stateCallbacks(callbacks, &host_callbacks_holder); + return ACameraDevice_createCaptureSessionWithSessionParameters( + device, outputs, sessionParameters, host_callbacks, session); +} + +camera_status_t DoThunk_ACameraManager_openCamera(ACameraManager* manager, + const char* cameraId, + ACameraDevice_StateCallbacks* callbacks, + ACameraDevice** device) { + ACameraDevice_StateCallbacks host_callbacks_holder; + auto host_callbacks = ToHostACameraDevice_StateCallbacks(callbacks, &host_callbacks_holder); + return ACameraManager_openCamera(manager, cameraId, host_callbacks, device); +} + +camera_status_t DoThunk_ACameraManager_registerAvailabilityCallback( + ACameraManager* opaque_manager, + const ACameraManager_AvailabilityCallbacks* guest_callback) { + ACameraManager_AvailabilityCallbacks host_callback_holder; + const auto host_callback = + ToHostACameraManager_AvailabilityCallbacks(guest_callback, &host_callback_holder); + return ACameraManager_registerAvailabilityCallback(opaque_manager, host_callback); +} + +camera_status_t DoThunk_ACameraManager_unregisterAvailabilityCallback( + ACameraManager* opaque_manager, + const ACameraManager_AvailabilityCallbacks* guest_callback) { + // Note, if guest callbacks are the same as registered, we will find them + // in wrapper cache. If not, we'll wrap what we have and let host + // unregisterator decide how to interpret this invalid input (it currently + // ignores unregistered callbacks). + ACameraManager_AvailabilityCallbacks host_callback_holder; + const auto host_callback = + ToHostACameraManager_AvailabilityCallbacks(guest_callback, &host_callback_holder); + return ACameraManager_unregisterAvailabilityCallback(opaque_manager, host_callback); +} + +camera_status_t DoThunk_ACameraManager_registerExtendedAvailabilityCallback( + ACameraManager* opaque_manager, + const ACameraManager_ExtendedAvailabilityCallbacks* guest_callback) { + ACameraManager_ExtendedAvailabilityCallbacks host_callback_holder; + const auto host_callback = + ToHostACameraManager_ExtendedAvailabilityCallbacks(guest_callback, &host_callback_holder); + return ACameraManager_registerExtendedAvailabilityCallback(opaque_manager, host_callback); +} + +camera_status_t DoThunk_ACameraManager_unregisterExtendedAvailabilityCallback( + ACameraManager* opaque_manager, + const ACameraManager_ExtendedAvailabilityCallbacks* guest_callback) { + // See comment inside DoThunk_ACameraManager_unregisterAvailabilityCallback. + ACameraManager_ExtendedAvailabilityCallbacks host_callback_holder; + const auto host_callback = + ToHostACameraManager_ExtendedAvailabilityCallbacks(guest_callback, &host_callback_holder); + return ACameraManager_unregisterExtendedAvailabilityCallback(opaque_manager, host_callback); +} + +#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("libcamera2ndk.so") + +} // namespace + +} // namespace berberis diff --git a/libcamera2ndk/proxy/emulated_api_checker.cc b/libcamera2ndk/proxy/emulated_api_checker.cc new file mode 100644 index 0000000..0dab59c --- /dev/null +++ b/libcamera2ndk/proxy/emulated_api_checker.cc @@ -0,0 +1,17 @@ +/* +* 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 "android_camera_checks.h" diff --git a/libcamera2ndk/proxy/trampolines_arm64_to_x86_64-inl.h b/libcamera2ndk/proxy/trampolines_arm64_to_x86_64-inl.h new file mode 100644 index 0000000..fcf9a5c --- /dev/null +++ b/libcamera2ndk/proxy/trampolines_arm64_to_x86_64-inl.h @@ -0,0 +1,77 @@ +// clang-format off +const KnownTrampoline kKnownTrampolines[] = { +{"ACameraCaptureSession_abortCaptures", GetTrampolineFunc<auto(void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraCaptureSession_capture", GetTrampolineFunc<auto(void*, void*, int32_t, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraCaptureSession_capture)}, +{"ACameraCaptureSession_captureV2", GetTrampolineFunc<auto(void*, void*, int32_t, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraCaptureSession_captureV2)}, +{"ACameraCaptureSession_close", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)}, +{"ACameraCaptureSession_getDevice", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraCaptureSession_logicalCamera_capture", GetTrampolineFunc<auto(void*, void*, int32_t, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraCaptureSession_logicalCamera_capture)}, +{"ACameraCaptureSession_logicalCamera_captureV2", GetTrampolineFunc<auto(void*, void*, int32_t, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraCaptureSession_logicalCamera_captureV2)}, +{"ACameraCaptureSession_logicalCamera_setRepeatingRequest", GetTrampolineFunc<auto(void*, void*, int32_t, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraCaptureSession_logicalCamera_setRepeatingRequest)}, +{"ACameraCaptureSession_logicalCamera_setRepeatingRequestV2", GetTrampolineFunc<auto(void*, void*, int32_t, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraCaptureSession_logicalCamera_setRepeatingRequestV2)}, +{"ACameraCaptureSession_prepareWindow", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraCaptureSession_setRepeatingRequest", GetTrampolineFunc<auto(void*, void*, int32_t, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraCaptureSession_setRepeatingRequest)}, +{"ACameraCaptureSession_setRepeatingRequestV2", GetTrampolineFunc<auto(void*, void*, int32_t, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraCaptureSession_setRepeatingRequestV2)}, +{"ACameraCaptureSession_setWindowPreparedCallback", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, void*, void*) -> void) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraCaptureSession_stopRepeating", GetTrampolineFunc<auto(void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraCaptureSession_updateSharedOutput", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraDevice_close", GetTrampolineFunc<auto(void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraDevice_createCaptureRequest", GetTrampolineFunc<auto(void*, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraDevice_createCaptureRequest_withPhysicalIds", GetTrampolineFunc<auto(void*, uint32_t, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraDevice_createCaptureSession", GetTrampolineFunc<auto(void*, void*, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraDevice_createCaptureSession)}, +{"ACameraDevice_createCaptureSessionWithSessionParameters", GetTrampolineFunc<auto(void*, void*, void*, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraDevice_createCaptureSessionWithSessionParameters)}, +{"ACameraDevice_getId", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)}, +{"ACameraDevice_isSessionConfigurationSupported", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraManager_create", GetTrampolineFunc<auto(void) -> void*>(), reinterpret_cast<void*>(NULL)}, +{"ACameraManager_delete", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)}, +{"ACameraManager_deleteCameraIdList", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)}, +{"ACameraManager_getCameraCharacteristics", GetTrampolineFunc<auto(void*, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraManager_getCameraIdList", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraManager_openCamera", GetTrampolineFunc<auto(void*, void*, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraManager_openCamera)}, +{"ACameraManager_registerAvailabilityCallback", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraManager_registerAvailabilityCallback)}, +{"ACameraManager_registerExtendedAvailabilityCallback", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraManager_registerExtendedAvailabilityCallback)}, +{"ACameraManager_unregisterAvailabilityCallback", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraManager_unregisterAvailabilityCallback)}, +{"ACameraManager_unregisterExtendedAvailabilityCallback", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraManager_unregisterExtendedAvailabilityCallback)}, +{"ACameraMetadata_copy", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)}, +{"ACameraMetadata_free", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)}, +{"ACameraMetadata_fromCameraMetadata", GetTrampolineFunc<auto(void*, void*) -> void*>(), reinterpret_cast<void*>(NULL)}, +{"ACameraMetadata_getAllTags", GetTrampolineFunc<auto(void*, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraMetadata_getConstEntry", GetTrampolineFunc<auto(void*, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraMetadata_isLogicalMultiCamera", GetTrampolineFunc<auto(void*, void*, void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraOutputTarget_create", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraOutputTarget_free", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_addTarget", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_copy", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_free", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_getAllTags", GetTrampolineFunc<auto(void*, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_getConstEntry", GetTrampolineFunc<auto(void*, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_getConstEntry_physicalCamera", GetTrampolineFunc<auto(void*, void*, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_getUserContext", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_removeTarget", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_double", GetTrampolineFunc<auto(void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_float", GetTrampolineFunc<auto(void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_i32", GetTrampolineFunc<auto(void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_i64", GetTrampolineFunc<auto(void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_physicalCamera_double", GetTrampolineFunc<auto(void*, void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_physicalCamera_float", GetTrampolineFunc<auto(void*, void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_physicalCamera_i32", GetTrampolineFunc<auto(void*, void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_physicalCamera_i64", GetTrampolineFunc<auto(void*, void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_physicalCamera_rational", GetTrampolineFunc<auto(void*, void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_physicalCamera_u8", GetTrampolineFunc<auto(void*, void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_rational", GetTrampolineFunc<auto(void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_u8", GetTrampolineFunc<auto(void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setUserContext", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureSessionOutputContainer_add", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureSessionOutputContainer_create", GetTrampolineFunc<auto(void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureSessionOutputContainer_free", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureSessionOutputContainer_remove", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureSessionOutput_create", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureSessionOutput_free", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureSessionPhysicalOutput_create", GetTrampolineFunc<auto(void*, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureSessionSharedOutput_add", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureSessionSharedOutput_create", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureSessionSharedOutput_remove", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +}; // kKnownTrampolines +const KnownVariable kKnownVariables[] = { +}; // kKnownVariables +// clang-format on diff --git a/libcamera2ndk/proxy/trampolines_arm_to_x86-inl.h b/libcamera2ndk/proxy/trampolines_arm_to_x86-inl.h new file mode 100644 index 0000000..fcf9a5c --- /dev/null +++ b/libcamera2ndk/proxy/trampolines_arm_to_x86-inl.h @@ -0,0 +1,77 @@ +// clang-format off +const KnownTrampoline kKnownTrampolines[] = { +{"ACameraCaptureSession_abortCaptures", GetTrampolineFunc<auto(void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraCaptureSession_capture", GetTrampolineFunc<auto(void*, void*, int32_t, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraCaptureSession_capture)}, +{"ACameraCaptureSession_captureV2", GetTrampolineFunc<auto(void*, void*, int32_t, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraCaptureSession_captureV2)}, +{"ACameraCaptureSession_close", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)}, +{"ACameraCaptureSession_getDevice", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraCaptureSession_logicalCamera_capture", GetTrampolineFunc<auto(void*, void*, int32_t, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraCaptureSession_logicalCamera_capture)}, +{"ACameraCaptureSession_logicalCamera_captureV2", GetTrampolineFunc<auto(void*, void*, int32_t, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraCaptureSession_logicalCamera_captureV2)}, +{"ACameraCaptureSession_logicalCamera_setRepeatingRequest", GetTrampolineFunc<auto(void*, void*, int32_t, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraCaptureSession_logicalCamera_setRepeatingRequest)}, +{"ACameraCaptureSession_logicalCamera_setRepeatingRequestV2", GetTrampolineFunc<auto(void*, void*, int32_t, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraCaptureSession_logicalCamera_setRepeatingRequestV2)}, +{"ACameraCaptureSession_prepareWindow", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraCaptureSession_setRepeatingRequest", GetTrampolineFunc<auto(void*, void*, int32_t, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraCaptureSession_setRepeatingRequest)}, +{"ACameraCaptureSession_setRepeatingRequestV2", GetTrampolineFunc<auto(void*, void*, int32_t, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraCaptureSession_setRepeatingRequestV2)}, +{"ACameraCaptureSession_setWindowPreparedCallback", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, void*, void*) -> void) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraCaptureSession_stopRepeating", GetTrampolineFunc<auto(void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraCaptureSession_updateSharedOutput", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraDevice_close", GetTrampolineFunc<auto(void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraDevice_createCaptureRequest", GetTrampolineFunc<auto(void*, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraDevice_createCaptureRequest_withPhysicalIds", GetTrampolineFunc<auto(void*, uint32_t, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraDevice_createCaptureSession", GetTrampolineFunc<auto(void*, void*, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraDevice_createCaptureSession)}, +{"ACameraDevice_createCaptureSessionWithSessionParameters", GetTrampolineFunc<auto(void*, void*, void*, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraDevice_createCaptureSessionWithSessionParameters)}, +{"ACameraDevice_getId", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)}, +{"ACameraDevice_isSessionConfigurationSupported", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraManager_create", GetTrampolineFunc<auto(void) -> void*>(), reinterpret_cast<void*>(NULL)}, +{"ACameraManager_delete", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)}, +{"ACameraManager_deleteCameraIdList", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)}, +{"ACameraManager_getCameraCharacteristics", GetTrampolineFunc<auto(void*, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraManager_getCameraIdList", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraManager_openCamera", GetTrampolineFunc<auto(void*, void*, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraManager_openCamera)}, +{"ACameraManager_registerAvailabilityCallback", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraManager_registerAvailabilityCallback)}, +{"ACameraManager_registerExtendedAvailabilityCallback", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraManager_registerExtendedAvailabilityCallback)}, +{"ACameraManager_unregisterAvailabilityCallback", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraManager_unregisterAvailabilityCallback)}, +{"ACameraManager_unregisterExtendedAvailabilityCallback", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraManager_unregisterExtendedAvailabilityCallback)}, +{"ACameraMetadata_copy", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)}, +{"ACameraMetadata_free", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)}, +{"ACameraMetadata_fromCameraMetadata", GetTrampolineFunc<auto(void*, void*) -> void*>(), reinterpret_cast<void*>(NULL)}, +{"ACameraMetadata_getAllTags", GetTrampolineFunc<auto(void*, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraMetadata_getConstEntry", GetTrampolineFunc<auto(void*, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraMetadata_isLogicalMultiCamera", GetTrampolineFunc<auto(void*, void*, void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraOutputTarget_create", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraOutputTarget_free", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_addTarget", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_copy", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_free", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_getAllTags", GetTrampolineFunc<auto(void*, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_getConstEntry", GetTrampolineFunc<auto(void*, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_getConstEntry_physicalCamera", GetTrampolineFunc<auto(void*, void*, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_getUserContext", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_removeTarget", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_double", GetTrampolineFunc<auto(void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_float", GetTrampolineFunc<auto(void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_i32", GetTrampolineFunc<auto(void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_i64", GetTrampolineFunc<auto(void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_physicalCamera_double", GetTrampolineFunc<auto(void*, void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_physicalCamera_float", GetTrampolineFunc<auto(void*, void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_physicalCamera_i32", GetTrampolineFunc<auto(void*, void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_physicalCamera_i64", GetTrampolineFunc<auto(void*, void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_physicalCamera_rational", GetTrampolineFunc<auto(void*, void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_physicalCamera_u8", GetTrampolineFunc<auto(void*, void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_rational", GetTrampolineFunc<auto(void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_u8", GetTrampolineFunc<auto(void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setUserContext", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureSessionOutputContainer_add", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureSessionOutputContainer_create", GetTrampolineFunc<auto(void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureSessionOutputContainer_free", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureSessionOutputContainer_remove", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureSessionOutput_create", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureSessionOutput_free", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureSessionPhysicalOutput_create", GetTrampolineFunc<auto(void*, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureSessionSharedOutput_add", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureSessionSharedOutput_create", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureSessionSharedOutput_remove", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +}; // kKnownTrampolines +const KnownVariable kKnownVariables[] = { +}; // kKnownVariables +// clang-format on diff --git a/libcamera2ndk/proxy/trampolines_riscv64_to_x86_64-inl.h b/libcamera2ndk/proxy/trampolines_riscv64_to_x86_64-inl.h new file mode 100644 index 0000000..fcf9a5c --- /dev/null +++ b/libcamera2ndk/proxy/trampolines_riscv64_to_x86_64-inl.h @@ -0,0 +1,77 @@ +// clang-format off +const KnownTrampoline kKnownTrampolines[] = { +{"ACameraCaptureSession_abortCaptures", GetTrampolineFunc<auto(void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraCaptureSession_capture", GetTrampolineFunc<auto(void*, void*, int32_t, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraCaptureSession_capture)}, +{"ACameraCaptureSession_captureV2", GetTrampolineFunc<auto(void*, void*, int32_t, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraCaptureSession_captureV2)}, +{"ACameraCaptureSession_close", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)}, +{"ACameraCaptureSession_getDevice", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraCaptureSession_logicalCamera_capture", GetTrampolineFunc<auto(void*, void*, int32_t, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraCaptureSession_logicalCamera_capture)}, +{"ACameraCaptureSession_logicalCamera_captureV2", GetTrampolineFunc<auto(void*, void*, int32_t, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraCaptureSession_logicalCamera_captureV2)}, +{"ACameraCaptureSession_logicalCamera_setRepeatingRequest", GetTrampolineFunc<auto(void*, void*, int32_t, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraCaptureSession_logicalCamera_setRepeatingRequest)}, +{"ACameraCaptureSession_logicalCamera_setRepeatingRequestV2", GetTrampolineFunc<auto(void*, void*, int32_t, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraCaptureSession_logicalCamera_setRepeatingRequestV2)}, +{"ACameraCaptureSession_prepareWindow", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraCaptureSession_setRepeatingRequest", GetTrampolineFunc<auto(void*, void*, int32_t, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraCaptureSession_setRepeatingRequest)}, +{"ACameraCaptureSession_setRepeatingRequestV2", GetTrampolineFunc<auto(void*, void*, int32_t, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraCaptureSession_setRepeatingRequestV2)}, +{"ACameraCaptureSession_setWindowPreparedCallback", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, void*, void*) -> void) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraCaptureSession_stopRepeating", GetTrampolineFunc<auto(void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraCaptureSession_updateSharedOutput", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraDevice_close", GetTrampolineFunc<auto(void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraDevice_createCaptureRequest", GetTrampolineFunc<auto(void*, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraDevice_createCaptureRequest_withPhysicalIds", GetTrampolineFunc<auto(void*, uint32_t, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraDevice_createCaptureSession", GetTrampolineFunc<auto(void*, void*, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraDevice_createCaptureSession)}, +{"ACameraDevice_createCaptureSessionWithSessionParameters", GetTrampolineFunc<auto(void*, void*, void*, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraDevice_createCaptureSessionWithSessionParameters)}, +{"ACameraDevice_getId", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)}, +{"ACameraDevice_isSessionConfigurationSupported", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraManager_create", GetTrampolineFunc<auto(void) -> void*>(), reinterpret_cast<void*>(NULL)}, +{"ACameraManager_delete", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)}, +{"ACameraManager_deleteCameraIdList", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)}, +{"ACameraManager_getCameraCharacteristics", GetTrampolineFunc<auto(void*, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraManager_getCameraIdList", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraManager_openCamera", GetTrampolineFunc<auto(void*, void*, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraManager_openCamera)}, +{"ACameraManager_registerAvailabilityCallback", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraManager_registerAvailabilityCallback)}, +{"ACameraManager_registerExtendedAvailabilityCallback", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraManager_registerExtendedAvailabilityCallback)}, +{"ACameraManager_unregisterAvailabilityCallback", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraManager_unregisterAvailabilityCallback)}, +{"ACameraManager_unregisterExtendedAvailabilityCallback", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(DoThunk_ACameraManager_unregisterExtendedAvailabilityCallback)}, +{"ACameraMetadata_copy", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)}, +{"ACameraMetadata_free", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)}, +{"ACameraMetadata_fromCameraMetadata", GetTrampolineFunc<auto(void*, void*) -> void*>(), reinterpret_cast<void*>(NULL)}, +{"ACameraMetadata_getAllTags", GetTrampolineFunc<auto(void*, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraMetadata_getConstEntry", GetTrampolineFunc<auto(void*, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraMetadata_isLogicalMultiCamera", GetTrampolineFunc<auto(void*, void*, void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraOutputTarget_create", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACameraOutputTarget_free", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_addTarget", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_copy", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_free", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_getAllTags", GetTrampolineFunc<auto(void*, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_getConstEntry", GetTrampolineFunc<auto(void*, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_getConstEntry_physicalCamera", GetTrampolineFunc<auto(void*, void*, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_getUserContext", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_removeTarget", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_double", GetTrampolineFunc<auto(void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_float", GetTrampolineFunc<auto(void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_i32", GetTrampolineFunc<auto(void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_i64", GetTrampolineFunc<auto(void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_physicalCamera_double", GetTrampolineFunc<auto(void*, void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_physicalCamera_float", GetTrampolineFunc<auto(void*, void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_physicalCamera_i32", GetTrampolineFunc<auto(void*, void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_physicalCamera_i64", GetTrampolineFunc<auto(void*, void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_physicalCamera_rational", GetTrampolineFunc<auto(void*, void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_physicalCamera_u8", GetTrampolineFunc<auto(void*, void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_rational", GetTrampolineFunc<auto(void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setEntry_u8", GetTrampolineFunc<auto(void*, uint32_t, uint32_t, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureRequest_setUserContext", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureSessionOutputContainer_add", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureSessionOutputContainer_create", GetTrampolineFunc<auto(void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureSessionOutputContainer_free", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureSessionOutputContainer_remove", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureSessionOutput_create", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureSessionOutput_free", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureSessionPhysicalOutput_create", GetTrampolineFunc<auto(void*, void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureSessionSharedOutput_add", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureSessionSharedOutput_create", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +{"ACaptureSessionSharedOutput_remove", GetTrampolineFunc<auto(void*, void*) -> uint32_t>(), reinterpret_cast<void*>(NULL)}, +}; // kKnownTrampolines +const KnownVariable kKnownVariables[] = { +}; // kKnownVariables +// clang-format on |