diff options
| author | Rafaël Carré <rafael.carre@gmail.com> | 2010-06-10 18:28:31 +0000 |
|---|---|---|
| committer | Rafaël Carré <rafael.carre@gmail.com> | 2010-06-10 18:28:31 +0000 |
| commit | 0acf34fc2dac40aca238d77a5813a4dc91de340f (patch) | |
| tree | d0d6de2712645ef04f396fb055f2304068f1ab6d /apps/plugins/ppmviewer.c | |
| parent | 05ca8978c4fe965a619f016d79aaf6955767abf9 (diff) | |
| download | rockbox-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.c | 16 |
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); |