SRSDK  0.10.39
Loading...
Searching...
No Matches
core.hpp
Go to the documentation of this file.
1#ifndef CNSDK_LEIA_CORE_CXX_CORE_HPP
2#define CNSDK_LEIA_CORE_CXX_CORE_HPP
3
4#include "leia/core/core.h"
10#include "leia/common/version.h"
11
17namespace leia {
18
22
25{
26 return {v->v, 3};
27}
29{
30 return {v->m, 16};
31}
34{
35 return {v->v, 3};
36}
38{
39 return {v->m, 16};
40}
41
43
44class Core;
45
47
50
55public:
56 CoreInitConfiguration() : _ptr(nullptr)
57 {
58 }
59 CoreInitConfiguration(CoreLibrary const& coreLib) : _ptr(leia_core_init_configuration_alloc(coreLib.GetHandle(), CNSDK_VERSION))
60 {
61 }
63 {
64 leia_core_init_configuration_free(_ptr);
65 }
69 {
70 *this = std::move(other);
71 }
73 {
74 std::swap(_ptr, other._ptr);
75 return *this;
76 }
77 explicit operator bool() const
78 {
79 return _ptr != nullptr;
80 }
81
82 void SetLicenseKey(const char* licenseKey)
83 {
84 leia_core_init_configuration_set_license_key(_ptr, licenseKey);
85 }
86 void SetLicenseNetworkProxy(const char* networkProxy)
87 {
88 leia_core_init_configuration_set_license_network_proxy(_ptr, networkProxy);
89 }
90 void SetEnableValidation(bool enable)
91 {
92 leia_core_init_configuration_set_enable_validation(_ptr, enable);
93 }
95 {
96 leia_core_init_configuration_set_platform_android_handle(_ptr, handleType, handle);
97 }
99 {
100 leia_core_init_configuration_set_platform_log_level(_ptr, logLevel);
101 }
103 {
104 leia_core_init_configuration_set_face_tracking_shared_camera_sink(_ptr, sharedCameraSink);
105 }
107 {
108 leia_core_init_configuration_set_face_tracking_runtime(_ptr, runtime);
109 }
110 void SetFaceTrackingEnable(bool enable)
111 {
112 leia_core_init_configuration_set_face_tracking_enable(_ptr, enable);
113 }
114 void SetFaceTrackingStart(bool start)
115 {
116 leia_core_init_configuration_set_face_tracking_start(_ptr, start);
117 }
118 void SetFaceTrackingCheckPermission(bool checkPermission)
119 {
120 leia_core_init_configuration_set_face_tracking_check_permission(_ptr, checkPermission);
121 }
122 void SetFaceTrackingPermissionDialogKillProcess(bool permissionDialogKillProcess)
123 {
124 leia_core_init_configuration_set_face_tracking_permission_dialog_kill_process(_ptr, permissionDialogKillProcess);
125 }
127 {
128 leia_core_init_configuration_set_face_tracking_server_log_level(_ptr, serverLogLevel);
129 }
130 void SetFaceTrackingPreferredFps(int preferredFps)
131 {
132 leia_core_init_configuration_set_face_tracking_preferred_fps(_ptr, preferredFps);
133 }
135 {
136 leia_core_init_configuration_set_hint(_ptr, LEIA_CORE_HINT_RESET_DISPLAY_CONFIG);
137 }
138
140 {
141 return _ptr;
142 }
143
144private:
146};
147
151class Core {
152public:
153 Core() : Core(nullptr)
154 {
155 }
156 Core(leia_core* core) : _core(core), _isCoreOwned(false)
157 {
158 }
159 Core(CoreInitConfiguration& config) : _core(leia_core_init_async(config.GetHandle())), _isCoreOwned(true)
160 {
161#if !defined(LEIA_WRAPPER_DISABLE_EXCEPTION)
162 if (!_core)
163 {
164 throw CoreInitFailed();
165 }
166#endif // !LEIA_WRAPPER_DISABLE_EXCEPTION
167 }
169 {
170 if (_isCoreOwned)
171 {
172 leia_core_release(_core);
173 }
174 }
175 Core(Core const&) = delete;
176 Core& operator=(Core const&) = delete;
177 Core(Core&& other) : Core()
178 {
179 *this = std::move(other);
180 }
182 {
183 std::swap(_core, other._core);
184 std::swap(_isCoreOwned, other._isCoreOwned);
185 return *this;
186 }
187 explicit operator bool() const
188 {
189 return _core != nullptr;
190 }
191
193 bool IsInitialized() const
194 {
195 return bool(leia_core_is_initialized(_core));
196 }
199 {
200 return bool(leia_core_is_validation_enabled(_core));
201 }
202
203 void OnResume()
204 {
205 leia_core_on_resume(_core);
206 }
207 void OnPause()
208 {
209 leia_core_on_pause(_core);
210 }
211 void Enable3D(bool enable)
212 {
213 leia_core_enable_3d(_core, enable);
214 }
217 {
218 return bool(leia_core_is_3d_enabled(_core));
219 }
222 {
223 return leia_orientation(leia_core_get_orientation(_core));
224 }
225 bool EnableFaceTracking(bool enable)
226 {
227 return bool(leia_core_enable_face_tracking(_core, enable));
228 }
231 {
232 return bool(leia_core_is_face_tracking_enabled(_core));
233 }
234 void StartFaceTracking(bool start)
235 {
236 leia_core_start_face_tracking(_core, start);
237 }
238 void SetFaceTrackerConfiguration(bool leftEye, bool rightEye)
239 {
240 leia_core_set_face_tracker_configuration(_core, leftEye, rightEye);
241 }
244 {
245 return bool(leia_core_is_face_tracking_started(_core));
246 }
248 {
249 leia_core_set_face_tracking_runtime(_core, runtime);
250 }
253 {
254 return leia_core_get_face_tracking_runtime(_core);
255 }
257 {
258 leia_core_set_face_tracking_shared_camera_sink(_core, sink);
259 }
261 {
262 leia_core_set_default_face_position(_core, position);
263 }
266 {
267 return bool(leia_core_get_primary_face(_core, position));
268 }
271 {
272 return bool(leia_core_get_non_predicted_primary_face(_core, position));
273 }
275 {
276 leia_core_set_face_tracking_frame_listener(_core, listener);
277 }
279 {
280 leia_core_set_face_tracking_capture_lux(_core, enable);
281 }
282 void EnableNoFaceMode(bool enable)
283 {
284 leia_core_enable_no_face_mode(_core, enable);
285 }
286 void SetNoFaceModeTimeThreshold(double timeThresholdSeconds)
287 {
288 leia_core_set_no_face_mode_time_threshold(_core, timeThresholdSeconds);
289 }
292 {
293 return {leia_core_get_asset_manager(_core)};
294 }
295
297 bool GetViewingDistance(float ipdMM, float* viewingDistance)
298 {
299 return bool(leia_core_get_viewing_distance(_core, ipdMM, viewingDistance));
300 }
301
303 void SetBacklight(bool enable)
304 {
305 Enable3D(enable);
306 }
310 {
311 return Is3DEnabled();
312 }
313
316 {
317 return _core;
318 }
319
320private:
321 leia_core* _core;
322 bool _isCoreOwned;
323};
324
325/* See @ref leia_get_experimental_api */
327public:
328 CoreExperimental() : _core(nullptr)
329 {
330 }
331 CoreExperimental(CoreLibrary const& coreLibrary, Core const& core) : _core(core.GetHandle())
332 {
333 leia_core_retain(_core);
334
335 leia_core_library* coreLibPtr = coreLibrary.GetHandle();
336 leia_core_set_user_ipd.Load(coreLibPtr);
337 leia_core_set_face_tracking_profiling.Load(coreLibPtr);
338 leia_core_get_face_tracking_profiling.Load(coreLibPtr);
339 leia_core_burn_display_config.Load(coreLibPtr);
340 leia_core_burn_camera_extrinsics.Load(coreLibPtr);
343 leia_core_get_non_predicted_eyes.Load(coreLibPtr);
344 leia_core_get_lookaround_eyes.Load(coreLibPtr);
345 leia_core_get_face_detector_version.Load(coreLibPtr);
346 }
348 {
349 if (_core)
350 leia_core_release(_core);
351 }
355 {
356 *this = std::move(other);
357 }
359 {
360 std::swap(_core, other._core);
361 return *this;
362 }
363 explicit operator bool() const
364 {
365 return _core != nullptr;
366 }
367
368 void SetUserIpd(float userIpd)
369 {
370 if (leia_core_set_user_ipd)
371 leia_core_set_user_ipd(_core, userIpd);
372 }
373 void SetFaceTrackingProfiling(bool enable)
374 {
375 if (leia_core_set_face_tracking_profiling)
376 leia_core_set_face_tracking_profiling(_core, enable);
377 }
378 bool GetFaceTrackingProfiling(leia_headtracking_frame_profiling* profiling, int32_t profilingSizeof)
379 {
380 if (leia_core_get_face_tracking_profiling)
381 return bool(leia_core_get_face_tracking_profiling(_core, profiling, profilingSizeof));
382 return false;
383 }
384 bool BurnDisplayConfig(float slant, float pitch, float phc, float dOverN, float n, float actCoef, float thetaX, float thetaY, float thetaZ)
385 {
387 return bool(leia_core_burn_display_config(_core, slant, pitch, phc, dOverN, n, actCoef, thetaX, thetaY, thetaZ));
388 return false;
389 }
390 bool BurnCameraExtrinsics(int cameraId, float thetaXFpc, float thetaYFpc, float thetaZFpc)
391 {
393 return bool(leia_core_burn_camera_extrinsics(_core, cameraId, thetaXFpc, thetaYFpc, thetaZFpc));
394 return false;
395 }
396 void TrackingCameraRotation(float thetaX, float thetaY, float thetaZ)
397 {
399 leia_core_set_tracking_camera_rotation(_core, thetaX, thetaY, thetaZ);
400 }
402 {
404 return bool(leia_core_get_tracking_camera_rotation(_core, rotation));
405 return false;
406 }
407 bool GetNonPredictedEyes(FloatSlice& leftEyePosition, FloatSlice& rightEyePosition)
408 {
410 return bool(leia_core_get_non_predicted_eyes(_core, leftEyePosition, rightEyePosition));
411 return false;
412 }
413 bool GetLookaroundEyes(FloatSlice& leftPosition, FloatSlice& rightPosition)
414 {
416 return bool(leia_core_get_lookaround_eyes(_core, leftPosition, rightPosition));
417 return false;
418 }
420 {
421 if (!leia_core_get_face_detector_version)
422 return {};
423
424 char buffer[32];
425 size_t actual_size;
426 leia_core_get_face_detector_version(_core, buffer, sizeof(buffer), &actual_size);
427 return {buffer, actual_size};
428 }
429
430private:
431 leia_core* _core;
432
433 LEIA_CXX_DECLARE_EXPERIMENTAL_API_ENTRY(leia_core_set_user_ipd);
434 LEIA_CXX_DECLARE_EXPERIMENTAL_API_ENTRY(leia_core_set_face_tracking_profiling);
435 LEIA_CXX_DECLARE_EXPERIMENTAL_API_ENTRY(leia_core_get_face_tracking_profiling);
442 LEIA_CXX_DECLARE_EXPERIMENTAL_API_ENTRY(leia_core_get_face_detector_version);
443};
444
445// using LeiaSDK = Core;
446// using ILeiaSDK = Core;
447
450{
451 return bool(leia_is_face_tracking_runtime_supported(coreLibrary.GetHandle(), runtime));
452}
453
455inline bool IsLicenseRequired()
456{
457 return bool(leia_core_is_license_required());
458}
459
461inline bool GetLegalOrientations(CoreLibrary const& coreLibrary, leia_legal_orientations* legalOrientations)
462{
463 return bool(leia_core_get_legal_orientations(coreLibrary.GetHandle(), legalOrientations));
464}
465
466inline void LimitOrientations(CoreLibrary const& coreLibrary, jobject activity, leia_legal_orientations const* legalOrientations)
467{
468 leia_core_limit_orientations(coreLibrary.GetHandle(), activity, legalOrientations);
469}
470
472inline bool GetNaturalOrientation(CoreLibrary const& coreLibrary, leia_orientation* orientation)
473{
474 return bool(leia_core_get_natural_orientation(coreLibrary.GetHandle(), orientation));
475}
476
477static bool IsDeviceSupported(CoreLibrary const& coreLibrary)
478{
479 return bool(leia_is_device_supported(coreLibrary.GetHandle()));
480}
481
482} // namespace leia
483
488#endif // CNSDK_LEIA_CORE_CXX_CORE_HPP
Definition assetManager.hpp:50
Definition core.hpp:326
CoreExperimental(CoreExperimental &&other)
Definition core.hpp:354
~CoreExperimental()
Definition core.hpp:347
CoreExperimental()
Definition core.hpp:328
CoreExperimental(CoreLibrary const &coreLibrary, Core const &core)
Definition core.hpp:331
bool TrackingCameraRotation(FloatSlice rotation)
Definition core.hpp:401
bool BurnCameraExtrinsics(int cameraId, float thetaXFpc, float thetaYFpc, float thetaZFpc)
Definition core.hpp:390
std::string GetFaceDetectorVersion()
Definition core.hpp:419
void SetFaceTrackingProfiling(bool enable)
Definition core.hpp:373
bool GetNonPredictedEyes(FloatSlice &leftEyePosition, FloatSlice &rightEyePosition)
Definition core.hpp:407
bool GetFaceTrackingProfiling(leia_headtracking_frame_profiling *profiling, int32_t profilingSizeof)
Definition core.hpp:378
void TrackingCameraRotation(float thetaX, float thetaY, float thetaZ)
Definition core.hpp:396
CoreExperimental & operator=(CoreExperimental &&other)
Definition core.hpp:358
bool GetLookaroundEyes(FloatSlice &leftPosition, FloatSlice &rightPosition)
Definition core.hpp:413
bool BurnDisplayConfig(float slant, float pitch, float phc, float dOverN, float n, float actCoef, float thetaX, float thetaY, float thetaZ)
Definition core.hpp:384
CoreExperimental & operator=(CoreExperimental const &)=delete
void SetUserIpd(float userIpd)
Definition core.hpp:368
CoreExperimental(CoreExperimental const &)=delete
C++ wrapper for leia_core.
Definition core.hpp:151
void StartFaceTracking(bool start)
Definition core.hpp:234
LEIA_NODISCARD bool GetViewingDistance(float ipdMM, float *viewingDistance)
Definition core.hpp:297
LEIA_NODISCARD bool GetPrimaryFace(FloatSlice position)
Definition core.hpp:265
~Core()
Definition core.hpp:168
Core(Core const &)=delete
void SetFaceTrackingCaptureLux(bool enable)
Definition core.hpp:278
void OnResume()
Definition core.hpp:203
void Enable3D(bool enable)
Definition core.hpp:211
LEIA_NODISCARD FaceTrackingRuntimeType GetFaceTrackingRuntime()
Definition core.hpp:252
LEIA_NODISCARD bool Is3DEnabled()
Definition core.hpp:216
LEIA_NODISCARD leia_core * GetHandle() const
Definition core.hpp:315
LEIA_NODISCARD bool IsFaceTrackingEnabled()
Definition core.hpp:230
LEIA_NODISCARD LEIA_DEPRECATED bool GetBacklight()
Definition core.hpp:309
LEIA_NODISCARD bool IsValidationEnabled() const
Definition core.hpp:198
Core(leia_core *core)
Definition core.hpp:156
Core & operator=(Core &&other)
Definition core.hpp:181
void SetFaceTrackingRuntime(FaceTrackingRuntimeType runtime)
Definition core.hpp:247
void SetNoFaceModeTimeThreshold(double timeThresholdSeconds)
Definition core.hpp:286
void OnPause()
Definition core.hpp:207
LEIA_NODISCARD enum leia_orientation GetOrientation()
Definition core.hpp:221
void SetFaceTrackerConfiguration(bool leftEye, bool rightEye)
Definition core.hpp:238
bool EnableFaceTracking(bool enable)
Definition core.hpp:225
Core(CoreInitConfiguration &config)
Definition core.hpp:159
Core & operator=(Core const &)=delete
LEIA_NODISCARD bool GetNonPredictedPrimaryFace(FloatSlice position)
Definition core.hpp:270
LEIA_NODISCARD AssetManager GetAssetManager()
Definition core.hpp:291
Core(Core &&other)
Definition core.hpp:177
void EnableNoFaceMode(bool enable)
Definition core.hpp:282
LEIA_DEPRECATED void SetBacklight(bool enable)
Definition core.hpp:303
void SetFaceTrackingSharedCameraSink(SharedCameraSink *sink)
Definition core.hpp:256
LEIA_NODISCARD bool IsInitialized() const
Definition core.hpp:193
LEIA_NODISCARD bool IsFaceTrackingStarted()
Definition core.hpp:243
Core()
Definition core.hpp:153
void SetDefaultFacePosition(ConstFloatSlice position)
Definition core.hpp:260
void SetFaceTrackingFrameListener(OWNING(FaceTrackingFrameListener *) listener)
Definition core.hpp:274
C++ wrapper for leia_core_init_configuration.
Definition core.hpp:54
void SetPlatformLogLevel(leia_log_level logLevel)
Definition core.hpp:98
void SetFaceTrackingServerLogLevel(leia_log_level serverLogLevel)
Definition core.hpp:126
CoreInitConfiguration(CoreInitConfiguration const &)=delete
void SetFaceTrackingRuntime(leia_face_tracking_runtime_type runtime)
Definition core.hpp:106
void SetLicenseNetworkProxy(const char *networkProxy)
Definition core.hpp:86
void SetFaceTrackingCheckPermission(bool checkPermission)
Definition core.hpp:118
void SetFaceTrackingEnable(bool enable)
Definition core.hpp:110
CoreInitConfiguration(CoreInitConfiguration &&other)
Definition core.hpp:68
void SetFaceTrackingStart(bool start)
Definition core.hpp:114
void SetFaceTrackingSharedCameraSink(leia_shared_camera_sink *sharedCameraSink)
Definition core.hpp:102
CoreInitConfiguration(CoreLibrary const &coreLib)
Definition core.hpp:59
~CoreInitConfiguration()
Definition core.hpp:62
CoreInitConfiguration & operator=(CoreInitConfiguration &&other)
Definition core.hpp:72
void ResetDisplayConfig()
Definition core.hpp:134
void SetFaceTrackingPermissionDialogKillProcess(bool permissionDialogKillProcess)
Definition core.hpp:122
void SetPlatformAndroidHandle(CoreAndroidHandleType handleType, jobject handle)
Definition core.hpp:94
void SetEnableValidation(bool enable)
Definition core.hpp:90
void SetLicenseKey(const char *licenseKey)
Definition core.hpp:82
CoreInitConfiguration()
Definition core.hpp:56
leia_core_init_configuration * GetHandle()
Definition core.hpp:139
CoreInitConfiguration & operator=(CoreInitConfiguration const &)=delete
void SetFaceTrackingPreferredFps(int preferredFps)
Definition core.hpp:130
Definition library.hpp:9
LEIA_NODISCARD leia_core_library * GetHandle() const
Definition library.hpp:65
leia_orientation
Definition types.h:108
leia_face_tracking_runtime_type
Definition types.h:82
#define LEIA_DEPRECATED
Definition defines.h:48
#define LEIA_NODISCARD
Definition defines.h:86
#define OWNING(ptr)
Definition defines.h:105
#define LEIA_CXX_DECLARE_EXPERIMENTAL_API_ENTRY(T)
Definition experimental.hpp:42
leia_bool(* leia_core_get_tracking_camera_rotation)(struct leia_core *, LEIA_FLOAT_SLICE(3) position)
Definition core.h:349
leia_bool(* leia_core_get_lookaround_eyes)(struct leia_core *, LEIA_FLOAT_SLICE(3) leftPosition, LEIA_FLOAT_SLICE(3) rightPosition)
Get the lookaround eyes' position.
Definition core.h:448
void(* leia_core_set_tracking_camera_rotation)(struct leia_core *, float thetaX, float thetaY, float thetaZ)
Definition core.h:346
leia_bool(* leia_core_get_non_predicted_eyes)(struct leia_core *, LEIA_FLOAT_SLICE(3) leftEyePosition, LEIA_FLOAT_SLICE(3) rightEyePosition)
Get the non-predicted eyes' position.
Definition core.h:436
LEIA_NODISCARD LEIASDK_API leia_bool leia_core_get_viewing_distance(struct leia_core *, float ipdMM, float *viewingDistance)
LEIASDK_API leia_bool leia_core_get_natural_orientation(struct leia_core_library *, enum leia_orientation *)
LEIASDK_API void leia_core_limit_orientations(struct leia_core_library *, jobject activity, struct leia_legal_orientations const *)
leia_core_android_handle_type
Definition core.h:133
leia_bool(* leia_core_burn_display_config)(struct leia_core *, float slant, float pitch, float phc, float dOverN, float n, float actCoef, float thetaX, float thetaY, float thetaZ)
Definition core.h:339
leia_bool(* leia_core_burn_camera_extrinsics)(struct leia_core *, int cameraId, float thetaXFpc, float thetaYFpc, float thetaZFpc)
Definition core.h:343
#define LEIA_CORE_HINT_RESET_DISPLAY_CONFIG
Definition core.h:191
LEIASDK_API leia_bool leia_core_get_legal_orientations(struct leia_core_library *, struct leia_legal_orientations *)
void * jobject
Definition jniTypes.h:15
int32_t leia_log_level
Definition log.h:22
Definition types.hpp:10
ConstFloatSlice ToConstSlice(leia_vector3 const *v)
Definition core.hpp:33
LEIA_NODISCARD bool IsFaceTrackingRuntimeSupported(CoreLibrary const &coreLibrary, FaceTrackingRuntimeType runtime)
Definition core.hpp:449
LEIA_NODISCARD bool GetLegalOrientations(CoreLibrary const &coreLibrary, leia_legal_orientations *legalOrientations)
Definition core.hpp:461
void LimitOrientations(CoreLibrary const &coreLibrary, jobject activity, leia_legal_orientations const *legalOrientations)
Definition core.hpp:466
LEIA_NODISCARD bool GetNaturalOrientation(CoreLibrary const &coreLibrary, leia_orientation *orientation)
Definition core.hpp:472
FloatSlice ToSlice(Vector3 *v)
Definition core.hpp:24
LEIA_NODISCARD bool IsLicenseRequired()
Definition core.hpp:455
Definition slice.h:17
leia_core's initial configuration.
Definition core.h:70
Core library.
Definition library.h:17
The main entry point into CNSDK C API.
Definition core.h:63
Definition slice.h:12
Face tracking frame listener.
Definition faceTracking.h:26
Face tracking frame.
Definition faceTracking.h:32
Definition types.h:101
float m[16]
Definition types.h:104
Definition sharedCameraSink.h:10
Definition types.h:78
float v[3]
Definition types.h:85
Definition types.h:89
#define CNSDK_VERSION
Definition version.h:7