SRSDK  0.10.39
Loading...
Searching...
No Matches
interlacer.h
Go to the documentation of this file.
1#ifndef CNSDK_LEIA_CORE_INTERLACER_H
2#define CNSDK_LEIA_CORE_INTERLACER_H
3
4#include "leia/core/api.h"
5#include "leia/core/types.h"
6#include "leia/common/types.h"
7#include "leia/common/slice.h"
9
11
12#pragma pack(push, 8)
13
26#ifdef LEIA_DOXYGEN
27
42
47
49
50#endif
51
55
59
63
66
74
83
97typedef void (*leia_interlacer_enable_act)(struct leia_interlacer*, leia_bool enable);
98#define leia_interlacer_enable_act_VERSION (1)
99
111#define leia_interlacer_is_act_enabled_VERSION (1)
112
113enum {
116};
117
125
133
147
160
176void leia_interlacer_set_num_tiles(struct leia_interlacer*, int32_t tx, int32_t ty);
177
192void leia_interlacer_get_num_tiles(struct leia_interlacer*, int32_t* tx, int32_t* ty);
193
212
224
239
256
274
290
293
295void leia_interlacer_set_phc(struct leia_interlacer*, float phase);
296
319 int32_t viewIndex,
320 LEIA_CONST_FLOAT_SLICE(3) cameraPos,
321 LEIA_CONST_FLOAT_SLICE(3) cameraDir,
322 LEIA_CONST_FLOAT_SLICE(3) cameraUp,
323 float width,
324 float height,
325 float nearPlane,
326 float farPlane,
327 LEIA_FLOAT_SLICE(3) viewPos,
328 LEIA_FLOAT_SLICE(16) viewProjectionMatrix,
329 float* viewShearX,
330 float* viewShearY);
331
355 int32_t viewIndex,
356 LEIA_CONST_FLOAT_SLICE(3) cameraPos,
357 LEIA_CONST_FLOAT_SLICE(3) cameraDir,
358 LEIA_CONST_FLOAT_SLICE(3) cameraUp,
359 float fieldOfView,
360 float aspectRatio,
361 float nearPlane,
362 float farPlane,
363 LEIA_FLOAT_SLICE(3) viewPos,
364 LEIA_FLOAT_SLICE(16) viewProjectionMatrix,
365 float* viewFieldOfView,
366 float* viewShearX,
367 float* viewShearY);
368
383
399
413
425
433 int32_t viewportWidth,
434 int32_t viewportHeight,
435 float* posX,
436 float* posY,
437 float* scaleX,
438 float* scaleY,
439 float* overrideSupportCirclePhase);
440#define leia_interlacer_init_zone_plate_VERSION (1)
441
452typedef void (*leia_interlacer_set_zone_plate)(struct leia_interlacer*, float posX, float posY, float scaleX, float scaleY, float overrideSupportCirclePhase);
453#define leia_interlacer_set_zone_plate_VERSION (1)
454
455typedef leia_bool (*leia_interlacer_get_zone_plate_results)(struct leia_interlacer*, float* slant, float* pitch, float* phc, float* dOverN, float* n);
456#define leia_interlacer_get_zone_plate_results_VERSION (3)
457
458typedef void (*leia_interlacer_set_support_circle_phase)(struct leia_interlacer*, float phase);
459#define leia_interlacer_set_support_circle_phase_VERSION (1)
460
461typedef leia_bool (*leia_interlacer_write_zone_plate_results)(struct leia_interlacer*, float slant, float pitch, float phc, float dOverN, float n);
462#define leia_interlacer_write_zone_plate_results_VERSION (3)
463
465 struct leia_interlacer*, leia_bool isFront, float deltaThetaX, float deltaThetaY, float deltaThetaZ, float calibrationTargetDistanceMm);
466#define leia_interlacer_set_camera_rectification_parameters_VERSION (2)
467
468typedef void (*leia_interlacer_set_camera_angles)(struct leia_interlacer*, leia_bool isLeft, float thetaXFpc, float thetaYFpc, float thetaZFpc);
469#define leia_interlacer_set_camera_angles_VERSION (2)
470
471typedef void (*leia_interlacer_set_dovern)(struct leia_interlacer*, float dOverN);
472#define leia_interlacer_set_dovern_VERSION (1)
473
475#define leia_interlacer_enable_phase_correction_VERSION (1)
476
478#define leia_interlacer_invert_phase_correction_VERSION (1)
479
481#define leia_interlacer_enable_don_correction_VERSION (1)
482
483typedef void (*leia_interlacer_set_n)(struct leia_interlacer*, float n);
484#define leia_interlacer_set_n_VERSION (1)
485
486typedef void (*leia_interlacer_set_act_coef)(struct leia_interlacer*, float n);
487#define leia_interlacer_set_act_coef_VERSION (1)
488
490#define leia_interlacer_get_act_coef_VERSION (1)
502
506void leia_interlacer_get_user_matrix(struct leia_interlacer* interlacer, LEIA_FLOAT_SLICE(16) transformMatrix);
508void leia_interlacer_set_user_matrix(struct leia_interlacer* interlacer, LEIA_CONST_FLOAT_SLICE(16) transformMatrix);
509
523
535
547void leia_interlacer_set_single_view_mode(struct leia_interlacer*, leia_bool setSingleView, int32_t singleViewIndex);
548
550 void* userData;
551 void (*onSingleViewModeChange)(void* userData, leia_bool singleViewMode);
552};
553
567
583void leia_interlacer_set_source_views_size(struct leia_interlacer*, int32_t sourceWidth, int32_t sourceHeight, leia_bool isHorizontalViews);
584
591void leia_interlacer_get_source_views_size(struct leia_interlacer*, int32_t* sourceWidth, int32_t* sourceHeight, leia_bool* isHorizontalViews);
592
602
612void leia_interlacer_set_source_media_scale(struct leia_interlacer*, float scaleX, float scaleY);
613
623
634
647void leia_interlacer_set_viewport_screen_position(struct leia_interlacer*, int32_t posX, int32_t posY);
648
663void leia_interlacer_set_viewport(struct leia_interlacer*, int32_t posX, int32_t posY, int32_t width, int32_t height);
664
679
692
710
725void leia_interlacer_set_reconvergence(struct leia_interlacer*, float value, int layer);
726
743
756
772
788
802typedef void (*leia_interlacer_initialize_gui)(struct leia_interlacer*, struct leia_interlacer_debug_menu_configuration const* config, leia_bool sRGB);
803#define leia_interlacer_initialize_gui_VERSION (1)
804
817typedef void (*leia_interlacer_set_gui_visibility)(struct leia_interlacer*, leia_bool isVisible);
818#define leia_interlacer_set_gui_visibility_VERSION (1)
819
831#define leia_interlacer_is_gui_visible_VERSION (1)
832
847typedef struct leia_interlacer_gui_input_state (*leia_interlacer_process_gui_input_wndproc)(
848 struct leia_interlacer*, void* surface, uint32_t msg, uint64_t wparam, int64_t lparam);
849#define leia_interlacer_process_gui_input_wndproc_VERSION (1)
850
851struct AInputEvent;
852
864typedef struct leia_interlacer_gui_input_state (*leia_interlacer_process_gui_input_ndk)(struct leia_interlacer*, struct AInputEvent const* inputEvent);
865#define leia_interlacer_process_gui_input_ndk_VERSION (1)
866
879typedef struct leia_interlacer_gui_input_state (*leia_interlacer_process_gui_motion_input)(struct leia_interlacer*, JNIEnv* jni, jobject motionInput);
880#define leia_interlacer_process_gui_motion_input_VERSION (1)
881
890typedef void (*leia_interlacer_shutdown_gui)(struct leia_interlacer*);
891#define leia_interlacer_shutdown_gui_VERSION (1)
892
905#define leia_interlacer_set_calibration_pattern_VERSION (1)
906
917typedef void (*leia_interlacer_set_gamma)(struct leia_interlacer*, float rGamma, float gGamma, float bGamma);
918#define leia_interlacer_set_gamma_VERSION (1)
919
931
945
960 float baselineScaling,
961 float convergencePlaneDistance,
962 float nearPlane,
963 float farPlane,
964 float* viewComfortZoneNear,
965 float* viewComfortZoneFar);
966
992 LEIA_CONST_FLOAT_SLICE(3) viewOffset,
993 LEIA_CONST_FLOAT_SLICE(3) cameraPos,
994 LEIA_CONST_FLOAT_SLICE(3) cameraDir,
995 LEIA_CONST_FLOAT_SLICE(3) cameraUp,
996 float perspectiveFieldOfView,
997 float perspectiveAspectRatio,
998 float orthoWidth,
999 float orthoHeight,
1000 float nearPlane,
1001 float farPlane,
1002 float convergencePlaneDistance,
1003 float convergencePlaneHeight,
1004 LEIA_FLOAT_SLICE(3) viewPos,
1005 LEIA_FLOAT_SLICE(16) viewProjectionMatrix,
1006 float* viewFieldOfView,
1007 float* viewShearX,
1008 float* viewShearY);
1009
1014#pragma pack(pop)
1015
1017
1018#endif // CNSDK_LEIA_CORE_INTERLACER_H
BEGIN_CAPI_DECL typedef int32_t leia_bool
Definition types.h:10
#define LEIASDK_API
Definition api.h:9
leia_tile_layout
Definition types.h:139
leia_view_info_mode
Definition types.h:152
leia_graphics_api
Definition types.h:13
leia_fit_mode
Definition types.h:103
leia_calibration_pattern
Definition types.h:113
#define LEIA_NODISCARD
Definition defines.h:86
#define END_CAPI_DECL
Definition defines.h:74
#define BEGIN_CAPI_DECL
Definition defines.h:73
LEIASDK_API void leia_get_view_comfort_zone(enum leia_view_info_mode mode, float baselineScaling, float convergencePlaneDistance, float nearPlane, float farPlane, float *viewComfortZoneNear, float *viewComfortZoneFar)
A helper function to compute comfort zone range.
void(* leia_interlacer_set_zone_plate)(struct leia_interlacer *, float posX, float posY, float scaleX, float scaleY, float overrideSupportCirclePhase)
Set the origin and scale of the zoom plate.
Definition interlacer.h:452
LEIASDK_API float leia_interlacer_get_phc(struct leia_interlacer *)
LEIASDK_API void leia_interlacer_set_enable_user_matrix(struct leia_interlacer *interlacer, leia_bool enabled)
void(* leia_interlacer_set_n)(struct leia_interlacer *, float n)
Definition interlacer.h:483
LEIASDK_API void leia_interlacer_set_phc(struct leia_interlacer *, float phase)
LEIASDK_API void leia_interlacer_set_single_view_mode(struct leia_interlacer *, leia_bool setSingleView, int32_t singleViewIndex)
Set single-view interlacing mode.
LEIASDK_API void leia_interlacer_init_configuration_set_is_protected(struct leia_interlacer_init_configuration *, leia_bool)
Whether we are using a protected OpenGL context.
LEIA_NODISCARD LEIASDK_API enum leia_fit_mode leia_interlacer_get_fit_mode(struct leia_interlacer *)
Get the fit mode.
LEIASDK_API void leia_interlacer_set_fit_mode(struct leia_interlacer *, enum leia_fit_mode mode)
Set the fit mode.
void(* leia_interlacer_set_support_circle_phase)(struct leia_interlacer *, float phase)
Definition interlacer.h:458
LEIASDK_API void leia_interlacer_output_as_tiles(struct leia_interlacer *, leia_bool enable)
Enable or disable output of raw source tiles.
LEIASDK_API void leia_interlacer_set_num_tiles(struct leia_interlacer *, int32_t tx, int32_t ty)
Set the layout of views in a atlas.
void(* leia_interlacer_set_gamma)(struct leia_interlacer *, float rGamma, float gGamma, float bGamma)
Set the gamma value during interlacing.
Definition interlacer.h:917
float(* leia_interlacer_get_act_coef)(struct leia_interlacer *)
Definition interlacer.h:489
LEIASDK_API void leia_interlacer_set_alpha(struct leia_interlacer *, float alpha)
Sets the alpha blending value.
void(* leia_interlacer_set_calibration_pattern)(struct leia_interlacer *, enum leia_calibration_pattern pattern)
Sets the calibration pattern.
Definition interlacer.h:904
LEIA_NODISCARD LEIASDK_API enum leia_graphics_api leia_interlacer_get_graphics_api(struct leia_interlacer *)
Get the graphics API.
LEIASDK_API void leia_interlacer_set_source_media_is_video(struct leia_interlacer *, leia_bool isVideo)
Set whether source media is a video or not.
LEIASDK_API void leia_interlacer_get_source_views_size(struct leia_interlacer *, int32_t *sourceWidth, int32_t *sourceHeight, leia_bool *isHorizontalViews)
Get dimensions of the views previously set via leia_interlacer_set_source_views_size.
LEIASDK_API void leia_interlacer_set_invert_screen_texture_coordinates(struct leia_interlacer *, leia_bool invert)
Set whether to invert screen texture coordinates vertically.
LEIASDK_API void leia_interlacer_set_reconvergence_zoom(struct leia_interlacer *, leia_bool zoomX, leia_bool zoomXY, int layer)
Set what directions reconvergence is calculated for.
LEIASDK_API void leia_interlacer_set_source_views_srgb(struct leia_interlacer *, leia_bool isSRGB)
Set whether view textures are in a sRGB format.
LEIASDK_API void leia_interlacer_set_local_matrix(struct leia_interlacer *, LEIA_CONST_FLOAT_SLICE(16) transformMatrix)
Set the local matrix.
void(* leia_interlacer_enable_phase_correction)(struct leia_interlacer *, leia_bool enable)
Definition interlacer.h:474
LEIASDK_API void leia_interlacer_init_configuration_set_use_atlas_for_views(struct leia_interlacer_init_configuration *, leia_bool)
If we should use atlas by default.
LEIASDK_API void leia_interlacer_set_viewport_screen_position(struct leia_interlacer *, int32_t posX, int32_t posY)
Set the viewport screen position.
LEIASDK_API void leia_interlacer_set_custom_texture_matrix(struct leia_interlacer *, LEIA_CONST_FLOAT_SLICE(16) textureTransform)
Set the custom texture matrix.
LEIASDK_API void leia_interlacer_set_source_media_scale(struct leia_interlacer *, float scaleX, float scaleY)
Set source media scale factors.
LEIASDK_API void leia_interlacer_get_converged_orthographic_view_info(struct leia_interlacer *, int32_t viewIndex, LEIA_CONST_FLOAT_SLICE(3) cameraPos, LEIA_CONST_FLOAT_SLICE(3) cameraDir, LEIA_CONST_FLOAT_SLICE(3) cameraUp, float width, float height, float nearPlane, float farPlane, LEIA_FLOAT_SLICE(3) viewPos, LEIA_FLOAT_SLICE(16) viewProjectionMatrix, float *viewShearX, float *viewShearY)
Retrieve information related to a view.
LEIA_NODISCARD LEIASDK_API float leia_interlacer_get_convergence_distance(struct leia_interlacer *)
Get the convergence distance.
leia_bool(* leia_interlacer_get_zone_plate_results)(struct leia_interlacer *, float *slant, float *pitch, float *phc, float *dOverN, float *n)
Definition interlacer.h:455
LEIASDK_API void leia_interlacer_set_use_atlas_for_views(struct leia_interlacer *, leia_bool)
Set whether the views are a single atlas vs individual textures.
LEIASDK_API void leia_interlacer_set_source_views_size(struct leia_interlacer *, int32_t sourceWidth, int32_t sourceHeight, leia_bool isHorizontalViews)
Set dimensions of the views.
LEIASDK_API void leia_interlacer_get_rect_matrix(struct leia_interlacer *, LEIA_FLOAT_SLICE(16) transformMatrix)
Get the rect matrix.
LEIASDK_API void leia_interlacer_set_single_view_mode_listener(struct leia_interlacer *, struct leia_interlacer_single_view_mode_listener const *listener)
Set single-view mode callback.
leia_bool(* leia_interlacer_is_gui_visible)(struct leia_interlacer *)
Gets whether we the GUI is visible.
Definition interlacer.h:830
void(* leia_interlacer_set_camera_angles)(struct leia_interlacer *, leia_bool isLeft, float thetaXFpc, float thetaYFpc, float thetaZFpc)
Definition interlacer.h:468
LEIASDK_API void leia_interlacer_set_viewport(struct leia_interlacer *, int32_t posX, int32_t posY, int32_t width, int32_t height)
Set the viewport.
LEIASDK_API void leia_interlacer_get_converged_perspective_view_info(struct leia_interlacer *, int32_t viewIndex, LEIA_CONST_FLOAT_SLICE(3) cameraPos, LEIA_CONST_FLOAT_SLICE(3) cameraDir, LEIA_CONST_FLOAT_SLICE(3) cameraUp, float fieldOfView, float aspectRatio, float nearPlane, float farPlane, LEIA_FLOAT_SLICE(3) viewPos, LEIA_FLOAT_SLICE(16) viewProjectionMatrix, float *viewFieldOfView, float *viewShearX, float *viewShearY)
Retrieve information related to a view.
LEIASDK_API void leia_interlacer_get_view_offset(struct leia_interlacer *, int32_t view, LEIA_FLOAT_SLICE(3) offset)
Gets a view offset.
LEIA_NODISCARD LEIASDK_API int leia_interlacer_get_layer_count(struct leia_interlacer *)
Gets the current number of layers.
LEIASDK_API int32_t leia_interlacer_get_max_layer_count(struct leia_interlacer *)
Gets the max number of layers that can be interlaced at once.
LEIASDK_API void leia_interlacer_release(struct leia_interlacer *)
Decrement leia_interlacer reference count.
LEIASDK_API void leia_interlacer_set_convergence_distance(struct leia_interlacer *, float distance)
Set the convergence distance.
LEIASDK_API void leia_interlacer_set_in_shader_srgb_conversion(struct leia_interlacer *, leia_bool sRGBRead, leia_bool sRGBWrite)
Set whether to sRGB conversions are enabled or disabled in the interlacing shader.
LEIA_NODISCARD LEIASDK_API float leia_interlacer_get_baseline_scaling(struct leia_interlacer *)
Get the baseline scaling.
leia_bool(* leia_interlacer_write_zone_plate_results)(struct leia_interlacer *, float slant, float pitch, float phc, float dOverN, float n)
Definition interlacer.h:461
void(* leia_interlacer_enable_don_correction)(struct leia_interlacer *, leia_bool enable)
Definition interlacer.h:480
LEIASDK_API void leia_get_view_info(enum leia_view_info_mode mode, LEIA_CONST_FLOAT_SLICE(3) viewOffset, LEIA_CONST_FLOAT_SLICE(3) cameraPos, LEIA_CONST_FLOAT_SLICE(3) cameraDir, LEIA_CONST_FLOAT_SLICE(3) cameraUp, float perspectiveFieldOfView, float perspectiveAspectRatio, float orthoWidth, float orthoHeight, float nearPlane, float farPlane, float convergencePlaneDistance, float convergencePlaneHeight, LEIA_FLOAT_SLICE(3) viewPos, LEIA_FLOAT_SLICE(16) viewProjectionMatrix, float *viewFieldOfView, float *viewShearX, float *viewShearY)
A helper function to compute per-view values.
LEIASDK_API void leia_interlacer_set_baseline_scaling(struct leia_interlacer *, float baseline)
Sets the baseline scaling.
leia_bool(* leia_interlacer_init_zone_plate)(struct leia_interlacer *, int32_t viewportWidth, int32_t viewportHeight, float *posX, float *posY, float *scaleX, float *scaleY, float *overrideSupportCirclePhase)
Init zone plate.
Definition interlacer.h:432
LEIASDK_API void leia_interlacer_set_reconvergence(struct leia_interlacer *, float value, int layer)
Set the reconvergence amount.
LEIASDK_API int32_t leia_interlacer_get_max_view_count(struct leia_interlacer *)
Gets the max number of views per layer that can be interlaced at once.
LEIASDK_API void leia_interlacer_set_flip_input_uv_vertical(struct leia_interlacer *, leia_bool flip)
Set whether to flip the views vertically.
void(* leia_interlacer_set_act_coef)(struct leia_interlacer *, float n)
Definition interlacer.h:486
LEIA_NODISCARD LEIASDK_API leia_bool leia_interlacer_get_use_atlas_for_views(struct leia_interlacer *)
Gets whether we are using a single atlas or individual views.
leia_bool(* leia_interlacer_is_act_enabled)(struct leia_interlacer *)
Gets whether anti-crosstalk is enabled or not.
Definition interlacer.h:110
LEIA_NODISCARD LEIASDK_API float leia_interlacer_get_reconvergence(struct leia_interlacer *, int layer)
Get the reconvergence amount.
LEIASDK_API void leia_interlacer_get_user_matrix(struct leia_interlacer *interlacer, LEIA_FLOAT_SLICE(16) transformMatrix)
void(* leia_interlacer_set_dovern)(struct leia_interlacer *, float dOverN)
Definition interlacer.h:471
LEIA_NODISCARD LEIASDK_API struct leia_interlacer_init_configuration * leia_interlacer_init_configuration_alloc()
LEIASDK_API void leia_interlacer_init_configuration_free(struct leia_interlacer_init_configuration *)
void(* leia_interlacer_set_camera_rectification_parameters)(struct leia_interlacer *, leia_bool isFront, float deltaThetaX, float deltaThetaY, float deltaThetaZ, float calibrationTargetDistanceMm)
Definition interlacer.h:464
LEIASDK_API void leia_interlacer_get_num_tiles(struct leia_interlacer *, int32_t *tx, int32_t *ty)
Get the layout of views in the atlas.
LEIASDK_API void leia_interlacer_set_user_matrix(struct leia_interlacer *interlacer, LEIA_CONST_FLOAT_SLICE(16) transformMatrix)
LEIA_NODISCARD LEIASDK_API leia_bool leia_interlacer_is_reconvergence_enabled(struct leia_interlacer *)
Gets whether we are using reconvergence.
LEIASDK_API void leia_interlacer_set_layer_count(struct leia_interlacer *, int layerCount)
Sets the number of layers to interlace.
void(* leia_interlacer_invert_phase_correction)(struct leia_interlacer *, leia_bool invert)
Definition interlacer.h:477
LEIASDK_API void leia_interlacer_retain(struct leia_interlacer *)
Increment leia_interlacer reference count.
LEIASDK_API void leia_interlacer_set_tile_layout(struct leia_interlacer *, enum leia_tile_layout tileLayout)
Set the layout of the tiles in the atlas.
LEIASDK_API void leia_interlacer_enable_reconvergence(struct leia_interlacer *, leia_bool enable)
Enable or disable reconvergence.
@ LEIA_INTERLACER_MAX_VIEWS
A compile-time hint, use leia_interlacer_get_max_view_count to get the actual value.
Definition interlacer.h:115
@ LEIA_INTERLACER_MAX_LAYERS
A compile-time hint, use leia_interlacer_get_max_layer_count to get the actual value.
Definition interlacer.h:114
void * jobject
Definition jniTypes.h:15
const struct JNINativeInterface * JNIEnv
Definition jniTypes.h:28
#define LEIA_FLOAT_SLICE(size)
Definition slice.h:27
#define LEIA_CONST_FLOAT_SLICE(size)
Definition slice.h:28
Definition interlacer.h:48
Definition types.h:23
leia_interlacer's initial configuration.
Definition interlacer.h:46
void * userData
Definition interlacer.h:550
void(* onSingleViewModeChange)(void *userData, leia_bool singleViewMode)
Definition interlacer.h:551
The main entity used for performing interlacing on Leia devices.
Definition interlacer.h:41