Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
exif.cc File Reference
#include <errno.h>
#include <glib.h>
#include <sqlite3.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <time.h>
#include <unistd.h>
#include <zlib.h>
#include <array>
#include <cassert>
#include <cmath>
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
#include <exiv2/exiv2.hpp>
#include <pugixml.hpp>
#include "common/colorlabels.h"
#include "common/darktable.h"
#include "common/debug.h"
#include "common/dng_opcode.h"
#include "common/image_cache.h"
#include "common/imageio.h"
#include "common/exif.h"
#include "common/imageio_jpeg.h"
#include "common/metadata.h"
#include "common/ratings.h"
#include "common/tags.h"
#include "common/iop_order.h"
#include "common/variables.h"
#include "common/utility.h"
#include "common/history.h"
#include "common/datetime.h"
#include "control/conf.h"
#include "control/control.h"
#include "develop/imageop.h"
#include "develop/blend.h"
#include "develop/masks.h"
+ Include dependency graph for exif.cc:

Data Structures

class  Lock
 
struct  history_entry_t
 
struct  mask_entry_t
 

Macros

#define __STDC_FORMAT_MACROS
 
#define WIDEN(s)   (s)
 
#define DT_XMP_EXIF_VERSION   5
 
#define read_metadata_threadsafe(image)
 
#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)   _exif_read_exif_tag(exifData, &pos, key)
 
#define COMPRESS_THRESHOLD   100
 
#define TO_BINARY(a)   (a > 57 ? a - 97 + 10 : a - 48)
 
#define ERROR_CODE(a)   (a)
 

Typedefs

typedef struct history_entry_t history_entry_t
 
typedef struct mask_entry_t mask_entry_t
 

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 const char * _exif_get_exiv2_tag_type (const char *tagname)
 
static void _exif_import_tags (dt_image_t *img, Exiv2::XmpData::iterator &pos)
 
static void read_xmp_timestamps (Exiv2::XmpData &xmpData, dt_image_t *img, const int xmp_version)
 
static void dt_strlcpy_to_utf8 (char *dest, size_t dest_max, Exiv2::ExifData::const_iterator &pos, Exiv2::ExifData &exifData)
 
static void dt_remove_known_keys (Exiv2::XmpData &xmp)
 
static void dt_remove_exif_keys (Exiv2::ExifData &exif, const char *keys[], unsigned int n_keys)
 
static void dt_remove_xmp_keys (Exiv2::XmpData &xmp, const char *keys[], unsigned int n_keys)
 
static bool dt_exif_read_xmp_tag (Exiv2::XmpData &xmpData, Exiv2::XmpData::iterator *pos, string key)
 
static bool _exif_decode_xmp_data (dt_image_t *img, Exiv2::XmpData &xmpData, int version, bool exif_read)
 
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)
 
static bool _exif_read_exif_tag (Exiv2::ExifData &exifData, Exiv2::ExifData::const_iterator *pos, string key)
 
static bool _check_usercrop (Exiv2::ExifData &exifData, dt_image_t *img)
 
static gboolean _check_dng_opcodes (Exiv2::ExifData &exifData, dt_image_t *img)
 
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)
 
static void dt_remove_exif_geotag (Exiv2::ExifData &exifData)
 
int dt_exif_read_blob (uint8_t **buf, const char *path, const int32_t imgid, const int sRGB, const int out_width, const int out_height, const int dng_mode)
 
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)
 
static void print_history_entry (history_entry_t *entry) __attribute__((unused))
 
static void free_history_entry (gpointer data)
 
static GList * read_history_v1 (const std::string &xmpPacket, const char *filename, const int superold)
 
static GList * read_history_v2 (Exiv2::XmpData &xmpData, const char *filename)
 
void free_mask_entry (gpointer data)
 
static GHashTable * read_masks (Exiv2::XmpData &xmpData, const char *filename, const int version)
 
static GList * read_masks_v3 (Exiv2::XmpData &xmpData, const char *filename, const int version)
 
static void add_mask_entry_to_db (int32_t imgid, mask_entry_t *entry)
 
static void add_non_clone_mask_entries_to_db (gpointer key, gpointer value, gpointer user_data)
 
