# ArSession

Session management.

## Summary

| ### Enumerations ||
|---|---|
| `https://developers.google.com/ar/reference/c/group/ar-session#arsessionfeature{ https://developers.google.com/ar/reference/c/group/ar-session#ar_session_feature_end_of_list = 0, https://developers.google.com/ar/reference/c/group/ar-session#ar_session_feature_front_camera = 1 }` | enumFeature names for use with `https://developers.google.com/ar/reference/c/group/ar-session#arsession_createwithfeatures`. |

| ### Typedefs ||
|---|---|
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession` | typedef `struct ArSession_` The ARCore session ([value type](https://developers.google.com/ar/reference/c/group/concepts#object-ownership)). |

| ### Functions ||
|---|---|
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_acquireearth(const https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, https://developers.google.com/ar/reference/c/group/ar-earth#arearth **out_earth)` | `void` Returns the `https://developers.google.com/ar/reference/c/group/ar-earth#arearth` object for the session. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_acquirenewanchor(https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, const https://developers.google.com/ar/reference/c/group/ar-pose#arpose *pose, https://developers.google.com/ar/reference/c/group/ar-anchor#aranchor **out_anchor)` | `https://developers.google.com/ar/reference/c/group/shared-types#arstatus` Defines a tracked location in the physical world. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_checksupported(const https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, const https://developers.google.com/ar/reference/c/group/ar-config#arconfig *config)` | `https://developers.google.com/ar/reference/c/group/shared-types#arstatus` **[Deprecated.](https://developers.google.com/ar/reference/c/deprecated/deprecated)** Deprecated in release 1.2.0. Please refer to the release notes ([release notes 1.2.0](https://github.com/google-ar/arcore-android-sdk/releases/tag/v1.2.0)) Before release 1.2.0: Checks if the provided configuration is usable on the this device. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_checkvpsavailabilityasync(https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, double latitude_degrees, double longitude_degrees, void *context, https://developers.google.com/ar/reference/c/group/ar-vps-availability-future#arvpsavailabilitycallback callback, https://developers.google.com/ar/reference/c/group/ar-vps-availability-future#arvpsavailabilityfuture **out_future)` | `https://developers.google.com/ar/reference/c/group/shared-types#arstatus` Gets the availability of the Visual Positioning System (VPS) at a specified horizontal position. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_configure(https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, const https://developers.google.com/ar/reference/c/group/ar-config#arconfig *config)` | `https://developers.google.com/ar/reference/c/group/shared-types#arstatus` Configures the session and verifies that the enabled features in the specified session config are supported with the currently set camera config. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_create(void *env, void *context, https://developers.google.com/ar/reference/c/group/ar-session#arsession **out_session_pointer)` | `https://developers.google.com/ar/reference/c/group/shared-types#arstatus` Creates a new ARCore session. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_createwithfeatures(void *env, void *context, const https://developers.google.com/ar/reference/c/group/ar-session#arsessionfeature *features, https://developers.google.com/ar/reference/c/group/ar-session#arsession **out_session_pointer)` | `https://developers.google.com/ar/reference/c/group/shared-types#arstatus` Creates a new ARCore session requesting additional features. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_destroy(https://developers.google.com/ar/reference/c/group/ar-session#arsession *session)` | `void` Releases resources used by an ARCore session. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_estimatefeaturemapqualityforhosting(const https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, const https://developers.google.com/ar/reference/c/group/ar-pose#arpose *pose, https://developers.google.com/ar/reference/c/group/ar-anchor#arfeaturemapquality *out_feature_map_quality)` | `https://developers.google.com/ar/reference/c/group/shared-types#arstatus` Estimates the quality of the visual features seen by ARCore in the preceding few seconds and visible from the provided camera pose. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_getallanchors(const https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, https://developers.google.com/ar/reference/c/group/ar-anchor#aranchorlist *out_anchor_list)` | `void` Returns all known anchors, including those not currently tracked. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_getalltrackables(const https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, https://developers.google.com/ar/reference/c/group/ar-trackable#artrackabletype filter_type, https://developers.google.com/ar/reference/c/group/ar-trackable#artrackablelist *out_trackable_list)` | `void` Returns the list of all known `https://developers.google.com/ar/reference/c/group/ar-trackable#artrackable` objects. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_getcameraconfig(const https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, https://developers.google.com/ar/reference/c/group/ar-camera-config#arcameraconfig *out_camera_config)` | `void` Gets the `https://developers.google.com/ar/reference/c/group/ar-camera-config#arcameraconfig` that the `https://developers.google.com/ar/reference/c/group/ar-session#arsession` is currently using. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_getconfig(https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, https://developers.google.com/ar/reference/c/group/ar-config#arconfig *out_config)` | `void` Gets the current config. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_getplaybackstatus(https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, https://developers.google.com/ar/reference/c/group/ar-recording-config#arplaybackstatus *out_playback_status)` | `void` Gets the playback status. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_getrecordingstatus(https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, https://developers.google.com/ar/reference/c/group/ar-recording-config#arrecordingstatus *out_recording_status)` | `void` Returns the current recording status. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_getsupportedcameraconfigs(const https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, https://developers.google.com/ar/reference/c/group/ar-camera-config#arcameraconfiglist *list)` | `void` **[Deprecated.](https://developers.google.com/ar/reference/c/deprecated/deprecated)** Deprecated in release 1.11.0. Use `https://developers.google.com/ar/reference/c/group/ar-session#arsession_getsupportedcameraconfigswithfilter` instead. Gets a list of camera configs supported by the camera being used by the session. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_getsupportedcameraconfigswithfilter(const https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, const https://developers.google.com/ar/reference/c/group/ar-camera-config-filter#arcameraconfigfilter *filter, https://developers.google.com/ar/reference/c/group/ar-camera-config#arcameraconfiglist *list)` | `void` Gets the list of supported camera configs that satisfy the provided filter settings. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_hostandacquirenewcloudanchor(https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, const https://developers.google.com/ar/reference/c/group/ar-anchor#aranchor *anchor, https://developers.google.com/ar/reference/c/group/ar-anchor#aranchor **out_cloud_anchor)` | `https://developers.google.com/ar/reference/c/group/shared-types#arstatus` **[Deprecated.](https://developers.google.com/ar/reference/c/deprecated/deprecated)** Use `https://developers.google.com/ar/reference/c/group/ar-session#arsession_hostcloudanchorasync` with `ttl_days` = 1 instead. This creates a new Cloud Anchor using the pose and other metadata from `anchor`. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_hostandacquirenewcloudanchorwithttl(https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, const https://developers.google.com/ar/reference/c/group/ar-anchor#aranchor *anchor, int32_t ttl_days, https://developers.google.com/ar/reference/c/group/ar-anchor#aranchor **out_cloud_anchor)` | `https://developers.google.com/ar/reference/c/group/shared-types#arstatus` **[Deprecated.](https://developers.google.com/ar/reference/c/deprecated/deprecated)** Use `https://developers.google.com/ar/reference/c/group/ar-session#arsession_hostcloudanchorasync` with `ttl_days` = 1 instead. This creates a new Cloud Anchor with a given lifetime in days, using the pose of the provided `anchor`. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_hostcloudanchorasync(https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, const https://developers.google.com/ar/reference/c/group/ar-anchor#aranchor *anchor, int32_t ttl_days, void *context, https://developers.google.com/ar/reference/c/group/ar-host-cloud-anchor-future#arhostcloudanchorcallback callback, https://developers.google.com/ar/reference/c/group/ar-host-cloud-anchor-future#arhostcloudanchorfuture **out_future)` | `https://developers.google.com/ar/reference/c/group/shared-types#arstatus` Uses the pose and other data from `anchor` to host a new Cloud Anchor. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_isdepthmodesupported(const https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, https://developers.google.com/ar/reference/c/group/ar-config#ardepthmode depth_mode, int32_t *out_is_supported)` | `void` Checks whether the provided `https://developers.google.com/ar/reference/c/group/ar-config#ardepthmode` is supported on this device with the selected camera configuration. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_isgeospatialmodesupported(const https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, https://developers.google.com/ar/reference/c/group/ar-config#argeospatialmode geospatial_mode, int32_t *out_is_supported)` | `void` Checks whether the provided `https://developers.google.com/ar/reference/c/group/ar-config#argeospatialmode` is supported on this device. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_isimagestabilizationmodesupported(const https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, https://developers.google.com/ar/reference/c/group/ar-config#arimagestabilizationmode image_stabilization_mode, int32_t *out_is_supported)` | `void` Checks whether the provided `https://developers.google.com/ar/reference/c/group/ar-config#arimagestabilizationmode` is supported on this device with the selected camera configuration. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_issemanticmodesupported(const https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, https://developers.google.com/ar/reference/c/group/ar-config#arsemanticmode semantic_mode, int32_t *out_is_supported)` | `void` Checks whether the provided `https://developers.google.com/ar/reference/c/group/ar-config#arsemanticmode` is supported on this device with the selected camera configuration. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_pause(https://developers.google.com/ar/reference/c/group/ar-session#arsession *session)` | `https://developers.google.com/ar/reference/c/group/shared-types#arstatus` Pause the current session. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_resolveandacquirenewcloudanchor(https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, const char *cloud_anchor_id, https://developers.google.com/ar/reference/c/group/ar-anchor#aranchor **out_cloud_anchor)` | `https://developers.google.com/ar/reference/c/group/shared-types#arstatus` **[Deprecated.](https://developers.google.com/ar/reference/c/deprecated/deprecated)** Use `https://developers.google.com/ar/reference/c/group/ar-session#arsession_resolvecloudanchorasync` instead. This creates a new Cloud Anchor and schedules a task to resolve the anchor's pose using the given Cloud Anchor ID. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_resolvecloudanchorasync(https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, const char *cloud_anchor_id, void *context, https://developers.google.com/ar/reference/c/group/ar-resolve-cloud-anchor-future#arresolvecloudanchorcallback callback, https://developers.google.com/ar/reference/c/group/ar-resolve-cloud-anchor-future#arresolvecloudanchorfuture **out_future)` | `https://developers.google.com/ar/reference/c/group/shared-types#arstatus` Attempts to resolve a Cloud Anchor using the provided `cloud_anchor_id`. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_resume(https://developers.google.com/ar/reference/c/group/ar-session#arsession *session)` | `https://developers.google.com/ar/reference/c/group/shared-types#arstatus` Starts or resumes the ARCore Session. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_setcameraconfig(const https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, const https://developers.google.com/ar/reference/c/group/ar-camera-config#arcameraconfig *camera_config)` | `https://developers.google.com/ar/reference/c/group/shared-types#arstatus` Sets the `https://developers.google.com/ar/reference/c/group/ar-camera-config#arcameraconfig` that the `https://developers.google.com/ar/reference/c/group/ar-session#arsession` should use. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_setcameratexturename(https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, uint32_t texture_id)` | `void` Sets the OpenGL texture name (ID) that will allow GPU access to the camera image. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_setcameratexturenames(https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, int32_t number_of_textures, const uint32_t *texture_ids)` | `void` Sets the OpenGL texture names (IDs) that will be assigned to incoming camera frames in sequence in a ring buffer. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_setdisplaygeometry(https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, int32_t rotation, int32_t width, int32_t height)` | `void` Sets the aspect ratio, coordinate scaling, and display rotation. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_setplaybackdataset(https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, const char *mp4_dataset_file_path)` | `https://developers.google.com/ar/reference/c/group/shared-types#arstatus` **[Deprecated.](https://developers.google.com/ar/reference/c/deprecated/deprecated)** Deprecated in release 1.26.0. Use `https://developers.google.com/ar/reference/c/group/ar-recording-config#arrecordingconfig_setmp4dataseturi` instead. Sets a MP4 dataset file to play back instead of using the live camera feed and IMU sensor data. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_setplaybackdataseturi(https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, const char *mp4_dataset_uri)` | `https://developers.google.com/ar/reference/c/group/shared-types#arstatus` Sets a MP4 dataset file to play back instead of using the live camera feed and IMU sensor data. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_startrecording(https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, const https://developers.google.com/ar/reference/c/group/ar-recording-config#arrecordingconfig *recording_config)` | `https://developers.google.com/ar/reference/c/group/shared-types#arstatus` Starts a new MP4 dataset file recording that is written to the specific filesystem path. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_stoprecording(https://developers.google.com/ar/reference/c/group/ar-session#arsession *session)` | `https://developers.google.com/ar/reference/c/group/shared-types#arstatus` Stops recording and flushes unwritten data to disk. |
| `https://developers.google.com/ar/reference/c/group/ar-session#arsession_update(https://developers.google.com/ar/reference/c/group/ar-session#arsession *session, https://developers.google.com/ar/reference/c/group/ar-frame#arframe *out_frame)` | `https://developers.google.com/ar/reference/c/group/shared-types#arstatus` Updates the state of the ARCore system. |

## Enumerations

### ArSessionFeature

```
 ArSessionFeature
```
Feature names for use with `https://developers.google.com/ar/reference/c/group/ar-session#arsession_createwithfeatures`.

All currently defined features are mutually compatible.

| Properties ||
|---|---|
| `AR_SESSION_FEATURE_END_OF_LIST` | Indicates the end of a features list. This must be the last entry in the array passed to `https://developers.google.com/ar/reference/c/group/ar-session#arsession_createwithfeatures`. |
| `AR_SESSION_FEATURE_FRONT_CAMERA` | Use the front-facing (selfie) camera. When the front camera is selected, ARCore's behavior changes in the following ways: - The display will be mirrored. Specifically, `https://developers.google.com/ar/reference/c/group/ar-camera#arcamera_getprojectionmatrix` will include a horizontal flip in the generated projection matrix and APIs that reason about things in screen space, such as `https://developers.google.com/ar/reference/c/group/ar-frame#arframe_transformcoordinates2d`, will mirror screen coordinates. Open GL apps should consider using `glFrontFace` to render mirrored assets without changing their winding direction. - `https://developers.google.com/ar/reference/c/group/ar-camera#arcamera_gettrackingstate` will always output `https://developers.google.com/ar/reference/c/group/shared-types#ar_tracking_state_paused`. - `https://developers.google.com/ar/reference/c/group/ar-frame#arframe_hittest` will always output an empty list. - `https://developers.google.com/ar/reference/c/group/ar-camera#arcamera_getdisplayorientedpose` will always output an identity pose. - `https://developers.google.com/ar/reference/c/group/ar-session#arsession_acquirenewanchor` will always return `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_not_tracking`. - Planes will never be detected. - `https://developers.google.com/ar/reference/c/group/ar-session#arsession_configure` will fail if the supplied configuration requests Cloud Anchors, Augmented Images, or Environmental HDR Lighting Estimation mode. <br /> **[Deprecated.](https://developers.google.com/ar/reference/c/deprecated/deprecated)** To create a session using the front-facing (selfie) camera, use `https://developers.google.com/ar/reference/c/group/ar-session#arsession_setcameraconfig` with the desired config retrieved from `https://developers.google.com/ar/reference/c/group/ar-session#arsession_getsupportedcameraconfigswithfilter`. |

## Typedefs

### ArSession

```
struct ArSession_ ArSession
```
The ARCore session ([value type](https://developers.google.com/ar/reference/c/group/concepts#object-ownership)).


- Create with: `https://developers.google.com/ar/reference/c/group/ar-session#arsession_create`
- Release with: `https://developers.google.com/ar/reference/c/group/ar-session#arsession_destroy`

<br />

## Functions

### ArSession_acquireEarth

```
void ArSession_acquireEarth(
  const ArSession *session,
  ArEarth **out_earth
)
```
Returns the `https://developers.google.com/ar/reference/c/group/ar-earth#arearth` object for the session.

This object is long-lived; it should be used for the entire duration of the ARCore session or until an `https://developers.google.com/ar/reference/c/group/ar-config#arconfig` with `https://developers.google.com/ar/reference/c/group/ar-config#ar_geospatial_mode_disabled` is applied on the `https://developers.google.com/ar/reference/c/group/ar-session#arsession`.

`https://developers.google.com/ar/reference/c/group/ar-earth#arearth` can only be acquired when an `https://developers.google.com/ar/reference/c/group/ar-config#arconfig` with `https://developers.google.com/ar/reference/c/group/ar-config#ar_geospatial_mode_enabled` is active on the `https://developers.google.com/ar/reference/c/group/ar-session#arsession`. See `https://developers.google.com/ar/reference/c/group/ar-config#arconfig_setgeospatialmode` to enable the Geospatial API.

`https://developers.google.com/ar/reference/c/group/ar-earth#arearth` must be released by calling `https://developers.google.com/ar/reference/c/group/ar-trackable#artrackable_release`.


Details Parameters `session` The ARCore session. `out_earth` Pointer to `https://developers.google.com/ar/reference/c/group/ar-earth#arearth` to receive the earth object, or `NULL` if the session's config `https://developers.google.com/ar/reference/c/group/ar-config#argeospatialmode` is set to `https://developers.google.com/ar/reference/c/group/ar-config#ar_geospatial_mode_disabled`.

### ArSession_acquireNewAnchor

```
ArStatus ArSession_acquireNewAnchor(
  ArSession *session,
  const ArPose *pose,
  ArAnchor **out_anchor
)
```
Defines a tracked location in the physical world.


| Details ||
|---|---|
| **Returns** | `https://developers.google.com/ar/reference/c/group/shared-types#ar_success` or any of: - `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_not_tracking` - `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_session_paused` - `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_resource_exhausted` |

### ArSession_checkSupported

```
ArStatus ArSession_checkSupported(
  const ArSession *session,
  const ArConfig *config
)
```
Before release 1.2.0: Checks if the provided configuration is usable on the this device.

If this function returns `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_unsupported_configuration`, calls to `https://developers.google.com/ar/reference/c/group/ar-session#arsession_configure` with this configuration will fail.

This function now always returns true. See documentation for each configuration entry to know which configuration options \& combinations are supported.

**[Deprecated.](https://developers.google.com/ar/reference/c/deprecated/deprecated)** Deprecated in release 1.2.0. Please refer to the release notes ([release notes 1.2.0](https://github.com/google-ar/arcore-android-sdk/releases/tag/v1.2.0))
Details Parameters `session` The ARCore session `config` The configuration to test **Returns** `https://developers.google.com/ar/reference/c/group/shared-types#ar_success` or:

- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_invalid_argument` if any of the arguments are `NULL`.

### ArSession_checkVpsAvailabilityAsync

```
ArStatus ArSession_checkVpsAvailabilityAsync(
  ArSession *session,
  double latitude_degrees,
  double longitude_degrees,
  void *context,
  https://developers.google.com/ar/reference/c/group/ar-vps-availability-future#arvpsavailabilitycallback callback,
  https://developers.google.com/ar/reference/c/group/ar-vps-availability-future#arvpsavailabilityfuture **out_future
)
```
Gets the availability of the Visual Positioning System (VPS) at a specified horizontal position.

The availability of VPS in a given location helps to improve the quality of Geospatial localization and tracking accuracy. See [Check VPS Availability](https://developers.google.com/ar/develop/c/geospatial/check-vps-availability) for more details.

This launches an asynchronous operation used to query the Google Cloud ARCore API. See `https://developers.google.com/ar/reference/c/group/ar-future#arfuture` for information on obtaining results and cancelling the operation.

This may be called without first calling `https://developers.google.com/ar/reference/c/group/ar-session#arsession_resume` or `https://developers.google.com/ar/reference/c/group/ar-session#arsession_configure`, for example to present an "Enter AR" button only when VPS is available.

Your app must be properly set up to communicate with the Google Cloud ARCore API in order to obtain a result from this call.


Details Parameters `session` The ARCore session. `latitude_degrees` The latitude to query, in degrees. `longitude_degrees` The longitude to query, in degrees. `context` An optional void pointer passed when using a [callback](https://developers.google.com/ar/reference/c/group/ar-future-1future#using-a-callback-to-obtain-future-results). `callback` A [callback function](https://developers.google.com/ar/reference/c/group/ar-future-1future#using-a-callback-to-obtain-future-results). `out_future` An optional `https://developers.google.com/ar/reference/c/group/ar-future#arfuture` which can be [polled](https://developers.google.com/ar/reference/c/group/ar-future-1future#polling-a-future). **Returns** `https://developers.google.com/ar/reference/c/group/shared-types#ar_success`, or any of:

- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_internet_permission_not_granted` if the `INTERNET` permission has not been granted.
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_invalid_argument` if `session` is null, or both `callback` and `out_future` are null.

### ArSession_configure

```
ArStatus ArSession_configure(
  ArSession *session,
  const ArConfig *config
)
```
Configures the session and verifies that the enabled features in the specified session config are supported with the currently set camera config.

Should be called after `https://developers.google.com/ar/reference/c/group/ar-session#arsession_setcameraconfig` to verify that all requested session config features are supported. Features not supported with the current camera config will otherwise be silently disabled when the session is resumed by calling `https://developers.google.com/ar/reference/c/group/ar-session#arsession_resume`.

The following configurations are unsupported and will return `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_unsupported_configuration:`


- When using the (default) back-facing camera:
  - `https://developers.google.com/ar/reference/c/group/ar-config#ar_augmented_face_mode_mesh3d`.
  - `https://developers.google.com/ar/reference/c/group/ar-config#ar_geospatial_mode_enabled` on devices that do not support this Geospatial mode. See `https://developers.google.com/ar/reference/c/group/ar-session#arsession_isgeospatialmodesupported`.
- When using the front-facing (selfie) camera:
  - Any config using `https://developers.google.com/ar/reference/c/group/ar-config#arconfig_setaugmentedimagedatabase`.
  - `https://developers.google.com/ar/reference/c/group/ar-config#ar_cloud_anchor_mode_enabled`.
  - `https://developers.google.com/ar/reference/c/group/ar-config#ar_light_estimation_mode_environmental_hdr`.
  - `https://developers.google.com/ar/reference/c/group/ar-config#ar_geospatial_mode_enabled`.
- When on an Android device with API level 26 or below:
  - `https://developers.google.com/ar/reference/c/group/ar-config#ar_texture_update_mode_expose_hardware_buffer`.

<br />


Details Parameters `session` The ARCore session. `config` The new configuration setting for the session. **Returns** `https://developers.google.com/ar/reference/c/group/shared-types#ar_success` or any of:

- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_fatal`
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_unsupported_configuration` if the requested session config is not supported. See above restrictions.
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_internet_permission_not_granted` if `https://developers.google.com/ar/reference/c/group/ar-config#ar_geospatial_mode_enabled` or `https://developers.google.com/ar/reference/c/group/ar-config#ar_cloud_anchor_mode_enabled` is set and the Android [INTERNET](https://developer.android.com/training/basics/network-ops/connecting) permission has not been granted.
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_fine_location_permission_not_granted` if `https://developers.google.com/ar/reference/c/group/ar-config#ar_geospatial_mode_enabled` is set and the `ACCESS_FINE_LOCATION` permission has not been granted.
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_google_play_services_location_library_not_linked` if `https://developers.google.com/ar/reference/c/group/ar-config#ar_geospatial_mode_enabled` is set and the [Fused Location Provider for Android library](https://developers.google.com/android/guides/setup#declare-dependencies) could not be found. See `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_google_play_services_location_library_not_linked` for additional troubleshooting steps.

### ArSession_create

```
ArStatus ArSession_create(
  void *env,
  void *context,
  https://developers.google.com/ar/reference/c/group/ar-session#arsession **out_session_pointer
)
```
Creates a new ARCore session.

Prior to calling this function, your app must check that ARCore is installed by verifying that either:


- `https://developers.google.com/ar/reference/c/group/ar-core-apk#arcoreapk_requestinstall` or `https://developers.google.com/ar/reference/c/group/ar-core-apk#arcoreapk_requestinstallcustom` returns `https://developers.google.com/ar/reference/c/group/ar-core-apk#ar_install_status_installed`, or
- `https://developers.google.com/ar/reference/c/group/ar-core-apk#arcoreapk_checkavailability` returns `https://developers.google.com/ar/reference/c/group/ar-core-apk#ar_availability_supported_installed`.

<br />

This check must be performed prior to creating an `https://developers.google.com/ar/reference/c/group/ar-session#arsession`, otherwise `https://developers.google.com/ar/reference/c/group/ar-session#arsession` creation will fail, and subsequent installation or upgrade of ARCore will require an app restart and might cause Android to kill your app.


Details Parameters `env` The application's `JNIEnv` object `context` A `JObject` for an Android `Context` `out_session_pointer` A pointer to an `https://developers.google.com/ar/reference/c/group/ar-session#arsession*` to receive the address of the newly allocated session. **Returns** `https://developers.google.com/ar/reference/c/group/shared-types#ar_success` or any of:

- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_fatal` if an internal error occurred while creating the session. `adb logcat` may contain useful information.
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_camera_permission_not_granted` if your app does not have the [CAMERA](https://developer.android.com/reference/android/Manifest.permission#CAMERA) permission.
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_unavailable_arcore_not_installed` if the ARCore APK is not present. This can be prevented by the installation check described above.
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_unavailable_device_not_compatible` if the device is not compatible with ARCore. If encountered after completing the installation check, this usually indicates a user has side-loaded ARCore onto an incompatible device.
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_unavailable_apk_too_old` if the installed ARCore APK is too old for the ARCore SDK with which this application was built. This can be prevented by the installation check described above.
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_unavailable_sdk_too_old` if the ARCore SDK that this app was built with is too old and no longer supported by the installed ARCore APK.

### ArSession_createWithFeatures

```
ArStatus ArSession_createWithFeatures(
  void *env,
  void *context,
  const ArSessionFeature *features,
  ArSession **out_session_pointer
)
```
Creates a new ARCore session requesting additional features.

Prior to calling this function, your app must check that ARCore is installed by verifying that either:


- `https://developers.google.com/ar/reference/c/group/ar-core-apk#arcoreapk_requestinstall` or `https://developers.google.com/ar/reference/c/group/ar-core-apk#arcoreapk_requestinstallcustom` returns `https://developers.google.com/ar/reference/c/group/ar-core-apk#ar_install_status_installed`, or
- `https://developers.google.com/ar/reference/c/group/ar-core-apk#arcoreapk_checkavailability` returns `https://developers.google.com/ar/reference/c/group/ar-core-apk#ar_availability_supported_installed`.

<br />

This check must be performed prior to creating an `https://developers.google.com/ar/reference/c/group/ar-session#arsession`, otherwise `https://developers.google.com/ar/reference/c/group/ar-session#arsession` creation will fail, and subsequent installation or upgrade of ARCore will require an app restart and might cause Android to kill your app.


Details Parameters `env` The application's `JNIEnv` object `context` A `JObject` for an Android `Context` `features` The list of requested features, terminated by with `https://developers.google.com/ar/reference/c/group/ar-session#ar_session_feature_end_of_list`. `out_session_pointer` A pointer to an `https://developers.google.com/ar/reference/c/group/ar-session#arsession*` to receive the address of the newly allocated session. **Returns** `https://developers.google.com/ar/reference/c/group/shared-types#ar_success` or any of:

- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_fatal` if an internal error occurred while creating the session. `adb logcat` may contain useful information.
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_camera_permission_not_granted` if your app does not have the [CAMERA](https://developer.android.com/reference/android/Manifest.permission#CAMERA) permission.
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_invalid_argument` if the requested features are mutually incompatible. See `https://developers.google.com/ar/reference/c/group/ar-session#arsessionfeature` for details.
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_unavailable_arcore_not_installed` if the ARCore APK is not present. This can be prevented by the installation check described above.
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_unavailable_device_not_compatible` if the device is not compatible with ARCore. If encountered after completing the installation check, this usually indicates a user has side-loaded ARCore onto an incompatible device.
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_unavailable_apk_too_old` if the installed ARCore APK is too old for the ARCore SDK with which this application was built. This can be prevented by the installation check described above.
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_unavailable_sdk_too_old` if the ARCore SDK that this app was built with is too old and no longer supported by the installed ARCore APK.

### ArSession_destroy

```
void ArSession_destroy(
  ArSession *session
)
```
Releases resources used by an ARCore session.

This function will take several seconds to complete. To prevent blocking the main thread, call `https://developers.google.com/ar/reference/c/group/ar-session#arsession_pause` on the main thread, and then call `https://developers.google.com/ar/reference/c/group/ar-session#arsession_destroy` on a background thread.

### ArSession_estimateFeatureMapQualityForHosting

```
ArStatus ArSession_estimateFeatureMapQualityForHosting(
  const ArSession *session,
  const ArPose *pose,
  ArFeatureMapQuality *out_feature_map_quality
)
```
Estimates the quality of the visual features seen by ARCore in the preceding few seconds and visible from the provided camera pose.

Cloud Anchors hosted using higher quality features will generally result in easier and more accurately resolved Cloud Anchor poses.


Details Parameters `session` The ARCore session. `pose` The camera pose to use in estimating the quality. `out_feature_map_quality` The estimated quality of the visual features seen by ARCore in the preceding few seconds and visible from the provided camera pose. **Returns** `https://developers.google.com/ar/reference/c/group/shared-types#ar_success` or any of:

- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_invalid_argument`
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_not_tracking`
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_session_paused`
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_cloud_anchors_not_configured`

### ArSession_getAllAnchors

```
void ArSession_getAllAnchors(
  const ArSession *session,
  ArAnchorList *out_anchor_list
)
```
Returns all known anchors, including those not currently tracked.

Anchors forgotten by ARCore due to a call to `https://developers.google.com/ar/reference/c/group/ar-anchor#aranchor_detach` or entering the `https://developers.google.com/ar/reference/c/group/shared-types#ar_tracking_state_stopped` state will not be included.


Details Parameters `session` The ARCore session `out_anchor_list` The list to fill. This list must have already been allocated with `https://developers.google.com/ar/reference/c/group/ar-anchor#aranchorlist_create`. If previously used, the list will first be cleared.

### ArSession_getAllTrackables

```
void ArSession_getAllTrackables(
  const ArSession *session,
  ArTrackableType filter_type,
  ArTrackableList *out_trackable_list
)
```
Returns the list of all known `https://developers.google.com/ar/reference/c/group/ar-trackable#artrackable` objects.

This includes `https://developers.google.com/ar/reference/c/group/ar-plane#arplane` objects if plane detection is enabled, as well as `https://developers.google.com/ar/reference/c/group/ar-point#arpoint` objects created as a side effect of calls to `https://developers.google.com/ar/reference/c/group/ar-session#arsession_acquirenewanchor` or `https://developers.google.com/ar/reference/c/group/ar-frame#arframe_hittest`.


Details Parameters `session` The ARCore session `filter_type` The type(s) of trackables to return. See `https://developers.google.com/ar/reference/c/group/ar-trackable#artrackabletype` for legal values. `out_trackable_list` The list to fill. This list must have already been allocated with `https://developers.google.com/ar/reference/c/group/ar-trackable#artrackablelist_create`. If previously used, the list will first be cleared.

### ArSession_getCameraConfig

```
void ArSession_getCameraConfig(
  const ArSession *session,
  ArCameraConfig *out_camera_config
)
```
Gets the `https://developers.google.com/ar/reference/c/group/ar-camera-config#arcameraconfig` that the `https://developers.google.com/ar/reference/c/group/ar-session#arsession` is currently using.

If the camera config was not explicitly set then it returns the default camera config. Use `https://developers.google.com/ar/reference/c/group/ar-camera-config#arcameraconfig_destroy` to release memory associated with the returned camera config once it is no longer needed.


Details Parameters `session` The ARCore session `out_camera_config` The camera config object to fill. This object must have already been allocated with `https://developers.google.com/ar/reference/c/group/ar-camera-config#arcameraconfig_create`. Use `https://developers.google.com/ar/reference/c/group/ar-camera-config#arcameraconfig_destroy` to release memory associated with `out_camera_config` once it is no longer needed.

### ArSession_getConfig

```
void ArSession_getConfig(
  ArSession *session,
  ArConfig *out_config
)
```
Gets the current config.

More specifically, fills the given `https://developers.google.com/ar/reference/c/group/ar-config#arconfig` object with the copy of the configuration most recently set by `https://developers.google.com/ar/reference/c/group/ar-session#arsession_configure`. Note: if the session was not explicitly configured, a default configuration is returned (same as `https://developers.google.com/ar/reference/c/group/ar-config#arconfig_create`).

### ArSession_getPlaybackStatus

```
void ArSession_getPlaybackStatus(
  ArSession *session,
  ArPlaybackStatus *out_playback_status
)
```
Gets the playback status.


Details Parameters `session` The ARCore session. `out_playback_status` The current playback status.

### ArSession_getRecordingStatus

```
void ArSession_getRecordingStatus(
  ArSession *session,
  ArRecordingStatus *out_recording_status
)
```
Returns the current recording status.


Details Parameters `session` The ARCore session. `out_recording_status` The current recording status.

### ArSession_getSupportedCameraConfigs

```
void ArSession_getSupportedCameraConfigs(
  const ArSession *session,
  ArCameraConfigList *list
)
```
Gets a list of camera configs supported by the camera being used by the session.

Can be called at any time. The provided list populated with the camera configs supported by the configured session and camera.

Each config will contain a different CPU resolution. The GPU texture resolutions will be the same in all configs. Most devices provide a GPU texture resolution of 1920x1080, but the actual resolution will vary with device capabilities.

When the session camera is a back-facing camera:

- The list will always contain three camera configs.
- The CPU image resolutions returned will be VGA, a middle resolution, and a large resolution matching the GPU texture resolution. The middle resolution is typically 1280x720, but the actual resolution will vary with device capabilities.

<br />

When the session camera is front-facing (selfie) camera, the list will contain at least one supported camera config.

Notes:

- Prior to ARCore SDK 1.6.0, the middle CPU image resolution was guaranteed to be 1280x720 on all devices.
- In ARCore SDK 1.7.0 and 1.8.0, when the session camera was a front-facing (selfie) camera, the list contained three identical camera configs.

<br />

**[Deprecated.](https://developers.google.com/ar/reference/c/deprecated/deprecated)** Deprecated in release 1.11.0. Use `https://developers.google.com/ar/reference/c/group/ar-session#arsession_getsupportedcameraconfigswithfilter` instead.
Details Parameters `session` The ARCore session `list` The list to fill. This list must have already been allocated with `https://developers.google.com/ar/reference/c/group/ar-camera-config#arcameraconfiglist_create`. The list is cleared to remove any existing elements. Once it is no longer needed, the list must be destroyed using `https://developers.google.com/ar/reference/c/group/ar-camera-config#arcameraconfiglist_destroy` to release allocated memory.

### ArSession_getSupportedCameraConfigsWithFilter

```
void ArSession_getSupportedCameraConfigsWithFilter(
  const ArSession *session,
  const ArCameraConfigFilter *filter,
  ArCameraConfigList *list
)
```
Gets the list of supported camera configs that satisfy the provided filter settings.

The returned camera configs might vary at runtime depending on device capabilities. Overly restrictive filtering can result in the returned list being empty on one or more devices.

Can be called at any time.

Beginning with ARCore SDK 1.15.0, some devices support additional camera configs with lower GPU texture resolutions than the device's default GPU texture resolution. These additional resolutions are only returned when the filter is not a `nullptr`. See the ARCore supported devices (<https://developers.google.com/ar/devices>) page for an up to date list of supported devices.

Beginning with ARCore SDK 1.21.0, some devices will return additional camera configs for supported stereo cameras. See the ARCore supported devices (<https://developers.google.com/ar/devices>) page for available camera configs by device.

Beginning with ARCore SDK 1.23.0, the list of returned camera configs will include front-facing (selfie) and back-facing (world) camera configs. In previous SDKs, returned camera configs included only front-facing (selfie) or only back-facing (world) camera configs, depending on whether the deprecated `https://developers.google.com/ar/reference/c/group/ar-session#ar_session_feature_front_camera` feature was used.

Element 0 will contain the camera config that best matches the filter settings, according to the following priority:


1. Stereo camera usage: prefer `https://developers.google.com/ar/reference/c/group/ar-camera-config-filter#ar_camera_config_stereo_camera_usage_require_and_use` over `https://developers.google.com/ar/reference/c/group/ar-camera-config-filter#ar_camera_config_stereo_camera_usage_do_not_use`
2. Target FPS: prefer `https://developers.google.com/ar/reference/c/group/ar-camera-config-filter#ar_camera_config_target_fps_60` over `https://developers.google.com/ar/reference/c/group/ar-camera-config-filter#ar_camera_config_target_fps_30`
3. Depth sensor usage: prefer `https://developers.google.com/ar/reference/c/group/ar-camera-config-filter#ar_camera_config_depth_sensor_usage_require_and_use` over `https://developers.google.com/ar/reference/c/group/ar-camera-config-filter#ar_camera_config_depth_sensor_usage_do_not_use`

<br />

No guarantees are made about the order in which the remaining elements are returned.


| Details ||
|---|---|
| **Returns** | list of supported camera configs. |

### ArSession_hostAndAcquireNewCloudAnchor

```
ArStatus ArSession_hostAndAcquireNewCloudAnchor(
  ArSession *session,
  const ArAnchor *anchor,
  ArAnchor **out_cloud_anchor
)
```
This creates a new Cloud Anchor using the pose and other metadata from `anchor`.

If the function returns `https://developers.google.com/ar/reference/c/group/shared-types#ar_success`, the cloud state of `out_cloud_anchor` will be set to `https://developers.google.com/ar/reference/c/group/ar-anchor#ar_cloud_anchor_state_task_in_progress` and the initial pose will be set to the pose of `anchor`. However, the new `out_cloud_anchor` is completely independent of `anchor`, and the poses may diverge over time. If the return value of this function is not `https://developers.google.com/ar/reference/c/group/shared-types#ar_success`, then `out_cloud_anchor` will be set to `NULL`.

**[Deprecated.](https://developers.google.com/ar/reference/c/deprecated/deprecated)** Use `https://developers.google.com/ar/reference/c/group/ar-session#arsession_hostcloudanchorasync` with `ttl_days` = 1 instead.
Details Parameters `session` The ARCore session `anchor` The anchor to be hosted `out_cloud_anchor` The new Cloud Anchor **Returns** `https://developers.google.com/ar/reference/c/group/shared-types#ar_success` or any of:

- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_not_tracking`
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_session_paused`
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_cloud_anchors_not_configured`
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_resource_exhausted`
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_anchor_not_supported_for_hosting`

### ArSession_hostAndAcquireNewCloudAnchorWithTtl

```
ArStatus ArSession_hostAndAcquireNewCloudAnchorWithTtl(
  ArSession *session,
  const ArAnchor *anchor,
  int32_t ttl_days,
  ArAnchor **out_cloud_anchor
)
```
This creates a new Cloud Anchor with a given lifetime in days, using the pose of the provided `anchor`.

The cloud state of the returned anchor will be set to `https://developers.google.com/ar/reference/c/group/ar-anchor#ar_cloud_anchor_state_task_in_progress` and the initial pose will be set to the pose of the provided `anchor`. However, the returned anchor is completely independent of the original `anchor`, and the two poses might diverge over time.

Hosting requires an active session for which the `https://developers.google.com/ar/reference/c/group/shared-types#artrackingstate` is `https://developers.google.com/ar/reference/c/group/shared-types#ar_tracking_state_tracking`, as well as a working internet connection. ARCore will continue to retry silently in the background if it is unable to establish a connection to the ARCore Cloud Anchor service.

**[Deprecated.](https://developers.google.com/ar/reference/c/deprecated/deprecated)** Use `https://developers.google.com/ar/reference/c/group/ar-session#arsession_hostcloudanchorasync` with `ttl_days` = 1 instead.
Details Parameters `session` The ARCore session. `anchor` The anchor with the desired pose to be used to create a hosted Cloud Anchor. `ttl_days` The lifetime of the anchor in days. Must be positive. The maximum allowed value is 1 if using an API Key to authenticate with the ARCore Cloud Anchor service, otherwise the maximum allowed value is 365. `out_cloud_anchor` The new Cloud Anchor. **Returns** `https://developers.google.com/ar/reference/c/group/shared-types#ar_success` or any of:

- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_invalid_argument`
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_not_tracking`
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_session_paused`
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_cloud_anchors_not_configured`
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_resource_exhausted`
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_anchor_not_supported_for_hosting`

### ArSession_hostCloudAnchorAsync

```
ArStatus ArSession_hostCloudAnchorAsync(
  ArSession *session,
  const ArAnchor *anchor,
  int32_t ttl_days,
  void *context,
  ArHostCloudAnchorCallback callback,
  ArHostCloudAnchorFuture **out_future
)
```
Uses the pose and other data from `anchor` to host a new Cloud Anchor.

A Cloud Anchor is assigned an identifier that can be used to create an `https://developers.google.com/ar/reference/c/group/ar-anchor#aranchor` in the same position in subsequent sessions across devices using `https://developers.google.com/ar/reference/c/group/ar-session#arsession_resolvecloudanchorasync`. See the [Cloud Anchors developer guide](https://developers.google.com/ar/develop/c/cloud-anchors/developer-guide) for more information.

The duration that a Cloud Anchor can be resolved for is specified by `ttl_days`. When using [Keyless authorization](https://developers.google.com/ar/develop/c/cloud-anchors/developer-guide#keyless-authorization), the maximum allowed value is 365 days. When using an [API Key](https://developers.google.com/ar/develop/c/cloud-anchors/developer-guide#api-key-authorization) to authenticate with the ARCore API, the maximum allowed value is 1 day.

This launches an asynchronous operation used to query the Google Cloud ARCore API. See `https://developers.google.com/ar/reference/c/group/ar-future#arfuture` for information on obtaining results and cancelling the operation.

Cloud Anchors requires a `https://developers.google.com/ar/reference/c/group/ar-config#arconfig` with `https://developers.google.com/ar/reference/c/group/ar-config#ar_cloud_anchor_mode_enabled` set on this session. Use `https://developers.google.com/ar/reference/c/group/ar-config#arconfig_setcloudanchormode` to set the Cloud Anchor API mode and `https://developers.google.com/ar/reference/c/group/ar-session#arsession_configure` to configure the session.

Hosting a Cloud Anchor works best when ARCore is able to create a good feature map around the `https://developers.google.com/ar/reference/c/group/ar-anchor#aranchor`. Use `https://developers.google.com/ar/reference/c/group/ar-session#arsession_estimatefeaturemapqualityforhosting` to determine the quality of visual features seen by ARCore in the preceding few seconds. Cloud Anchors hosted using higher quality features will generally result in quicker and more accurately resolved Cloud Anchor poses.

ARCore can have up to 40 simultaneous Cloud Anchor operations, including resolved anchors and active hosting operations.


Details Parameters `session` The ARCore session. `anchor` The anchor with the desired pose to be used to host a Cloud Anchor. `ttl_days` The lifetime of the anchor in days. Must be positive. `context` An optional void pointer passed when using a [callback](https://developers.google.com/ar/reference/c/group/ar-future-1future#using-a-callback-to-obtain-future-results). `callback` A [callback function](https://developers.google.com/ar/reference/c/group/ar-future-1future#using-a-callback-to-obtain-future-results). `out_future` An optional `https://developers.google.com/ar/reference/c/group/ar-future#arfuture` which can be [polled](https://developers.google.com/ar/reference/c/group/ar-future-1future#polling-a-future). **Returns** `https://developers.google.com/ar/reference/c/group/shared-types#ar_success` or any of:

- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_invalid_argument` if any of the provided arguments are invalid,
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_not_tracking` if the camera is not currently tracking,
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_session_paused` if the session is currently paused,
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_cloud_anchors_not_configured` if the Cloud Anchor API has not been enabled in the session configuration,
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_resource_exhausted` if too many Cloud Anchors operations are ongoing.
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_anchor_not_supported_for_hosting` if the anchor is not supported for hosting.

### ArSession_isDepthModeSupported

```
void ArSession_isDepthModeSupported(
  const ArSession *session,
  ArDepthMode depth_mode,
  int32_t *out_is_supported
)
```
Checks whether the provided `https://developers.google.com/ar/reference/c/group/ar-config#ardepthmode` is supported on this device with the selected camera configuration.

The current list of supported devices is documented on the [ARCore supported devices](https://developers.google.com/ar/devices) page.


Details Parameters `session` The ARCore session. `depth_mode` The desired depth mode to check. `out_is_supported` Non zero if the depth mode is supported on this device.

### ArSession_isGeospatialModeSupported

```
void ArSession_isGeospatialModeSupported(
  const ArSession *session,
  ArGeospatialMode geospatial_mode,
  int32_t *out_is_supported
)
```
Checks whether the provided `https://developers.google.com/ar/reference/c/group/ar-config#argeospatialmode` is supported on this device.

The current list of supported devices is documented on the [ARCore supported devices](https://developers.google.com/ar/devices) page. A device may be incompatible with a given `https://developers.google.com/ar/reference/c/group/ar-config#argeospatialmode` due to insufficient sensor capabilities.


Details Parameters `session` The ARCore session. `geospatial_mode` The desired geospatial mode to check. `out_is_supported` Non-zero if the `https://developers.google.com/ar/reference/c/group/ar-config#argeospatialmode` is supported on this device.

### ArSession_isImageStabilizationModeSupported

```
void ArSession_isImageStabilizationModeSupported(
  const ArSession *session,
  ArImageStabilizationMode image_stabilization_mode,
  int32_t *out_is_supported
)
```
Checks whether the provided `https://developers.google.com/ar/reference/c/group/ar-config#arimagestabilizationmode` is supported on this device with the selected camera configuration.

See [Enabling Electronic Image Stabilization](https://developers.google.com/ar/develop/c/electronic-image-stabilization) for more information.


Details Parameters `session` The ARCore session. `image_stabilization_mode` The desired image stabilization mode to check. `out_is_supported` Non zero if given `https://developers.google.com/ar/reference/c/group/ar-config#arimagestabilizationmode` is supported on this device.

### ArSession_isSemanticModeSupported

```
void ArSession_isSemanticModeSupported(
  const ArSession *session,
  ArSemanticMode semantic_mode,
  int32_t *out_is_supported
)
```
Checks whether the provided `https://developers.google.com/ar/reference/c/group/ar-config#arsemanticmode` is supported on this device with the selected camera configuration.

The current list of supported devices is documented on the [ARCore supported devices](https://developers.google.com/ar/devices) page.


Details Parameters `session` The ARCore session. `semantic_mode` The desired semantic mode to check. `out_is_supported` Non zero if the semantic mode is supported on this device.

### ArSession_pause

```
ArStatus ArSession_pause(
  ArSession *session
)
```
Pause the current session.

This function will stop the camera feed and release resources. The session can be restarted again by calling `https://developers.google.com/ar/reference/c/group/ar-session#arsession_resume`.

Typically this should be called from [`Activity.onPause()`](https://developer.android.com/reference/android/app/Activity#onPause()).

Note that ARCore might continue consuming substantial computing resources for up to 10 seconds after calling this function.


| Details ||
|---|---|
| **Returns** | `https://developers.google.com/ar/reference/c/group/shared-types#ar_success` or any of: - `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_fatal` |

### ArSession_resolveAndAcquireNewCloudAnchor

```
ArStatus ArSession_resolveAndAcquireNewCloudAnchor(
  ArSession *session,
  const char *cloud_anchor_id,
  ArAnchor **out_cloud_anchor
)
```
This creates a new Cloud Anchor and schedules a task to resolve the anchor's pose using the given Cloud Anchor ID.

You don't need to wait for a call to resolve a Cloud Anchor to complete before initiating another call. A session can be resolving up to 40 Cloud Anchors at a given time.

If this function returns `https://developers.google.com/ar/reference/c/group/shared-types#ar_success`, the cloud state of `out_cloud_anchor` will be `https://developers.google.com/ar/reference/c/group/ar-anchor#ar_cloud_anchor_state_task_in_progress`, and its tracking state will be `https://developers.google.com/ar/reference/c/group/shared-types#ar_tracking_state_paused`. This anchor will never start tracking until its pose has been successfully resolved. If the resolving task ends in an error, the tracking state will be set to `https://developers.google.com/ar/reference/c/group/shared-types#ar_tracking_state_stopped`. If the return value is not `https://developers.google.com/ar/reference/c/group/shared-types#ar_success`, then `out_cloud_anchor` will be set to `NULL`.

**[Deprecated.](https://developers.google.com/ar/reference/c/deprecated/deprecated)** Use `https://developers.google.com/ar/reference/c/group/ar-session#arsession_resolvecloudanchorasync` instead.
Details Parameters `session` The ARCore session `cloud_anchor_id` The cloud ID of the anchor to be resolved `out_cloud_anchor` The new Cloud Anchor **Returns** `https://developers.google.com/ar/reference/c/group/shared-types#ar_success` or any of:

- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_not_tracking`
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_session_paused`
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_cloud_anchors_not_configured`
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_resource_exhausted`

### ArSession_resolveCloudAnchorAsync

```
ArStatus ArSession_resolveCloudAnchorAsync(
  ArSession *session,
  const char *cloud_anchor_id,
  void *context,
  ArResolveCloudAnchorCallback callback,
  ArResolveCloudAnchorFuture **out_future
)
```
Attempts to resolve a Cloud Anchor using the provided `cloud_anchor_id`.

The Cloud Anchor must previously have been hosted by `https://developers.google.com/ar/reference/c/group/ar-session#arsession_hostcloudanchorasync` or another Cloud Anchor hosting method within the allotted `ttl_days`. See the [Cloud Anchors developer guide](https://developers.google.com/ar/develop/c/cloud-anchors/developer-guide) for more information.

This launches an asynchronous operation used to query the Google Cloud ARCore API. See `https://developers.google.com/ar/reference/c/group/ar-future#arfuture` for information on obtaining results and cancelling the operation.

When resolving a Cloud Anchor, the ARCore API periodically compares visual features from the scene against the anchor's 3D feature map to pinpoint the user's position and orientation relative to the anchor. When it finds a match, the task completes.

Cloud Anchors requires a `https://developers.google.com/ar/reference/c/group/ar-config#arconfig` with `https://developers.google.com/ar/reference/c/group/ar-config#ar_cloud_anchor_mode_enabled` set on this session. Use `https://developers.google.com/ar/reference/c/group/ar-config#arconfig_setcloudanchormode` to set the Cloud Anchor API mode and `https://developers.google.com/ar/reference/c/group/ar-session#arsession_configure` to configure the session.

ARCore can have up to 40 simultaneous Cloud Anchor operations, including resolved anchors and active hosting operations.


Details Parameters `session` The ARCore session `cloud_anchor_id` The cloud ID of the anchor to be resolved. `context` An optional void pointer passed when using a [callback](https://developers.google.com/ar/reference/c/group/ar-future-1future#using-a-callback-to-obtain-future-results). `callback` A [callback function](https://developers.google.com/ar/reference/c/group/ar-future-1future#using-a-callback-to-obtain-future-results). `out_future` An optional `https://developers.google.com/ar/reference/c/group/ar-future#arfuture` which can be [polled](https://developers.google.com/ar/reference/c/group/ar-future-1future#polling-a-future). **Returns** `https://developers.google.com/ar/reference/c/group/shared-types#ar_success` or any of:

- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_invalid_argument`
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_session_paused`
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_cloud_anchors_not_configured`
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_resource_exhausted` if too many Cloud Anchors operations are ongoing.

### ArSession_resume

```
ArStatus ArSession_resume(
  ArSession *session
)
```
Starts or resumes the ARCore Session.

Typically this should be called from [`Activity.onResume()`](https://developer.android.com/reference/android/app/Activity#onResume()).

Note that if the camera configuration has been changed by `https://developers.google.com/ar/reference/c/group/ar-session#arsession_setcameraconfig` since the last call to `https://developers.google.com/ar/reference/c/group/ar-session#arsession_resume`, all images previously acquired using `https://developers.google.com/ar/reference/c/group/ar-frame#arframe_acquirecameraimage` must be released by calling `https://developers.google.com/ar/reference/c/group/ar-image#arimage_release` before calling `https://developers.google.com/ar/reference/c/group/ar-session#arsession_resume`. If there are open images, `https://developers.google.com/ar/reference/c/group/ar-session#arsession_resume` will return `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_illegal_state` and the session will not resume.


| Details ||
|---|---|
| **Returns** | `https://developers.google.com/ar/reference/c/group/shared-types#ar_success` or any of: - `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_fatal` - `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_camera_permission_not_granted` - `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_camera_not_available` - `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_illegal_state` |

### ArSession_setCameraConfig

```
ArStatus ArSession_setCameraConfig(
  const ArSession *session,
  const ArCameraConfig *camera_config
)
```
Sets the `https://developers.google.com/ar/reference/c/group/ar-camera-config#arcameraconfig` that the `https://developers.google.com/ar/reference/c/group/ar-session#arsession` should use.

Can only be called while the session is paused. The provided `https://developers.google.com/ar/reference/c/group/ar-camera-config#arcameraconfig` must be one of the configs returned by `https://developers.google.com/ar/reference/c/group/ar-session#arsession_getsupportedcameraconfigswithfilter`.

The camera config will be applied once the session is resumed. All previously acquired frame images must be released with `https://developers.google.com/ar/reference/c/group/ar-image#arimage_release` before calling `resume()`. Failure to do so will cause `resume()` to return `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_illegal_state` error.

Note: Starting in ARCore 1.12, changing the active camera config may cause the tracking state on certain devices to become permanently `https://developers.google.com/ar/reference/c/group/shared-types#ar_tracking_state_paused`. For consistent behavior across all supported devices, release any previously created anchors and trackables when setting a new camera config.

Changing the camera config for an existing session may affect which ARCore features can be used. Unsupported session features are silently disabled when the session is resumed. Call `https://developers.google.com/ar/reference/c/group/ar-session#arsession_configure` after setting a camera config to verify that all configured session features are supported with the new camera config.

Changing the current session's camera config to one that uses a different camera will cause all internal session states to be reset when the session is next resumed by calling `https://developers.google.com/ar/reference/c/group/ar-session#arsession_resume`.


Details Parameters `session` The ARCore session `camera_config` The provided `https://developers.google.com/ar/reference/c/group/ar-camera-config#arcameraconfig` must be from a list returned by `https://developers.google.com/ar/reference/c/group/ar-session#arsession_getsupportedcameraconfigswithfilter`. **Returns** `https://developers.google.com/ar/reference/c/group/shared-types#ar_success` or any of:

- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_invalid_argument`
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_session_not_paused`

### ArSession_setCameraTextureName

```
void ArSession_setCameraTextureName(
  ArSession *session,
  uint32_t texture_id
)
```
Sets the OpenGL texture name (ID) that will allow GPU access to the camera image.

The texture must be bound to the `GL_TEXTURE_EXTERNAL_OES` target for use. Shaders accessing this texture must use a `samplerExternalOES` sampler.

The texture contents are not guaranteed to remain valid after another call to `https://developers.google.com/ar/reference/c/group/ar-session#arsession_setcameratexturename` or `https://developers.google.com/ar/reference/c/group/ar-session#arsession_setcameratexturenames`, and additionally are not guaranteed to remain valid after a call to `https://developers.google.com/ar/reference/c/group/ar-session#arsession_pause` or `https://developers.google.com/ar/reference/c/group/ar-session#arsession_destroy`.

When a configuration is active using `https://developers.google.com/ar/reference/c/group/ar-config#ar_texture_update_mode_expose_hardware_buffer`, values provided to this function are ignored.

### ArSession_setCameraTextureNames

```
void ArSession_setCameraTextureNames(
  ArSession *session,
  int32_t number_of_textures,
  const uint32_t *texture_ids
)
```
Sets the OpenGL texture names (IDs) that will be assigned to incoming camera frames in sequence in a ring buffer.

The textures must be bound to the `GL_TEXTURE_EXTERNAL_OES` target for use. Shaders accessing these textures must use a `samplerExternalOES` sampler.

The texture contents are not guaranteed to remain valid after another call to `https://developers.google.com/ar/reference/c/group/ar-session#arsession_setcameratexturename` or `https://developers.google.com/ar/reference/c/group/ar-session#arsession_setcameratexturenames`, and additionally are not guaranteed to remain valid after a call to `https://developers.google.com/ar/reference/c/group/ar-session#arsession_pause` or `https://developers.google.com/ar/reference/c/group/ar-session#arsession_destroy`.

Passing multiple textures allows for a multithreaded rendering pipeline, unlike `https://developers.google.com/ar/reference/c/group/ar-session#arsession_setcameratexturename`.

Note: this function doesn't fail. If given invalid input, it logs an error without setting the texture names.

When a configuration is active using `https://developers.google.com/ar/reference/c/group/ar-config#ar_texture_update_mode_expose_hardware_buffer`, values provided to this function are ignored.


Details Parameters `session` The ARCore session `number_of_textures` The number of textures being passed. This must always be at least 1. `texture_ids` Pointer to the array of textures names (IDs)

### ArSession_setDisplayGeometry

```
void ArSession_setDisplayGeometry(
  ArSession *session,
  int32_t rotation,
  int32_t width,
  int32_t height
)
```
Sets the aspect ratio, coordinate scaling, and display rotation.

This data is used by UV conversion, projection matrix generation, and hit test logic.

Note: this function always returns successfully. If given invalid input, it logs a error and doesn't apply the changes.


Details Parameters `session` The ARCore session `rotation` Display rotation specified by `android.view.Surface` constants: `ROTATION_0`, `ROTATION_90`, `ROTATION_180` and `ROTATION_270` `width` Width of the view, in pixels `height` Height of the view, in pixels

### ArSession_setPlaybackDataset

```
ArStatus ArSession_setPlaybackDataset(
  ArSession *session,
  const char *mp4_dataset_file_path
)
```
Sets a MP4 dataset file to play back instead of using the live camera feed and IMU sensor data.

Restrictions:

- Can only be called while the session is paused. Playback of the MP4 dataset file will start once the session is resumed.
- The MP4 dataset file must use the same camera facing direction as is configured in the session.
- Due to the way session data is processed, ARCore APIs may sometimes produce different results during playback than during recording and produce different results during subsequent playback sessions. For example, the number of detected planes and other trackables, the precise timing of their detection and their pose over time may be different in subsequent playback sessions.
- Once playback has started (due to the first call to `https://developers.google.com/ar/reference/c/group/ar-session#arsession_resume`), pausing the session (by calling `https://developers.google.com/ar/reference/c/group/ar-session#arsession_pause`) will suspend processing of all camera image frames and any other recorded sensor data in the dataset. Camera image frames and sensor frame data that is discarded in this way will not be reprocessed when the session is again resumed (by calling `https://developers.google.com/ar/reference/c/group/ar-session#arsession_resume`). AR tracking for the session will generally suffer due to the gap in processed data.

<br />

When an MP4 dataset file is set:

- All existing trackables (`https://developers.google.com/ar/reference/c/group/ar-anchor#aranchor` and `https://developers.google.com/ar/reference/c/group/ar-trackable#artrackable`) immediately enter tracking state `https://developers.google.com/ar/reference/c/group/shared-types#ar_tracking_state_stopped`.
- The desired focus mode (`https://developers.google.com/ar/reference/c/group/ar-config#arconfig_setfocusmode`) is ignored, and will not affect the previously recorded camera images.
- The current camera configuration (`https://developers.google.com/ar/reference/c/group/ar-camera-config#arcameraconfig`) is immediately set to the default for the device the MP4 dataset file was recorded on.
- Calls to `https://developers.google.com/ar/reference/c/group/ar-session#arsession_getsupportedcameraconfigs` will return camera configs supported by the device the MP4 dataset file was recorded on.
- Setting a previously obtained camera config to `https://developers.google.com/ar/reference/c/group/ar-session#arsession_setcameraconfig` will have no effect.

<br />

**[Deprecated.](https://developers.google.com/ar/reference/c/deprecated/deprecated)** Deprecated in release 1.26.0. Use `https://developers.google.com/ar/reference/c/group/ar-recording-config#arrecordingconfig_setmp4dataseturi` instead.
Details Parameters `session` The ARCore session `mp4_dataset_file_path` A string file path to a MP4 dataset file or `NULL` to use the live camera feed. **Returns** `https://developers.google.com/ar/reference/c/group/shared-types#ar_success` or any of:

- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_session_not_paused` if called when session is not paused.
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_session_unsupported` if playback is incompatible with selected features.
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_playback_failed` if an error occurred with the MP4 dataset file such as not being able to open the file or the file is unable to be decoded.

### ArSession_setPlaybackDatasetUri

```
ArStatus ArSession_setPlaybackDatasetUri(
  ArSession *session,
  const char *mp4_dataset_uri
)
```
Sets a MP4 dataset file to play back instead of using the live camera feed and IMU sensor data.

This overrides the last path set by `https://developers.google.com/ar/reference/c/group/ar-session#arsession_setplaybackdataset`. The URI must point to a resource that supports `lseek`. See `https://developers.google.com/ar/reference/c/group/ar-session#arsession_setplaybackdataset` for more restrictions and details.


Details Parameters `session` The ARCore session `mp4_dataset_uri` The percent encoded, null terminated URI for the dataset **Returns** `https://developers.google.com/ar/reference/c/group/shared-types#ar_success` or any of:

- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_invalid_argument` if the file descriptor is not seekable.
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_session_not_paused` if called when session is not paused.
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_session_unsupported` if playback is incompatible with selected features.
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_playback_failed` if an error occurred with the MP4 dataset such as not being able to open the resource or the resource is unable to be decoded.

### ArSession_startRecording

```
ArStatus ArSession_startRecording(
  ArSession *session,
  const ArRecordingConfig *recording_config
)
```
Starts a new MP4 dataset file recording that is written to the specific filesystem path.

Existing files will be overwritten.

The MP4 video stream (VGA) bitrate is 5Mbps (40Mb per minute).

Recording introduces additional overhead and may affect app performance.

Session recordings may contain sensitive information. See [documentation on Recording and Playback](https://developers.google.com/ar/develop/recording-and-playback#what%E2%80%99s_in_a_recording) to learn which data is saved in a recording.


Details Parameters `session` The ARCore session `recording_config` The configuration defined for recording. **Returns** `https://developers.google.com/ar/reference/c/group/shared-types#ar_success` or any of:

- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_illegal_state`
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_invalid_argument`
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_recording_failed`

### ArSession_stopRecording

```
ArStatus ArSession_stopRecording(
  ArSession *session
)
```
Stops recording and flushes unwritten data to disk.

The MP4 dataset file will be ready to read after this call.

Recording can be stopped automatically when `https://developers.google.com/ar/reference/c/group/ar-session#arsession_pause` is called, if auto stop is enabled via `https://developers.google.com/ar/reference/c/group/ar-recording-config#arrecordingconfig_setautostoponpause`. Recording errors that would be thrown in stopRecording() are silently ignored in `https://developers.google.com/ar/reference/c/group/ar-session#arsession_pause`.


Details Parameters `session` The ARCore session **Returns** `https://developers.google.com/ar/reference/c/group/shared-types#ar_success` or any of:

- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_recording_failed`

### ArSession_update

```
ArStatus ArSession_update(
  ArSession *session,
  ArFrame *out_frame
)
```
Updates the state of the ARCore system.

This includes: receiving a new camera frame, updating the location of the device, updating the location of tracking anchors, updating detected planes, etc.

This call may cause off-screen OpenGL activity. Because of this, to avoid unnecessary frame buffer flushes and reloads, this call should not be made in the middle of rendering a frame or offscreen buffer.

This call may update the pose of all created anchors and detected planes. The set of updated objects is accessible through `https://developers.google.com/ar/reference/c/group/ar-frame#arframe_getupdatedtrackables`.

`https://developers.google.com/ar/reference/c/group/ar-session#arsession_update` in blocking mode (see `https://developers.google.com/ar/reference/c/group/ar-config#arupdatemode`) will wait until a new camera image is available, or until the built-in timeout (currently 66ms) is reached. If the camera image does not arrive by the built-in timeout, then `https://developers.google.com/ar/reference/c/group/ar-session#arsession_update` will return the most recent `https://developers.google.com/ar/reference/c/group/ar-frame#arframe` object. For some applications it may be important to know if a new frame was actually obtained (for example, to avoid redrawing if the camera did not produce a new frame). To do that, compare the current frame's timestamp, obtained via `https://developers.google.com/ar/reference/c/group/ar-frame#arframe_gettimestamp`, with the previously recorded frame timestamp. If they are different, this is a new frame.

During startup the camera system may not produce actual images immediately. In this common case, a frame with timestamp = 0 will be returned.


Details Parameters `session` The ARCore session `out_frame` The Frame object to populate with the updated world state. This frame must have been previously created using `https://developers.google.com/ar/reference/c/group/ar-frame#arframe_create`. The same `https://developers.google.com/ar/reference/c/group/ar-frame#arframe` instance may be used when calling this repeatedly. **Returns** `https://developers.google.com/ar/reference/c/group/shared-types#ar_success` or any of:

- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_fatal`
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_session_paused`
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_texture_not_set`
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_missing_gl_context`
- `https://developers.google.com/ar/reference/c/group/shared-types#ar_error_camera_not_available` - camera was removed during runtime.