lib/evas/cserve2/evas_cs2_utils.c
bin_evas_evas_cserve2_CPPFLAGS = -I$(top_builddir)/src/lib/efl \
+-I$(top_srcdir)/src/lib/evas \
-I$(top_srcdir)/src/lib/evas/include \
-I$(top_srcdir)/src/lib/evas/cserve2 \
-DPACKAGE_BIN_DIR=\"$(bindir)\" \
bin_evas_evas_cserve2_client_SOURCES = \
bin/evas/evas_cserve2_client.c
bin_evas_evas_cserve2_client_CPPFLAGS = -I$(top_builddir)/src/lib/efl \
+-I$(top_srcdir)/src/lib/evas \
-I$(top_srcdir)/src/lib/evas/cserve2 \
@EINA_CFLAGS@
bin_evas_evas_cserve2_client_LDADD = @USE_EINA_LIBS@
bin_evas_evas_cserve2_usage_SOURCES = \
bin/evas/evas_cserve2_usage.c
bin_evas_evas_cserve2_usage_CPPFLAGS = -I$(top_builddir)/src/lib/efl \
+-I$(top_srcdir)/src/lib/evas \
-I$(top_srcdir)/src/lib/evas/cserve2 \
@EINA_CFLAGS@
bin_evas_evas_cserve2_usage_LDADD = @USE_EINA_LIBS@
bin_evas_evas_cserve2_debug_SOURCES = \
bin/evas/evas_cserve2_debug.c
bin_evas_evas_cserve2_debug_CPPFLAGS = -I$(top_builddir)/src/lib/efl \
+-I$(top_srcdir)/src/lib/evas \
-I$(top_srcdir)/src/lib/evas/cserve2 \
@EINA_CFLAGS@
bin_evas_evas_cserve2_debug_LDADD = @USE_EINA_LIBS@
$(lib_evas_file_SOURCES)
bin_evas_evas_cserve2_slave_CPPFLAGS = -I$(top_builddir)/src/lib/efl \
+-I$(top_srcdir)/src/lib/evas \
-I$(top_srcdir)/src/lib/evas/include \
-I$(top_srcdir)/src/lib/evas/cserve2 \
-DPACKAGE_BIN_DIR=\"$(bindir)\" \
bin/evas/dummy_slave.c
bin_evas_dummy_slave_CPPFLAGS = -I$(top_builddir)/src/lib/efl \
+-I$(top_srcdir)/src/lib/evas \
-I$(top_srcdir)/src/lib/evas/include \
-I$(top_srcdir)/src/lib/evas/cserve2 \
@EVAS_CFLAGS@
struct _Slave_Msg_Image_Open {
Eina_Bool has_opts : 1;
Eina_Bool has_loader_data : 1;
+ // Optionally followed by:
+ // Evas_Image_Load_Opts opts;
+ // const char *loader;
};
struct _Slave_Msg_Image_Opened {
#include "evas_cserve2.h"
#include "evas_cs2_utils.h"
+#include <Evas_Loader.h>
+
typedef struct _Entry Entry;
typedef struct _Reference Reference;
typedef struct _File_Data File_Data;
Entry base;
unsigned int file_id;
File_Data *file;
- struct {
- double dpi; // dpi < -1
- int w, h; // w and h < -1
- int scale_down; // scale_down < -1
- int rx, ry, rw, rh; // rx, ry, rw, rh < -1
- int scale_src_x, scale_src_y, scale_src_w, scale_src_h;
- int scale_dst_w, scale_dst_h;
- int scale_smooth;
- int scale_hint;
- Eina_Bool orientation; // orientation == 0
- } opts;
+ Evas_Image_Load_Opts opts;
Shm_Handle *shm;
Eina_Bool alpha_sparse : 1;
Eina_Bool unused : 1;
pathlen = strlen(f->path) + 1;
keylen = strlen(f->key) + 1;
+ memset(&msg, 0, sizeof(msg));
msg.has_loader_data = !!f->loader_data;
loaderlen = msg.has_loader_data ? (strlen(f->loader_data) + 1) : 0;
buf = malloc(size);
if (!buf) return NULL;
- memset(&msg, 0, sizeof(msg));
memcpy(buf, &msg, sizeof(msg));
memcpy(buf + sizeof(msg), f->path, pathlen);
memcpy(buf + sizeof(msg) + pathlen, f->key, keylen);
msg.alpha = i->file->alpha;
msg.opts.w = i->opts.w;
msg.opts.h = i->opts.h;
- msg.opts.rx = i->opts.rx;
- msg.opts.ry = i->opts.ry;
- msg.opts.rw = i->opts.rw;
- msg.opts.rh = i->opts.rh;
- msg.opts.scale_down_by = i->opts.scale_down;
+ msg.opts.rx = i->opts.region.x;
+ msg.opts.ry = i->opts.region.y;
+ msg.opts.rw = i->opts.region.w;
+ msg.opts.rh = i->opts.region.h;
+ msg.opts.scale_down_by = i->opts.scale_down_by;
msg.opts.dpi = i->opts.dpi;
msg.opts.orientation = i->opts.orientation;
static inline Eina_Bool
_scaling_needed(Image_Data *entry, Slave_Msg_Image_Loaded *resp)
{
- return (((entry->opts.scale_dst_w) && (entry->opts.scale_dst_h)) &&
- ((entry->opts.scale_dst_w != resp->w) ||
- (entry->opts.scale_dst_h != resp->h)));
+ return (((entry->opts.scale_load.dst_w) && (entry->opts.scale_load.dst_h)) &&
+ ((entry->opts.scale_load.dst_w != resp->w) ||
+ (entry->opts.scale_load.dst_h != resp->h)));
}
static int
dst_data = scale_map + cserve2_shm_map_offset_get(scale_shm);
DBG("Scaling image ([%d,%d:%dx%d] --> [%d,%d:%dx%d])",
- entry->opts.scale_src_x, entry->opts.scale_src_y,
- entry->opts.scale_src_w, entry->opts.scale_src_h,
+ entry->opts.scale_load.src_x, entry->opts.scale_load.src_y,
+ entry->opts.scale_load.src_w, entry->opts.scale_load.src_h,
0, 0,
- entry->opts.scale_dst_w, entry->opts.scale_dst_h);
+ entry->opts.scale_load.dst_w, entry->opts.scale_load.dst_h);
cserve2_rgba_image_scale_do(src_data, dst_data,
- entry->opts.scale_src_x, entry->opts.scale_src_y,
- entry->opts.scale_src_w, entry->opts.scale_src_h,
+ entry->opts.scale_load.src_x, entry->opts.scale_load.src_y,
+ entry->opts.scale_load.src_w, entry->opts.scale_load.src_h,
0, 0,
- entry->opts.scale_dst_w, entry->opts.scale_dst_h,
- entry->file->alpha, entry->opts.scale_smooth);
+ entry->opts.scale_load.dst_w, entry->opts.scale_load.dst_h,
+ entry->file->alpha, entry->opts.scale_load.smooth);
cserve2_shm_unmap(entry->shm);
cserve2_shm_unmap(scale_shm);
DBG("Original image's shm path %s", cserve2_shm_name_get(orig->shm));
scale_shm =
- cserve2_shm_request(orig->opts.scale_dst_w * orig->opts.scale_dst_h * 4);
+ cserve2_shm_request(orig->opts.scale_load.dst_w * orig->opts.scale_load.dst_h * 4);
DBG("Scale image's shm path %s", cserve2_shm_name_get(scale_shm));
{
uintptr_t image_id;
+ // FIXME: Add degree here?
snprintf(buf, size,
"%u:%0.3f:%dx%d:%d:%d,%d+%dx%d:!([%d,%d:%dx%d]-[%dx%d:%d]):%d",
im->file_id, im->opts.dpi, im->opts.w, im->opts.h,
- im->opts.scale_down, im->opts.rx, im->opts.ry,
- im->opts.rw, im->opts.rh,
- im->opts.scale_src_x, im->opts.scale_src_y,
- im->opts.scale_src_w, im->opts.scale_src_h,
- im->opts.scale_dst_w, im->opts.scale_dst_h, im->opts.scale_smooth,
+ im->opts.scale_down_by, im->opts.region.x, im->opts.region.y,
+ im->opts.region.w, im->opts.region.h,
+ im->opts.scale_load.src_x, im->opts.scale_load.src_y,
+ im->opts.scale_load.src_w, im->opts.scale_load.src_h,
+ im->opts.scale_load.dst_w, im->opts.scale_load.dst_h, im->opts.scale_load.smooth,
im->opts.orientation);
image_id = (uintptr_t)eina_hash_find(image_ids, buf);
im_entry->opts.dpi = msg->opts.dpi;
im_entry->opts.w = msg->opts.w;
im_entry->opts.h = msg->opts.h;
- im_entry->opts.scale_down = msg->opts.scale_down;
- im_entry->opts.rx = msg->opts.rx;
- im_entry->opts.ry = msg->opts.ry;
- im_entry->opts.rw = msg->opts.rw;
- im_entry->opts.rh = msg->opts.rh;
- im_entry->opts.scale_src_x = msg->opts.scale_src_x;
- im_entry->opts.scale_src_y = msg->opts.scale_src_y;
- im_entry->opts.scale_src_w = msg->opts.scale_src_w;
- im_entry->opts.scale_src_h = msg->opts.scale_src_h;
- im_entry->opts.scale_dst_w = msg->opts.scale_dst_w;
- im_entry->opts.scale_dst_h = msg->opts.scale_dst_h;
- im_entry->opts.scale_smooth = msg->opts.scale_smooth;
- im_entry->opts.scale_hint = msg->opts.scale_hint;
+ im_entry->opts.scale_down_by = msg->opts.scale_down_by;
+ im_entry->opts.region.x = msg->opts.region.x;
+ im_entry->opts.region.y = msg->opts.region.y;
+ im_entry->opts.region.w = msg->opts.region.w;
+ im_entry->opts.region.h = msg->opts.region.h;
+ im_entry->opts.scale_load.src_x = msg->opts.scale_load.src_x;
+ im_entry->opts.scale_load.src_y = msg->opts.scale_load.src_y;
+ im_entry->opts.scale_load.src_w = msg->opts.scale_load.src_w;
+ im_entry->opts.scale_load.src_h = msg->opts.scale_load.src_h;
+ im_entry->opts.scale_load.dst_w = msg->opts.scale_load.dst_w;
+ im_entry->opts.scale_load.dst_h = msg->opts.scale_load.dst_h;
+ im_entry->opts.scale_load.smooth = msg->opts.scale_load.smooth;
+ im_entry->opts.scale_load.scale_hint = msg->opts.scale_load.scale_hint;
+ im_entry->opts.degree = msg->opts.degree;
im_entry->opts.orientation = msg->opts.orientation;
return im_entry;
int scale_dst_w, scale_dst_h;
int scale_smooth;
int scale_hint;
+ int degree;
int orientation;
// reading file_id, image_id
_read_line(line, sizeof(line));
sscanf(line, "%d", &scale_hint);
+ // reading degree
+ _read_line(line, sizeof(line));
+ sscanf(line, "%d", °ree);
+
// reading orientation
_read_line(line, sizeof(line));
sscanf(line, "%d", &orientation);
msg->opts.dpi = dpi;
msg->opts.w = w;
msg->opts.h = h;
- msg->opts.scale_down = scale;
- msg->opts.rx = rx;
- msg->opts.ry = ry;
- msg->opts.rw = rw;
- msg->opts.rh = rh;
- msg->opts.scale_src_x = scale_src_x;
- msg->opts.scale_src_y = scale_src_y;
- msg->opts.scale_src_w = scale_src_w;
- msg->opts.scale_src_h = scale_src_h;
- msg->opts.scale_dst_w = scale_dst_w;
- msg->opts.scale_dst_h = scale_dst_h;
- msg->opts.scale_smooth = scale_smooth;
- msg->opts.scale_hint = scale_hint;
+ msg->opts.scale_down_by = scale;
+ msg->opts.region.x = rx;
+ msg->opts.region.y = ry;
+ msg->opts.region.w = rw;
+ msg->opts.region.h = rh;
+ msg->opts.scale_load.src_x = scale_src_x;
+ msg->opts.scale_load.src_y = scale_src_y;
+ msg->opts.scale_load.src_w = scale_src_w;
+ msg->opts.scale_load.src_h = scale_src_h;
+ msg->opts.scale_load.dst_w = scale_dst_w;
+ msg->opts.scale_load.dst_h = scale_dst_h;
+ msg->opts.scale_load.smooth = scale_smooth;
+ msg->opts.scale_load.scale_hint = scale_hint;
+ msg->opts.degree = degree;
msg->opts.orientation = !!orientation;
*size = sizeof(*msg);
INF("Load Options:");
INF("\tdpi: %03.1f", msg->opts.dpi);
INF("\tsize: %dx%d", msg->opts.w, msg->opts.h);
- INF("\tscale down: %d", msg->opts.scale_down);
+ INF("\tscale down: %d", msg->opts.scale_down_by);
INF("\tregion: %d,%d + %dx%d",
- msg->opts.rx, msg->opts.ry, msg->opts.rw, msg->opts.rh);
+ msg->opts.region.x, msg->opts.region.y, msg->opts.region.w, msg->opts.region.h);
INF("\toriginal image's source coord: %d,%d",
- msg->opts.scale_src_x, msg->opts.scale_src_y);
+ msg->opts.scale_load.src_x, msg->opts.scale_load.src_y);
INF("\toriginal image size: %dx%d",
- msg->opts.scale_src_w, msg->opts.scale_src_h);
- INF("\tscale size: %dx%d", msg->opts.scale_dst_w, msg->opts.scale_dst_h);
- INF("\tscale smooth: %d", msg->opts.scale_smooth);
- INF("\tscale hint: %d", msg->opts.scale_hint);
+ msg->opts.scale_load.src_w, msg->opts.scale_load.src_h);
+ INF("\tscale size: %dx%d", msg->opts.scale_load.dst_w, msg->opts.scale_load.dst_h);
+ INF("\tscale smooth: %d", msg->opts.scale_load.smooth);
+ INF("\tscale hint: %d", msg->opts.scale_load.scale_hint);
+ INF("\tdegree: %d", msg->opts.degree);
INF("\torientation: %d", msg->opts.orientation);
if (cserve2_cache_image_opts_set(client, msg) != 0)
{
Slave_Msg_Image_Open *p;
Slave_Msg_Image_Opened result;
- Image_Load_Opts *opts = NULL;
- Evas_Image_Load_Opts load_opts;
+ Evas_Image_Load_Opts opts;
Error_Type err;
const char *loader = NULL, *file, *key, *ptr;
char *resp;
ptr = key + strlen(key) + 1;
if (p->has_opts)
{
- opts = (Image_Load_Opts *)ptr;
- ptr += sizeof(Image_Load_Opts);
+ //opts = (Evas_Image_Load_Opts *)ptr;
+ memcpy(&opts, ptr, sizeof(opts));
+ ptr += sizeof(opts);
}
+ else memset(&opts, 0, sizeof(opts));
if (p->has_loader_data)
loader = ptr;
memset(&result, 0, sizeof(result));
- _image_load_opts_copy(&load_opts, opts);
- if ((err = image_open(file, key, &load_opts, &result, &loader))
+ if ((err = image_open(file, key, &opts, &result, &loader))
!= CSERVE2_NONE)
{
printf("OPEN failed at %s:%d\n", __FUNCTION__, __LINE__);
#ifdef EVAS_CSERVE2
+#include <Evas_Loader.h>
+
typedef enum {
CSERVE2_OPEN = 1,
CSERVE2_OPENED,
Msg_Base base;
unsigned int file_id;
unsigned int image_id;
- struct {
- double dpi;
- int w, h;
- int scale_down;
- int rx, ry, rw, rh;
- int scale_src_x, scale_src_y, scale_src_w, scale_src_h;
- int scale_dst_w, scale_dst_h;
- int scale_smooth;
- int scale_hint;
- Eina_Bool orientation;
- } opts;
+ Evas_Image_Load_Opts opts;
};
struct _Msg_Setoptsed {
msg.file_id = fentry->file_id;
msg.image_id = dentry->image_id;
- msg.opts.scale_down = ie->load_opts.scale_down_by;
+ msg.opts.scale_down_by = ie->load_opts.scale_down_by;
msg.opts.dpi = ie->load_opts.dpi;
msg.opts.w = ie->load_opts.w;
msg.opts.h = ie->load_opts.h;
- msg.opts.rx = ie->load_opts.region.x;
- msg.opts.ry = ie->load_opts.region.y;
- msg.opts.rw = ie->load_opts.region.w;
- msg.opts.rh = ie->load_opts.region.h;
- msg.opts.scale_src_x = ie->load_opts.scale_load.src_x;
- msg.opts.scale_src_y = ie->load_opts.scale_load.src_y;
- msg.opts.scale_src_w = ie->load_opts.scale_load.src_w;
- msg.opts.scale_src_h = ie->load_opts.scale_load.src_h;
- msg.opts.scale_dst_w = ie->load_opts.scale_load.dst_w;
- msg.opts.scale_dst_h = ie->load_opts.scale_load.dst_h;
- msg.opts.scale_smooth = ie->load_opts.scale_load.smooth;
- msg.opts.scale_hint = ie->load_opts.scale_load.scale_hint;
+ msg.opts.region.x = ie->load_opts.region.x;
+ msg.opts.region.y = ie->load_opts.region.y;
+ msg.opts.region.w = ie->load_opts.region.w;
+ msg.opts.region.h = ie->load_opts.region.h;
+ msg.opts.scale_load.src_x = ie->load_opts.scale_load.src_x;
+ msg.opts.scale_load.src_y = ie->load_opts.scale_load.src_y;
+ msg.opts.scale_load.src_w = ie->load_opts.scale_load.src_w;
+ msg.opts.scale_load.src_h = ie->load_opts.scale_load.src_h;
+ msg.opts.scale_load.dst_w = ie->load_opts.scale_load.dst_w;
+ msg.opts.scale_load.dst_h = ie->load_opts.scale_load.dst_h;
+ msg.opts.scale_load.smooth = ie->load_opts.scale_load.smooth;
+ msg.opts.scale_load.scale_hint = ie->load_opts.scale_load.scale_hint;
+ msg.opts.degree = ie->load_opts.degree;
msg.opts.orientation = ie->load_opts.orientation;
if (!_server_send(&msg, sizeof(msg), NULL, NULL))