evas/cserve2: use Evas_Image_Load_Opts directly

Image_Data contained a similar struct to the standard Evas struct,
let's not duplicate it uselessly.
This commit is contained in:
Jean-Philippe Andre 2013-07-03 13:32:39 +09:00 committed by Cedric Bail
parent f825bebcdb
commit ca5d174568
8 changed files with 99 additions and 96 deletions

View File

@ -1017,6 +1017,7 @@ lib/evas/cserve2/evas_cs2_utils.h \
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)\" \
@ -1030,6 +1031,7 @@ bin_evas_evas_cserve2_DEPENDENCIES = @USE_EVAS_INTERNAL_LIBS@
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@
@ -1038,6 +1040,7 @@ bin_evas_evas_cserve2_client_DEPENDENCIES = @USE_EINA_INTERNAL_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@
@ -1046,6 +1049,7 @@ bin_evas_evas_cserve2_usage_DEPENDENCIES = @USE_EINA_INTERNAL_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@
@ -1057,6 +1061,7 @@ bin/evas/evas_cserve2_utils.c \
$(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)\" \
@ -1075,6 +1080,7 @@ bin_evas_dummy_slave_SOURCES = \
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@

View File

@ -81,6 +81,9 @@ typedef enum {
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 {

View File

@ -12,6 +12,8 @@
#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;
@ -61,17 +63,7 @@ struct _Image_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;
@ -340,6 +332,7 @@ _open_request_build(File_Data *f, int *bufsize)
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;
@ -347,7 +340,6 @@ _open_request_build(File_Data *f, int *bufsize)
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);
@ -457,11 +449,11 @@ _load_request_build(Image_Data *i, int *bufsize)
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;
@ -493,9 +485,9 @@ _load_request_build(Image_Data *i, int *bufsize)
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
@ -524,17 +516,17 @@ _scaling_do(Shm_Handle *scale_shm, Image_Data *entry)
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);
@ -550,7 +542,7 @@ _scaling_prepare_and_do(Image_Data *orig)
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));
@ -602,14 +594,15 @@ _img_opts_id_get(Image_Data *im, char *buf, int size)
{
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);
@ -1074,19 +1067,20 @@ _image_msg_new(Client *client, Msg_Setopts *msg)
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;

View File

@ -104,6 +104,7 @@ parse_input_setopts(int *size)
int scale_dst_w, scale_dst_h;
int scale_smooth;
int scale_hint;
int degree;
int orientation;
// reading file_id, image_id
@ -146,6 +147,10 @@ parse_input_setopts(int *size)
_read_line(line, sizeof(line));
sscanf(line, "%d", &scale_hint);
// reading degree
_read_line(line, sizeof(line));
sscanf(line, "%d", &degree);
// reading orientation
_read_line(line, sizeof(line));
sscanf(line, "%d", &orientation);
@ -159,19 +164,20 @@ parse_input_setopts(int *size)
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);

View File

@ -102,16 +102,17 @@ _cserve2_client_setopts(Client *client)
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)

View File

@ -507,8 +507,7 @@ handle_image_open(int wfd, void *params)
{
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;
@ -520,15 +519,16 @@ handle_image_open(int wfd, void *params)
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__);

View File

@ -5,6 +5,8 @@
#ifdef EVAS_CSERVE2
#include <Evas_Loader.h>
typedef enum {
CSERVE2_OPEN = 1,
CSERVE2_OPENED,
@ -74,17 +76,7 @@ struct _Msg_Setopts {
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 {

View File

@ -720,22 +720,23 @@ _image_setopts_server_send(Image_Entry *ie)
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))