dont need fmemopen suppor tin evas now... just sue eet directly and dont

duplicate code...


SVN revision: 6578
This commit is contained in:
Carsten Haitzler 2003-01-13 07:38:08 +00:00
parent bfe9713eb8
commit 9b184f9bdf
5 changed files with 9 additions and 269 deletions

View File

@ -101,7 +101,6 @@ for those that want eet and edb image loading ability:
--enable-image-loader-jpeg \
--enable-image-loader-eet \
--enable-image-loader-edb \
--enable-fmemopen \
--enable-cpu-p2-only \
--enable-cpu-mmx \
--enable-cpu-sse \

View File

@ -60,4 +60,3 @@
#undef BUILD_LOADER_JPEG
#undef BUILD_LOADER_EET
#undef BUILD_LOADER_EDB
#undef BUILD_FMEMOPEN

View File

@ -242,7 +242,7 @@ AC_ARG_ENABLE(image-loader-eet,
AC_MSG_RESULT(yes)
AC_DEFINE(BUILD_LOADER_EET)
eet_cflags=`eet-config --cflags`
eet_libs=`eet-config --libs`" -lz"
eet_libs=`eet-config --libs`
], AC_MSG_RESULT(no)
)
@ -257,17 +257,6 @@ AC_ARG_ENABLE(image-loader-edb,
], 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
AC_MSG_CHECKING(whether to build small dither mask code)

View File

@ -256,7 +256,6 @@ For those that want eet and edb image loading ability:
--enable-image-loader-jpeg \
--enable-image-loader-eet \
--enable-image-loader-edb \
--enable-fmemopen \
--enable-cpu-p2-only \
--enable-cpu-mmx \
--enable-cpu-sse \

View File

@ -553,115 +553,28 @@ load_image_file_data_jpeg(RGBA_Image *im, const char *file, const char *key)
}
#endif
/* NB: look into:
* fmemopen();
* open_memstream();
*/
#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)
{
int w, h, alpha, compression, size;
int w, h, alpha, compression, size, quality, lossy;
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)
body = eet_data_image_read(ef, (char *)key,
&w, &h, &alpha, &compression, &quality, &lossy);
if (!body)
{
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_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))
{
free(ret);
eet_close(ef);
return -1;
}
if ((compression == 0) && (size < ((w * h * 4) + 32)))
{
free(ret);
free(body);
eet_close(ef);
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();
if (!im->image)
{
free(ret);
free(body);
eet_close(ef);
return -1;
}
im->image->w = w;
im->image->h = h;
free(ret);
im->image->data = body;
im->image->no_free = 0;
eet_close(ef);
return 1;
}
@ -685,166 +599,6 @@ static int load_image_file_data_eet(RGBA_Image *im, const char *file, const char
static int
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;
}
#endif