Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
image.c File Reference
#include "common/image.h"
#include "common/collection.h"
#include "common/darktable.h"
#include "common/debug.h"
#include "common/dtpthread.h"
#include "common/exif.h"
#include "common/file_location.h"
#include "common/grouping.h"
#include "common/history.h"
#include "common/history_merge.h"
#include "common/history_snapshot.h"
#include "common/image_cache.h"
#include "common/imageio.h"
#include "common/imageio_rawspeed.h"
#include "common/imageio_libraw.h"
#include "common/mipmap_cache.h"
#include "common/ratings.h"
#include "common/tags.h"
#include "common/undo.h"
#include "common/selection.h"
#include "common/datetime.h"
#include "control/conf.h"
#include "control/control.h"
#include "control/jobs.h"
#include "develop/lightroom.h"
#include "develop/develop.h"
#include "win/filepath.h"
#include <assert.h>
#include <ctype.h>
#include <math.h>
#include <sqlite3.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <glob.h>
#include <glib/gstdio.h>
+ Include dependency graph for common/image.c:

Go to the source code of this file.

Data Structures

struct  dt_undo_monochrome_t
 
struct  dt_undo_datetime_t
 
struct  dt_undo_geotag_t
 
struct  dt_undo_duplicate_t
 
struct  _datetime_t
 

Typedefs

typedef struct dt_undo_monochrome_t dt_undo_monochrome_t
 
typedef struct dt_undo_datetime_t dt_undo_datetime_t
 
typedef struct dt_undo_geotag_t dt_undo_geotag_t
 
typedef struct dt_undo_duplicate_t dt_undo_duplicate_t
 
typedef struct _datetime_t _datetime_t
 

Functions

static void _image_stmt_mutex_ensure (void)
 
static void _pop_undo_execute (const int32_t imgid, const gboolean before, const gboolean after)
 
static int32_t _image_duplicate_with_version (const int32_t imgid, const int32_t newversion, const gboolean undo)
 
static void _pop_undo (gpointer user_data, const dt_undo_type_t type, dt_undo_data_t data, const dt_undo_action_t action, GList **imgs)
 
static void _copy_text_sidecar_if_present (const char *src_image_path, const char *dest_image_path)
 
static void _move_text_sidecar_if_present (const char *src_image_path, const char *dest_image_path, const gboolean overwrite)
 
gboolean dt_image_is_raw (const dt_image_t *img)
 
gboolean dt_image_is_ldr (const dt_image_t *img)
 
gboolean dt_image_is_hdr (const dt_image_t *img)
 
gboolean dt_image_is_monochrome (const dt_image_t *img)
 
static void _image_set_monochrome_flag (const int32_t imgid, gboolean monochrome, gboolean undo_on)
 
void dt_image_set_monochrome_flag (const int32_t imgid, gboolean monochrome)
 
static gboolean _image_matrix_has_data (const float *matrix, const int count)
 
gboolean dt_image_is_matrix_correction_supported (const dt_image_t *img)
 
gboolean dt_image_use_monochrome_workflow (const dt_image_t *img)
 
int dt_image_monochrome_flags (const dt_image_t *img)
 
gboolean dt_image_pipe_class_is_provisional (const dt_image_t *img)
 
gboolean dt_image_is_sraw (const dt_image_t *img)
 
gboolean dt_image_is_mosaiced (const dt_image_t *img)
 
gboolean dt_image_needs_rawprepare (const dt_image_t *img)
 
dt_image_pipe_class_t dt_image_pipe_class (const dt_image_t *img)
 
gboolean dt_image_needs_demosaic (const dt_image_t *img)
 
const char * dt_image_pipe_class_name (const dt_image_pipe_class_t klass)
 
void dt_image_buffer_resolve_flags (dt_image_t *img)
 
void dt_image_set_provisional_dsc (dt_image_t *img)
 
static const char * _image_buf_type_to_string (const dt_iop_buffer_type_t type)
 
static const char * _image_colorspace_to_string (const dt_image_colorspace_t colorspace)
 
void dt_image_print_debug_info (const dt_image_t *img, const char *context)
 
const char * dt_image_film_roll_name (const char *path)
 
void dt_image_film_roll_directory (const dt_image_t *img, char *pathname, size_t pathname_len)
 
void dt_image_film_roll (const dt_image_t *img, char *pathname, size_t pathname_len)
 
gboolean dt_image_get_xmp_mode ()
 
gboolean dt_image_safe_remove (const int32_t imgid)
 
dt_image_path_source_t dt_image_choose_input_path (const dt_image_t *img, char *pathname, size_t pathname_len, gboolean force_cache)
 
void dt_image_full_path (const int32_t imgid, char *pathname, size_t pathname_len, gboolean *from_cache, const char *calling_func)
 Get the full path of an image out of the database.
 
void dt_image_local_copy_paths_from_fullpath (const char *fullpath, int32_t imgid, char *local_copy_path, size_t local_copy_len, char *local_copy_legacy_path, size_t local_copy_legacy_len)
 
void dt_image_path_append_version_no_db (int version, char *pathname, size_t pathname_len)
 
void dt_image_path_append_version (const int32_t imgid, char *pathname, size_t pathname_len)
 
void dt_image_print_exif (const dt_image_t *img, char *line, size_t line_len)
 
int dt_image_get_xmp_rating_from_flags (const int flags)
 
int dt_image_get_xmp_rating (const dt_image_t *img)
 
void dt_image_set_xmp_rating (dt_image_t *img, const int rating)
 
