forked from len0rd/rockbox
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
50 lines
No EOL
1.1 KiB
C
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;
|
|
} |