123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- #include "graphics.h"
- #include "obsconfig.h"
- #define MAGICKCORE_QUANTUM_DEPTH 16
- #define MAGICKCORE_HDRI_ENABLE 0
- #if LIBOBS_IMAGEMAGICK_DIR_STYLE == LIBOBS_IMAGEMAGICK_DIR_STYLE_6L
- #include <magick/MagickCore.h>
- #elif LIBOBS_IMAGEMAGICK_DIR_STYLE == LIBOBS_IMAGEMAGICK_DIR_STYLE_7GE
- #include <MagickCore/MagickCore.h>
- #endif
- void gs_init_image_deps()
- {
- MagickCoreGenesis(NULL, MagickTrue);
- }
- void gs_free_image_deps()
- {
- MagickCoreTerminus();
- }
- uint8_t *gs_create_texture_file_data(const char *file,
- enum gs_color_format *format,
- uint32_t *cx_out, uint32_t *cy_out)
- {
- uint8_t *data = NULL;
- ImageInfo *info;
- ExceptionInfo *exception;
- Image *image;
- if (!file || !*file)
- return NULL;
- info = CloneImageInfo(NULL);
- exception = AcquireExceptionInfo();
- strcpy(info->filename, file);
- image = ReadImage(info, exception);
- if (image) {
- size_t cx = image->magick_columns;
- size_t cy = image->magick_rows;
- data = bmalloc(cx * cy * 4);
- ExportImagePixels(image, 0, 0, cx, cy, "BGRA", CharPixel, data,
- exception);
- if (exception->severity != UndefinedException) {
- blog(LOG_WARNING,
- "magickcore warning/error getting "
- "pixels from file '%s': %s",
- file, exception->reason);
- bfree(data);
- data = NULL;
- }
- *format = GS_BGRA;
- *cx_out = (uint32_t)cx;
- *cy_out = (uint32_t)cy;
- 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 data;
- }
|