void dt_image_get_location (const int32_t imgid, dt_image_geoloc_t *geoloc)
 
static void _set_location (const int32_t imgid, const dt_image_geoloc_t *geoloc)
 
static void _set_datetime (const int32_t imgid, const char *datetime)
 
static void _geotag_undo_data_free (gpointer data)
 
static void _image_set_location (GList *imgs, const dt_image_geoloc_t *geoloc, GList **undo, const gboolean undo_on)
 
void dt_image_set_locations (const GList *imgs, const dt_image_geoloc_t *geoloc, const gboolean undo_on)
 
void dt_image_set_location (const int32_t imgid, const dt_image_geoloc_t *geoloc, const gboolean undo_on, const gboolean group_on)
 
static void _image_set_images_locations (const GList *img, const GArray *gloc, GList **undo, const gboolean undo_on)
 
void dt_image_set_images_locations (const GList *imgs, const GArray *gloc, const gboolean undo_on)
 
void dt_image_history_changed (const int32_t imgid, const gboolean refresh_filmstrip)
 
void dt_image_set_flip (const int32_t imgid, const dt_image_orientation_t orientation)
 
dt_image_orientation_t dt_image_get_orientation (const int32_t imgid)
 
void dt_image_flip (const int32_t imgid, const int32_t cw)
 
int32_t dt_image_duplicate (const int32_t imgid)
 
static int32_t _image_duplicate_with_version_ext (const int32_t imgid, const int32_t newversion)
 
int32_t dt_image_duplicate_with_version (const int32_t imgid, const int32_t newversion)
 
void dt_image_remove (const int32_t imgid)
 
uint32_t dt_image_altered (const int32_t imgid)
 
void dt_image_cleanup (void)
 
static int _valid_glob_match (const char *const name, size_t offset)
 
GList * dt_image_find_xmps (const char *filename)
 
int dt_image_read_duplicates (const uint32_t id, const char *filename, const gboolean clear_selection)
 
static int32_t _image_import_internal (const int32_t film_id, const char *filename, gboolean lua_locking, gboolean raise_signals)
 
int32_t dt_image_get_id_full_path (const gchar *filename)
 
int32_t dt_image_get_id (int32_t film_id, const gchar *filename)
 
int32_t dt_image_import (const int32_t film_id, const char *filename, gboolean raise_signals)
 
int32_t dt_image_import_lua (const int32_t film_id, const char *filename)
 
void dt_image_init (dt_image_t *img)
 
void dt_image_refresh_makermodel (dt_image_t *img)
 
int32_t dt_image_rename (const int32_t imgid, const int32_t filmid, const gchar *newname)
 
int32_t dt_image_move (const int32_t imgid, const int32_t filmid)
 
int32_t dt_image_copy_rename (const int32_t imgid, const int32_t filmid, const gchar *newname)
 
int32_t dt_image_copy (const int32_t imgid, const int32_t filmid)
 
int dt_image_local_copy_set (const int32_t imgid)
 
static int _nb_other_local_copy_for (const int32_t imgid)
 
int dt_image_local_copy_reset (const int32_t imgid)
 
static void _write_timestamp_stmt_ensure (void)
 
static int64_t _write_timestamp_get (const int32_t imgid)
 
static void _write_timestamp_set_now (const int32_t imgid)
 
static gboolean _sidecar_is_up_to_date (const dt_image_t *img)
 
static int _write_sidecar_file_from_image_locked (const dt_image_t *img)
 
int dt_image_write_sidecar_file (const int32_t imgid)
 
void dt_image_synch_xmps (const GList *img)
 
void dt_image_synch_xmp (const int selected)
 
void dt_image_synch_all_xmp (const gchar *pathname)
 
void dt_image_local_copy_synch ()
 
void dt_image_get_datetime (const int32_t imgid, char *datetime)
 
static void _datetime_undo_data_free (gpointer data)
 
static void _image_set_datetimes (const GList *img, const GArray *dtime, GList **undo, const gboolean undo_on)
 
void dt_image_set_datetimes (const GList *imgs, const GArray *dtime, const gboolean undo_on)
 
static void _image_set_datetime (const GList *img, const char *datetime, GList **undo, const gboolean undo_on)
 
void dt_image_set_datetime (const GList *imgs, const char *datetime, const gboolean undo_on)
 
char * dt_image_get_audio_path_from_path (const char *image_path)
 
char * dt_image_get_audio_path (const int32_t imgid)
 
static char * _text_path_legacy_if_exists (const char *image_path)
 
static char * _text_path_legacy_build (const char *image_path)
 
char * dt_image_get_text_path_from_path (const char *image_path)
 
char * dt_image_build_text_path_from_path (const char *image_path)
 
char * dt_image_get_text_path (const int32_t imgid)
 
float dt_image_get_exposure_bias (const struct dt_image_t *image_storage)
 
char * dt_image_camera_missing_sample_message (const struct dt_image_t *img, gboolean logmsg)
 
void dt_image_check_camera_missing_sample (const struct dt_image_t *img)
 
void dt_get_dirname_from_imgid (gchar *dir, const int32_t imgid)
 

Variables

static sqlite3_stmt * _image_altered_stmt = NULL
 
static dt_pthread_mutex_t _image_stmt_mutex
 
static gsize _image_stmt_mutex_inited = 0
 
static sqlite3_stmt * _write_timestamp_select_stmt = NULL
 
static sqlite3_stmt * _write_timestamp_update_stmt = NULL
 
static dt_pthread_mutex_t _write_timestamp_stmt_mutex
 
