(thanks to Winfried for his help)
authorAntonin Descampe <antonin@gmail.com>
Wed, 8 Dec 2010 11:06:41 +0000 (11:06 +0000)
committerAntonin Descampe <antonin@gmail.com>
Wed, 8 Dec 2010 11:06:41 +0000 (11:06 +0000)
* [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.

45 files changed:
CHANGES
JavaOpenJPEG/JavaOpenJPEG.c
JavaOpenJPEG/JavaOpenJPEGDecoder.c
Makefile.nix
OPJ_Validate/OPJ_Validate.c
codec/CMakeLists.txt
codec/Makefile.am
codec/Makefile.nix
codec/convert.c
codec/image_to_j2k.c
codec/j2k_dump.c
codec/j2k_to_image.c
common/color.c [new file with mode: 0644]
common/color.h [new file with mode: 0644]
common/format_defs.h [new file with mode: 0644]
common/getopt.c [new file with mode: 0644]
common/getopt.h [new file with mode: 0644]
config.nix
indexer_JPIP/fix.c
indexer_JPIP/index_create.c
indexer_JPIP/j2k.h
jp3d/Makefile.nix
jp3d/codec/convert.c
jp3d/codec/jp3d_to_volume.c
jp3d/codec/volume_to_jp3d.c
jp3d/libjp3dvm/event.c
jp3d/libjp3dvm/jp3d_lib.c
jp3d/libjp3dvm/openjpeg.c
jpwl/CMakeLists.txt
jpwl/Makefile.am
jpwl/Makefile.nix
libopenjpeg/CMakeLists.txt
libopenjpeg/Makefile.am
libopenjpeg/jp2.c
libopenjpeg/jp2.h
libopenjpeg/openjpeg.h
libopenjpeg/opj_convert.c [deleted file]
libopenjpeg/opj_convert.h [deleted file]
libopenjpeg/opj_includes.h
mj2/CMakeLists.txt
mj2/Makefile.am
mj2/Makefile.nix
mj2/mj2.c
mj2/mj2_to_frames.c
mj2/mj2_to_metadata.c

diff --git a/CHANGES b/CHANGES
index baeabafa6921433c3defddd5d27b3458815bea5c..e1ff8e50c550763c4334aa7c8047d01fc4fc00ba 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -5,6 +5,15 @@ What's New for OpenJPEG
 ! : 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
index 6af3a44af64c9cc2388b5d8ea2cbe0953199aaef..b1f03028c587e1964f9776cba7c5b71b2687b9f5 100644 (file)
 #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
index 3f65655abf196dae9d4f90d535f8447062cb7d1b..decc1373d122e623a434789dcab0129d6bcc2a95 100644 (file)
 #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
index a40030b3b50f664e522afd942a9347a08ecff10b..72f995b1fe92ea3372aad81e7a325eed57dd486c 100644 (file)
@@ -13,7 +13,6 @@ SRCS = ./libopenjpeg/bio.c ./libopenjpeg/cio.c ./libopenjpeg/dwt.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
 
 INCLS = ./libopenjpeg/bio.h ./libopenjpeg/cio.h ./libopenjpeg/dwt.h \
  ./libopenjpeg/event.h ./libopenjpeg/fix.h ./libopenjpeg/image.h \
@@ -22,9 +21,7 @@ INCLS = ./libopenjpeg/bio.h ./libopenjpeg/cio.h ./libopenjpeg/dwt.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)
index 7153725a251181572b4c0d94a006193bfdc3b808..9bd1da5b418d5d420c9b9ea39ed7c1739c91f1dd 100644 (file)
@@ -26,9 +26,9 @@
 * 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
@@ -37,7 +37,7 @@
 \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
@@ -67,12 +67,12 @@ int doprocess(char programme[4096],char command_line[4096]) {
        \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
index 5ad8958906dc6b620c54d5151f5a8ef2843ca449..6fd128f70f6ae7f08998a24ffe8f54f6aa0b3956 100644 (file)
@@ -1,16 +1,17 @@
-# 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)
 
@@ -18,6 +19,7 @@ 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})
index 43d54506a0dac2869d2118f6c9e18d363cef924b..5db418502dc59367d3e890e97f259953a6762fef 100644 (file)
@@ -1,6 +1,6 @@
 COMPILERFLAGS = -Wall -static
 USERLIBS = -lm
-INCLUDES = -I.. -I. -I../libopenjpeg
+INCLUDES = -I.. -I. -I../libopenjpeg -I../common
 
 if with_libtiff
 INCLUDES += @tiffincludes@
