1 /* 2 * Copyright (C) 2023 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 // TODO(http://b/73019835) needed by NdkCameraCaptureSession.h 18 #include <camera/NdkCaptureRequest.h> 19 20 #include <camera/NdkCameraCaptureSession.h> 21 #include <camera/NdkCameraError.h> 22 #include <camera/NdkCameraManager.h> 23 24 #include "berberis/base/struct_check.h" 25 26 #if defined(__arm__) || defined(NATIVE_BRIDGE_GUEST_ARCH_ARM) 27 28 // This is layout we expect from the ACameraManager_AvailabilityCallbacks 29 // TODO: Note that we do not really have a way to test that guest structure layout is 30 // the same (see http://b/78329188 for details) 31 CHECK_STRUCT_LAYOUT(ACameraManager_AvailabilityCallbacks, 96, 32); 32 CHECK_FIELD_LAYOUT(ACameraManager_AvailabilityCallbacks, context, 0, 32); 33 CHECK_FIELD_LAYOUT(ACameraManager_AvailabilityCallbacks, onCameraAvailable, 32, 32); 34 CHECK_FIELD_LAYOUT(ACameraManager_AvailabilityCallbacks, onCameraUnavailable, 64, 32); 35 36 CHECK_STRUCT_LAYOUT(ACameraManager_ExtendedAvailabilityCallbacks, 320, 32); 37 CHECK_FIELD_LAYOUT(ACameraManager_ExtendedAvailabilityCallbacks, availabilityCallbacks, 0, 96); 38 CHECK_FIELD_LAYOUT(ACameraManager_ExtendedAvailabilityCallbacks, 39 onCameraAccessPrioritiesChanged, 40 96, 41 32); 42 CHECK_FIELD_LAYOUT(ACameraManager_ExtendedAvailabilityCallbacks, 43 onPhysicalCameraAvailable, 44 128, 45 32); 46 CHECK_FIELD_LAYOUT(ACameraManager_ExtendedAvailabilityCallbacks, 47 onPhysicalCameraUnavailable, 48 160, 49 32); 50 CHECK_FIELD_LAYOUT(ACameraManager_ExtendedAvailabilityCallbacks, reserved, 192, 4 * 32); 51 52 CHECK_STRUCT_LAYOUT(ACameraCaptureSession_captureCallbacks, 256, 32); 53 CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, context, 0, 32); 54 CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, onCaptureStarted, 32, 32); 55 CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, onCaptureProgressed, 64, 32); 56 CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, onCaptureCompleted, 96, 32); 57 CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, onCaptureFailed, 128, 32); 58 CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, onCaptureSequenceCompleted, 160, 32); 59 CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, onCaptureSequenceAborted, 192, 32); 60 CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, onCaptureBufferLost, 224, 32); 61 62 CHECK_STRUCT_LAYOUT(ACameraCaptureSession_stateCallbacks, 128, 32); 63 CHECK_FIELD_LAYOUT(ACameraCaptureSession_stateCallbacks, context, 0, 32); 64 CHECK_FIELD_LAYOUT(ACameraCaptureSession_stateCallbacks, onClosed, 32, 32); 65 CHECK_FIELD_LAYOUT(ACameraCaptureSession_stateCallbacks, onReady, 64, 32); 66 CHECK_FIELD_LAYOUT(ACameraCaptureSession_stateCallbacks, onActive, 96, 32); 67 68 CHECK_STRUCT_LAYOUT(ACameraDevice_StateCallbacks, 96, 32); 69 CHECK_FIELD_LAYOUT(ACameraDevice_StateCallbacks, context, 0, 32); 70 CHECK_FIELD_LAYOUT(ACameraDevice_StateCallbacks, onDisconnected, 32, 32); 71 CHECK_FIELD_LAYOUT(ACameraDevice_StateCallbacks, onError, 64, 32); 72 73 #elif defined(__aarch64__) || defined(NATIVE_BRIDGE_GUEST_ARCH_ARM64) || defined(NATIVE_BRIDGE_GUEST_ARCH_RISCV64) 74 75 // This is layout we expect from the ACameraManager_AvailabilityCallbacks 76 // TODO: Note that we do not really have a way to test that guest structure layout is 77 // the same (see http://b/78329188 for details) 78 CHECK_STRUCT_LAYOUT(ACameraManager_AvailabilityCallbacks, 192, 64); 79 CHECK_FIELD_LAYOUT(ACameraManager_AvailabilityCallbacks, context, 0, 64); 80 CHECK_FIELD_LAYOUT(ACameraManager_AvailabilityCallbacks, onCameraAvailable, 64, 64); 81 CHECK_FIELD_LAYOUT(ACameraManager_AvailabilityCallbacks, onCameraUnavailable, 128, 64); 82 83 CHECK_STRUCT_LAYOUT(ACameraManager_ExtendedAvailabilityCallbacks, 640, 64); 84 CHECK_FIELD_LAYOUT(ACameraManager_ExtendedAvailabilityCallbacks, availabilityCallbacks, 0, 192); 85 CHECK_FIELD_LAYOUT(ACameraManager_ExtendedAvailabilityCallbacks, 86 onCameraAccessPrioritiesChanged, 87 192, 88 64); 89 CHECK_FIELD_LAYOUT(ACameraManager_ExtendedAvailabilityCallbacks, 90 onPhysicalCameraAvailable, 91 256, 92 64); 93 CHECK_FIELD_LAYOUT(ACameraManager_ExtendedAvailabilityCallbacks, 94 onPhysicalCameraUnavailable, 95 320, 96 64); 97 CHECK_FIELD_LAYOUT(ACameraManager_ExtendedAvailabilityCallbacks, reserved, 384, 4 * 64); 98 99 CHECK_STRUCT_LAYOUT(ACameraCaptureSession_captureCallbacks, 512, 64); 100 CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, context, 0, 64); 101 CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, onCaptureStarted, 64, 64); 102 CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, onCaptureProgressed, 128, 64); 103 CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, onCaptureCompleted, 192, 64); 104 CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, onCaptureFailed, 256, 64); 105 CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, onCaptureSequenceCompleted, 320, 64); 106 CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, onCaptureSequenceAborted, 384, 64); 107 CHECK_FIELD_LAYOUT(ACameraCaptureSession_captureCallbacks, onCaptureBufferLost, 448, 64); 108 109 CHECK_STRUCT_LAYOUT(ACameraCaptureSession_stateCallbacks, 256, 64); 110 CHECK_FIELD_LAYOUT(ACameraCaptureSession_stateCallbacks, context, 0, 64); 111 CHECK_FIELD_LAYOUT(ACameraCaptureSession_stateCallbacks, onClosed, 64, 64); 112 CHECK_FIELD_LAYOUT(ACameraCaptureSession_stateCallbacks, onReady, 128, 64); 113 CHECK_FIELD_LAYOUT(ACameraCaptureSession_stateCallbacks, onActive, 192, 64); 114 115 CHECK_STRUCT_LAYOUT(ACameraDevice_StateCallbacks, 192, 64); 116 CHECK_FIELD_LAYOUT(ACameraDevice_StateCallbacks, context, 0, 64); 117 CHECK_FIELD_LAYOUT(ACameraDevice_StateCallbacks, onDisconnected, 64, 64); 118 CHECK_FIELD_LAYOUT(ACameraDevice_StateCallbacks, onError, 128, 64); 119 120 #else 121 122 #error "Unknown guest/host arch combination" 123 124 #endif 125 126 CHECK_STRUCT_LAYOUT(camera_status_t, 32, 32); 127