Merging r50245 through r50247 from trunk into soc-2011-tomato
This commit is contained in:
@@ -69,16 +69,25 @@ typedef struct BMPHEADER {
|
||||
|
||||
static int checkbmp(unsigned char *mem)
|
||||
{
|
||||
#define CHECK_HEADER_FIELD(mem, field) ((mem[0] == field[0]) && (mem[1] == field[0]))
|
||||
|
||||
int ret_val = 0;
|
||||
BMPINFOHEADER bmi;
|
||||
unsigned int u;
|
||||
|
||||
if (mem) {
|
||||
if ((mem[0] == 'B') && (mem[1] == 'M')) {
|
||||
if (CHECK_HEADER_FIELD(mem, "BM") ||
|
||||
CHECK_HEADER_FIELD(mem, "BA") ||
|
||||
CHECK_HEADER_FIELD(mem, "CI") ||
|
||||
CHECK_HEADER_FIELD(mem, "CP") ||
|
||||
CHECK_HEADER_FIELD(mem, "IC") ||
|
||||
CHECK_HEADER_FIELD(mem, "PT"))
|
||||
{
|
||||
/* skip fileheader */
|
||||
mem += BMP_FILEHEADER_SIZE;
|
||||
}
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* for systems where an int needs to be 4 bytes aligned */
|
||||
@@ -97,6 +106,8 @@ static int checkbmp(unsigned char *mem)
|
||||
}
|
||||
|
||||
return(ret_val);
|
||||
|
||||
#undef CHECK_HEADER_FIELD
|
||||
}
|
||||
|
||||
int imb_is_a_bmp(unsigned char *buf)
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
#define JP2_FILEHEADER_SIZE 14
|
||||
|
||||
static char JP2_HEAD[] = {0x0, 0x0, 0x0, 0x0C, 0x6A, 0x50, 0x20, 0x20, 0x0D, 0x0A, 0x87, 0x0A};
|
||||
static char J2K_HEAD[] = {0xFF, 0x4F, 0xFF, 0x51, 0x00};
|
||||
|
||||
/* We only need this because of how the presets are set */
|
||||
/* this typedef is copied from 'openjpeg-1.5.0/applications/codec/image_to_j2k.c' */
|
||||
@@ -59,15 +60,19 @@ typedef struct img_folder {
|
||||
|
||||
static int check_jp2(unsigned char *mem) /* J2K_CFMT */
|
||||
{
|
||||
return memcmp(JP2_HEAD, mem, 12) ? 0 : 1;
|
||||
return memcmp(JP2_HEAD, mem, sizeof(JP2_HEAD)) ? 0 : 1;
|
||||
}
|
||||
|
||||
static int check_j2k(unsigned char *mem) /* J2K_CFMT */
|
||||
{
|
||||
return memcmp(J2K_HEAD, mem, sizeof(J2K_HEAD)) ? 0 : 1;
|
||||
}
|
||||
|
||||
int imb_is_a_jp2(unsigned char *buf)
|
||||
{
|
||||
{
|
||||
return check_jp2(buf);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* sample error callback expecting a FILE* client object
|
||||
*/
|
||||
@@ -116,6 +121,7 @@ struct ImBuf *imb_jp2_decode(unsigned char *mem, size_t size, int flags)
|
||||
unsigned int i, i_next, w, h, planes;
|
||||
unsigned int y;
|
||||
int *r, *g, *b, *a; /* matching 'opj_image_comp.data' type */
|
||||
int is_jp2, is_j2k;
|
||||
|
||||
opj_dparameters_t parameters; /* decompression parameters */
|
||||
|
||||
@@ -125,7 +131,11 @@ struct ImBuf *imb_jp2_decode(unsigned char *mem, size_t size, int flags)
|
||||
opj_dinfo_t *dinfo = NULL; /* handle to a decompressor */
|
||||
opj_cio_t *cio = NULL;
|
||||
|
||||
if (check_jp2(mem) == 0) return(NULL);
|
||||
is_jp2 = check_jp2(mem);
|
||||
is_j2k = check_j2k(mem);
|
||||
|
||||
if (!is_jp2 && !is_j2k)
|
||||
return(NULL);
|
||||
|
||||
/* configure the event callbacks (not required) */
|
||||
memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
|
||||
@@ -141,7 +151,7 @@ struct ImBuf *imb_jp2_decode(unsigned char *mem, size_t size, int flags)
|
||||
/* JPEG 2000 compressed image data */
|
||||
|
||||
/* get a decoder handle */
|
||||
dinfo = opj_create_decompress(CODEC_JP2);
|
||||
dinfo = opj_create_decompress(is_jp2 ? CODEC_JP2 : CODEC_J2K);
|
||||
|
||||
/* catch events using our callbacks and give a local context */
|
||||
opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
|
||||
|
||||
@@ -83,6 +83,7 @@ const char *imb_ext_image[] = {
|
||||
#endif
|
||||
#ifdef WITH_OPENJPEG
|
||||
".jp2",
|
||||
".j2c",
|
||||
#endif
|
||||
#ifdef WITH_HDR
|
||||
".hdr",
|
||||
|
||||
Reference in New Issue
Block a user