forked from enlightenment/efl
dont need fmemopen suppor tin evas now... just sue eet directly and dont
duplicate code... SVN revision: 6578
This commit is contained in:
parent
bfe9713eb8
commit
9b184f9bdf
|
@ -101,7 +101,6 @@ for those that want eet and edb image loading ability:
|
||||||
--enable-image-loader-jpeg \
|
--enable-image-loader-jpeg \
|
||||||
--enable-image-loader-eet \
|
--enable-image-loader-eet \
|
||||||
--enable-image-loader-edb \
|
--enable-image-loader-edb \
|
||||||
--enable-fmemopen \
|
|
||||||
--enable-cpu-p2-only \
|
--enable-cpu-p2-only \
|
||||||
--enable-cpu-mmx \
|
--enable-cpu-mmx \
|
||||||
--enable-cpu-sse \
|
--enable-cpu-sse \
|
||||||
|
|
|
@ -60,4 +60,3 @@
|
||||||
#undef BUILD_LOADER_JPEG
|
#undef BUILD_LOADER_JPEG
|
||||||
#undef BUILD_LOADER_EET
|
#undef BUILD_LOADER_EET
|
||||||
#undef BUILD_LOADER_EDB
|
#undef BUILD_LOADER_EDB
|
||||||
#undef BUILD_FMEMOPEN
|
|
||||||
|
|
|
@ -242,7 +242,7 @@ AC_ARG_ENABLE(image-loader-eet,
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE(BUILD_LOADER_EET)
|
AC_DEFINE(BUILD_LOADER_EET)
|
||||||
eet_cflags=`eet-config --cflags`
|
eet_cflags=`eet-config --cflags`
|
||||||
eet_libs=`eet-config --libs`" -lz"
|
eet_libs=`eet-config --libs`
|
||||||
], AC_MSG_RESULT(no)
|
], AC_MSG_RESULT(no)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -257,17 +257,6 @@ AC_ARG_ENABLE(image-loader-edb,
|
||||||
], AC_MSG_RESULT(no)
|
], AC_MSG_RESULT(no)
|
||||||
)
|
)
|
||||||
|
|
||||||
########### fmemopen support
|
|
||||||
|
|
||||||
AC_MSG_CHECKING(whether to build memory fopen support)
|
|
||||||
|
|
||||||
AC_ARG_ENABLE(fmemopen,
|
|
||||||
[ --enable-fmemopen enable C code], [
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
AC_DEFINE(BUILD_FMEMOPEN)
|
|
||||||
], AC_MSG_RESULT(no)
|
|
||||||
)
|
|
||||||
|
|
||||||
########### dither mask
|
########### dither mask
|
||||||
|
|
||||||
AC_MSG_CHECKING(whether to build small dither mask code)
|
AC_MSG_CHECKING(whether to build small dither mask code)
|
||||||
|
|
|
@ -256,7 +256,6 @@ For those that want eet and edb image loading ability:
|
||||||
--enable-image-loader-jpeg \
|
--enable-image-loader-jpeg \
|
||||||
--enable-image-loader-eet \
|
--enable-image-loader-eet \
|
||||||
--enable-image-loader-edb \
|
--enable-image-loader-edb \
|
||||||
--enable-fmemopen \
|
|
||||||
--enable-cpu-p2-only \
|
--enable-cpu-p2-only \
|
||||||
--enable-cpu-mmx \
|
--enable-cpu-mmx \
|
||||||
--enable-cpu-sse \
|
--enable-cpu-sse \
|
||||||
|
|
|
@ -553,115 +553,28 @@ load_image_file_data_jpeg(RGBA_Image *im, const char *file, const char *key)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* NB: look into:
|
|
||||||
* fmemopen();
|
|
||||||
* open_memstream();
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef BUILD_LOADER_EET
|
#ifdef BUILD_LOADER_EET
|
||||||
static int load_image_file_head_eet(RGBA_Image *im, const char *file, const char *key);
|
static int load_image_file_head_eet(RGBA_Image *im, const char *file, const char *key);
|
||||||
static int
|
static int
|
||||||
load_image_file_head_eet(RGBA_Image *im, const char *file, const char *key)
|
load_image_file_head_eet(RGBA_Image *im, const char *file, const char *key)
|
||||||
{
|
{
|
||||||
int w, h, alpha, compression, size;
|
int w, h, alpha, compression, size, quality, lossy;
|
||||||
Eet_File *ef;
|
Eet_File *ef;
|
||||||
DATA32 *ret;
|
|
||||||
DATA32 *body;
|
DATA32 *body;
|
||||||
DATA32 header[8];
|
|
||||||
|
|
||||||
if ((!file) || (!key)) return -1;
|
if ((!file) || (!key)) return -1;
|
||||||
ef = eet_open((char *)file, EET_FILE_MODE_READ);
|
ef = eet_open((char *)file, EET_FILE_MODE_READ);
|
||||||
if (!ef) return -1;
|
if (!ef) return -1;
|
||||||
ret = eet_read(ef, (char *)key, &size);
|
body = eet_data_image_read(ef, (char *)key,
|
||||||
if (!ret)
|
&w, &h, &alpha, &compression, &quality, &lossy);
|
||||||
|
if (!body)
|
||||||
{
|
{
|
||||||
eet_close(ef);
|
eet_close(ef);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (size < 32)
|
|
||||||
{
|
|
||||||
free(ret);
|
|
||||||
eet_close(ef);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
memcpy(header, ret, 32);
|
|
||||||
#ifdef WORDS_BIGENDIAN
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < 8; i++) SWAP32(header[i]);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (header[0] != 0xac1dfeed)
|
|
||||||
{
|
|
||||||
int val = -1;
|
|
||||||
|
|
||||||
#ifdef BUILD_LOADER_JPEG
|
|
||||||
#ifdef BUILD_FMEMOPEN
|
|
||||||
/* if we built the jpeg loader in.. try load an inlined jpeg */
|
|
||||||
if (header[0] == 0xbeeff00d)
|
|
||||||
/* magic number for 2 jpegs. 1 color, 1 gray. gray is alpha */
|
|
||||||
{
|
|
||||||
FILE *f;
|
|
||||||
int sz1, sz2;
|
|
||||||
|
|
||||||
/* next int is byte size of first jpg */
|
|
||||||
/* then next int is byte size of 2nd jpeg */
|
|
||||||
/* all bytes after the first 12 are jpeg data */
|
|
||||||
sz1 = header[1];
|
|
||||||
sz2 = header[2];
|
|
||||||
|
|
||||||
if ((sz1 <= 0) || (sz2 <= 0) ||
|
|
||||||
((sz1 + sz2 + 12) > size))
|
|
||||||
{
|
|
||||||
free(ret);
|
|
||||||
eet_close(ef);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
f = fmemopen(((DATA8 *)ret) + 12, (size_t)sz1, "r");
|
|
||||||
if (!f)
|
|
||||||
{
|
|
||||||
free(ret);
|
|
||||||
eet_close(ef);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
val = load_image_file_head_jpeg_internal(im, f);
|
|
||||||
fclose(f);
|
|
||||||
im->flags |= RGBA_IMAGE_HAS_ALPHA;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
FILE *f;
|
|
||||||
|
|
||||||
f = fmemopen(ret, (size_t)size, "r");
|
|
||||||
if (!f)
|
|
||||||
{
|
|
||||||
free(ret);
|
|
||||||
eet_close(ef);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
val = load_image_file_head_jpeg_internal(im, f);
|
|
||||||
fclose(f);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
free(ret);
|
|
||||||
eet_close(ef);
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
w = header[1];
|
|
||||||
h = header[2];
|
|
||||||
alpha = header[3];
|
|
||||||
compression = header[4];
|
|
||||||
if ((w > 8192) || (h > 8192))
|
if ((w > 8192) || (h > 8192))
|
||||||
{
|
{
|
||||||
free(ret);
|
free(body);
|
||||||
eet_close(ef);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if ((compression == 0) && (size < ((w * h * 4) + 32)))
|
|
||||||
{
|
|
||||||
free(ret);
|
|
||||||
eet_close(ef);
|
eet_close(ef);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -670,13 +583,14 @@ load_image_file_head_eet(RGBA_Image *im, const char *file, const char *key)
|
||||||
im->image = evas_common_image_surface_new();
|
im->image = evas_common_image_surface_new();
|
||||||
if (!im->image)
|
if (!im->image)
|
||||||
{
|
{
|
||||||
free(ret);
|
free(body);
|
||||||
eet_close(ef);
|
eet_close(ef);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
im->image->w = w;
|
im->image->w = w;
|
||||||
im->image->h = h;
|
im->image->h = h;
|
||||||
free(ret);
|
im->image->data = body;
|
||||||
|
im->image->no_free = 0;
|
||||||
eet_close(ef);
|
eet_close(ef);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -685,166 +599,6 @@ static int load_image_file_data_eet(RGBA_Image *im, const char *file, const char
|
||||||
static int
|
static int
|
||||||
load_image_file_data_eet(RGBA_Image *im, const char *file, const char *key)
|
load_image_file_data_eet(RGBA_Image *im, const char *file, const char *key)
|
||||||
{
|
{
|
||||||
int w, h, alpha, compression, size;
|
|
||||||
Eet_File *ef;
|
|
||||||
DATA32 *ret;
|
|
||||||
DATA32 *body;
|
|
||||||
DATA32 header[8];
|
|
||||||
|
|
||||||
if ((!file) || (!key)) return -1;
|
|
||||||
ef = eet_open((char *)file, EET_FILE_MODE_READ);
|
|
||||||
if (!ef) return -1;
|
|
||||||
ret = eet_read(ef, (char *)key, &size);
|
|
||||||
if (!ret)
|
|
||||||
{
|
|
||||||
eet_close(ef);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (size < 32)
|
|
||||||
{
|
|
||||||
free(ret);
|
|
||||||
eet_close(ef);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
memcpy(header, ret, 32);
|
|
||||||
#ifdef WORDS_BIGENDIAN
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < 8; i++) SWAP32(header[i]);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (header[0] != 0xac1dfeed)
|
|
||||||
{
|
|
||||||
int val = -1;
|
|
||||||
|
|
||||||
#ifdef BUILD_LOADER_JPEG
|
|
||||||
#ifdef BUILD_FMEMOPEN
|
|
||||||
/* if we built the jpeg loader in.. try load an inlined jpeg */
|
|
||||||
if (header[0] == 0xbeeff00d)
|
|
||||||
/* magic number for 2 jpegs. 1 color, 1 gray. gray is alpha */
|
|
||||||
{
|
|
||||||
FILE *f;
|
|
||||||
int sz1, sz2;
|
|
||||||
|
|
||||||
/* next int is byte size of first jpg */
|
|
||||||
/* then next int is byte size of 2nd jpeg */
|
|
||||||
/* all bytes after the first 12 are jpeg data */
|
|
||||||
sz1 = header[1];
|
|
||||||
sz2 = header[2];
|
|
||||||
|
|
||||||
if ((sz1 <= 0) || (sz2 <= 0) ||
|
|
||||||
((sz1 + sz2 + 12) > size))
|
|
||||||
{
|
|
||||||
free(ret);
|
|
||||||
eet_close(ef);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
f = fmemopen(((DATA8 *)ret) + 12, (size_t)sz1, "r");
|
|
||||||
if (!f)
|
|
||||||
{
|
|
||||||
free(ret);
|
|
||||||
eet_close(ef);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
val = load_image_file_data_jpeg_internal(im, f);
|
|
||||||
fclose(f);
|
|
||||||
f = fmemopen(((DATA8 *)ret) + 12 + sz1, (size_t)sz2, "r");
|
|
||||||
if (!f)
|
|
||||||
{
|
|
||||||
free(ret);
|
|
||||||
eet_close(ef);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
val = load_image_file_data_jpeg_alpha_internal(im, f);
|
|
||||||
fclose(f);
|
|
||||||
im->flags |= RGBA_IMAGE_HAS_ALPHA;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
FILE *f;
|
|
||||||
|
|
||||||
f = fmemopen(ret, (size_t)size, "r");
|
|
||||||
if (!f)
|
|
||||||
{
|
|
||||||
free(ret);
|
|
||||||
eet_close(ef);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
val = load_image_file_data_jpeg_internal(im, f);
|
|
||||||
fclose(f);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
free(ret);
|
|
||||||
eet_close(ef);
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
w = header[1];
|
|
||||||
h = header[2];
|
|
||||||
alpha = header[3];
|
|
||||||
compression = header[4];
|
|
||||||
if ((w > 8192) || (h > 8192))
|
|
||||||
{
|
|
||||||
free(ret);
|
|
||||||
eet_close(ef);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if ((compression == 0) && (size < ((w * h * 4) + 32)))
|
|
||||||
{
|
|
||||||
free(ret);
|
|
||||||
eet_close(ef);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (alpha) im->flags |= RGBA_IMAGE_HAS_ALPHA;
|
|
||||||
if (!im->image)
|
|
||||||
im->image = evas_common_image_surface_new();
|
|
||||||
if (!im->image)
|
|
||||||
{
|
|
||||||
free(ret);
|
|
||||||
eet_close(ef);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
im->image->w = w;
|
|
||||||
im->image->h = h;
|
|
||||||
body = &(ret[8]);
|
|
||||||
evas_common_image_surface_alloc(im->image);
|
|
||||||
if (!im->image->data)
|
|
||||||
{
|
|
||||||
free(ret);
|
|
||||||
eet_close(ef);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (!compression)
|
|
||||||
{
|
|
||||||
#ifdef WORDS_BIGENDIAN
|
|
||||||
{
|
|
||||||
int x;
|
|
||||||
|
|
||||||
memcpy(im->image->data, body, w * h * sizeof(DATA32));
|
|
||||||
for (x = 0; x < (w * h); x++) SWAP32(im->image->data[x]);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
memcpy(im->image->data, body, w * h * sizeof(DATA32));
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
uLongf dlen;
|
|
||||||
|
|
||||||
dlen = w * h * sizeof(DATA32);
|
|
||||||
uncompress((Bytef *)im->image->data, &dlen, (Bytef *)body,
|
|
||||||
(uLongf)(size - 32));
|
|
||||||
#ifdef WORDS_BIGENDIAN
|
|
||||||
{
|
|
||||||
int x;
|
|
||||||
|
|
||||||
for (x = 0; x < (w * h); x++) SWAP32(im->image->data[x]);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
free(ret);
|
|
||||||
eet_close(ef);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue