! : changed
+ : added
+December 8, 2010
+ (thanks to Winfried for his help)
+* [antonin] changed remaining "WIN32" to "_WIN32"
+! [antonin] libopenjpeg has no more dependency on LCMS lib. Everything concerning color (icc profile, conversion to rgb, etc) has been put outside libopenjpeg and is used in j2k_to_image.c and mj2_to_frames.c.
+- [antonin] removed 'opj_convert{.c,.h}'
++ [antonin] added a directory 'common/' that contains 'getopt{.c,.h}' (previously in 'codec/compat').
++ [antonin] added files 'color{.c,.h}' in 'common/' that define the code for icc profile management and sycc_to_rgb conversion
++ [antonin] added 'common/format_defs.h' that contains common definitions used in image_to_j2k, j2k_to_image, j2k_dump.
+
December 5, 2010
! [antonin] revert to previous behaviour for cmake: builds (and links) dynamically by default. Static build only if -DBUILD_SHARED_LIBS is set to OFF.
* [antonin] added a definition in getopt.h and an initial value in convert.c
#include <math.h>\r
\r
#include "openjpeg.h"\r
-#include "compat/getopt.h"\r
+#include "getopt.h"\r
#include "convert.h"\r
#include "index.h"\r
#include "dirent.h"\r
#include "org_openJpeg_OpenJPEGJavaEncoder.h"\r
\r
-#ifndef WIN32\r
+#ifndef _WIN32\r
#define stricmp strcasecmp\r
#define strnicmp strncasecmp\r
#endif\r
\r
-/* ----------------------------------------------------------------------- */\r
+#include "format_defs.h"\r
\r
-#define J2K_CFMT 0\r
-#define JP2_CFMT 1\r
-#define JPT_CFMT 2\r
-\r
-#define PXM_DFMT 10\r
-#define PGX_DFMT 11\r
-#define BMP_DFMT 12\r
-#define YUV_DFMT 13\r
-#define TIF_DFMT 14\r
-#define RAW_DFMT 15\r
-#define TGA_DFMT 16\r
-\r
-/* ----------------------------------------------------------------------- */\r
#define CINEMA_24_CS 1302083 /*Codestream length for 24fps*/\r
#define CINEMA_48_CS 651041 /*Codestream length for 48fps*/\r
#define COMP_24_CS 1041666 /*Maximum size per color component for 2K & 4K @ 24fps*/\r
#include <math.h>\r
\r
#include "openjpeg.h"\r
-#include "compat/getopt.h"\r
+#include "getopt.h"\r
#include "convert.h"\r
#include "dirent.h"\r
#include "org_openJpeg_OpenJPEGJavaDecoder.h"\r
\r
-#ifndef WIN32\r
+#ifndef _WIN32\r
#define stricmp strcasecmp\r
#define strnicmp strncasecmp\r
#endif\r
\r
-/* ----------------------------------------------------------------------- */\r
-\r
-#define J2K_CFMT 0\r
-#define JP2_CFMT 1\r
-#define JPT_CFMT 2\r
-\r
-#define PXM_DFMT 10\r
-#define PGX_DFMT 11\r
-#define BMP_DFMT 12\r
-#define YUV_DFMT 13\r
-#define TIF_DFMT 14\r
-#define RAW_DFMT 15\r
-#define TGA_DFMT 16\r
-\r
-/* ----------------------------------------------------------------------- */\r
+#include "format_defs.h"\r
\r
typedef struct callback_variables {\r
JNIEnv *env;\r
./libopenjpeg/mct.c ./libopenjpeg/mqc.c ./libopenjpeg/openjpeg.c \
./libopenjpeg/pi.c ./libopenjpeg/raw.c ./libopenjpeg/t1.c \
./libopenjpeg/t2.c ./libopenjpeg/tcd.c ./libopenjpeg/tgt.c \
- ./libopenjpeg/opj_convert.c
INCLS = ./libopenjpeg/bio.h ./libopenjpeg/cio.h ./libopenjpeg/dwt.h \
./libopenjpeg/event.h ./libopenjpeg/fix.h ./libopenjpeg/image.h \
./libopenjpeg/mqc.h ./libopenjpeg/openjpeg.h ./libopenjpeg/pi.h \
./libopenjpeg/raw.h ./libopenjpeg/t1.h ./libopenjpeg/t2.h \
./libopenjpeg/tcd.h ./libopenjpeg/tgt.h ./libopenjpeg/opj_malloc.h \
- ./libopenjpeg/opj_convert.h ./libopenjpeg/opj_includes.h
-
-AR = ar
+ ./libopenjpeg/opj_includes.h
INSTALL_LIBDIR = $(prefix)/lib
headerdir = openjpeg-$(MAJOR).$(MINOR)
* POSSIBILITY OF SUCH DAMAGE.\r
*/\r
\r
-#ifdef WIN32\r
+#ifdef _WIN32\r
#include <windows.h>\r
-#endif\r
+#endif /* _WIN32 */\r
#include <stdio.h>\r
#include <string.h>\r
#include "md5.h"\r
\r
int doprocess(char programme[4096],char command_line[4096]) {\r
\r
-#ifdef WIN32\r
+#ifdef _WIN32\r
\r
int exit=STILL_ACTIVE;\r
STARTUPINFO siStartupInfo;\r
\r
return 0;\r
\r
-#else // #ifndef WIN32\r
+#else /* !_WIN32 */\r
printf("\n%s\n", command_line);\r
system(command_line);\r
return 0;\r
\r
-#endif\r
+#endif /* _WIN32 */\r
\r
}\r
\r
-# Build the demo app, small examples
+ # Build the demo app, small examples
# First thing define the common source:
SET(common_SRCS
convert.c
index.c
+ ${PROJECT_SOURCE_DIR}/common/color.c
)
# If not getopt was found then add it to the lib:
IF(DONT_HAVE_GETOPT)
SET(common_SRCS
${common_SRCS}
- compat/getopt.c
+ ${PROJECT_SOURCE_DIR}/common/getopt.c
)
ENDIF(DONT_HAVE_GETOPT)
INCLUDE_DIRECTORIES(
${OPENJPEG_SOURCE_DIR}/libopenjpeg
${LCMS_INCLUDE_DIR}
+ ${OPENJPEG_SOURCE_DIR}/common
)
IF(PNG_FOUND)
INCLUDE_DIRECTORIES(${PNG_INCLUDE_DIR})
COMPILERFLAGS = -Wall -static
USERLIBS = -lm
-INCLUDES = -I.. -I. -I../libopenjpeg
+INCLUDES = -I.. -I. -I../libopenjpeg -I../common
if with_libtiff
INCLUDES += @tiffincludes@
CFLAGS = $(COMPILERFLAGS) $(INCLUDES)
LDADD = $(USERLIBS) ../libopenjpeg/libopenjpeg.la
-j2k_to_image_SOURCES = compat/getopt.c index.c convert.c j2k_to_image.c
+j2k_to_image_SOURCES = ../common/getopt.c index.c convert.c \
+ ../common/color.c j2k_to_image.c
-image_to_j2k_SOURCES = compat/getopt.c index.c convert.c image_to_j2k.c
+image_to_j2k_SOURCES = ../common/getopt.c index.c convert.c image_to_j2k.c
-j2k_dump_SOURCES = compat/getopt.c index.c j2k_dump.c
+j2k_dump_SOURCES = ../common/getopt.c index.c j2k_dump.c
REPBIN=$(bin_PROGRAMS)
INSTALL_BIN = $(prefix)/bin
-INCLUDE = -I.. -I. -I../libopenjpeg
+INCLUDE = -I.. -I. -I../libopenjpeg -I../common
USERLIBS = -lm
ifeq ($(WITH_TIFF),yes)
install j2k_to_image image_to_j2k j2k_dump ../bin
j2k_to_image: j2k_to_image.c ../libopenjpeg.a
- $(CC) $(CFLAGS) compat/getopt.c index.c convert.c j2k_to_image.c \
+ $(CC) $(CFLAGS) ../common/getopt.c index.c convert.c \
+ ../common/color.c j2k_to_image.c \
-o j2k_to_image ../libopenjpeg.a $(USERLIBS)
image_to_j2k: image_to_j2k.c ../libopenjpeg.a
- $(CC) $(CFLAGS) compat/getopt.c index.c convert.c image_to_j2k.c \
+ $(CC) $(CFLAGS) ../common/getopt.c index.c convert.c image_to_j2k.c \
-o image_to_j2k ../libopenjpeg.a $(USERLIBS)
j2k_dump: j2k_dump.c ../libopenjpeg.a
- $(CC) $(CFLAGS) compat/getopt.c index.c j2k_dump.c \
+ $(CC) $(CFLAGS) ../common/getopt.c index.c j2k_dump.c \
-o j2k_dump ../libopenjpeg.a $(USERLIBS)
clean:
#include <string.h>
#ifdef HAVE_LIBTIFF
-#ifdef WIN32
+#ifdef _WIN32
#include "../libs/libtiff/tiffio.h"
#else
#include <tiffio.h>
-#endif /* WIN32 */
+#endif /* _WIN32 */
#endif /* HAVE_LIBTIFF */
#ifdef HAVE_LIBPNG
-#ifdef WIN32
+#ifdef _WIN32
#include "../libs/png/png.h"
#else
#include <png.h>
-#endif /* WIN32 */
+#endif /* _WIN32 */
#endif /* HAVE_LIBPNG */
#include "../libopenjpeg/openjpeg.h"
#include <stdlib.h>
#include <math.h>
-#include "opj_config.h"
-#include "openjpeg.h"
-#include "compat/getopt.h"
-#include "convert.h"
-#ifdef WIN32
+#ifdef _WIN32
#include "windirent.h"
#else
#include <dirent.h>
-#endif /* WIN32 */
-#include "index.h"
+#endif /* _WIN32 */
-#ifndef WIN32
+#ifdef _WIN32
+#include <windows.h>
+#else
#include <strings.h>
#define _stricmp strcasecmp
#define _strnicmp strncasecmp
-#endif
+#endif /* _WIN32 */
+
+#include "opj_config.h"
+#include "openjpeg.h"
+#include "getopt.h"
+#include "convert.h"
+#include "index.h"
+
+#include "format_defs.h"
-/* ----------------------------------------------------------------------- */
-
-#define J2K_CFMT 0
-#define JP2_CFMT 1
-#define JPT_CFMT 2
-
-#define PXM_DFMT 10
-#define PGX_DFMT 11
-#define BMP_DFMT 12
-#define YUV_DFMT 13
-#define TIF_DFMT 14
-#define RAW_DFMT 15
-#define TGA_DFMT 16
-#define PNG_DFMT 17
-/* ----------------------------------------------------------------------- */
#define CINEMA_24_CS 1302083 /*Codestream length for 24fps*/
#define CINEMA_48_CS 651041 /*Codestream length for 48fps*/
#define COMP_24_CS 1041666 /*Maximum size per color component for 2K & 4K @ 24fps*/
#include <stdlib.h>
#include <math.h>
-#include "opj_config.h"
-#include "openjpeg.h"
-#include "../libopenjpeg/j2k.h"
-#include "../libopenjpeg/jp2.h"
-#include "compat/getopt.h"
-#include "convert.h"
-#ifdef WIN32
+#ifdef _WIN32
#include "windirent.h"
#else
#include <dirent.h>
-#endif /* WIN32 */
-#include "index.h"
+#endif /* _WIN32 */
-#ifndef WIN32
+#ifdef _WIN32
+#include <windows.h>
+#else
#include <strings.h>
#define _stricmp strcasecmp
#define _strnicmp strncasecmp
-#endif
+#endif /* _WIN32 */
-/* ----------------------------------------------------------------------- */
-
-#define J2K_CFMT 0
-#define JP2_CFMT 1
-#define JPT_CFMT 2
+#include "opj_config.h"
+#include "openjpeg.h"
+#include "../libopenjpeg/j2k.h"
+#include "../libopenjpeg/jp2.h"
+#include "getopt.h"
+#include "convert.h"
+#include "index.h"
-#define PXM_DFMT 10
-#define PGX_DFMT 11
-#define BMP_DFMT 12
-#define YUV_DFMT 13
-#define TIF_DFMT 14
-#define RAW_DFMT 15
-#define TGA_DFMT 16
-#define PNG_DFMT 17
-/* ----------------------------------------------------------------------- */
+#include "format_defs.h"
typedef struct dircnt{
/** Buffer for holding images read from Directory*/
return 1;
}
/* dump image */
+ if(image->icc_profile_buf)
+ {
+ free(image->icc_profile_buf); image->icc_profile_buf = NULL;
+ }
j2k_dump_image(stdout, image);
/* dump cp */
#include <stdlib.h>
#include <math.h>
-#include "opj_config.h"
-#include "openjpeg.h"
-#include "compat/getopt.h"
-#include "convert.h"
-#ifdef WIN32
+#ifdef _WIN32
#include "windirent.h"
#else
#include <dirent.h>
-#endif /* WIN32 */
-#include "index.h"
+#endif /* _WIN32 */
-#ifndef WIN32
+#ifdef _WIN32
+#include <windows.h>
+#else
#include <strings.h>
#define _stricmp strcasecmp
#define _strnicmp strncasecmp
-#endif
+#endif /* _WIN32 */
-/* ----------------------------------------------------------------------- */
+#include "opj_config.h"
+#include "openjpeg.h"
+#include "getopt.h"
+#include "convert.h"
+#include "index.h"
-#define J2K_CFMT 0
-#define JP2_CFMT 1
-#define JPT_CFMT 2
+#ifdef HAVE_LIBLCMS2
+#include <lcms2.h>
+#endif
+#ifdef HAVE_LIBLCMS1
+#include <lcms.h>
+#endif
+#include "color.h"
-#define PXM_DFMT 10
-#define PGX_DFMT 11
-#define BMP_DFMT 12
-#define YUV_DFMT 13
-#define TIF_DFMT 14
-#define RAW_DFMT 15
-#define TGA_DFMT 16
-#define PNG_DFMT 17
-/* ----------------------------------------------------------------------- */
+#include "format_defs.h"
typedef struct dircnt{
/** Buffer for holding images read from Directory*/
free(src);
src = NULL;
+ if(image->color_space == CLRSPC_SYCC)
+ {
+ color_sycc_to_rgb(image);
+ }
+
+ if(image->icc_profile_buf)
+ {
+#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
+ color_apply_icc_profile(image);
+#endif
+
+ free(image->icc_profile_buf);
+ image->icc_profile_buf = NULL; image->icc_profile_len = 0;
+ }
+
/* create output image */
/* ------------------- */
switch (parameters.cod_format) {
--- /dev/null
+/*
+ * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
+ * Copyright (c) 2002-2007, Professor Benoit Macq
+ * Copyright (c) 2001-2003, David Janssens
+ * Copyright (c) 2002-2003, Yannick Verschueren
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
+ * Copyright (c) 2005, Herve Drolon, FreeImage Team
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include "opj_config.h"
+#include "openjpeg.h"
+#include "color.h"
+
+#ifdef HAVE_LIBLCMS2
+#include <lcms2.h>
+#endif
+#ifdef HAVE_LIBLCMS1
+#include <lcms.h>
+#endif
+
+/*--------------------------------------------------------
+Matrix f�r sYCC, Amendment 1 to IEC 61966-2-1
+
+Y : 0.299 0.587 0.114 :R
+Cb: -0.1687 -0.3312 0.5 :G
+Cr: 0.5 -0.4187 -0.0812 :B
+
+Inverse:
+
+R: 1 -3.68213e-05 1.40199 :Y
+G: 1.00003 -0.344125 -0.714128 :Cb - 2^(prec - 1)
+B: 0.999823 1.77204 -8.04142e-06 :Cr - 2^(prec - 1)
+
+-----------------------------------------------------------*/
+static void sycc_to_rgb(int offset, int upb, int y, int cb, int cr,
+ int *out_r, int *out_g, int *out_b)
+{
+ int r, g, b;
+
+ cb -= offset; cr -= offset;
+ r = y + (int)(1.402 * (float)cr);
+ if(r < 0) r = 0; else if(r > upb) r = upb; *out_r = r;
+
+ g = y - (int)(0.344 * (float)cb + 0.714 * (float)cr);
+ if(g < 0) g = 0; else if(g > upb) g = upb; *out_g = g;
+
+ b = y + (int)(1.772 * (float)cb);
+ if(b < 0) b = 0; else if(b > upb) b = upb; *out_b = b;
+}
+
+static void sycc444_to_rgb(opj_image_t *img)
+{
+ int *d0, *d1, *d2, *r, *g, *b;
+ const int *y, *cb, *cr;
+ int maxw, maxh, max, i, offset, upb;
+
+ i = img->comps[0].prec;
+ offset = 1<<(i - 1); upb = (1<<i)-1;
+
+ maxw = img->comps[0].w; maxh = img->comps[0].h;
+ max = maxw * maxh;
+
+ y = img->comps[0].data;
+ cb = img->comps[1].data;
+ cr = img->comps[2].data;
+
+ d0 = r = (int*)malloc(sizeof(int) * max);
+ d1 = g = (int*)malloc(sizeof(int) * max);
+ d2 = b = (int*)malloc(sizeof(int) * max);
+
+ for(i = 0; i < max; ++i)
+ {
+ sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+
+ ++y; ++cb; ++cr; ++r; ++g; ++b;
+ }
+ free(img->comps[0].data); img->comps[0].data = d0;
+ free(img->comps[1].data); img->comps[1].data = d1;
+ free(img->comps[2].data); img->comps[2].data = d2;
+
+}/* sycc444_to_rgb() */
+
+static void sycc422_to_rgb(opj_image_t *img)
+{
+ int *d0, *d1, *d2, *r, *g, *b;
+ const int *y, *cb, *cr;
+ int maxw, maxh, max, offset, upb;
+ int i, j;
+
+ i = img->comps[0].prec;
+ offset = 1<<(i - 1); upb = (1<<i)-1;
+
+ maxw = img->comps[0].w; maxh = img->comps[0].h;
+ max = maxw * maxh;
+
+ y = img->comps[0].data;
+ cb = img->comps[1].data;
+ cr = img->comps[2].data;
+
+ d0 = r = (int*)malloc(sizeof(int) * max);
+ d1 = g = (int*)malloc(sizeof(int) * max);
+ d2 = b = (int*)malloc(sizeof(int) * max);
+
+ for(i=0; i < maxh; ++i)
+ {
+ for(j=0; j < maxw; j += 2)
+ {
+ sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+
+ ++y; ++r; ++g; ++b;
+
+ sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+
+ ++y; ++r; ++g; ++b; ++cb; ++cr;
+ }
+ }
+ free(img->comps[0].data); img->comps[0].data = d0;
+ free(img->comps[1].data); img->comps[1].data = d1;
+ free(img->comps[2].data); img->comps[2].data = d2;
+
+ img->comps[1].w = maxw; img->comps[1].h = maxh;
+ img->comps[2].w = maxw; img->comps[2].h = maxh;
+ img->comps[1].dx = img->comps[0].dx;
+ img->comps[2].dx = img->comps[0].dx;
+ img->comps[1].dy = img->comps[0].dy;
+ img->comps[2].dy = img->comps[0].dy;
+
+}/* sycc422_to_rgb() */
+
+static void sycc420_to_rgb(opj_image_t *img)
+{
+ int *d0, *d1, *d2, *r, *g, *b, *nr, *ng, *nb;
+ const int *y, *cb, *cr, *ny;
+ int maxw, maxh, max, offset, upb;
+ int i, j;
+
+ i = img->comps[0].prec;
+ offset = 1<<(i - 1); upb = (1<<i)-1;
+
+ maxw = img->comps[0].w; maxh = img->comps[0].h;
+ max = maxw * maxh;
+
+ y = img->comps[0].data;
+ cb = img->comps[1].data;
+ cr = img->comps[2].data;
+
+ d0 = r = (int*)malloc(sizeof(int) * max);
+ d1 = g = (int*)malloc(sizeof(int) * max);
+ d2 = b = (int*)malloc(sizeof(int) * max);
+
+ for(i=0; i < maxh; i += 2)
+ {
+ ny = y + maxw;
+ nr = r + maxw; ng = g + maxw; nb = b + maxw;
+
+ for(j=0; j < maxw; j += 2)
+ {
+ sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+
+ ++y; ++r; ++g; ++b;
+
+ sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+
+ ++y; ++r; ++g; ++b;
+
+ sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);
+
+ ++ny; ++nr; ++ng; ++nb;
+
+ sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);
+
+ ++ny; ++nr; ++ng; ++nb; ++cb; ++cr;
+ }
+ y += maxw; r += maxw; g += maxw; b += maxw;
+ }
+ free(img->comps[0].data); img->comps[0].data = d0;
+ free(img->comps[1].data); img->comps[1].data = d1;
+ free(img->comps[2].data); img->comps[2].data = d2;
+
+ img->comps[1].w = maxw; img->comps[1].h = maxh;
+ img->comps[2].w = maxw; img->comps[2].h = maxh;
+ img->comps[1].dx = img->comps[0].dx;
+ img->comps[2].dx = img->comps[0].dx;
+ img->comps[1].dy = img->comps[0].dy;
+ img->comps[2].dy = img->comps[0].dy;
+
+}/* sycc420_to_rgb() */
+
+void color_sycc_to_rgb(opj_image_t *img)
+{
+ if(img->numcomps < 3)
+ {
+ img->color_space = CLRSPC_GRAY;
+ return;
+ }
+
+ if((img->comps[0].dx == 1)
+ && (img->comps[1].dx == 2)
+ && (img->comps[2].dx == 2)
+ && (img->comps[0].dy == 1)
+ && (img->comps[1].dy == 2)
+ && (img->comps[2].dy == 2))/* horizontal and vertical sub-sample */
+ {
+ sycc420_to_rgb(img);
+ }
+ else
+ if((img->comps[0].dx == 1)
+ && (img->comps[1].dx == 2)
+ && (img->comps[2].dx == 2)
+ && (img->comps[0].dy == 1)
+ && (img->comps[1].dy == 1)
+ && (img->comps[2].dy == 1))/* horizontal sub-sample only */
+ {
+ sycc422_to_rgb(img);
+ }
+ else
+ if((img->comps[0].dx == 1)
+ && (img->comps[1].dx == 1)
+ && (img->comps[2].dx == 1)
+ && (img->comps[0].dy == 1)
+ && (img->comps[1].dy == 1)
+ && (img->comps[2].dy == 1))/* no sub-sample */
+ {
+ sycc444_to_rgb(img);
+ }
+ else
+ {
+ fprintf(stderr,"%s:%d:color_sycc_to_rgb\n\tCAN NOT CONVERT\n",
+ __FILE__,__LINE__);
+ return;
+ }
+ img->color_space = CLRSPC_SRGB;
+
+}/* color_sycc_to_rgb() */
+
+#if defined(HAVE_LIBLCMS2) || defined(HAVE_LIBLCMS1)
+#ifdef HAVE_LIBLCMS1
+/* Bob Friesenhahn proposed:*/
+#define cmsSigXYZData icSigXYZData
+#define cmsSigLabData icSigLabData
+#define cmsSigCmykData icSigCmykData
+#define cmsSigYCbCrData icSigYCbCrData
+#define cmsSigLuvData icSigLuvData
+#define cmsSigGrayData icSigGrayData
+#define cmsSigRgbData icSigRgbData
+#define cmsUInt32Number DWORD
+
+#define cmsColorSpaceSignature icColorSpaceSignature
+#define cmsGetHeaderRenderingIntent cmsTakeRenderingIntent
+
+#endif /* HAVE_LIBLCMS1 */
+
+void color_apply_icc_profile(opj_image_t *image)
+{
+ cmsHPROFILE in_prof, out_prof;
+ cmsHTRANSFORM transform;
+ cmsColorSpaceSignature in_space, out_space;
+ cmsUInt32Number intent, in_type, out_type, nr_samples;
+ int *r, *g, *b;
+ int prec, i, max, max_w, max_h;
+ OPJ_COLOR_SPACE oldspace;
+
+ in_prof =
+ cmsOpenProfileFromMem(image->icc_profile_buf, image->icc_profile_len);
+ in_space = cmsGetPCS(in_prof);
+ out_space = cmsGetColorSpace(in_prof);
+ intent = cmsGetHeaderRenderingIntent(in_prof);
+
+
+ max_w = image->comps[0].w; max_h = image->comps[0].h;
+ prec = image->comps[0].prec;
+ oldspace = image->color_space;
+
+ if(out_space == cmsSigRgbData) /* enumCS 16 */
+ {
+ in_type = TYPE_RGB_16;
+ out_type = TYPE_RGB_16;
+ out_prof = cmsCreate_sRGBProfile();
+ image->color_space = CLRSPC_SRGB;
+ }
+ else
+ if(out_space == cmsSigGrayData) /* enumCS 17 */
+ {
+ in_type = TYPE_GRAY_8;
+ out_type = TYPE_RGB_8;
+ out_prof = cmsCreate_sRGBProfile();
+ image->color_space = CLRSPC_SRGB;
+ }
+ else
+ if(out_space == cmsSigYCbCrData) /* enumCS 18 */
+ {
+ in_type = TYPE_YCbCr_16;
+ out_type = TYPE_RGB_16;
+ out_prof = cmsCreate_sRGBProfile();
+ image->color_space = CLRSPC_SRGB;
+ }
+ else
+ {
+#ifdef DEBUG_PROFILE
+fprintf(stderr,"%s:%d: color_apply_icc_profile\n\tICC Profile has unknown "
+"output colorspace(%#x)(%c%c%c%c)\n\tICC Profile ignored.\n",
+__FILE__,__LINE__,out_space,
+(out_space>>24) & 0xff,(out_space>>16) & 0xff,
+(out_space>>8) & 0xff, out_space & 0xff);
+#endif
+ return;
+ }
+
+#ifdef DEBUG_PROFILE
+fprintf(stderr,"%s:%d:color_apply_icc_profile\n\tchannels(%d) prec(%d) w(%d) h(%d)"
+"\n\tprofile: in(%p) out(%p)\n",__FILE__,__LINE__,image->numcomps,prec,
+max_w,max_h, (void*)in_prof,(void*)out_prof);
+
+fprintf(stderr,"\trender_intent (%u)\n\t"
+"color_space: in(%#x)(%c%c%c%c) out:(%#x)(%c%c%c%c)\n\t"
+" type: in(%u) out:(%u)\n",
+intent,
+in_space,
+(in_space>>24) & 0xff,(in_space>>16) & 0xff,
+(in_space>>8) & 0xff, in_space & 0xff,
+
+out_space,
+(out_space>>24) & 0xff,(out_space>>16) & 0xff,
+(out_space>>8) & 0xff, out_space & 0xff,
+
+in_type,out_type
+ );
+#endif /* DEBUG_PROFILE */
+
+ transform = cmsCreateTransform(in_prof, in_type,
+ out_prof, out_type, intent, 0);
+
+#ifdef HAVE_LIBLCMS2
+/* Possible for: LCMS_VERSION >= 2000 :*/
+ cmsCloseProfile(in_prof);
+ cmsCloseProfile(out_prof);
+#endif
+
+ if(transform == NULL)
+ {
+#ifdef DEBUG_PROFILE
+fprintf(stderr,"%s:%d:color_apply_icc_profile\n\tcmsCreateTransform failed. "
+"ICC Profile ignored.\n",__FILE__,__LINE__);
+#endif
+ image->color_space = oldspace;
+#ifdef HAVE_LIBLCMS1
+ cmsCloseProfile(in_prof);
+ cmsCloseProfile(out_prof);
+#endif
+ return;
+ }
+
+ if(image->numcomps > 2)/* RGB, RGBA */
+ {
+ unsigned short *inbuf, *outbuf, *in, *out;
+ max = max_w * max_h; nr_samples = max * 3 * sizeof(unsigned short);
+ in = inbuf = (unsigned short*)malloc(nr_samples);
+ out = outbuf = (unsigned short*)malloc(nr_samples);
+
+ r = image->comps[0].data;
+ g = image->comps[1].data;
+ b = image->comps[2].data;
+
+ for(i = 0; i < max; ++i)
+ {
+ *in++ = (unsigned short)*r++;
+ *in++ = (unsigned short)*g++;
+ *in++ = (unsigned short)*b++;
+ }
+
+ cmsDoTransform(transform, inbuf, outbuf, max);
+
+ r = image->comps[0].data;
+ g = image->comps[1].data;
+ b = image->comps[2].data;
+
+ for(i = 0; i < max; ++i)
+ {
+ *r++ = (int)*out++;
+ *g++ = (int)*out++;
+ *b++ = (int)*out++;
+ }
+ free(inbuf); free(outbuf);
+ }
+ else /* GRAY, GRAYA */
+ {
+ unsigned char *in, *inbuf, *out, *outbuf;
+
+ max = max_w * max_h; nr_samples = max * 3 * sizeof(unsigned char);
+ in = inbuf = (unsigned char*)malloc(nr_samples);
+ out = outbuf = (unsigned char*)malloc(nr_samples);
+
+ image->comps = (opj_image_comp_t*)
+ realloc(image->comps, (image->numcomps+2)*sizeof(opj_image_comp_t));
+
+ if(image->numcomps == 2)
+ image->comps[3] = image->comps[1];
+
+ image->comps[1] = image->comps[0];
+ image->comps[2] = image->comps[0];
+
+ image->comps[1].data = (int*)calloc(max, sizeof(int));
+ image->comps[2].data = (int*)calloc(max, sizeof(int));
+
+ image->numcomps += 2;
+
+ r = image->comps[0].data;
+
+ for(i = 0; i < max; ++i)
+ {
+ *in++ = (unsigned char)*r++;
+ }
+ cmsDoTransform(transform, inbuf, outbuf, max);
+
+ r = image->comps[0].data;
+ g = image->comps[1].data;
+ b = image->comps[2].data;
+
+ for(i = 0; i < max; ++i)
+ {
+ *r++ = (int)*out++; *g++ = (int)*out++; *b++ = (int)*out++;
+ }
+ free(inbuf); free(outbuf);
+
+ }/* if(image->numcomps */
+
+ cmsDeleteTransform(transform);
+
+#ifdef HAVE_LIBLCMS1
+ cmsCloseProfile(in_prof);
+ cmsCloseProfile(out_prof);
+#endif
+}/* color_apply_icc_profile() */
+
+#endif /* HAVE_LIBLCMS2 || HAVE_LIBLCMS1 */
+
--- /dev/null
+/*
+ * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
+ * Copyright (c) 2002-2007, Professor Benoit Macq
+ * Copyright (c) 2001-2003, David Janssens
+ * Copyright (c) 2002-2003, Yannick Verschueren
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
+ * Copyright (c) 2005, Herve Drolon, FreeImage Team
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _OPJ_COLOR_H_
+#define _OPJ_COLOR_H_
+
+extern void color_sycc_to_rgb(opj_image_t *img);
+extern void color_apply_icc_profile(opj_image_t *image);
+
+#endif /* _OPJ_COLOR_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
+ * Copyright (c) 2002-2007, Professor Benoit Macq
+ * Copyright (c) 2001-2003, David Janssens
+ * Copyright (c) 2002-2003, Yannick Verschueren
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
+ * Copyright (c) 2005, Herve Drolon, FreeImage Team
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _OPJ_FORMAT_DEFS_H_
+#define _OPJ_FORMAT_DEFS_H_
+
+#define J2K_CFMT 0
+#define JP2_CFMT 1
+#define JPT_CFMT 2
+
+#define PXM_DFMT 10
+#define PGX_DFMT 11
+#define BMP_DFMT 12
+#define YUV_DFMT 13
+#define TIF_DFMT 14
+#define RAW_DFMT 15
+#define TGA_DFMT 16
+#define PNG_DFMT 17
+
+#endif /* _OPJ_FORMAT_DEFS_H_ */
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (c) 1987, 1993, 1994
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/* last review : october 29th, 2002 */
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "@(#)getopt.c 8.3 (Berkeley) 4/27/95";
+#endif /* LIBC_SCCS and not lint */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+int opterr = 1, /* if error message should be printed */
+ optind = 1, /* index into parent argv vector */
+ optopt, /* character checked for validity */
+ optreset; /* reset getopt */
+const char *optarg; /* argument associated with option */
+
+typedef struct option
+{
+ const char *name;
+ int has_arg;
+ int *flag;
+ int val;
+}option_t;
+
+#define BADCH (int)'?'
+#define BADARG (int)':'
+#define EMSG ""
+
+/* As this class remembers its values from one Java call to the other, reset the values before each use */
+void reset_options_reading() {
+ opterr = 1;
+ optind = 1;
+}
+
+/*
+ * getopt --
+ * Parse argc/argv argument vector.
+ */
+int getopt(int nargc, char *const *nargv, const char *ostr) {
+# define __progname nargv[0]
+ static const char *place = EMSG; /* option letter processing */
+ char *oli; /* option letter list index */
+
+ if (optreset || !*place) { /* update scanning pointer */
+ optreset = 0;
+ if (optind >= nargc || *(place = nargv[optind]) != '-') {
+ place = EMSG;
+ return (-1);
+ }
+ if (place[1] && *++place == '-') { /* found "--" */
+ ++optind;
+ place = EMSG;
+ return (-1);
+ }
+ } /* option letter okay? */
+ if ((optopt = (int) *place++) == (int) ':' ||
+ !(oli = strchr(ostr, optopt))) {
+ /*
+ * if the user didn't specify '-' as an option,
+ * assume it means -1.
+ */
+ if (optopt == (int) '-')
+ return (-1);
+ if (!*place)
+ ++optind;
+ if (opterr && *ostr != ':') {
+ fprintf(stderr,
+ "%s: illegal option -- %c\n", __progname, optopt);
+ return (BADCH);
+ }
+ }
+ if (*++oli != ':') { /* don't need argument */
+ optarg = NULL;
+ if (!*place)
+ ++optind;
+ } else { /* need an argument */
+ if (*place) /* no white space */
+ optarg = place;
+ else if (nargc <= ++optind) { /* no arg */
+ place = EMSG;
+ if (*ostr == ':')
+ return (BADARG);
+ if (opterr) {
+ fprintf(stderr,
+ "%s: option requires an argument -- %c\n",
+ __progname, optopt);
+ return (BADCH);
+ }
+ } else /* white space */
+ optarg = nargv[optind];
+ place = EMSG;
+ ++optind;
+ }
+ return (optopt); /* dump back option letter */
+}
+
+
+int getopt_long(int argc, char * const argv[], const char *optstring,
+struct option *longopts, int totlen) {
+ static int lastidx,lastofs;
+ char *tmp;
+ int i,len;
+ char param = 1;
+
+again:
+ if (optind >= argc || !argv[optind] || *argv[optind]!='-')
+ return -1;
+
+ if (argv[optind][0]=='-' && argv[optind][1]==0) {
+ if(optind >= (argc - 1)){ /* no more input parameters */
+ param = 0;
+ }
+ else{ /* more input parameters */
+ if(argv[optind + 1][0] == '-'){
+ param = 0; /* Missing parameter after '-' */
+ }
+ else{
+ param = 2;
+ }
+ }
+ }
+
+ if (param == 0) {
+ ++optind;
+ return (BADCH);
+ }
+
+ if (argv[optind][0]=='-') { /* long option */
+ char* arg=argv[optind]+1;
+ const struct option* o;
+ o=longopts;
+ len=sizeof(longopts[0]);
+
+ if (param > 1){
+ arg = argv[optind+1];
+ optind++;
+ }
+ else
+ arg = argv[optind]+1;
+
+ if(strlen(arg)>1){
+ for (i=0;i<totlen;i=i+len,o++) {
+ if (!strcmp(o->name,arg)) { /* match */
+ if (o->has_arg == 0) {
+ if ((argv[optind+1])&&(!(argv[optind+1][0]=='-'))){
+ fprintf(stderr,"%s: option does not require an argument. Ignoring %s\n",arg,argv[optind+1]);
+ ++optind;
+ }
+ }else{
+ optarg=argv[optind+1];
+ if(optarg){
+ if (optarg[0] == '-'){ /* Has read next input parameter: No arg for current parameter */
+ if (opterr) {
+ fprintf(stderr,"%s: option requires an argument\n",arg);
+ return (BADCH);
+ }
+ }
+ }
+ if (!optarg && o->has_arg==1) { /* no argument there */
+ if (opterr) {
+ fprintf(stderr,"%s: option requires an argument \n",arg);
+ return (BADCH);
+ }
+ }
+ ++optind;
+ }
+ ++optind;
+ if (o->flag)
+ *(o->flag)=o->val;
+ else
+ return o->val;
+ return 0;
+ }
+ }//(end for)String not found in the list
+ fprintf(stderr,"Invalid option %s\n",arg);
+ ++optind;
+ return (BADCH);
+ }else{ /*Single character input parameter*/
+ if (*optstring==':') return ':';
+ if (lastidx!=optind) {
+ lastidx=optind; lastofs=0;
+ }
+ optopt=argv[optind][lastofs+1];
+ if ((tmp=strchr(optstring,optopt))) {/*Found input parameter in list*/
+ if (*tmp==0) { /* apparently, we looked for \0, i.e. end of argument */
+ ++optind;
+ goto again;
+ }
+ if (tmp[1]==':') { /* argument expected */
+ if (tmp[2]==':' || argv[optind][lastofs+2]) { /* "-foo", return "oo" as optarg */
+ if (!*(optarg=argv[optind]+lastofs+2)) optarg=0;
+ goto found;
+ }
+ optarg=argv[optind+1];
+ if(optarg){
+ if (optarg[0] == '-'){ /* Has read next input parameter: No arg for current parameter */
+ if (opterr) {
+ fprintf(stderr,"%s: option requires an argument\n",arg);
+ return (BADCH);
+ }
+ }
+ }
+ if (!optarg) { /* missing argument */
+ if (opterr) {
+ fprintf(stderr,"%s: option requires an argument\n",arg);
+ return (BADCH);
+ }
+ }
+ ++optind;
+ }else {/*Argument not expected*/
+ ++lastofs;
+ return optopt;
+ }
+found:
+ ++optind;
+ return optopt;
+ } else { /* not found */
+ fprintf(stderr,"Invalid option %s\n",arg);
+ ++optind;
+ return (BADCH);
+ }//end of not found
+
+ }// end of single character
+ }//end '-'
+ fprintf(stderr,"Invalid option\n");
+ ++optind;
+ return (BADCH);;
+}//end function
--- /dev/null
+/* last review : october 29th, 2002 */
+
+#ifndef _GETOPT_H_
+#define _GETOPT_H_
+
+typedef struct option
+{
+ const char *name;
+ int has_arg;
+ int *flag;
+ int val;
+}option_t;
+
+#define NO_ARG 0
+#define REQ_ARG 1
+#define OPT_ARG 2
+
+extern int opterr;
+extern int optind;
+extern int optopt;
+extern int optreset;
+extern char *optarg;
+
+extern int getopt(int nargc, char *const *nargv, const char *ostr);
+extern int getopt_long(int argc, char * const argv[], const char *optstring,
+ const struct option *longopts, int totlen);
+extern void reset_options_reading();
+
+#endif /* _GETOPT_H_ */
prefix=/usr/local
CC = gcc
LDCONFIG = /sbin/ldconfig
+AR = ar
#
#Set this to no if you do no want to compile/install shared libs.
ENABLE_SHARED = yes
#==== HAVE YOU CREATED opj_config.h FROM opj_config.h.in.user ? ====
#==== SHOULD BE IN SYNC WITH opj_config.h ====
WITH_LCMS1 = no
-WITH_LCMS2 = no
-WITH_PNG = no
-WITH_TIFF = no
+WITH_LCMS2 = yes
+WITH_PNG = yes
+WITH_TIFF = yes
#
# Set to yes if you want compile/install
# jpwl libraries/binaries
# jp3d libraries/binaries
-WITH_JPWL = no
-WITH_JP3D = no
+WITH_JPWL = yes
+WITH_JP3D = yes
#
#Set to yes if you have doxygen installed
#Set to no if doxygen is missing.
PNG_INCLUDE = -I/usr/include
TIFF_INCLUDE = -I/usr/include
-LCMS1_LIB = -L/usr/lib -llcms -lm
-LCMS2_LIB = -L/usr/lib -llcms2 -lm
-PNG_LIB = -L/usr/lib -lpng -lz -lm
-TIFF_LIB = -L/usr/lib -ltiff -lm
+LCMS1_LIB = -L/usr/lib -llcms
+LCMS2_LIB = -L/usr/lib -llcms2
+PNG_LIB = -L/usr/lib -lpng -lz
+#tiff with jpeg support?
+JPEG_LIB = -ljpeg
+TIFF_LIB = -L/usr/lib -ltiff $(JPEG_LIB)
#include "fix.h"
-#ifdef WIN32
+#ifdef _WIN32
+#include <windows.h>
+
#define int64 __int64
#else
#define int64 long long
-#endif
+#endif /* _WIN32 */
/// <summary>
/// Multiply two fixed-precision rational numbers.
}
-#ifdef WIN32
+#ifdef _WIN32
#include <windows.h>
BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
}
return TRUE;
}
-#endif
+#endif /* _WIN32 */
int main(int argc, char **argv)
{
#define VERSION "0.0.8"
-#ifdef WIN32
+#ifdef _WIN32
#ifdef LIBJ2K_EXPORTS
#define LIBJ2K_API __declspec(dllexport)
#else
INCLUDE = -I.. -Ilibjp3dvm
-AR = ar
-
INSTALL_LIBDIR = $(prefix)/lib
headerdir = openjpeg3d-$(JP3D_MAJOR).$(JP3D_MINOR)
INSTALL_INCLUDE = $(prefix)/include/$(headerdir)
#include <stdlib.h>
#include <string.h>
#include "../libjp3dvm/openjpeg.h"
-#ifdef WIN32
+#ifdef _WIN32
#include "windirent.h"
#else
#include <dirent.h>
-#endif /* WIN32 */
+#endif /* _WIN32 */
#include "getopt.h"\r
#include "convert.h"\r
\r
-#ifndef WIN32\r
+#ifdef _WIN32\r
+#include <windows.h>\r
+#else\r
#define stricmp strcasecmp\r
#define strnicmp strncasecmp\r
-#endif\r
+#endif /* _WIN32 */\r
\r
/* ----------------------------------------------------------------------- */\r
static double calc_PSNR(opj_volume_t *original, opj_volume_t *decoded)\r
#include "getopt.h"\r
#include "convert.h"\r
\r
-#ifndef WIN32\r
+#ifdef _WIN32\r
+#include <windows.h>\r
+#else\r
#define stricmp strcasecmp\r
#define strnicmp strncasecmp\r
-#endif\r
+#endif /* _WIN32 */\r
\r
/* ----------------------------------------------------------------------- */\r
\r
// Utility functions\r
// ==========================================================\r
\r
-#ifndef WIN32\r
+#ifndef _WIN32\r
static char*\r
i2a(unsigned i, char *a, unsigned r) {\r
if (i/r > 0) a = i2a(i/r,a,r);\r
return a;\r
}\r
\r
-#endif // !WIN32\r
+#endif // !_WIN32\r
\r
/* ----------------------------------------------------------------------- */\r
\r
* POSSIBILITY OF SUCH DAMAGE.\r
*/\r
\r
-#ifdef WIN32\r
+#ifdef _WIN32\r
#include <windows.h>\r
#else\r
#include <sys/time.h>\r
#include <sys/resource.h>\r
#include <sys/times.h>\r
-#endif /* WIN32 */\r
+#endif /* _WIN32 */\r
#include "opj_includes.h"\r
\r
double opj_clock() {\r
-#ifdef WIN32\r
+#ifdef _WIN32\r
/* WIN32: use QueryPerformance (very accurate) */\r
LARGE_INTEGER freq , t ;\r
/* freq is the clock speed of the CPU */\r
procTime = t.ru_utime.tv_sec + t.ru_stime.tv_sec;\r
/* (2b) More precisely! Get the microseconds part ! */\r
return ( procTime + (t.ru_utime.tv_usec + t.ru_stime.tv_usec) * 1e-6 ) ;\r
-#endif\r
+#endif /* _WIN32 */\r
}\r
\r
void* opj_malloc( size_t size ) {\r
* POSSIBILITY OF SUCH DAMAGE.\r
*/\r
\r
-#ifdef WIN32\r
+#ifdef _WIN32\r
#include <windows.h>\r
-#endif /* WIN32 */\r
+#endif /* _WIN32 */\r
\r
#include "opj_includes.h"\r
#define JP3D_VERSION "1.3.0"\r
/* ---------------------------------------------------------------------- */\r
-#ifdef WIN32\r
+#ifdef _WIN32\r
#ifndef OPJ_STATIC\r
BOOL APIENTRY\r
DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {\r
return TRUE;\r
}\r
#endif /* OPJ_STATIC */\r
-#endif /* WIN32 */\r
+#endif /* _WIN32 */\r
\r
/* ---------------------------------------------------------------------- */\r
\r
../libopenjpeg/t2.c
../libopenjpeg/tcd.c
../libopenjpeg/tgt.c
-../libopenjpeg/opj_convert.c
)
SET(JPWL_SRCS crc.c jpwl.c jpwl_lib.c rs.c)
IF(DONT_HAVE_GETOPT)
SET(OPJ_SRCS
${OPJ_SRCS}
- ../codec/compat/getopt.c
+ ../common/getopt.c
)
ENDIF(DONT_HAVE_GETOPT)
-IF(LCMS_INCLUDE_DIR)
- INCLUDE_DIRECTORIES( ${LCMS_INCLUDE_DIR} )
-ENDIF(LCMS_INCLUDE_DIR)
-
# Build the library
IF(WIN32)
IF(BUILD_SHARED_LIBS)
ENDIF(WIN32)
ADD_LIBRARY(${OPENJPEG_LIBRARY_NAME}_JPWL ${JPWL_SRCS} ${OPJ_SRCS})
SET_TARGET_PROPERTIES(${OPENJPEG_LIBRARY_NAME}_JPWL PROPERTIES ${OPENJPEG_LIBRARY_PROPERTIES})
-IF(LCMS_LIB)
- TARGET_LINK_LIBRARIES(${OPENJPEG_LIBRARY_NAME}_JPWL ${LCMS_LIB})
-ENDIF(LCMS_LIB)
+
# Install library
INSTALL(TARGETS ${OPENJPEG_LIBRARY_NAME}_JPWL
DESTINATION ${OPENJPEG_INSTALL_LIB_DIR} COMPONENT Libraries
)
+# Build executables
+
INCLUDE_DIRECTORIES(
${OPENJPEG_SOURCE_DIR}/libopenjpeg
- ${LCMS_INCLUDE_DIR}
+ ${OPENJPEG_SOURCE_DIR}/common
)
+
+IF(LCMS_INCLUDE_DIR)
+ INCLUDE_DIRECTORIES( ${LCMS_INCLUDE_DIR} )
+ENDIF(LCMS_INCLUDE_DIR)
IF(PNG_FOUND)
INCLUDE_DIRECTORIES(${PNG_INCLUDE_DIR})
ENDIF(PNG_FOUND)
ADD_EXECUTABLE(JPWL_j2k_to_image
+../codec/j2k_to_image.c
../codec/convert.c
../codec/index.c
-../codec/j2k_to_image.c
+../common/color.c
)
TARGET_LINK_LIBRARIES(JPWL_j2k_to_image ${OPENJPEG_LIBRARY_NAME}_JPWL ${LCMS_LIB})
IF(PNG_FOUND)
../libopenjpeg/mct.c ../libopenjpeg/mqc.c ../libopenjpeg/openjpeg.c \
../libopenjpeg/pi.c ../libopenjpeg/raw.c ../libopenjpeg/t1.c \
../libopenjpeg/t2.c ../libopenjpeg/tcd.c ../libopenjpeg/tgt.c \
- ../libopenjpeg/opj_convert.c $(JPWL_SRCS)
+ $(JPWL_SRCS)
INCLS = ../libopenjpeg/bio.h ../libopenjpeg/cio.h ../libopenjpeg/dwt.h \
../libopenjpeg/event.h ../libopenjpeg/fix.h ../libopenjpeg/image.h \
../libopenjpeg/mqc.h ../libopenjpeg/openjpeg.h ../libopenjpeg/pi.h \
../libopenjpeg/raw.h ../libopenjpeg/t1.h ../libopenjpeg/t2.h \
../libopenjpeg/tcd.h ../libopenjpeg/tgt.h ../libopenjpeg/opj_malloc.h \
- ../libopenjpeg/opj_convert.h ../libopenjpeg/opj_includes.h \
+ ../libopenjpeg/opj_includes.h \
$(JPWL_INCLS)
libopenjpeg_JPWL_la_SOURCES = $(SRCS) $(INCLS)
COMPILERFLAGS = -Wall -ffast-math -std=c99
-USERLIBS = -lm
-INCLUDES = -I.. -I. -I../libopenjpeg
+USERLIBS =
+INCLUDES = -I.. -I. -I../libopenjpeg -I../common
if with_libtiff
INCLUDES += @tiffincludes@
USERLIBS += @lcms1libs@
endif
+USERLIBS += -lm
+
bin_PROGRAMS = JPWL_j2k_to_image JPWL_image_to_j2k
JPWL_j2k_to_image_CFLAGS = $(COMPILERFLAGS) $(INCLUDES) -DUSE_JPWL -static
CFLAGS = $(COMPILERFLAGS) $(INCLUDES) -DUSE_JPWL
LDADD = ./libopenjpeg_JPWL.la $(USERLIBS)
-JPWL_j2k_to_image_SOURCES = ../codec/compat/getopt.c ../codec/index.c \
- ../codec/convert.c ../codec/j2k_to_image.c
+JPWL_j2k_to_image_SOURCES = ../common/getopt.c ../codec/index.c \
+ ../codec/convert.c ../common/color.c ../codec/j2k_to_image.c
-JPWL_image_to_j2k_SOURCES = ../codec/compat/getopt.c ../codec/index.c \
+JPWL_image_to_j2k_SOURCES = ../common/getopt.c ../codec/index.c \
../codec/convert.c ../codec/image_to_j2k.c
REPBIN=$(bin_PROGRAMS)
TARGET = openjpeg_JPWL
COMPILERFLAGS = -Wall -ffast-math -std=c99 -fPIC
-USERLIBS = -lm
+USERLIBS =
JPWL_SRCS = ./crc.c ./jpwl.c ./jpwl_lib.c ./rs.c
../libopenjpeg/mct.c ../libopenjpeg/mqc.c ../libopenjpeg/openjpeg.c \
../libopenjpeg/pi.c ../libopenjpeg/raw.c ../libopenjpeg/t1.c \
../libopenjpeg/t2.c ../libopenjpeg/tcd.c ../libopenjpeg/tgt.c \
- ../libopenjpeg/opj_convert.c $(JPWL_SRCS)
+ $(JPWL_SRCS)
INCLS = ../libopenjpeg/bio.h ../libopenjpeg/cio.h ../libopenjpeg/dwt.h \
../libopenjpeg/event.h ../libopenjpeg/fix.h ../libopenjpeg/image.h \
../libopenjpeg/mqc.h ../libopenjpeg/openjpeg.h ../libopenjpeg/pi.h \
../libopenjpeg/raw.h ../libopenjpeg/t1.h ../libopenjpeg/t2.h \
../libopenjpeg/tcd.h ../libopenjpeg/tgt.h ../libopenjpeg/opj_malloc.h \
- ../libopenjpeg/opj_convert.h ../libopenjpeg/opj_includes.h
+ ../libopenjpeg/opj_includes.h
-INCLUDE = -I.. -I. -I../libopenjpeg
-
-AR = ar
+INCLUDE = -I.. -I. -I../libopenjpeg -I../common
INSTALL_LIBDIR = $(prefix)/lib
INSTALL_BIN = $(prefix)/bin
USERLIBS += $(LCMS1_LIB)
endif
+USERLIBS += -lm
+
LIBRARIES += $(USERLIBS)
MODULES = $(SRCS:.c=.o)
endif
JPWL_j2k_to_image: ../codec/j2k_to_image.c
- $(CC) $(CFLAGS) ../codec/compat/getopt.c ../codec/index.c \
- ../codec/convert.c ../codec/j2k_to_image.c \
+ $(CC) $(CFLAGS) ../common/getopt.c ../codec/index.c \
+ ../codec/convert.c ../common/color.c ../codec/j2k_to_image.c \
-o JPWL_j2k_to_image ./libopenjpeg_JPWL.a $(USERLIBS)
JPWL_image_to_j2k: ../codec/image_to_j2k.c
- $(CC) $(CFLAGS) ../codec/compat/getopt.c ../codec/index.c \
+ $(CC) $(CFLAGS) ../common/getopt.c ../codec/index.c \
../codec/convert.c ../codec/image_to_j2k.c \
-o JPWL_image_to_j2k ./libopenjpeg_JPWL.a $(USERLIBS)
t2.c
tcd.c
tgt.c
- opj_convert.c
)
-IF(LCMS_INCLUDE_DIR)
- INCLUDE_DIRECTORIES( ${LCMS_INCLUDE_DIR} )
-ENDIF(LCMS_INCLUDE_DIR)
-
# Build the library
IF(WIN32)
IF(BUILD_SHARED_LIBS)
ENDIF(WIN32)
ADD_LIBRARY(${OPENJPEG_LIBRARY_NAME} ${OPENJPEG_SRCS})
SET_TARGET_PROPERTIES(${OPENJPEG_LIBRARY_NAME} PROPERTIES ${OPENJPEG_LIBRARY_PROPERTIES})
-IF(LCMS_LIB)
- TARGET_LINK_LIBRARIES(${OPENJPEG_LIBRARY_NAME} ${LCMS_LIB})
-ENDIF(LCMS_LIB)
# Install library
INSTALL(TARGETS ${OPENJPEG_LIBRARY_NAME}
libopenjpeg_la_LIBADD = @LDLIBS@
SRCS = bio.c cio.c dwt.c event.c image.c j2k.c j2k_lib.c jp2.c jpt.c \
- mct.c mqc.c openjpeg.c pi.c raw.c t1.c t2.c tcd.c tgt.c opj_convert.c
+ mct.c mqc.c openjpeg.c pi.c raw.c t1.c t2.c tcd.c tgt.c
INCLS = bio.h cio.h dwt.h event.h fix.h image.h int.h j2k.h j2k_lib.h \
jp2.h jpt.h mct.h mqc.h pi.h raw.h t1.h t2.h tcd.h tgt.h opj_malloc.h \
- opj_convert.h opj_includes.h
+ opj_includes.h
libopenjpeg_la_SOURCES = $(SRCS) $(INCLS)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include "opj_config.h"
-#ifdef HAVE_LIBLCMS2
-#include <math.h>
-#include <lcms2.h>
-#endif
-#ifdef HAVE_LIBLCMS1
-#include <math.h>
-#include <lcms.h>
-#endif
#include "opj_includes.h"
/** @defgroup JP2 JP2 - JPEG-2000 file format reader/writer */
Decode the structure of a JP2 file
@param jp2 JP2 handle
@param cio Input buffer stream
-@param ext Collector for profile, cdef and pclr data
+@param color Collector for profile, cdef and pclr data
@return Returns true if successful, returns false otherwise
*/
static bool jp2_read_struct(opj_jp2_t *jp2, opj_cio_t *cio,
- struct extension *ext);
+ opj_jp2_color_t *color);
/**
Apply collected palette data
-@param ext Collector for profile, cdef and pclr data
+@param color Collector for profile, cdef and pclr data
@param image
*/
-static void jp2_apply_pclr(struct extension *ext, opj_image_t *image);
+static void jp2_apply_pclr(opj_jp2_color_t *color, opj_image_t *image);
/**
Collect palette data
@param jp2 JP2 handle
@param cio Input buffer stream
@param box
-@param ext Collector for profile, cdef and pclr data
+@param color Collector for profile, cdef and pclr data
@return Returns true if successful, returns false otherwise
*/
static bool jp2_read_pclr(opj_jp2_t *jp2, opj_cio_t *cio,
- opj_jp2_box_t *box, struct extension *ext);
+ opj_jp2_box_t *box, opj_jp2_color_t *color);
/**
Collect component mapping data
@param jp2 JP2 handle
@param cio Input buffer stream
@param box
-@param ext Collector for profile, cdef and pclr data
+@param color Collector for profile, cdef and pclr data
@return Returns true if successful, returns false otherwise
*/
static bool jp2_read_cmap(opj_jp2_t *jp2, opj_cio_t *cio,
- opj_jp2_box_t *box, struct extension *ext);
+ opj_jp2_box_t *box, opj_jp2_color_t *color);
/**
Collect colour specification data
@param jp2 JP2 handle
@param cio Input buffer stream
@param box
-@param ext Collector for profile, cdef and pclr data
+@param color Collector for profile, cdef and pclr data
@return Returns true if successful, returns false otherwise
*/
static bool jp2_read_colr(opj_jp2_t *jp2, opj_cio_t *cio,
- opj_jp2_box_t *box, struct extension *ext);
-/**
-Apply ICC profile if Color Management System available
-@param ext Collector for profile, cdef and pclr data
-@param image
-*/
-static void jp2_apply_profile(struct extension *ext, opj_image_t *image);
+ opj_jp2_box_t *box, opj_jp2_color_t *color);
/*@}*/
/*@}*/
cio_seek(cio, box.init_pos + box.length);
}
-static void jp2_free_pclr(struct extension *ext)
+static void jp2_free_pclr(opj_jp2_color_t *color)
{
- opj_free(ext->jp2_pclr->channel_sign);
- opj_free(ext->jp2_pclr->channel_size);
- opj_free(ext->jp2_pclr->entries);
+ opj_free(color->jp2_pclr->channel_sign);
+ opj_free(color->jp2_pclr->channel_size);
+ opj_free(color->jp2_pclr->entries);
- if(ext->jp2_pclr->cmap) opj_free(ext->jp2_pclr->cmap);
+ if(color->jp2_pclr->cmap) opj_free(color->jp2_pclr->cmap);
- opj_free(ext->jp2_pclr); ext->jp2_pclr = NULL;
+ opj_free(color->jp2_pclr); color->jp2_pclr = NULL;
}
-static void free_ext_data(struct extension *ext)
+static void free_color_data(opj_jp2_color_t *color)
{
- if(ext->jp2_pclr)
+ if(color->jp2_pclr)
{
- jp2_free_pclr(ext);
+ jp2_free_pclr(color);
}
- if(ext->jp2_cdef)
+ if(color->jp2_cdef)
{
- if(ext->jp2_cdef->info) opj_free(ext->jp2_cdef->info);
- opj_free(ext->jp2_cdef);
+ if(color->jp2_cdef->info) opj_free(color->jp2_cdef->info);
+ opj_free(color->jp2_cdef);
}
- if(ext->jp2_profile_buf) opj_free(ext->jp2_profile_buf);
+ if(color->icc_profile_buf) opj_free(color->icc_profile_buf);
}
-static void jp2_apply_pclr(struct extension *ext, opj_image_t *image)
+static void jp2_apply_pclr(opj_jp2_color_t *color, opj_image_t *image)
{
opj_image_comp_t *old_comps, *new_comps;
unsigned char *channel_size, *channel_sign;
unsigned short i, nr_channels, cmp, pcol;
int k, top_k;
- channel_size = ext->jp2_pclr->channel_size;
- channel_sign = ext->jp2_pclr->channel_sign;
- entries = ext->jp2_pclr->entries;
- cmap = ext->jp2_pclr->cmap;
- nr_channels = ext->jp2_pclr->nr_channels;
+ channel_size = color->jp2_pclr->channel_size;
+ channel_sign = color->jp2_pclr->channel_sign;
+ entries = color->jp2_pclr->entries;
+ cmap = color->jp2_pclr->cmap;
+ nr_channels = color->jp2_pclr->nr_channels;
old_comps = image->comps;
new_comps = (opj_image_comp_t*)
new_comps[pcol].prec = channel_size[i];
new_comps[pcol].sgnd = channel_sign[i];
}
- top_k = ext->jp2_pclr->nr_entries - 1;
+ top_k = color->jp2_pclr->nr_entries - 1;
for(i = 0; i < nr_channels; ++i)
{
image->comps = new_comps;
image->numcomps = nr_channels;
- jp2_free_pclr(ext);
+ jp2_free_pclr(color);
}/* apply_pclr() */
static bool jp2_read_pclr(opj_jp2_t *jp2, opj_cio_t *cio,
- opj_jp2_box_t *box, struct extension *ext)
+ opj_jp2_box_t *box, opj_jp2_color_t *color)
{
opj_jp2_pclr_t *jp2_pclr;
unsigned char *channel_size, *channel_sign;
/* Part 1, I.5.3.4: 'There shall be at most one Palette box inside
* a JP2 Header box' :
*/
- if(ext->jp2_pclr) return false;
+ if(color->jp2_pclr) return false;
nr_entries = cio_read(cio, 2); /* NE */
nr_channels = cio_read(cio, 1);/* NPC */
jp2_pclr->nr_channels = nr_channels;
jp2_pclr->cmap = NULL;
- ext->jp2_pclr = jp2_pclr;
+ color->jp2_pclr = jp2_pclr;
for(i = 0; i < nr_channels; ++i)
{
}/* jp2_read_pclr() */
static bool jp2_read_cmap(opj_jp2_t *jp2, opj_cio_t *cio,
- opj_jp2_box_t *box, struct extension *ext)
+ opj_jp2_box_t *box, opj_jp2_color_t *color)
{
opj_jp2_cmap_comp_t *cmap;
unsigned short i, nr_channels;
/* Need nr_channels: */
- if(ext->jp2_pclr == NULL) return false;
+ if(color->jp2_pclr == NULL) return false;
/* Part 1, I.5.3.5: 'There shall be at most one Component Mapping box
* inside a JP2 Header box' :
*/
- if(ext->jp2_pclr->cmap) return false;
+ if(color->jp2_pclr->cmap) return false;
- nr_channels = ext->jp2_pclr->nr_channels;
+ nr_channels = color->jp2_pclr->nr_channels;
cmap = (opj_jp2_cmap_comp_t*)
opj_malloc(nr_channels * sizeof(opj_jp2_cmap_comp_t));
cmap[i].pcol = cio_read(cio, 1);
}
- ext->jp2_pclr->cmap = cmap;
+ color->jp2_pclr->cmap = cmap;
return true;
}/* jp2_read_cmap() */
-static void jp2_apply_cdef(opj_image_t *image, struct extension *ext)
+static void jp2_apply_cdef(opj_image_t *image, opj_jp2_color_t *color)
{
opj_jp2_cdef_info_t *info;
int color_space;
unsigned short i, n, cn, typ, asoc, acn;
color_space = image->color_space;
- info = ext->jp2_cdef->info;
- n = ext->jp2_cdef->n;
+ info = color->jp2_cdef->info;
+ n = color->jp2_cdef->n;
for(i = 0; i < n; ++i)
{
info[acn].asoc = info[acn].cn + 1;
}
}
- if(ext->jp2_cdef->info) opj_free(ext->jp2_cdef->info);
+ if(color->jp2_cdef->info) opj_free(color->jp2_cdef->info);
- opj_free(ext->jp2_cdef); ext->jp2_cdef = NULL;
+ opj_free(color->jp2_cdef); color->jp2_cdef = NULL;
}/* jp2_apply_cdef() */
static bool jp2_read_cdef(opj_jp2_t *jp2, opj_cio_t *cio,
- opj_jp2_box_t *box, struct extension *ext)
+ opj_jp2_box_t *box, opj_jp2_color_t *color)
{
opj_jp2_cdef_info_t *info;
unsigned short i, n;
/* Part 1, I.5.3.6: 'The shall be at most one Channel Definition box
* inside a JP2 Header box.'
*/
- if(ext->jp2_cdef) return false;
+ if(color->jp2_cdef) return false;
if((n = cio_read(cio, 2)) == 0) return false; /* szukw000: FIXME */
info = (opj_jp2_cdef_info_t*)
opj_malloc(n * sizeof(opj_jp2_cdef_info_t));
- ext->jp2_cdef = (opj_jp2_cdef_t*)opj_malloc(sizeof(opj_jp2_cdef_t));
- ext->jp2_cdef->info = info;
- ext->jp2_cdef->n = n;
+ color->jp2_cdef = (opj_jp2_cdef_t*)opj_malloc(sizeof(opj_jp2_cdef_t));
+ color->jp2_cdef->info = info;
+ color->jp2_cdef->n = n;
for(i = 0; i < n; ++i)
{
}/* jp2_read_cdef() */
static bool jp2_read_colr(opj_jp2_t *jp2, opj_cio_t *cio,
- opj_jp2_box_t *box, struct extension *ext)
+ opj_jp2_box_t *box, opj_jp2_color_t *color)
{
int skip_len;
opj_common_ptr cinfo;
/* Part 1, I.5.3.3 : 'A conforming JP2 reader shall ignore all Colour
* Specification boxes after the first.'
*/
- if(ext->jp2_has_colr) return false;
+ if(color->jp2_has_colr) return false;
cinfo = jp2->cinfo;
unsigned char *start;
start = cio_getbp(cio);
- ext->jp2_profile_buf = (unsigned char*)opj_malloc(skip_len);
- ext->jp2_profile_len = skip_len;
+ color->icc_profile_buf = (unsigned char*)opj_malloc(skip_len);
+ color->icc_profile_len = skip_len;
cio_skip(cio, box->init_pos + box->length - cio_tell(cio));
- memcpy(ext->jp2_profile_buf, start, skip_len);
+ memcpy(color->icc_profile_buf, start, skip_len);
}
}
opj_event_msg(cinfo, EVT_ERROR, "Error with COLR Box\n");
return false;
}
- ext->jp2_has_colr = 1;
+ color->jp2_has_colr = 1;
return true;
}/* jp2_read_colr() */
-#if defined(HAVE_LIBLCMS2) || defined(HAVE_LIBLCMS1)
-#ifdef HAVE_LIBLCMS1
-/* Bob Friesenhahn proposed:*/
-#define cmsSigXYZData icSigXYZData
-#define cmsSigLabData icSigLabData
-#define cmsSigCmykData icSigCmykData
-#define cmsSigYCbCrData icSigYCbCrData
-#define cmsSigLuvData icSigLuvData
-#define cmsSigGrayData icSigGrayData
-#define cmsSigRgbData icSigRgbData
-#define cmsUInt32Number DWORD
-
-#define cmsColorSpaceSignature icColorSpaceSignature
-#define cmsGetHeaderRenderingIntent cmsTakeRenderingIntent
-
-#endif /* HAVE_LIBLCMS1 */
-
-static void jp2_apply_profile(struct extension *ext, opj_image_t *image)
-{
- cmsHPROFILE in_prof, out_prof;
- cmsHTRANSFORM transform;
- cmsColorSpaceSignature in_space, out_space;
- cmsUInt32Number intent, in_type, out_type, nr_samples;
- int *r, *g, *b;
- int prec, i, max, max_w, max_h;
- OPJ_COLOR_SPACE oldspace;
-
- in_prof =
- cmsOpenProfileFromMem(ext->jp2_profile_buf, ext->jp2_profile_len);
- in_space = cmsGetPCS(in_prof);
- out_space = cmsGetColorSpace(in_prof);
- intent = cmsGetHeaderRenderingIntent(in_prof);
-
-
- max_w = image->comps[0].w; max_h = image->comps[0].h;
- prec = image->comps[0].prec;
- oldspace = image->color_space;
-
- if(out_space == cmsSigRgbData) /* enumCS 16 */
- {
- in_type = TYPE_RGB_16;
- out_type = TYPE_RGB_16;
- out_prof = cmsCreate_sRGBProfile();
- image->color_space = CLRSPC_SRGB;
- }
- else
- if(out_space == cmsSigGrayData) /* enumCS 17 */
- {
- in_type = TYPE_GRAY_8;
- out_type = TYPE_RGB_8;
- out_prof = cmsCreate_sRGBProfile();
- image->color_space = CLRSPC_SRGB;
- }
- else
- if(out_space == cmsSigYCbCrData) /* enumCS 18 */
- {
- in_type = TYPE_YCbCr_16;
- out_type = TYPE_RGB_16;
- out_prof = cmsCreate_sRGBProfile();
- image->color_space = CLRSPC_SRGB;
- }
- else
- {
-#ifdef DEBUG_PROFILE
-fprintf(stderr,"%s:%d: jp2_apply_profile\n\tICC Profile has unknown "
-"output colorspace(%#x)(%c%c%c%c)\n\tICC Profile ignored.\n",
-__FILE__,__LINE__,out_space,
-(out_space>>24) & 0xff,(out_space>>16) & 0xff,
-(out_space>>8) & 0xff, out_space & 0xff);
-#endif
- return;
- }
-
-#ifdef DEBUG_PROFILE
-fprintf(stderr,"%s:%d:jp2_apply_profile\n\tchannels(%d) prec(%d) w(%d) h(%d)"
-"\n\tprofile: in(%p) out(%p)\n",__FILE__,__LINE__,image->numcomps,prec,
-max_w,max_h, (void*)in_prof,(void*)out_prof);
-
-fprintf(stderr,"\trender_intent (%u)\n\t"
-"color_space: in(%#x)(%c%c%c%c) out:(%#x)(%c%c%c%c)\n\t"
-" type: in(%u) out:(%u)\n",
-intent,
-in_space,
-(in_space>>24) & 0xff,(in_space>>16) & 0xff,
-(in_space>>8) & 0xff, in_space & 0xff,
-
-out_space,
-(out_space>>24) & 0xff,(out_space>>16) & 0xff,
-(out_space>>8) & 0xff, out_space & 0xff,
-
-in_type,out_type
- );
-#endif /* DEBUG_PROFILE */
-
- transform = cmsCreateTransform(in_prof, in_type,
- out_prof, out_type, intent, 0);
-
-#ifdef HAVE_LIBLCMS2
-/* Possible for: LCMS_VERSION >= 2000 :*/
- cmsCloseProfile(in_prof);
- cmsCloseProfile(out_prof);
-#endif
-
- if(transform == NULL)
- {
-#ifdef DEBUG_PROFILE
-fprintf(stderr,"%s:%d:jp2_apply_profile\n\tcmsCreateTransform failed. "
-"ICC Profile ignored.\n",__FILE__,__LINE__);
-#endif
- image->color_space = oldspace;
-#ifdef HAVE_LIBLCMS1
- cmsCloseProfile(in_prof);
- cmsCloseProfile(out_prof);
-#endif
- return;
- }
-
- if(image->numcomps > 2)/* RGB, RGBA */
- {
- unsigned short *inbuf, *outbuf, *in, *out;
- max = max_w * max_h; nr_samples = max * 3 * sizeof(unsigned short);
- in = inbuf = (unsigned short*)opj_malloc(nr_samples);
- out = outbuf = (unsigned short*)opj_malloc(nr_samples);
-
- r = image->comps[0].data;
- g = image->comps[1].data;
- b = image->comps[2].data;
-
- for(i = 0; i < max; ++i)
- {
- *in++ = (unsigned short)*r++;
- *in++ = (unsigned short)*g++;
- *in++ = (unsigned short)*b++;
- }
-
- cmsDoTransform(transform, inbuf, outbuf, max);
-
- r = image->comps[0].data;
- g = image->comps[1].data;
- b = image->comps[2].data;
-
- for(i = 0; i < max; ++i)
- {
- *r++ = (int)*out++;
- *g++ = (int)*out++;
- *b++ = (int)*out++;
- }
- opj_free(inbuf); opj_free(outbuf);
- }
- else /* GRAY, GRAYA */
- {
- unsigned char *in, *inbuf, *out, *outbuf;
-
- max = max_w * max_h; nr_samples = max * 3 * sizeof(unsigned char);
- in = inbuf = (unsigned char*)opj_malloc(nr_samples);
- out = outbuf = (unsigned char*)opj_malloc(nr_samples);
-
- image->comps = (opj_image_comp_t*)
- opj_realloc(image->comps, (image->numcomps+2)*sizeof(opj_image_comp_t));
-
- if(image->numcomps == 2)
- image->comps[3] = image->comps[1];
-
- image->comps[1] = image->comps[0];
- image->comps[2] = image->comps[0];
-
- image->comps[1].data = (int*)opj_calloc(max, sizeof(int));
- image->comps[2].data = (int*)opj_calloc(max, sizeof(int));
-
- image->numcomps += 2;
-
- r = image->comps[0].data;
-
- for(i = 0; i < max; ++i)
- {
- *in++ = (unsigned char)*r++;
- }
- cmsDoTransform(transform, inbuf, outbuf, max);
-
- r = image->comps[0].data;
- g = image->comps[1].data;
- b = image->comps[2].data;
-
- for(i = 0; i < max; ++i)
- {
- *r++ = (int)*out++; *g++ = (int)*out++; *b++ = (int)*out++;
- }
- opj_free(inbuf); opj_free(outbuf);
-
- }/* if(image->numcomps */
-
- cmsDeleteTransform(transform);
-
-#ifdef HAVE_LIBLCMS1
- cmsCloseProfile(in_prof);
- cmsCloseProfile(out_prof);
-#endif
-}/* jp2_apply_profile() */
-
-#endif /* HAVE_LIBLCMS2 || HAVE_LIBLCMS1 */
-
-bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, struct extension *ext)
+bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, opj_jp2_color_t *color)
{
opj_jp2_box_t box;
unsigned int jp2h_end;
{
if(box.type == JP2_COLR)
{
- if( !jp2_read_colr(jp2, cio, &box, ext))
+ if( !jp2_read_colr(jp2, cio, &box, color))
{
cio_seek(cio, box.init_pos + 8);
cio_skip(cio, box.length - 8);
}
if(box.type == JP2_CDEF)
{
- if( !jp2_read_cdef(jp2, cio, &box, ext))
+ if( !jp2_read_cdef(jp2, cio, &box, color))
{
cio_seek(cio, box.init_pos + 8);
cio_skip(cio, box.length - 8);
}
if(box.type == JP2_PCLR)
{
- if( !jp2_read_pclr(jp2, cio, &box, ext))
+ if( !jp2_read_pclr(jp2, cio, &box, color))
{
cio_seek(cio, box.init_pos + 8);
cio_skip(cio, box.length - 8);
}
if(box.type == JP2_CMAP)
{
- if( !jp2_read_cmap(jp2, cio, &box, ext))
+ if( !jp2_read_cmap(jp2, cio, &box, color))
{
cio_seek(cio, box.init_pos + 8);
cio_skip(cio, box.length - 8);
cio_seek(cio, jp2h_end);
/* Part 1, I.5.3.3 : 'must contain at least one' */
- return (ext->jp2_has_colr == 1);
+ return (color->jp2_has_colr == 1);
}/* jp2_read_jp2h() */
{
opj_common_ptr cinfo;
opj_image_t *image = NULL;
- struct extension ext;
+ opj_jp2_color_t color;
if(!jp2 || !cio)
{
return NULL;
}
- memset(&ext, 0, sizeof(struct extension));
+ memset(&color, 0, sizeof(opj_jp2_color_t));
cinfo = jp2->cinfo;
/* JP2 decoding */
- if(!jp2_read_struct(jp2, cio, &ext))
+ if(!jp2_read_struct(jp2, cio, &color))
{
- free_ext_data(&ext);
+ free_color_data(&color);
opj_event_msg(cinfo, EVT_ERROR, "Failed to decode jp2 structure\n");
return NULL;
}
if(!image)
{
- free_ext_data(&ext);
+ free_color_data(&color);
opj_event_msg(cinfo, EVT_ERROR, "Failed to decode J2K image\n");
return NULL;
}
else
image->color_space = CLRSPC_UNKNOWN;
- if(ext.jp2_cdef)
+ if(color.jp2_cdef)
{
- jp2_apply_cdef(image, &ext);
+ jp2_apply_cdef(image, &color);
}
- if(ext.jp2_pclr)
+ if(color.jp2_pclr)
{
/* Part 1, I.5.3.4: Either both or none : */
- if( !ext.jp2_pclr->cmap)
- jp2_free_pclr(&ext);
+ if( !color.jp2_pclr->cmap)
+ jp2_free_pclr(&color);
else
- jp2_apply_pclr(&ext, image);
+ jp2_apply_pclr(&color, image);
}
- if(ext.jp2_profile_buf)
- {
-#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
- jp2_apply_profile(&ext, image);
-#endif
- opj_free(ext.jp2_profile_buf);
- }
- else
- if(image->color_space == CLRSPC_SYCC)
+ if(color.icc_profile_buf)
{
- opj_convert_sycc_to_rgb(image);
+ image->icc_profile_buf = color.icc_profile_buf;
+ color.icc_profile_buf = NULL;
+ image->icc_profile_len = color.icc_profile_len;
}
return image;
static bool jp2_read_struct(opj_jp2_t *jp2, opj_cio_t *cio,
- struct extension *ext) {
+ opj_jp2_color_t *color) {
if (!jp2_read_jp(jp2, cio))
return false;
if (!jp2_read_ftyp(jp2, cio))
return false;
- if (!jp2_read_jp2h(jp2, cio, ext))
+ if (!jp2_read_jp2h(jp2, cio, color))
return false;
if (!jp2_read_jp2c(jp2, cio, &jp2->j2k_codestream_length, &jp2->j2k_codestream_offset))
return false;
/**
Collector for ICC profile, palette, component mapping, channel description
*/
-struct extension
+typedef struct opj_jp2_color
{
- unsigned char *jp2_profile_buf;
- int jp2_profile_len;
+ unsigned char *icc_profile_buf;
+ int icc_profile_len;
opj_jp2_cdef_t *jp2_cdef;
opj_jp2_pclr_t *jp2_pclr;
unsigned char jp2_has_colr;
-};
+} opj_jp2_color_t;
/**
JP2 component
@param ext Collector for profile, cdef and pclr data
@return Returns true if successful, returns false otherwise
*/
-bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, struct extension *ext);
+bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, opj_jp2_color_t *color);
/**
Creates a JP2 decompression structure
@param cinfo Codec context info
OPJ_COLOR_SPACE color_space;
/** image components */
opj_image_comp_t *comps;
+ /** 'restricted' ICC profile */
+ unsigned char *icc_profile_buf;
+ /** size of ICC profile */
+ int icc_profile_len;
} opj_image_t;
/**
+++ /dev/null
-#include "opj_includes.h"
-
-/*--------------------------------------------------------
-Matrix f�r sYCC, Amendment 1 to IEC 61966-2-1
-
-Y : 0.299 0.587 0.114 :R
-Cb: -0.1687 -0.3312 0.5 :G
-Cr: 0.5 -0.4187 -0.0812 :B
-
-Inverse:
-
-R: 1 -3.68213e-05 1.40199 :Y
-G: 1.00003 -0.344125 -0.714128 :Cb - 2^(prec - 1)
-B: 0.999823 1.77204 -8.04142e-06 :Cr - 2^(prec - 1)
-
------------------------------------------------------------*/
-static void sycc_to_rgb(int offset, int upb, int y, int cb, int cr,
- int *out_r, int *out_g, int *out_b)
-{
- int r, g, b;
-
- cb -= offset; cr -= offset;
- r = y + (int)(1.402 * (float)cr);
- if(r < 0) r = 0; else if(r > upb) r = upb; *out_r = r;
-
- g = y - (int)(0.344 * (float)cb + 0.714 * (float)cr);
- if(g < 0) g = 0; else if(g > upb) g = upb; *out_g = g;
-
- b = y + (int)(1.772 * (float)cb);
- if(b < 0) b = 0; else if(b > upb) b = upb; *out_b = b;
-}
-
-static void opj_convert_sycc444(opj_image_t *img)
-{
- int *d0, *d1, *d2, *r, *g, *b;
- const int *y, *cb, *cr;
- int maxw, maxh, max, i, offset, upb;
-
- i = img->comps[0].prec;
- offset = 1<<(i - 1); upb = (1<<i)-1;
-
- maxw = img->comps[0].w; maxh = img->comps[0].h;
- max = maxw * maxh;
-
- y = img->comps[0].data;
- cb = img->comps[1].data;
- cr = img->comps[2].data;
-
- d0 = r = (int*)opj_malloc(sizeof(int) * max);
- d1 = g = (int*)opj_malloc(sizeof(int) * max);
- d2 = b = (int*)opj_malloc(sizeof(int) * max);
-
- for(i = 0; i < max; ++i)
- {
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
-
- ++y; ++cb; ++cr; ++r; ++g; ++b;
- }
- opj_free(img->comps[0].data); img->comps[0].data = d0;
- opj_free(img->comps[1].data); img->comps[1].data = d1;
- opj_free(img->comps[2].data); img->comps[2].data = d2;
-
-}/* opj_convert_sycc444() */
-
-static void opj_convert_sycc422(opj_image_t *img)
-{
- int *d0, *d1, *d2, *r, *g, *b;
- const int *y, *cb, *cr;
- int maxw, maxh, max, offset, upb;
- int i, j;
-
- i = img->comps[0].prec;
- offset = 1<<(i - 1); upb = (1<<i)-1;
-
- maxw = img->comps[0].w; maxh = img->comps[0].h;
- max = maxw * maxh;
-
- y = img->comps[0].data;
- cb = img->comps[1].data;
- cr = img->comps[2].data;
-
- d0 = r = (int*)opj_malloc(sizeof(int) * max);
- d1 = g = (int*)opj_malloc(sizeof(int) * max);
- d2 = b = (int*)opj_malloc(sizeof(int) * max);
-
- for(i=0; i < maxh; ++i)
- {
- for(j=0; j < maxw; j += 2)
- {
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
-
- ++y; ++r; ++g; ++b;
-
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
-
- ++y; ++r; ++g; ++b; ++cb; ++cr;
- }
- }
- opj_free(img->comps[0].data); img->comps[0].data = d0;
- opj_free(img->comps[1].data); img->comps[1].data = d1;
- opj_free(img->comps[2].data); img->comps[2].data = d2;
-
- img->comps[1].w = maxw; img->comps[1].h = maxh;
- img->comps[2].w = maxw; img->comps[2].h = maxh;
- img->comps[1].dx = img->comps[0].dx;
- img->comps[2].dx = img->comps[0].dx;
- img->comps[1].dy = img->comps[0].dy;
- img->comps[2].dy = img->comps[0].dy;
-
-}/* opj_convert_sycc422() */
-
-static void opj_convert_sycc420(opj_image_t *img)
-{
- int *d0, *d1, *d2, *r, *g, *b, *nr, *ng, *nb;
- const int *y, *cb, *cr, *ny;
- int maxw, maxh, max, offset, upb;
- int i, j;
-
- i = img->comps[0].prec;
- offset = 1<<(i - 1); upb = (1<<i)-1;
-
- maxw = img->comps[0].w; maxh = img->comps[0].h;
- max = maxw * maxh;
-
- y = img->comps[0].data;
- cb = img->comps[1].data;
- cr = img->comps[2].data;
-
- d0 = r = (int*)opj_malloc(sizeof(int) * max);
- d1 = g = (int*)opj_malloc(sizeof(int) * max);
- d2 = b = (int*)opj_malloc(sizeof(int) * max);
-
- for(i=0; i < maxh; i += 2)
- {
- ny = y + maxw;
- nr = r + maxw; ng = g + maxw; nb = b + maxw;
-
- for(j=0; j < maxw; j += 2)
- {
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
-
- ++y; ++r; ++g; ++b;
-
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
-
- ++y; ++r; ++g; ++b;
-
- sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);
-
- ++ny; ++nr; ++ng; ++nb;
-
- sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);
-
- ++ny; ++nr; ++ng; ++nb; ++cb; ++cr;
- }
- y += maxw; r += maxw; g += maxw; b += maxw;
- }
- opj_free(img->comps[0].data); img->comps[0].data = d0;
- opj_free(img->comps[1].data); img->comps[1].data = d1;
- opj_free(img->comps[2].data); img->comps[2].data = d2;
-
- img->comps[1].w = maxw; img->comps[1].h = maxh;
- img->comps[2].w = maxw; img->comps[2].h = maxh;
- img->comps[1].dx = img->comps[0].dx;
- img->comps[2].dx = img->comps[0].dx;
- img->comps[1].dy = img->comps[0].dy;
- img->comps[2].dy = img->comps[0].dy;
-
-}/* opj_convert_sycc420() */
-
-void opj_convert_sycc_to_rgb(opj_image_t *img)
-{
- if(img->numcomps < 3)
- {
- img->color_space = CLRSPC_GRAY;
- return;
- }
-
- if((img->comps[0].dx == 1)
- && (img->comps[1].dx == 2)
- && (img->comps[2].dx == 2)
- && (img->comps[0].dy == 1)
- && (img->comps[1].dy == 2)
- && (img->comps[2].dy == 2))/* horizontal and vertical sub-sample */
- {
- opj_convert_sycc420(img);
- }
- else
- if((img->comps[0].dx == 1)
- && (img->comps[1].dx == 2)
- && (img->comps[2].dx == 2)
- && (img->comps[0].dy == 1)
- && (img->comps[1].dy == 1)
- && (img->comps[2].dy == 1))/* horizontal sub-sample only */
- {
- opj_convert_sycc422(img);
- }
- else
- if((img->comps[0].dx == 1)
- && (img->comps[1].dx == 1)
- && (img->comps[2].dx == 1)
- && (img->comps[0].dy == 1)
- && (img->comps[1].dy == 1)
- && (img->comps[2].dy == 1))/* no sub-sample */
- {
- opj_convert_sycc444(img);
- }
- else
- {
- fprintf(stderr,"%s:%d:opj_convert_sycc_to_rgb\n\tCAN NOT CONVERT\n",
- __FILE__,__LINE__);
- return;
- }
- img->color_space = CLRSPC_SRGB;
-
-}/* opj_convert_sycc_to_rgb() */
+++ /dev/null
-#ifndef _OPJ_CONVERT_H_
-#define _OPJ_CONVERT_H_
-
-extern void opj_convert_sycc_to_rgb(opj_image_t *img);
-
-#endif /* _OPJ_CONVERT_H_ */
}
#endif
-#include "opj_convert.h"
#include "j2k_lib.h"
#include "opj_malloc.h"
#include "event.h"
# Headers file are located here:
INCLUDE_DIRECTORIES(
${OPENJPEG_SOURCE_DIR}/libopenjpeg
- ${OPENJPEG_SOURCE_DIR}/codec/compat
+ ${OPENJPEG_SOURCE_DIR}/common
${LCMS_INCLUDE_DIR}
)
ADD_EXECUTABLE(frames_to_mj2
frames_to_mj2.c
- ${PROJECT_SOURCE_DIR}/codec/compat/getopt.c
+ ${PROJECT_SOURCE_DIR}/common/getopt.c
mj2_convert.c
mj2.c
)
ADD_EXECUTABLE(mj2_to_frames
mj2_to_frames.c
- ${PROJECT_SOURCE_DIR}/codec/compat/getopt.c
+ ${PROJECT_SOURCE_DIR}/common/getopt.c
mj2_convert.c
mj2.c
+ ${PROJECT_SOURCE_DIR}/common/color.c
)
TARGET_LINK_LIBRARIES(mj2_to_frames ${OPENJPEG_LIBRARY_NAME} ${LCMS_LIB})
IF(UNIX)
COMPILERFLAGS = -Wall -static
USERLIBS =
-INCLUDES = -I.. -I. -I../libopenjpeg
+INCLUDES = -I.. -I. -I../libopenjpeg -I../common
if with_liblcms2
INCLUDES += @lcms2includes@
CFLAGS = $(COMPILERFLAGS) $(INCLUDES)
LDADD = ../libopenjpeg/libopenjpeg.la $(USERLIBS)
-frames_to_mj2_SOURCES = ../codec/compat/getopt.c mj2_convert.c mj2.c \
+frames_to_mj2_SOURCES = ../common/getopt.c mj2_convert.c mj2.c \
frames_to_mj2.c
-mj2_to_frames_SOURCES = ../codec/compat/getopt.c mj2_convert.c mj2.c \
- mj2_to_frames.c
+mj2_to_frames_SOURCES = ../common/getopt.c mj2_convert.c mj2.c \
+ ../common/color.c mj2_to_frames.c
extract_j2k_from_mj2_SOURCES = mj2.c extract_j2k_from_mj2.c
INSTALL_BIN = $(prefix)/bin
USERLIBS = -lm
-INCLUDE = -I.. -I. -I../libopenjpeg
+INCLUDE = -I.. -I. -I../libopenjpeg -I../common
ifeq ($(WITH_LCMS2),yes)
INCLUDE += $(LCMS2_INCLUDE)
wrap_j2k_in_mj2 ../bin
frames_to_mj2: frames_to_mj2.c ../libopenjpeg.a
- $(CC) $(CFLAGS) ../codec/compat/getopt.c mj2_convert.c mj2.c frames_to_mj2.c \
+ $(CC) $(CFLAGS) ../common/getopt.c mj2_convert.c mj2.c frames_to_mj2.c \
-o frames_to_mj2 ../libopenjpeg.a $(USERLIBS)
mj2_to_frames: mj2_to_frames.c ../libopenjpeg.a
- $(CC) $(CFLAGS) ../codec/compat/getopt.c mj2_convert.c mj2.c mj2_to_frames.c \
+ $(CC) $(CFLAGS) ../common/getopt.c mj2_convert.c mj2.c \
+ ../common/color.c mj2_to_frames.c \
-o mj2_to_frames ../libopenjpeg.a $(USERLIBS)
extract_j2k_from_mj2: extract_j2k_from_mj2.c ../libopenjpeg.a
mj2_box_t box;
mj2_box_t box2;
int i;
- struct extension ext;
+ opj_jp2_color_t color;
mj2_read_boxhdr(&box, cio);
tk->or_fieldorder = 0;
cio_skip(cio,2); /* Pre-defined = -1 */
- memset(&ext, 0, sizeof(struct extension));
+ memset(&color, 0, sizeof(opj_jp2_color_t));
- if (!jp2_read_jp2h(&tk->jp2_struct, cio, &ext)) {
+ if (!jp2_read_jp2h(&tk->jp2_struct, cio, &color)) {
opj_event_msg(tk->cinfo, EVT_ERROR, "Error reading JP2H Box\n");
return 1;
}
#include <stdlib.h>
#include <string.h>
+#include "opj_config.h"
#include "openjpeg.h"
#include "../libopenjpeg/j2k_lib.h"
#include "../libopenjpeg/j2k.h"
#include "mj2.h"
#include "mj2_convert.h"
+#ifdef HAVE_LIBLCMS2
+#include <lcms2.h>
+#endif
+#ifdef HAVE_LIBLCMS1
+#include <lcms.h>
+#endif
+#include "color.h"
/* -------------------------------------------------------------------------- */
/**
cio = opj_cio_open((opj_common_ptr)dinfo, frame_codestream, sample->sample_size-8);
img = opj_decode(dinfo, cio); // Decode J2K to image
-
+
+#ifdef WANT_SYCC_TO_RGB
+ if(img->color_space == CLRSPC_SYCC)
+ {
+ color_sycc_to_rgb(img);
+ }
+#endif
+
+ if(img->icc_profile_buf)
+ {
+#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
+ color_apply_icc_profile(img);
+#endif
+
+ free(img->icc_profile_buf);
+ img->icc_profile_buf = NULL; img->icc_profile_len = 0;
+ }
+
if (((img->numcomps == 3) && (img->comps[0].dx == img->comps[1].dx / 2)
&& (img->comps[0].dx == img->comps[2].dx / 2 ) && (img->comps[0].dx == 1))
|| (img->numcomps == 1)) {
#include "mj2_to_metadata.h"
#include <string.h>
-#include "compat/getopt.h"
+#include "getopt.h"
/* -------------------------------------------------------------------------- */