summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Mahone <andrew.mahone@gmail.com>2009-05-02 03:47:46 +0000
committerAndrew Mahone <andrew.mahone@gmail.com>2009-05-02 03:47:46 +0000
commit3d4c68bb060bc926a1da72d6c00b86ebb87857c7 (patch)
tree4a49d1671ca28faa5e06c1851b6b6de41969e4fc
parent75f2629778a55d5b59ecb57e326879964610b063 (diff)
downloadrockbox-3d4c68bb060bc926a1da72d6c00b86ebb87857c7.zip
rockbox-3d4c68bb060bc926a1da72d6c00b86ebb87857c7.tar.gz
rockbox-3d4c68bb060bc926a1da72d6c00b86ebb87857c7.tar.bz2
rockbox-3d4c68bb060bc926a1da72d6c00b86ebb87857c7.tar.xz
Add read_<image>_fd functions to plugin API, add feature_wrappers.h handling for them, and add read_image.[ch] wrapper for reading image files with automatic type detection.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20840 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/plugin.c6
-rw-r--r--apps/plugin.h12
-rw-r--r--apps/plugins/lib/SOURCES1
-rw-r--r--apps/plugins/lib/feature_wrappers.h2
-rw-r--r--apps/plugins/lib/read_image.c55
-rw-r--r--apps/plugins/lib/read_image.h34
6 files changed, 105 insertions, 5 deletions
diff --git a/apps/plugin.c b/apps/plugin.c
index 7ebb2aa..33a6194 100644
--- a/apps/plugin.c
+++ b/apps/plugin.c
@@ -643,8 +643,12 @@ static const struct plugin_api rockbox_api = {
lcd_pal256_update_pal,
#endif
#endif
-#if defined(HAVE_LCD_BITMAP) && LCD_DEPTH > 1
+#ifdef HAVE_LCD_BITMAP
+#if LCD_DEPTH > 1
read_jpeg_file,
+ read_jpeg_fd,
+#endif
+ read_bmp_fd,
#endif
};
diff --git a/apps/plugin.h b/apps/plugin.h
index ab570d4..19eb962 100644
--- a/apps/plugin.h
+++ b/apps/plugin.h
@@ -79,9 +79,7 @@ void* plugin_get_buffer(size_t *buffer_size);
#ifdef HAVE_LCD_BITMAP
#include "screendump.h"
#include "scrollbar.h"
-#if LCD_DEPTH > 1
#include "jpeg_load.h"
-#endif
#include "../recorder/bmp.h"
#endif
#include "statusbar.h"
@@ -131,7 +129,7 @@ void* plugin_get_buffer(size_t *buffer_size);
#define PLUGIN_MAGIC 0x526F634B /* RocK */
/* increase this every time the api struct changes */
-#define PLUGIN_API_VERSION 148
+#define PLUGIN_API_VERSION 149
/* update this to latest version if a change to the api struct breaks
backwards compatibility (and please take the opportunity to sort in any
@@ -806,9 +804,15 @@ struct plugin_api {
#endif
#endif
-#if defined(HAVE_LCD_BITMAP) && LCD_DEPTH > 1
+#ifdef HAVE_LCD_BITMAP
+#if LCD_DEPTH > 1
int (*read_jpeg_file)(const char* filename, struct bitmap *bm, int maxsize,
int format, const struct custom_format *cformat);
+ int (*read_jpeg_fd)(int fd, struct bitmap *bm, int maxsize,
+ int format, const struct custom_format *cformat);
+#endif
+ int (*read_bmp_fd)(int fd, struct bitmap *bm, int maxsize,
+ int format, const struct custom_format *cformat);
#endif
};
diff --git a/apps/plugins/lib/SOURCES b/apps/plugins/lib/SOURCES
index 7dda416..dfdd569 100644
--- a/apps/plugins/lib/SOURCES
+++ b/apps/plugins/lib/SOURCES
@@ -41,6 +41,7 @@ xlcd_core.c
xlcd_draw.c
xlcd_scroll.c
pluginlib_bmp.c
+read_image.c
#ifdef HAVE_LCD_COLOR
bmp_smooth_scale.c
#endif
diff --git a/apps/plugins/lib/feature_wrappers.h b/apps/plugins/lib/feature_wrappers.h
index 22ce779..cf840e6 100644
--- a/apps/plugins/lib/feature_wrappers.h
+++ b/apps/plugins/lib/feature_wrappers.h
@@ -43,8 +43,10 @@
*/
#if LCD_DEPTH > 1
#define scaled_read_bmp_file rb->read_bmp_file
+#define scaled_read_bmp_fd rb->read_bmp_fd
#else
#define scaled_read_bmp_file read_bmp_file
+#define scaled_read_bmp_fd read_bmp_fd
#endif
#endif
diff --git a/apps/plugins/lib/read_image.c b/apps/plugins/lib/read_image.c
new file mode 100644
index 0000000..0420ed8
--- /dev/null
+++ b/apps/plugins/lib/read_image.c
@@ -0,0 +1,55 @@
+/***************************************************************************
+* __________ __ ___.
+* Open \______ \ ____ ____ | | _\_ |__ _______ ___
+* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+* \/ \/ \/ \/ \/
+* $Id$
+*
+* Copyright (C) 2009 by Andrew Mahone
+*
+* This is a wrapper for the core jpeg_load.c
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+* KIND, either express or implied.
+*
+****************************************************************************/
+
+#include <plugin.h>
+#include "feature_wrappers.h"
+
+int read_image_file(const char* filename, struct bitmap *bm, int maxsize,
+ int format, const struct custom_format *cformat)
+{
+#if LCD_DEPTH > 1
+ int namelen = rb->strlen(filename);
+ if (rb->strcmp(filename + namelen - 4, ".bmp"))
+ return read_jpeg_file(filename, bm, maxsize, format, cformat);
+ else
+#endif
+ return scaled_read_bmp_file(filename, bm, maxsize, format, cformat);
+}
+
+int read_image_file_offset(int offset, const char* filename, struct bitmap *bm,
+ int maxsize, int format,
+ const struct custom_format *cformat)
+{
+ int fd = rb->open(filename, O_RDONLY);
+ if (fd < 0)
+ return fd;
+ if (offset != rb->lseek(fd, offset, SEEK_SET))
+ return -1;
+#if LCD_DEPTH > 1
+ int namelen = rb->strlen(filename);
+ if (rb->strcmp(filename + namelen - 4, ".bmp"))
+ return read_jpeg_fd(fd, bm, maxsize, format, cformat);
+ else
+#endif
+ return scaled_read_bmp_fd(fd, bm, maxsize, format, cformat);
+}
diff --git a/apps/plugins/lib/read_image.h b/apps/plugins/lib/read_image.h
new file mode 100644
index 0000000..3e23668
--- /dev/null
+++ b/apps/plugins/lib/read_image.h
@@ -0,0 +1,34 @@
+/***************************************************************************
+* __________ __ ___.
+* Open \______ \ ____ ____ | | _\_ |__ _______ ___
+* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+* \/ \/ \/ \/ \/
+* $Id$
+*
+* Copyright (C) 2009 by Andrew Mahone
+*
+* This is a wrapper for the core jpeg_load.c
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+* KIND, either express or implied.
+*
+****************************************************************************/
+
+#ifndef _LIB_READ_IMAGE_H_
+#define _LIB_READ_IMAGE_H_
+#include <plugin.h>
+
+int read_image_file(const char* filename, struct bitmap *bm, int maxsize,
+ int format, const struct custom_format *cformat);
+int read_image_file_offset(int offset, const char* filename, struct bitmap *bm,
+ int maxsize, int format,
+ const struct custom_format *cformat);
+#endif
+