@@ -27,11 +27,12 @@ bin_PROGRAMS = j2k_to_image image_to_j2k j2k_dump
 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)
 
index 129b2a4bac76b85ead161f27f6c7e4d92839f052..ace579a30411fc6509e24bbbc63ff44595f498fd 100644 (file)
@@ -5,7 +5,7 @@ CFLAGS = -Wall
 
 INSTALL_BIN = $(prefix)/bin
 
-INCLUDE = -I.. -I. -I../libopenjpeg
+INCLUDE = -I.. -I. -I../libopenjpeg -I../common
 USERLIBS = -lm
 
 ifeq ($(WITH_TIFF),yes)
@@ -35,15 +35,16 @@ all: j2k_to_image image_to_j2k j2k_dump
        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:
index de08e4c72cde2a273c13c86b72e0365fdbbca2e3..25e715bf45f80ebdbfc09ec4575e64b132a96638 100644 (file)
 #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"
index a223adb895c696b4d94f4b5ded50dd1422255604..443d4e07681bc151edf480299b1e511809c5e768 100644 (file)
 #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*/
index 83fc1c94d5daa018fb0072a855bb25dd5141c523..3c3e8d9148650c2f01b07b4afbc28d0d9a3aef6d 100644 (file)
 #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*/
@@ -477,6 +466,10 @@ int main(int argc, char *argv[])
                                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 */
index bbf40ad90c0bd8d4406b3209ad9cbccc7489068c..ff6141ee373c259af0c5d6cb20b4e880c2bc58ea 100644 (file)
 #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*/
@@ -740,6 +737,21 @@ int main(int argc, char **argv) {
                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) {
diff --git a/common/color.c b/common/color.c
new file mode 100644 (file)
index 0000000..ac0921a
--- /dev/null
@@ -0,0 +1,463 @@
+/*
+ * 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 */
+
diff --git a/common/color.h b/common/color.h
new file mode 100644 (file)
index 0000000..26117b0
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * 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_ */
diff --git a/common/format_defs.h b/common/format_defs.h
new file mode 100644 (file)
index 0000000..d4be93b
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * 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
diff --git a/common/getopt.c b/common/getopt.c
new file mode 100644 (file)
index 0000000..5e444d3
--- /dev/null
@@ -0,0 +1,261 @@
+/*
+ * 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
diff --git a/common/getopt.h b/common/getopt.h
new file mode 100644 (file)
index 0000000..779fe47
--- /dev/null
@@ -0,0 +1,29 @@
+/* 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_ */
index 7658b31bab8ad46bb94ed7cc872abba6882723e3..3932b24c0733cfe1266e87e4b0f413334a4e1dce 100644 (file)
@@ -9,6 +9,7 @@ JP3D_BUILD = 0
 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
@@ -19,15 +20,15 @@ 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.
@@ -39,7 +40,9 @@ LCMS2_INCLUDE = -I/usr/include
 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)
index 9699bf6be2cf67c2a4ef409239d162b0e5a6cf27..6bf08c62959024501ac1348d070c47dd506b3ca8 100644 (file)
 
 #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.
index a8d40b0a9241bab21f8a691e6e867af64738be49..518e70f459d0028cfc7d82804d54eca7b277bb05 100644 (file)
@@ -1130,7 +1130,7 @@ int j2k_decode(unsigned char *src, int len, j2k_image_t **image, j2k_cp_t **cp)
 }
 
 
-#ifdef WIN32
+#ifdef _WIN32
 #include <windows.h>
 
 BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
@@ -1143,7 +1143,7 @@ BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserve
     }
     return TRUE;
 }
