aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drmtest.c16
-rw-r--r--gtktest.c2
-rw-r--r--image.c20
-rw-r--r--image.h3
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 <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;
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 <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;
+}
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);
+