FDL Core Library
ASC Framing Decision List — C/C++ Reference Implementation
Loading...
Searching...
No Matches
fdl_core.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2024-present American Society Of Cinematographers
2// SPDX-License-Identifier: Apache-2.0
13#ifndef FDL_CORE_H
14#define FDL_CORE_H
15
16#include "fdl_export.h"
17#include <stddef.h>
18#include <stdint.h>
19
20#ifdef __cplusplus
21extern "C" {
22#endif
23
24/* -----------------------------------------------------------------------
25 * Boolean constants for C ABI int fields/returns
26 * ----------------------------------------------------------------------- */
27
29#define FDL_TRUE 1
30#define FDL_FALSE 0
33#define FDL_DEFAULT_JSON_INDENT 2
35/* -----------------------------------------------------------------------
36 * Custom attribute type constants
37 * ----------------------------------------------------------------------- */
38
40typedef uint32_t fdl_custom_attr_type_t;
41#define FDL_CUSTOM_ATTR_TYPE_NONE 0
42#define FDL_CUSTOM_ATTR_TYPE_STRING 1
43#define FDL_CUSTOM_ATTR_TYPE_INT 2
44#define FDL_CUSTOM_ATTR_TYPE_FLOAT 3
45#define FDL_CUSTOM_ATTR_TYPE_BOOL 4
46#define FDL_CUSTOM_ATTR_TYPE_POINT_F64 5
47#define FDL_CUSTOM_ATTR_TYPE_DIMS_F64 6
48#define FDL_CUSTOM_ATTR_TYPE_DIMS_I64 7
49#define FDL_CUSTOM_ATTR_TYPE_OTHER 8
51/* -----------------------------------------------------------------------
52 * First-class custom attribute name constants
53 * ----------------------------------------------------------------------- */
54
56#define FDL_ATTR_SCALE_FACTOR "scale_factor"
58#define FDL_ATTR_CONTENT_TRANSLATION "content_translation"
60#define FDL_ATTR_SCALED_BOUNDING_BOX "scaled_bounding_box"
61
62/* -----------------------------------------------------------------------
63 * ABI version
64 * ----------------------------------------------------------------------- */
65
70typedef struct fdl_abi_version_t {
71 uint64_t major;
72 uint64_t minor;
73 uint64_t patch;
75
82
83/* -----------------------------------------------------------------------
84 * Value types (pass by value, no heap allocation)
85 * ----------------------------------------------------------------------- */
86
92
98
100typedef struct fdl_point_f64_t {
101 double x;
102 double y;
104
106typedef struct fdl_rect_t {
107 double x;
108 double y;
109 double width;
110 double height;
112
113/* Note: fdl_clip_id_t and fdl_file_sequence_t are opaque handle types,
114 * declared alongside other sub-object handles in the Document Model section. */
115
116/* -----------------------------------------------------------------------
117 * Enums (as integer constants)
118 * -----------------------------------------------------------------------
119 * Most enums are typedef'd to uint32_t, which is sufficient for scalar
120 * arguments passed individually.
121 *
122 * Rounding enums (fdl_rounding_mode_t, fdl_rounding_even_t) use uint64_t
123 * because they are members of fdl_round_strategy_t, which is passed by
124 * value. On ARM64, CFFI ABI mode (ffi.dlopen / libffi) mis-marshals
125 * structs whose multiple sub-64-bit fields pack into a single register:
126 * two uint32_t fields both land in x0 and get their halves swapped.
127 * Widening to uint64_t gives each field its own GPR (x0, x1), matching
128 * the layout of fdl_dimensions_i64_t which is known to work. This has
129 * no effect on native C/C++ or N-API (Node.js) callers.
130 * ----------------------------------------------------------------------- */
131
133typedef uint64_t fdl_rounding_mode_t;
134#define FDL_ROUNDING_MODE_UP 0
135#define FDL_ROUNDING_MODE_DOWN 1
136#define FDL_ROUNDING_MODE_ROUND 2
139typedef uint64_t fdl_rounding_even_t;
140#define FDL_ROUNDING_EVEN_WHOLE 0
141#define FDL_ROUNDING_EVEN_EVEN 1
144typedef uint32_t fdl_geometry_path_t;
145#define FDL_GEOMETRY_PATH_CANVAS_DIMENSIONS 0
146#define FDL_GEOMETRY_PATH_CANVAS_EFFECTIVE_DIMENSIONS 1
147#define FDL_GEOMETRY_PATH_FRAMING_PROTECTION_DIMENSIONS 2
148#define FDL_GEOMETRY_PATH_FRAMING_DIMENSIONS 3
151typedef uint32_t fdl_fit_method_t;
152#define FDL_FIT_METHOD_WIDTH 0
153#define FDL_FIT_METHOD_HEIGHT 1
154#define FDL_FIT_METHOD_FIT_ALL 2
155#define FDL_FIT_METHOD_FILL 3
158typedef uint32_t fdl_halign_t;
159#define FDL_HALIGN_LEFT 0
160#define FDL_HALIGN_CENTER 1
161#define FDL_HALIGN_RIGHT 2
164typedef uint32_t fdl_valign_t;
165#define FDL_VALIGN_TOP 0
166#define FDL_VALIGN_CENTER 1
167#define FDL_VALIGN_BOTTOM 2
169/* -----------------------------------------------------------------------
170 * Composite types
171 * ----------------------------------------------------------------------- */
172
184
190
199
200/* -----------------------------------------------------------------------
201 * Rounding functions
202 * ----------------------------------------------------------------------- */
203
212FDL_API int64_t fdl_round(double value, fdl_rounding_even_t even, fdl_rounding_mode_t mode);
213
224
234
235/* -----------------------------------------------------------------------
236 * Dimensions operations
237 * ----------------------------------------------------------------------- */
238
250
263fdl_dimensions_scale(fdl_dimensions_f64_t dims, double scale_factor, double target_squeeze);
264
277 fdl_dimensions_f64_t dims, double input_squeeze, double scale_factor, double target_squeeze);
278
287
298
307
316
324
325/* -----------------------------------------------------------------------
326 * Dimensions (integer) operations
327 * ----------------------------------------------------------------------- */
328
336
345
353
362
371
372/* -----------------------------------------------------------------------
373 * Point operations
374 * ----------------------------------------------------------------------- */
375
383FDL_API fdl_point_f64_t fdl_point_normalize(fdl_point_f64_t point, double squeeze);
384
396FDL_API fdl_point_f64_t fdl_point_scale(fdl_point_f64_t point, double scale_factor, double target_squeeze);
397
406
415
424
437FDL_API fdl_point_f64_t
438fdl_point_clamp(fdl_point_f64_t point, double min_val, double max_val, int has_min, int has_max);
439
446FDL_API int fdl_point_is_zero(fdl_point_f64_t point);
447
457FDL_API fdl_point_f64_t
458fdl_point_normalize_and_scale(fdl_point_f64_t point, double input_squeeze, double scale_factor, double target_squeeze);
459
468
477
486
487/* -----------------------------------------------------------------------
488 * Floating-point comparison constants
489 * ----------------------------------------------------------------------- */
490
496FDL_API double fdl_fp_rel_tol(void);
497
503FDL_API double fdl_fp_abs_tol(void);
504
505/* -----------------------------------------------------------------------
506 * Geometry operations
507 * ----------------------------------------------------------------------- */
508
521
533FDL_API fdl_geometry_t
534fdl_geometry_normalize_and_scale(fdl_geometry_t geo, double source_squeeze, double scale_factor, double target_squeeze);
535
544
559 fdl_geometry_t geo,
560 fdl_point_f64_t offset,
561 fdl_point_f64_t* theo_eff,
562 fdl_point_f64_t* theo_prot,
563 fdl_point_f64_t* theo_fram);
564
577FDL_API fdl_geometry_t
579
591
592/* -----------------------------------------------------------------------
593 * Pipeline helper functions
594 * ----------------------------------------------------------------------- */
595
607FDL_API double fdl_calculate_scale_factor(
608 fdl_dimensions_f64_t fit_norm, fdl_dimensions_f64_t target_norm, fdl_fit_method_t fit_method);
609
622FDL_API double fdl_output_size_for_axis(double canvas_size, double max_size, int has_max, int pad_to_max);
623
640FDL_API double fdl_alignment_shift(
641 double fit_size,
642 double fit_anchor,
643 double output_size,
644 double canvas_size,
645 double target_size,
646 int is_center,
647 double align_factor,
648 int pad_to_max);
649
660
661/* -----------------------------------------------------------------------
662 * Framing from intent
663 * ----------------------------------------------------------------------- */
664
680 fdl_dimensions_f64_t canvas_dims,
681 fdl_dimensions_f64_t working_dims,
682 double squeeze,
683 fdl_dimensions_i64_t aspect_ratio,
684 double protection,
685 fdl_round_strategy_t rounding);
686
687/* -----------------------------------------------------------------------
688 * Document model (opaque handle)
689 * ----------------------------------------------------------------------- */
690
714typedef struct fdl_doc fdl_doc_t;
715
718typedef struct fdl_canvas fdl_canvas_t;
730
737FDL_API fdl_doc_t* fdl_doc_create(void);
738
747FDL_API void fdl_doc_free(fdl_doc_t* doc);
748
758FDL_API fdl_parse_result_t fdl_doc_parse_json(const char* json_str, size_t json_len);
759
766FDL_API const char* fdl_doc_get_uuid(const fdl_doc_t* doc);
767
774FDL_API const char* fdl_doc_get_fdl_creator(const fdl_doc_t* doc);
775
782FDL_API const char* fdl_doc_get_default_framing_intent(const fdl_doc_t* doc);
783
790FDL_API int fdl_doc_get_version_major(const fdl_doc_t* doc);
791
798FDL_API int fdl_doc_get_version_minor(const fdl_doc_t* doc);
799
810FDL_API char* fdl_doc_to_json(const fdl_doc_t* doc, int indent);
811
820FDL_API char* fdl_context_to_json(const fdl_context_t* ctx, int indent);
821
829FDL_API char* fdl_canvas_to_json(const fdl_canvas_t* canvas, int indent);
830
838FDL_API char* fdl_framing_decision_to_json(const fdl_framing_decision_t* fd, int indent);
839
847FDL_API char* fdl_framing_intent_to_json(const fdl_framing_intent_t* fi, int indent);
848
856FDL_API char* fdl_canvas_template_to_json(const fdl_canvas_template_t* ct, int indent);
857
858/* -----------------------------------------------------------------------
859 * Collection traversal
860 * ----------------------------------------------------------------------- */
861
870FDL_API uint32_t fdl_doc_framing_intents_count(fdl_doc_t* doc);
871
878FDL_API fdl_framing_intent_t* fdl_doc_framing_intent_at(fdl_doc_t* doc, uint32_t index);
879
887
898FDL_API uint32_t fdl_doc_contexts_count(fdl_doc_t* doc);
899
906FDL_API fdl_context_t* fdl_doc_context_at(fdl_doc_t* doc, uint32_t index);
907
914FDL_API fdl_context_t* fdl_doc_context_find_by_label(fdl_doc_t* doc, const char* label);
915
926FDL_API uint32_t fdl_doc_canvas_templates_count(fdl_doc_t* doc);
927
934FDL_API fdl_canvas_template_t* fdl_doc_canvas_template_at(fdl_doc_t* doc, uint32_t index);
935
943
954FDL_API uint32_t fdl_context_canvases_count(const fdl_context_t* ctx);
955
962FDL_API fdl_canvas_t* fdl_context_canvas_at(fdl_context_t* ctx, uint32_t index);
963
970FDL_API fdl_canvas_t* fdl_context_find_canvas_by_id(fdl_context_t* ctx, const char* id);
971
982FDL_API uint32_t fdl_canvas_framing_decisions_count(const fdl_canvas_t* canvas);
983
991
999
1002/* -----------------------------------------------------------------------
1003 * Field accessors — Context
1004 * ----------------------------------------------------------------------- */
1005
1011FDL_API const char* fdl_context_get_label(const fdl_context_t* ctx);
1012
1018FDL_API const char* fdl_context_get_context_creator(const fdl_context_t* ctx);
1019
1025FDL_API int fdl_context_has_clip_id(const fdl_context_t* ctx);
1026
1034FDL_API const char* fdl_context_get_clip_id(const fdl_context_t* ctx);
1035
1043
1050FDL_API const char* fdl_clip_id_get_clip_name(const fdl_clip_id_t* cid);
1051
1058FDL_API int fdl_clip_id_has_file(const fdl_clip_id_t* cid);
1059
1066FDL_API const char* fdl_clip_id_get_file(const fdl_clip_id_t* cid);
1067
1074FDL_API int fdl_clip_id_has_sequence(const fdl_clip_id_t* cid);
1075
1083
1091FDL_API char* fdl_clip_id_to_json(const fdl_clip_id_t* cid, int indent);
1092
1099FDL_API const char* fdl_file_sequence_get_value(const fdl_file_sequence_t* seq);
1100
1107FDL_API const char* fdl_file_sequence_get_idx(const fdl_file_sequence_t* seq);
1108
1115FDL_API int64_t fdl_file_sequence_get_min(const fdl_file_sequence_t* seq);
1116
1123FDL_API int64_t fdl_file_sequence_get_max(const fdl_file_sequence_t* seq);
1124
1125/* -----------------------------------------------------------------------
1126 * Field accessors — Canvas
1127 * ----------------------------------------------------------------------- */
1128
1132FDL_API const char* fdl_canvas_get_label(const fdl_canvas_t* canvas);
1133
1137FDL_API const char* fdl_canvas_get_id(const fdl_canvas_t* canvas);
1138
1142FDL_API const char* fdl_canvas_get_source_canvas_id(const fdl_canvas_t* canvas);
1143
1148
1152FDL_API int fdl_canvas_has_effective_dimensions(const fdl_canvas_t* canvas);
1153
1158
1163
1167FDL_API double fdl_canvas_get_anamorphic_squeeze(const fdl_canvas_t* canvas);
1168
1172FDL_API int fdl_canvas_has_photosite_dimensions(const fdl_canvas_t* canvas);
1173
1178
1182FDL_API int fdl_canvas_has_physical_dimensions(const fdl_canvas_t* canvas);
1183
1188/* -----------------------------------------------------------------------
1189 * Field accessors — Framing Decision
1190 * ----------------------------------------------------------------------- */
1191
1195FDL_API const char* fdl_framing_decision_get_label(const fdl_framing_decision_t* fd);
1196
1200FDL_API const char* fdl_framing_decision_get_id(const fdl_framing_decision_t* fd);
1201
1206
1211
1216
1221
1226
1231
1232/* -----------------------------------------------------------------------
1233 * Field accessors — Framing Intent
1234 * ----------------------------------------------------------------------- */
1235
1239FDL_API const char* fdl_framing_intent_get_label(const fdl_framing_intent_t* fi);
1240
1244FDL_API const char* fdl_framing_intent_get_id(const fdl_framing_intent_t* fi);
1245
1250
1255
1256/* -----------------------------------------------------------------------
1257 * Field accessors — Canvas Template
1258 * ----------------------------------------------------------------------- */
1259
1263FDL_API const char* fdl_canvas_template_get_label(const fdl_canvas_template_t* ct);
1264
1268FDL_API const char* fdl_canvas_template_get_id(const fdl_canvas_template_t* ct);
1269
1274
1279
1284
1289
1294
1299
1304
1309
1314
1319
1324
1329
1330/* -----------------------------------------------------------------------
1331 * Geometry layer resolution (from handle types)
1332 * ----------------------------------------------------------------------- */
1333
1345FDL_API int fdl_resolve_geometry_layer(
1346 const fdl_canvas_t* canvas,
1347 const fdl_framing_decision_t* framing,
1349 fdl_dimensions_f64_t* out_dims,
1350 fdl_point_f64_t* out_anchor);
1351
1352/* -----------------------------------------------------------------------
1353 * Rect convenience — combine dims + anchor into (x, y, w, h)
1354 * ----------------------------------------------------------------------- */
1355
1365FDL_API fdl_rect_t fdl_make_rect(double x, double y, double width, double height);
1366
1373FDL_API fdl_rect_t fdl_canvas_get_rect(const fdl_canvas_t* canvas);
1374
1382FDL_API int fdl_canvas_get_effective_rect(const fdl_canvas_t* canvas, fdl_rect_t* out_rect);
1383
1391
1400
1401/* -----------------------------------------------------------------------
1402 * Template pipeline — full CanvasTemplate.apply()
1403 * ----------------------------------------------------------------------- */
1404
1413
1431 const fdl_canvas_template_t* tmpl,
1432 const fdl_canvas_t* source_canvas,
1433 const fdl_framing_decision_t* source_framing,
1434 const char* new_canvas_id,
1435 const char* new_fd_name,
1436 const char* source_context_label,
1437 const char* context_creator);
1438
1447
1448/* -----------------------------------------------------------------------
1449 * Canvas resolution — find matching canvas for input dimensions
1450 * ----------------------------------------------------------------------- */
1451
1459
1477 fdl_context_t* ctx, fdl_dimensions_f64_t input_dims, fdl_canvas_t* canvas, fdl_framing_decision_t* framing);
1478
1479/* -----------------------------------------------------------------------
1480 * Document builder — create and mutate FDL documents
1481 * ----------------------------------------------------------------------- */
1482
1494 const char* uuid,
1495 int version_major,
1496 int version_minor,
1497 const char* fdl_creator,
1498 const char* default_framing_intent);
1499
1503FDL_API void fdl_doc_set_uuid(fdl_doc_t* doc, const char* uuid);
1504
1508FDL_API void fdl_doc_set_fdl_creator(fdl_doc_t* doc, const char* creator);
1509
1513FDL_API void fdl_doc_set_default_framing_intent(fdl_doc_t* doc, const char* fi_id);
1514
1519FDL_API void fdl_doc_set_version(fdl_doc_t* doc, int major, int minor);
1520
1533 fdl_doc_t* doc, const char* id, const char* label, int64_t aspect_w, int64_t aspect_h, double protection);
1534
1543FDL_API fdl_context_t* fdl_doc_add_context(fdl_doc_t* doc, const char* label, const char* context_creator);
1544
1558 fdl_context_t* ctx,
1559 const char* id,
1560 const char* label,
1561 const char* source_canvas_id,
1562 int64_t dim_w,
1563 int64_t dim_h,
1564 double squeeze);
1565
1574 fdl_canvas_t* canvas, fdl_dimensions_i64_t dims, fdl_point_f64_t anchor);
1575
1583
1591
1606 fdl_canvas_t* canvas,
1607 const char* id,
1608 const char* label,
1609 const char* framing_intent_id,
1610 double dim_w,
1611 double dim_h,
1612 double anchor_x,
1613 double anchor_y);
1614
1632 fdl_doc_t* doc,
1633 const char* id,
1634 const char* label,
1635 int64_t target_w,
1636 int64_t target_h,
1637 double target_squeeze,
1638 fdl_geometry_path_t fit_source,
1639 fdl_fit_method_t fit_method,
1640 fdl_halign_t halign,
1641 fdl_valign_t valign,
1642 fdl_round_strategy_t rounding);
1643
1651
1659
1667
1677
1685
1692FDL_API void fdl_framing_intent_set_protection(fdl_framing_intent_t* fi, double protection);
1693
1701
1708FDL_API void fdl_canvas_set_anamorphic_squeeze(fdl_canvas_t* canvas, double squeeze);
1709
1719
1725FDL_API void fdl_canvas_remove_effective(fdl_canvas_t* canvas);
1726
1734
1742
1750
1758
1765
1766/* -----------------------------------------------------------------------
1767 * Framing decision business logic (handle-based)
1768 * ----------------------------------------------------------------------- */
1769
1782 fdl_framing_decision_t* fd, const fdl_canvas_t* canvas, fdl_halign_t h_align, fdl_valign_t v_align);
1783
1796 fdl_framing_decision_t* fd, const fdl_canvas_t* canvas, fdl_halign_t h_align, fdl_valign_t v_align);
1797
1811 const fdl_canvas_t* canvas,
1812 const fdl_framing_intent_t* intent,
1813 fdl_round_strategy_t rounding);
1814
1826FDL_API const char* fdl_context_set_clip_id_json(fdl_context_t* ctx, const char* json_str, size_t json_len);
1827
1833FDL_API void fdl_context_remove_clip_id(fdl_context_t* ctx);
1834
1843FDL_API const char* fdl_clip_id_validate_json(const char* json_str, size_t json_len);
1844
1845/* -----------------------------------------------------------------------
1846 * Validation (schema + semantic)
1847 * ----------------------------------------------------------------------- */
1848
1851
1863
1871
1880FDL_API const char* fdl_validation_result_error_at(const fdl_validation_result_t* result, uint32_t index);
1881
1888
1889/* -----------------------------------------------------------------------
1890 * Memory management
1891 * ----------------------------------------------------------------------- */
1892
1901FDL_API void fdl_free(void* ptr);
1902
1903/* -----------------------------------------------------------------------
1904 * Custom attribute API (19 functions x 8 handle types = 152 functions)
1905 *
1906 * Names are passed WITHOUT the '_' prefix; the library prepends it internally.
1907 * Type-safe: setting an attribute with a different type than its current value
1908 * returns -1. Remove the attribute first, then set with the new type.
1909 * ----------------------------------------------------------------------- */
1910
1914#define FDL_CUSTOM_ATTR_DECL(PREFIX, HANDLE_TYPE) \
1915 \
1916 FDL_API int PREFIX##set_custom_attr_string(HANDLE_TYPE* h, const char* name, const char* value); \
1917 \
1918 FDL_API int PREFIX##set_custom_attr_int(HANDLE_TYPE* h, const char* name, int64_t value); \
1919 \
1920 FDL_API int PREFIX##set_custom_attr_float(HANDLE_TYPE* h, const char* name, double value); \
1921 \
1922 FDL_API int PREFIX##set_custom_attr_bool(HANDLE_TYPE* h, const char* name, int value); \
1923 \
1924 FDL_API const char* PREFIX##get_custom_attr_string(const HANDLE_TYPE* h, const char* name); \
1925 \
1926 FDL_API int PREFIX##get_custom_attr_int(const HANDLE_TYPE* h, const char* name, int64_t* out); \
1927 \
1928 FDL_API int PREFIX##get_custom_attr_float(const HANDLE_TYPE* h, const char* name, double* out); \
1929 \
1930 FDL_API int PREFIX##get_custom_attr_bool(const HANDLE_TYPE* h, const char* name, int* out); \
1931 \
1932 FDL_API int PREFIX##has_custom_attr(const HANDLE_TYPE* h, const char* name); \
1933 \
1934 FDL_API fdl_custom_attr_type_t PREFIX##get_custom_attr_type(const HANDLE_TYPE* h, const char* name); \
1935 \
1936 FDL_API int PREFIX##remove_custom_attr(HANDLE_TYPE* h, const char* name); \
1937 \
1938 FDL_API uint32_t PREFIX##custom_attrs_count(const HANDLE_TYPE* h); \
1939 \
1940 FDL_API const char* PREFIX##custom_attr_name_at(const HANDLE_TYPE* h, uint32_t index); \
1941 \
1942 FDL_API int PREFIX##set_custom_attr_point_f64(HANDLE_TYPE* h, const char* name, fdl_point_f64_t value); \
1943 \
1944 FDL_API int PREFIX##get_custom_attr_point_f64(const HANDLE_TYPE* h, const char* name, fdl_point_f64_t* out); \
1945 \
1946 FDL_API int PREFIX##set_custom_attr_dims_f64(HANDLE_TYPE* h, const char* name, fdl_dimensions_f64_t value); \
1947 \
1948 FDL_API int PREFIX##get_custom_attr_dims_f64(const HANDLE_TYPE* h, const char* name, fdl_dimensions_f64_t* out); \
1949 \
1950 FDL_API int PREFIX##set_custom_attr_dims_i64(HANDLE_TYPE* h, const char* name, fdl_dimensions_i64_t value); \
1951 \
1952 FDL_API int PREFIX##get_custom_attr_dims_i64(const HANDLE_TYPE* h, const char* name, fdl_dimensions_i64_t* out);
1953
1957FDL_CUSTOM_ATTR_DECL(fdl_framing_decision_, fdl_framing_decision_t)
1958FDL_CUSTOM_ATTR_DECL(fdl_framing_intent_, fdl_framing_intent_t)
1959FDL_CUSTOM_ATTR_DECL(fdl_canvas_template_, fdl_canvas_template_t)
1961FDL_CUSTOM_ATTR_DECL(fdl_file_sequence_, fdl_file_sequence_t)
1962
1963#undef FDL_CUSTOM_ATTR_DECL
1964
1965#ifdef __cplusplus
1966}
1967#endif
1968
1969#endif /* FDL_CORE_H */
int fdl_dimensions_f64_lt(fdl_dimensions_f64_t a, fdl_dimensions_f64_t b)
Check if a < b using OR logic (either width or height is less).
Definition fdl_value_types.cpp:75
fdl_point_f64_t fdl_point_mul_scalar(fdl_point_f64_t a, double scalar)
Multiply point by scalar.
Definition fdl_value_types.cpp:127
fdl_from_intent_result_t fdl_compute_framing_from_intent(fdl_dimensions_f64_t canvas_dims, fdl_dimensions_f64_t working_dims, double squeeze, fdl_dimensions_i64_t aspect_ratio, double protection, fdl_round_strategy_t rounding)
Compute a framing decision from a framing intent.
Definition fdl_framing_api.cpp:39
void fdl_context_remove_clip_id(fdl_context_t *ctx)
Remove clip_id from a context.
Definition fdl_builder_api.cpp:576
fdl_resolve_canvas_result_t fdl_context_resolve_canvas_for_dimensions(fdl_context_t *ctx, fdl_dimensions_f64_t input_dims, fdl_canvas_t *canvas, fdl_framing_decision_t *framing)
Resolve canvas for given input dimensions.
Definition fdl_collections_api.cpp:286
const char * fdl_file_sequence_get_value(const fdl_file_sequence_t *seq)
Get the sequence pattern value string.
Definition fdl_accessors_api.cpp:470
char * fdl_clip_id_to_json(const fdl_clip_id_t *cid, int indent)
Serialize a clip_id to canonical JSON.
Definition fdl_accessors_api.cpp:458
fdl_dimensions_f64_t fdl_round_dimensions(fdl_dimensions_f64_t dims, fdl_rounding_even_t even, fdl_rounding_mode_t mode)
Round dimensions according to FDL rounding rules.
Definition fdl_rounding.cpp:53
const char * fdl_framing_intent_get_id(const fdl_framing_intent_t *fi)
Get the ID of a framing intent.
Definition fdl_accessors_api.cpp:634
void fdl_canvas_set_photosite_dimensions(fdl_canvas_t *canvas, fdl_dimensions_i64_t dims)
Set photosite dimensions on a canvas.
Definition fdl_builder_api.cpp:187
void fdl_framing_intent_set_protection(fdl_framing_intent_t *fi, double protection)
Set protection factor on a framing intent.
Definition fdl_builder_api.cpp:369
fdl_clip_id_t * fdl_context_clip_id(fdl_context_t *ctx)
Get the clip_id handle from a context.
Definition fdl_accessors_api.cpp:364
fdl_validation_result_t * fdl_doc_validate(const fdl_doc_t *doc)
Run schema and semantic validators on the document.
Definition fdl_validate_api.cpp:20
int fdl_canvas_has_effective_dimensions(const fdl_canvas_t *canvas)
Check if the canvas has effective dimensions set.
Definition fdl_accessors_api.cpp:237
fdl_point_f64_t fdl_point_clamp(fdl_point_f64_t point, double min_val, double max_val, int has_min, int has_max)
Clamp point values to [min_val, max_val].
Definition fdl_value_types.cpp:131
void fdl_framing_decision_set_protection(fdl_framing_decision_t *fd, fdl_dimensions_f64_t dims, fdl_point_f64_t anchor)
Set protection dimensions and anchor on a framing decision.
Definition fdl_builder_api.cpp:253
fdl_canvas_template_t * fdl_doc_canvas_template_find_by_id(fdl_doc_t *doc, const char *id)
Find a canvas template by its ID string.
Definition fdl_collections_api.cpp:153
fdl_dimensions_f64_t fdl_dimensions_clamp_to_dims(fdl_dimensions_f64_t dims, fdl_dimensions_f64_t clamp_dims, fdl_point_f64_t *out_delta)
Clamp dimensions to maximum bounds.
Definition fdl_pipeline_api.cpp:34
void fdl_doc_set_version(fdl_doc_t *doc, int major, int minor)
Set the FDL version on a document.
Definition fdl_builder_api.cpp:51
fdl_dimensions_f64_t fdl_dimensions_i64_normalize(fdl_dimensions_i64_t dims, double squeeze)
Normalize int64 dimensions by applying anamorphic squeeze to width.
Definition fdl_value_types.cpp:91
double fdl_output_size_for_axis(double canvas_size, double max_size, int has_max, int pad_to_max)
Determine output canvas size for a single axis.
Definition fdl_pipeline_api.cpp:17
const char * fdl_context_get_context_creator(const fdl_context_t *ctx)
Get the context_creator of a context.
Definition fdl_accessors_api.cpp:173
int fdl_point_f64_lt(fdl_point_f64_t a, fdl_point_f64_t b)
Check if a < b using OR logic (either x or y is less).
Definition fdl_value_types.cpp:159
int fdl_dimensions_i64_is_zero(fdl_dimensions_i64_t dims)
Check if both width and height are zero (int64 variant).
Definition fdl_value_types.cpp:87
int64_t fdl_round(double value, fdl_rounding_even_t even, fdl_rounding_mode_t mode)
Round a single value according to FDL rounding rules.
Definition fdl_rounding.cpp:18
void fdl_framing_decision_adjust_protection_anchor(fdl_framing_decision_t *fd, const fdl_canvas_t *canvas, fdl_halign_t h_align, fdl_valign_t v_align)
Adjust protection_anchor_point on a framing decision based on alignment within canvas.
Definition fdl_framing_api.cpp:74
void fdl_doc_set_default_framing_intent(fdl_doc_t *doc, const char *fi_id)
Set the default_framing_intent on a document.
Definition fdl_builder_api.cpp:41
fdl_framing_intent_t * fdl_doc_framing_intent_at(fdl_doc_t *doc, uint32_t index)
Get a framing intent by index.
Definition fdl_collections_api.cpp:88
void fdl_free(void *ptr)
Free memory allocated by fdl_core functions.
Definition fdl_value_types.cpp:171
double fdl_canvas_get_anamorphic_squeeze(const fdl_canvas_t *canvas)
Get the anamorphic squeeze factor.
Definition fdl_accessors_api.cpp:273
fdl_canvas_t * fdl_context_find_canvas_by_id(fdl_context_t *ctx, const char *id)
Find a canvas by its ID within a context.
Definition fdl_collections_api.cpp:196
fdl_point_f64_t fdl_framing_decision_get_anchor_point(const fdl_framing_decision_t *fd)
Get the anchor point of a framing decision.
Definition fdl_accessors_api.cpp:570
fdl_round_strategy_t fdl_canvas_template_get_round(const fdl_canvas_template_t *ct)
Get the rounding strategy.
Definition fdl_accessors_api.cpp:830
void fdl_framing_decision_set_dimensions(fdl_framing_decision_t *fd, fdl_dimensions_f64_t dims)
Set dimensions on a framing decision.
Definition fdl_builder_api.cpp:451
void fdl_canvas_template_set_maximum_dimensions(fdl_canvas_template_t *ct, fdl_dimensions_i64_t dims)
Set maximum_dimensions on a canvas template.
Definition fdl_builder_api.cpp:323
int fdl_context_has_clip_id(const fdl_context_t *ctx)
Check if a context has a clip_id.
Definition fdl_accessors_api.cpp:333
const char * fdl_canvas_get_label(const fdl_canvas_t *canvas)
Get the label of a canvas.
Definition fdl_accessors_api.cpp:189
int fdl_canvas_get_effective_rect(const fdl_canvas_t *canvas, fdl_rect_t *out_rect)
Get the effective (active image) rect of a canvas.
Definition fdl_geometry_api.cpp:101
double fdl_fp_rel_tol(void)
Relative tolerance for floating-point comparison.
Definition fdl_value_types.cpp:38
uint32_t fdl_custom_attr_type_t
Type identifier for custom attributes.
Definition fdl_core.h:40
void fdl_doc_set_uuid(fdl_doc_t *doc, const char *uuid)
Set the UUID on a document.
Definition fdl_builder_api.cpp:25
void fdl_framing_decision_set_anchor_point(fdl_framing_decision_t *fd, fdl_point_f64_t point)
Set anchor point on a framing decision.
Definition fdl_builder_api.cpp:465
fdl_canvas_t * fdl_context_canvas_at(fdl_context_t *ctx, uint32_t index)
Get a canvas by index within a context.
Definition fdl_collections_api.cpp:174
const char * fdl_doc_get_default_framing_intent(const fdl_doc_t *doc)
Get the default_framing_intent from a parsed FDL document.
Definition fdl_doc_api.cpp:124
fdl_context_t * fdl_doc_context_at(fdl_doc_t *doc, uint32_t index)
Get a context by index.
Definition fdl_collections_api.cpp:117
fdl_valign_t fdl_canvas_template_get_alignment_method_vertical(const fdl_canvas_template_t *ct)
Get the vertical alignment method.
Definition fdl_accessors_api.cpp:758
void fdl_template_result_free(fdl_template_result_t *result)
Free a template result (doc + all allocated strings).
Definition fdl_template_api.cpp:47
fdl_framing_intent_t * fdl_doc_add_framing_intent(fdl_doc_t *doc, const char *id, const char *label, int64_t aspect_w, int64_t aspect_h, double protection)
Add a framing intent to the document.
Definition fdl_builder_api.cpp:87
fdl_abi_version_t fdl_abi_version(void)
Return the ABI version of the loaded library.
Definition fdl_abi.cpp:9
int fdl_point_is_zero(fdl_point_f64_t point)
Check if both x and y are zero.
Definition fdl_value_types.cpp:145
fdl_dimensions_f64_t fdl_framing_decision_get_protection_dimensions(const fdl_framing_decision_t *fd)
Get the protection area dimensions.
Definition fdl_accessors_api.cpp:594
const char * fdl_canvas_get_id(const fdl_canvas_t *canvas)
Get the ID of a canvas.
Definition fdl_accessors_api.cpp:201
int fdl_framing_decision_has_protection(const fdl_framing_decision_t *fd)
Check if a framing decision has protection area set.
Definition fdl_accessors_api.cpp:582
const char * fdl_context_set_clip_id_json(fdl_context_t *ctx, const char *json_str, size_t json_len)
Set clip_id on a context from a JSON string.
Definition fdl_builder_api.cpp:549
int fdl_clip_id_has_sequence(const fdl_clip_id_t *cid)
Check if a clip_id has a file sequence.
Definition fdl_accessors_api.cpp:423
uint64_t fdl_rounding_mode_t
Rounding mode — direction to round fractional pixel values.
Definition fdl_core.h:133
const char * fdl_framing_decision_get_framing_intent_id(const fdl_framing_decision_t *fd)
Get the framing_intent_id that this framing decision references.
Definition fdl_accessors_api.cpp:546
fdl_framing_decision_t * fdl_canvas_add_framing_decision(fdl_canvas_t *canvas, const char *id, const char *label, const char *framing_intent_id, double dim_w, double dim_h, double anchor_x, double anchor_y)
Add a framing decision to a canvas.
Definition fdl_builder_api.cpp:215
fdl_geometry_path_t fdl_canvas_template_get_preserve_from_source_canvas(const fdl_canvas_template_t *ct)
Get the preserve_from_source_canvas geometry path.
Definition fdl_accessors_api.cpp:782
fdl_dimensions_f64_t fdl_framing_decision_get_dimensions(const fdl_framing_decision_t *fd)
Get the framing decision dimensions (floating-point sub-pixel).
Definition fdl_accessors_api.cpp:558
char * fdl_doc_to_json(const fdl_doc_t *doc, int indent)
Serialize document to canonical JSON string.
Definition fdl_doc_api.cpp:132
double fdl_calculate_scale_factor(fdl_dimensions_f64_t fit_norm, fdl_dimensions_f64_t target_norm, fdl_fit_method_t fit_method)
Calculate scale factor based on fit method.
Definition fdl_pipeline_api.cpp:12
fdl_canvas_template_t * fdl_doc_add_canvas_template(fdl_doc_t *doc, const char *id, const char *label, int64_t target_w, int64_t target_h, double target_squeeze, fdl_geometry_path_t fit_source, fdl_fit_method_t fit_method, fdl_halign_t halign, fdl_valign_t valign, fdl_round_strategy_t rounding)
Add a canvas template to the document.
Definition fdl_builder_api.cpp:273
uint32_t fdl_fit_method_t
Fit method — how source content is scaled into the target canvas.
Definition fdl_core.h:151
int fdl_dimensions_equal(fdl_dimensions_f64_t a, fdl_dimensions_f64_t b)
Check if dimensions are approximately equal within FDL tolerance.
Definition fdl_value_types.cpp:67
const char * fdl_canvas_get_source_canvas_id(const fdl_canvas_t *canvas)
Get the source_canvas_id of a canvas (the canvas this was derived from).
Definition fdl_accessors_api.cpp:213
char * fdl_context_to_json(const fdl_context_t *ctx, int indent)
Serialize a context sub-object to canonical JSON.
Definition fdl_accessors_api.cpp:891
void fdl_canvas_set_anamorphic_squeeze(fdl_canvas_t *canvas, double squeeze)
Set anamorphic squeeze on a canvas.
Definition fdl_builder_api.cpp:401
int fdl_canvas_has_physical_dimensions(const fdl_canvas_t *canvas)
Check if the canvas has physical dimensions set.
Definition fdl_accessors_api.cpp:309
fdl_dimensions_i64_t fdl_framing_intent_get_aspect_ratio(const fdl_framing_intent_t *fi)
Get the target aspect ratio of a framing intent.
Definition fdl_accessors_api.cpp:646
int fdl_dimensions_i64_gt(fdl_dimensions_i64_t a, fdl_dimensions_i64_t b)
Check if a > b using OR logic (either width or height is greater).
Definition fdl_value_types.cpp:99
fdl_point_f64_t fdl_point_normalize_and_scale(fdl_point_f64_t point, double input_squeeze, double scale_factor, double target_squeeze)
Normalize and scale a point in one step.
Definition fdl_value_types.cpp:149
void fdl_framing_decision_populate_from_intent(fdl_framing_decision_t *fd, const fdl_canvas_t *canvas, const fdl_framing_intent_t *intent, fdl_round_strategy_t rounding)
Populate a framing decision from a canvas and framing intent.
Definition fdl_framing_api.cpp:98
int64_t fdl_file_sequence_get_min(const fdl_file_sequence_t *seq)
Get the minimum (first) frame number.
Definition fdl_accessors_api.cpp:494
void fdl_framing_decision_set_protection_dimensions(fdl_framing_decision_t *fd, fdl_dimensions_f64_t dims)
Set protection dimensions on a framing decision (without changing anchor).
Definition fdl_builder_api.cpp:479
void fdl_framing_decision_set_protection_anchor_point(fdl_framing_decision_t *fd, fdl_point_f64_t point)
Set protection anchor point on a framing decision (without changing dimensions).
Definition fdl_builder_api.cpp:493
uint32_t fdl_doc_contexts_count(fdl_doc_t *doc)
Get the number of contexts in the document.
Definition fdl_collections_api.cpp:109
int fdl_canvas_has_photosite_dimensions(const fdl_canvas_t *canvas)
Check if the canvas has photosite dimensions set.
Definition fdl_accessors_api.cpp:285
uint32_t fdl_validation_result_error_count(const fdl_validation_result_t *result)
Get the number of validation errors.
Definition fdl_validate_api.cpp:31
fdl_doc_t * fdl_doc_create(void)
Create an empty FDL document.
Definition fdl_doc_api.cpp:81
const char * fdl_clip_id_get_clip_name(const fdl_clip_id_t *cid)
Get the clip_name from a clip_id.
Definition fdl_accessors_api.cpp:387
void fdl_canvas_set_physical_dimensions(fdl_canvas_t *canvas, fdl_dimensions_f64_t dims)
Set physical dimensions on a canvas.
Definition fdl_builder_api.cpp:201
fdl_framing_intent_t * fdl_doc_framing_intent_find_by_id(fdl_doc_t *doc, const char *id)
Find a framing intent by its ID string.
Definition fdl_collections_api.cpp:96
fdl_canvas_template_t * fdl_doc_canvas_template_at(fdl_doc_t *doc, uint32_t index)
Get a canvas template by index.
Definition fdl_collections_api.cpp:145
fdl_point_f64_t fdl_round_point(fdl_point_f64_t point, fdl_rounding_even_t even, fdl_rounding_mode_t mode)
Round a point according to FDL rounding rules.
Definition fdl_rounding.cpp:60
fdl_dimensions_i64_t fdl_canvas_template_get_maximum_dimensions(const fdl_canvas_template_t *ct)
Get the maximum_dimensions constraint.
Definition fdl_accessors_api.cpp:806
void fdl_framing_intent_set_aspect_ratio(fdl_framing_intent_t *fi, fdl_dimensions_i64_t dims)
Set aspect ratio on a framing intent.
Definition fdl_builder_api.cpp:355
uint32_t fdl_context_canvases_count(const fdl_context_t *ctx)
Get the number of canvases in a context.
Definition fdl_collections_api.cpp:166
fdl_parse_result_t fdl_doc_parse_json(const char *json_str, size_t json_len)
Parse a JSON string into an FDL document.
Definition fdl_doc_api.cpp:89
const char * fdl_validation_result_error_at(const fdl_validation_result_t *result, uint32_t index)
Get a specific error message by index.
Definition fdl_validate_api.cpp:38
double fdl_fp_abs_tol(void)
Absolute tolerance for floating-point comparison.
Definition fdl_value_types.cpp:41
const char * fdl_context_get_label(const fdl_context_t *ctx)
Get the label of a context.
Definition fdl_accessors_api.cpp:161
fdl_dimensions_f64_t fdl_dimensions_normalize(fdl_dimensions_f64_t dims, double squeeze)
Normalize dimensions by applying anamorphic squeeze to width.
Definition fdl_value_types.cpp:49
void fdl_validation_result_free(fdl_validation_result_t *result)
Free a validation result.
Definition fdl_validate_api.cpp:45
fdl_doc_t * fdl_doc_create_with_header(const char *uuid, int version_major, int version_minor, const char *fdl_creator, const char *default_framing_intent)
Create a new FDL document with header fields and empty collections.
Definition fdl_builder_api.cpp:63
const char * fdl_clip_id_validate_json(const char *json_str, size_t json_len)
Validate clip_id JSON for mutual exclusion (file vs sequence).
Definition fdl_builder_api.cpp:526
uint64_t fdl_rounding_even_t
Rounding even — whether to snap results to even numbers.
Definition fdl_core.h:139
fdl_geometry_t fdl_geometry_crop(fdl_geometry_t geo, fdl_point_f64_t theo_eff, fdl_point_f64_t theo_prot, fdl_point_f64_t theo_fram)
Crop all dimensions to visible portion within canvas.
Definition fdl_geometry_api.cpp:35
void fdl_framing_decision_remove_protection(fdl_framing_decision_t *fd)
Remove protection dimensions and anchor from a framing decision.
Definition fdl_builder_api.cpp:507
fdl_geometry_t fdl_geometry_apply_offset(fdl_geometry_t geo, fdl_point_f64_t offset, fdl_point_f64_t *theo_eff, fdl_point_f64_t *theo_prot, fdl_point_f64_t *theo_fram)
Apply offset to all anchors, clamping to canvas bounds.
Definition fdl_geometry_api.cpp:26
const char * fdl_doc_get_fdl_creator(const fdl_doc_t *doc)
Get the fdl_creator from a parsed FDL document.
Definition fdl_doc_api.cpp:116
char * fdl_framing_intent_to_json(const fdl_framing_intent_t *fi, int indent)
Serialize a framing intent to canonical JSON.
Definition fdl_accessors_api.cpp:927
fdl_dimensions_i64_t fdl_canvas_get_dimensions(const fdl_canvas_t *canvas)
Get the canvas dimensions in pixels.
Definition fdl_accessors_api.cpp:225
#define FDL_CUSTOM_ATTR_DECL(PREFIX, HANDLE_TYPE)
Macro to declare all 19 custom attribute functions for a handle type.
Definition fdl_core.h:1914
const char * fdl_clip_id_get_file(const fdl_clip_id_t *cid)
Get the file path from a clip_id.
Definition fdl_accessors_api.cpp:411
int fdl_doc_get_version_minor(const fdl_doc_t *doc)
Get the FDL version minor number.
Definition fdl_accessors_api.cpp:871
void fdl_doc_set_fdl_creator(fdl_doc_t *doc, const char *creator)
Set the fdl_creator on a document.
Definition fdl_builder_api.cpp:33
const char * fdl_framing_decision_get_id(const fdl_framing_decision_t *fd)
Get the ID of a framing decision.
Definition fdl_accessors_api.cpp:534
fdl_geometry_t fdl_geometry_normalize_and_scale(fdl_geometry_t geo, double source_squeeze, double scale_factor, double target_squeeze)
Normalize and scale all 7 fields of the geometry.
Definition fdl_geometry_api.cpp:17
uint32_t fdl_canvas_framing_decisions_count(const fdl_canvas_t *canvas)
Get the number of framing decisions in a canvas.
Definition fdl_collections_api.cpp:223
fdl_point_f64_t fdl_point_normalize(fdl_point_f64_t point, double squeeze)
Normalize a point by applying anamorphic squeeze to x.
Definition fdl_value_types.cpp:111
uint32_t fdl_geometry_path_t
Geometry path — selects a dimension layer within the FDL hierarchy.
Definition fdl_core.h:144
uint32_t fdl_valign_t
Vertical alignment — how content is positioned vertically.
Definition fdl_core.h:164
double fdl_canvas_template_get_target_anamorphic_squeeze(const fdl_canvas_template_t *ct)
Get the target anamorphic squeeze factor.
Definition fdl_accessors_api.cpp:710
fdl_framing_decision_t * fdl_canvas_find_framing_decision_by_id(fdl_canvas_t *canvas, const char *id)
Find a framing decision by its ID within a canvas.
Definition fdl_collections_api.cpp:256
fdl_geometry_t fdl_geometry_fill_hierarchy_gaps(fdl_geometry_t geo, fdl_point_f64_t anchor_offset)
Fill gaps in the geometry hierarchy by propagating populated dimensions upward.
Definition fdl_geometry_api.cpp:13
int fdl_point_equal(fdl_point_f64_t a, fdl_point_f64_t b)
Check approximate equality within FDL tolerances.
Definition fdl_value_types.cpp:155
fdl_point_f64_t fdl_canvas_get_effective_anchor_point(const fdl_canvas_t *canvas)
Get the effective anchor point (offset from canvas origin).
Definition fdl_accessors_api.cpp:261
fdl_halign_t fdl_canvas_template_get_alignment_method_horizontal(const fdl_canvas_template_t *ct)
Get the horizontal alignment method.
Definition fdl_accessors_api.cpp:746
int fdl_framing_decision_get_protection_rect(const fdl_framing_decision_t *fd, fdl_rect_t *out_rect)
Get the framing decision protection rect.
Definition fdl_geometry_api.cpp:117
fdl_point_f64_t fdl_framing_decision_get_protection_anchor_point(const fdl_framing_decision_t *fd)
Get the protection anchor point.
Definition fdl_accessors_api.cpp:606
int fdl_dimensions_is_zero(fdl_dimensions_f64_t dims)
Check if both width and height are zero.
Definition fdl_value_types.cpp:79
fdl_dimensions_f64_t fdl_dimensions_sub(fdl_dimensions_f64_t a, fdl_dimensions_f64_t b)
Subtract two dimensions: result = a - b.
Definition fdl_value_types.cpp:63
int fdl_doc_get_version_major(const fdl_doc_t *doc)
Get the FDL version major number.
Definition fdl_accessors_api.cpp:855
int fdl_point_f64_gt(fdl_point_f64_t a, fdl_point_f64_t b)
Check if a > b using OR logic (either x or y is greater).
Definition fdl_value_types.cpp:163
void fdl_doc_free(fdl_doc_t *doc)
Free an FDL document and all associated handles.
Definition fdl_doc_api.cpp:85
const char * fdl_canvas_template_get_label(const fdl_canvas_template_t *ct)
Get the label of a canvas template.
Definition fdl_accessors_api.cpp:674
uint32_t fdl_doc_framing_intents_count(fdl_doc_t *doc)
Get the number of framing intents in the document.
Definition fdl_collections_api.cpp:80
void fdl_canvas_remove_effective(fdl_canvas_t *canvas)
Remove effective dimensions and anchor from a canvas.
Definition fdl_builder_api.cpp:432
fdl_file_sequence_t * fdl_clip_id_sequence(fdl_clip_id_t *cid)
Get the file sequence handle from a clip_id.
Definition fdl_accessors_api.cpp:435
fdl_rect_t fdl_canvas_get_rect(const fdl_canvas_t *canvas)
Get the full canvas rect: (0, 0, dims.width, dims.height).
Definition fdl_geometry_api.cpp:96
void fdl_canvas_set_dimensions(fdl_canvas_t *canvas, fdl_dimensions_i64_t dims)
Set dimensions on a canvas.
Definition fdl_builder_api.cpp:387
fdl_framing_decision_t * fdl_canvas_framing_decision_at(fdl_canvas_t *canvas, uint32_t index)
Get a framing decision by index within a canvas.
Definition fdl_collections_api.cpp:231
void fdl_canvas_set_effective_dimensions(fdl_canvas_t *canvas, fdl_dimensions_i64_t dims, fdl_point_f64_t anchor)
Set effective dimensions and anchor on a canvas.
Definition fdl_builder_api.cpp:172
double fdl_framing_intent_get_protection(const fdl_framing_intent_t *fi)
Get the protection factor of a framing intent.
Definition fdl_accessors_api.cpp:658
void fdl_canvas_set_effective_dims_only(fdl_canvas_t *canvas, fdl_dimensions_i64_t dims)
Set effective dimensions on a canvas.
Definition fdl_builder_api.cpp:415
fdl_dimensions_f64_t fdl_canvas_get_physical_dimensions(const fdl_canvas_t *canvas)
Get physical dimensions (e.g.
Definition fdl_accessors_api.cpp:321
int fdl_canvas_template_get_pad_to_maximum(const fdl_canvas_template_t *ct)
Get the pad_to_maximum flag.
Definition fdl_accessors_api.cpp:818
fdl_point_f64_t fdl_point_scale(fdl_point_f64_t point, double scale_factor, double target_squeeze)
Scale a normalized point and apply target squeeze.
Definition fdl_value_types.cpp:115
int fdl_resolve_geometry_layer(const fdl_canvas_t *canvas, const fdl_framing_decision_t *framing, fdl_geometry_path_t path, fdl_dimensions_f64_t *out_dims, fdl_point_f64_t *out_anchor)
Resolve dimensions and anchor directly from canvas/framing handles for a path.
Definition fdl_geometry_api.cpp:45
fdl_rect_t fdl_make_rect(double x, double y, double width, double height)
Construct a rect from raw coordinates.
Definition fdl_geometry_api.cpp:92
char * fdl_canvas_to_json(const fdl_canvas_t *canvas, int indent)
Serialize a canvas sub-object to canonical JSON.
Definition fdl_accessors_api.cpp:903
char * fdl_canvas_template_to_json(const fdl_canvas_template_t *ct, int indent)
Serialize a canvas template to canonical JSON.
Definition fdl_accessors_api.cpp:939
void fdl_canvas_template_set_preserve_from_source_canvas(fdl_canvas_template_t *ct, fdl_geometry_path_t path)
Set preserve_from_source_canvas on a canvas template.
Definition fdl_builder_api.cpp:309
fdl_context_t * fdl_doc_context_find_by_label(fdl_doc_t *doc, const char *label)
Find a context by its label string.
Definition fdl_collections_api.cpp:125
uint32_t fdl_doc_canvas_templates_count(fdl_doc_t *doc)
Get the number of canvas templates in the document.
Definition fdl_collections_api.cpp:137
void fdl_framing_decision_adjust_anchor(fdl_framing_decision_t *fd, const fdl_canvas_t *canvas, fdl_halign_t h_align, fdl_valign_t v_align)
Adjust anchor_point on a framing decision based on alignment within canvas.
Definition fdl_framing_api.cpp:50
const char * fdl_framing_decision_get_label(const fdl_framing_decision_t *fd)
Get the label of a framing decision.
Definition fdl_accessors_api.cpp:522
char * fdl_framing_decision_to_json(const fdl_framing_decision_t *fd, int indent)
Serialize a framing decision to canonical JSON.
Definition fdl_accessors_api.cpp:915
int fdl_clip_id_has_file(const fdl_clip_id_t *cid)
Check if a clip_id has a file path.
Definition fdl_accessors_api.cpp:399
int fdl_canvas_template_has_maximum_dimensions(const fdl_canvas_template_t *ct)
Check if maximum_dimensions constraint is set.
Definition fdl_accessors_api.cpp:794
fdl_rect_t fdl_framing_decision_get_rect(const fdl_framing_decision_t *fd)
Get the framing decision rect: (anchor.x, anchor.y, dims.width, dims.height).
Definition fdl_geometry_api.cpp:111
fdl_geometry_t fdl_geometry_round(fdl_geometry_t geo, fdl_round_strategy_t strategy)
Round all 7 fields of the geometry.
Definition fdl_geometry_api.cpp:22
int fdl_dimensions_i64_lt(fdl_dimensions_i64_t a, fdl_dimensions_i64_t b)
Check if a < b using OR logic (either width or height is less).
Definition fdl_value_types.cpp:103
int fdl_dimensions_f64_gt(fdl_dimensions_f64_t a, fdl_dimensions_f64_t b)
Check if a > b using OR logic (either width or height is greater).
Definition fdl_value_types.cpp:71
fdl_canvas_t * fdl_context_add_canvas(fdl_context_t *ctx, const char *id, const char *label, const char *source_canvas_id, int64_t dim_w, int64_t dim_h, double squeeze)
Add a canvas to a context.
Definition fdl_builder_api.cpp:136
uint32_t fdl_halign_t
Horizontal alignment — how content is positioned horizontally.
Definition fdl_core.h:158
const char * fdl_framing_intent_get_label(const fdl_framing_intent_t *fi)
Get the label of a framing intent.
Definition fdl_accessors_api.cpp:622
fdl_dimensions_i64_t fdl_canvas_template_get_target_dimensions(const fdl_canvas_template_t *ct)
Get the target dimensions of a canvas template.
Definition fdl_accessors_api.cpp:698
fdl_dimensions_i64_t fdl_dimensions_f64_to_i64(fdl_dimensions_f64_t dims)
Convert float dimensions to int64 by truncation.
Definition fdl_value_types.cpp:95
int fdl_canvas_template_has_preserve_from_source_canvas(const fdl_canvas_template_t *ct)
Check if preserve_from_source_canvas is set.
Definition fdl_accessors_api.cpp:770
double fdl_alignment_shift(double fit_size, double fit_anchor, double output_size, double canvas_size, double target_size, int is_center, double align_factor, int pad_to_max)
Calculate content translation shift for a single axis.
Definition fdl_pipeline_api.cpp:21
int fdl_geometry_get_dims_anchor_from_path(const fdl_geometry_t *geo, fdl_geometry_path_t path, fdl_dimensions_f64_t *out_dims, fdl_point_f64_t *out_anchor)
Extract dimensions and anchor from geometry by path.
Definition fdl_geometry_api.cpp:40
const char * fdl_canvas_template_get_id(const fdl_canvas_template_t *ct)
Get the ID of a canvas template.
Definition fdl_accessors_api.cpp:686
const char * fdl_file_sequence_get_idx(const fdl_file_sequence_t *seq)
Get the index variable name.
Definition fdl_accessors_api.cpp:482
fdl_point_f64_t fdl_point_add(fdl_point_f64_t a, fdl_point_f64_t b)
Add two points: result = a + b.
Definition fdl_value_types.cpp:119
const char * fdl_context_get_clip_id(const fdl_context_t *ctx)
Get clip_id as a JSON string.
Definition fdl_accessors_api.cpp:345
const char * fdl_doc_get_uuid(const fdl_doc_t *doc)
Get the UUID from a parsed FDL document.
Definition fdl_doc_api.cpp:108
fdl_point_f64_t fdl_point_sub(fdl_point_f64_t a, fdl_point_f64_t b)
Subtract two points: result = a - b.
Definition fdl_value_types.cpp:123
void fdl_canvas_template_set_pad_to_maximum(fdl_canvas_template_t *ct, int pad)
Set pad_to_maximum flag on a canvas template.
Definition fdl_builder_api.cpp:337
fdl_geometry_path_t fdl_canvas_template_get_fit_source(const fdl_canvas_template_t *ct)
Get the fit source — which dimension layer to scale from.
Definition fdl_accessors_api.cpp:722
int64_t fdl_file_sequence_get_max(const fdl_file_sequence_t *seq)
Get the maximum (last) frame number.
Definition fdl_accessors_api.cpp:506
fdl_template_result_t fdl_apply_canvas_template(const fdl_canvas_template_t *tmpl, const fdl_canvas_t *source_canvas, const fdl_framing_decision_t *source_framing, const char *new_canvas_id, const char *new_fd_name, const char *source_context_label, const char *context_creator)
Apply a canvas template to a source canvas/framing.
Definition fdl_template_api.cpp:35
fdl_fit_method_t fdl_canvas_template_get_fit_method(const fdl_canvas_template_t *ct)
Get the fit method — how source is scaled into target.
Definition fdl_accessors_api.cpp:734
fdl_dimensions_i64_t fdl_canvas_get_effective_dimensions(const fdl_canvas_t *canvas)
Get effective (active image area) dimensions.
Definition fdl_accessors_api.cpp:249
fdl_dimensions_f64_t fdl_dimensions_scale(fdl_dimensions_f64_t dims, double scale_factor, double target_squeeze)
Scale normalized dimensions and apply target squeeze.
Definition fdl_value_types.cpp:53
fdl_dimensions_i64_t fdl_canvas_get_photosite_dimensions(const fdl_canvas_t *canvas)
Get photosite (sensor) dimensions.
Definition fdl_accessors_api.cpp:297
fdl_dimensions_f64_t fdl_dimensions_normalize_and_scale(fdl_dimensions_f64_t dims, double input_squeeze, double scale_factor, double target_squeeze)
Normalize and scale in one step.
Definition fdl_value_types.cpp:57
fdl_context_t * fdl_doc_add_context(fdl_doc_t *doc, const char *label, const char *context_creator)
Add a context to the document.
Definition fdl_builder_api.cpp:112
double anchor_y
Anchor Y offset.
Definition fdl_validate.cpp:339
double anchor_x
Anchor X offset.
Definition fdl_validate.cpp:338
std::string path
Geometry path that produced this entry.
Definition fdl_validate.cpp:335
double dim_h
Height in pixels.
Definition fdl_validate.cpp:337
double dim_w
Width in pixels.
Definition fdl_validate.cpp:336
ABI version triple for runtime compatibility checks.
Definition fdl_core.h:70
uint64_t patch
Bug-fix releases increment this.
Definition fdl_core.h:73
uint64_t minor
Backwards-compatible additions increment this.
Definition fdl_core.h:72
uint64_t major
Breaking changes increment this.
Definition fdl_core.h:71
Handle to a canvas template (root-level, single index).
Definition fdl_handles.h:44
Handle to a canvas (child of context, two-level index).
Definition fdl_handles.h:52
Handle to a clip ID (child of context, one-level index).
Definition fdl_handles.h:71
Handle to a context (root-level, single index).
Definition fdl_handles.h:36
Floating-point dimensions (used during computation).
Definition fdl_core.h:94
double width
Width (may be fractional during intermediate calculations).
Definition fdl_core.h:95
double height
Height (may be fractional during intermediate calculations).
Definition fdl_core.h:96
Canvas dimensions in integer pixels.
Definition fdl_core.h:88
int64_t height
Height in pixels.
Definition fdl_core.h:90
int64_t width
Width in pixels.
Definition fdl_core.h:89
Opaque handle definition — shared across ABI translation units.
Definition fdl_doc.h:82
Handle to a file sequence (grandchild of context, via clip_id, one-level index).
Definition fdl_handles.h:79
Handle to a framing decision (child of canvas, three-level index).
Definition fdl_handles.h:61
Handle to a framing intent (root-level, single index).
Definition fdl_handles.h:28
Result of computing a framing decision from a framing intent.
Definition fdl_core.h:192
int has_protection
FDL_TRUE if protection was computed, FDL_FALSE otherwise.
Definition fdl_core.h:195
fdl_point_f64_t anchor_point
Computed anchor point.
Definition fdl_core.h:194
fdl_dimensions_f64_t protection_dimensions
Protection dimensions (valid if has_protection).
Definition fdl_core.h:196
fdl_dimensions_f64_t dimensions
Computed framing dimensions.
Definition fdl_core.h:193
fdl_point_f64_t protection_anchor_point
Protection anchor (valid if has_protection).
Definition fdl_core.h:197
Geometry container for FDL template transformation processing.
Definition fdl_core.h:175
fdl_dimensions_f64_t canvas_dims
Full canvas dimensions.
Definition fdl_core.h:176
fdl_point_f64_t framing_anchor
Anchor point for framing decision.
Definition fdl_core.h:182
fdl_dimensions_f64_t framing_dims
Framing decision dimensions.
Definition fdl_core.h:179
fdl_point_f64_t protection_anchor
Anchor point for protection area.
Definition fdl_core.h:181
fdl_dimensions_f64_t protection_dims
Protection area dimensions.
Definition fdl_core.h:178
fdl_dimensions_f64_t effective_dims
Effective (active image) dimensions.
Definition fdl_core.h:177
fdl_point_f64_t effective_anchor
Anchor point for effective area.
Definition fdl_core.h:180
Result of parsing JSON into an FDL document.
Definition fdl_core.h:726
fdl_doc_t * doc
non-NULL on success
Definition fdl_core.h:727
const char * error
non-NULL on failure (free with fdl_free)
Definition fdl_core.h:728
2D point in floating-point coordinates.
Definition fdl_core.h:100
double x
Horizontal position (pixels from left edge).
Definition fdl_core.h:101
double y
Vertical position (pixels from top edge).
Definition fdl_core.h:102
Axis-aligned rectangle (x, y origin + width, height).
Definition fdl_core.h:106
double width
Rectangle width.
Definition fdl_core.h:109
double height
Rectangle height.
Definition fdl_core.h:110
double x
Left edge x-coordinate.
Definition fdl_core.h:107
double y
Top edge y-coordinate.
Definition fdl_core.h:108
Result of resolving a canvas for given input dimensions.
Definition fdl_core.h:1453
const char * error
Error message on failure (caller frees with fdl_free).
Definition fdl_core.h:1457
int was_resolved
FDL_TRUE if a different canvas was found, FDL_FALSE if original matched.
Definition fdl_core.h:1456
fdl_canvas_t * canvas
Resolved canvas (non-owning, do NOT free).
Definition fdl_core.h:1454
fdl_framing_decision_t * framing_decision
Resolved framing decision (non-owning, do NOT free).
Definition fdl_core.h:1455
Rounding strategy combining even-snap and direction mode.
Definition fdl_core.h:186
fdl_rounding_even_t even
Whether to snap to even integers.
Definition fdl_core.h:187
fdl_rounding_mode_t mode
Rounding direction (up, down, nearest).
Definition fdl_core.h:188
Result of applying a canvas template.
Definition fdl_core.h:1406
const char * framing_decision_id
ID of the new framing decision (caller frees with fdl_free)
Definition fdl_core.h:1410
const char * context_label
Label of the new context (caller frees with fdl_free)
Definition fdl_core.h:1408
const char * error
Error message on failure (free with fdl_free)
Definition fdl_core.h:1411
fdl_doc_t * output_fdl
Output FDL (caller owns, free with fdl_doc_free or fdl_template_result_free)
Definition fdl_core.h:1407
const char * canvas_id
ID of the new canvas (caller frees with fdl_free)
Definition fdl_core.h:1409
Concrete type backing the opaque fdl_validation_result_t handle.
Definition fdl_validate_api.cpp:14
fdl::detail::ValidationResult result
Wrapped validation result.
Definition fdl_validate_api.cpp:15