static gsize _write_timestamp_stmt_mutex_inited = 0
 

Typedef Documentation

◆ _datetime_t

typedef struct _datetime_t _datetime_t

◆ dt_undo_datetime_t

◆ dt_undo_duplicate_t

◆ dt_undo_geotag_t

◆ dt_undo_monochrome_t

Function Documentation

◆ _copy_text_sidecar_if_present()

static void _copy_text_sidecar_if_present ( const char *  src_image_path,
const char *  dest_image_path 
)
static

◆ _datetime_undo_data_free()

static void _datetime_undo_data_free ( gpointer  data)
static

Definition at line 2853 of file common/image.c.

References dt_free_gpointer().

Referenced by dt_image_set_datetime(), and dt_image_set_datetimes().

◆ _geotag_undo_data_free()

static void _geotag_undo_data_free ( gpointer  data)
static

Definition at line 924 of file common/image.c.

References dt_free_gpointer().

Referenced by dt_image_set_images_locations(), and dt_image_set_locations().

◆ _image_buf_type_to_string()

static const char * _image_buf_type_to_string ( const dt_iop_buffer_type_t  type)
static

Definition at line 413 of file common/image.c.

References type, TYPE_FLOAT, TYPE_UINT16, TYPE_UINT8, and TYPE_UNKNOWN.

Referenced by dt_image_print_debug_info().

◆ _image_colorspace_to_string()

static const char * _image_colorspace_to_string ( const dt_image_colorspace_t  colorspace)
static

◆ _image_duplicate_with_version()

◆ _image_duplicate_with_version_ext()

static int32_t _image_duplicate_with_version_ext ( const int32_t  imgid,
const int32_t  newversion 
)
static

◆ _image_import_internal()

◆ _image_matrix_has_data()

static gboolean _image_matrix_has_data ( const float *  matrix,
const int  count 
)
static

Definition at line 246 of file common/image.c.

References FALSE, i, and matrix.

Referenced by dt_image_is_matrix_correction_supported().

◆ _image_set_datetime()

static void _image_set_datetime ( const GList *  img,
const char *  datetime,
GList **  undo,
const gboolean  undo_on 
)
static

◆ _image_set_datetimes()

static void _image_set_datetimes ( const GList *  img,
const GArray *  dtime,
GList **  undo,
const gboolean  undo_on 
)
static

◆ _image_set_images_locations()

static void _image_set_images_locations ( const GList *  img,
const GArray *  gloc,
GList **  undo,
const gboolean  undo_on 
)
static

◆ _image_set_location()

static void _image_set_location ( GList *  imgs,
const dt_image_geoloc_t geoloc,
GList **  undo,
const gboolean  undo_on 
)
static

◆ _image_set_monochrome_flag()

◆ _image_stmt_mutex_ensure()

static void _image_stmt_mutex_ensure ( void  )
inlinestatic

◆ _move_text_sidecar_if_present()

static void _move_text_sidecar_if_present ( const char *  src_image_path,
const char *  dest_image_path,
const gboolean  overwrite 
)
static

◆ _nb_other_local_copy_for()

static int _nb_other_local_copy_for ( const int32_t  imgid)
static

◆ _pop_undo()

◆ _pop_undo_execute()

static void _pop_undo_execute ( const int32_t  imgid,
const gboolean  before,
const gboolean  after 
)
static

Definition at line 241 of file common/image.c.

References _image_set_monochrome_flag(), and FALSE.

Referenced by _pop_undo().

◆ _set_datetime()

static void _set_datetime ( const int32_t  imgid,
const char *  datetime 
)
static

◆ _set_location()

static void _set_location ( const int32_t  imgid,
const dt_image_geoloc_t geoloc 
)
static

◆ _sidecar_is_up_to_date()

static gboolean _sidecar_is_up_to_date ( const dt_image_t img)
static

◆ _text_path_legacy_build()

static char * _text_path_legacy_build ( const char *  image_path)
static

◆ _text_path_legacy_if_exists()

static char * _text_path_legacy_if_exists ( const char *  image_path)
static

Definition at line 2975 of file common/image.c.

References dt_free.

Referenced by dt_image_get_text_path_from_path().

◆ _valid_glob_match()

static int _valid_glob_match ( const char *const  name,
size_t  offset 
)
static

Definition at line 1414 of file common/image.c.

References FALSE, i, and name.

Referenced by dt_image_find_xmps().

◆ _write_sidecar_file_from_image_locked()

◆ _write_timestamp_get()

◆ _write_timestamp_set_now()

◆ _write_timestamp_stmt_ensure()

static void _write_timestamp_stmt_ensure ( void  )
static

◆ dt_get_dirname_from_imgid()

void dt_get_dirname_from_imgid ( gchar *  dir,
const int32_t  imgid 
)

get dirname from imgid

Definition at line 3158 of file common/image.c.

References dt_image_full_path(), FALSE, and PATH_MAX.

Referenced by dt_collection_load_filmroll().

◆ dt_image_altered()

uint32_t dt_image_altered ( const int32_t  imgid)

◆ dt_image_buffer_resolve_flags()

void dt_image_buffer_resolve_flags ( dt_image_t img)

Finalize the buffer-derived type flags right after a codec has populated img->dsc: sets/clears DT_IMAGE_MOSAIC from dsc.filters and sets DT_IMAGE_BUFFER_RESOLVED. This is the single place where the dsc->flags type mapping is decided; the result is persisted to the database through the regular image-cache writeback.

Definition at line 359 of file common/image.c.

