From aef381e3ac79970a4167fd9f0d5d681e4203ef5e Mon Sep 17 00:00:00 2001 From: Cyril Hrubis Date: Sat, 2 Jun 2012 20:14:04 +0200 Subject: [PATCH] loaders: Add generic function to load Meta Data. --- demos/c_simple/Makefile | 2 +- .../c_simple/{meta_data_png.c => meta_data_dump.c} | 6 +-- include/loaders/GP_Loaders.h | 5 +++ libs/loaders/GP_Loaders.c | 44 ++++++++++++++++++++++ 4 files changed, 53 insertions(+), 4 deletions(-) rename demos/c_simple/{meta_data_png.c => meta_data_dump.c} (94%) diff --git a/demos/c_simple/Makefile b/demos/c_simple/Makefile index c03f3741..22efd37c 100644 --- a/demos/c_simple/Makefile +++ b/demos/c_simple/Makefile @@ -6,7 +6,7 @@ INCLUDE= LDLIBS+=-lGP -lGP_backends -lSDL -L$(TOPDIR)/build/ APPS=backend_example loaders_example loaders filters_symmetry gfx_koch\ - virtual_backend_example meta_data meta_data_png + virtual_backend_example meta_data meta_data_dump include $(TOPDIR)/pre.mk include $(TOPDIR)/app.mk diff --git a/demos/c_simple/meta_data_png.c b/demos/c_simple/meta_data_dump.c similarity index 94% rename from demos/c_simple/meta_data_png.c rename to demos/c_simple/meta_data_dump.c index 9f6543b6..d9aacfb3 100644 --- a/demos/c_simple/meta_data_png.c +++ b/demos/c_simple/meta_data_dump.c @@ -22,7 +22,7 @@ /* - Read png meta-data and print them into stdout. + Read image meta-data and print them into stdout. */ @@ -37,7 +37,7 @@ int main(int argc, char *argv[]) { - GP_MetaData *data = GP_MetaDataCreate(20); + GP_MetaData *data = GP_MetaDataCreate(80); int i; if (argc < 2) { @@ -53,7 +53,7 @@ int main(int argc, char *argv[]) GP_MetaDataClear(data); - if (GP_LoadPNGMetaData(argv[i], data)) { + if (GP_LoadMetaData(argv[i], data)) { fprintf(stderr, "Failed to read '%s' meta-data: %s\n", argv[1], strerror(errno)); } else { diff --git a/include/loaders/GP_Loaders.h b/include/loaders/GP_Loaders.h index d374f996..c7aab954 100644 --- a/include/loaders/GP_Loaders.h +++ b/include/loaders/GP_Loaders.h @@ -54,6 +54,11 @@ GP_Context *GP_LoadImage(const char *src_path, GP_ProgressCallback *callback); /* + * Loads image Meta Data (if possible). + */ +int GP_LoadMetaData(const char *src_path, GP_MetaData *data); + +/* * Simple saving function, the image format is matched by file extension. * * Retruns zero on succes. diff --git a/libs/loaders/GP_Loaders.c b/libs/loaders/GP_Loaders.c index a6349bcb..f298983e 100644 --- a/libs/loaders/GP_Loaders.c +++ b/libs/loaders/GP_Loaders.c @@ -148,6 +148,50 @@ skip_filename_check: return NULL; } +int GP_LoadMetaData(const char *src_path, GP_MetaData *data) +{ + int len; + + len = strlen(src_path); + + if (len < 3) { + errno = ENOSYS; + return 1; + } + + switch (src_path[len - 1]) { + /* PNG, JPG, JPEG */ + case 'g': + case 'G': + switch (src_path[len - 2]) { + case 'n': + case 'N': + if (src_path[len - 3] == 'p' || + src_path[len - 3] == 'P') + return GP_LoadPNGMetaData(src_path, data); + break; + case 'p': + case 'P': + if (src_path[len - 3] == 'j' || + src_path[len - 3] == 'J') + return GP_LoadJPGMetaData(src_path, data); + break; + case 'e': + case 'E': + if ((src_path[len - 3] == 'p' || + src_path[len - 3] == 'P') && + (src_path[len - 4] == 'j' || + src_path[len - 4] == 'J')) + return GP_LoadJPGMetaData(src_path, data); + break; + } + break; + } + + errno = ENOSYS; + return 1; +} + int GP_SaveImage(const GP_Context *src, const char *dst_path, GP_ProgressCallback *callback) { -- 2.11.4.GIT