The Vuforia Engine Camera API provides access to a device's camera and enables control of the camera parameters. Use them to optimize camera functionality for certain platforms and changing environments.
The camera is tied to the Vuforia Engine life cycle and is initialized and deinitialized with the engine. To learn more on the camera is used in your AR session, please see the Working with the Camera.
Camera Configuration
After starting Vuforia Engine, the camera parameters can be adjusted with the CameraController
. For example, you can adjust the video modes and focus modes of the device’s camera.
On most platforms, as long as Vuforia Engine has access to the camera, other apps on the device cannot access it. To release the camera and allow other applications to access it, you can use vuEngineStop()
.
In Unity, this is done automatically as soon as the application is paused.
vuEngineStop(VuEngine* engine);
CameraController
Video mode
When developing apps for certain devices, it is sensible to adjust the video mode in accordance with the device’s performance capabilities. With the camera video modes, you can optimize for quality but with more strain on the computational load. Or you can optimize for speed to minimize the impact Vuforia Engine puts on the device.
A _DEFAULT mode is used if nothing else is set.
The video modes of the camera are described in more detail in Device Performance Optimization.
Call get/set to get the active mode and configure it to a preferred mode.
vuCameraControllerGetActiveVideoMode(const VuController* controller, VuCameraVideoModePreset* cameraVideoModePreset);
vuCameraControllerSetActiveVideoMode(VuController* controller, VuCameraVideoModePreset cameraVideoModePreset);
Focus mode
Control the camera focus mode to continuously autofocus the camera or choose to let the user focus the camera to a fixed point through a user interaction. Please note that some devices may not support all of the focus modes available.
To check which focus modes are supported on a device:
vuCameraControllerIsFocusModeSupported(VuController* controller, VuCameraFocusMode focusMode, VuBool* isFocusModeSupported);
If nothing else is set, the platform’s default focus mode is used.
The focus modes of the camera are described in Device Performance Optimization.
Set the focus mode at runtime:
vuCameraControllerGetFocusMode(const VuController* controller, VuCameraFocusMode* focusMode);
vuCameraControllerSetFocusMode(VuController* controller, VuCameraFocusMode focusMode);
See also Advanced Camera API on focus regions and exposure mode in the API reference library.
Flash mode
Enable or disable the flash in environments with changing or very low illuminance. It can greatly improve detection and tracking. Please note, that not all devices possess flash hardware in which case the call will fail.
Enable/disable flash mode if the device supports it:
vuCameraControllerGetFlashMode(const VuController* controller, VuBool* flashMode);
vuCameraControllerSetFlashMode(VuController* controller, VuBool flashMode);
Get VuCameraFrame from the State
Firstly, check if the camera provides frames to the state. If vuStateHasCameraFrame
returns VU_TRUE, then you can get the camera frame from the state (needed for hitTesting for example) and other useful information such as timestamp, indexing, and list of images.
vuStateHasCameraFrame(const VuState *state);
vuStateGetCameraFrame (const VuState *state, VuCameraFrame **cameraFrame);