References dt_iop_buffer_dsc_t::datatype, dt_image_t::dsc, DT_IMAGE_BUFFER_RESOLVED, DT_IMAGE_HDR, DT_IMAGE_LDR, DT_IMAGE_MOSAIC, dt_image_needs_rawprepare(), dt_iop_buffer_dsc_t::filters, dt_image_t::flags, IS_NULL_PTR, and TYPE_FLOAT.

Referenced by dt_imageio_open().

◆ dt_image_build_text_path_from_path()

char * dt_image_build_text_path_from_path ( const char *  image_path)

Definition at line 3019 of file common/image.c.

References _text_path_legacy_build(), and IS_NULL_PTR.

Referenced by _import_copy_txt(), and _text_sidecar_save_path().

◆ dt_image_camera_missing_sample_message()

char * dt_image_camera_missing_sample_message ( const struct dt_image_t img,
gboolean  logmsg 
)

handle message for missing camera samples reported by rawspeed

Definition at line 3121 of file common/image.c.

References dt_image_t::camera_maker, dt_image_t::camera_model, dt_free, and dt_util_str_replace().

Referenced by dt_image_check_camera_missing_sample().

◆ dt_image_check_camera_missing_sample()

void dt_image_check_camera_missing_sample ( const struct dt_image_t img)

◆ dt_image_choose_input_path()

◆ dt_image_cleanup()

void dt_image_cleanup ( void  )

cleanup cached statements

Definition at line 1401 of file common/image.c.

References _image_altered_stmt, _image_stmt_mutex, _image_stmt_mutex_ensure(), dt_pthread_mutex_lock(), and dt_pthread_mutex_unlock().

Referenced by dt_cleanup().

◆ dt_image_copy()

int32_t dt_image_copy ( const int32_t  imgid,
const int32_t  filmid 
)

physically copy image to the folder of the film roll with filmid and duplicate update database entries.

Definition at line 2439 of file common/image.c.

References dt_image_copy_rename().

Referenced by dt_control_copy_images_job_run().

◆ dt_image_copy_rename()

int32_t dt_image_copy_rename ( const int32_t  imgid,
const int32_t  filmid,
const gchar *  newname 
)

◆ dt_image_duplicate()

int32_t dt_image_duplicate ( const int32_t  imgid)

duplicates the given image in the database.

Definition at line 1157 of file common/image.c.

References dt_image_duplicate_with_version().

Referenced by _history_style_apply(), and dt_control_duplicate_images_job_run().

◆ dt_image_duplicate_with_version()

int32_t dt_image_duplicate_with_version ( const int32_t  imgid,
const int32_t  newversion 
)

duplicates the given image in the database with the duplicate getting the supplied version number. if that version already exists just return the imgid without producing new duplicate. called with newversion -1 a new duplicate is produced with the next free version number.

Definition at line 1342 of file common/image.c.

References _image_duplicate_with_version(), and TRUE.

Referenced by dt_image_duplicate().

◆ dt_image_film_roll()

void dt_image_film_roll ( const dt_image_t img,
char *  pathname,
size_t  pathname_len 
)

returns the film roll name, i.e. without the path.

Definition at line 566 of file common/image.c.

References darktable, darktable_t::db, dt_database_get(), DT_DEBUG_SQLITE3_BIND_INT, DT_DEBUG_SQLITE3_PREPARE_V2, dt_image_film_roll_name(), f, and dt_image_t::film_id.

◆ dt_image_film_roll_directory()

void dt_image_film_roll_directory ( const dt_image_t img,
char *  pathname,
size_t  pathname_len 
)

returns the full directory of the associated film roll.

Definition at line 550 of file common/image.c.

References darktable, darktable_t::db, dt_database_get(), DT_DEBUG_SQLITE3_BIND_INT, DT_DEBUG_SQLITE3_PREPARE_V2, f, and dt_image_t::film_id.

Referenced by _jump_to(), load_xmp_callback(), and update_preview_cb().

◆ dt_image_film_roll_name()

const char * dt_image_film_roll_name ( const char *  path)

returns the portion of the path used for the film roll name.

Definition at line 525 of file common/image.c.

References CLAMPS, and dt_conf_get_int().

Referenced by _populate_list(), dt_image_cache_write_release(), dt_image_film_roll(), dt_image_from_stmt(), and pretty_print_collection().

◆ dt_image_find_xmps()

GList * dt_image_find_xmps ( const char *  filename)

finds all xmp duplicates for the given image in the database.

Definition at line 1430 of file common/image.c.

References _valid_glob_match(), dt_util_test_image_file(), i, IS_NULL_PTR, PATH_MAX, and win_image_find_duplicates().

Referenced by _import_copy_xmp(), dt_control_delete_images_job_run(), and dt_image_read_duplicates().

◆ dt_image_flip()

◆ dt_image_full_path()

void dt_image_full_path ( const int32_t  imgid,
char *  pathname,
size_t  pathname_len,
gboolean *  from_cache,
const char *  calling_func 
)

◆ dt_image_get_audio_path()

char * dt_image_get_audio_path ( const int32_t  imgid)

helper function to get the audio file filename that is accompanying the image. g_free() after use

Definition at line 2966 of file common/image.c.

References dt_image_full_path(), dt_image_get_audio_path_from_path(), FALSE, and PATH_MAX.

Referenced by dt_view_audio_start().

◆ dt_image_get_audio_path_from_path()

char * dt_image_get_audio_path_from_path ( const char *  image_path)

Definition at line 2943 of file common/image.c.

References dt_free.

