summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Soffke <christian.soffke@gmail.com>2024-04-10 20:51:34 +0200
committerChristian Soffke <christian.soffke@gmail.com>2024-04-13 16:19:48 +0200
commitb06073f7716373b115b4e039193ce622dbccb3a5 (patch)
tree8f865f8f39d76472efacbc36e00190c6911addea
parent05b070b0b89e04a0287d35fd68f192fe52c31abf (diff)
downloadrockbox-b06073f771.tar.gz
rockbox-b06073f771.zip
buffering: ensure sufficient buffer size loading bitmaps
Commits 5aa0fc3 and 32f1418 (g#4451, g#4452) changed the amount of space that was allocated for loading bitmaps used to display album art. Testing revealed that the size of the JPEG decode buffer can reach up to (38 * 1024)B in some cases. When the limit is reached, additional space is required by the resize_on_load function. Change-Id: If93b45754a4f5948b6160f659182e4618e01912e
-rw-r--r--apps/buffering.c8
-rw-r--r--apps/recorder/jpeg_load.c2
2 files changed, 8 insertions, 2 deletions
diff --git a/apps/buffering.c b/apps/buffering.c
index 81b861ccf1..bf41544c56 100644
--- a/apps/buffering.c
+++ b/apps/buffering.c
@@ -975,8 +975,14 @@ int bufopen(const char *file, off_t offset, enum data_type type,
* TODO: don't add unncessary overhead for .bmp images! */
size += JPEG_DECODE_OVERHEAD;
#endif
- }
+ /* resize_on_load requires space for 1 line + 2 spare lines */
+#ifdef HAVE_LCD_COLOR
+ size += sizeof(struct uint32_argb) * 3 * aa->dim->width;
+#else
+ size += sizeof(uint32_t) * 3 * aa->dim->width;
#endif
+ }
+#endif /* HAVE_ALBUMART */
if (size == 0)
size = filesize(fd);
diff --git a/apps/recorder/jpeg_load.c b/apps/recorder/jpeg_load.c
index 34d543b56e..eccd781f9b 100644
--- a/apps/recorder/jpeg_load.c
+++ b/apps/recorder/jpeg_load.c
@@ -2231,7 +2231,7 @@ int read_jpeg_fd(int fd,
const size_t JPEG_DECODE_OVERHEAD =
/* Reserve an arbitrary amount for the decode buffer
* FIXME: Somebody who knows what they're doing should look at this */
- (32 * 1024)
+ (38 * 1024)
#ifndef JPEG_FROM_MEM
/* Unless the struct jpeg is defined statically, we need to allocate
* it in the bitmap buffer as well */