GeglConfig *gegl_config (void) { if (!config) { config = g_object_new (GEGL_TYPE_CONFIG, NULL); if (g_getenv ("GEGL_QUALITY")) config->quality = atof(g_getenv("GEGL_QUALITY")); if (g_getenv ("GEGL_CACHE_SIZE")) config->cache_size = atoi(g_getenv("GEGL_CACHE_SIZE"))* 1024*1024; if (g_getenv ("GEGL_CHUNK_SIZE")) config->chunk_size = atoi(g_getenv("GEGL_CHUNK_SIZE")); if (g_getenv ("GEGL_TILE_SIZE")) { const gchar *str = g_getenv ("GEGL_TILE_SIZE"); config->tile_width = atoi(str); str = strchr (str, 'x'); if (str) config->tile_height = atoi(str+1); } if (g_getenv ("GEGL_THREADS")) { config->threads = atoi(g_getenv("GEGL_THREADS")); if (config->threads > GEGL_MAX_THREADS) { g_warning ("Tried to use %i threads max is %i", config->threads, GEGL_MAX_THREADS); config->threads = GEGL_MAX_THREADS; } } if (gegl_swap_dir()) config->swap = g_strdup(gegl_swap_dir ()); } return GEGL_CONFIG (config); }
static void gegl_config_use_opencl_notify (GObject *gobject, GParamSpec *pspec, gpointer user_data) { GeglConfig *cfg = GEGL_CONFIG (gobject); g_signal_handlers_block_by_func (gobject, gegl_config_use_opencl_notify, NULL); if (cfg->use_opencl) { gegl_cl_init (NULL); } else { gegl_cl_disable (); } cfg->use_opencl = gegl_cl_is_accelerated(); g_signal_handlers_unblock_by_func (gobject, gegl_config_use_opencl_notify, NULL); }
static void gegl_config_application_license_notify (GObject *gobject, GParamSpec *pspec, gpointer user_data) { GeglConfig *cfg = GEGL_CONFIG (gobject); gegl_operations_set_licenses_from_string (cfg->application_license); }
static void gegl_config_finalize (GObject *gobject) { GeglConfig *config = GEGL_CONFIG (gobject); if (config->swap) g_free (config->swap); G_OBJECT_CLASS (gegl_config_parent_class)->finalize (gobject); }
static void gegl_config_get_property (GObject *gobject, guint property_id, GValue *value, GParamSpec *pspec) { GeglConfig *config = GEGL_CONFIG (gobject); switch (property_id) { case PROP_TILE_CACHE_SIZE: g_value_set_uint64 (value, config->tile_cache_size); break; case PROP_CHUNK_SIZE: g_value_set_int (value, config->chunk_size); break; case PROP_TILE_WIDTH: g_value_set_int (value, config->tile_width); break; case PROP_TILE_HEIGHT: g_value_set_int (value, config->tile_height); break; case PROP_QUALITY: g_value_set_double (value, config->quality); break; case PROP_BABL_TOLERANCE: g_value_set_double (value, config->babl_tolerance); break; case PROP_SWAP: g_value_set_string (value, config->swap); break; case PROP_THREADS: g_value_set_int (value, config->threads); break; case PROP_USE_OPENCL: g_value_set_boolean (value, gegl_cl_is_accelerated()); break; case PROP_QUEUE_SIZE: g_value_set_int (value, config->queue_size); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, property_id, pspec); break; } }
static void gegl_config_set_property (GObject *gobject, guint property_id, const GValue *value, GParamSpec *pspec) { GeglConfig *config = GEGL_CONFIG (gobject); switch (property_id) { case PROP_TILE_CACHE_SIZE: config->tile_cache_size = g_value_get_uint64 (value); break; case PROP_CHUNK_SIZE: config->chunk_size = g_value_get_int (value); break; case PROP_TILE_WIDTH: config->tile_width = g_value_get_int (value); break; case PROP_TILE_HEIGHT: config->tile_height = g_value_get_int (value); break; case PROP_QUALITY: config->quality = g_value_get_double (value); return; case PROP_SWAP: if (config->swap) g_free (config->swap); config->swap = g_value_dup_string (value); break; case PROP_THREADS: _gegl_threads = g_value_get_int (value); return; case PROP_USE_OPENCL: config->use_opencl = g_value_get_boolean (value); break; case PROP_QUEUE_SIZE: config->queue_size = g_value_get_int (value); break; case PROP_APPLICATION_LICENSE: if (config->application_license) g_free (config->application_license); config->application_license = g_value_dup_string (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, property_id, pspec); break; } }
static void gegl_config_set_property (GObject *gobject, guint property_id, const GValue *value, GParamSpec *pspec) { GeglConfig *config = GEGL_CONFIG (gobject); switch (property_id) { case PROP_CACHE_SIZE: config->cache_size = g_value_get_int (value); break; case PROP_CHUNK_SIZE: config->chunk_size = g_value_get_int (value); break; case PROP_TILE_WIDTH: config->tile_width = g_value_get_int (value); break; case PROP_TILE_HEIGHT: config->tile_height = g_value_get_int (value); break; case PROP_QUALITY: config->quality = g_value_get_double (value); return; case PROP_BABL_TOLERANCE: { static gboolean first = TRUE; static gboolean overridden = FALSE; gchar buf[256]; if (first) { if (g_getenv ("BABL_TOLERANCE") != NULL) overridden = TRUE; first = FALSE; } if (!overridden) { config->babl_tolerance = g_value_get_double (value); g_sprintf (buf, "%f", config->babl_tolerance); g_setenv ("BABL_TOLERANCE", buf, 0); /* babl picks up the babl error through the environment, babl * caches valid conversions though so this needs to be set * before any processing is done */ } } return; case PROP_SWAP: if (config->swap) g_free (config->swap); config->swap = g_value_dup_string (value); break; case PROP_THREADS: config->threads = g_value_get_int (value); return; case PROP_USE_OPENCL: config->use_opencl = g_value_get_boolean (value); if (config->use_opencl) gegl_cl_init (NULL); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, property_id, pspec); break; } }