static void add_mask_entries_to_db (int32_t imgid, GHashTable *mask_entries, int mask_id)
 
int _get_max_multi_priority (GList *history, const char *operation)
 
static gboolean _image_altered_deprecated (const int32_t imgid)
 
int dt_exif_xmp_read (dt_image_t *img, const char *filename, const int history_only)
 
static void dt_set_xmp_dt_history (Exiv2::XmpData &xmpData, const int32_t imgid, int history_end)
 
static void set_xmp_timestamps (Exiv2::XmpData &xmpData, const int32_t imgid)
 
GTimeSpan _convert_unix_to_gtimespan (const time_t unix)
 
static void dt_remove_xmp_exif_geotag (Exiv2::XmpData &xmpData)
 
static void dt_set_xmp_exif_geotag (Exiv2::XmpData &xmpData, double longitude, double latitude, double altitude)
 
static void dt_set_xmp_dt_metadata (Exiv2::XmpData &xmpData, const int32_t imgid, const gboolean export_flag)
 
static void _exif_xmp_read_data (Exiv2::XmpData &xmpData, const int32_t imgid)
 
static void _exif_xmp_read_data_export (Exiv2::XmpData &xmpData, const int32_t imgid, dt_export_metadata_t *metadata)
 
char * dt_exif_xmp_read_string (const int32_t imgid)
 
static void dt_remove_xmp_key (Exiv2::XmpData &xmp, const char *key)
 
static void _remove_xmp_keys (Exiv2::XmpData &xmpData, const char *key)
 
static void dt_remove_exif_key (Exiv2::ExifData &exif, const char *key)
 
static void dt_remove_iptc_key (Exiv2::IptcData &iptc, const char *key)
 
int dt_exif_xmp_attach_export (const int32_t imgid, const char *filename, void *metadata)
 
int dt_exif_xmp_write (const int32_t imgid, const char *filename)
 
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
 
const char * dt_xmp_keys []
 
static const guint dt_xmp_keys_n = G_N_ELEMENTS(dt_xmp_keys)
 

Macro Definition Documentation

◆ __STDC_FORMAT_MACROS

#define __STDC_FORMAT_MACROS

◆ COMPRESS_THRESHOLD

#define COMPRESS_THRESHOLD   100

◆ DT_XMP_EXIF_VERSION

#define DT_XMP_EXIF_VERSION   5

◆ ERROR_CODE

#define ERROR_CODE (   a)    (a)

◆ FIND_EXIF_TAG

#define FIND_EXIF_TAG (   key)    _exif_read_exif_tag(exifData, &pos, key)

◆ FIND_IPTC_TAG

#define FIND_IPTC_TAG (   key)    dt_exif_read_iptc_tag(iptcData, &pos, key)

◆ FIND_XMP_TAG

#define FIND_XMP_TAG (   key)    dt_exif_read_xmp_tag(xmpData, &pos, key)

◆ read_metadata_threadsafe

#define read_metadata_threadsafe (   image)
Value:
{ \
Lock lock; \
image->readMetadata(); \
}
Definition exif.cc:327

◆ TO_BINARY

#define TO_BINARY (   a)    (a > 57 ? a - 97 + 10 : a - 48)

◆ WIDEN

#define WIDEN (   s)    (s)

Typedef Documentation

◆ history_entry_t

◆ mask_entry_t

typedef struct mask_entry_t mask_entry_t

Function Documentation

◆ _check_dng_opcodes()

static gboolean _check_dng_opcodes ( Exiv2::ExifData &  exifData,
dt_image_t img 
)
static

◆ _check_usercrop()

static bool _check_usercrop ( Exiv2::ExifData &  exifData,
dt_image_t img 
)
static

◆ _convert_unix_to_gtimespan()

GTimeSpan _convert_unix_to_gtimespan ( const time_t  unix)

◆ _exif_decode_exif_data()

static bool _exif_decode_exif_data ( dt_image_t img,
Exiv2::ExifData &  exifData 
)
static
Todo:
: Should the UserComment go into the description? Or do we need an extra field for this?
Todo:
: "Other" illuminant is currently unsupported
Todo:
: This is still a workaround

