From bcd8d5d3460947ac4beef7f740598d4f8ae83e24 Mon Sep 17 00:00:00 2001 From: jp9000 Date: Sat, 28 Jun 2014 10:07:55 -0700 Subject: [PATCH] Add MagickCore image file support to the core MagickCore is provided here as an alternative to FFmpeg in case FFmpeg is not easily supported (for example, debian-based linux distros). NOTE: Cmake configuration needs to be changed in order to allow MagickCore image support. --- libobs/graphics/graphics-magick.c | 51 +++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 libobs/graphics/graphics-magick.c diff --git a/libobs/graphics/graphics-magick.c b/libobs/graphics/graphics-magick.c new file mode 100644 index 000000000..e32cd2e6d --- /dev/null +++ b/libobs/graphics/graphics-magick.c @@ -0,0 +1,51 @@ +#include "graphics.h" + +#include + +void gs_init_image_deps() +{ + MagickCoreGenesis(NULL, MagickTrue); +} + +void gs_free_image_deps() +{ + MagickCoreTerminus(); +} + +texture_t gs_create_texture_from_file(const char *file) +{ + texture_t tex = NULL; + ImageInfo *info = CloneImageInfo(NULL); + ExceptionInfo *exception = AcquireExceptionInfo(); + Image *image; + + strcpy(info->filename, file); + image = ReadImage(info, exception); + if (image) { + size_t cx = image->magick_columns; + size_t cy = image->magick_rows; + uint8_t *data = malloc(cx * cy * 4); + + ExportImagePixels(image, 0, 0, cx, cy, "BGRA", CharPixel, + data, exception); + if (exception->severity == UndefinedException) + tex = gs_create_texture(cx, cy, GS_BGRA, 1, + (const uint8**)&data, 0); + else + blog(LOG_WARNING, "magickcore warning/error getting " + "pixels from file '%s': %s", file, + exception->reason); + + free(data); + DestroyImage(image); + + } else if (exception->severity != UndefinedException) { + blog(LOG_WARNING, "magickcore warning/error reading file " + "'%s': %s", file, exception->reason); + } + + DestroyImageInfo(info); + DestroyExceptionInfo(exception); + + return tex; +}