![]() |
Ansel 0.0
A darktable fork - bloat + design vision
|
The EXIF/IPTC/XMP tag half of what used to be common/exif.cc.
More...
#include <glib.h>#include <sys/stat.h>#include <time.h>#include <zlib.h>#include <cmath>#include <cstdlib>#include <cstring>#include <iostream>#include <string>#include <exiv2/exiv2.hpp>#include "metadata/exif.h"#include "metadata/exif_internal.h"#include "common/conf.h"#include "common/datetime.h"#include "common/dng_opcode.h"#include "common/logging.h"#include "common/utility.h"#include "database/tag_repository.h"#include "math/math.h"#include "metadata/colorlabels.h"#include "metadata/metadata.h"#include "metadata/notify.h"#include "metadata/tags.h"#include "system/macros.h"#include "system/mem_alloc.h"
Include dependency graph for exif.cc:Go to the source code of this file.
Macros | |
| #define | __STDC_FORMAT_MACROS |
| #define | FIND_XMP_TAG(key) dt_exif_read_xmp_tag(xmpData, &pos, key) |
| #define | FIND_IPTC_TAG(key) dt_exif_read_iptc_tag(iptcData, &pos, key) |
| #define | FIND_EXIF_TAG(key) dt_exif_read_exif_tag(exifData, &pos, key) |
| #define | DT_IMAGE_USERCROP_EPSILON 1e-6f |
| #define | COMPRESS_THRESHOLD 100 |
| #define | TO_BINARY(a) (a > 57 ? a - 97 + 10 : a - 48) |
Functions | |
| static const char * | _get_exiv2_type (const int type) |
| static void | _get_xmp_tags (const char *prefix, GList **taglist) |
| static int | _illu_to_temp (dt_dng_illuminant_t illu) |
| void | dt_exif_set_exiv2_taglist () |
| const GList * | dt_exif_get_exiv2_taglist () |
| static void | _exif_import_tags (dt_image_t *img, Exiv2::XmpData::iterator &pos) |
| static void | dt_strlcpy_to_utf8 (char *dest, size_t dest_max, Exiv2::ExifData::const_iterator &pos, Exiv2::ExifData &exifData) |
| void | dt_remove_exif_keys (Exiv2::ExifData &exif, const char *keys[], unsigned int n_keys) |
Strip the given EXIF keys from exif, ignoring any that are absent. | |
| static bool | dt_exif_read_xmp_tag (Exiv2::XmpData &xmpData, Exiv2::XmpData::iterator *pos, string key) |
| bool | dt_exif_decode_xmp_data (dt_image_t *img, Exiv2::XmpData &xmpData, int version, bool exif_read) |
Apply one XMP packet's metadata, tags and colour labels to img. | |
| static bool | dt_exif_read_iptc_tag (Exiv2::IptcData &iptcData, Exiv2::IptcData::const_iterator *pos, string key) |
| static bool | _exif_decode_iptc_data (dt_image_t *img, Exiv2::IptcData &iptcData) |
| bool | dt_exif_read_exif_tag (Exiv2::ExifData &exifData, Exiv2::ExifData::const_iterator *pos, string key) |
Read one EXIF tag into pos, FALSE if the image does not carry it. | |
| static dt_image_usercrop_status_t | _read_usercrop_candidate (Exiv2::ExifData &exifData, const char *key, dt_boundingbox_t crop) |
| static bool | _usercrop_candidates_agree (const dt_boundingbox_t a, const dt_boundingbox_t b) |
| static bool | _check_usercrop (Exiv2::ExifData &exifData, dt_image_t *img) |
| static gboolean | _check_dng_opcodes (Exiv2::ExifData &exifData, dt_image_t *img) |
| static void | _check_lens_correction_dng (Exiv2::ExifData &exifData, dt_image_t *img) |
| static void | _check_lens_correction_sony (Exiv2::ExifData &exifData, dt_image_t *img) |
| static bool | _read_fuji_9coef (Exiv2::ExifData::const_iterator posd, Exiv2::ExifData::const_iterator posc, Exiv2::ExifData::const_iterator posv, ls_vendor_fuji_t *f) |
| static bool | _read_fuji_11coef (Exiv2::ExifData::const_iterator posd, Exiv2::ExifData::const_iterator posc, Exiv2::ExifData::const_iterator posv, ls_vendor_fuji_t *f) |
| static void | _check_lens_correction_fuji (Exiv2::ExifData &exifData, dt_image_t *img) |
| static void | _check_lens_correction_olympus (Exiv2::ExifData &exifData, dt_image_t *img) |
| static void | _check_lens_correction_data (Exiv2::ExifData &exifData, dt_image_t *img) |
| void | dt_exif_read_usercrop (dt_image_t *img, const char *filename) |
| void | dt_exif_img_check_additional_tags (dt_image_t *img, const char *filename) |
| static void | _find_datetime_taken (Exiv2::ExifData &exifData, Exiv2::ExifData::const_iterator pos, char *exif_datetime_taken) |
| static void | _find_exif_maker (Exiv2::ExifData &exifData, Exiv2::ExifData::const_iterator pos, char *maker, const size_t m_size) |
| static void | _find_exif_model (Exiv2::ExifData &exifData, Exiv2::ExifData::const_iterator pos, char *model, const size_t m_size) |
| static bool | _exif_decode_exif_data (dt_image_t *img, Exiv2::ExifData &exifData) |
| int | dt_exif_read_from_blob (dt_image_t *img, uint8_t *blob, const int size) |
| int | dt_exif_get_thumbnail (const char *path, uint8_t **buffer, size_t *size, char **mime_type, int *width, int *height, int min_width) |
| int | dt_exif_read (dt_image_t *img, const char *path) |
| int | dt_exif_write_blob (uint8_t *blob, uint32_t size, const char *path, const int compressed) |
| char * | dt_exif_xmp_encode (const unsigned char *input, const int len, int *output_len) |
| char * | dt_exif_xmp_encode_internal (const unsigned char *input, const int len, int *output_len, gboolean do_compress) |
| unsigned char * | dt_exif_xmp_decode (const char *input, const int len, int *output_len) |
| dt_colorspaces_color_profile_type_t | dt_exif_get_color_space (const uint8_t *data, size_t size) |
| void | dt_exif_get_datetime_taken (const uint8_t *data, size_t size, char *datetime_taken) |
| static void | dt_exif_log_handler (int log_level, const char *message) |
| void | dt_exif_init () |
| void | dt_exif_cleanup () |
Variables | |
| static GList * | exiv2_taglist = NULL |
The EXIF/IPTC/XMP tag half of what used to be common/exif.cc.
Cut out of a 4775-line translation unit that was doing two unrelated jobs. This one reads and writes what a photograph says about itself; the other – the XMP sidecar carrying the development – is common/xmp_sidecar.cc. See metadata/exif.h.
Definition in file exif.cc.
| #define COMPRESS_THRESHOLD 100 |
| #define FIND_EXIF_TAG | ( | key | ) | dt_exif_read_exif_tag(exifData, &pos, key) |
| #define FIND_IPTC_TAG | ( | key | ) | dt_exif_read_iptc_tag(iptcData, &pos, key) |
| #define FIND_XMP_TAG | ( | key | ) | dt_exif_read_xmp_tag(xmpData, &pos, key) |
| #define TO_BINARY | ( | a | ) | (a > 57 ? a - 97 + 10 : a - 48) |
|
static |
Definition at line 805 of file exif.cc.
References DT_DEBUG_IMAGEIO, dt_dng_opcode_process_opcode_list_2(), dt_vprint(), FALSE, and TRUE.
Referenced by _exif_decode_exif_data(), and dt_exif_img_check_additional_tags().
|
static |
Definition at line 995 of file exif.cc.
References _check_lens_correction_dng(), _check_lens_correction_fuji(), _check_lens_correction_olympus(), _check_lens_correction_sony(), DT_DEBUG_IMAGEIO, dt_vprint(), dt_image_t::exif_correction, names, and t.
Referenced by _exif_decode_exif_data(), and dt_exif_img_check_additional_tags().
|
static |
Definition at line 826 of file exif.cc.
References DT_DEBUG_IMAGEIO, dt_vprint(), and dt_image_t::exif_correction.
Referenced by _check_lens_correction_data().
|
static |
Definition at line 921 of file exif.cc.
References _read_fuji_11coef(), _read_fuji_9coef(), dt_exif_read_exif_tag(), and dt_image_t::exif_correction.
Referenced by _check_lens_correction_data().
|
static |
Definition at line 962 of file exif.cc.
References dt_exif_read_exif_tag(), dt_image_t::exif_correction, i, and TRUE.
Referenced by _check_lens_correction_data().
|
static |
Definition at line 845 of file exif.cc.
References dt_exif_read_exif_tag(), dt_image_t::exif_correction, and i.
Referenced by _check_lens_correction_data().
|
static |
Resolve img->usercrop / img->usercrop_status from the file's DefaultUserCrop candidates.
Returns TRUE only for a valid, non-identity framing — the caller uses that to decide whether to advertise the file as carrying usable crop metadata. Every other outcome leaves the box at identity, so no failure mode can produce an automatic crop.
Definition at line 751 of file exif.cc.
References _read_usercrop_candidate(), _usercrop_candidates_agree(), DT_DEBUG_ALWAYS, DT_DEBUG_IMAGEIO, DT_IMAGE_USERCROP_ABSENT, DT_IMAGE_USERCROP_CONFLICT, DT_IMAGE_USERCROP_MALFORMED, DT_IMAGE_USERCROP_VALID, dt_print(), FALSE, i, dt_image_t::id, status, TRUE, dt_image_t::usercrop, and dt_image_t::usercrop_status.
Referenced by _exif_decode_exif_data(), dt_exif_img_check_additional_tags(), and dt_exif_read_usercrop().
|
static |
Definition at line 1152 of file exif.cc.
References _check_dng_opcodes(), _check_lens_correction_data(), _check_usercrop(), _find_datetime_taken(), _find_exif_maker(), _find_exif_model(), _illu_to_temp(), dt_image_t::colorspace, dt_image_t::d65_color_matrix, dt_datetime_exif_to_img(), DT_DATETIME_LENGTH, DT_DEBUG_IMAGEIO, dt_free, dt_get_debug_flags(), DT_IMAGE_COLORSPACE_ADOBE_RGB, DT_IMAGE_COLORSPACE_SRGB, DT_IMAGE_HAS_ADDITIONAL_DNG_TAGS, DT_IMAGE_HDR, dt_image_is_raw(), DT_IMAGE_MONOCHROME, dt_image_orientation_to_flip_bits(), dt_image_refresh_makermodel(), dt_image_set_xmp_rating(), DT_LS_CloudyWeather, DT_LS_CoolWhiteFluorescent, DT_LS_D50, DT_LS_D55, DT_LS_D65, DT_LS_D75, DT_LS_Daylight, DT_LS_DaylightFluorescent, DT_LS_DayWhiteFluorescent, DT_LS_FineWeather, DT_LS_Flash, DT_LS_Fluorescent, DT_LS_ISOStudioTungsten, DT_LS_Shade, DT_LS_StandardLightA, DT_LS_StandardLightB, DT_LS_StandardLightC, DT_LS_Tungsten, DT_LS_Unknown, DT_LS_WarmWhiteFluorescent, DT_LS_WhiteFluorescent, dt_metadata_set_import(), dt_strlcpy_to_utf8(), dt_tag_attach(), dt_tag_new(), dt_util_gps_elevation_to_number(), dt_util_gps_rationale_to_number(), dt_image_geoloc_t::elevation, dt_image_t::exif_aperture, dt_image_t::exif_crop, dt_image_t::exif_exposure, dt_image_t::exif_exposure_bias, dt_image_t::exif_focal_length, dt_image_t::exif_focus_distance, dt_image_t::exif_inited, dt_image_t::exif_iso, dt_image_t::exif_lens, dt_image_t::exif_maker, dt_image_t::exif_model, FALSE, dt_image_t::filename, FIND_EXIF_TAG, dt_image_t::flags, dt_image_t::geoloc, i, dt_image_t::id, dt_image_geoloc_t::latitude, dt_image_geoloc_t::longitude, mat3mul(), dt_image_t::orientation, sign, TRUE, and value.
Referenced by dt_exif_read(), and dt_exif_read_from_blob().
|
static |
Definition at line 599 of file exif.cc.
References dt_datetime_exif_to_img(), dt_free, dt_metadata_set_import(), dt_metadata_tags_changed(), dt_tag_attach(), dt_tag_new(), dt_util_foo_to_utf8(), FALSE, dt_image_t::filename, FIND_IPTC_TAG, dt_image_t::id, key, and TRUE.
Referenced by dt_exif_read().
|
static |
Definition at line 2294 of file exif.cc.
References dt_tag_repository_attach(), dt_tag_repository_find_by_name(), dt_tag_repository_insert(), i, dt_image_t::id, and k.
Referenced by dt_exif_decode_xmp_data().
|
static |
Definition at line 1085 of file exif.cc.
References dt_datetime_add_subsec_to_exif(), DT_DATETIME_EXIF_LENGTH, DT_DATETIME_LENGTH, dt_strlcpy_to_utf8(), and FIND_EXIF_TAG.
Referenced by _exif_decode_exif_data(), and dt_exif_get_datetime_taken().
|
static |
Definition at line 1107 of file exif.cc.
References dt_strlcpy_to_utf8(), FIND_EXIF_TAG, and maker.
Referenced by _exif_decode_exif_data().
|
static |
Definition at line 1130 of file exif.cc.
References dt_strlcpy_to_utf8(), FIND_EXIF_TAG, and model.
Referenced by _exif_decode_exif_data().
|
static |
Definition at line 150 of file exif.cc.
References type.
Referenced by _get_xmp_tags(), and dt_exif_set_exiv2_taglist().
|
static |
Definition at line 215 of file exif.cc.
References _get_exiv2_type(), dt_util_dstrcat(), and i.
Referenced by dt_exif_set_exiv2_taglist().
|
static |
Definition at line 228 of file exif.cc.
References DT_LS_CloudyWeather, DT_LS_CoolWhiteFluorescent, DT_LS_D50, DT_LS_D55, DT_LS_D65, DT_LS_D75, DT_LS_Daylight, DT_LS_DaylightFluorescent, DT_LS_DayWhiteFluorescent, DT_LS_FineWeather, DT_LS_Flash, DT_LS_Fluorescent, DT_LS_ISOStudioTungsten, DT_LS_Shade, DT_LS_StandardLightA, DT_LS_StandardLightB, DT_LS_StandardLightC, DT_LS_Tungsten, DT_LS_WarmWhiteFluorescent, and DT_LS_WhiteFluorescent.
Referenced by _exif_decode_exif_data().
|
static |
Definition at line 895 of file exif.cc.
Referenced by _check_lens_correction_fuji().
|
static |
Definition at line 876 of file exif.cc.
Referenced by _check_lens_correction_fuji().
|
static |
Read one DefaultUserCrop candidate and classify it.
The DNG spec (tag 51125 / 0xC7B5) defines four unsigned rationals in (top, left, bottom, right) order, normalized against the DefaultCropOrigin/DefaultCropSize rectangle, with (0, 0, 1, 1) as the identity. exiv2 only knows the tag by name from 0.27.4, hence the lookup by tag number.
Validation is the spec's own contract and nothing else. In particular there is deliberately no minimum-size heuristic: the inherited "each side must span more than 5%" test rejected standards-valid narrow crops while still accepting out-of-range ones, so it was never tag validation. Malformed values are reported as such, never clamped into a plausible rectangle.
Definition at line 710 of file exif.cc.
References DT_IMAGE_USERCROP_ABSENT, DT_IMAGE_USERCROP_IDENTITY, DT_IMAGE_USERCROP_MALFORMED, DT_IMAGE_USERCROP_VALID, i, and key.
Referenced by _check_usercrop().
|
static |
Definition at line 737 of file exif.cc.
References DT_IMAGE_USERCROP_EPSILON, and i.
Referenced by _check_usercrop().
| void dt_exif_cleanup | ( | ) |
Definition at line 2443 of file exif.cc.
Referenced by dt_cleanup().
| bool dt_exif_decode_xmp_data | ( | dt_image_t * | img, |
| Exiv2::XmpData & | xmpData, | ||
| int | version, | ||
| bool | exif_read | ||
| ) |
Apply one XMP packet's metadata, tags and colour labels to img.
Definition at line 428 of file exif.cc.
References _exif_import_tags(), dt_colorlabels_remove_labels(), dt_colorlabels_set_label(), dt_conf_get_bool(), dt_datetime_exif_to_img(), dt_free, dt_image_get_xmp_mode(), dt_image_set_xmp_rating(), dt_metadata_clear(), dt_metadata_get_key(), DT_METADATA_NUMBER, dt_metadata_set_import(), dt_tag_set_tags(), dt_util_gps_elevation_to_number(), dt_util_gps_string_to_number(), dt_image_geoloc_t::elevation, dt_image_t::exif_lens, FALSE, dt_image_t::filename, FIND_XMP_TAG, dt_image_t::geoloc, i, dt_image_t::id, IS_NULL_PTR, key, dt_image_geoloc_t::latitude, dt_image_geoloc_t::longitude, sign, TRUE, and value.
Referenced by dt_exif_read(), and dt_exif_xmp_read().
| dt_colorspaces_color_profile_type_t dt_exif_get_color_space | ( | const uint8_t * | data, |
| size_t | size | ||
| ) |
look for color space hints in data and tell the caller if it's sRGB, AdobeRGB or something else. used for mipmaps
Definition at line 2330 of file exif.cc.
References DT_COLORSPACE_ADOBERGB, DT_COLORSPACE_DISPLAY, DT_COLORSPACE_SRGB, and size.
Referenced by dt_imageio_jpeg_read_color_space().
| void dt_exif_get_datetime_taken | ( | const uint8_t * | data, |
| size_t | size, | ||
| char * | datetime_taken | ||
| ) |
look for datetime_taken in data. used for gphoto downloads
Definition at line 2375 of file exif.cc.
References _find_datetime_taken(), and size.
| const GList * dt_exif_get_exiv2_taglist | ( | ) |
get the list of available tags from Exvi2 must not be freed
Definition at line 361 of file exif.cc.
References dt_exif_set_exiv2_taglist(), and exiv2_taglist.
Referenced by _exif_get_exiv2_tag_type(), and dt_lib_export_metadata_configuration_dialog().
| int dt_exif_get_thumbnail | ( | const char * | path, |
| uint8_t ** | buffer, | ||
| size_t * | size, | ||
| char ** | mime_type, | ||
| int * | width, | ||
| int * | height, | ||
| int | min_width | ||
| ) |
Get the largest possible thumbnail from the image
Definition at line 1929 of file exif.cc.
References DT_DEBUG_LIGHTTABLE, dt_print(), height, IS_NULL_PTR, preview, selected, size, WIDEN, and width.
Referenced by dt_imageio_large_thumbnail().
| void dt_exif_img_check_additional_tags | ( | dt_image_t * | img, |
| const char * | filename | ||
| ) |
Reads exif tags that are not cached in the database
Definition at line 1055 of file exif.cc.
References _check_dng_opcodes(), _check_lens_correction_data(), _check_usercrop(), and WIDEN.
Referenced by dt_imageio_open_rawspeed().
| void dt_exif_init | ( | ) |
thread safe init and cleanup.
Definition at line 2403 of file exif.cc.
References dt_exif_log_handler().
Referenced by dt_init().
|
static |
Definition at line 2393 of file exif.cc.
References DT_DEBUG_CAMERA_SUPPORT, and dt_print().
Referenced by dt_exif_init().
| int dt_exif_read | ( | dt_image_t * | img, |
| const char * | path | ||
| ) |
read the metadata of an image. XMP data trumps IPTC data trumps EXIF data
Definition at line 1994 of file exif.cc.
References _exif_decode_exif_data(), _exif_decode_iptc_data(), dt_datetime_unix_to_img(), dt_exif_decode_xmp_data(), dt_image_flags_from_extension(), DT_IMAGE_HDR, DT_IMAGE_LDR, DT_IMAGE_RAW, DT_IMAGE_S_RAW, dt_image_t::exif_inited, dt_image_t::flags, dt_image_t::height, res, WIDEN, and dt_image_t::width.
Referenced by _image_import_internal(), _import_copy_file(), _set_test_path(), dt_control_refresh_exif_run(), dt_imageio_open_j2k(), dt_imageio_open_jpeg(), dt_imageio_open_png(), dt_imageio_open_rawspeed(), dt_imageio_open_tiff(), and update_preview_cb().
| bool dt_exif_read_exif_tag | ( | Exiv2::ExifData & | exifData, |
| Exiv2::ExifData::const_iterator * | pos, | ||
| std::string | key | ||
| ) |
Read one EXIF tag into pos, FALSE if the image does not carry it.
Behind the FIND_EXIF_TAG() macro in exif.cc; the sidecar reader calls it directly, on the old EXIF block of an image being re-read.
Definition at line 676 of file exif.cc.
References key.
Referenced by _check_lens_correction_fuji(), _check_lens_correction_olympus(), _check_lens_correction_sony(), and dt_exif_xmp_attach_export().
| int dt_exif_read_from_blob | ( | dt_image_t * | img, |
| uint8_t * | blob, | ||
| const int | size | ||
| ) |
Definition at line 1909 of file exif.cc.
References _exif_decode_exif_data(), dt_image_t::filename, res, and size.
Referenced by dt_imageio_open_exr().
|
static |
| void dt_exif_read_usercrop | ( | dt_image_t * | img, |
| const char * | filename | ||
| ) |
Reads only the DNG DefaultUserCrop tag into img->usercrop / img->usercrop_status.
Narrow entry point for consumers that need the camera framing without decoding the raw and without the side effects of the full additional-tags read (DNG opcodes allocate gain maps). Always leaves a definite status, never DT_IMAGE_USERCROP_UNKNOWN.
Definition at line 1031 of file exif.cc.
References _check_usercrop(), DT_IMAGE_USERCROP_ABSENT, dt_image_t::usercrop, dt_image_t::usercrop_status, and WIDEN.
Referenced by dt_image_resolve_usercrop().
|
static |
| void dt_exif_set_exiv2_taglist | ( | ) |
set the list of available tags from Exvi2
Definition at line 271 of file exif.cc.
References _get_exiv2_type(), _get_xmp_tags(), dt_util_dstrcat(), and exiv2_taglist.
Referenced by dt_exif_get_exiv2_taglist(), and dt_init().
| int dt_exif_write_blob | ( | uint8_t * | blob, |
| uint32_t | size, | ||
| const char * | path, | ||
| const int | compressed | ||
| ) |
write blob to file exif. merges with existing exif information.
Definition at line 2057 of file exif.cc.
References dt_remove_exif_keys(), i, key, size, and WIDEN.
Referenced by dt_imageio_write_dng(), write_image(), write_image(), write_image(), and write_image().
| unsigned char * dt_exif_xmp_decode | ( | const char * | input, |
| const int | len, | ||
| int * | output_len | ||
| ) |
Definition at line 2207 of file exif.cc.
References dt_free, factor, i, IS_NULL_PTR, and TO_BINARY.
Referenced by add_preset(), dt_exif_xmp_read(), dt_presets_import_from_file(), dt_style_plugin_save(), init_presets(), read_history_v1(), read_history_v2(), read_masks(), and read_masks_v3().
| char * dt_exif_xmp_encode | ( | const unsigned char * | input, |
| const int | len, | ||
| int * | output_len | ||
| ) |
encode / decode op params.
Used by the XMP sidecar to serialise module parameter blobs, and by anything that has to read one back; they are here rather than beside the sidecar because they are a codec, not a document format – common/styles.c and common/presets.c use them too.
Definition at line 2116 of file exif.cc.
References COMPRESS_THRESHOLD, dt_conf_get_string(), dt_exif_xmp_encode_internal(), dt_free, FALSE, and TRUE.
Referenced by _exif_xmp_append_history_hash(), _init_presets(), _write_item(), _xmp_append_history(), _xmp_append_mask(), and dt_presets_save_to_file().
| char * dt_exif_xmp_encode_internal | ( | const unsigned char * | input, |
| const int | len, | ||
| int * | output_len, | ||
| gboolean | do_compress | ||
| ) |
Definition at line 2142 of file exif.cc.
References dt_free, factor, i, IS_NULL_PTR, and MIN.
Referenced by dt_exif_xmp_encode(), encode_colorchecker(), and encode_tonecurve().
| void dt_remove_exif_keys | ( | Exiv2::ExifData & | exif, |
| const char * | keys[], | ||
| unsigned int | n_keys | ||
| ) |
Strip the given EXIF keys from exif, ignoring any that are absent.
Definition at line 389 of file exif.cc.
References i.
Referenced by dt_exif_read_blob(), dt_exif_write_blob(), and dt_remove_exif_geotag().
|
static |
Definition at line 372 of file exif.cc.
References dt_free, and IS_NULL_PTR.
Referenced by _exif_decode_exif_data(), _find_datetime_taken(), _find_exif_maker(), and _find_exif_model().
|
static |
Definition at line 126 of file exif.cc.
Referenced by dt_exif_get_exiv2_taglist(), and dt_exif_set_exiv2_taglist().