lardon3d/include/lardon3d/acquisition_campaign.h

135 lines
4.8 KiB
C

#ifndef LARDON3D_ACQUISITION_CAMPAIGN_H
#define LARDON3D_ACQUISITION_CAMPAIGN_H
#include <stddef.h>
#include <stdint.h>
#include <lardon3d/acquisition_ingest.h>
#include <lardon3d/acquisition_pairing.h>
#ifdef __cplusplus
extern "C" {
#endif
#define LARDON3D_ACQUISITION_CAMPAIGN_MAX_ROOTS 64u
#define LARDON3D_ACQUISITION_CAMPAIGN_MAX_SOURCES 4096u
#define LARDON3D_ACQUISITION_CAMPAIGN_MAX_GROUPS 4096u
#define LARDON3D_ACQUISITION_CAMPAIGN_MAX_PROPOSALS 4096u
#define LARDON3D_ACQUISITION_CAMPAIGN_PATH_CAPACITY LARDON3D_APP_STATE_PATH_CAPACITY
typedef enum {
LARDON3D_ACQUISITION_CAMPAIGN_OK = 0,
LARDON3D_ACQUISITION_CAMPAIGN_INVALID_ARGUMENT,
LARDON3D_ACQUISITION_CAMPAIGN_IO_ERROR,
LARDON3D_ACQUISITION_CAMPAIGN_DUPLICATE,
LARDON3D_ACQUISITION_CAMPAIGN_PATH_TOO_LONG,
LARDON3D_ACQUISITION_CAMPAIGN_LIMIT_EXCEEDED,
LARDON3D_ACQUISITION_CAMPAIGN_CONSTRAINT,
LARDON3D_ACQUISITION_CAMPAIGN_INGEST_ERROR,
LARDON3D_ACQUISITION_CAMPAIGN_INTERNAL_ERROR
} Lardon3DAcquisitionCampaignResult;
typedef struct {
char path[LARDON3D_ACQUISITION_CAMPAIGN_PATH_CAPACITY];
} Lardon3DAcquisitionCampaignRoot;
typedef struct {
char path[LARDON3D_ACQUISITION_CAMPAIGN_PATH_CAPACITY];
Lardon3DAcquisitionSourceKind source_kind;
Lardon3DAcquisitionResult metadata_result;
Lardon3DAcquisitionMetadata metadata;
} Lardon3DAcquisitionCampaignSource;
typedef struct {
size_t discovered_entry_count;
size_t supported_source_count;
size_t unsupported_entry_count;
size_t metadata_ok_count;
size_t metadata_error_count;
} Lardon3DAcquisitionCampaignDiscoverySummary;
typedef struct {
size_t source_count;
Lardon3DAcquisitionCampaignSource sources[LARDON3D_ACQUISITION_CAMPAIGN_MAX_SOURCES];
Lardon3DAcquisitionCampaignDiscoverySummary summary;
} Lardon3DAcquisitionCampaignDiscovery;
typedef struct {
size_t source_count;
size_t source_indices[LARDON3D_ACQUISITION_INGEST_MAX_SOURCES];
} Lardon3DAcquisitionCampaignConfirmation;
typedef enum {
LARDON3D_ACQUISITION_CAMPAIGN_PROPOSAL_CANDIDATE = 1,
LARDON3D_ACQUISITION_CAMPAIGN_PROPOSAL_AMBIGUOUS = 2
} Lardon3DAcquisitionCampaignProposalKind;
typedef struct {
size_t left_source_index;
size_t right_source_index;
Lardon3DAcquisitionCampaignProposalKind kind;
Lardon3DAcquisitionPairResult pair;
} Lardon3DAcquisitionCampaignProposal;
typedef struct {
uint32_t group_id;
Lardon3DAcquisitionGroupBasis basis;
size_t source_count;
size_t source_indices[LARDON3D_ACQUISITION_INGEST_MAX_SOURCES];
} Lardon3DAcquisitionCampaignGroup;
typedef struct {
size_t source_count;
size_t metadata_ok_count;
size_t metadata_error_count;
size_t strong_group_count;
size_t explicit_group_count;
size_t unresolved_source_count;
size_t ambiguous_pair_count;
size_t contradictory_pair_count;
size_t insufficient_pair_count;
size_t candidate_pair_count;
} Lardon3DAcquisitionCampaignPlanSummary;
typedef struct {
size_t group_count;
Lardon3DAcquisitionCampaignGroup groups[LARDON3D_ACQUISITION_CAMPAIGN_MAX_GROUPS];
size_t proposal_count;
Lardon3DAcquisitionCampaignProposal proposals[LARDON3D_ACQUISITION_CAMPAIGN_MAX_PROPOSALS];
Lardon3DAcquisitionCampaignPlanSummary summary;
} Lardon3DAcquisitionCampaignPlan;
/*
* Roots must be absolute and lexically normalized. Only their immediate regular-file
* entries are considered. Symlinks are never followed. Extensions .arw, .jpg and .jpeg
* are supported case-insensitively; all other immediate entries are counted as unsupported.
*/
Lardon3DAcquisitionCampaignResult lardon3d_acquisition_campaign_discover(
const Lardon3DAcquisitionCampaignRoot *roots, size_t root_count,
Lardon3DAcquisitionCampaignDiscovery *discovery);
/*
* Pure planning over caller-supplied normalized source/evidence records.
* The summary counts all evaluated pair evidence. If review proposals exceed
* MAX_PROPOSALS, the plan retains their deterministic source-pair-order prefix;
* proposal capacity never changes grouping or the scientific evidence rules.
*/
Lardon3DAcquisitionCampaignResult lardon3d_acquisition_campaign_plan(
const Lardon3DAcquisitionCampaignSource *sources, size_t source_count,
const Lardon3DAcquisitionCampaignConfirmation *confirmations, size_t confirmation_count,
Lardon3DAcquisitionCampaignPlan *plan);
/* Materializes exactly one stable plan group. Retain capture_id before retrying with it. */
Lardon3DAcquisitionCampaignResult lardon3d_acquisition_campaign_materialize_group(
Lardon3DAppState *state, uint64_t scanset_id,
const Lardon3DAcquisitionCampaignSource *sources, size_t source_count,
const Lardon3DAcquisitionCampaignPlan *plan, uint32_t group_id,
const Lardon3DAcquisitionIngestOptions *options,
Lardon3DAcquisitionIngestOutput *output,
Lardon3DAcquisitionIngestResult *ingest_result);
#ifdef __cplusplus
}
#endif
#endif