References _check_dng_opcodes(), _check_usercrop(), _find_datetime_taken(), _find_exif_maker(), _find_exif_model(), _illu_to_temp(), dt_image_t::colorspace, dt_image_t::d65_color_matrix, darktable, dt_datetime_exif_to_img(), DT_DATETIME_LENGTH, DT_DEBUG_IMAGEIO, dt_fast_hypotf(), DT_IMAGE_COLORSPACE_ADOBE_RGB, DT_IMAGE_COLORSPACE_SRGB, DT_IMAGE_HAS_ADDITIONAL_DNG_TAGS, dt_image_is_hdr(), dt_image_is_ldr(), DT_IMAGE_MONOCHROME, dt_image_orientation_to_flip_bits(), dt_image_refresh_makermodel(), dt_image_set_xmp_rating(), dt_imageio_set_hdr_tag(), dt_imageio_update_monochrome_workflow_tag(), 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, dt_image_t::id, dt_image_geoloc_t::latitude, dt_image_geoloc_t::longitude, mat3mul(), dt_image_t::orientation, sign(), TRUE, and darktable_t::unmuted.

Referenced by dt_exif_read(), and dt_exif_read_from_blob().

◆ _exif_decode_iptc_data()

◆ _exif_decode_xmp_data()

◆ _exif_get_exiv2_tag_type()

static const char * _exif_get_exiv2_tag_type ( const char *  tagname)
static

References exiv2_taglist.

Referenced by dt_exif_xmp_attach_export().

◆ _exif_import_tags()

static void _exif_import_tags ( dt_image_t img,
Exiv2::XmpData::iterator &  pos 
)
static

◆ _exif_read_exif_tag()

static bool _exif_read_exif_tag ( Exiv2::ExifData &  exifData,
Exiv2::ExifData::const_iterator *  pos,
string  key 
)
static

References key.

Referenced by dt_exif_xmp_attach_export().

◆ _exif_xmp_read_data()

◆ _exif_xmp_read_data_export()

◆ _find_datetime_taken()

static void _find_datetime_taken ( Exiv2::ExifData &  exifData,
Exiv2::ExifData::const_iterator  pos,
char *  exif_datetime_taken 
)
static

◆ _find_exif_maker()

static void _find_exif_maker ( Exiv2::ExifData &  exifData,
Exiv2::ExifData::const_iterator  pos,
char *  maker,
const size_t  m_size 
)
static

◆ _find_exif_model()

static void _find_exif_model ( Exiv2::ExifData &  exifData,
Exiv2::ExifData::const_iterator  pos,
char *  model,
const size_t  m_size 
)
static

◆ _get_exiv2_type()

static const char * _get_exiv2_type ( const int  type)
static

References type.

Referenced by _get_xmp_tags(), and dt_exif_set_exiv2_taglist().

◆ _get_max_multi_priority()

int _get_max_multi_priority ( GList *  history,
const char *  operation 
)

◆ _get_xmp_tags()

static void _get_xmp_tags ( const char *  prefix,
GList **  taglist 
)
static

◆ _illu_to_temp()

◆ _image_altered_deprecated()

static gboolean _image_altered_deprecated ( const int32_t  imgid)
static

◆ _remove_xmp_keys()

static void _remove_xmp_keys ( Exiv2::XmpData &  xmpData,
const char *  key 
)
static

References key.

Referenced by dt_exif_xmp_attach_export().

◆ add_mask_entries_to_db()

static void add_mask_entries_to_db ( int32_t  imgid,
GHashTable *  mask_entries,
int  mask_id 
)
static

◆ add_mask_entry_to_db()

◆ add_non_clone_mask_entries_to_db()

static void add_non_clone_mask_entries_to_db ( gpointer  key,
gpointer  value,
gpointer  user_data 
)
static

◆ dt_exif_cleanup()

void dt_exif_cleanup ( )

Referenced by dt_cleanup().

◆ dt_exif_get_color_space()

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

References DT_COLORSPACE_ADOBERGB, DT_COLORSPACE_DISPLAY, DT_COLORSPACE_SRGB, and size.

Referenced by dt_imageio_jpeg_read_color_space().

◆ dt_exif_get_datetime_taken()

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

