1 // Copyright 2018 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "device/vr/android/arcore/arcore_shim.h"
6
7 #include <dlfcn.h>
8
9 #include "base/android/android_hardware_buffer_compat.h"
10 #include "base/android/build_info.h"
11 #include "base/logging.h"
12 #include "device/vr/android/arcore/arcore_sdk.h"
13
14 namespace {
15
16 // Run DO macro for every function defined in the API.
17 #define FOR_EACH_API_FN(DO) \
18 DO(ArAnchor_detach) \
19 DO(ArAnchor_getPose) \
20 DO(ArAnchor_getTrackingState) \
21 DO(ArAnchor_release) \
22 DO(ArAnchorList_acquireItem) \
23 DO(ArAnchorList_create) \
24 DO(ArAnchorList_destroy) \
25 DO(ArAnchorList_getSize) \
26 DO(ArAugmentedImage_getCenterPose) \
27 DO(ArAugmentedImage_getExtentX) \
28 DO(ArAugmentedImage_getIndex) \
29 DO(ArAugmentedImage_getTrackingMethod) \
30 DO(ArAugmentedImageDatabase_addImageWithPhysicalSize) \
31 DO(ArAugmentedImageDatabase_create) \
32 DO(ArAugmentedImageDatabase_getNumImages) \
33 DO(ArCamera_getDisplayOrientedPose) \
34 DO(ArCamera_getProjectionMatrix) \
35 DO(ArCamera_getTrackingState) \
36 DO(ArCamera_getViewMatrix) \
37 DO(ArCameraConfig_create) \
38 DO(ArCameraConfig_destroy) \
39 DO(ArCameraConfig_getDepthSensorUsage) \
40 DO(ArCameraConfig_getFacingDirection) \
41 DO(ArCameraConfig_getFpsRange) \
42 DO(ArCameraConfig_getImageDimensions) \
43 DO(ArCameraConfig_getTextureDimensions) \
44 DO(ArCameraConfigFilter_create) \
45 DO(ArCameraConfigFilter_destroy) \
46 DO(ArCameraConfigFilter_setDepthSensorUsage) \
47 DO(ArCameraConfigFilter_setTargetFps) \
48 DO(ArCameraConfigList_create) \
49 DO(ArCameraConfigList_destroy) \
50 DO(ArCameraConfigList_getItem) \
51 DO(ArCameraConfigList_getSize) \
52 DO(ArConfig_create) \
53 DO(ArConfig_destroy) \
54 DO(ArConfig_getDepthMode) \
55 DO(ArConfig_getLightEstimationMode) \
56 DO(ArConfig_setAugmentedImageDatabase) \
57 DO(ArConfig_setDepthMode) \
58 DO(ArConfig_setFocusMode) \
59 DO(ArConfig_setLightEstimationMode) \
60 DO(ArFrame_acquireCamera) \
61 DO(ArFrame_acquireDepthImage) \
62 DO(ArFrame_create) \
63 DO(ArFrame_destroy) \
64 DO(ArFrame_getLightEstimate) \
65 DO(ArFrame_getTimestamp) \
66 DO(ArFrame_getUpdatedAnchors) \
67 DO(ArFrame_getUpdatedTrackables) \
68 DO(ArFrame_hitTestRay) \
69 DO(ArFrame_transformCoordinates2d) \
70 DO(ArHitResult_acquireTrackable) \
71 DO(ArHitResult_create) \
72 DO(ArHitResult_destroy) \
73 DO(ArHitResult_getHitPose) \
74 DO(ArHitResultList_create) \
75 DO(ArHitResultList_destroy) \
76 DO(ArHitResultList_getItem) \
77 DO(ArHitResultList_getSize) \
78 DO(ArImage_getFormat) \
79 DO(ArImage_getHeight) \
80 DO(ArImage_getNumberOfPlanes) \
81 DO(ArImage_getPlaneData) \
82 DO(ArImage_getPlanePixelStride) \
83 DO(ArImage_getPlaneRowStride) \
84 DO(ArImage_getTimestamp) \
85 DO(ArImage_getWidth) \
86 DO(ArImage_release) \
87 DO(ArLightEstimate_acquireEnvironmentalHdrCubemap) \
88 DO(ArLightEstimate_create) \
89 DO(ArLightEstimate_destroy) \
90 DO(ArLightEstimate_getEnvironmentalHdrAmbientSphericalHarmonics) \
91 DO(ArLightEstimate_getEnvironmentalHdrMainLightDirection) \
92 DO(ArLightEstimate_getEnvironmentalHdrMainLightIntensity) \
93 DO(ArLightEstimate_getState) \
94 DO(ArLightEstimate_getTimestamp) \
95 DO(ArPlane_acquireSubsumedBy) \
96 DO(ArPlane_getCenterPose) \
97 DO(ArPlane_getPolygon) \
98 DO(ArPlane_getPolygonSize) \
99 DO(ArPlane_getType) \
100 DO(ArPlane_isPoseInPolygon) \
101 DO(ArPose_create) \
102 DO(ArPose_destroy) \
103 DO(ArPose_getMatrix) \
104 DO(ArPose_getPoseRaw) \
105 DO(ArSession_acquireNewAnchor) \
106 DO(ArSession_configure) \
107 DO(ArSession_create) \
108 DO(ArSession_destroy) \
109 DO(ArSession_enableIncognitoMode_private) \
110 DO(ArSession_getAllAnchors) \
111 DO(ArSession_getAllTrackables) \
112 DO(ArSession_getSupportedCameraConfigsWithFilter) \
113 DO(ArSession_pause) \
114 DO(ArSession_resume) \
115 DO(ArSession_setCameraConfig) \
116 DO(ArSession_setCameraTextureName) \
117 DO(ArSession_setDisplayGeometry) \
118 DO(ArSession_update) \
119 DO(ArTrackable_acquireNewAnchor) \
120 DO(ArTrackable_getTrackingState) \
121 DO(ArTrackable_getType) \
122 DO(ArTrackable_release) \
123 DO(ArTrackableList_acquireItem) \
124 DO(ArTrackableList_create) \
125 DO(ArTrackableList_destroy) \
126 DO(ArTrackableList_getSize)
127
128 struct ArCoreApi {
129 // Generate a function pointer field for every ArCore API function.
130 #define GEN_FN_PTR(fn) decltype(&fn) impl_##fn = nullptr;
131 FOR_EACH_API_FN(GEN_FN_PTR)
132 #undef GEN_FN_PTR
133 };
134
135 template <typename Fn>
LoadFunction(void * handle,const char * function_name,Fn * fn_out)136 void LoadFunction(void* handle, const char* function_name, Fn* fn_out) {
137 void* fn = dlsym(handle, function_name);
138 if (!fn) {
139 return;
140 }
141
142 *fn_out = reinterpret_cast<Fn>(fn);
143 }
144
LoadArCoreApi(void * handle,ArCoreApi * api)145 void LoadArCoreApi(void* handle, ArCoreApi* api) {
146 // Initialize each ArCoreApi function pointer field from the DLL
147 #define LOAD_FN_PTR(fn) LoadFunction(handle, #fn, &api->impl_##fn);
148 FOR_EACH_API_FN(LOAD_FN_PTR)
149 #undef LOAD_FN_PTR
150 }
151
152 #undef FOR_EACH_API_FN
153
154 void* g_sdk_handle = nullptr;
155 ArCoreApi* g_arcore_api = nullptr;
156
157 } // namespace
158
159 namespace vr {
160
LoadArCoreSdk(const std::string & libraryPath)161 bool LoadArCoreSdk(const std::string& libraryPath) {
162 if (g_arcore_api)
163 return true;
164
165 auto* sdk_handle = dlopen(libraryPath.c_str(), RTLD_GLOBAL | RTLD_NOW);
166 if (!sdk_handle) {
167 char* error_string = dlerror();
168 LOG(ERROR) << "Could not open libarcore_sdk_c.so: " << error_string;
169 return false;
170 } else {
171 VLOG(2) << "Opened shim shared library.";
172 }
173
174 // TODO(https://crbug.com/914999): check SDK version.
175 auto* arcore_api = new ArCoreApi();
176 LoadArCoreApi(sdk_handle, arcore_api);
177
178 g_sdk_handle = sdk_handle;
179 g_arcore_api = arcore_api;
180 return true;
181 }
182
IsArCoreSupported()183 bool IsArCoreSupported() {
184 return base::android::BuildInfo::GetInstance()->sdk_int() >=
185 base::android::SDK_VERSION_NOUGAT;
186 }
187
188 } // namespace vr
189
ArAnchor_detach(ArSession * session,ArAnchor * anchor)190 void ArAnchor_detach(ArSession* session, ArAnchor* anchor) {
191 return g_arcore_api->impl_ArAnchor_detach(session, anchor);
192 }
193
ArAnchor_getPose(const ArSession * session,const ArAnchor * anchor,ArPose * out_pose)194 void ArAnchor_getPose(const ArSession* session,
195 const ArAnchor* anchor,
196 ArPose* out_pose) {
197 return g_arcore_api->impl_ArAnchor_getPose(session, anchor, out_pose);
198 }
199
ArAnchor_getTrackingState(const ArSession * session,const ArAnchor * anchor,ArTrackingState * out_tracking_state)200 void ArAnchor_getTrackingState(const ArSession* session,
201 const ArAnchor* anchor,
202 ArTrackingState* out_tracking_state) {
203 return g_arcore_api->impl_ArAnchor_getTrackingState(session, anchor,
204 out_tracking_state);
205 }
206
ArAnchor_release(ArAnchor * anchor)207 void ArAnchor_release(ArAnchor* anchor) {
208 g_arcore_api->impl_ArAnchor_release(anchor);
209 }
210
ArAnchorList_acquireItem(const ArSession * session,const ArAnchorList * anchor_list,int32_t index,ArAnchor ** out_anchor)211 void ArAnchorList_acquireItem(const ArSession* session,
212 const ArAnchorList* anchor_list,
213 int32_t index,
214 ArAnchor** out_anchor) {
215 return g_arcore_api->impl_ArAnchorList_acquireItem(session, anchor_list,
216 index, out_anchor);
217 }
218
ArAnchorList_create(const ArSession * session,ArAnchorList ** out_anchor_list)219 void ArAnchorList_create(const ArSession* session,
220 ArAnchorList** out_anchor_list) {
221 return g_arcore_api->impl_ArAnchorList_create(session, out_anchor_list);
222 }
223
ArAnchorList_destroy(ArAnchorList * anchor_list)224 void ArAnchorList_destroy(ArAnchorList* anchor_list) {
225 g_arcore_api->impl_ArAnchorList_destroy(anchor_list);
226 }
227
ArAnchorList_getSize(const ArSession * session,const ArAnchorList * anchor_list,int32_t * out_size)228 void ArAnchorList_getSize(const ArSession* session,
229 const ArAnchorList* anchor_list,
230 int32_t* out_size) {
231 return g_arcore_api->impl_ArAnchorList_getSize(session, anchor_list,
232 out_size);
233 }
234
ArAugmentedImage_getCenterPose(const ArSession * session,const ArAugmentedImage * augmented_image,ArPose * out_pose)235 void ArAugmentedImage_getCenterPose(const ArSession* session,
236 const ArAugmentedImage* augmented_image,
237 ArPose* out_pose) {
238 g_arcore_api->impl_ArAugmentedImage_getCenterPose(session, augmented_image,
239 out_pose);
240 }
241
ArAugmentedImage_getExtentX(const ArSession * session,const ArAugmentedImage * augmented_image,float * out_extent_x)242 void ArAugmentedImage_getExtentX(const ArSession* session,
243 const ArAugmentedImage* augmented_image,
244 float* out_extent_x) {
245 g_arcore_api->impl_ArAugmentedImage_getExtentX(session, augmented_image,
246 out_extent_x);
247 }
248
ArAugmentedImage_getIndex(const ArSession * session,const ArAugmentedImage * augmented_image,int32_t * out_index)249 void ArAugmentedImage_getIndex(const ArSession* session,
250 const ArAugmentedImage* augmented_image,
251 int32_t* out_index) {
252 g_arcore_api->impl_ArAugmentedImage_getIndex(session, augmented_image,
253 out_index);
254 }
255
ArAugmentedImage_getTrackingMethod(const ArSession * session,const ArAugmentedImage * image,ArAugmentedImageTrackingMethod * out_tracking_method)256 void ArAugmentedImage_getTrackingMethod(
257 const ArSession* session,
258 const ArAugmentedImage* image,
259 ArAugmentedImageTrackingMethod* out_tracking_method) {
260 return g_arcore_api->impl_ArAugmentedImage_getTrackingMethod(
261 session, image, out_tracking_method);
262 }
263
ArAugmentedImageDatabase_addImageWithPhysicalSize(const ArSession * session,ArAugmentedImageDatabase * augmented_image_database,const char * image_name,const uint8_t * image_grayscale_pixels,int32_t image_width_in_pixels,int32_t image_height_in_pixels,int32_t image_stride_in_pixels,float image_width_in_meters,int32_t * out_index)264 ArStatus ArAugmentedImageDatabase_addImageWithPhysicalSize(
265 const ArSession* session,
266 ArAugmentedImageDatabase* augmented_image_database,
267 const char* image_name,
268 const uint8_t* image_grayscale_pixels,
269 int32_t image_width_in_pixels,
270 int32_t image_height_in_pixels,
271 int32_t image_stride_in_pixels,
272 float image_width_in_meters,
273 int32_t* out_index) {
274 return g_arcore_api->impl_ArAugmentedImageDatabase_addImageWithPhysicalSize(
275 session, augmented_image_database, image_name, image_grayscale_pixels,
276 image_width_in_pixels, image_height_in_pixels, image_stride_in_pixels,
277 image_width_in_meters, out_index);
278 }
279
ArAugmentedImageDatabase_create(const ArSession * session,ArAugmentedImageDatabase ** out_augmented_image_database)280 void ArAugmentedImageDatabase_create(
281 const ArSession* session,
282 ArAugmentedImageDatabase** out_augmented_image_database) {
283 g_arcore_api->impl_ArAugmentedImageDatabase_create(
284 session, out_augmented_image_database);
285 }
286
ArAugmentedImageDatabase_getNumImages(const ArSession * session,const ArAugmentedImageDatabase * augmented_image_database,int32_t * out_number_of_images)287 void ArAugmentedImageDatabase_getNumImages(
288 const ArSession* session,
289 const ArAugmentedImageDatabase* augmented_image_database,
290 int32_t* out_number_of_images) {
291 g_arcore_api->impl_ArAugmentedImageDatabase_getNumImages(
292 session, augmented_image_database, out_number_of_images);
293 }
294
ArCamera_getDisplayOrientedPose(const ArSession * session,const ArCamera * camera,ArPose * out_pose)295 void ArCamera_getDisplayOrientedPose(const ArSession* session,
296 const ArCamera* camera,
297 ArPose* out_pose) {
298 return g_arcore_api->impl_ArCamera_getDisplayOrientedPose(session, camera,
299 out_pose);
300 }
301
ArCamera_getProjectionMatrix(const ArSession * session,const ArCamera * camera,float near,float far,float * dest_col_major_4x4)302 void ArCamera_getProjectionMatrix(const ArSession* session,
303 const ArCamera* camera,
304 float near,
305 float far,
306 float* dest_col_major_4x4) {
307 return g_arcore_api->impl_ArCamera_getProjectionMatrix(
308 session, camera, near, far, dest_col_major_4x4);
309 }
310
ArCamera_getTrackingState(const ArSession * session,const ArCamera * camera,ArTrackingState * out_tracking_state)311 void ArCamera_getTrackingState(const ArSession* session,
312 const ArCamera* camera,
313 ArTrackingState* out_tracking_state) {
314 return g_arcore_api->impl_ArCamera_getTrackingState(session, camera,
315 out_tracking_state);
316 }
317
ArCamera_getViewMatrix(const ArSession * session,const ArCamera * camera,float * out_matrix)318 void ArCamera_getViewMatrix(const ArSession* session,
319 const ArCamera* camera,
320 float* out_matrix) {
321 return g_arcore_api->impl_ArCamera_getViewMatrix(session, camera, out_matrix);
322 }
323
ArCameraConfig_create(const ArSession * session,ArCameraConfig ** out_camera_config)324 void ArCameraConfig_create(const ArSession* session,
325 ArCameraConfig** out_camera_config) {
326 return g_arcore_api->impl_ArCameraConfig_create(session, out_camera_config);
327 }
328
ArCameraConfig_destroy(ArCameraConfig * camera_config)329 void ArCameraConfig_destroy(ArCameraConfig* camera_config) {
330 return g_arcore_api->impl_ArCameraConfig_destroy(camera_config);
331 }
332
ArCameraConfig_getDepthSensorUsage(const ArSession * session,const ArCameraConfig * camera_config,uint32_t * out_depth_sensor_usage)333 void ArCameraConfig_getDepthSensorUsage(const ArSession* session,
334 const ArCameraConfig* camera_config,
335 uint32_t* out_depth_sensor_usage) {
336 return g_arcore_api->impl_ArCameraConfig_getDepthSensorUsage(
337 session, camera_config, out_depth_sensor_usage);
338 }
339
ArCameraConfig_getFacingDirection(const ArSession * session,const ArCameraConfig * camera_config,ArCameraConfigFacingDirection * out_facing)340 void ArCameraConfig_getFacingDirection(
341 const ArSession* session,
342 const ArCameraConfig* camera_config,
343 ArCameraConfigFacingDirection* out_facing) {
344 return g_arcore_api->impl_ArCameraConfig_getFacingDirection(
345 session, camera_config, out_facing);
346 }
347
ArCameraConfig_getFpsRange(const ArSession * session,const ArCameraConfig * camera_config,int32_t * out_min_fps,int32_t * out_max_fps)348 void ArCameraConfig_getFpsRange(const ArSession* session,
349 const ArCameraConfig* camera_config,
350 int32_t* out_min_fps,
351 int32_t* out_max_fps) {
352 return g_arcore_api->impl_ArCameraConfig_getFpsRange(
353 session, camera_config, out_min_fps, out_max_fps);
354 }
355
ArCameraConfig_getImageDimensions(const ArSession * session,const ArCameraConfig * camera_config,int32_t * out_width,int32_t * out_height)356 void ArCameraConfig_getImageDimensions(const ArSession* session,
357 const ArCameraConfig* camera_config,
358 int32_t* out_width,
359 int32_t* out_height) {
360 return g_arcore_api->impl_ArCameraConfig_getImageDimensions(
361 session, camera_config, out_width, out_height);
362 }
363
ArCameraConfig_getTextureDimensions(const ArSession * session,const ArCameraConfig * camera_config,int32_t * out_width,int32_t * out_height)364 void ArCameraConfig_getTextureDimensions(const ArSession* session,
365 const ArCameraConfig* camera_config,
366 int32_t* out_width,
367 int32_t* out_height) {
368 return g_arcore_api->impl_ArCameraConfig_getTextureDimensions(
369 session, camera_config, out_width, out_height);
370 }
371
ArCameraConfigFilter_create(const ArSession * session,ArCameraConfigFilter ** out_filter)372 void ArCameraConfigFilter_create(const ArSession* session,
373 ArCameraConfigFilter** out_filter) {
374 return g_arcore_api->impl_ArCameraConfigFilter_create(session, out_filter);
375 }
376
ArCameraConfigFilter_destroy(ArCameraConfigFilter * filter)377 void ArCameraConfigFilter_destroy(ArCameraConfigFilter* filter) {
378 return g_arcore_api->impl_ArCameraConfigFilter_destroy(filter);
379 }
380
ArCameraConfigFilter_setDepthSensorUsage(const ArSession * session,ArCameraConfigFilter * filter,uint32_t depth_sensor_usage_filters)381 void ArCameraConfigFilter_setDepthSensorUsage(
382 const ArSession* session,
383 ArCameraConfigFilter* filter,
384 uint32_t depth_sensor_usage_filters) {
385 return g_arcore_api->impl_ArCameraConfigFilter_setDepthSensorUsage(
386 session, filter, depth_sensor_usage_filters);
387 }
388
ArCameraConfigFilter_setTargetFps(const ArSession * session,ArCameraConfigFilter * filter,const uint32_t fps_filters)389 void ArCameraConfigFilter_setTargetFps(const ArSession* session,
390 ArCameraConfigFilter* filter,
391 const uint32_t fps_filters) {
392 return g_arcore_api->impl_ArCameraConfigFilter_setTargetFps(session, filter,
393 fps_filters);
394 }
395
ArCameraConfigList_create(const ArSession * session,ArCameraConfigList ** out_list)396 void ArCameraConfigList_create(const ArSession* session,
397 ArCameraConfigList** out_list) {
398 return g_arcore_api->impl_ArCameraConfigList_create(session, out_list);
399 }
400
ArCameraConfigList_destroy(ArCameraConfigList * list)401 void ArCameraConfigList_destroy(ArCameraConfigList* list) {
402 return g_arcore_api->impl_ArCameraConfigList_destroy(list);
403 }
404
ArCameraConfigList_getItem(const ArSession * session,const ArCameraConfigList * list,int32_t index,ArCameraConfig * out_camera_config)405 void ArCameraConfigList_getItem(const ArSession* session,
406 const ArCameraConfigList* list,
407 int32_t index,
408 ArCameraConfig* out_camera_config) {
409 return g_arcore_api->impl_ArCameraConfigList_getItem(session, list, index,
410 out_camera_config);
411 }
412
ArCameraConfigList_getSize(const ArSession * session,const ArCameraConfigList * list,int32_t * out_size)413 void ArCameraConfigList_getSize(const ArSession* session,
414 const ArCameraConfigList* list,
415 int32_t* out_size) {
416 return g_arcore_api->impl_ArCameraConfigList_getSize(session, list, out_size);
417 }
418
ArConfig_create(const ArSession * session,ArConfig ** out_config)419 void ArConfig_create(const ArSession* session, ArConfig** out_config) {
420 return g_arcore_api->impl_ArConfig_create(session, out_config);
421 }
422
ArConfig_destroy(ArConfig * config)423 void ArConfig_destroy(ArConfig* config) {
424 return g_arcore_api->impl_ArConfig_destroy(config);
425 }
426
ArConfig_getDepthMode(const ArSession * session,const ArConfig * config,ArDepthMode * out_depth_mode)427 void ArConfig_getDepthMode(const ArSession* session,
428 const ArConfig* config,
429 ArDepthMode* out_depth_mode) {
430 return g_arcore_api->impl_ArConfig_getDepthMode(session, config,
431 out_depth_mode);
432 }
433
ArConfig_getLightEstimationMode(const ArSession * session,const ArConfig * config,ArLightEstimationMode * light_estimation_mode)434 void ArConfig_getLightEstimationMode(
435 const ArSession* session,
436 const ArConfig* config,
437 ArLightEstimationMode* light_estimation_mode) {
438 return g_arcore_api->impl_ArConfig_getLightEstimationMode(
439 session, config, light_estimation_mode);
440 }
441
ArConfig_setAugmentedImageDatabase(const ArSession * session,ArConfig * config,const ArAugmentedImageDatabase * augmented_image_database)442 void ArConfig_setAugmentedImageDatabase(
443 const ArSession* session,
444 ArConfig* config,
445 const ArAugmentedImageDatabase* augmented_image_database) {
446 g_arcore_api->impl_ArConfig_setAugmentedImageDatabase(
447 session, config, augmented_image_database);
448 }
449
ArConfig_setDepthMode(const ArSession * session,ArConfig * config,ArDepthMode mode)450 void ArConfig_setDepthMode(const ArSession* session,
451 ArConfig* config,
452 ArDepthMode mode) {
453 return g_arcore_api->impl_ArConfig_setDepthMode(session, config, mode);
454 }
455
ArConfig_setFocusMode(const ArSession * session,ArConfig * config,ArFocusMode focus_mode)456 void ArConfig_setFocusMode(const ArSession* session,
457 ArConfig* config,
458 ArFocusMode focus_mode) {
459 g_arcore_api->impl_ArConfig_setFocusMode(session, config, focus_mode);
460 }
461
ArConfig_setLightEstimationMode(const ArSession * session,ArConfig * config,ArLightEstimationMode light_estimation_mode)462 void ArConfig_setLightEstimationMode(
463 const ArSession* session,
464 ArConfig* config,
465 ArLightEstimationMode light_estimation_mode) {
466 return g_arcore_api->impl_ArConfig_setLightEstimationMode(
467 session, config, light_estimation_mode);
468 }
469
ArFrame_acquireCamera(const ArSession * session,const ArFrame * frame,ArCamera ** out_camera)470 void ArFrame_acquireCamera(const ArSession* session,
471 const ArFrame* frame,
472 ArCamera** out_camera) {
473 return g_arcore_api->impl_ArFrame_acquireCamera(session, frame, out_camera);
474 }
475
ArFrame_acquireDepthImage(const ArSession * session,const ArFrame * frame,ArImage ** out_depth_image)476 ArStatus ArFrame_acquireDepthImage(const ArSession* session,
477 const ArFrame* frame,
478 ArImage** out_depth_image) {
479 return g_arcore_api->impl_ArFrame_acquireDepthImage(session, frame,
480 out_depth_image);
481 }
482
ArFrame_create(const ArSession * session,ArFrame ** out_frame)483 void ArFrame_create(const ArSession* session, ArFrame** out_frame) {
484 return g_arcore_api->impl_ArFrame_create(session, out_frame);
485 }
486
ArFrame_destroy(ArFrame * frame)487 void ArFrame_destroy(ArFrame* frame) {
488 return g_arcore_api->impl_ArFrame_destroy(frame);
489 }
490
ArFrame_getLightEstimate(const ArSession * session,const ArFrame * frame,ArLightEstimate * out_light_estimate)491 void ArFrame_getLightEstimate(const ArSession* session,
492 const ArFrame* frame,
493 ArLightEstimate* out_light_estimate) {
494 return g_arcore_api->impl_ArFrame_getLightEstimate(session, frame,
495 out_light_estimate);
496 }
497
ArFrame_getTimestamp(const ArSession * session,const ArFrame * frame,int64_t * out_timestamp_ns)498 void ArFrame_getTimestamp(const ArSession* session,
499 const ArFrame* frame,
500 int64_t* out_timestamp_ns) {
501 return g_arcore_api->impl_ArFrame_getTimestamp(session, frame,
502 out_timestamp_ns);
503 }
504
ArFrame_getUpdatedAnchors(const ArSession * session,const ArFrame * frame,ArAnchorList * out_anchor_list)505 void ArFrame_getUpdatedAnchors(const ArSession* session,
506 const ArFrame* frame,
507 ArAnchorList* out_anchor_list) {
508 return g_arcore_api->impl_ArFrame_getUpdatedAnchors(session, frame,
509 out_anchor_list);
510 }
511
ArFrame_getUpdatedTrackables(const ArSession * session,const ArFrame * frame,ArTrackableType filter_type,ArTrackableList * out_trackable_list)512 void ArFrame_getUpdatedTrackables(const ArSession* session,
513 const ArFrame* frame,
514 ArTrackableType filter_type,
515 ArTrackableList* out_trackable_list) {
516 return g_arcore_api->impl_ArFrame_getUpdatedTrackables(
517 session, frame, filter_type, out_trackable_list);
518 }
519
ArFrame_hitTestRay(const ArSession * session,const ArFrame * frame,const float * ray_origin_3,const float * ray_direction_3,ArHitResultList * out_hit_results)520 void ArFrame_hitTestRay(const ArSession* session,
521 const ArFrame* frame,
522 const float* ray_origin_3,
523 const float* ray_direction_3,
524 ArHitResultList* out_hit_results) {
525 return g_arcore_api->impl_ArFrame_hitTestRay(
526 session, frame, ray_origin_3, ray_direction_3, out_hit_results);
527 }
528
ArFrame_transformCoordinates2d(const ArSession * session,const ArFrame * frame,ArCoordinates2dType input_coordinates,int32_t number_of_vertices,const float * vertices_2d,ArCoordinates2dType output_coordinates,float * out_vertices_2d)529 void ArFrame_transformCoordinates2d(const ArSession* session,
530 const ArFrame* frame,
531 ArCoordinates2dType input_coordinates,
532 int32_t number_of_vertices,
533 const float* vertices_2d,
534 ArCoordinates2dType output_coordinates,
535 float* out_vertices_2d) {
536 return g_arcore_api->impl_ArFrame_transformCoordinates2d(
537 session, frame, input_coordinates, number_of_vertices, vertices_2d,
538 output_coordinates, out_vertices_2d);
539 }
540
ArHitResult_create(const ArSession * session,ArHitResult ** out_hit_result)541 void ArHitResult_create(const ArSession* session,
542 ArHitResult** out_hit_result) {
543 return g_arcore_api->impl_ArHitResult_create(session, out_hit_result);
544 }
545
ArHitResult_destroy(ArHitResult * hit_result)546 void ArHitResult_destroy(ArHitResult* hit_result) {
547 return g_arcore_api->impl_ArHitResult_destroy(hit_result);
548 }
549
ArHitResult_getHitPose(const ArSession * session,const ArHitResult * hit_result,ArPose * out_pose)550 void ArHitResult_getHitPose(const ArSession* session,
551 const ArHitResult* hit_result,
552 ArPose* out_pose) {
553 return g_arcore_api->impl_ArHitResult_getHitPose(session, hit_result,
554 out_pose);
555 }
556
ArHitResult_acquireTrackable(const ArSession * session,const ArHitResult * hit_result,ArTrackable ** out_trackable)557 void ArHitResult_acquireTrackable(const ArSession* session,
558 const ArHitResult* hit_result,
559 ArTrackable** out_trackable) {
560 return g_arcore_api->impl_ArHitResult_acquireTrackable(session, hit_result,
561 out_trackable);
562 }
563
ArHitResultList_create(const ArSession * session,ArHitResultList ** out_hit_result_list)564 void ArHitResultList_create(const ArSession* session,
565 ArHitResultList** out_hit_result_list) {
566 return g_arcore_api->impl_ArHitResultList_create(session,
567 out_hit_result_list);
568 }
569
ArHitResultList_destroy(ArHitResultList * hit_result_list)570 void ArHitResultList_destroy(ArHitResultList* hit_result_list) {
571 return g_arcore_api->impl_ArHitResultList_destroy(hit_result_list);
572 }
573
ArHitResultList_getItem(const ArSession * session,const ArHitResultList * hit_result_list,int index,ArHitResult * out_hit_result)574 void ArHitResultList_getItem(const ArSession* session,
575 const ArHitResultList* hit_result_list,
576 int index,
577 ArHitResult* out_hit_result) {
578 return g_arcore_api->impl_ArHitResultList_getItem(session, hit_result_list,
579 index, out_hit_result);
580 }
581
ArHitResultList_getSize(const ArSession * session,const ArHitResultList * hit_result_list,int * out_size)582 void ArHitResultList_getSize(const ArSession* session,
583 const ArHitResultList* hit_result_list,
584 int* out_size) {
585 return g_arcore_api->impl_ArHitResultList_getSize(session, hit_result_list,
586 out_size);
587 }
588
ArImage_getFormat(const ArSession * session,const ArImage * image,ArImageFormat * out_format)589 void ArImage_getFormat(const ArSession* session,
590 const ArImage* image,
591 ArImageFormat* out_format) {
592 return g_arcore_api->impl_ArImage_getFormat(session, image, out_format);
593 }
594
ArImage_getHeight(const ArSession * session,const ArImage * image,int32_t * out_height)595 void ArImage_getHeight(const ArSession* session,
596 const ArImage* image,
597 int32_t* out_height) {
598 return g_arcore_api->impl_ArImage_getHeight(session, image, out_height);
599 }
600
ArImage_getNumberOfPlanes(const ArSession * session,const ArImage * image,int32_t * out_num_planes)601 void ArImage_getNumberOfPlanes(const ArSession* session,
602 const ArImage* image,
603 int32_t* out_num_planes) {
604 return g_arcore_api->impl_ArImage_getNumberOfPlanes(session, image,
605 out_num_planes);
606 }
607
ArImage_getPlaneData(const ArSession * session,const ArImage * image,int32_t plane_index,const uint8_t ** out_data,int32_t * out_data_length)608 void ArImage_getPlaneData(const ArSession* session,
609 const ArImage* image,
610 int32_t plane_index,
611 const uint8_t** out_data,
612 int32_t* out_data_length) {
613 return g_arcore_api->impl_ArImage_getPlaneData(session, image, plane_index,
614 out_data, out_data_length);
615 }
616
ArImage_getPlanePixelStride(const ArSession * session,const ArImage * image,int32_t plane_index,int32_t * out_pixel_stride)617 void ArImage_getPlanePixelStride(const ArSession* session,
618 const ArImage* image,
619 int32_t plane_index,
620 int32_t* out_pixel_stride) {
621 return g_arcore_api->impl_ArImage_getPlanePixelStride(
622 session, image, plane_index, out_pixel_stride);
623 }
624
ArImage_getPlaneRowStride(const ArSession * session,const ArImage * image,int32_t plane_index,int32_t * out_row_stride)625 void ArImage_getPlaneRowStride(const ArSession* session,
626 const ArImage* image,
627 int32_t plane_index,
628 int32_t* out_row_stride) {
629 return g_arcore_api->impl_ArImage_getPlaneRowStride(
630 session, image, plane_index, out_row_stride);
631 }
632
ArImage_getTimestamp(const ArSession * session,const ArImage * image,int64_t * out_timestamp_ns)633 void ArImage_getTimestamp(const ArSession* session,
634 const ArImage* image,
635 int64_t* out_timestamp_ns) {
636 return g_arcore_api->impl_ArImage_getTimestamp(session, image,
637 out_timestamp_ns);
638 }
639
ArImage_getWidth(const ArSession * session,const ArImage * image,int32_t * out_width)640 void ArImage_getWidth(const ArSession* session,
641 const ArImage* image,
642 int32_t* out_width) {
643 return g_arcore_api->impl_ArImage_getWidth(session, image, out_width);
644 }
645
ArImage_release(ArImage * image)646 void ArImage_release(ArImage* image) {
647 return g_arcore_api->impl_ArImage_release(image);
648 }
649
ArLightEstimate_acquireEnvironmentalHdrCubemap(const ArSession * session,const ArLightEstimate * light_estimate,ArImageCubemap out_textures_6)650 void ArLightEstimate_acquireEnvironmentalHdrCubemap(
651 const ArSession* session,
652 const ArLightEstimate* light_estimate,
653 ArImageCubemap out_textures_6) {
654 return g_arcore_api->impl_ArLightEstimate_acquireEnvironmentalHdrCubemap(
655 session, light_estimate, out_textures_6);
656 }
657
ArLightEstimate_create(const ArSession * session,ArLightEstimate ** out_light_estimate)658 void ArLightEstimate_create(const ArSession* session,
659 ArLightEstimate** out_light_estimate) {
660 return g_arcore_api->impl_ArLightEstimate_create(session, out_light_estimate);
661 }
662
ArLightEstimate_destroy(ArLightEstimate * light_estimate)663 void ArLightEstimate_destroy(ArLightEstimate* light_estimate) {
664 return g_arcore_api->impl_ArLightEstimate_destroy(light_estimate);
665 }
666
ArLightEstimate_getEnvironmentalHdrAmbientSphericalHarmonics(const ArSession * session,const ArLightEstimate * light_estimate,float * out_coefficients_27)667 void ArLightEstimate_getEnvironmentalHdrAmbientSphericalHarmonics(
668 const ArSession* session,
669 const ArLightEstimate* light_estimate,
670 float* out_coefficients_27) {
671 return g_arcore_api
672 ->impl_ArLightEstimate_getEnvironmentalHdrAmbientSphericalHarmonics(
673 session, light_estimate, out_coefficients_27);
674 }
675
ArLightEstimate_getEnvironmentalHdrMainLightDirection(const ArSession * session,const ArLightEstimate * light_estimate,float * out_direction_3)676 void ArLightEstimate_getEnvironmentalHdrMainLightDirection(
677 const ArSession* session,
678 const ArLightEstimate* light_estimate,
679 float* out_direction_3) {
680 return g_arcore_api
681 ->impl_ArLightEstimate_getEnvironmentalHdrMainLightDirection(
682 session, light_estimate, out_direction_3);
683 }
684
ArLightEstimate_getEnvironmentalHdrMainLightIntensity(const ArSession * session,const ArLightEstimate * light_estimate,float * out_intensity_3)685 void ArLightEstimate_getEnvironmentalHdrMainLightIntensity(
686 const ArSession* session,
687 const ArLightEstimate* light_estimate,
688 float* out_intensity_3) {
689 return g_arcore_api
690 ->impl_ArLightEstimate_getEnvironmentalHdrMainLightIntensity(
691 session, light_estimate, out_intensity_3);
692 }
693
ArLightEstimate_getState(const ArSession * session,const ArLightEstimate * light_estimate,ArLightEstimateState * out_light_estimate_state)694 void ArLightEstimate_getState(const ArSession* session,
695 const ArLightEstimate* light_estimate,
696 ArLightEstimateState* out_light_estimate_state) {
697 return g_arcore_api->impl_ArLightEstimate_getState(session, light_estimate,
698 out_light_estimate_state);
699 }
700
ArLightEstimate_getTimestamp(const ArSession * session,const ArLightEstimate * light_estimate,int64_t * out_timestamp_ns)701 void ArLightEstimate_getTimestamp(const ArSession* session,
702 const ArLightEstimate* light_estimate,
703 int64_t* out_timestamp_ns) {
704 return g_arcore_api->impl_ArLightEstimate_getTimestamp(
705 session, light_estimate, out_timestamp_ns);
706 }
707
ArPlane_acquireSubsumedBy(const ArSession * session,const ArPlane * plane,ArPlane ** out_subsumed_by)708 void ArPlane_acquireSubsumedBy(const ArSession* session,
709 const ArPlane* plane,
710 ArPlane** out_subsumed_by) {
711 return g_arcore_api->impl_ArPlane_acquireSubsumedBy(session, plane,
712 out_subsumed_by);
713 }
714
ArPlane_getCenterPose(const ArSession * session,const ArPlane * plane,ArPose * out_pose)715 void ArPlane_getCenterPose(const ArSession* session,
716 const ArPlane* plane,
717 ArPose* out_pose) {
718 return g_arcore_api->impl_ArPlane_getCenterPose(session, plane, out_pose);
719 }
720
ArPlane_getPolygon(const ArSession * session,const ArPlane * plane,float * out_polygon_xz)721 void ArPlane_getPolygon(const ArSession* session,
722 const ArPlane* plane,
723 float* out_polygon_xz) {
724 return g_arcore_api->impl_ArPlane_getPolygon(session, plane, out_polygon_xz);
725 }
726
ArPlane_getPolygonSize(const ArSession * session,const ArPlane * plane,int32_t * out_polygon_size)727 void ArPlane_getPolygonSize(const ArSession* session,
728 const ArPlane* plane,
729 int32_t* out_polygon_size) {
730 return g_arcore_api->impl_ArPlane_getPolygonSize(session, plane,
731 out_polygon_size);
732 }
733
ArPlane_getType(const ArSession * session,const ArPlane * plane,ArPlaneType * out_plane_type)734 void ArPlane_getType(const ArSession* session,
735 const ArPlane* plane,
736 ArPlaneType* out_plane_type) {
737 return g_arcore_api->impl_ArPlane_getType(session, plane, out_plane_type);
738 }
739
ArPlane_isPoseInPolygon(const ArSession * session,const ArPlane * plane,const ArPose * pose,int32_t * out_pose_in_polygon)740 void ArPlane_isPoseInPolygon(const ArSession* session,
741 const ArPlane* plane,
742 const ArPose* pose,
743 int32_t* out_pose_in_polygon) {
744 return g_arcore_api->impl_ArPlane_isPoseInPolygon(session, plane, pose,
745 out_pose_in_polygon);
746 }
747
ArPose_create(const ArSession * session,const float * pose_raw,ArPose ** out_pose)748 void ArPose_create(const ArSession* session,
749 const float* pose_raw,
750 ArPose** out_pose) {
751 return g_arcore_api->impl_ArPose_create(session, pose_raw, out_pose);
752 }
753
ArPose_destroy(ArPose * pose)754 void ArPose_destroy(ArPose* pose) {
755 return g_arcore_api->impl_ArPose_destroy(pose);
756 }
757
ArPose_getMatrix(const ArSession * session,const ArPose * pose,float * out_matrix)758 void ArPose_getMatrix(const ArSession* session,
759 const ArPose* pose,
760 float* out_matrix) {
761 return g_arcore_api->impl_ArPose_getMatrix(session, pose, out_matrix);
762 }
763
ArPose_getPoseRaw(const ArSession * session,const ArPose * pose,float * out_pose_raw)764 void ArPose_getPoseRaw(const ArSession* session,
765 const ArPose* pose,
766 float* out_pose_raw) {
767 return g_arcore_api->impl_ArPose_getPoseRaw(session, pose, out_pose_raw);
768 }
769
ArSession_acquireNewAnchor(ArSession * session,const ArPose * pose,ArAnchor ** out_anchor)770 ArStatus ArSession_acquireNewAnchor(ArSession* session,
771 const ArPose* pose,
772 ArAnchor** out_anchor) {
773 return g_arcore_api->impl_ArSession_acquireNewAnchor(session, pose,
774 out_anchor);
775 }
776
ArSession_configure(ArSession * session,const ArConfig * config)777 ArStatus ArSession_configure(ArSession* session, const ArConfig* config) {
778 return g_arcore_api->impl_ArSession_configure(session, config);
779 }
780
ArSession_create(void * env,void * application_context,ArSession ** out_session_pointer)781 ArStatus ArSession_create(void* env,
782 void* application_context,
783 ArSession** out_session_pointer) {
784 return g_arcore_api->impl_ArSession_create(env, application_context,
785 out_session_pointer);
786 }
787
ArSession_destroy(ArSession * session)788 void ArSession_destroy(ArSession* session) {
789 return g_arcore_api->impl_ArSession_destroy(session);
790 }
791
ArSession_enableIncognitoMode_private(ArSession * session)792 void ArSession_enableIncognitoMode_private(ArSession* session) {
793 return g_arcore_api->impl_ArSession_enableIncognitoMode_private(session);
794 }
795
ArSession_getAllAnchors(const ArSession * session,ArAnchorList * out_anchor_list)796 void ArSession_getAllAnchors(const ArSession* session,
797 ArAnchorList* out_anchor_list) {
798 return g_arcore_api->impl_ArSession_getAllAnchors(session, out_anchor_list);
799 }
800
ArSession_getAllTrackables(const ArSession * session,ArTrackableType filter_type,ArTrackableList * out_trackable_list)801 void ArSession_getAllTrackables(const ArSession* session,
802 ArTrackableType filter_type,
803 ArTrackableList* out_trackable_list) {
804 return g_arcore_api->impl_ArSession_getAllTrackables(session, filter_type,
805 out_trackable_list);
806 }
807
ArSession_getSupportedCameraConfigsWithFilter(const ArSession * session,const ArCameraConfigFilter * filter,ArCameraConfigList * list)808 void ArSession_getSupportedCameraConfigsWithFilter(
809 const ArSession* session,
810 const ArCameraConfigFilter* filter,
811 ArCameraConfigList* list) {
812 return g_arcore_api->impl_ArSession_getSupportedCameraConfigsWithFilter(
813 session, filter, list);
814 }
815
ArSession_pause(ArSession * session)816 ArStatus ArSession_pause(ArSession* session) {
817 return g_arcore_api->impl_ArSession_pause(session);
818 }
819
ArSession_resume(ArSession * session)820 ArStatus ArSession_resume(ArSession* session) {
821 return g_arcore_api->impl_ArSession_resume(session);
822 }
823
ArSession_setCameraConfig(const ArSession * session,const ArCameraConfig * camera_config)824 ArStatus ArSession_setCameraConfig(const ArSession* session,
825 const ArCameraConfig* camera_config) {
826 return g_arcore_api->impl_ArSession_setCameraConfig(session, camera_config);
827 }
828
ArSession_setCameraTextureName(ArSession * session,uint32_t texture_id)829 void ArSession_setCameraTextureName(ArSession* session, uint32_t texture_id) {
830 return g_arcore_api->impl_ArSession_setCameraTextureName(session, texture_id);
831 }
832
ArSession_setDisplayGeometry(ArSession * session,int32_t rotation,int32_t width,int32_t height)833 void ArSession_setDisplayGeometry(ArSession* session,
834 int32_t rotation,
835 int32_t width,
836 int32_t height) {
837 return g_arcore_api->impl_ArSession_setDisplayGeometry(session, rotation,
838 width, height);
839 }
840
ArSession_update(ArSession * session,ArFrame * out_frame)841 ArStatus ArSession_update(ArSession* session, ArFrame* out_frame) {
842 return g_arcore_api->impl_ArSession_update(session, out_frame);
843 }
844
ArTrackable_acquireNewAnchor(ArSession * session,ArTrackable * trackable,ArPose * pose,ArAnchor ** out_anchor)845 ArStatus ArTrackable_acquireNewAnchor(ArSession* session,
846 ArTrackable* trackable,
847 ArPose* pose,
848 ArAnchor** out_anchor) {
849 return g_arcore_api->impl_ArTrackable_acquireNewAnchor(session, trackable,
850 pose, out_anchor);
851 }
852
ArTrackable_getTrackingState(const ArSession * session,const ArTrackable * trackable,ArTrackingState * out_tracking_state)853 void ArTrackable_getTrackingState(const ArSession* session,
854 const ArTrackable* trackable,
855 ArTrackingState* out_tracking_state) {
856 return g_arcore_api->impl_ArTrackable_getTrackingState(session, trackable,
857 out_tracking_state);
858 }
859
ArTrackable_getType(const ArSession * session,const ArTrackable * trackable,ArTrackableType * out_trackable_type)860 void ArTrackable_getType(const ArSession* session,
861 const ArTrackable* trackable,
862 ArTrackableType* out_trackable_type) {
863 return g_arcore_api->impl_ArTrackable_getType(session, trackable,
864 out_trackable_type);
865 }
866
ArTrackable_release(ArTrackable * trackable)867 void ArTrackable_release(ArTrackable* trackable) {
868 return g_arcore_api->impl_ArTrackable_release(trackable);
869 }
870
ArTrackableList_acquireItem(const ArSession * session,const ArTrackableList * trackable_list,int32_t index,ArTrackable ** out_trackable)871 void ArTrackableList_acquireItem(const ArSession* session,
872 const ArTrackableList* trackable_list,
873 int32_t index,
874 ArTrackable** out_trackable) {
875 return g_arcore_api->impl_ArTrackableList_acquireItem(session, trackable_list,
876 index, out_trackable);
877 }
878
ArTrackableList_create(const ArSession * session,ArTrackableList ** out_trackable_list)879 void ArTrackableList_create(const ArSession* session,
880 ArTrackableList** out_trackable_list) {
881 return g_arcore_api->impl_ArTrackableList_create(session, out_trackable_list);
882 }
883
ArTrackableList_destroy(ArTrackableList * trackable_list)884 void ArTrackableList_destroy(ArTrackableList* trackable_list) {
885 return g_arcore_api->impl_ArTrackableList_destroy(trackable_list);
886 }
887
ArTrackableList_getSize(const ArSession * session,const ArTrackableList * trackable_list,int32_t * out_size)888 void ArTrackableList_getSize(const ArSession* session,
889 const ArTrackableList* trackable_list,
890 int32_t* out_size) {
891 return g_arcore_api->impl_ArTrackableList_getSize(session, trackable_list,
892 out_size);
893 }
894