1
0
Fork 0
forked from len0rd/rockbox
foxbox/apps/plugins/imageviewer/jpegp/mempool.c
Roman Artiukhin b8238f7b20 imageviewer: Initial support for JPEG progressive images. Add decoder
Added jpeg decoder jpegp.c using RAINBOW lib. Currently enabled only for pictures not supported by old decoder (as old decoder more optimized for low mem targets)

Someone TODO:
 * Old decoder has optimized downscale logic which new decoder doesn't have (it gives big difference in required memory and time for decoding). This logic should be ported/adapted if possible.

 * Add smooth downscaling.

 * Grayscale support

Change-Id: Ie96bc62848b51cc6a3942f8e069ec6ab02dc1c56
2024-10-14 09:19:34 -04:00

50 lines
No EOL
1.1 KiB
C

#include <inttypes.h>
#include "plugin.h"
static unsigned char *mem_pool;
static unsigned char *mem_pool_start;
static size_t memory_size;
extern void *malloc(size_t size)
{
if (size > memory_size)
return NULL;
memory_size -= size;
unsigned char* ptr = mem_pool;
mem_pool+= size;
return ptr;
}
extern void *calloc(size_t nelem, size_t elem_size)
{
unsigned char* ptr = malloc(nelem*elem_size);
if (!ptr)
return NULL;
rb->memset(ptr, 0, nelem*elem_size);
return ptr;
}
extern void init_mem_pool(const unsigned char *buf, const ssize_t buf_size)
{
//TODO: do we need this alignment? (copied from gif lib)
unsigned char *memory_max;
/* align buffer */
mem_pool_start = mem_pool = (unsigned char *)((intptr_t)(buf + 3) & ~3);
memory_max = (unsigned char *)((intptr_t)(mem_pool + buf_size) & ~3);
memory_size = memory_max - mem_pool;
}
extern ssize_t freeze_mem_pool(void)
{
mem_pool_start = mem_pool;
return memory_size;
}
extern void clear_mem_pool(void)
{
memory_size += mem_pool - mem_pool_start;
mem_pool = mem_pool_start;
}