lardon3d/include/lardon3d/project_db.h

688 lines
31 KiB
C

#ifndef LARDON3D_PROJECT_DB_H
#define LARDON3D_PROJECT_DB_H
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <time.h>
#include <lardon3d/task.h>
#include <lardon3d/sparse_sfm_incremental.h>
enum {
LARDON3D_PROJECT_DB_SCHEMA_VERSION = 18,
LARDON3D_PROJECT_DB_ID_CAPACITY = 65,
LARDON3D_PROJECT_DB_KIND_CAPACITY = 65,
LARDON3D_PROJECT_DB_PATH_CAPACITY = 4096,
LARDON3D_PROJECT_DB_ERROR_CAPACITY = 256,
LARDON3D_PROJECT_DB_RECOVERY_PAGE_MAX = 256,
LARDON3D_PROJECT_DB_CATALOG_PAGE_MAX = 256,
LARDON3D_PROJECT_DB_CANDIDATE_PAIR_PAGE_MAX = 256,
LARDON3D_PROJECT_DB_MATCH_RESULT_PAGE_MAX = 256,
LARDON3D_PROJECT_DB_GEOMETRIC_RESULT_PAGE_MAX = 256,
LARDON3D_PROJECT_DB_TRACK_PAGE_MAX = 64,
LARDON3D_PROJECT_DB_INLIER_MASK_MAX = 1024,
LARDON3D_PROJECT_DB_FUNDAMENTAL_COEFFICIENTS = 9,
LARDON3D_PROJECT_DB_SCANSET_NAME_CAPACITY = 256,
LARDON3D_PROJECT_DB_IMAGE_NAME_CAPACITY = 256,
LARDON3D_PROJECT_DB_SHA256_SIZE = 32,
};
typedef struct Lardon3DProjectDb Lardon3DProjectDb;
typedef enum {
LARDON3D_PROJECT_DB_OK = 0,
LARDON3D_PROJECT_DB_INVALID_ARGUMENT,
LARDON3D_PROJECT_DB_NOT_FOUND,
LARDON3D_PROJECT_DB_BUSY,
LARDON3D_PROJECT_DB_UNSUPPORTED_SCHEMA,
LARDON3D_PROJECT_DB_CORRUPT,
LARDON3D_PROJECT_DB_CONSTRAINT,
LARDON3D_PROJECT_DB_IO_ERROR
} Lardon3DProjectDbResult;
typedef enum {
LARDON3D_DB_CHECKPOINT_DURABLE = 0,
LARDON3D_DB_CHECKPOINT_PUBLISHED_NOT_DURABLE
} Lardon3DProjectDbCheckpointDurability;
typedef enum {
LARDON3D_DB_ARTIFACT_STAGED = 0,
LARDON3D_DB_ARTIFACT_READY
} Lardon3DProjectDbArtifactState;
typedef struct {
char stable_id[LARDON3D_PROJECT_DB_ID_CAPACITY];
char name[LARDON3D_TASK_NAME_CAPACITY];
int64_t created_at;
int64_t updated_at;
} Lardon3DProjectDbProject;
typedef struct {
char path[LARDON3D_PROJECT_DB_PATH_CAPACITY];
uint32_t format_version;
Lardon3DProjectDbCheckpointDurability durability;
int64_t updated_at;
} Lardon3DProjectDbCheckpoint;
typedef struct {
uint64_t task_id;
char name[LARDON3D_TASK_NAME_CAPACITY];
bool has_task_kind;
char task_kind[LARDON3D_TASK_KIND_CAPACITY];
uint32_t task_kind_version;
Lardon3DTaskState saved_state;
Lardon3DTaskState recovery_state;
unsigned int progress;
unsigned int sequence_count;
struct timespec started_at;
struct timespec finished_at;
int64_t updated_at;
bool has_checkpoint;
Lardon3DProjectDbCheckpoint checkpoint;
} Lardon3DProjectDbTask;
typedef struct {
char artifact_id[LARDON3D_PROJECT_DB_ID_CAPACITY];
char kind[LARDON3D_PROJECT_DB_KIND_CAPACITY];
char path[LARDON3D_PROJECT_DB_PATH_CAPACITY];
Lardon3DProjectDbArtifactState state;
uint64_t size_bytes;
bool has_producer_task;
uint64_t producer_task_id;
int64_t created_at;
int64_t updated_at;
} Lardon3DProjectDbArtifact;
typedef struct {
uint64_t task_id;
char source_path[LARDON3D_PROJECT_DB_PATH_CAPACITY];
uint64_t scanset_id;
} Lardon3DProjectDbImageImport;
typedef struct {
uint64_t scanset_id;
char name[LARDON3D_PROJECT_DB_SCANSET_NAME_CAPACITY];
int64_t created_at;
int64_t updated_at;
} Lardon3DProjectDbScanSet;
typedef enum { LARDON3D_DB_IMAGE_ASSET_READY = 1 } Lardon3DProjectDbImageAssetState;
typedef struct {
uint64_t asset_id;
unsigned char sha256[LARDON3D_PROJECT_DB_SHA256_SIZE];
char path[LARDON3D_PROJECT_DB_PATH_CAPACITY];
uint64_t size_bytes;
Lardon3DProjectDbImageAssetState state;
int64_t created_at;
} Lardon3DProjectDbImageAsset;
typedef struct {
uint64_t image_id;
uint64_t scanset_id;
uint64_t asset_id;
char original_name[LARDON3D_PROJECT_DB_IMAGE_NAME_CAPACITY];
char source_path[LARDON3D_PROJECT_DB_PATH_CAPACITY];
bool has_producer_task;
uint64_t producer_task_id;
int64_t imported_at;
} Lardon3DProjectDbImage;
typedef struct {
uint64_t candidate_pair_id;
uint64_t image_id_a;
uint64_t image_id_b;
int64_t created_at;
} Lardon3DProjectDbCandidatePair;
typedef struct {
uint64_t task_id;
uint64_t after_candidate_pair_id;
char feature_extractor_kind[LARDON3D_PROJECT_DB_KIND_CAPACITY];
uint32_t feature_extractor_version;
unsigned char feature_parameter_fingerprint[LARDON3D_PROJECT_DB_SHA256_SIZE];
int matcher_kind;
float ratio_threshold;
} Lardon3DProjectDbMatcherTask;
typedef struct {
uint64_t task_id;
uint64_t after_match_result_id;
double threshold_pixels;
double confidence;
uint32_t max_iterations;
uint32_t min_inlier_count;
double min_inlier_ratio;
uint32_t seed_policy_version;
uint32_t canonicalization_version;
unsigned char parameter_fingerprint[LARDON3D_PROJECT_DB_SHA256_SIZE];
} Lardon3DProjectDbGeometricVerifierTask;
typedef struct {
uint64_t task_id;
char builder_kind[LARDON3D_PROJECT_DB_KIND_CAPACITY];
uint32_t builder_version;
unsigned char builder_fingerprint[LARDON3D_PROJECT_DB_SHA256_SIZE];
int verifier_kind;
uint32_t verifier_version;
unsigned char verifier_fingerprint[LARDON3D_PROJECT_DB_SHA256_SIZE];
unsigned char input_scope_hash[LARDON3D_PROJECT_DB_SHA256_SIZE];
uint64_t gvr_count;
char scope_path[LARDON3D_PROJECT_DB_PATH_CAPACITY];
uint64_t scope_size_bytes;
unsigned char scope_sha256[LARDON3D_PROJECT_DB_SHA256_SIZE];
uint32_t scope_format_version;
} Lardon3DProjectDbTrackBuilderTask;
typedef struct {
uint64_t match_result_id;
uint64_t candidate_pair_id;
uint64_t feature_set_id_a;
uint64_t feature_set_id_b;
char matcher_kind[LARDON3D_PROJECT_DB_KIND_CAPACITY];
uint32_t matcher_version;
unsigned char parameter_fingerprint[LARDON3D_PROJECT_DB_SHA256_SIZE];
int result_status;
uint32_t match_count;
bool has_match_asset;
unsigned char match_asset_sha256[LARDON3D_PROJECT_DB_SHA256_SIZE];
char match_asset_path[LARDON3D_PROJECT_DB_PATH_CAPACITY];
uint64_t match_asset_size_bytes;
int64_t created_at;
} Lardon3DProjectDbMatchResult;
typedef enum {
LARDON3D_GEOMETRIC_VERIFIER_FUNDAMENTAL = 1,
} Lardon3DGeometricVerifierKind;
typedef enum {
LARDON3D_GEOMETRIC_REJECTED = 1,
LARDON3D_GEOMETRIC_VERIFIED = 2,
} Lardon3DGeometricVerificationStatus;
typedef struct {
uint64_t geometric_verification_result_id;
uint64_t match_result_id;
Lardon3DGeometricVerifierKind verifier_kind;
uint32_t verifier_version;
unsigned char parameter_fingerprint[LARDON3D_PROJECT_DB_SHA256_SIZE];
Lardon3DGeometricVerificationStatus status;
uint32_t inlier_count;
size_t inlier_mask_size;
unsigned char inlier_mask[LARDON3D_PROJECT_DB_INLIER_MASK_MAX];
bool has_model;
double model[LARDON3D_PROJECT_DB_FUNDAMENTAL_COEFFICIENTS];
int64_t created_at;
} Lardon3DProjectDbGeometricVerificationResult;
typedef enum {
LARDON3D_PROJECT_DB_IMAGE_REGISTERED = 0,
LARDON3D_PROJECT_DB_IMAGE_ALREADY_PRESENT
} Lardon3DProjectDbImageRegisterStatus;
enum {
LARDON3D_MATCH_RESULT_STATUS_NO_MATCH = 0,
LARDON3D_MATCH_RESULT_STATUS_MATCHED = 1,
};
typedef enum {
LARDON3D_DB_FEATURE_ASSET_DURABLE = 0,
LARDON3D_DB_FEATURE_ASSET_PUBLISHED_NOT_DURABLE = 1
} Lardon3DProjectDbFeatureDurability;
typedef struct {
uint64_t feature_asset_id;
unsigned char sha256[32];
char path[LARDON3D_PROJECT_DB_PATH_CAPACITY];
uint64_t size_bytes;
Lardon3DProjectDbFeatureDurability durability;
int64_t created_at;
} Lardon3DProjectDbFeatureAsset;
typedef struct {
uint64_t feature_set_id;
uint64_t image_id;
uint64_t feature_asset_id;
char extractor_kind[LARDON3D_PROJECT_DB_KIND_CAPACITY];
uint32_t extractor_version;
unsigned char parameter_fingerprint[32];
unsigned char source_image_sha256[32];
uint32_t feature_count;
uint32_t descriptor_type;
uint32_t descriptor_dimension;
uint32_t occupied_cells;
uint32_t total_cells;
double coverage_ratio;
double feature_density_per_megapixel;
bool has_producer_task;
uint64_t producer_task_id;
int64_t created_at;
Lardon3DProjectDbFeatureAsset asset;
} Lardon3DProjectDbFeatureSet;
typedef struct {
uint64_t task_id;
uint64_t image_id;
char extractor_kind[LARDON3D_PROJECT_DB_KIND_CAPACITY];
uint32_t extractor_version;
uint32_t max_features;
uint32_t pyramid_levels;
uint32_t fast_threshold;
unsigned char parameter_fingerprint[32];
} Lardon3DProjectDbFeatureExtractTask;
typedef struct {
uint64_t task_id;
uint64_t image_id;
char extractor_kind[LARDON3D_PROJECT_DB_KIND_CAPACITY];
uint32_t extractor_version;
uint32_t max_features;
uint32_t octave_layers;
double contrast_threshold;
double edge_threshold;
double sigma;
uint32_t grid_rows;
uint32_t grid_cols;
uint32_t max_features_per_cell;
unsigned char parameter_fingerprint[32];
} Lardon3DProjectDbSiftExtractTask;
typedef struct {
uint64_t feature_support_set_id;
uint64_t image_id;
uint64_t first_feature_set_id;
uint64_t second_feature_set_id;
double radius_pixels;
unsigned char parameter_fingerprint[32];
uint32_t group_count;
int64_t created_at;
} Lardon3DProjectDbFeatureSupportSet;
typedef struct {
uint64_t feature_support_group_id;
uint64_t feature_support_set_id;
double x;
double y;
double distance_pixels;
uint32_t support_count;
bool first_member_from_second_set;
uint32_t first_feature_index;
bool has_second_feature;
uint32_t second_feature_index;
} Lardon3DProjectDbFeatureSupportGroup;
typedef enum {
LARDON3D_DB_VISUAL_INDEX_DURABLE = 0,
LARDON3D_DB_VISUAL_INDEX_PUBLISHED_NOT_DURABLE = 1
} Lardon3DProjectDbVisualIndexDurability;
typedef struct {
uint64_t visual_index_id;
char index_kind[LARDON3D_PROJECT_DB_KIND_CAPACITY];
uint32_t index_version;
uint32_t descriptor_type;
uint32_t descriptor_dimension;
char extractor_kind[LARDON3D_PROJECT_DB_KIND_CAPACITY];
uint32_t extractor_version;
unsigned char feature_parameter_fingerprint[32];
unsigned char index_parameter_fingerprint[32];
uint32_t table_count;
uint32_t key_bits;
uint32_t max_features_per_set;
uint32_t max_bucket_postings;
int64_t created_at;
} Lardon3DProjectDbVisualIndex;
typedef struct {
uint64_t visual_index_segment_id;
uint64_t visual_index_id;
uint64_t generation;
unsigned char sha256[32];
char path[LARDON3D_PROJECT_DB_PATH_CAPACITY];
uint64_t size_bytes;
uint64_t posting_count;
uint32_t feature_set_count;
Lardon3DProjectDbVisualIndexDurability durability;
bool has_producer_task;
uint64_t producer_task_id;
int64_t created_at;
} Lardon3DProjectDbVisualIndexSegment;
typedef struct {
uint64_t task_id;
uint64_t visual_index_id;
uint64_t after_feature_set_id;
} Lardon3DProjectDbVisualIndexUpdateTask;
typedef struct {
uint64_t task_id;
uint64_t visual_index_id;
uint64_t after_feature_set_id;
uint32_t top_k;
uint32_t minimum_evidence_count;
int scanset_filter;
bool exclude_same_asset;
} Lardon3DProjectDbCandidatePairGenerateTask;
typedef struct {
uint64_t feature_set_id;
uint32_t feature_index;
uint32_t position_in_track;
} Lardon3DProjectDbTrackObservation;
typedef struct {
uint64_t track_id;
uint64_t track_set_id;
uint32_t observation_count;
Lardon3DProjectDbTrackObservation *observations;
} Lardon3DProjectDbTrack;
typedef struct {
uint64_t track_set_id;
char builder_kind[LARDON3D_PROJECT_DB_KIND_CAPACITY];
uint32_t builder_version;
unsigned char parameter_fingerprint[LARDON3D_PROJECT_DB_SHA256_SIZE];
int verifier_kind;
uint32_t verifier_version;
unsigned char verifier_fingerprint[LARDON3D_PROJECT_DB_SHA256_SIZE];
unsigned char input_scope_hash[LARDON3D_PROJECT_DB_SHA256_SIZE];
uint64_t gvr_count;
uint64_t track_count;
int64_t created_at;
} Lardon3DProjectDbTrackSet;
typedef struct {
uint64_t task_id;
uint64_t track_set_id;
uint64_t calibration_scope_id;
uint32_t sfm_kind;
uint32_t sfm_version;
Lardon3DSparseIncrementalParameters parameters;
} Lardon3DProjectDbSparseSfmTask;
typedef struct {
uint64_t task_id;
uint64_t base_reconstruction_id;
uint64_t extension_track_set_id;
uint64_t calibration_scope_id;
uint32_t incremental_kind;
uint32_t incremental_version;
unsigned char parameter_fingerprint[LARDON3D_PROJECT_DB_SHA256_SIZE];
} Lardon3DProjectDbIncrementalReconstructionTask;
void lardon3d_project_db_free_track(Lardon3DProjectDbTrack *track);
Lardon3DProjectDbResult lardon3d_project_db_create_track_set(
Lardon3DProjectDb *database, const Lardon3DProjectDbTrackSet *configuration,
const Lardon3DProjectDbTrack *tracks, size_t track_count,
Lardon3DProjectDbTrackSet *published);
Lardon3DProjectDbResult lardon3d_project_db_load_track_set(
Lardon3DProjectDb *database, uint64_t track_set_id, Lardon3DProjectDbTrackSet *track_set);
Lardon3DProjectDbResult lardon3d_project_db_find_track_set(
Lardon3DProjectDb *database, const Lardon3DProjectDbTrackSet *identity,
Lardon3DProjectDbTrackSet *track_set);
Lardon3DProjectDbResult lardon3d_project_db_list_track_sets(
Lardon3DProjectDb *database, uint64_t after_track_set_id, Lardon3DProjectDbTrackSet *track_sets,
size_t capacity, size_t *count);
Lardon3DProjectDbResult lardon3d_project_db_load_track(
Lardon3DProjectDb *database, uint64_t track_id, Lardon3DProjectDbTrack *track);
Lardon3DProjectDbResult lardon3d_project_db_list_tracks(
Lardon3DProjectDb *database, uint64_t track_set_id, uint64_t after_track_id,
Lardon3DProjectDbTrack *tracks, size_t capacity, size_t *count);
Lardon3DProjectDbResult lardon3d_project_db_find_track_by_observation(
Lardon3DProjectDb *database, uint64_t track_set_id, uint64_t feature_set_id,
uint32_t feature_index, Lardon3DProjectDbTrack *track);
Lardon3DProjectDbResult lardon3d_project_db_open(const char *path, Lardon3DProjectDb **database,
char error[LARDON3D_PROJECT_DB_ERROR_CAPACITY]);
void lardon3d_project_db_close(Lardon3DProjectDb *database);
bool lardon3d_project_db_last_error(Lardon3DProjectDb *database,
char error[LARDON3D_PROJECT_DB_ERROR_CAPACITY]);
Lardon3DProjectDbResult lardon3d_project_db_legacy_catalog_pending(Lardon3DProjectDb *database,
bool *pending);
unsigned int lardon3d_project_db_schema_version(Lardon3DProjectDb *database);
Lardon3DProjectDbResult lardon3d_project_db_set_project(Lardon3DProjectDb *database,
const Lardon3DProjectDbProject *project);
Lardon3DProjectDbResult lardon3d_project_db_get_project(Lardon3DProjectDb *database,
Lardon3DProjectDbProject *project);
Lardon3DProjectDbResult lardon3d_project_db_record_task(
Lardon3DProjectDb *database, const Lardon3DTaskDurableSnapshot *snapshot, const char *task_kind,
uint32_t task_kind_version, const Lardon3DProjectDbCheckpoint *checkpoint, int64_t updated_at);
Lardon3DProjectDbResult lardon3d_project_db_record_image_import_task(
Lardon3DProjectDb *database, const Lardon3DTaskDurableSnapshot *snapshot, const char *task_kind,
uint32_t task_kind_version, const Lardon3DProjectDbCheckpoint *checkpoint,
const char *source_path, uint64_t scanset_id, int64_t updated_at);
Lardon3DProjectDbResult lardon3d_project_db_create_scanset(Lardon3DProjectDb *database,
const char *name,
Lardon3DProjectDbScanSet *scanset);
Lardon3DProjectDbResult lardon3d_project_db_load_scanset(Lardon3DProjectDb *database,
uint64_t scanset_id,
Lardon3DProjectDbScanSet *scanset);
Lardon3DProjectDbResult lardon3d_project_db_list_scansets(Lardon3DProjectDb *database,
uint64_t after_scanset_id,
Lardon3DProjectDbScanSet *scansets,
size_t capacity, size_t *count);
Lardon3DProjectDbResult lardon3d_project_db_register_image(
Lardon3DProjectDb *database, uint64_t scanset_id,
const unsigned char sha256[LARDON3D_PROJECT_DB_SHA256_SIZE], const char *asset_path,
uint64_t size_bytes, const char *original_name, const char *source_path,
uint64_t producer_task_id, int64_t imported_at, Lardon3DProjectDbImageRegisterStatus *status,
Lardon3DProjectDbImage *image);
Lardon3DProjectDbResult lardon3d_project_db_load_image(Lardon3DProjectDb *database,
uint64_t image_id,
Lardon3DProjectDbImage *image,
Lardon3DProjectDbImageAsset *asset);
Lardon3DProjectDbResult lardon3d_project_db_list_images(Lardon3DProjectDb *database,
uint64_t scanset_id,
uint64_t after_image_id,
Lardon3DProjectDbImage *images,
Lardon3DProjectDbImageAsset *assets,
size_t capacity, size_t *count);
Lardon3DProjectDbResult lardon3d_project_db_count_images(Lardon3DProjectDb *database,
uint64_t scanset_id, uint64_t *count);
Lardon3DProjectDbResult lardon3d_project_db_create_candidate_pair(
Lardon3DProjectDb *database, uint64_t image_id_a, uint64_t image_id_b, int64_t created_at,
Lardon3DProjectDbCandidatePair *pair);
Lardon3DProjectDbResult lardon3d_project_db_load_candidate_pair(
Lardon3DProjectDb *database, uint64_t candidate_pair_id, Lardon3DProjectDbCandidatePair *pair);
Lardon3DProjectDbResult lardon3d_project_db_find_candidate_pair(
Lardon3DProjectDb *database, uint64_t image_id_a, uint64_t image_id_b,
Lardon3DProjectDbCandidatePair *pair);
Lardon3DProjectDbResult lardon3d_project_db_list_candidate_pairs(
Lardon3DProjectDb *database, uint64_t after_candidate_pair_id,
Lardon3DProjectDbCandidatePair *pairs, size_t capacity, size_t *count);
Lardon3DProjectDbResult
lardon3d_project_db_load_image_import(Lardon3DProjectDb *database, uint64_t task_id,
Lardon3DProjectDbImageImport *parameters);
Lardon3DProjectDbResult lardon3d_project_db_allocate_task_id(Lardon3DProjectDb *database,
uint64_t *task_id);
Lardon3DProjectDbResult lardon3d_project_db_load_task(Lardon3DProjectDb *database, uint64_t task_id,
Lardon3DProjectDbTask *task);
Lardon3DProjectDbResult lardon3d_project_db_list_recoverable(Lardon3DProjectDb *database,
uint64_t after_task_id,
Lardon3DProjectDbTask *tasks,
size_t capacity, size_t *count);
Lardon3DProjectDbResult
lardon3d_project_db_create_artifact(Lardon3DProjectDb *database,
const Lardon3DProjectDbArtifact *artifact);
Lardon3DProjectDbResult lardon3d_project_db_mark_artifact_ready(Lardon3DProjectDb *database,
const char *artifact_id,
int64_t updated_at);
Lardon3DProjectDbResult lardon3d_project_db_load_artifact(Lardon3DProjectDb *database,
const char *artifact_id,
Lardon3DProjectDbArtifact *artifact);
Lardon3DProjectDbResult lardon3d_project_db_record_feature_extract_task(
Lardon3DProjectDb *database, const Lardon3DTaskDurableSnapshot *snapshot, const char *task_kind,
uint32_t task_kind_version, const Lardon3DProjectDbCheckpoint *checkpoint,
const Lardon3DProjectDbFeatureExtractTask *parameters, int64_t updated_at);
Lardon3DProjectDbResult
lardon3d_project_db_load_feature_extract_task(Lardon3DProjectDb *database, uint64_t task_id,
Lardon3DProjectDbFeatureExtractTask *parameters);
Lardon3DProjectDbResult lardon3d_project_db_record_sift_extract_task(
Lardon3DProjectDb *database, const Lardon3DTaskDurableSnapshot *snapshot,
const char *task_kind, uint32_t task_kind_version,
const Lardon3DProjectDbCheckpoint *checkpoint,
const Lardon3DProjectDbSiftExtractTask *parameters, int64_t updated_at);
Lardon3DProjectDbResult lardon3d_project_db_load_sift_extract_task(
Lardon3DProjectDb *database, uint64_t task_id, Lardon3DProjectDbSiftExtractTask *parameters);
Lardon3DProjectDbResult lardon3d_project_db_register_feature_set(
Lardon3DProjectDb *database, uint64_t image_id, const char *extractor_kind,
uint32_t extractor_version, const unsigned char parameter_fingerprint[32],
const unsigned char source_image_sha256[32], uint32_t feature_count, uint32_t descriptor_type,
uint32_t descriptor_dimension, const unsigned char asset_sha256[32], const char *asset_path,
uint64_t asset_size_bytes, Lardon3DProjectDbFeatureDurability durability,
uint64_t producer_task_id, int64_t created_at, Lardon3DProjectDbFeatureSet *feature_set);
Lardon3DProjectDbResult lardon3d_project_db_register_feature_set_quality(
Lardon3DProjectDb *database, uint64_t image_id, const char *extractor_kind,
uint32_t extractor_version, const unsigned char parameter_fingerprint[32],
const unsigned char source_image_sha256[32], uint32_t feature_count, uint32_t descriptor_type,
uint32_t descriptor_dimension, uint32_t occupied_cells, uint32_t total_cells,
double coverage_ratio, double feature_density_per_megapixel,
const unsigned char asset_sha256[32], const char *asset_path, uint64_t asset_size_bytes,
Lardon3DProjectDbFeatureDurability durability, uint64_t producer_task_id, int64_t created_at,
Lardon3DProjectDbFeatureSet *feature_set);
Lardon3DProjectDbResult
lardon3d_project_db_find_feature_set(Lardon3DProjectDb *database, uint64_t image_id,
const char *extractor_kind, uint32_t extractor_version,
const unsigned char parameter_fingerprint[32],
Lardon3DProjectDbFeatureSet *feature_set);
Lardon3DProjectDbResult
lardon3d_project_db_load_feature_set(Lardon3DProjectDb *database, uint64_t feature_set_id,
Lardon3DProjectDbFeatureSet *feature_set);
Lardon3DProjectDbResult
lardon3d_project_db_list_feature_sets(Lardon3DProjectDb *database, uint64_t after_feature_set_id,
Lardon3DProjectDbFeatureSet *feature_sets, size_t capacity,
size_t *count);
Lardon3DProjectDbResult lardon3d_project_db_publish_feature_support(
Lardon3DProjectDb *database, const Lardon3DProjectDbFeatureSupportSet *configuration,
const Lardon3DProjectDbFeatureSupportGroup *groups, size_t group_count,
Lardon3DProjectDbFeatureSupportSet *published);
Lardon3DProjectDbResult lardon3d_project_db_load_feature_support(
Lardon3DProjectDb *database, uint64_t image_id, uint64_t first_feature_set_id,
uint64_t second_feature_set_id, const unsigned char parameter_fingerprint[32],
Lardon3DProjectDbFeatureSupportSet *support_set);
Lardon3DProjectDbResult lardon3d_project_db_list_feature_support_groups(
Lardon3DProjectDb *database, uint64_t feature_support_set_id,
uint64_t after_feature_support_group_id, Lardon3DProjectDbFeatureSupportGroup *groups,
size_t capacity, size_t *count);
Lardon3DProjectDbResult lardon3d_project_db_create_visual_index(
Lardon3DProjectDb *database, const Lardon3DProjectDbVisualIndex *configuration,
Lardon3DProjectDbVisualIndex *visual_index);
Lardon3DProjectDbResult lardon3d_project_db_load_visual_index(
Lardon3DProjectDb *database, uint64_t visual_index_id,
Lardon3DProjectDbVisualIndex *visual_index);
Lardon3DProjectDbResult lardon3d_project_db_list_visual_index_segments(
Lardon3DProjectDb *database, uint64_t visual_index_id, uint64_t after_generation,
Lardon3DProjectDbVisualIndexSegment *segments, size_t capacity, size_t *count);
Lardon3DProjectDbResult lardon3d_project_db_list_visual_index_pending(
Lardon3DProjectDb *database, uint64_t visual_index_id, uint64_t after_feature_set_id,
Lardon3DProjectDbFeatureSet *feature_sets, size_t capacity, size_t *count);
Lardon3DProjectDbResult lardon3d_project_db_publish_visual_index_segment(
Lardon3DProjectDb *database, const Lardon3DProjectDbVisualIndexSegment *segment,
const uint64_t *feature_set_ids, size_t feature_set_count,
Lardon3DProjectDbVisualIndexSegment *published);
Lardon3DProjectDbResult lardon3d_project_db_record_visual_index_update_task(
Lardon3DProjectDb *database, const Lardon3DTaskDurableSnapshot *snapshot,
const char *task_kind, uint32_t task_kind_version,
const Lardon3DProjectDbCheckpoint *checkpoint,
const Lardon3DProjectDbVisualIndexUpdateTask *parameters, int64_t updated_at);
Lardon3DProjectDbResult lardon3d_project_db_load_visual_index_update_task(
Lardon3DProjectDb *database, uint64_t task_id,
Lardon3DProjectDbVisualIndexUpdateTask *parameters);
Lardon3DProjectDbResult lardon3d_project_db_record_candidate_pair_generate_task(
Lardon3DProjectDb *database, const Lardon3DTaskDurableSnapshot *snapshot,
const char *task_kind, uint32_t task_kind_version,
const Lardon3DProjectDbCheckpoint *checkpoint,
const Lardon3DProjectDbCandidatePairGenerateTask *parameters, int64_t updated_at);
Lardon3DProjectDbResult lardon3d_project_db_load_candidate_pair_generate_task(
Lardon3DProjectDb *database, uint64_t task_id,
Lardon3DProjectDbCandidatePairGenerateTask *parameters);
Lardon3DProjectDbResult lardon3d_project_db_record_matcher_task(
Lardon3DProjectDb *database, const Lardon3DTaskDurableSnapshot *snapshot,
const char *task_kind, uint32_t task_kind_version,
const Lardon3DProjectDbCheckpoint *checkpoint,
const Lardon3DProjectDbMatcherTask *parameters, int64_t updated_at);
Lardon3DProjectDbResult lardon3d_project_db_load_matcher_task(
Lardon3DProjectDb *database, uint64_t task_id,
Lardon3DProjectDbMatcherTask *parameters);
Lardon3DProjectDbResult lardon3d_project_db_record_geometric_verifier_task(
Lardon3DProjectDb *database, const Lardon3DTaskDurableSnapshot *snapshot,
const char *task_kind, uint32_t task_kind_version,
const Lardon3DProjectDbCheckpoint *checkpoint,
const Lardon3DProjectDbGeometricVerifierTask *parameters, int64_t updated_at);
Lardon3DProjectDbResult lardon3d_project_db_load_geometric_verifier_task(
Lardon3DProjectDb *database, uint64_t task_id,
Lardon3DProjectDbGeometricVerifierTask *parameters);
Lardon3DProjectDbResult lardon3d_project_db_record_track_builder_task(
Lardon3DProjectDb *database, const Lardon3DTaskDurableSnapshot *snapshot,
const char *kind, uint32_t version, const Lardon3DProjectDbCheckpoint *checkpoint,
const Lardon3DProjectDbTrackBuilderTask *parameters, int64_t updated_at);
Lardon3DProjectDbResult lardon3d_project_db_load_track_builder_task(
Lardon3DProjectDb *database, uint64_t task_id,
Lardon3DProjectDbTrackBuilderTask *parameters);
Lardon3DProjectDbResult lardon3d_project_db_record_sparse_sfm_task(
Lardon3DProjectDb *database, const Lardon3DTaskDurableSnapshot *snapshot,
const char *kind, uint32_t version,
const Lardon3DProjectDbCheckpoint *checkpoint,
const Lardon3DProjectDbSparseSfmTask *parameters, int64_t updated_at);
Lardon3DProjectDbResult lardon3d_project_db_load_sparse_sfm_task(
Lardon3DProjectDb *database, uint64_t task_id,
Lardon3DProjectDbSparseSfmTask *parameters);
Lardon3DProjectDbResult lardon3d_project_db_record_incremental_reconstruction_task(
Lardon3DProjectDb *database, const Lardon3DTaskDurableSnapshot *snapshot,
const char *kind, uint32_t version,
const Lardon3DProjectDbCheckpoint *checkpoint,
const Lardon3DProjectDbIncrementalReconstructionTask *parameters,
int64_t updated_at);
Lardon3DProjectDbResult lardon3d_project_db_load_incremental_reconstruction_task(
Lardon3DProjectDb *database, uint64_t task_id,
Lardon3DProjectDbIncrementalReconstructionTask *parameters);
Lardon3DProjectDbResult lardon3d_project_db_create_match_result(
Lardon3DProjectDb *database, uint64_t candidate_pair_id, uint64_t feature_set_id_a,
uint64_t feature_set_id_b, const char *matcher_kind, uint32_t matcher_version,
const unsigned char parameter_fingerprint[LARDON3D_PROJECT_DB_SHA256_SIZE], int result_status,
uint32_t match_count,
const unsigned char *match_asset_sha256, const char *match_asset_path,
uint64_t match_asset_size_bytes, int64_t created_at,
Lardon3DProjectDbMatchResult *result);
Lardon3DProjectDbResult lardon3d_project_db_load_match_result(
Lardon3DProjectDb *database, uint64_t match_result_id, Lardon3DProjectDbMatchResult *result);
Lardon3DProjectDbResult lardon3d_project_db_repair_match_result(
Lardon3DProjectDb *database, uint64_t match_result_id, int result_status,
uint32_t match_count, const unsigned char *match_asset_sha256,
const char *match_asset_path, uint64_t match_asset_size_bytes,
Lardon3DProjectDbMatchResult *result);
Lardon3DProjectDbResult lardon3d_project_db_find_match_result(
Lardon3DProjectDb *database, uint64_t candidate_pair_id,
uint64_t feature_set_id_a, uint64_t feature_set_id_b,
const char *matcher_kind, uint32_t matcher_version,
const unsigned char parameter_fingerprint[LARDON3D_PROJECT_DB_SHA256_SIZE],
Lardon3DProjectDbMatchResult *result);
Lardon3DProjectDbResult lardon3d_project_db_list_match_results(
Lardon3DProjectDb *database, uint64_t after_match_result_id,
Lardon3DProjectDbMatchResult *results, size_t capacity, size_t *count);
Lardon3DProjectDbResult lardon3d_project_db_create_geometric_verification_result(
Lardon3DProjectDb *database, uint64_t match_result_id,
Lardon3DGeometricVerifierKind verifier_kind, uint32_t verifier_version,
const unsigned char parameter_fingerprint[LARDON3D_PROJECT_DB_SHA256_SIZE],
Lardon3DGeometricVerificationStatus status, uint32_t inlier_count,
const unsigned char *inlier_mask, size_t inlier_mask_size, const double *model,
int64_t created_at, Lardon3DProjectDbGeometricVerificationResult *result);
Lardon3DProjectDbResult lardon3d_project_db_load_geometric_verification_result(
Lardon3DProjectDb *database, uint64_t geometric_verification_result_id,
Lardon3DProjectDbGeometricVerificationResult *result);
Lardon3DProjectDbResult lardon3d_project_db_find_geometric_verification_result(
Lardon3DProjectDb *database, uint64_t match_result_id,
Lardon3DGeometricVerifierKind verifier_kind, uint32_t verifier_version,
const unsigned char parameter_fingerprint[LARDON3D_PROJECT_DB_SHA256_SIZE],
Lardon3DProjectDbGeometricVerificationResult *result);
Lardon3DProjectDbResult lardon3d_project_db_list_geometric_verification_results(
Lardon3DProjectDb *database, uint64_t match_result_id,
uint64_t after_geometric_verification_result_id,
Lardon3DProjectDbGeometricVerificationResult *results, size_t capacity, size_t *count);
#endif