From 85bb618f1bb8b2a73f3a37df56a88b858b1f1d46 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Tue, 18 Apr 2017 12:33:09 +0200 Subject: image loading update --- drmtest.c | 16 ++++++++++++++-- gtktest.c | 2 +- image.c | 20 +++++++++++++++++++- image.h | 3 ++- 4 files changed, 36 insertions(+), 5 deletions(-) diff --git a/drmtest.c b/drmtest.c index db57b98..ab58bc5 100644 --- a/drmtest.c +++ b/drmtest.c @@ -26,6 +26,7 @@ #include "drmtools.h" #include "render.h" +#include "image.h" /* ------------------------------------------------------------------ */ @@ -54,6 +55,9 @@ cairo_device_t *cd; cairo_surface_t *cs; cairo_t *cc; +/* user options */ +cairo_surface_t *image; + /* ------------------------------------------------------------------ */ static void drm_init_dev(int devnr, const char *output, @@ -178,7 +182,11 @@ static void drm_draw(const char *text) snprintf(info, sizeof(info), "drmtest: %dx%d at %s", mode->hdisplay, mode->vdisplay, name); cr = cairo_create(cs); - render_test(cr, mode->hdisplay, mode->vdisplay, info, text); + if (image) { + render_image(cr, mode->hdisplay, mode->vdisplay, image); + } else { + render_test(cr, mode->hdisplay, mode->vdisplay, info, text); + } cairo_destroy(cr); } @@ -401,6 +409,7 @@ static void usage(FILE *fp) " -c pick card\n" " -o pick output\n" " -s set sleep time\n" + " -i load and display image \n" " -g openngl mode\n" #if 0 " -d debug mode (opengl)\n" @@ -418,7 +427,7 @@ int main(int argc, char **argv) int c; for (;;) { - c = getopt(argc, argv, "hgdc:s:o:"); + c = getopt(argc, argv, "hgdc:s:o:i:"); if (c == -1) break; switch (c) { @@ -428,6 +437,9 @@ int main(int argc, char **argv) case 's': secs = atoi(optarg); break; + case 'i': + image = load_image(optarg); + break; case 'o': output = optarg; break; diff --git a/gtktest.c b/gtktest.c index 4174029..43a14b3 100644 --- a/gtktest.c +++ b/gtktest.c @@ -49,7 +49,7 @@ int main(int argc, char *argv[]) if (argv[1]) { fprintf(stderr, "loading %s ...\n", argv[1]); - image = load_jpeg(argv[1]); + image = load_image(argv[1]); } gtk_widget_show_all(window); diff --git a/image.c b/image.c index 62e3da1..a1a1bb5 100644 --- a/image.c +++ b/image.c @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include @@ -12,7 +13,7 @@ #include "image.h" -cairo_surface_t *load_jpeg(const char* filename) +static cairo_surface_t *load_jpeg(const char* filename) { struct jpeg_decompress_struct info; struct jpeg_error_mgr err; @@ -56,3 +57,20 @@ cairo_surface_t *load_jpeg(const char* filename) fclose(file); return surface; } + +cairo_surface_t *load_image(const char* filename) +{ + char *ext = strrchr(filename, '.'); + + if (!ext) + return NULL; + + if (strcasecmp(ext, ".jpeg") == 0 || + strcasecmp(ext, ".jpg")) + return load_jpeg(filename); + + if (strcasecmp(ext, ".png") == 0) + return cairo_image_surface_create_from_png(filename); + + return NULL; +} diff --git a/image.h b/image.h index 887ce3e..1ab409d 100644 --- a/image.h +++ b/image.h @@ -1 +1,2 @@ -cairo_surface_t *load_jpeg(const char* filename); +cairo_surface_t *load_image(const char* filename); + -- cgit