From 13f49e1d9aab852fd2858aec5fc15870e4eb1c8f Mon Sep 17 00:00:00 2001 From: twinaphex Date: Fri, 13 May 2016 04:38:21 +0200 Subject: [PATCH] Split up image transfer code to separate file --- Makefile.common | 3 +- griffin/griffin.c | 1 + libretro-common/formats/image_transfer.c | 131 +++++++++++++++++++++++ libretro-common/include/formats/image.h | 27 +++++ tasks/task_image.c | 127 +--------------------- tasks/tasks_internal.h | 6 -- 6 files changed, 162 insertions(+), 133 deletions(-) create mode 100644 libretro-common/formats/image_transfer.c diff --git a/Makefile.common b/Makefile.common index b5e54fbec6..9050d0f349 100644 --- a/Makefile.common +++ b/Makefile.common @@ -911,7 +911,8 @@ ifeq ($(HAVE_RJPEG), 1) endif OBJ += libretro-common/formats/bmp/rbmp_encode.o \ - libretro-common/formats/json/jsonsax.o + libretro-common/formats/json/jsonsax.o \ + libretro-common/formats/image_transfer.o ifeq ($(HAVE_RTGA), 1) OBJ += libretro-common/formats/tga/rtga.o diff --git a/griffin/griffin.c b/griffin/griffin.c index ba626ee9fe..1f189425d3 100644 --- a/griffin/griffin.c +++ b/griffin/griffin.c @@ -230,6 +230,7 @@ VIDEO IMAGE #include "../cores/libretro-imageviewer/image_core.c" #endif +#include "../libretro-common/formats/image_transfer.c" #ifdef HAVE_RPNG #include "../libretro-common/formats/png/rpng.c" #include "../libretro-common/formats/png/rpng_encode.c" diff --git a/libretro-common/formats/image_transfer.c b/libretro-common/formats/image_transfer.c new file mode 100644 index 0000000000..5bc554f0a7 --- /dev/null +++ b/libretro-common/formats/image_transfer.c @@ -0,0 +1,131 @@ +#include +#include +#include + +#ifdef HAVE_RPNG +#include +#endif +#ifdef HAVE_RJPEG +#include +#endif + +#include + +void image_transfer_free(void *data, enum image_type_enum type) +{ + switch (type) + { + case IMAGE_TYPE_PNG: +#ifdef HAVE_RPNG + rpng_nbio_load_image_free((rpng_t*)data); +#endif + break; + case IMAGE_TYPE_JPEG: +#ifdef HAVE_RJPEG +#endif + break; + } +} + +void *image_transfer_new(enum image_type_enum type) +{ + switch (type) + { + case IMAGE_TYPE_PNG: +#ifdef HAVE_RPNG + return rpng_alloc(); +#endif + break; + case IMAGE_TYPE_JPEG: +#ifdef HAVE_RJPEG +#endif + break; + } + + return NULL; +} + +bool image_transfer_start(void *data, enum image_type_enum type) +{ + switch (type) + { + case IMAGE_TYPE_PNG: +#ifdef HAVE_RPNG + if (!rpng_nbio_load_image_argb_start((rpng_t*)data)) + return false; +#endif + break; + case IMAGE_TYPE_JPEG: +#ifdef HAVE_RJPEG +#endif + break; + } + + return true; +} + +void image_transfer_set_buffer_ptr( + void *data, + enum image_type_enum type, + void *ptr) +{ + switch (type) + { + case IMAGE_TYPE_PNG: +#ifdef HAVE_RPNG + rpng_set_buf_ptr((rpng_t*)data, (uint8_t*)ptr); +#endif + break; + case IMAGE_TYPE_JPEG: +#ifdef HAVE_RJPEG +#endif + break; + } +} + +int image_transfer_process( + void *data, + enum image_type_enum type, + uint32_t **buf, + unsigned *width, unsigned *height) +{ + switch (type) + { + case IMAGE_TYPE_PNG: +#ifdef HAVE_RPNG + if (!rpng_is_valid((rpng_t*)data)) + return IMAGE_PROCESS_ERROR; + + return rpng_nbio_load_image_argb_process( + (rpng_t*)data, + buf, + width, height); +#endif + break; + case IMAGE_TYPE_JPEG: +#ifdef HAVE_RJPEG +#endif + break; + } + + return 0; +} + +bool image_transfer_iterate(void *data, enum image_type_enum type) +{ + switch (type) + { + case IMAGE_TYPE_PNG: +#ifdef HAVE_RPNG + if (!rpng_nbio_load_image_argb_iterate((rpng_t*)data)) + return false; +#endif + break; + case IMAGE_TYPE_JPEG: +#ifdef HAVE_RJPEG +#endif + break; + } + + return true; +} diff --git a/libretro-common/include/formats/image.h b/libretro-common/include/formats/image.h index 3c98761b3e..9e9794ac94 100644 --- a/libretro-common/include/formats/image.h +++ b/libretro-common/include/formats/image.h @@ -40,6 +40,12 @@ struct texture_image uint32_t *pixels; }; +enum image_type_enum +{ + IMAGE_TYPE_PNG = 0, + IMAGE_TYPE_JPEG +}; + bool video_texture_image_set_color_shifts(unsigned *r_shift, unsigned *g_shift, unsigned *b_shift, unsigned *a_shift); @@ -50,6 +56,27 @@ bool video_texture_image_color_convert(unsigned r_shift, bool video_texture_image_load(struct texture_image *img, const char *path); void video_texture_image_free(struct texture_image *img); +/* Image transfer */ + +void image_transfer_free(void *data, enum image_type_enum type); + +void *image_transfer_new(enum image_type_enum type); + +bool image_transfer_start(void *data, enum image_type_enum type); + +void image_transfer_set_buffer_ptr( + void *data, + enum image_type_enum type, + void *ptr); + +int image_transfer_process( + void *data, + enum image_type_enum type, + uint32_t **buf, + unsigned *width, unsigned *height); + +bool image_transfer_iterate(void *data, enum image_type_enum type); + RETRO_END_DECLS #endif diff --git a/tasks/task_image.c b/tasks/task_image.c index 5c7144fc9a..124d0f712f 100644 --- a/tasks/task_image.c +++ b/tasks/task_image.c @@ -24,12 +24,6 @@ #include #include #include -#ifdef HAVE_RPNG -#include -#endif -#ifdef HAVE_RJPEG -#include -#endif #ifdef HAVE_MENU #include "../menu/menu_driver.h" @@ -99,132 +93,13 @@ static int cb_nbio_default(void *data, size_t len) return 0; } -void image_transfer_free(void *data, enum image_type_enum type) -{ - switch (type) - { - case IMAGE_TYPE_PNG: -#ifdef HAVE_RPNG - rpng_nbio_load_image_free((rpng_t*)data); -#endif - break; - case IMAGE_TYPE_JPEG: -#ifdef HAVE_RJPEG -#endif - break; - } -} - -void *image_transfer_new(enum image_type_enum type) -{ - switch (type) - { - case IMAGE_TYPE_PNG: -#ifdef HAVE_RPNG - return rpng_alloc(); -#endif - break; - case IMAGE_TYPE_JPEG: -#ifdef HAVE_RJPEG -#endif - break; - } - - return NULL; -} - -bool image_transfer_start(void *data, enum image_type_enum type) -{ - switch (type) - { - case IMAGE_TYPE_PNG: -#ifdef HAVE_RPNG - if (!rpng_nbio_load_image_argb_start((rpng_t*)data)) - return false; -#endif - break; - case IMAGE_TYPE_JPEG: -#ifdef HAVE_RJPEG -#endif - break; - } - - return true; -} - -void image_transfer_set_buffer_ptr( - void *data, - enum image_type_enum type, - void *ptr) -{ - switch (type) - { - case IMAGE_TYPE_PNG: -#ifdef HAVE_RPNG - rpng_set_buf_ptr((rpng_t*)data, (uint8_t*)ptr); -#endif - break; - case IMAGE_TYPE_JPEG: -#ifdef HAVE_RJPEG -#endif - break; - } -} - -static int image_transfer_process( - void *data, - enum image_type_enum type, - uint32_t **buf, - unsigned *width, unsigned *height) -{ - switch (type) - { - case IMAGE_TYPE_PNG: -#ifdef HAVE_RPNG - if (!rpng_is_valid((rpng_t*)data)) - return IMAGE_PROCESS_ERROR; - - return rpng_nbio_load_image_argb_process( - (rpng_t*)data, - buf, - width, height); -#endif - break; - case IMAGE_TYPE_JPEG: -#ifdef HAVE_RJPEG -#endif - break; - } - - return 0; -} - -static bool image_transfer_iterate(void *data, enum image_type_enum type) -{ - switch (type) - { - case IMAGE_TYPE_PNG: -#ifdef HAVE_RPNG - if (!rpng_nbio_load_image_argb_iterate((rpng_t*)data)) - return false; -#endif - break; - case IMAGE_TYPE_JPEG: -#ifdef HAVE_RJPEG -#endif - break; - } - - return true; -} - static int rarch_main_data_image_process( nbio_handle_t *nbio, unsigned *width, unsigned *height) { int retval = image_transfer_process( - (rpng_t*)nbio->image.handle, + nbio->image.handle, nbio->image_type, &nbio->image.ti.pixels, width, height); diff --git a/tasks/tasks_internal.h b/tasks/tasks_internal.h index f880dbe156..7ab3291530 100644 --- a/tasks/tasks_internal.h +++ b/tasks/tasks_internal.h @@ -40,12 +40,6 @@ enum nbio_status_enum NBIO_STATUS_TRANSFER_PARSE_FREE }; -enum image_type_enum -{ - IMAGE_TYPE_PNG = 0, - IMAGE_TYPE_JPEG -}; - #ifdef HAVE_NETWORKING typedef struct {