References _find_datetime_taken(), read_metadata_threadsafe, and size.

◆ dt_exif_get_exiv2_taglist()

const GList * dt_exif_get_exiv2_taglist ( )

get the list of available tags from Exvi2 must not be freed

References dt_exif_set_exiv2_taglist(), and exiv2_taglist.

Referenced by dt_lib_export_metadata_configuration_dialog().

◆ dt_exif_get_thumbnail()

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

References DT_DEBUG_LIGHTTABLE, dt_print(), height, MAX, read_metadata_threadsafe, size, WIDEN, and width.

Referenced by dt_imageio_large_thumbnail().

◆ dt_exif_img_check_additional_tags()

void dt_exif_img_check_additional_tags ( dt_image_t img,
const char *  filename 
)

Reads exif tags that are not cached in the database

References _check_dng_opcodes(), _check_usercrop(), read_metadata_threadsafe, and WIDEN.

Referenced by dt_imageio_open_rawspeed().

◆ dt_exif_init()

void dt_exif_init ( )

thread safe init and cleanup.

References dt_exif_log_handler().

Referenced by dt_init().

◆ dt_exif_log_handler()

static void dt_exif_log_handler ( int  log_level,
const char *  message 
)
static

References DT_DEBUG_CAMERA_SUPPORT, and dt_print().

Referenced by dt_exif_init().

◆ dt_exif_read()

◆ dt_exif_read_blob()

int dt_exif_read_blob ( uint8_t **  blob,
const char *  path,
const int32_t  imgid,
const int  sRGB,
const int  out_width,
const int  out_height,
const int  dng_mode 
)

write exif to blob, return length in bytes. blob will be allocated by the function. sRGB should be true if sRGB colorspace is used as output.

Todo:
: find a nice place for the missing metadata (tags, publisher, colorlabels?). Additionally find out

References darktable, darktable_package_string, dt_conf_get_int(), DT_DATETIME_EXIF_LENGTH, dt_datetime_img_to_exif(), DT_DATETIME_LENGTH, dt_datetime_now_to_exif(), dt_image_cache_get(), dt_image_cache_read_release(), dt_metadata_get(), dt_remove_exif_geotag(), dt_remove_exif_keys(), dt_image_geoloc_t::elevation, dt_image_t::geoloc, darktable_t::image_cache, dt_image_geoloc_t::latitude, dt_image_geoloc_t::longitude, read_metadata_threadsafe, and WIDEN.

Referenced by dt_control_merge_hdr_job_run(), and dt_imageio_export_with_flags().

◆ dt_exif_read_from_blob()

int dt_exif_read_from_blob ( dt_image_t img,
uint8_t *  blob,
const int  size 
)
Todo:
: can this blob also contain xmp and iptc data?

References _exif_decode_exif_data(), dt_image_t::filename, and size.

Referenced by dt_imageio_open_exr().

◆ dt_exif_read_iptc_tag()

static bool dt_exif_read_iptc_tag ( Exiv2::IptcData &  iptcData,
Exiv2::IptcData::const_iterator *  pos,
string  key 
)
static

References key.

◆ dt_exif_read_xmp_tag()

static bool dt_exif_read_xmp_tag ( Exiv2::XmpData &  xmpData,
Exiv2::XmpData::iterator *  pos,
string  key 
)
static

References key.

◆ dt_exif_set_exiv2_taglist()

void dt_exif_set_exiv2_taglist ( )

set the list of available tags from Exvi2

References _get_exiv2_type(), _get_xmp_tags(), dt_util_dstrcat(), and exiv2_taglist.

Referenced by dt_exif_get_exiv2_taglist(), and dt_init().

◆ dt_exif_write_blob()

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.

References dt_remove_exif_keys(), key, read_metadata_threadsafe, size, and WIDEN.

Referenced by dt_imageio_write_dng(), write_image(), write_image(), write_image(), and write_image().

◆ dt_exif_xmp_attach_export()

◆ dt_exif_xmp_decode()

unsigned char * dt_exif_xmp_decode ( const char *  input,
const int  len,
int *  output_len 
)

◆ dt_exif_xmp_encode()

