forked from enlightenment/efl
Evas: Add DDS image file loader
@feature: Add a Micrsoft DirectDraw Surface file loader
This commit is contained in:
parent
e239f8f4de
commit
c424153867
|
@ -1553,6 +1553,7 @@ ARG_ENABLE_EVAS_IMAGE_LOADER(WBMP, static)
|
||||||
ARG_ENABLE_EVAS_IMAGE_LOADER(WEBP, no)
|
ARG_ENABLE_EVAS_IMAGE_LOADER(WEBP, no)
|
||||||
ARG_ENABLE_EVAS_IMAGE_LOADER(XPM, static)
|
ARG_ENABLE_EVAS_IMAGE_LOADER(XPM, static)
|
||||||
ARG_ENABLE_EVAS_IMAGE_LOADER(TGV, static)
|
ARG_ENABLE_EVAS_IMAGE_LOADER(TGV, static)
|
||||||
|
ARG_ENABLE_EVAS_IMAGE_LOADER(DDS, static)
|
||||||
|
|
||||||
### Default values
|
### Default values
|
||||||
|
|
||||||
|
@ -1843,6 +1844,7 @@ EVAS_CHECK_IMAGE_LOADER([WBMP], [${want_evas_image_loader_wbmp}])
|
||||||
EVAS_CHECK_IMAGE_LOADER([WEBP], [${want_evas_image_loader_webp}])
|
EVAS_CHECK_IMAGE_LOADER([WEBP], [${want_evas_image_loader_webp}])
|
||||||
EVAS_CHECK_IMAGE_LOADER([XPM], [${want_evas_image_loader_xpm}])
|
EVAS_CHECK_IMAGE_LOADER([XPM], [${want_evas_image_loader_xpm}])
|
||||||
EVAS_CHECK_IMAGE_LOADER([TGV], [${want_evas_image_loader_tgv}])
|
EVAS_CHECK_IMAGE_LOADER([TGV], [${want_evas_image_loader_tgv}])
|
||||||
|
EVAS_CHECK_IMAGE_LOADER([DDS], [${want_evas_image_loader_tgv}])
|
||||||
|
|
||||||
EFL_EVAL_PKGS([EVAS])
|
EFL_EVAL_PKGS([EVAS])
|
||||||
|
|
||||||
|
@ -2050,6 +2052,8 @@ if test "x${build_gui}" = "xno"; then
|
||||||
AM_CONDITIONAL([EVAS_STATIC_BUILD_XPM], [false])
|
AM_CONDITIONAL([EVAS_STATIC_BUILD_XPM], [false])
|
||||||
AM_CONDITIONAL([BUILD_LOADER_TGV], [false])
|
AM_CONDITIONAL([BUILD_LOADER_TGV], [false])
|
||||||
AM_CONDITIONAL([EVAS_STATIC_BUILD_TGV], [false])
|
AM_CONDITIONAL([EVAS_STATIC_BUILD_TGV], [false])
|
||||||
|
AM_CONDITIONAL([BUILD_LOADER_DDS], [false])
|
||||||
|
AM_CONDITIONAL([EVAS_STATIC_BUILD_DDS], [false])
|
||||||
AM_CONDITIONAL([EVAS_CSERVE2], [false])
|
AM_CONDITIONAL([EVAS_CSERVE2], [false])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
@ -42,6 +42,22 @@ AS_IF([test "x${have_dep}" = "xyes"], [$3], [$4])
|
||||||
|
|
||||||
])
|
])
|
||||||
|
|
||||||
|
dnl use: EVAS_CHECK_LOADER_DEP_DDS(loader, want_static[, ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
|
||||||
|
|
||||||
|
AC_DEFUN([EVAS_CHECK_LOADER_DEP_DDS],
|
||||||
|
[
|
||||||
|
|
||||||
|
have_dep="yes"
|
||||||
|
evas_image_loader_[]$1[]_cflags=""
|
||||||
|
evas_image_loader_[]$1[]_libs=""
|
||||||
|
|
||||||
|
AC_SUBST([evas_image_loader_$1_cflags])
|
||||||
|
AC_SUBST([evas_image_loader_$1_libs])
|
||||||
|
|
||||||
|
AS_IF([test "x${have_dep}" = "xyes"], [$3], [$4])
|
||||||
|
|
||||||
|
])
|
||||||
|
|
||||||
dnl use: EVAS_CHECK_LOADER_DEP_EET(loader, want_static[, ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
|
dnl use: EVAS_CHECK_LOADER_DEP_EET(loader, want_static[, ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
|
||||||
|
|
||||||
AC_DEFUN([EVAS_CHECK_LOADER_DEP_EET],
|
AC_DEFUN([EVAS_CHECK_LOADER_DEP_EET],
|
||||||
|
|
|
@ -1372,6 +1372,33 @@ modules_evas_loaders_bmp_module_la_LIBTOOLFLAGS = --tag=disable-static
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if BUILD_LOADER_DDS
|
||||||
|
if EVAS_STATIC_BUILD_DDS
|
||||||
|
lib_evas_libevas_la_SOURCES += modules/evas/loaders/dds/evas_image_load_dds.c
|
||||||
|
lib_evas_libevas_la_CPPFLAGS += @evas_image_loader_dds_cflags@
|
||||||
|
lib_evas_libevas_la_LIBADD += @evas_image_loader_dds_libs@
|
||||||
|
if EVAS_CSERVE2
|
||||||
|
bin_evas_evas_cserve2_slave_SOURCES += modules/evas/loaders/dds/evas_image_load_dds.c
|
||||||
|
bin_evas_evas_cserve2_slave_CPPFLAGS += @evas_image_loader_dds_cflags@
|
||||||
|
bin_evas_evas_cserve2_slave_LDADD += @evas_image_loader_dds_libs@
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
loaderddspkgdir = $(libdir)/evas/modules/loaders/dds/$(MODULE_ARCH)
|
||||||
|
loaderddspkg_LTLIBRARIES = modules/evas/loaders/dds/module.la
|
||||||
|
modules_evas_loaders_dds_module_la_SOURCES = modules/evas/loaders/dds/evas_image_load_dds.c
|
||||||
|
modules_evas_loaders_dds_module_la_CPPFLAGS = -I$(top_builddir)/src/lib/efl \
|
||||||
|
-I$(top_srcdir)/src/lib/evas/include \
|
||||||
|
@EVAS_CFLAGS@ \
|
||||||
|
@evas_image_loader_dds_cflags@
|
||||||
|
modules_evas_loaders_dds_module_la_LIBADD = \
|
||||||
|
@USE_EVAS_LIBS@ \
|
||||||
|
@evas_image_loader_dds_libs@
|
||||||
|
modules_evas_loaders_dds_module_la_DEPENDENCIES = @USE_EVAS_INTERNAL_LIBS@
|
||||||
|
modules_evas_loaders_dds_module_la_LDFLAGS = -module @EFL_LTMODULE_FLAGS@
|
||||||
|
modules_evas_loaders_dds_module_la_LIBTOOLFLAGS = --tag=disable-static
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
if BUILD_LOADER_EET
|
if BUILD_LOADER_EET
|
||||||
if EVAS_STATIC_BUILD_EET
|
if EVAS_STATIC_BUILD_EET
|
||||||
lib_evas_libevas_la_SOURCES += modules/evas/loaders/eet/evas_image_load_eet.c modules/evas/savers/eet/evas_image_save_eet.c
|
lib_evas_libevas_la_SOURCES += modules/evas/loaders/eet/evas_image_load_eet.c modules/evas/savers/eet/evas_image_save_eet.c
|
||||||
|
|
|
@ -125,6 +125,7 @@ EVAS_EINA_STATIC_MODULE_DEFINE(engine, software_x11);
|
||||||
|
|
||||||
#if !EVAS_MODULE_NO_IMAGE_LOADERS
|
#if !EVAS_MODULE_NO_IMAGE_LOADERS
|
||||||
EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, bmp);
|
EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, bmp);
|
||||||
|
EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, dds);
|
||||||
EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, eet);
|
EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, eet);
|
||||||
EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, generic);
|
EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, generic);
|
||||||
EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, gif);
|
EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, gif);
|
||||||
|
@ -189,6 +190,9 @@ static const struct {
|
||||||
#ifdef EVAS_STATIC_BUILD_BMP
|
#ifdef EVAS_STATIC_BUILD_BMP
|
||||||
EVAS_EINA_STATIC_MODULE_USE(image_loader, bmp),
|
EVAS_EINA_STATIC_MODULE_USE(image_loader, bmp),
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef EVAS_STATIC_BUILD_DDS
|
||||||
|
EVAS_EINA_STATIC_MODULE_USE(image_loader, dds),
|
||||||
|
#endif
|
||||||
#ifdef EVAS_STATIC_BUILD_EET
|
#ifdef EVAS_STATIC_BUILD_EET
|
||||||
EVAS_EINA_STATIC_MODULE_USE(image_loader, eet),
|
EVAS_EINA_STATIC_MODULE_USE(image_loader, eet),
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -0,0 +1,153 @@
|
||||||
|
/* @file evas_image_load_dds.c
|
||||||
|
* @author Jean-Philippe ANDRE <jpeg@videolan.org>
|
||||||
|
*
|
||||||
|
* Load Microsoft DirectDraw Surface files.
|
||||||
|
* Decode S3TC image format.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "Evas_Loader.h"
|
||||||
|
|
||||||
|
typedef struct _Evas_Loader_Internal Evas_Loader_Internal;
|
||||||
|
struct _Evas_Loader_Internal
|
||||||
|
{
|
||||||
|
Eina_File *f;
|
||||||
|
};
|
||||||
|
|
||||||
|
static void *
|
||||||
|
evas_image_load_file_open_dds(Eina_File *f, Eina_Stringshare *key EINA_UNUSED,
|
||||||
|
Evas_Image_Load_Opts *opts,
|
||||||
|
Evas_Image_Animated *animated EINA_UNUSED,
|
||||||
|
int *error)
|
||||||
|
{
|
||||||
|
Evas_Loader_Internal *loader;
|
||||||
|
|
||||||
|
// TODO: Check file size
|
||||||
|
if (eina_file_size_get(f) <= 16)
|
||||||
|
{
|
||||||
|
*error = EVAS_LOAD_ERROR_CORRUPT_FILE;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
loader = calloc(1, sizeof (Evas_Loader_Internal));
|
||||||
|
if (!loader)
|
||||||
|
{
|
||||||
|
*error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
loader->f = eina_file_dup(f);
|
||||||
|
if (!loader->f)
|
||||||
|
{
|
||||||
|
free(loader);
|
||||||
|
*error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return loader;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
evas_image_load_file_close_dds(void *loader_data)
|
||||||
|
{
|
||||||
|
Evas_Loader_Internal *loader = loader_data;
|
||||||
|
|
||||||
|
eina_file_close(loader->f);
|
||||||
|
free(loader);
|
||||||
|
}
|
||||||
|
|
||||||
|
static Eina_Bool
|
||||||
|
evas_image_load_file_head_dds(void *loader_data,
|
||||||
|
Evas_Image_Property *prop,
|
||||||
|
int *error)
|
||||||
|
{
|
||||||
|
Evas_Loader_Internal *loader = loader_data;
|
||||||
|
const char *m;
|
||||||
|
|
||||||
|
m = eina_file_map_all(loader->f, EINA_FILE_SEQUENTIAL);
|
||||||
|
if (!m)
|
||||||
|
{
|
||||||
|
*error = EVAS_LOAD_ERROR_CORRUPT_FILE;
|
||||||
|
return EINA_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strncmp(m, "DDS ", 4) != 0)
|
||||||
|
{
|
||||||
|
*error = EVAS_LOAD_ERROR_CORRUPT_FILE;
|
||||||
|
return EINA_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
|
||||||
|
return EINA_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
Eina_Bool
|
||||||
|
evas_image_load_file_data_dds(void *loader_data,
|
||||||
|
Evas_Image_Property *prop,
|
||||||
|
void *pixels,
|
||||||
|
int *error)
|
||||||
|
{
|
||||||
|
Evas_Loader_Internal *loader = loader_data;
|
||||||
|
const char *m;
|
||||||
|
|
||||||
|
Eina_Bool r = EINA_FALSE;
|
||||||
|
|
||||||
|
*error = EVAS_LOAD_ERROR_CORRUPT_FILE;
|
||||||
|
|
||||||
|
m = eina_file_map_all(loader->f, EINA_FILE_WILLNEED);
|
||||||
|
if (!m) return EINA_FALSE;
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
|
||||||
|
r = EINA_TRUE;
|
||||||
|
|
||||||
|
on_error:
|
||||||
|
eina_file_map_free(loader->f, m);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
Evas_Image_Load_Func evas_image_load_dds_func =
|
||||||
|
{
|
||||||
|
evas_image_load_file_open_dds,
|
||||||
|
evas_image_load_file_close_dds,
|
||||||
|
evas_image_load_file_head_dds,
|
||||||
|
evas_image_load_file_data_dds,
|
||||||
|
NULL,
|
||||||
|
EINA_TRUE,
|
||||||
|
EINA_FALSE
|
||||||
|
};
|
||||||
|
|
||||||
|
static int
|
||||||
|
module_open(Evas_Module *em)
|
||||||
|
{
|
||||||
|
if (!em) return 0;
|
||||||
|
em->functions = (void *)(&evas_image_load_dds_func);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
module_close(Evas_Module *em EINA_UNUSED)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static Evas_Module_Api evas_modapi =
|
||||||
|
{
|
||||||
|
EVAS_MODULE_API_VERSION,
|
||||||
|
"dds",
|
||||||
|
"none",
|
||||||
|
{
|
||||||
|
module_open,
|
||||||
|
module_close
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
EVAS_MODULE_DEFINE(EVAS_MODULE_TYPE_IMAGE_LOADER, image_loader, dds);
|
||||||
|
|
||||||
|
#ifndef EVAS_STATIC_BUILD_DDS
|
||||||
|
EVAS_EINA_MODULE_DEFINE(image_loader, dds);
|
||||||
|
#endif
|
Loading…
Reference in New Issue