-#endif
+#endif /* _WIN32 */
 
 int main(int argc, char **argv)
 {  
index 5ead3b453bb0aaf9838d9827bba9e89f9d8019a8..6c9a3c6f5ba6d59e4bca8952828c3a9568a9387f 100644 (file)
@@ -28,7 +28,7 @@
 
 #define VERSION "0.0.8"
 
-#ifdef WIN32
+#ifdef _WIN32
 #ifdef LIBJ2K_EXPORTS
 #define LIBJ2K_API __declspec(dllexport)
 #else
index 0dd57ea3f16fe0a4f6326536287bbf7570b8c90a..4ca053e539a3d2a991599a33c6cab5085f985fae 100644 (file)
@@ -21,8 +21,6 @@ INCLS = ./libjp3dvm/t1_3d.h ./libjp3dvm/bio.h ./libjp3dvm/cio.h \
 
 INCLUDE = -I.. -Ilibjp3dvm
 
-AR = ar
-
 INSTALL_LIBDIR = $(prefix)/lib
 headerdir = openjpeg3d-$(JP3D_MAJOR).$(JP3D_MINOR)
 INSTALL_INCLUDE = $(prefix)/include/$(headerdir)
index b9aa656fa4a92d8ff99e26e43fd7adccfddecf93..99eb7f2ed81dbba56112528cc1e12473468d3afa 100755 (executable)
 #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 */
 
 
 
index ee4425f2a4c28cacba70b32038183da8760bdc99..995faaecccf0769e6be8a84b5124927567713750 100755 (executable)
 #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
index 238c47f5f27ffffcba7c99d3731a479d6bfeb8d7..d448fbe118002ec7c83fa61722b8f736286f06b2 100755 (executable)
 #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
index 6fe8ae2e3c87864db603305ab91e33cf92160ea2..c558218c60c9b4cce1205668c4d325fd2e74ece3 100755 (executable)
@@ -30,7 +30,7 @@
 //   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
@@ -57,7 +57,7 @@ _itoa(int i, char *a, int r) {
        return a;\r
 }\r
 \r
-#endif // !WIN32\r
+#endif // !_WIN32\r
 \r
 /* ----------------------------------------------------------------------- */\r
 \r
index fe19ab8b3d4cc2500cea3d24fe69bc89206a7b99..b2303991f5a9285dd0461c14dff7401193f0a411 100755 (executable)
  * 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
@@ -54,7 +54,7 @@ double opj_clock() {
     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
index eb4c39bf327de01fdcec86b93f0e4f51cdab13a7..8e3a0782f79118912ccbc41429bd95fabfc36bca 100755 (executable)
  * 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
@@ -49,7 +49,7 @@ DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
     return TRUE;\r
 }\r
 #endif /* OPJ_STATIC */\r
-#endif /* WIN32 */\r
+#endif /* _WIN32 */\r
 \r
 /* ---------------------------------------------------------------------- */\r
 \r
index a4e39905666d6764d93c38030732174eafdf9932..71e0f7b127c0cbce9afa41361df2d9ff4eccdda2 100755 (executable)
@@ -21,7 +21,6 @@ SET(OPJ_SRCS
 ../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)
 
@@ -29,14 +28,10 @@ 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)
@@ -47,18 +42,22 @@ IF(WIN32)
 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)
@@ -68,9 +67,10 @@ ENDIF(TIFF_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)
index eeca7abb40c57c19ae9450616ab7c5ca2dfe305a..f6bc78ab3e9d7d815cde274f4986b6011538fbd5 100644 (file)
@@ -17,7 +17,7 @@ SRCS = ../libopenjpeg/bio.c ../libopenjpeg/cio.c ../libopenjpeg/dwt.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 \
@@ -26,7 +26,7 @@ INCLS = ../libopenjpeg/bio.h ../libopenjpeg/cio.h ../libopenjpeg/dwt.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)
@@ -40,8 +40,8 @@ dos2unix:
 
 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@
@@ -63,6 +63,8 @@ INCLUDES += @lcms1includes@
 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
@@ -71,10 +73,10 @@ JPWL_image_to_j2k_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)
index 8b43a7750a30d5b28aa5bb0cd2a97d07bbfdc2ec..20b1cebdd6563dbb4af9df7bf040f7d019c78e35 100644 (file)
@@ -3,7 +3,7 @@ include ../config.nix
 
 TARGET  = openjpeg_JPWL
 COMPILERFLAGS = -Wall -ffast-math -std=c99 -fPIC
-USERLIBS = -lm
+USERLIBS =
 
 JPWL_SRCS = ./crc.c ./jpwl.c ./jpwl_lib.c ./rs.c
 
@@ -13,7 +13,7 @@ SRCS = ../libopenjpeg/bio.c ../libopenjpeg/cio.c ../libopenjpeg/dwt.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 \
@@ -22,11 +22,9 @@ INCLS = ../libopenjpeg/bio.h ../libopenjpeg/cio.h ../libopenjpeg/dwt.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
@@ -57,6 +55,8 @@ INCLUDE += $(LCMS1_INCLUDE)
 USERLIBS += $(LCMS1_LIB)
 endif
 
+USERLIBS += -lm
+
 LIBRARIES += $(USERLIBS)
 
 MODULES = $(SRCS:.c=.o)