char * dt_exif_xmp_encode ( const unsigned char *  input,
const int  len,
int *  output_len 
)

◆ dt_exif_xmp_encode_internal()

char * dt_exif_xmp_encode_internal ( const unsigned char *  input,
const int  len,
int *  output_len,
gboolean  do_compress 
)

◆ dt_exif_xmp_read()

int dt_exif_xmp_read ( dt_image_t img,
const char *  filename,
const int  history_only 
)

read xmp sidecar file.

Todo:
: make this configurable? or remove it altogether?

References _exif_decode_xmp_data(), _image_altered_deprecated(), add_mask_entries_to_db(), add_mask_entry_to_db(), add_non_clone_mask_entries_to_db(), dt_history_hash_values_t::auto_apply, dt_history_hash_values_t::auto_apply_len, dt_history_hash_values_t::basic, dt_history_hash_values_t::basic_len, history_entry_t::blendop_params, history_entry_t::blendop_params_len, history_entry_t::blendop_version, dt_history_hash_values_t::current, dt_history_hash_values_t::current_len, darktable, darktable_t::db, dt_database_get(), dt_database_release_transaction, dt_database_rollback_transaction(), dt_database_start_transaction, DT_DEBUG_SQLITE3_BIND_BLOB, DT_DEBUG_SQLITE3_BIND_INT, DT_DEBUG_SQLITE3_BIND_TEXT, DT_DEBUG_SQLITE3_PREPARE_V2, dt_exif_xmp_decode(), DT_HISTORY_HASH_BASIC, DT_HISTORY_HASH_CURRENT, dt_history_hash_write(), dt_history_hash_write_from_history(), DT_IMAGE_AUTO_PRESETS_APPLIED, DT_IMAGE_NO_LEGACY_PRESETS, DT_IOP_ORDER_LEGACY, DT_IOP_ORDER_V30, dt_ioppr_deserialize_text_iop_order_list(), dt_ioppr_get_iop_order_link(), dt_ioppr_get_iop_order_list_version(), dt_ioppr_write_iop_order_list(), dt_sort_iop_list_by_order_f(), history_entry_t::enabled, FALSE, dt_image_t::flags, free_history_entry(), free_mask_entry(), dt_image_t::id, dt_iop_order_entry_t::instance, history_entry_t::iop_order, dt_iop_order_entry_t::iop_order_f, dt_image_raw_parameters_t::legacy, dt_image_t::legacy_flip, MIN, history_entry_t::modversion, history_entry_t::multi_name, history_entry_t::multi_priority, history_entry_t::num, dt_iop_order_entry_t::o, history_entry_t::operation, dt_iop_order_entry_t::operation, history_entry_t::params, history_entry_t::params_len, read_history_v1(), read_history_v2(), read_masks(), read_masks_v3(), read_metadata_threadsafe, read_xmp_timestamps(), TRUE, dt_image_raw_parameters_t::user_flip, and WIDEN.

Referenced by _image_import_internal(), dt_history_load_and_apply(), dt_image_read_duplicates(), and main().

◆ dt_exif_xmp_read_string()

char * dt_exif_xmp_read_string ( const int32_t  imgid)

◆ dt_exif_xmp_write()

int dt_exif_xmp_write ( const int32_t  imgid,
const char *  filename 
)

◆ dt_remove_exif_geotag()

static void dt_remove_exif_geotag ( Exiv2::ExifData &  exifData)
static

◆ dt_remove_exif_key()

static void dt_remove_exif_key ( Exiv2::ExifData &  exif,
const char *  key 
)
static

References key.

Referenced by dt_exif_xmp_attach_export().

◆ dt_remove_exif_keys()

static void dt_remove_exif_keys ( Exiv2::ExifData &  exif,
const char *  keys[],
unsigned int  n_keys 
)
static

◆ dt_remove_iptc_key()

static void dt_remove_iptc_key ( Exiv2::IptcData &  iptc,
const char *  key 
)
static

References key.

Referenced by dt_exif_xmp_attach_export().

◆ dt_remove_known_keys()

static void dt_remove_known_keys ( Exiv2::XmpData &  xmp)
static

◆ dt_remove_xmp_exif_geotag()

