63 fprintf(stderr, _(
"creating cache directories\n"));
69 fprintf(stderr, _(
"creating cache directory '%s'\n"), dirname);
70 if(g_mkdir_with_parents(dirname, 0750))
72 fprintf(stderr, _(
"could not create directory '%s'!\n"), dirname);
79 size_t image_count = 0, counter = 0;
81 "SELECT COUNT(*) FROM main.images WHERE id >= ?1 AND id <= ?2", -1, &stmt, 0);
84 if(sqlite3_step(stmt) == SQLITE_ROW)
86 image_count = sqlite3_column_int(stmt, 0);
87 sqlite3_finalize(stmt);
96 fprintf(stderr, _(
"warning: no images are matching the requested image id range\n"));
97 if(min_imgid > max_imgid)
99 fprintf(stderr, _(
"warning: did you want to swap these boundaries?\n"));
105 "SELECT id, filename FROM main.images WHERE id >= ?1 AND id <= ?2", -1, &stmt, 0);
108 while(sqlite3_step(stmt) == SQLITE_ROW)
110 const int32_t imgid = sqlite3_column_int(stmt, 0);
111 const char *imgfilename = (
const char*)sqlite3_column_text(stmt, 1);
114 fprintf(stderr,
"image %" G_GSIZE_FORMAT
"/%" G_GSIZE_FORMAT
" (%.02f%%) (id:%d, file=%s)\n", counter, image_count, 100.0 * counter / (
float)image_count, imgid, imgfilename);
116 for(
int k = max_mip;
k >= min_mip &&
k >= 0;
k--)
135 sqlite3_finalize(stmt);
136 fprintf(stderr,
"done\n");
141static void usage(
const char *progname)
144 "usage: %s [-h, --help; --version]\n"
145 " [--min-mip <0-8> (default = 0)] [-m, --max-mip <0-8> (default = 2)]\n"
146 " [--min-imgid <N>] [--max-imgid <N>]\n"
147 " [--core <darktable options>]\n"
149 "When multiple mipmap sizes are requested, the biggest one is computed\n"
150 "while the rest are quickly downsampled.\n"
152 "The --min-imgid and --max-imgid specify the range of internal image ID\n"
153 "numbers to work on.\n",
164 dt_loc_init(NULL, NULL, NULL, NULL, NULL, NULL, NULL);
172 gtk_init_check(&argc, &arg);
178 int32_t max_imgid = INT32_MAX;
181 for(
k = 1;
k < argc;
k++)
183 if(!strcmp(arg[
k],
"-h") || !strcmp(arg[
k],
"--help"))
188 else if(!strcmp(arg[
k],
"--version"))
190 printf(
"this is ansel-generate-cache %s\ncopyright (c) 2014 johannes hanika; 2015 LebedevRI\n",
194 else if((!strcmp(arg[
k],
"-m") || !strcmp(arg[
k],
"--max-mip")) && argc >
k + 1)
199 else if(!strcmp(arg[
k],
"--min-mip") && argc >
k + 1)
204 else if(!strcmp(arg[
k],
"--min-imgid") && argc >
k + 1)
207 min_imgid = (int32_t)
MIN(
MAX(atoi(arg[
k]), 0), INT32_MAX);
209 else if(!strcmp(arg[
k],
"--max-imgid") && argc >
k + 1)
212 max_imgid = (int32_t)
MIN(
MAX(atoi(arg[
k]), 0), INT32_MAX);
214 else if(!strcmp(arg[
k],
"--core"))
223 char **m_arg = malloc(
sizeof(
char *) * (3 + argc -
k + 1));
224 m_arg[m_argc++] =
"ansel-generate-cache";
225 m_arg[m_argc++] =
"--conf";
226 m_arg[m_argc++] =
"write_sidecar_files=never";
227 for(;
k < argc;
k++) m_arg[m_argc++] = arg[
k];
228 m_arg[m_argc] = NULL;
239 fprintf(stderr, _(
"warning: disk backend for thumbnail cache is disabled (cache_disk_backend)\nif you want "
240 "to pre-generate thumbnails and for Ansel to use them, you need to enable disk backend "
241 "for thumbnail cache\nno thumbnails to be generated, done.\n"));
247 if(min_mip > max_mip)
249 fprintf(stderr, _(
"error: ensure that min_mip <= max_mip\n"));
254 fprintf(stderr, _(
"creating complete lighttable thumbnail cache\n"));
const char darktable_package_version[]
int dt_conf_get_bool(const char *name)
int dt_init(int argc, char *argv[], const gboolean init_gui, const gboolean load_data)
sqlite3 * dt_database_get(const dt_database_t *db)
#define DT_DEBUG_SQLITE3_PREPARE_V2(a, b, c, d, e)
#define DT_DEBUG_SQLITE3_BIND_INT(a, b, c)
void dt_loc_get_localedir(char *localedir, size_t bufsize)
void dt_loc_init(const char *datadir, const char *moduledir, const char *localedir, const char *configdir, const char *cachedir, const char *tmpdir, const char *kerneldir)
static void usage(const char *progname)
static int generate_thumbnail_cache(const dt_mipmap_size_t min_mip, const dt_mipmap_size_t max_mip, const int32_t min_imgid, const int32_t max_imgid)
float *const restrict const size_t k
void dt_mipmap_get_cache_filename(char path[PATH_MAX], const dt_mipmap_cache_t *cache, dt_mipmap_size_t mip, const int32_t imgid)
void dt_mimap_cache_evict(dt_mipmap_cache_t *cache, const int32_t imgid)
void dt_mipmap_get_cache_dir(char path[PATH_MAX], const dt_mipmap_cache_t *cache, dt_mipmap_size_t mip)
#define dt_mipmap_cache_get(A, B, C, D, E, F)
#define dt_mipmap_cache_release(A, B)
void dt_osx_prepare_environment()
struct dt_mipmap_cache_t * mipmap_cache
const struct dt_database_t * db
gboolean dt_util_test_image_file(const char *filename)