@@ -101,12 +101,12 @@ $(SHAREDLIB): $(MODULES)
 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)
 
index d1d77a2b6d81646b540c188fb88125cf25fff6d9..39fb2a9a0b56be420f72d6c3e8ff5f1934c8dcc1 100644 (file)
@@ -19,13 +19,8 @@ SET(OPENJPEG_SRCS
   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)
@@ -36,9 +31,6 @@ IF(WIN32)
 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}
index 11e6249eebb6782b05333d9b9f76b120e603ab1c..157f2806cb6b9a0bb5e1eaad43b29c48cfb3c73a 100644 (file)
@@ -13,11 +13,11 @@ libopenjpeg_la_LDFLAGS = -no-undefined \
 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)
 
index 61b22cf17378946654cb13d396ce051a7ad8b636..20cf2e678a3556f016baeebe25f32024807c655f 100644 (file)
  * 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 */
@@ -92,53 +83,47 @@ static bool jp2_read_jp(opj_jp2_t *jp2, opj_cio_t *cio);
 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);
 /*@}*/
 
 /*@}*/
@@ -308,32 +293,32 @@ static void jp2_write_colr(opj_jp2_t *jp2, opj_cio_t *cio) {
        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;
@@ -344,11 +329,11 @@ static void jp2_apply_pclr(struct extension *ext, opj_image_t *image)
        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*)