static void dt_remove_xmp_exif_geotag ( Exiv2::XmpData &  xmpData)
static

◆ dt_remove_xmp_key()

static void dt_remove_xmp_key ( Exiv2::XmpData &  xmp,
const char *  key 
)
static

References key.

Referenced by dt_exif_xmp_attach_export().

◆ dt_remove_xmp_keys()

static void dt_remove_xmp_keys ( Exiv2::XmpData &  xmp,
const char *  keys[],
unsigned int  n_keys 
)
static

◆ dt_set_xmp_dt_history()

static void dt_set_xmp_dt_history ( Exiv2::XmpData &  xmpData,
const int32_t  imgid,
int  history_end 
)
static

◆ dt_set_xmp_dt_metadata()

◆ dt_set_xmp_exif_geotag()

static void dt_set_xmp_exif_geotag ( Exiv2::XmpData &  xmpData,
double  longitude,
double  latitude,
double  altitude 
)
static

◆ dt_strlcpy_to_utf8()

static void dt_strlcpy_to_utf8 ( char *  dest,
size_t  dest_max,
Exiv2::ExifData::const_iterator &  pos,
Exiv2::ExifData &  exifData 
)
static

◆ free_history_entry()

static void free_history_entry ( gpointer  data)
static

◆ free_mask_entry()

void free_mask_entry ( gpointer  data)

◆ print_history_entry()

◆ read_history_v1()

◆ read_history_v2()

◆ read_masks()

static GHashTable * read_masks ( Exiv2::XmpData &  xmpData,
const char *  filename,
const int  version 
)
static

◆ read_masks_v3()

static GList * read_masks_v3 ( Exiv2::XmpData &  xmpData,
const char *  filename,
const int  version 
)
static

◆ read_xmp_timestamps()

void read_xmp_timestamps ( Exiv2::XmpData &  xmpData,
dt_image_t img,
const int  xmp_version 
)
static

◆ set_xmp_timestamps()

static void set_xmp_timestamps ( Exiv2::XmpData &  xmpData,
const int32_t  imgid 
)
static

Variable Documentation

◆ dt_xmp_keys

const char* dt_xmp_keys[]
Initial value:
= { "Xmp.dc.subject", "Xmp.lr.hierarchicalSubject", "Xmp.darktable.colorlabels", "Xmp.darktable.history",
"Xmp.darktable.history_modversion", "Xmp.darktable.history_enabled", "Xmp.darktable.history_end",
"Xmp.darktable.iop_order_version", "Xmp.darktable.iop_order_list",
"Xmp.darktable.history_operation", "Xmp.darktable.history_params", "Xmp.darktable.blendop_params",
"Xmp.darktable.blendop_version", "Xmp.darktable.multi_priority", "Xmp.darktable.multi_name",
"Xmp.darktable.iop_order",
"Xmp.darktable.xmp_version", "Xmp.darktable.raw_params", "Xmp.darktable.auto_presets_applied",
"Xmp.darktable.mask_id", "Xmp.darktable.mask_type", "Xmp.darktable.mask_name",
"Xmp.darktable.masks_history", "Xmp.darktable.mask_num", "Xmp.darktable.mask_points",
"Xmp.darktable.mask_version", "Xmp.darktable.mask", "Xmp.darktable.mask_nb", "Xmp.darktable.mask_src",
"Xmp.darktable.history_basic_hash", "Xmp.darktable.history_auto_hash", "Xmp.darktable.history_current_hash",
"Xmp.darktable.import_timestamp", "Xmp.darktable.change_timestamp",
"Xmp.darktable.export_timestamp", "Xmp.darktable.print_timestamp",
"Xmp.acdsee.notes", "Xmp.darktable.version_name",
"Xmp.dc.creator", "Xmp.dc.publisher", "Xmp.dc.title", "Xmp.dc.description", "Xmp.dc.rights",
"Xmp.xmpMM.DerivedFrom" }

Referenced by dt_remove_known_keys().

◆ dt_xmp_keys_n

const guint dt_xmp_keys_n = G_N_ELEMENTS(dt_xmp_keys)
static

Referenced by dt_remove_known_keys().

◆ exiv2_taglist

GList* exiv2_taglist = NULL
static