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(XPM, static)
|
||||
ARG_ENABLE_EVAS_IMAGE_LOADER(TGV, static)
|
||||
ARG_ENABLE_EVAS_IMAGE_LOADER(DDS, static)
|
||||
|
||||
### 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([XPM], [${want_evas_image_loader_xpm}])
|
||||
EVAS_CHECK_IMAGE_LOADER([TGV], [${want_evas_image_loader_tgv}])
|
||||
EVAS_CHECK_IMAGE_LOADER([DDS], [${want_evas_image_loader_tgv}])
|
||||
|
||||
EFL_EVAL_PKGS([EVAS])
|
||||
|
||||
|
@ -2050,6 +2052,8 @@ if test "x${build_gui}" = "xno"; then
|
|||
AM_CONDITIONAL([EVAS_STATIC_BUILD_XPM], [false])
|
||||
AM_CONDITIONAL([BUILD_LOADER_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])
|
||||
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]])
|
||||
|
||||
AC_DEFUN([EVAS_CHECK_LOADER_DEP_EET],
|
||||
|
|
|
@ -1372,6 +1372,33 @@ modules_evas_loaders_bmp_module_la_LIBTOOLFLAGS = --tag=disable-static
|
|||
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 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
|
||||
|
|
|
@ -125,6 +125,7 @@ EVAS_EINA_STATIC_MODULE_DEFINE(engine, software_x11);
|
|||
|
||||
#if !EVAS_MODULE_NO_IMAGE_LOADERS
|
||||
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, generic);
|
||||
EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, gif);
|
||||
|
@ -189,6 +190,9 @@ static const struct {
|
|||
#ifdef EVAS_STATIC_BUILD_BMP
|
||||
EVAS_EINA_STATIC_MODULE_USE(image_loader, bmp),
|
||||
#endif
|
||||
#ifdef EVAS_STATIC_BUILD_DDS
|
||||
EVAS_EINA_STATIC_MODULE_USE(image_loader, dds),
|
||||
#endif
|
||||
#ifdef EVAS_STATIC_BUILD_EET
|
||||
EVAS_EINA_STATIC_MODULE_USE(image_loader, eet),
|
||||
#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