@@ -370,7 +355,7 @@ static void jp2_apply_pclr(struct extension *ext, opj_image_t *image)
        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)
    {
@@ -400,12 +385,12 @@ static void jp2_apply_pclr(struct extension *ext, opj_image_t *image)
        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;
@@ -417,7 +402,7 @@ static bool jp2_read_pclr(opj_jp2_t *jp2, opj_cio_t *cio,
 /* 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 */
@@ -435,7 +420,7 @@ static bool jp2_read_pclr(opj_jp2_t *jp2, opj_cio_t *cio,
        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)
    {
@@ -457,20 +442,20 @@ static bool jp2_read_pclr(opj_jp2_t *jp2, opj_cio_t *cio,
 }/* 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));
 
@@ -481,20 +466,20 @@ static bool jp2_read_cmap(opj_jp2_t *jp2, opj_cio_t *cio,
        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)
    {
@@ -515,14 +500,14 @@ static void jp2_apply_cdef(opj_image_t *image, struct extension *ext)
        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;
@@ -530,16 +515,16 @@ static bool jp2_read_cdef(opj_jp2_t *jp2, opj_cio_t *cio,
 /* 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)
    {
@@ -552,7 +537,7 @@ static bool jp2_read_cdef(opj_jp2_t *jp2, opj_cio_t *cio,
 }/* 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;
@@ -560,7 +545,7 @@ static bool jp2_read_colr(opj_jp2_t *jp2, opj_cio_t *cio,
 /* 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;
 
@@ -586,12 +571,12 @@ static bool jp2_read_colr(opj_jp2_t *jp2, opj_cio_t *cio,
        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);
   }
    }
 
@@ -600,213 +585,12 @@ static bool jp2_read_colr(opj_jp2_t *jp2, opj_cio_t *cio,
        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;
@@ -846,7 +630,7 @@ bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, struct extension *ext)
    {
        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);
@@ -856,7 +640,7 @@ bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, struct extension *ext)
   }
     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);
@@ -866,7 +650,7 @@ bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, struct extension *ext)
   }
     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);
@@ -876,7 +660,7 @@ bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, struct extension *ext)
   }
     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);
@@ -893,7 +677,7 @@ bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, struct extension *ext)
        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() */
 
@@ -902,19 +686,19 @@ opj_image_t* jp2_decode(opj_jp2_t *jp2, opj_cio_t *cio,
 {
        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;
    }
@@ -924,7 +708,7 @@ opj_image_t* jp2_decode(opj_jp2_t *jp2, opj_cio_t *cio,
 
        if(!image) 
    {
-       free_ext_data(&ext);
+       free_color_data(&color);
        opj_event_msg(cinfo, EVT_ERROR, "Failed to decode J2K image\n");
        return NULL;
    }
@@ -939,29 +723,23 @@ opj_image_t* jp2_decode(opj_jp2_t *jp2, opj_cio_t *cio,
        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;
 
@@ -1125,12 +903,12 @@ static bool jp2_read_jp(opj_jp2_t *jp2, opj_cio_t *cio) {
 
 
 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;
index 3cfaef4a342824aef8186ec38d1e783033d0b364..9ad662cb9732eef1fe70f951c8ca92a4acf7c7be 100644 (file)
@@ -95,15 +95,15 @@ typedef struct opj_jp2_pclr
 /** 
 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
@@ -167,7 +167,7 @@ Read the JP2H box - JP2 Header box (used in MJ2)
 @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
index 101c7e8bd974ade3d8de1f9a3878f0bd06551bc4..7ad62bf6dc17ed169e8eef51fb514e05f57a8859 100644 (file)
@@ -554,6 +554,10 @@ typedef struct opj_image {
        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;
 
 /**
diff --git a/libopenjpeg/opj_convert.c b/libopenjpeg/opj_convert.c
deleted file mode 100644 (file)
index 0355e50..0000000
+++ /dev/null
@@ -1,216 +0,0 @@
-#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() */
diff --git a/libopenjpeg/opj_convert.h b/libopenjpeg/opj_convert.h
deleted file mode 100644 (file)
index 029072c..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef _OPJ_CONVERT_H_
-#define _OPJ_CONVERT_H_
-
-extern void opj_convert_sycc_to_rgb(opj_image_t *img);
-
-#endif /* _OPJ_CONVERT_H_ */
index 7ec641bc10392e4feb909108ea5e4179e87062f3..53739abf8157b8a6422a2551b363e1338132f114 100644 (file)
@@ -104,7 +104,6 @@ static INLINE long lrintf(float f){
 }
 #endif
 
-#include "opj_convert.h"
 #include "j2k_lib.h"
 #include "opj_malloc.h"
 #include "event.h"
index 9f92a52c6056aeddd1fcc5bed22f633272f3bfae..e65145ca54808d6f2087ac4fbacecf846a2fd742 100644 (file)
@@ -3,13 +3,13 @@
 # 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
   )
@@ -20,9 +20,10 @@ ENDIF(UNIX)
 
 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)
index b5495387f967fcf14235854197ee425c94738c10..5e7a0ae920c9b052de2f3cf86ed575c520f4fd8a 100644 (file)
@@ -1,7 +1,7 @@
 COMPILERFLAGS = -Wall -static
 
 USERLIBS =
-INCLUDES = -I.. -I. -I../libopenjpeg
+INCLUDES = -I.. -I. -I../libopenjpeg -I../common
 
 if with_liblcms2
 INCLUDES += @lcms2includes@
@@ -18,11 +18,11 @@ bin_PROGRAMS = frames_to_mj2 mj2_to_frames extract_j2k_from_mj2 wrap_j2k_in_mj2
 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
 
index 4a76c59a80d9d05b96dcf9d82a03ab5992f063cd..da36945199c33ed77d7695a781e33a03363f008c 100644 (file)
@@ -5,7 +5,7 @@ CFLAGS = -Wall
 
 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)
@@ -25,11 +25,12 @@ all: frames_to_mj2 mj2_to_frames extract_j2k_from_mj2 wrap_j2k_in_mj2
        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
index 7066ed0829533c5d1c6b141c46a9987bc89495ef..01ee90c5373360bb280f5a61b2bf2a14d36e5f1b 100644 (file)
--- a/mj2/mj2.c
+++ b/mj2/mj2.c
@@ -1101,7 +1101,7 @@ int mj2_read_smj2(opj_image_t * img, mj2_tk_t * tk, opj_cio_t *cio)
   mj2_box_t box;
   mj2_box_t box2;
   int i;
-  struct extension ext;
+  opj_jp2_color_t color;
        
   mj2_read_boxhdr(&box, cio);
        
@@ -1159,9 +1159,9 @@ int mj2_read_smj2(opj_image_t * img, mj2_tk_t * tk, opj_cio_t *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;
   }
index fda388c481c03f545e7f697bc38b98804f25c461..63869ea97e34889c36214f63b127512f2be63b5a 100644 (file)
@@ -29,6 +29,7 @@
 #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"
 /* -------------------------------------------------------------------------- */
 
 /**
@@ -168,7 +176,24 @@ int main(int argc, char *argv[]) {
                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)) {
index 7dde60daf0d582e29f45990c37fdacf602687d4a..90be6202f8a2475b201ff1d5c036c4552bb26e13 100644 (file)
@@ -16,7 +16,7 @@ can be bound by the Open JPEG open-source license and disclaimer, expressed else
 
 #include "mj2_to_metadata.h"
 #include <string.h>
-#include "compat/getopt.h"
+#include "getopt.h"
 
 /* -------------------------------------------------------------------------- */