Referenced by _image_import_internal(), and dt_image_get_audio_path().

◆ dt_image_get_datetime()

◆ dt_image_get_exposure_bias()

float dt_image_get_exposure_bias ( const struct dt_image_t image_storage)

Definition at line 3105 of file common/image.c.

References dt_image_t::exif_exposure_bias.

Referenced by reload_defaults().

◆ dt_image_get_id()

int32_t dt_image_get_id ( int32_t  film_id,
const gchar *  filename 
)

◆ dt_image_get_id_full_path()

int32_t dt_image_get_id_full_path ( const gchar *  filename)

get image id by filename

Definition at line 1822 of file common/image.c.

References darktable, darktable_t::db, dt_database_get(), DT_DEBUG_SQLITE3_BIND_TEXT, DT_DEBUG_SQLITE3_PREPARE_V2, and dt_free.

Referenced by dt_image_synch_all_xmp().

◆ dt_image_get_location()

◆ dt_image_get_orientation()

◆ dt_image_get_text_path()

char * dt_image_get_text_path ( const int32_t  imgid)

helper function to get the text file filename that is accompanying the image. g_free() after use

Definition at line 3086 of file common/image.c.

References dt_image_full_path(), dt_image_get_text_path_from_path(), FALSE, PATH_MAX, and TRUE.

Referenced by _get_base_value().

◆ dt_image_get_text_path_from_path()

char * dt_image_get_text_path_from_path ( const char *  image_path)

◆ dt_image_get_xmp_mode()

◆ dt_image_get_xmp_rating()

int dt_image_get_xmp_rating ( const dt_image_t img)

Definition at line 804 of file common/image.c.

References dt_image_get_xmp_rating_from_flags(), and dt_image_t::flags.

◆ dt_image_get_xmp_rating_from_flags()

int dt_image_get_xmp_rating_from_flags ( const int  flags)

◆ dt_image_history_changed()

void dt_image_history_changed ( const int32_t  imgid,
const gboolean  refresh_filmstrip 
)

Notify the caches and GUI that an image's development history changed. Reloads the cached image metadata from the DB (so history_items, the "altered" flag that the thumbnail regeneration uses to pick raw processing over the embedded JPEG, is correct), drops the stale rendered thumbnail and requests a refresh. Callers MUST have already persisted the new history to the DB. Pass refresh_filmstrip = FALSE from darkroom write paths: the filmstrip is best-effort and must not steal pipeline resources from the realtime main preview.

Definition at line 1022 of file common/image.c.

References darktable, dt_image_cache_get_reload(), DT_IMAGE_CACHE_RELAXED, dt_image_cache_write_release(), dt_mipmap_cache_remove(), dt_thumbtable_refresh_thumbnail, darktable_t::gui, darktable_t::image_cache, darktable_t::mipmap_cache, dt_ui_t::thumbtable_filmstrip, dt_ui_t::thumbtable_lighttable, TRUE, and dt_gui_gtk_t::ui.

Referenced by _history_load_and_apply_apply(), dt_dev_history_notify_change(), and dt_image_set_flip().

◆ dt_image_import()

int32_t dt_image_import ( int32_t  film_id,
const char *  filename,
gboolean  raise_signals 
)

imports a new image from raw/etc file and adds it to the data base and image cache. Use from threads other than lua.

Definition at line 1861 of file common/image.c.

References _image_import_internal(), and TRUE.

Referenced by _film_import1(), _import_job(), create_test_image(), dt_control_merge_hdr_job_run(), dt_image_import_job_run(), dt_load_from_string(), and main().

◆ dt_image_import_lua()

int32_t dt_image_import_lua ( int32_t  film_id,
const char *  filename 
)

imports a new image from raw/etc file and adds it to the data base and image cache. Use from lua thread.

Definition at line 1866 of file common/image.c.

References _image_import_internal(), FALSE, and TRUE.

◆ dt_image_init()

void dt_image_init ( dt_image_t img)

inits basic values to sensible defaults.

Definition at line 1871 of file common/image.c.

References dt_image_t::adobe_XYZ_to_CAM, dt_image_t::cache_entry, dt_image_t::camera_alias, dt_image_t::camera_legacy_makermodel, dt_image_t::camera_maker, dt_image_t::camera_makermodel, dt_image_t::camera_missing_sample, dt_image_t::camera_model, dt_image_t::change_timestamp, dt_iop_buffer_dsc_t::channels, dt_image_t::color_labels, dt_image_t::colorspace, dt_image_t::crop_height, dt_image_t::crop_width, dt_image_t::crop_x, dt_image_t::crop_y, dt_image_t::d65_color_matrix, dt_image_t::datetime, dt_image_t::dng_gain_maps, dt_image_t::dsc, dt_datetime_exif_to_img(), DT_IMAGE_COLORSPACE_NONE, 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, dt_image_t::export_timestamp, FALSE, dt_image_t::filename, dt_image_t::film_id, dt_image_t::filmroll, dt_image_t::flags, dt_image_t::folder, dt_image_t::fuji_rotation_pos, dt_image_t::fullpath, dt_image_t::geoloc, dt_image_t::group_id, dt_image_t::group_members, dt_image_t::has_audio, dt_image_t::has_localcopy, dt_image_t::height, dt_image_t::history_hash, dt_image_t::history_items, i, dt_image_t::id, dt_image_t::import_timestamp, dt_image_t::is_bw, dt_image_t::is_bw_flow, dt_image_t::is_hdr, k, dt_image_geoloc_t::latitude, dt_image_raw_parameters_t::legacy, dt_image_t::legacy_flip, dt_image_t::loader, LOADER_UNKNOWN, dt_image_t::local_copy_legacy_path, dt_image_t::local_copy_path, dt_image_geoloc_t::longitude, dt_image_t::mipmap_hash, dt_image_t::orientation, ORIENTATION_NULL, dt_image_t::p_height, dt_image_t::p_width, dt_image_t::pixel_aspect_ratio, dt_image_t::print_timestamp, dt_image_t::profile, dt_image_t::profile_size, dt_image_t::rating, dt_image_t::raw_black_level, dt_image_t::raw_black_level_separate, dt_image_t::raw_white_point, dt_image_t::self_hash, TYPE_UNKNOWN, UNKNOWN_IMAGE, dt_image_raw_parameters_t::user_flip, dt_image_t::usercrop, dt_image_t::version, dt_image_t::wb_coeffs, and dt_image_t::width.

