static int check_exif(_Data *data) { const lfLens **lenses; const lfLens *lens; lime_exif *exif = data->common->exif->data; if (data->common->exif_loaded == 1) return 0; else if (data->common->exif_loaded == -1) return -1; data->common->lens_model = lime_exif_handle_find_str_by_tagname(exif, "LensType"); if (!data->common->lens_model) data->common->lens_model = lime_exif_handle_find_str_by_tagname(exif, "LensModel"); if (!data->common->lens_model) { data->common->exif_loaded = -1; return -1; } data->common->lens_model = strdup(data->common->lens_model); data->common->f = lime_exif_handle_find_float_by_tagname(exif, "FocalLength"); data->common->f_dist = lime_exif_handle_find_float_by_tagname(exif, "FocusDistance"); if (data->common->f_dist == -1.0) data->common->f_dist = 1000; data->common->f_num = lime_exif_handle_find_float_by_tagname(exif, "FNumber"); //FIXME check for errors... if (!data->common->db) { data->common->db = lf_db_new(); lf_db_load(data->common->db); } lenses = lf_db_find_lenses_hd(data->common->db, NULL, NULL, data->common->lens_model, 0); if (!lenses) { printf("lensfun could not find lens model %s!\n", data->common->lens_model); data->common->exif_loaded = -1; return -1; } lens = lenses[0]; data->common->lens = lens; lf_free(lenses); data->common->exif_loaded = 1; return 0; }
int main () { int i, j; const struct lfMount *const *mounts; const struct lfCamera *const *cameras; const struct lfLens *const *lenses; struct lfDatabase *ldb; lfError e; /* Initialize locale in order to get translated names */ setlocale (LC_ALL, ""); ldb = lf_db_new (); if (!ldb) { fprintf (stderr, "Failed to create database\n"); return -1; } g_print ("HomeDataDir: %s\n", ldb->HomeDataDir); lf_db_load (ldb); g_print ("< --------------- < Mounts > --------------- >\n"); mounts = lf_db_get_mounts (ldb); for (i = 0; mounts [i]; i++) { g_print ("Mount: %s\n", lf_mlstr_get (mounts [i]->Name)); if (mounts [i]->Compat) for (j = 0; mounts [i]->Compat [j]; j++) g_print ("\tCompat: %s\n", mounts [i]->Compat [j]); } g_print ("< --------------- < Cameras > --------------- >\n"); cameras = lf_db_get_cameras (ldb); for (i = 0; cameras [i]; i++) { g_print ("Camera: %s / %s %s%s%s\n", lf_mlstr_get (cameras [i]->Maker), lf_mlstr_get (cameras [i]->Model), cameras [i]->Variant ? "(" : "", cameras [i]->Variant ? lf_mlstr_get (cameras [i]->Variant) : "", cameras [i]->Variant ? ")" : ""); g_print ("\tMount: %s\n", lf_db_mount_name (ldb, cameras [i]->Mount)); g_print ("\tCrop factor: %g\n", cameras [i]->CropFactor); } g_print ("< --------------- < Lenses > --------------- >\n"); lenses = lf_db_get_lenses (ldb); for (i = 0; lenses [i]; i++) { g_print ("Lens: %s / %s\n", lf_mlstr_get (lenses [i]->Maker), lf_mlstr_get (lenses [i]->Model)); g_print ("\tCrop factor: %g\n", lenses [i]->CropFactor); g_print ("\tAspect ratio: %g\n", lenses [i]->AspectRatio); g_print ("\tFocal: %g-%g\n", lenses [i]->MinFocal, lenses [i]->MaxFocal); g_print ("\tAperture: %g-%g\n", lenses [i]->MinAperture, lenses [i]->MaxAperture); g_print ("\tCenter: %g,%g\n", lenses [i]->CenterX, lenses [i]->CenterY); if (lenses [i]->Mounts) for (j = 0; lenses [i]->Mounts [j]; j++) g_print ("\tMount: %s\n", lf_db_mount_name (ldb, lenses [i]->Mounts [j])); } g_print ("< ---< Saving database into one big file >--- >\n"); e = lf_db_save_file (ldb, "example-big.xml", mounts, cameras, lenses); if (e != LF_NO_ERROR) fprintf (stderr, "Failed writing to file, error code %d\n", e); lf_db_destroy (ldb); return 0; }