16#include "fdl_export.h"
33#define FDL_DEFAULT_JSON_INDENT 2
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
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"
134#define FDL_ROUNDING_MODE_UP 0
135#define FDL_ROUNDING_MODE_DOWN 1
136#define FDL_ROUNDING_MODE_ROUND 2
140#define FDL_ROUNDING_EVEN_WHOLE 0
141#define FDL_ROUNDING_EVEN_EVEN 1
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
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
159#define FDL_HALIGN_LEFT 0
160#define FDL_HALIGN_CENTER 1
161#define FDL_HALIGN_RIGHT 2
165#define FDL_VALIGN_TOP 0
166#define FDL_VALIGN_CENTER 1
167#define FDL_VALIGN_BOTTOM 2
1434 const char* new_canvas_id,
1435 const char* new_fd_name,
1436 const char* source_context_label,
1437 const char* context_creator);
1497 const char* fdl_creator,
1498 const char* default_framing_intent);
1533 fdl_doc_t* doc,
const char*
id,
const char* label, int64_t aspect_w, int64_t aspect_h,
double protection);
1561 const char* source_canvas_id,
1609 const char* framing_intent_id,
1637 double target_squeeze,
1914#define FDL_CUSTOM_ATTR_DECL(PREFIX, HANDLE_TYPE) \
1916 FDL_API int PREFIX##set_custom_attr_string(HANDLE_TYPE* h, const char* name, const char* value); \
1918 FDL_API int PREFIX##set_custom_attr_int(HANDLE_TYPE* h, const char* name, int64_t value); \
1920 FDL_API int PREFIX##set_custom_attr_float(HANDLE_TYPE* h, const char* name, double value); \
1922 FDL_API int PREFIX##set_custom_attr_bool(HANDLE_TYPE* h, const char* name, int value); \
1924 FDL_API const char* PREFIX##get_custom_attr_string(const HANDLE_TYPE* h, const char* name); \
1926 FDL_API int PREFIX##get_custom_attr_int(const HANDLE_TYPE* h, const char* name, int64_t* out); \
1928 FDL_API int PREFIX##get_custom_attr_float(const HANDLE_TYPE* h, const char* name, double* out); \
1930 FDL_API int PREFIX##get_custom_attr_bool(const HANDLE_TYPE* h, const char* name, int* out); \
1932 FDL_API int PREFIX##has_custom_attr(const HANDLE_TYPE* h, const char* name); \
1934 FDL_API fdl_custom_attr_type_t PREFIX##get_custom_attr_type(const HANDLE_TYPE* h, const char* name); \
1936 FDL_API int PREFIX##remove_custom_attr(HANDLE_TYPE* h, const char* name); \
1938 FDL_API uint32_t PREFIX##custom_attrs_count(const HANDLE_TYPE* h); \
1940 FDL_API const char* PREFIX##custom_attr_name_at(const HANDLE_TYPE* h, uint32_t index); \
1942 FDL_API int PREFIX##set_custom_attr_point_f64(HANDLE_TYPE* h, const char* name, fdl_point_f64_t value); \
1944 FDL_API int PREFIX##get_custom_attr_point_f64(const HANDLE_TYPE* h, const char* name, fdl_point_f64_t* out); \
1946 FDL_API int PREFIX##set_custom_attr_dims_f64(HANDLE_TYPE* h, const char* name, fdl_dimensions_f64_t value); \
1948 FDL_API int PREFIX##get_custom_attr_dims_f64(const HANDLE_TYPE* h, const char* name, fdl_dimensions_f64_t* out); \
1950 FDL_API int PREFIX##set_custom_attr_dims_i64(HANDLE_TYPE* h, const char* name, fdl_dimensions_i64_t value); \
1952 FDL_API int PREFIX##get_custom_attr_dims_i64(const HANDLE_TYPE* h, const char* name, fdl_dimensions_i64_t* out);
1963#undef FDL_CUSTOM_ATTR_DECL
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