Referenced by _dt_collection_lut(), _import_copy_file(), _set_test_path(), dt_dev_init(), dt_image_cache_allocate(), and update_preview_cb().

◆ dt_image_is_hdr()

gboolean dt_image_is_hdr ( const dt_image_t img)

returns non-zero if the image holds high-dynamic-range (floating-point) data. Flag-only test of DT_IMAGE_HDR — set from the decoded buffer datatype (16- or 32-bit float), see dt_image_buffer_resolve_flags(). Use this instead of testing the flag by hand.

Definition at line 182 of file common/image.c.

References DT_IMAGE_HDR, and dt_image_t::flags.

Referenced by _dev_auto_apply_presets(), _gui_presets_popup_menu_show_internal(), _import_get_thumbnail(), _metadata_get_flags(), commit_params(), dt_gui_presets_autoapply_for_module(), dt_image_cache_write_release(), dt_image_from_stmt(), dt_image_pipe_class(), dt_image_print_debug_info(), and image_is_normalized().

◆ dt_image_is_ldr()

gboolean dt_image_is_ldr ( const dt_image_t img)

returns non-zero if the image holds low-dynamic-range (integer, display-referred) data. Flag-only test of DT_IMAGE_LDR — set from the decoded buffer datatype, see dt_image_buffer_resolve_flags(). Use this instead of testing the flag by hand.

Definition at line 177 of file common/image.c.

References DT_IMAGE_LDR, and dt_image_t::flags.

Referenced by _metadata_get_flags(), dt_image_pipe_class(), and dt_image_print_debug_info().

◆ dt_image_is_matrix_correction_supported()

◆ dt_image_is_monochrome()

◆ dt_image_is_mosaiced()

gboolean dt_image_is_mosaiced ( const dt_image_t img)

TRUE if the image has been imported/flagged as carrying a CFA mosaic (DT_IMAGE_MOSAIC). Only authoritative once dt_image_pipe_class_is_provisional() is FALSE.

Definition at line 300 of file common/image.c.

References DT_IMAGE_MOSAIC, and dt_image_t::flags.

Referenced by dt_image_print_debug_info().

◆ dt_image_is_raw()

gboolean dt_image_is_raw ( const dt_image_t img)

returns non-zero if the image is flagged as raw (mosaic-capable) sensor data.

Definition at line 167 of file common/image.c.

References DT_IMAGE_RAW, and dt_image_t::flags.

Referenced by _exif_decode_exif_data(), _insert_default_modules(), _metadata_get_flags(), default_input_format(), default_output_format(), dt_image_print_debug_info(), dt_lightroom_import(), force_enable(), and reload_defaults().

◆ dt_image_is_sraw()

gboolean dt_image_is_sraw ( const dt_image_t img)

TRUE if the image was decoded as already-demosaiced raw (sRAW / linear DNG).

Definition at line 295 of file common/image.c.

References DT_IMAGE_S_RAW, and dt_image_t::flags.

Referenced by dt_image_print_debug_info().

◆ dt_image_local_copy_paths_from_fullpath()

void dt_image_local_copy_paths_from_fullpath ( const char *  fullpath,
int32_t  imgid,
char *  local_copy_path,
size_t  local_copy_len,
char *  local_copy_legacy_path,
size_t  local_copy_legacy_len 
)

pregenerate modern and legacy pathes to local copies from full path

Definition at line 726 of file common/image.c.

References dt_free, dt_loc_get_user_cache_dir(), IS_NULL_PTR, and PATH_MAX.

Referenced by dt_image_cache_write_release(), and dt_image_from_stmt().

◆ dt_image_local_copy_reset()

◆ dt_image_local_copy_set()

◆ dt_image_local_copy_synch()

◆ dt_image_monochrome_flags()

◆ dt_image_move()

int32_t dt_image_move ( const int32_t  imgid,
const int32_t  filmid 
)

physically move image with imgid and its duplicates to the film roll given by filmid. returns -1 on error, 0 on success.

Definition at line 2175 of file common/image.c.

References dt_image_rename().

Referenced by _drop_move_to_folder(), and dt_control_move_images_job_run().

◆ dt_image_needs_demosaic()

gboolean dt_image_needs_demosaic ( const dt_image_t img)

TRUE if the buffer carries a CFA mosaic and therefore needs demosaicing.

Definition at line 341 of file common/image.c.

References dt_image_pipe_class(), and DT_IMAGE_PIPE_MOSAIC_RAW.

Referenced by _cacorrect_supported(), _hotpixels_supported(), _rawdenoise_supported(), dt_image_print_debug_info(), force_enable(), and reload_defaults().

◆ dt_image_needs_rawprepare()

