(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.
This commit is contained in:
parent
59d9b97ffe
commit
d08a96e251
9
CHANGES
9
CHANGES
|
@ -5,6 +5,15 @@ What's New for OpenJPEG
|
||||||
! : changed
|
! : changed
|
||||||
+ : added
|
+ : 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
|
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] 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
|
* [antonin] added a definition in getopt.h and an initial value in convert.c
|
||||||
|
|
|
@ -37,32 +37,19 @@
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
#include "openjpeg.h"
|
#include "openjpeg.h"
|
||||||
#include "compat/getopt.h"
|
#include "getopt.h"
|
||||||
#include "convert.h"
|
#include "convert.h"
|
||||||
#include "index.h"
|
#include "index.h"
|
||||||
#include "dirent.h"
|
#include "dirent.h"
|
||||||
#include "org_openJpeg_OpenJPEGJavaEncoder.h"
|
#include "org_openJpeg_OpenJPEGJavaEncoder.h"
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifndef _WIN32
|
||||||
#define stricmp strcasecmp
|
#define stricmp strcasecmp
|
||||||
#define strnicmp strncasecmp
|
#define strnicmp strncasecmp
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
#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 CINEMA_24_CS 1302083 /*Codestream length for 24fps*/
|
#define CINEMA_24_CS 1302083 /*Codestream length for 24fps*/
|
||||||
#define CINEMA_48_CS 651041 /*Codestream length for 48fps*/
|
#define CINEMA_48_CS 651041 /*Codestream length for 48fps*/
|
||||||
#define COMP_24_CS 1041666 /*Maximum size per color component for 2K & 4K @ 24fps*/
|
#define COMP_24_CS 1041666 /*Maximum size per color component for 2K & 4K @ 24fps*/
|
||||||
|
|
|
@ -37,31 +37,17 @@
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
#include "openjpeg.h"
|
#include "openjpeg.h"
|
||||||
#include "compat/getopt.h"
|
#include "getopt.h"
|
||||||
#include "convert.h"
|
#include "convert.h"
|
||||||
#include "dirent.h"
|
#include "dirent.h"
|
||||||
#include "org_openJpeg_OpenJPEGJavaDecoder.h"
|
#include "org_openJpeg_OpenJPEGJavaDecoder.h"
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifndef _WIN32
|
||||||
#define stricmp strcasecmp
|
#define stricmp strcasecmp
|
||||||
#define strnicmp strncasecmp
|
#define strnicmp strncasecmp
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
#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
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
typedef struct callback_variables {
|
typedef struct callback_variables {
|
||||||
JNIEnv *env;
|
JNIEnv *env;
|
||||||
|
|
|
@ -13,7 +13,6 @@ SRCS = ./libopenjpeg/bio.c ./libopenjpeg/cio.c ./libopenjpeg/dwt.c \
|
||||||
./libopenjpeg/mct.c ./libopenjpeg/mqc.c ./libopenjpeg/openjpeg.c \
|
./libopenjpeg/mct.c ./libopenjpeg/mqc.c ./libopenjpeg/openjpeg.c \
|
||||||
./libopenjpeg/pi.c ./libopenjpeg/raw.c ./libopenjpeg/t1.c \
|
./libopenjpeg/pi.c ./libopenjpeg/raw.c ./libopenjpeg/t1.c \
|
||||||
./libopenjpeg/t2.c ./libopenjpeg/tcd.c ./libopenjpeg/tgt.c \
|
./libopenjpeg/t2.c ./libopenjpeg/tcd.c ./libopenjpeg/tgt.c \
|
||||||
./libopenjpeg/opj_convert.c
|
|
||||||
|
|
||||||
INCLS = ./libopenjpeg/bio.h ./libopenjpeg/cio.h ./libopenjpeg/dwt.h \
|
INCLS = ./libopenjpeg/bio.h ./libopenjpeg/cio.h ./libopenjpeg/dwt.h \
|
||||||
./libopenjpeg/event.h ./libopenjpeg/fix.h ./libopenjpeg/image.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/mqc.h ./libopenjpeg/openjpeg.h ./libopenjpeg/pi.h \
|
||||||
./libopenjpeg/raw.h ./libopenjpeg/t1.h ./libopenjpeg/t2.h \
|
./libopenjpeg/raw.h ./libopenjpeg/t1.h ./libopenjpeg/t2.h \
|
||||||
./libopenjpeg/tcd.h ./libopenjpeg/tgt.h ./libopenjpeg/opj_malloc.h \
|
./libopenjpeg/tcd.h ./libopenjpeg/tgt.h ./libopenjpeg/opj_malloc.h \
|
||||||
./libopenjpeg/opj_convert.h ./libopenjpeg/opj_includes.h
|
./libopenjpeg/opj_includes.h
|
||||||
|
|
||||||
AR = ar
|
|
||||||
|
|
||||||
INSTALL_LIBDIR = $(prefix)/lib
|
INSTALL_LIBDIR = $(prefix)/lib
|
||||||
headerdir = openjpeg-$(MAJOR).$(MINOR)
|
headerdir = openjpeg-$(MAJOR).$(MINOR)
|
||||||
|
|
|
@ -26,9 +26,9 @@
|
||||||
* POSSIBILITY OF SUCH DAMAGE.
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef _WIN32
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#endif
|
#endif /* _WIN32 */
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "md5.h"
|
#include "md5.h"
|
||||||
|
@ -37,7 +37,7 @@
|
||||||
|
|
||||||
int doprocess(char programme[4096],char command_line[4096]) {
|
int doprocess(char programme[4096],char command_line[4096]) {
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef _WIN32
|
||||||
|
|
||||||
int exit=STILL_ACTIVE;
|
int exit=STILL_ACTIVE;
|
||||||
STARTUPINFO siStartupInfo;
|
STARTUPINFO siStartupInfo;
|
||||||
|
@ -67,12 +67,12 @@ int doprocess(char programme[4096],char command_line[4096]) {
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
#else // #ifndef WIN32
|
#else /* !_WIN32 */
|
||||||
printf("\n%s\n", command_line);
|
printf("\n%s\n", command_line);
|
||||||
system(command_line);
|
system(command_line);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
#endif
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,16 +1,17 @@
|
||||||
# Build the demo app, small examples
|
# Build the demo app, small examples
|
||||||
|
|
||||||
# First thing define the common source:
|
# First thing define the common source:
|
||||||
SET(common_SRCS
|
SET(common_SRCS
|
||||||
convert.c
|
convert.c
|
||||||
index.c
|
index.c
|
||||||
|
${PROJECT_SOURCE_DIR}/common/color.c
|
||||||
)
|
)
|
||||||
|
|
||||||
# If not getopt was found then add it to the lib:
|
# If not getopt was found then add it to the lib:
|
||||||
IF(DONT_HAVE_GETOPT)
|
IF(DONT_HAVE_GETOPT)
|
||||||
SET(common_SRCS
|
SET(common_SRCS
|
||||||
${common_SRCS}
|
${common_SRCS}
|
||||||
compat/getopt.c
|
${PROJECT_SOURCE_DIR}/common/getopt.c
|
||||||
)
|
)
|
||||||
ENDIF(DONT_HAVE_GETOPT)
|
ENDIF(DONT_HAVE_GETOPT)
|
||||||
|
|
||||||
|
@ -18,6 +19,7 @@ ENDIF(DONT_HAVE_GETOPT)
|
||||||
INCLUDE_DIRECTORIES(
|
INCLUDE_DIRECTORIES(
|
||||||
${OPENJPEG_SOURCE_DIR}/libopenjpeg
|
${OPENJPEG_SOURCE_DIR}/libopenjpeg
|
||||||
${LCMS_INCLUDE_DIR}
|
${LCMS_INCLUDE_DIR}
|
||||||
|
${OPENJPEG_SOURCE_DIR}/common
|
||||||
)
|
)
|
||||||
IF(PNG_FOUND)
|
IF(PNG_FOUND)
|
||||||
INCLUDE_DIRECTORIES(${PNG_INCLUDE_DIR})
|
INCLUDE_DIRECTORIES(${PNG_INCLUDE_DIR})
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
COMPILERFLAGS = -Wall -static
|
COMPILERFLAGS = -Wall -static
|
||||||
USERLIBS = -lm
|
USERLIBS = -lm
|
||||||
INCLUDES = -I.. -I. -I../libopenjpeg
|
INCLUDES = -I.. -I. -I../libopenjpeg -I../common
|
||||||
|
|
||||||
if with_libtiff
|
if with_libtiff
|
||||||
INCLUDES += @tiffincludes@
|
INCLUDES += @tiffincludes@
|
||||||
|
@ -27,11 +27,12 @@ bin_PROGRAMS = j2k_to_image image_to_j2k j2k_dump
|
||||||
CFLAGS = $(COMPILERFLAGS) $(INCLUDES)
|
CFLAGS = $(COMPILERFLAGS) $(INCLUDES)
|
||||||
LDADD = $(USERLIBS) ../libopenjpeg/libopenjpeg.la
|
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)
|
REPBIN=$(bin_PROGRAMS)
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ CFLAGS = -Wall
|
||||||
|
|
||||||
INSTALL_BIN = $(prefix)/bin
|
INSTALL_BIN = $(prefix)/bin
|
||||||
|
|
||||||
INCLUDE = -I.. -I. -I../libopenjpeg
|
INCLUDE = -I.. -I. -I../libopenjpeg -I../common
|
||||||
USERLIBS = -lm
|
USERLIBS = -lm
|
||||||
|
|
||||||
ifeq ($(WITH_TIFF),yes)
|
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
|
install j2k_to_image image_to_j2k j2k_dump ../bin
|
||||||
|
|
||||||
j2k_to_image: j2k_to_image.c ../libopenjpeg.a
|
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)
|
-o j2k_to_image ../libopenjpeg.a $(USERLIBS)
|
||||||
|
|
||||||
image_to_j2k: image_to_j2k.c ../libopenjpeg.a
|
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)
|
-o image_to_j2k ../libopenjpeg.a $(USERLIBS)
|
||||||
|
|
||||||
j2k_dump: j2k_dump.c ../libopenjpeg.a
|
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)
|
-o j2k_dump ../libopenjpeg.a $(USERLIBS)
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
|
|
@ -36,19 +36,19 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#ifdef HAVE_LIBTIFF
|
#ifdef HAVE_LIBTIFF
|
||||||
#ifdef WIN32
|
#ifdef _WIN32
|
||||||
#include "../libs/libtiff/tiffio.h"
|
#include "../libs/libtiff/tiffio.h"
|
||||||
#else
|
#else
|
||||||
#include <tiffio.h>
|
#include <tiffio.h>
|
||||||
#endif /* WIN32 */
|
#endif /* _WIN32 */
|
||||||
#endif /* HAVE_LIBTIFF */
|
#endif /* HAVE_LIBTIFF */
|
||||||
|
|
||||||
#ifdef HAVE_LIBPNG
|
#ifdef HAVE_LIBPNG
|
||||||
#ifdef WIN32
|
#ifdef _WIN32
|
||||||
#include "../libs/png/png.h"
|
#include "../libs/png/png.h"
|
||||||
#else
|
#else
|
||||||
#include <png.h>
|
#include <png.h>
|
||||||
#endif /* WIN32 */
|
#endif /* _WIN32 */
|
||||||
#endif /* HAVE_LIBPNG */
|
#endif /* HAVE_LIBPNG */
|
||||||
|
|
||||||
#include "../libopenjpeg/openjpeg.h"
|
#include "../libopenjpeg/openjpeg.h"
|
||||||
|
|
|
@ -35,38 +35,28 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
#include "opj_config.h"
|
#ifdef _WIN32
|
||||||
#include "openjpeg.h"
|
|
||||||
#include "compat/getopt.h"
|
|
||||||
#include "convert.h"
|
|
||||||
#ifdef WIN32
|
|
||||||
#include "windirent.h"
|
#include "windirent.h"
|
||||||
#else
|
#else
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
#endif /* WIN32 */
|
#endif /* _WIN32 */
|
||||||
#include "index.h"
|
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifdef _WIN32
|
||||||
|
#include <windows.h>
|
||||||
|
#else
|
||||||
#include <strings.h>
|
#include <strings.h>
|
||||||
#define _stricmp strcasecmp
|
#define _stricmp strcasecmp
|
||||||
#define _strnicmp strncasecmp
|
#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
|
#include "format_defs.h"
|
||||||
#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_24_CS 1302083 /*Codestream length for 24fps*/
|
||||||
#define CINEMA_48_CS 651041 /*Codestream length for 48fps*/
|
#define CINEMA_48_CS 651041 /*Codestream length for 48fps*/
|
||||||
#define COMP_24_CS 1041666 /*Maximum size per color component for 2K & 4K @ 24fps*/
|
#define COMP_24_CS 1041666 /*Maximum size per color component for 2K & 4K @ 24fps*/
|
||||||
|
|
|
@ -29,40 +29,29 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include "windirent.h"
|
||||||
|
#else
|
||||||
|
#include <dirent.h>
|
||||||
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <windows.h>
|
||||||
|
#else
|
||||||
|
#include <strings.h>
|
||||||
|
#define _stricmp strcasecmp
|
||||||
|
#define _strnicmp strncasecmp
|
||||||
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
#include "opj_config.h"
|
#include "opj_config.h"
|
||||||
#include "openjpeg.h"
|
#include "openjpeg.h"
|
||||||
#include "../libopenjpeg/j2k.h"
|
#include "../libopenjpeg/j2k.h"
|
||||||
#include "../libopenjpeg/jp2.h"
|
#include "../libopenjpeg/jp2.h"
|
||||||
#include "compat/getopt.h"
|
#include "getopt.h"
|
||||||
#include "convert.h"
|
#include "convert.h"
|
||||||
#ifdef WIN32
|
|
||||||
#include "windirent.h"
|
|
||||||
#else
|
|
||||||
#include <dirent.h>
|
|
||||||
#endif /* WIN32 */
|
|
||||||
#include "index.h"
|
#include "index.h"
|
||||||
|
|
||||||
#ifndef WIN32
|
#include "format_defs.h"
|
||||||
#include <strings.h>
|
|
||||||
#define _stricmp strcasecmp
|
|
||||||
#define _strnicmp strncasecmp
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
#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
|
|
||||||
/* ----------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
typedef struct dircnt{
|
typedef struct dircnt{
|
||||||
/** Buffer for holding images read from Directory*/
|
/** Buffer for holding images read from Directory*/
|
||||||
|
@ -477,6 +466,10 @@ int main(int argc, char *argv[])
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
/* dump image */
|
/* dump image */
|
||||||
|
if(image->icc_profile_buf)
|
||||||
|
{
|
||||||
|
free(image->icc_profile_buf); image->icc_profile_buf = NULL;
|
||||||
|
}
|
||||||
j2k_dump_image(stdout, image);
|
j2k_dump_image(stdout, image);
|
||||||
|
|
||||||
/* dump cp */
|
/* dump cp */
|
||||||
|
|
|
@ -35,38 +35,35 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
#include "opj_config.h"
|
#ifdef _WIN32
|
||||||
#include "openjpeg.h"
|
|
||||||
#include "compat/getopt.h"
|
|
||||||
#include "convert.h"
|
|
||||||
#ifdef WIN32
|
|
||||||
#include "windirent.h"
|
#include "windirent.h"
|
||||||
#else
|
#else
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
#endif /* WIN32 */
|
#endif /* _WIN32 */
|
||||||
#include "index.h"
|
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifdef _WIN32
|
||||||
|
#include <windows.h>
|
||||||
|
#else
|
||||||
#include <strings.h>
|
#include <strings.h>
|
||||||
#define _stricmp strcasecmp
|
#define _stricmp strcasecmp
|
||||||
#define _strnicmp strncasecmp
|
#define _strnicmp strncasecmp
|
||||||
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
|
#include "opj_config.h"
|
||||||
|
#include "openjpeg.h"
|
||||||
|
#include "getopt.h"
|
||||||
|
#include "convert.h"
|
||||||
|
#include "index.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_LIBLCMS2
|
||||||
|
#include <lcms2.h>
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_LIBLCMS1
|
||||||
|
#include <lcms.h>
|
||||||
|
#endif
|
||||||
|
#include "color.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
|
|
||||||
/* ----------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
typedef struct dircnt{
|
typedef struct dircnt{
|
||||||
/** Buffer for holding images read from Directory*/
|
/** Buffer for holding images read from Directory*/
|
||||||
|
@ -740,6 +737,21 @@ int main(int argc, char **argv) {
|
||||||
free(src);
|
free(src);
|
||||||
src = NULL;
|
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 */
|
/* create output image */
|
||||||
/* ------------------- */
|
/* ------------------- */
|
||||||
switch (parameters.cod_format) {
|
switch (parameters.cod_format) {
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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
|
|
@ -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_ */
|
21
config.nix
21
config.nix
|
@ -9,6 +9,7 @@ JP3D_BUILD = 0
|
||||||
prefix=/usr/local
|
prefix=/usr/local
|
||||||
CC = gcc
|
CC = gcc
|
||||||
LDCONFIG = /sbin/ldconfig
|
LDCONFIG = /sbin/ldconfig
|
||||||
|
AR = ar
|
||||||
#
|
#
|
||||||
#Set this to no if you do no want to compile/install shared libs.
|
#Set this to no if you do no want to compile/install shared libs.
|
||||||
ENABLE_SHARED = yes
|
ENABLE_SHARED = yes
|
||||||
|
@ -19,15 +20,15 @@ ENABLE_SHARED = yes
|
||||||
#==== HAVE YOU CREATED opj_config.h FROM opj_config.h.in.user ? ====
|
#==== HAVE YOU CREATED opj_config.h FROM opj_config.h.in.user ? ====
|
||||||
#==== SHOULD BE IN SYNC WITH opj_config.h ====
|
#==== SHOULD BE IN SYNC WITH opj_config.h ====
|
||||||
WITH_LCMS1 = no
|
WITH_LCMS1 = no
|
||||||
WITH_LCMS2 = no
|
WITH_LCMS2 = yes
|
||||||
WITH_PNG = no
|
WITH_PNG = yes
|
||||||
WITH_TIFF = no
|
WITH_TIFF = yes
|
||||||
#
|
#
|
||||||
# Set to yes if you want compile/install
|
# Set to yes if you want compile/install
|
||||||
# jpwl libraries/binaries
|
# jpwl libraries/binaries
|
||||||
# jp3d libraries/binaries
|
# jp3d libraries/binaries
|
||||||
WITH_JPWL = no
|
WITH_JPWL = yes
|
||||||
WITH_JP3D = no
|
WITH_JP3D = yes
|
||||||
#
|
#
|
||||||
#Set to yes if you have doxygen installed
|
#Set to yes if you have doxygen installed
|
||||||
#Set to no if doxygen is missing.
|
#Set to no if doxygen is missing.
|
||||||
|
@ -39,7 +40,9 @@ LCMS2_INCLUDE = -I/usr/include
|
||||||
PNG_INCLUDE = -I/usr/include
|
PNG_INCLUDE = -I/usr/include
|
||||||
TIFF_INCLUDE = -I/usr/include
|
TIFF_INCLUDE = -I/usr/include
|
||||||
|
|
||||||
LCMS1_LIB = -L/usr/lib -llcms -lm
|
LCMS1_LIB = -L/usr/lib -llcms
|
||||||
LCMS2_LIB = -L/usr/lib -llcms2 -lm
|
LCMS2_LIB = -L/usr/lib -llcms2
|
||||||
PNG_LIB = -L/usr/lib -lpng -lz -lm
|
PNG_LIB = -L/usr/lib -lpng -lz
|
||||||
TIFF_LIB = -L/usr/lib -ltiff -lm
|
#tiff with jpeg support?
|
||||||
|
JPEG_LIB = -ljpeg
|
||||||
|
TIFF_LIB = -L/usr/lib -ltiff $(JPEG_LIB)
|
||||||
|
|
|
@ -28,11 +28,13 @@
|
||||||
|
|
||||||
#include "fix.h"
|
#include "fix.h"
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef _WIN32
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
#define int64 __int64
|
#define int64 __int64
|
||||||
#else
|
#else
|
||||||
#define int64 long long
|
#define int64 long long
|
||||||
#endif
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Multiply two fixed-precision rational numbers.
|
/// Multiply two fixed-precision rational numbers.
|
||||||
|
|
|
@ -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>
|
#include <windows.h>
|
||||||
|
|
||||||
BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
|
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;
|
return TRUE;
|
||||||
}
|
}
|
||||||
#endif
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
|
|
||||||
#define VERSION "0.0.8"
|
#define VERSION "0.0.8"
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef _WIN32
|
||||||
#ifdef LIBJ2K_EXPORTS
|
#ifdef LIBJ2K_EXPORTS
|
||||||
#define LIBJ2K_API __declspec(dllexport)
|
#define LIBJ2K_API __declspec(dllexport)
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -21,8 +21,6 @@ INCLS = ./libjp3dvm/t1_3d.h ./libjp3dvm/bio.h ./libjp3dvm/cio.h \
|
||||||
|
|
||||||
INCLUDE = -I.. -Ilibjp3dvm
|
INCLUDE = -I.. -Ilibjp3dvm
|
||||||
|
|
||||||
AR = ar
|
|
||||||
|
|
||||||
INSTALL_LIBDIR = $(prefix)/lib
|
INSTALL_LIBDIR = $(prefix)/lib
|
||||||
headerdir = openjpeg3d-$(JP3D_MAJOR).$(JP3D_MINOR)
|
headerdir = openjpeg3d-$(JP3D_MAJOR).$(JP3D_MINOR)
|
||||||
INSTALL_INCLUDE = $(prefix)/include/$(headerdir)
|
INSTALL_INCLUDE = $(prefix)/include/$(headerdir)
|
||||||
|
|
|
@ -32,11 +32,11 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "../libjp3dvm/openjpeg.h"
|
#include "../libjp3dvm/openjpeg.h"
|
||||||
#ifdef WIN32
|
#ifdef _WIN32
|
||||||
#include "windirent.h"
|
#include "windirent.h"
|
||||||
#else
|
#else
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
#endif /* WIN32 */
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -37,10 +37,12 @@
|
||||||
#include "getopt.h"
|
#include "getopt.h"
|
||||||
#include "convert.h"
|
#include "convert.h"
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifdef _WIN32
|
||||||
|
#include <windows.h>
|
||||||
|
#else
|
||||||
#define stricmp strcasecmp
|
#define stricmp strcasecmp
|
||||||
#define strnicmp strncasecmp
|
#define strnicmp strncasecmp
|
||||||
#endif
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
static double calc_PSNR(opj_volume_t *original, opj_volume_t *decoded)
|
static double calc_PSNR(opj_volume_t *original, opj_volume_t *decoded)
|
||||||
|
|
|
@ -36,10 +36,12 @@
|
||||||
#include "getopt.h"
|
#include "getopt.h"
|
||||||
#include "convert.h"
|
#include "convert.h"
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifdef _WIN32
|
||||||
|
#include <windows.h>
|
||||||
|
#else
|
||||||
#define stricmp strcasecmp
|
#define stricmp strcasecmp
|
||||||
#define strnicmp strncasecmp
|
#define strnicmp strncasecmp
|
||||||
#endif
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
// Utility functions
|
// Utility functions
|
||||||
// ==========================================================
|
// ==========================================================
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifndef _WIN32
|
||||||
static char*
|
static char*
|
||||||
i2a(unsigned i, char *a, unsigned r) {
|
i2a(unsigned i, char *a, unsigned r) {
|
||||||
if (i/r > 0) a = i2a(i/r,a,r);
|
if (i/r > 0) a = i2a(i/r,a,r);
|
||||||
|
@ -57,7 +57,7 @@ _itoa(int i, char *a, int r) {
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // !WIN32
|
#endif // !_WIN32
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
|
|
@ -24,17 +24,17 @@
|
||||||
* POSSIBILITY OF SUCH DAMAGE.
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef _WIN32
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#else
|
#else
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
#include <sys/times.h>
|
#include <sys/times.h>
|
||||||
#endif /* WIN32 */
|
#endif /* _WIN32 */
|
||||||
#include "opj_includes.h"
|
#include "opj_includes.h"
|
||||||
|
|
||||||
double opj_clock() {
|
double opj_clock() {
|
||||||
#ifdef WIN32
|
#ifdef _WIN32
|
||||||
/* WIN32: use QueryPerformance (very accurate) */
|
/* WIN32: use QueryPerformance (very accurate) */
|
||||||
LARGE_INTEGER freq , t ;
|
LARGE_INTEGER freq , t ;
|
||||||
/* freq is the clock speed of the CPU */
|
/* freq is the clock speed of the CPU */
|
||||||
|
@ -54,7 +54,7 @@ double opj_clock() {
|
||||||
procTime = t.ru_utime.tv_sec + t.ru_stime.tv_sec;
|
procTime = t.ru_utime.tv_sec + t.ru_stime.tv_sec;
|
||||||
/* (2b) More precisely! Get the microseconds part ! */
|
/* (2b) More precisely! Get the microseconds part ! */
|
||||||
return ( procTime + (t.ru_utime.tv_usec + t.ru_stime.tv_usec) * 1e-6 ) ;
|
return ( procTime + (t.ru_utime.tv_usec + t.ru_stime.tv_usec) * 1e-6 ) ;
|
||||||
#endif
|
#endif /* _WIN32 */
|
||||||
}
|
}
|
||||||
|
|
||||||
void* opj_malloc( size_t size ) {
|
void* opj_malloc( size_t size ) {
|
||||||
|
|
|
@ -25,14 +25,14 @@
|
||||||
* POSSIBILITY OF SUCH DAMAGE.
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef _WIN32
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#endif /* WIN32 */
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
#include "opj_includes.h"
|
#include "opj_includes.h"
|
||||||
#define JP3D_VERSION "1.3.0"
|
#define JP3D_VERSION "1.3.0"
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
#ifdef WIN32
|
#ifdef _WIN32
|
||||||
#ifndef OPJ_STATIC
|
#ifndef OPJ_STATIC
|
||||||
BOOL APIENTRY
|
BOOL APIENTRY
|
||||||
DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
|
DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
|
||||||
|
@ -49,7 +49,7 @@ DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
#endif /* OPJ_STATIC */
|
#endif /* OPJ_STATIC */
|
||||||
#endif /* WIN32 */
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,6 @@ SET(OPJ_SRCS
|
||||||
../libopenjpeg/t2.c
|
../libopenjpeg/t2.c
|
||||||
../libopenjpeg/tcd.c
|
../libopenjpeg/tcd.c
|
||||||
../libopenjpeg/tgt.c
|
../libopenjpeg/tgt.c
|
||||||
../libopenjpeg/opj_convert.c
|
|
||||||
)
|
)
|
||||||
SET(JPWL_SRCS crc.c jpwl.c jpwl_lib.c rs.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)
|
IF(DONT_HAVE_GETOPT)
|
||||||
SET(OPJ_SRCS
|
SET(OPJ_SRCS
|
||||||
${OPJ_SRCS}
|
${OPJ_SRCS}
|
||||||
../codec/compat/getopt.c
|
../common/getopt.c
|
||||||
)
|
)
|
||||||
ENDIF(DONT_HAVE_GETOPT)
|
ENDIF(DONT_HAVE_GETOPT)
|
||||||
|
|
||||||
IF(LCMS_INCLUDE_DIR)
|
|
||||||
INCLUDE_DIRECTORIES( ${LCMS_INCLUDE_DIR} )
|
|
||||||
ENDIF(LCMS_INCLUDE_DIR)
|
|
||||||
|
|
||||||
# Build the library
|
# Build the library
|
||||||
IF(WIN32)
|
IF(WIN32)
|
||||||
IF(BUILD_SHARED_LIBS)
|
IF(BUILD_SHARED_LIBS)
|
||||||
|
@ -47,18 +42,22 @@ IF(WIN32)
|
||||||
ENDIF(WIN32)
|
ENDIF(WIN32)
|
||||||
ADD_LIBRARY(${OPENJPEG_LIBRARY_NAME}_JPWL ${JPWL_SRCS} ${OPJ_SRCS})
|
ADD_LIBRARY(${OPENJPEG_LIBRARY_NAME}_JPWL ${JPWL_SRCS} ${OPJ_SRCS})
|
||||||
SET_TARGET_PROPERTIES(${OPENJPEG_LIBRARY_NAME}_JPWL PROPERTIES ${OPENJPEG_LIBRARY_PROPERTIES})
|
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 library
|
||||||
INSTALL(TARGETS ${OPENJPEG_LIBRARY_NAME}_JPWL
|
INSTALL(TARGETS ${OPENJPEG_LIBRARY_NAME}_JPWL
|
||||||
DESTINATION ${OPENJPEG_INSTALL_LIB_DIR} COMPONENT Libraries
|
DESTINATION ${OPENJPEG_INSTALL_LIB_DIR} COMPONENT Libraries
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Build executables
|
||||||
|
|
||||||
INCLUDE_DIRECTORIES(
|
INCLUDE_DIRECTORIES(
|
||||||
${OPENJPEG_SOURCE_DIR}/libopenjpeg
|
${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)
|
IF(PNG_FOUND)
|
||||||
INCLUDE_DIRECTORIES(${PNG_INCLUDE_DIR})
|
INCLUDE_DIRECTORIES(${PNG_INCLUDE_DIR})
|
||||||
ENDIF(PNG_FOUND)
|
ENDIF(PNG_FOUND)
|
||||||
|
@ -68,9 +67,10 @@ ENDIF(TIFF_FOUND)
|
||||||
|
|
||||||
|
|
||||||
ADD_EXECUTABLE(JPWL_j2k_to_image
|
ADD_EXECUTABLE(JPWL_j2k_to_image
|
||||||
|
../codec/j2k_to_image.c
|
||||||
../codec/convert.c
|
../codec/convert.c
|
||||||
../codec/index.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})
|
TARGET_LINK_LIBRARIES(JPWL_j2k_to_image ${OPENJPEG_LIBRARY_NAME}_JPWL ${LCMS_LIB})
|
||||||
IF(PNG_FOUND)
|
IF(PNG_FOUND)
|
||||||
|
|
|
@ -17,7 +17,7 @@ SRCS = ../libopenjpeg/bio.c ../libopenjpeg/cio.c ../libopenjpeg/dwt.c \
|
||||||
../libopenjpeg/mct.c ../libopenjpeg/mqc.c ../libopenjpeg/openjpeg.c \
|
../libopenjpeg/mct.c ../libopenjpeg/mqc.c ../libopenjpeg/openjpeg.c \
|
||||||
../libopenjpeg/pi.c ../libopenjpeg/raw.c ../libopenjpeg/t1.c \
|
../libopenjpeg/pi.c ../libopenjpeg/raw.c ../libopenjpeg/t1.c \
|
||||||
../libopenjpeg/t2.c ../libopenjpeg/tcd.c ../libopenjpeg/tgt.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 \
|
INCLS = ../libopenjpeg/bio.h ../libopenjpeg/cio.h ../libopenjpeg/dwt.h \
|
||||||
../libopenjpeg/event.h ../libopenjpeg/fix.h ../libopenjpeg/image.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/mqc.h ../libopenjpeg/openjpeg.h ../libopenjpeg/pi.h \
|
||||||
../libopenjpeg/raw.h ../libopenjpeg/t1.h ../libopenjpeg/t2.h \
|
../libopenjpeg/raw.h ../libopenjpeg/t1.h ../libopenjpeg/t2.h \
|
||||||
../libopenjpeg/tcd.h ../libopenjpeg/tgt.h ../libopenjpeg/opj_malloc.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)
|
$(JPWL_INCLS)
|
||||||
|
|
||||||
libopenjpeg_JPWL_la_SOURCES = $(SRCS) $(INCLS)
|
libopenjpeg_JPWL_la_SOURCES = $(SRCS) $(INCLS)
|
||||||
|
@ -40,8 +40,8 @@ dos2unix:
|
||||||
|
|
||||||
COMPILERFLAGS = -Wall -ffast-math -std=c99
|
COMPILERFLAGS = -Wall -ffast-math -std=c99
|
||||||
|
|
||||||
USERLIBS = -lm
|
USERLIBS =
|
||||||
INCLUDES = -I.. -I. -I../libopenjpeg
|
INCLUDES = -I.. -I. -I../libopenjpeg -I../common
|
||||||
|
|
||||||
if with_libtiff
|
if with_libtiff
|
||||||
INCLUDES += @tiffincludes@
|
INCLUDES += @tiffincludes@
|
||||||
|
@ -63,6 +63,8 @@ INCLUDES += @lcms1includes@
|
||||||
USERLIBS += @lcms1libs@
|
USERLIBS += @lcms1libs@
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
USERLIBS += -lm
|
||||||
|
|
||||||
bin_PROGRAMS = JPWL_j2k_to_image JPWL_image_to_j2k
|
bin_PROGRAMS = JPWL_j2k_to_image JPWL_image_to_j2k
|
||||||
|
|
||||||
JPWL_j2k_to_image_CFLAGS = $(COMPILERFLAGS) $(INCLUDES) -DUSE_JPWL -static
|
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
|
CFLAGS = $(COMPILERFLAGS) $(INCLUDES) -DUSE_JPWL
|
||||||
LDADD = ./libopenjpeg_JPWL.la $(USERLIBS)
|
LDADD = ./libopenjpeg_JPWL.la $(USERLIBS)
|
||||||
|
|
||||||
JPWL_j2k_to_image_SOURCES = ../codec/compat/getopt.c ../codec/index.c \
|
JPWL_j2k_to_image_SOURCES = ../common/getopt.c ../codec/index.c \
|
||||||
../codec/convert.c ../codec/j2k_to_image.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
|
../codec/convert.c ../codec/image_to_j2k.c
|
||||||
|
|
||||||
REPBIN=$(bin_PROGRAMS)
|
REPBIN=$(bin_PROGRAMS)
|
||||||
|
|
|
@ -3,7 +3,7 @@ include ../config.nix
|
||||||
|
|
||||||
TARGET = openjpeg_JPWL
|
TARGET = openjpeg_JPWL
|
||||||
COMPILERFLAGS = -Wall -ffast-math -std=c99 -fPIC
|
COMPILERFLAGS = -Wall -ffast-math -std=c99 -fPIC
|
||||||
USERLIBS = -lm
|
USERLIBS =
|
||||||
|
|
||||||
JPWL_SRCS = ./crc.c ./jpwl.c ./jpwl_lib.c ./rs.c
|
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/mct.c ../libopenjpeg/mqc.c ../libopenjpeg/openjpeg.c \
|
||||||
../libopenjpeg/pi.c ../libopenjpeg/raw.c ../libopenjpeg/t1.c \
|
../libopenjpeg/pi.c ../libopenjpeg/raw.c ../libopenjpeg/t1.c \
|
||||||
../libopenjpeg/t2.c ../libopenjpeg/tcd.c ../libopenjpeg/tgt.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 \
|
INCLS = ../libopenjpeg/bio.h ../libopenjpeg/cio.h ../libopenjpeg/dwt.h \
|
||||||
../libopenjpeg/event.h ../libopenjpeg/fix.h ../libopenjpeg/image.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/mqc.h ../libopenjpeg/openjpeg.h ../libopenjpeg/pi.h \
|
||||||
../libopenjpeg/raw.h ../libopenjpeg/t1.h ../libopenjpeg/t2.h \
|
../libopenjpeg/raw.h ../libopenjpeg/t1.h ../libopenjpeg/t2.h \
|
||||||
../libopenjpeg/tcd.h ../libopenjpeg/tgt.h ../libopenjpeg/opj_malloc.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
|
INCLUDE = -I.. -I. -I../libopenjpeg -I../common
|
||||||
|
|
||||||
AR = ar
|
|
||||||
|
|
||||||
INSTALL_LIBDIR = $(prefix)/lib
|
INSTALL_LIBDIR = $(prefix)/lib
|
||||||
INSTALL_BIN = $(prefix)/bin
|
INSTALL_BIN = $(prefix)/bin
|
||||||
|
@ -57,6 +55,8 @@ INCLUDE += $(LCMS1_INCLUDE)
|
||||||
USERLIBS += $(LCMS1_LIB)
|
USERLIBS += $(LCMS1_LIB)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
USERLIBS += -lm
|
||||||
|
|
||||||
LIBRARIES += $(USERLIBS)
|
LIBRARIES += $(USERLIBS)
|
||||||
|
|
||||||
MODULES = $(SRCS:.c=.o)
|
MODULES = $(SRCS:.c=.o)
|
||||||
|
@ -101,12 +101,12 @@ $(SHAREDLIB): $(MODULES)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
JPWL_j2k_to_image: ../codec/j2k_to_image.c
|
JPWL_j2k_to_image: ../codec/j2k_to_image.c
|
||||||
$(CC) $(CFLAGS) ../codec/compat/getopt.c ../codec/index.c \
|
$(CC) $(CFLAGS) ../common/getopt.c ../codec/index.c \
|
||||||
../codec/convert.c ../codec/j2k_to_image.c \
|
../codec/convert.c ../common/color.c ../codec/j2k_to_image.c \
|
||||||
-o JPWL_j2k_to_image ./libopenjpeg_JPWL.a $(USERLIBS)
|
-o JPWL_j2k_to_image ./libopenjpeg_JPWL.a $(USERLIBS)
|
||||||
|
|
||||||
JPWL_image_to_j2k: ../codec/image_to_j2k.c
|
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 \
|
../codec/convert.c ../codec/image_to_j2k.c \
|
||||||
-o JPWL_image_to_j2k ./libopenjpeg_JPWL.a $(USERLIBS)
|
-o JPWL_image_to_j2k ./libopenjpeg_JPWL.a $(USERLIBS)
|
||||||
|
|
||||||
|
|
|
@ -19,13 +19,8 @@ SET(OPENJPEG_SRCS
|
||||||
t2.c
|
t2.c
|
||||||
tcd.c
|
tcd.c
|
||||||
tgt.c
|
tgt.c
|
||||||
opj_convert.c
|
|
||||||
)
|
)
|
||||||
|
|
||||||
IF(LCMS_INCLUDE_DIR)
|
|
||||||
INCLUDE_DIRECTORIES( ${LCMS_INCLUDE_DIR} )
|
|
||||||
ENDIF(LCMS_INCLUDE_DIR)
|
|
||||||
|
|
||||||
# Build the library
|
# Build the library
|
||||||
IF(WIN32)
|
IF(WIN32)
|
||||||
IF(BUILD_SHARED_LIBS)
|
IF(BUILD_SHARED_LIBS)
|
||||||
|
@ -36,9 +31,6 @@ IF(WIN32)
|
||||||
ENDIF(WIN32)
|
ENDIF(WIN32)
|
||||||
ADD_LIBRARY(${OPENJPEG_LIBRARY_NAME} ${OPENJPEG_SRCS})
|
ADD_LIBRARY(${OPENJPEG_LIBRARY_NAME} ${OPENJPEG_SRCS})
|
||||||
SET_TARGET_PROPERTIES(${OPENJPEG_LIBRARY_NAME} PROPERTIES ${OPENJPEG_LIBRARY_PROPERTIES})
|
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 library
|
||||||
INSTALL(TARGETS ${OPENJPEG_LIBRARY_NAME}
|
INSTALL(TARGETS ${OPENJPEG_LIBRARY_NAME}
|
||||||
|
|
|
@ -13,11 +13,11 @@ libopenjpeg_la_LDFLAGS = -no-undefined \
|
||||||
libopenjpeg_la_LIBADD = @LDLIBS@
|
libopenjpeg_la_LIBADD = @LDLIBS@
|
||||||
|
|
||||||
SRCS = bio.c cio.c dwt.c event.c image.c j2k.c j2k_lib.c jp2.c jpt.c \
|
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 \
|
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 \
|
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)
|
libopenjpeg_la_SOURCES = $(SRCS) $(INCLS)
|
||||||
|
|
||||||
|
|
|
@ -28,15 +28,6 @@
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
* POSSIBILITY OF SUCH DAMAGE.
|
* 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"
|
#include "opj_includes.h"
|
||||||
|
|
||||||
/** @defgroup JP2 JP2 - JPEG-2000 file format reader/writer */
|
/** @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
|
Decode the structure of a JP2 file
|
||||||
@param jp2 JP2 handle
|
@param jp2 JP2 handle
|
||||||
@param cio Input buffer stream
|
@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
|
@return Returns true if successful, returns false otherwise
|
||||||
*/
|
*/
|
||||||
static bool jp2_read_struct(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);
|
||||||
/**
|
/**
|
||||||
Apply collected palette data
|
Apply collected palette data
|
||||||
@param ext Collector for profile, cdef and pclr data
|
@param color Collector for profile, cdef and pclr data
|
||||||
@param image
|
@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
|
Collect palette data
|
||||||
@param jp2 JP2 handle
|
@param jp2 JP2 handle
|
||||||
@param cio Input buffer stream
|
@param cio Input buffer stream
|
||||||
@param box
|
@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
|
@return Returns true if successful, returns false otherwise
|
||||||
*/
|
*/
|
||||||
static bool jp2_read_pclr(opj_jp2_t *jp2, opj_cio_t *cio,
|
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
|
Collect component mapping data
|
||||||
@param jp2 JP2 handle
|
@param jp2 JP2 handle
|
||||||
@param cio Input buffer stream
|
@param cio Input buffer stream
|
||||||
@param box
|
@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
|
@return Returns true if successful, returns false otherwise
|
||||||
*/
|
*/
|
||||||
static bool jp2_read_cmap(opj_jp2_t *jp2, opj_cio_t *cio,
|
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
|
Collect colour specification data
|
||||||
@param jp2 JP2 handle
|
@param jp2 JP2 handle
|
||||||
@param cio Input buffer stream
|
@param cio Input buffer stream
|
||||||
@param box
|
@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
|
@return Returns true if successful, returns false otherwise
|
||||||
*/
|
*/
|
||||||
static bool jp2_read_colr(opj_jp2_t *jp2, opj_cio_t *cio,
|
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);
|
||||||
/**
|
|
||||||
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);
|
|
||||||
/*@}*/
|
/*@}*/
|
||||||
|
|
||||||
/*@}*/
|
/*@}*/
|
||||||
|
@ -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);
|
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(color->jp2_pclr->channel_sign);
|
||||||
opj_free(ext->jp2_pclr->channel_size);
|
opj_free(color->jp2_pclr->channel_size);
|
||||||
opj_free(ext->jp2_pclr->entries);
|
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);
|
if(color->jp2_cdef->info) opj_free(color->jp2_cdef->info);
|
||||||
opj_free(ext->jp2_cdef);
|
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;
|
opj_image_comp_t *old_comps, *new_comps;
|
||||||
unsigned char *channel_size, *channel_sign;
|
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;
|
unsigned short i, nr_channels, cmp, pcol;
|
||||||
int k, top_k;
|
int k, top_k;
|
||||||
|
|
||||||
channel_size = ext->jp2_pclr->channel_size;
|
channel_size = color->jp2_pclr->channel_size;
|
||||||
channel_sign = ext->jp2_pclr->channel_sign;
|
channel_sign = color->jp2_pclr->channel_sign;
|
||||||
entries = ext->jp2_pclr->entries;
|
entries = color->jp2_pclr->entries;
|
||||||
cmap = ext->jp2_pclr->cmap;
|
cmap = color->jp2_pclr->cmap;
|
||||||
nr_channels = ext->jp2_pclr->nr_channels;
|
nr_channels = color->jp2_pclr->nr_channels;
|
||||||
|
|
||||||
old_comps = image->comps;
|
old_comps = image->comps;
|
||||||
new_comps = (opj_image_comp_t*)
|
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].prec = channel_size[i];
|
||||||
new_comps[pcol].sgnd = channel_sign[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)
|
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->comps = new_comps;
|
||||||
image->numcomps = nr_channels;
|
image->numcomps = nr_channels;
|
||||||
|
|
||||||
jp2_free_pclr(ext);
|
jp2_free_pclr(color);
|
||||||
|
|
||||||
}/* apply_pclr() */
|
}/* apply_pclr() */
|
||||||
|
|
||||||
static bool jp2_read_pclr(opj_jp2_t *jp2, opj_cio_t *cio,
|
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;
|
opj_jp2_pclr_t *jp2_pclr;
|
||||||
unsigned char *channel_size, *channel_sign;
|
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
|
/* Part 1, I.5.3.4: 'There shall be at most one Palette box inside
|
||||||
* a JP2 Header box' :
|
* a JP2 Header box' :
|
||||||
*/
|
*/
|
||||||
if(ext->jp2_pclr) return false;
|
if(color->jp2_pclr) return false;
|
||||||
|
|
||||||
nr_entries = cio_read(cio, 2); /* NE */
|
nr_entries = cio_read(cio, 2); /* NE */
|
||||||
nr_channels = cio_read(cio, 1);/* NPC */
|
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->nr_channels = nr_channels;
|
||||||
jp2_pclr->cmap = NULL;
|
jp2_pclr->cmap = NULL;
|
||||||
|
|
||||||
ext->jp2_pclr = jp2_pclr;
|
color->jp2_pclr = jp2_pclr;
|
||||||
|
|
||||||
for(i = 0; i < nr_channels; ++i)
|
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() */
|
}/* jp2_read_pclr() */
|
||||||
|
|
||||||
static bool jp2_read_cmap(opj_jp2_t *jp2, opj_cio_t *cio,
|
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;
|
opj_jp2_cmap_comp_t *cmap;
|
||||||
unsigned short i, nr_channels;
|
unsigned short i, nr_channels;
|
||||||
|
|
||||||
/* Need 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
|
/* Part 1, I.5.3.5: 'There shall be at most one Component Mapping box
|
||||||
* inside a JP2 Header 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*)
|
cmap = (opj_jp2_cmap_comp_t*)
|
||||||
opj_malloc(nr_channels * sizeof(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);
|
cmap[i].pcol = cio_read(cio, 1);
|
||||||
|
|
||||||
}
|
}
|
||||||
ext->jp2_pclr->cmap = cmap;
|
color->jp2_pclr->cmap = cmap;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}/* jp2_read_cmap() */
|
}/* 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;
|
opj_jp2_cdef_info_t *info;
|
||||||
int color_space;
|
int color_space;
|
||||||
unsigned short i, n, cn, typ, asoc, acn;
|
unsigned short i, n, cn, typ, asoc, acn;
|
||||||
|
|
||||||
color_space = image->color_space;
|
color_space = image->color_space;
|
||||||
info = ext->jp2_cdef->info;
|
info = color->jp2_cdef->info;
|
||||||
n = ext->jp2_cdef->n;
|
n = color->jp2_cdef->n;
|
||||||
|
|
||||||
for(i = 0; i < n; ++i)
|
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;
|
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() */
|
}/* jp2_apply_cdef() */
|
||||||
|
|
||||||
static bool jp2_read_cdef(opj_jp2_t *jp2, opj_cio_t *cio,
|
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;
|
opj_jp2_cdef_info_t *info;
|
||||||
unsigned short i, n;
|
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
|
/* Part 1, I.5.3.6: 'The shall be at most one Channel Definition box
|
||||||
* inside a JP2 Header 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 */
|
if((n = cio_read(cio, 2)) == 0) return false; /* szukw000: FIXME */
|
||||||
|
|
||||||
info = (opj_jp2_cdef_info_t*)
|
info = (opj_jp2_cdef_info_t*)
|
||||||
opj_malloc(n * sizeof(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));
|
color->jp2_cdef = (opj_jp2_cdef_t*)opj_malloc(sizeof(opj_jp2_cdef_t));
|
||||||
ext->jp2_cdef->info = info;
|
color->jp2_cdef->info = info;
|
||||||
ext->jp2_cdef->n = n;
|
color->jp2_cdef->n = n;
|
||||||
|
|
||||||
for(i = 0; i < n; ++i)
|
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() */
|
}/* jp2_read_cdef() */
|
||||||
|
|
||||||
static bool jp2_read_colr(opj_jp2_t *jp2, opj_cio_t *cio,
|
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;
|
int skip_len;
|
||||||
opj_common_ptr cinfo;
|
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
|
/* Part 1, I.5.3.3 : 'A conforming JP2 reader shall ignore all Colour
|
||||||
* Specification boxes after the first.'
|
* Specification boxes after the first.'
|
||||||
*/
|
*/
|
||||||
if(ext->jp2_has_colr) return false;
|
if(color->jp2_has_colr) return false;
|
||||||
|
|
||||||
cinfo = jp2->cinfo;
|
cinfo = jp2->cinfo;
|
||||||
|
|
||||||
|
@ -586,12 +571,12 @@ static bool jp2_read_colr(opj_jp2_t *jp2, opj_cio_t *cio,
|
||||||
unsigned char *start;
|
unsigned char *start;
|
||||||
|
|
||||||
start = cio_getbp(cio);
|
start = cio_getbp(cio);
|
||||||
ext->jp2_profile_buf = (unsigned char*)opj_malloc(skip_len);
|
color->icc_profile_buf = (unsigned char*)opj_malloc(skip_len);
|
||||||
ext->jp2_profile_len = skip_len;
|
color->icc_profile_len = skip_len;
|
||||||
|
|
||||||
cio_skip(cio, box->init_pos + box->length - cio_tell(cio));
|
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");
|
opj_event_msg(cinfo, EVT_ERROR, "Error with COLR Box\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
ext->jp2_has_colr = 1;
|
color->jp2_has_colr = 1;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}/* jp2_read_colr() */
|
}/* jp2_read_colr() */
|
||||||
|
|
||||||
#if defined(HAVE_LIBLCMS2) || defined(HAVE_LIBLCMS1)
|
bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, opj_jp2_color_t *color)
|
||||||
#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)
|
|
||||||
{
|
{
|
||||||
opj_jp2_box_t box;
|
opj_jp2_box_t box;
|
||||||
unsigned int jp2h_end;
|
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(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_seek(cio, box.init_pos + 8);
|
||||||
cio_skip(cio, box.length - 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(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_seek(cio, box.init_pos + 8);
|
||||||
cio_skip(cio, box.length - 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(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_seek(cio, box.init_pos + 8);
|
||||||
cio_skip(cio, box.length - 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(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_seek(cio, box.init_pos + 8);
|
||||||
cio_skip(cio, box.length - 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);
|
cio_seek(cio, jp2h_end);
|
||||||
|
|
||||||
/* Part 1, I.5.3.3 : 'must contain at least one' */
|
/* 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() */
|
}/* 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_common_ptr cinfo;
|
||||||
opj_image_t *image = NULL;
|
opj_image_t *image = NULL;
|
||||||
struct extension ext;
|
opj_jp2_color_t color;
|
||||||
|
|
||||||
if(!jp2 || !cio)
|
if(!jp2 || !cio)
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
memset(&ext, 0, sizeof(struct extension));
|
memset(&color, 0, sizeof(opj_jp2_color_t));
|
||||||
cinfo = jp2->cinfo;
|
cinfo = jp2->cinfo;
|
||||||
|
|
||||||
/* JP2 decoding */
|
/* 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");
|
opj_event_msg(cinfo, EVT_ERROR, "Failed to decode jp2 structure\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -924,7 +708,7 @@ opj_image_t* jp2_decode(opj_jp2_t *jp2, opj_cio_t *cio,
|
||||||
|
|
||||||
if(!image)
|
if(!image)
|
||||||
{
|
{
|
||||||
free_ext_data(&ext);
|
free_color_data(&color);
|
||||||
opj_event_msg(cinfo, EVT_ERROR, "Failed to decode J2K image\n");
|
opj_event_msg(cinfo, EVT_ERROR, "Failed to decode J2K image\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -939,29 +723,23 @@ opj_image_t* jp2_decode(opj_jp2_t *jp2, opj_cio_t *cio,
|
||||||
else
|
else
|
||||||
image->color_space = CLRSPC_UNKNOWN;
|
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 : */
|
/* Part 1, I.5.3.4: Either both or none : */
|
||||||
if( !ext.jp2_pclr->cmap)
|
if( !color.jp2_pclr->cmap)
|
||||||
jp2_free_pclr(&ext);
|
jp2_free_pclr(&color);
|
||||||
else
|
else
|
||||||
jp2_apply_pclr(&ext, image);
|
jp2_apply_pclr(&color, image);
|
||||||
}
|
}
|
||||||
if(ext.jp2_profile_buf)
|
if(color.icc_profile_buf)
|
||||||
{
|
{
|
||||||
#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
|
image->icc_profile_buf = color.icc_profile_buf;
|
||||||
jp2_apply_profile(&ext, image);
|
color.icc_profile_buf = NULL;
|
||||||
#endif
|
image->icc_profile_len = color.icc_profile_len;
|
||||||
opj_free(ext.jp2_profile_buf);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
if(image->color_space == CLRSPC_SYCC)
|
|
||||||
{
|
|
||||||
opj_convert_sycc_to_rgb(image);
|
|
||||||
}
|
}
|
||||||
return image;
|
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,
|
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))
|
if (!jp2_read_jp(jp2, cio))
|
||||||
return false;
|
return false;
|
||||||
if (!jp2_read_ftyp(jp2, cio))
|
if (!jp2_read_ftyp(jp2, cio))
|
||||||
return false;
|
return false;
|
||||||
if (!jp2_read_jp2h(jp2, cio, ext))
|
if (!jp2_read_jp2h(jp2, cio, color))
|
||||||
return false;
|
return false;
|
||||||
if (!jp2_read_jp2c(jp2, cio, &jp2->j2k_codestream_length, &jp2->j2k_codestream_offset))
|
if (!jp2_read_jp2c(jp2, cio, &jp2->j2k_codestream_length, &jp2->j2k_codestream_offset))
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -95,15 +95,15 @@ typedef struct opj_jp2_pclr
|
||||||
/**
|
/**
|
||||||
Collector for ICC profile, palette, component mapping, channel description
|
Collector for ICC profile, palette, component mapping, channel description
|
||||||
*/
|
*/
|
||||||
struct extension
|
typedef struct opj_jp2_color
|
||||||
{
|
{
|
||||||
unsigned char *jp2_profile_buf;
|
unsigned char *icc_profile_buf;
|
||||||
int jp2_profile_len;
|
int icc_profile_len;
|
||||||
|
|
||||||
opj_jp2_cdef_t *jp2_cdef;
|
opj_jp2_cdef_t *jp2_cdef;
|
||||||
opj_jp2_pclr_t *jp2_pclr;
|
opj_jp2_pclr_t *jp2_pclr;
|
||||||
unsigned char jp2_has_colr;
|
unsigned char jp2_has_colr;
|
||||||
};
|
} opj_jp2_color_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
JP2 component
|
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
|
@param ext Collector for profile, cdef and pclr data
|
||||||
@return Returns true if successful, returns false otherwise
|
@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
|
Creates a JP2 decompression structure
|
||||||
@param cinfo Codec context info
|
@param cinfo Codec context info
|
||||||
|
|
|
@ -554,6 +554,10 @@ typedef struct opj_image {
|
||||||
OPJ_COLOR_SPACE color_space;
|
OPJ_COLOR_SPACE color_space;
|
||||||
/** image components */
|
/** image components */
|
||||||
opj_image_comp_t *comps;
|
opj_image_comp_t *comps;
|
||||||
|
/** 'restricted' ICC profile */
|
||||||
|
unsigned char *icc_profile_buf;
|
||||||
|
/** size of ICC profile */
|
||||||
|
int icc_profile_len;
|
||||||
} opj_image_t;
|
} opj_image_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -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() */
|
|
|
@ -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_ */
|
|
|
@ -104,7 +104,6 @@ static INLINE long lrintf(float f){
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "opj_convert.h"
|
|
||||||
#include "j2k_lib.h"
|
#include "j2k_lib.h"
|
||||||
#include "opj_malloc.h"
|
#include "opj_malloc.h"
|
||||||
#include "event.h"
|
#include "event.h"
|
||||||
|
|
|
@ -3,13 +3,13 @@
|
||||||
# Headers file are located here:
|
# Headers file are located here:
|
||||||
INCLUDE_DIRECTORIES(
|
INCLUDE_DIRECTORIES(
|
||||||
${OPENJPEG_SOURCE_DIR}/libopenjpeg
|
${OPENJPEG_SOURCE_DIR}/libopenjpeg
|
||||||
${OPENJPEG_SOURCE_DIR}/codec/compat
|
${OPENJPEG_SOURCE_DIR}/common
|
||||||
${LCMS_INCLUDE_DIR}
|
${LCMS_INCLUDE_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
ADD_EXECUTABLE(frames_to_mj2
|
ADD_EXECUTABLE(frames_to_mj2
|
||||||
frames_to_mj2.c
|
frames_to_mj2.c
|
||||||
${PROJECT_SOURCE_DIR}/codec/compat/getopt.c
|
${PROJECT_SOURCE_DIR}/common/getopt.c
|
||||||
mj2_convert.c
|
mj2_convert.c
|
||||||
mj2.c
|
mj2.c
|
||||||
)
|
)
|
||||||
|
@ -20,9 +20,10 @@ ENDIF(UNIX)
|
||||||
|
|
||||||
ADD_EXECUTABLE(mj2_to_frames
|
ADD_EXECUTABLE(mj2_to_frames
|
||||||
mj2_to_frames.c
|
mj2_to_frames.c
|
||||||
${PROJECT_SOURCE_DIR}/codec/compat/getopt.c
|
${PROJECT_SOURCE_DIR}/common/getopt.c
|
||||||
mj2_convert.c
|
mj2_convert.c
|
||||||
mj2.c
|
mj2.c
|
||||||
|
${PROJECT_SOURCE_DIR}/common/color.c
|
||||||
)
|
)
|
||||||
TARGET_LINK_LIBRARIES(mj2_to_frames ${OPENJPEG_LIBRARY_NAME} ${LCMS_LIB})
|
TARGET_LINK_LIBRARIES(mj2_to_frames ${OPENJPEG_LIBRARY_NAME} ${LCMS_LIB})
|
||||||
IF(UNIX)
|
IF(UNIX)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
COMPILERFLAGS = -Wall -static
|
COMPILERFLAGS = -Wall -static
|
||||||
|
|
||||||
USERLIBS =
|
USERLIBS =
|
||||||
INCLUDES = -I.. -I. -I../libopenjpeg
|
INCLUDES = -I.. -I. -I../libopenjpeg -I../common
|
||||||
|
|
||||||
if with_liblcms2
|
if with_liblcms2
|
||||||
INCLUDES += @lcms2includes@
|
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)
|
CFLAGS = $(COMPILERFLAGS) $(INCLUDES)
|
||||||
LDADD = ../libopenjpeg/libopenjpeg.la $(USERLIBS)
|
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
|
frames_to_mj2.c
|
||||||
|
|
||||||
mj2_to_frames_SOURCES = ../codec/compat/getopt.c mj2_convert.c mj2.c \
|
mj2_to_frames_SOURCES = ../common/getopt.c mj2_convert.c mj2.c \
|
||||||
mj2_to_frames.c
|
../common/color.c mj2_to_frames.c
|
||||||
|
|
||||||
extract_j2k_from_mj2_SOURCES = mj2.c extract_j2k_from_mj2.c
|
extract_j2k_from_mj2_SOURCES = mj2.c extract_j2k_from_mj2.c
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ CFLAGS = -Wall
|
||||||
|
|
||||||
INSTALL_BIN = $(prefix)/bin
|
INSTALL_BIN = $(prefix)/bin
|
||||||
USERLIBS = -lm
|
USERLIBS = -lm
|
||||||
INCLUDE = -I.. -I. -I../libopenjpeg
|
INCLUDE = -I.. -I. -I../libopenjpeg -I../common
|
||||||
|
|
||||||
ifeq ($(WITH_LCMS2),yes)
|
ifeq ($(WITH_LCMS2),yes)
|
||||||
INCLUDE += $(LCMS2_INCLUDE)
|
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
|
wrap_j2k_in_mj2 ../bin
|
||||||
|
|
||||||
frames_to_mj2: frames_to_mj2.c ../libopenjpeg.a
|
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)
|
-o frames_to_mj2 ../libopenjpeg.a $(USERLIBS)
|
||||||
|
|
||||||
mj2_to_frames: mj2_to_frames.c ../libopenjpeg.a
|
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)
|
-o mj2_to_frames ../libopenjpeg.a $(USERLIBS)
|
||||||
|
|
||||||
extract_j2k_from_mj2: extract_j2k_from_mj2.c ../libopenjpeg.a
|
extract_j2k_from_mj2: extract_j2k_from_mj2.c ../libopenjpeg.a
|
||||||
|
|
|
@ -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 box;
|
||||||
mj2_box_t box2;
|
mj2_box_t box2;
|
||||||
int i;
|
int i;
|
||||||
struct extension ext;
|
opj_jp2_color_t color;
|
||||||
|
|
||||||
mj2_read_boxhdr(&box, cio);
|
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;
|
tk->or_fieldorder = 0;
|
||||||
|
|
||||||
cio_skip(cio,2); /* Pre-defined = -1 */
|
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");
|
opj_event_msg(tk->cinfo, EVT_ERROR, "Error reading JP2H Box\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "opj_config.h"
|
||||||
#include "openjpeg.h"
|
#include "openjpeg.h"
|
||||||
#include "../libopenjpeg/j2k_lib.h"
|
#include "../libopenjpeg/j2k_lib.h"
|
||||||
#include "../libopenjpeg/j2k.h"
|
#include "../libopenjpeg/j2k.h"
|
||||||
|
@ -36,6 +37,13 @@
|
||||||
#include "mj2.h"
|
#include "mj2.h"
|
||||||
#include "mj2_convert.h"
|
#include "mj2_convert.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_LIBLCMS2
|
||||||
|
#include <lcms2.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_LIBLCMS1
|
||||||
|
#include <lcms.h>
|
||||||
|
#endif
|
||||||
|
#include "color.h"
|
||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -169,6 +177,23 @@ int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
img = opj_decode(dinfo, cio); // Decode J2K to image
|
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)
|
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->comps[0].dx == img->comps[2].dx / 2 ) && (img->comps[0].dx == 1))
|
||||||
|| (img->numcomps == 1)) {
|
|| (img->numcomps == 1)) {
|
||||||
|
|
|
@ -16,7 +16,7 @@ can be bound by the Open JPEG open-source license and disclaimer, expressed else
|
||||||
|
|
||||||
#include "mj2_to_metadata.h"
|
#include "mj2_to_metadata.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "compat/getopt.h"
|
#include "getopt.h"
|
||||||
|
|
||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue