summaryrefslogtreecommitdiff
path: root/apps/plugins/ppmviewer.c
diff options
context:
space:
mode:
authorRafaël Carré <rafael.carre@gmail.com>2010-06-10 18:28:31 +0000
committerRafaël Carré <rafael.carre@gmail.com>2010-06-10 18:28:31 +0000
commit0acf34fc2dac40aca238d77a5813a4dc91de340f (patch)
treed0d6de2712645ef04f396fb055f2304068f1ab6d /apps/plugins/ppmviewer.c
parent05ca8978c4fe965a619f016d79aaf6955767abf9 (diff)
downloadrockbox-0acf34fc2dac40aca238d77a5813a4dc91de340f.zip
rockbox-0acf34fc2dac40aca238d77a5813a4dc91de340f.tar.gz
rockbox-0acf34fc2dac40aca238d77a5813a4dc91de340f.tar.bz2
rockbox-0acf34fc2dac40aca238d77a5813a4dc91de340f.tar.xz
ppmviewer: steal from audiobuffer for large arrays
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26744 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins/ppmviewer.c')
-rw-r--r--apps/plugins/ppmviewer.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/apps/plugins/ppmviewer.c b/apps/plugins/ppmviewer.c
index b186393..af66b58 100644
--- a/apps/plugins/ppmviewer.c
+++ b/apps/plugins/ppmviewer.c
@@ -38,8 +38,7 @@ PLUGIN_HEADER
#define ppm_error(...) rb->splashf(HZ*2, __VA_ARGS__ )
-static fb_data buffer[PPM_MAXSIZE];
-static fb_data lcd_buf[LCD_WIDTH * LCD_HEIGHT];
+static fb_data *buffer, *lcd_buf;
int ppm_read_magic_number(int fd)
{
@@ -294,6 +293,19 @@ enum plugin_status plugin_start(const void* parameter)
if(!parameter) return PLUGIN_ERROR;
+ size_t buffer_size;
+ char *audiobuf = rb->plugin_get_audio_buffer(&buffer_size);
+ if (buffer_size < PPM_MAXSIZE + LCD_WIDTH * LCD_HEIGHT + 1)
+ {
+ rb->splash(HZ, "Not enough memory");
+ return PLUGIN_ERROR;
+ }
+
+ /* align on 16 bits */
+ audiobuf = (char *)(((uintptr_t)audiobuf + 1) & ~1);
+ buffer = (fb_data *)audiobuf;
+ lcd_buf = (fb_data*) (audiobuf + PPM_MAXSIZE);
+
rb->strcpy(filename, parameter);
fd = rb->open(filename, O_RDONLY);