gboolean dt_image_needs_rawprepare ( const dt_image_t img)

◆ dt_image_path_append_version()

void dt_image_path_append_version ( const int32_t  imgid,
char *  pathname,
size_t  pathname_len 
)

◆ dt_image_path_append_version_no_db()

void dt_image_path_append_version_no_db ( int  version,
char *  pathname,
size_t  pathname_len 
)

appends version numbering for duplicated images without querying the db.

Definition at line 753 of file common/image.c.

References c2, and dt_free.

Referenced by dt_control_crawler_run(), and dt_image_path_append_version().

◆ dt_image_pipe_class()

◆ dt_image_pipe_class_is_provisional()

gboolean dt_image_pipe_class_is_provisional ( const dt_image_t img)

TRUE while the class is only a provisional guess from the file extension, i.e. the codec has not decoded the buffer yet (DT_IMAGE_BUFFER_RESOLVED not set).

Definition at line 290 of file common/image.c.

References DT_IMAGE_BUFFER_RESOLVED, and dt_image_t::flags.

Referenced by dt_image_print_debug_info().

◆ dt_image_pipe_class_name()

const char * dt_image_pipe_class_name ( const dt_image_pipe_class_t  klass)

◆ dt_image_print_debug_info()

void dt_image_print_debug_info ( const dt_image_t img,
const char *  context 
)

debug helper: dump image flags and buffer details (DT_DEBUG_IMAGEIO)

Definition at line 443 of file common/image.c.

References _image_buf_type_to_string(), _image_colorspace_to_string(), bit_depth, dt_iop_buffer_dsc_t::bpp, bpp, dt_iop_buffer_dsc_t::channels, dt_image_t::colorspace, dt_image_t::crop_height, dt_image_t::crop_width, dt_image_t::crop_x, dt_image_t::crop_y, dt_iop_buffer_dsc_t::cst, dt_image_t::d65_color_matrix, dt_iop_buffer_dsc_t::datatype, dt_image_t::dsc, DT_DEBUG_IMAGEIO, DT_IMAGE_4BAYER, DT_IMAGE_AUTO_PRESETS_APPLIED, DT_IMAGE_HAS_ADDITIONAL_DNG_TAGS, DT_IMAGE_HAS_TXT, DT_IMAGE_HAS_WAV, dt_image_is_hdr(), dt_image_is_ldr(), dt_image_is_matrix_correction_supported(), dt_image_is_monochrome(), dt_image_is_mosaiced(), dt_image_is_raw(), dt_image_is_sraw(), DT_IMAGE_LOCAL_COPY, DT_IMAGE_MONOCHROME_BAYER, dt_image_monochrome_flags(), DT_IMAGE_MONOCHROME_PREVIEW, dt_image_needs_demosaic(), dt_image_needs_rawprepare(), DT_IMAGE_NO_LEGACY_PRESETS, dt_image_pipe_class(), dt_image_pipe_class_is_provisional(), dt_image_pipe_class_name(), DT_IMAGE_REJECTED, DT_IMAGE_REMOVE, DT_IMAGE_S_RAW, dt_image_use_monochrome_workflow(), dt_print(), dt_image_t::filename, dt_iop_buffer_dsc_t::filters, dt_image_t::flags, flags, dt_image_t::fullpath, dt_image_t::has_audio, dt_image_t::has_localcopy, dt_image_t::height, dt_image_t::id, dt_image_t::is_bw, dt_image_t::is_bw_flow, dt_image_t::is_hdr, IS_NULL_PTR, dt_image_t::orientation, dt_image_t::p_height, dt_image_t::p_width, dt_image_t::pixel_aspect_ratio, dt_iop_buffer_dsc_t::processed_maximum, dt_image_t::raw_black_level, dt_iop_buffer_dsc_t::raw_black_level, dt_image_t::raw_black_level_separate, dt_image_t::raw_white_point, dt_iop_buffer_dsc_t::raw_white_point, dt_iop_buffer_dsc_t::rawprepare, TYPE_FLOAT, TYPE_UINT16, TYPE_UINT8, TYPE_UNKNOWN, and dt_image_t::width.

Referenced by reload_defaults().

◆ dt_image_print_exif()

void dt_image_print_exif ( const dt_image_t img,
char *  line,
size_t  line_len 
)

prints a one-line exif information string.

Definition at line 787 of file common/image.c.

References dt_free, dt_util_format_exposure(), dt_image_t::exif_aperture, dt_image_t::exif_exposure, dt_image_t::exif_focal_length, and dt_image_t::exif_iso.

Referenced by _get_base_value(), and finalize_store().

◆ dt_image_read_duplicates()

◆ dt_image_refresh_makermodel()

◆ dt_image_remove()

◆ dt_image_rename()

int32_t dt_image_rename ( const int32_t  imgid,
const int32_t  filmid,
const gchar *  newname 
)

physically move image with imgid and its duplicates to the film roll given by filmid and the name given by newname. returns -1 on error, 0 on success.

Todo:
: several places where string truncation could occur unnoticed

Definition at line 1973 of file common/image.c.

References _move_text_sidecar_if_present(), darktable, darktable_t::db, dt_control_log(), dt_database_get(), DT_DEBUG_SQLITE3_BIND_INT, DT_DEBUG_SQLITE3_PREPARE_V2, dt_free, dt_image_cache_get(), dt_image_cache_read_release(), DT_IMAGE_CACHE_SAFE, dt_image_cache_write_release(), dt_image_choose_input_path(), dt_image_full_path(), dt_image_path_append_version(), DT_MAX_FILENAME_LEN, FALSE, dt_image_t::filename, dt_image_t::film_id, darktable_t::image_cache, PATH_MAX, and TRUE.

