diff options
-rw-r--r-- | drmtest.c | 16 | ||||
-rw-r--r-- | gtktest.c | 2 | ||||
-rw-r--r-- | image.c | 20 | ||||
-rw-r--r-- | image.h | 3 |
4 files changed, 36 insertions, 5 deletions
@@ -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 <nr> pick card\n" " -o <name> pick output\n" " -s <secs> set sleep time\n" + " -i <file> load and display image <file>\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; @@ -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); @@ -2,6 +2,7 @@ #include <stdlib.h> #include <stdint.h> #include <string.h> +#include <strings.h> #include <unistd.h> #include <errno.h> #include <endian.h> @@ -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; +} @@ -1 +1,2 @@ -cairo_surface_t *load_jpeg(const char* filename); +cairo_surface_t *load_image(const char* filename); + |