Referenced by dt_image_move().

◆ dt_image_safe_remove()

gboolean dt_image_safe_remove ( const int32_t  imgid)

◆ dt_image_set_datetime()

void dt_image_set_datetime ( const GList *  imgs,
const char *  datetime,
const gboolean  undo_on 
)

◆ dt_image_set_datetimes()

void dt_image_set_datetimes ( const GList *  imgs,
const GArray *  dtime,
const gboolean  undo_on 
)

◆ dt_image_set_flip()

void dt_image_set_flip ( const int32_t  imgid,
const dt_image_orientation_t  orientation 
)

◆ dt_image_set_images_locations()

void dt_image_set_images_locations ( const GList *  imgs,
const GArray *  gloc,
const gboolean  undo_on 
)

◆ dt_image_set_location()

void dt_image_set_location ( const int32_t  imgid,
const dt_image_geoloc_t geoloc,
const gboolean  undo_on,
const gboolean  group_on 
)

set image location lon/lat/ele

Definition at line 969 of file common/image.c.

References dt_act_on_get_images(), dt_grouping_add_grouped_images(), dt_image_set_locations(), and UNKNOWN_IMAGE.

Referenced by dt_lightroom_import().

◆ dt_image_set_locations()

void dt_image_set_locations ( const GList *  img,
const dt_image_geoloc_t geoloc,
const gboolean  undo_on 
)

◆ dt_image_set_monochrome_flag()

void dt_image_set_monochrome_flag ( const int32_t  imgid,
gboolean  monochrome 
)

set the monochrome flags if monochrome is TRUE and clear it otherwise

Definition at line 236 of file common/image.c.

References _image_set_monochrome_flag(), and TRUE.

Referenced by dt_control_monochrome_images_job_run().

◆ dt_image_set_provisional_dsc()

void dt_image_set_provisional_dsc ( dt_image_t img)

Seed a provisional img->dsc descriptor from the (extension-derived) pipeline class so the first pipeline stage has a usable contract before the file is decoded. No-op once the buffer has been resolved (DT_IMAGE_BUFFER_RESOLVED).

Definition at line 384 of file common/image.c.

References dt_iop_buffer_dsc_t::channels, dt_iop_buffer_dsc_t::cst, dt_iop_buffer_dsc_t::datatype, dt_image_t::dsc, DT_IMAGE_BUFFER_RESOLVED, dt_image_pipe_class(), DT_IMAGE_PIPE_LINEAR_RAW, DT_IMAGE_PIPE_MOSAIC_RAW, DT_IMAGE_PIPE_RGB_HDR, DT_IMAGE_PIPE_RGB_LDR, DT_IMAGE_PIPE_UNKNOWN, dt_iop_buffer_dsc_update_bpp(), dt_iop_buffer_dsc_t::filters, dt_image_t::flags, IOP_CS_RAW, IOP_CS_RGB, IS_NULL_PTR, TYPE_FLOAT, TYPE_UINT16, and TYPE_UINT8.

Referenced by dt_image_from_stmt().

◆ dt_image_set_xmp_rating()

void dt_image_set_xmp_rating ( dt_image_t img,
const int  rating 
)

◆ dt_image_synch_all_xmp()

◆ dt_image_synch_xmp()

◆ dt_image_synch_xmps()

◆ dt_image_use_monochrome_workflow()

gboolean dt_image_use_monochrome_workflow ( const dt_image_t img)

returns true if the image has been tested to be monochrome and the image wants monochrome workflow

Definition at line 274 of file common/image.c.

References DT_IMAGE_MONOCHROME, DT_IMAGE_MONOCHROME_BAYER, DT_IMAGE_MONOCHROME_PREVIEW, DT_IMAGE_MONOCHROME_WORKFLOW, and dt_image_t::flags.

Referenced by dt_image_cache_write_release(), dt_image_from_stmt(), and dt_image_print_debug_info().

◆ dt_image_write_sidecar_file()

Variable Documentation

◆ _image_altered_stmt

sqlite3_stmt* _image_altered_stmt = NULL
static

Definition at line 113 of file common/image.c.

Referenced by dt_image_altered(), and dt_image_cleanup().

◆ _image_stmt_mutex

dt_pthread_mutex_t _image_stmt_mutex
static

Definition at line 114 of file common/image.c.

Referenced by _image_stmt_mutex_ensure(), dt_image_altered(), and dt_image_cleanup().

◆ _image_stmt_mutex_inited

gsize _image_stmt_mutex_inited = 0
static

Definition at line 115 of file common/image.c.

Referenced by _image_stmt_mutex_ensure().

◆ _write_timestamp_select_stmt

sqlite3_stmt* _write_timestamp_select_stmt = NULL
static

Definition at line 2627 of file common/image.c.

Referenced by _write_timestamp_get().

◆ _write_timestamp_stmt_mutex

dt_pthread_mutex_t _write_timestamp_stmt_mutex
static

◆ _write_timestamp_stmt_mutex_inited

gsize _write_timestamp_stmt_mutex_inited = 0
static

Definition at line 2630 of file common/image.c.

Referenced by _write_timestamp_stmt_ensure().

◆ _write_timestamp_update_stmt

sqlite3_stmt* _write_timestamp_update_stmt = NULL
static

Definition at line 2628 of file common/image.c.

Referenced by _write_timestamp_set_now().