Compare commits
43 Commits
version.1.
...
version.1.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9586bc669c | ||
|
|
78dc93512b | ||
|
|
6778ef6a25 | ||
|
|
20eb15b760 | ||
|
|
8c71728242 | ||
|
|
4140dfdea8 | ||
|
|
259f629a46 | ||
|
|
c302efcf86 | ||
|
|
e0b5b08f9a | ||
|
|
dac95eff3a | ||
|
|
4f4de7070e | ||
|
|
78d1820881 | ||
|
|
de73cfeec1 | ||
|
|
49044ae2a8 | ||
|
|
6e0162a8a6 | ||
|
|
910af7edec | ||
|
|
69cd4f9211 | ||
|
|
6fc2b56847 | ||
|
|
773bd89130 | ||
|
|
5d356d6fcb | ||
|
|
a2f90ab2cb | ||
|
|
a05a9aa4ed | ||
|
|
af2be2d456 | ||
|
|
96dba34ddc | ||
|
|
6aad1208b2 | ||
|
|
d2be8c5d21 | ||
|
|
b42f76cb7f | ||
|
|
07163be7ed | ||
|
|
4e672cc1e9 | ||
|
|
ced9a50367 | ||
|
|
a1683bd7c2 | ||
|
|
f968a70e22 | ||
|
|
2fe6bac6eb | ||
|
|
15243144c4 | ||
|
|
c0c69d1c36 | ||
|
|
d9d62a77ee | ||
|
|
15488c94d2 | ||
|
|
75175b715c | ||
|
|
46831582b2 | ||
|
|
e55d5e29e0 | ||
|
|
c02f145cd1 | ||
|
|
6280b5ad8d | ||
|
|
7720188fa7 |
198
CHANGES
Normal file
198
CHANGES
Normal file
@@ -0,0 +1,198 @@
|
||||
2012-10-01 Mathieu Malaterre
|
||||
|
||||
* [r2028] CMakeLists.txt: [1.5] Start opj 1.5.2
|
||||
* [r2029] libopenjpeg/jp2.c: [1.5] jp2_read_boxhdr() can trigger
|
||||
random pointer memory access
|
||||
|
||||
Fixes issue 155
|
||||
|
||||
2012-10-02 Mathieu Malaterre
|
||||
|
||||
* [r2031] libopenjpeg/Makefile.am, libopenjpeg/jpwl/Makefile.am:
|
||||
[1.5] int main() in t1_generate_luts.c breaks mplayer
|
||||
|
||||
Fixes issue 152
|
||||
* [r2032] libopenjpeg/j2k.c: [1.5] division by zero in j2k_read_siz
|
||||
|
||||
Fixes issue 169
|
||||
* [r2033] libopenjpeg/j2k.c: [1.5] missing range check in
|
||||
j2k_read_coc et al.
|
||||
|
||||
Fixes issue 166
|
||||
* [r2035] libopenjpeg/CMakeLists.txt: [1.5] Build small internal
|
||||
tools to generate t1_luts.h
|
||||
|
||||
2012-10-22 Mathieu Malaterre
|
||||
|
||||
* [r2107] CMakeLists.txt, applications/JavaOpenJPEG/CMakeLists.txt:
|
||||
[1.5] Fix Java binding issues.
|
||||
|
||||
Properly link to math lib on UNIX
|
||||
Make JNI install location a user configuration
|
||||
Remove SONAME property from the java module
|
||||
|
||||
2012-12-07 Rex Dieter
|
||||
|
||||
* [r2260] doc/Doxyfile.dox, doc/Doxyfile.dox.cmake.in: backport
|
||||
r2259
|
||||
|
||||
Doxyfile: HTML_TIMESTAMP = NO
|
||||
|
||||
helps when comparing the output of multiple runs,
|
||||
and distros will appreciate avoiding multilib conflicts.
|
||||
|
||||
2012-12-18 Mickaël Savinaud
|
||||
|
||||
* [r2265] applications/codec/convert.c: [1.5] improve the bmp read
|
||||
function for RGB8 case (thanks Winfried). Update issue 203
|
||||
|
||||
2013-02-27 Mathieu Malaterre
|
||||
|
||||
* [r2299] libopenjpeg/opj_includes.h: [1.5] Rework #ifdef checks.
|
||||
We should check for _M_IX86 instead of not(_M_X64). Thanks to
|
||||
Misha Ulyutin for report on ML
|
||||
|
||||
2013-03-14 Mickaël Savinaud
|
||||
|
||||
* [r2305] configure.ac: [b1.5.x] update the micro version into the
|
||||
configure file (thanks to winfried)
|
||||
|
||||
2013-07-11 Antonin Descampe
|
||||
|
||||
* [r2345] tests/conformance/CMakeLists.txt: tests : reactivated
|
||||
conformance tests in openjpeg 1.5 branch to enable comparison
|
||||
with trunk
|
||||
|
||||
2013-09-26 Mathieu Malaterre
|
||||
|
||||
* [r2346] libopenjpeg/image.c: [1.5] Import patch suggested in bug
|
||||
#241
|
||||
|
||||
2014-02-24 Mathieu Malaterre
|
||||
|
||||
* [r2390] libopenjpeg/bio.c: [1.5] Remove some simple warnings
|
||||
* [r2391] CMake/CTestCustom.cmake.in: [1.5] Do not report warning
|
||||
on third party lib
|
||||
|
||||
2014-02-25 Mathieu Malaterre
|
||||
|
||||
* [r2420] tests/nonregression/CMakeLists.txt,
|
||||
tests/nonregression/checkmd5refs.cmake,
|
||||
tests/nonregression/md5refs.txt,
|
||||
tests/nonregression/test_suite.ctest.in: [1.5] Import md5 checker
|
||||
from trunk back onto 1.5 branch
|
||||
* [r2423] libopenjpeg/j2k.c: [1.5] Remove addition from r1702 this
|
||||
introduced a regression as seen in issue 205
|
||||
|
||||
Fixes issue 205
|
||||
|
||||
2014-02-26 Mathieu Malaterre
|
||||
|
||||
* [r2437] tests/CMakeLists.txt, tests/conformance/CMakeLists.txt,
|
||||
tests/nonregression/CMakeLists.txt, tests/unit/CMakeLists.txt:
|
||||
[1.5] Use new add_test signature to handle cross compilation and
|
||||
execution using wine
|
||||
* [r2438] applications/codec/convert.c,
|
||||
applications/codec/image_to_j2k.c, applications/codec/j2k_dump.c,
|
||||
applications/codec/j2k_to_image.c, libopenjpeg/jp2.c,
|
||||
libopenjpeg/tcd.c: [1.5] Import first patch (fixes.patch) from
|
||||
issue 249 to fix leaks on error condition.
|
||||
|
||||
Update issue 249
|
||||
* [r2439] applications/codec/image_to_j2k.c,
|
||||
applications/codec/j2k_to_image.c: [1.5] Declare functions static
|
||||
to track unused ones.
|
||||
|
||||
2014-03-04 Mathieu Malaterre
|
||||
|
||||
* [r2564] CMakeLists.txt: [1.5] Use improved find_path syntax to
|
||||
help cross-compilation setup find openjpeg data root
|
||||
|
||||
2014-03-12 Mathieu Malaterre
|
||||
|
||||
* [r2696] applications/codec/convert.c, tests/unit/testempty2.c:
|
||||
[1.5] Fix remainings warnings on 1.5 branch
|
||||
* [r2697] applications/jpip/libopenjpip/msgqueue_manager.c: [1.5]
|
||||
Prevent buffer overflow in openjpip code
|
||||
|
||||
2014-03-17 Mathieu Malaterre
|
||||
|
||||
* [r2750] applications/common/opj_getopt.c: [1.5] Update BSD-4
|
||||
copyright into a BSD-3 copyright
|
||||
Update issue 300
|
||||
* [r2752] libopenjpeg/jp2.c, libopenjpeg/t1_generate_luts.c: [1.5]
|
||||
Remove simple warning about C++ style comments
|
||||
* [r2753] applications/codec/convert.c,
|
||||
applications/common/color.c, libopenjpeg/j2k.c,
|
||||
libopenjpeg/jp2.c, libopenjpeg/t1_generate_luts.c,
|
||||
libopenjpeg/tcd.c: [1.5] Remove another set of simple warnings
|
||||
|
||||
2014-03-18 Mathieu Malaterre
|
||||
|
||||
* [r2757] libopenjpeg/cio.c, libopenjpeg/j2k.c, libopenjpeg/jp2.c,
|
||||
libopenjpeg/t2.c, libopenjpeg/tcd.c,
|
||||
tests/nonregression/test_suite.ctest.in: [1.5] Import portion of
|
||||
patch from issue 297
|
||||
Run test suite on new datasets
|
||||
Update issue 297
|
||||
* [r2758] libopenjpeg/jp2.c, libopenjpeg/tcd.c: [1.5] Import patch
|
||||
from trunk to make test passes. Affects:
|
||||
NR-DEC-2977.pdf.asan.67.2198.jp2-52-decode &
|
||||
NR-DEC-4149.pdf.SIGSEGV.cf7.3501.jp2-50-decode
|
||||
* [r2759] libopenjpeg/j2k.c: [1.5] Check the number of tiles
|
||||
* [r2760] libopenjpeg/tcd.c: [1.5] Rework r2758 the conditions were
|
||||
not quite right. Update checks.
|
||||
* [r2762] applications/codec/convert.c: [1.5] Fix issues with big
|
||||
endian handling
|
||||
Fixes issue 302
|
||||
* [r2765] applications/jpip/util/CMakeLists.txt: [1.5] Add a way
|
||||
for user to override source/target java version
|
||||
Update issue 303
|
||||
* [r2768] CMakeLists.txt, applications/codec/CMakeLists.txt,
|
||||
applications/common/opj_getopt.c,
|
||||
applications/common/opj_getopt.h, opj_config.h.cmake.in,
|
||||
tests/CMakeLists.txt: [1.5] Create a new cmake option to choose
|
||||
between convienient copy of getopt and system installed one
|
||||
Udapte issue 301
|
||||
* [r2769] applications/codec/image_to_j2k.c,
|
||||
applications/codec/j2k_dump.c, applications/codec/j2k_to_image.c,
|
||||
applications/common/opj_getopt.h: [1.5] Rework r2768 in fact
|
||||
getopt_long is slightly different on GNU. Adapt signature to
|
||||
handle BSD signature and GNU one.
|
||||
Update issue 301
|
||||
|
||||
2014-03-24 Rex Dieter
|
||||
|
||||
* [r2780] configure.ac: Calling AC_CANONICAL_SYSTEM implies
|
||||
AC_CANONICAL_TARGET, which
|
||||
gives incorrect results when cross compiling. Calling only
|
||||
AC_CANONICAL_HOST is enough.
|
||||
|
||||
issue: 129
|
||||
* [r2781] doc/Makefile.am: Install jpwl man pages only if jpwl is
|
||||
enabled
|
||||
|
||||
issue: 129
|
||||
* [r2782] m4/opj_check_lib.m4: Improve check for standard libs
|
||||
|
||||
Previously, with <lib>_LIBS and <lib>_CFLAGS undefined,
|
||||
the most basic compile command "$CC conftest.c -l<lib>" was not
|
||||
tested.
|
||||
|
||||
issue: 129
|
||||
|
||||
2014-03-25 Mathieu Malaterre
|
||||
|
||||
* [r2800] applications/codec/Makefile.am,
|
||||
applications/jpip/libopenjpip/CMakeLists.txt: [1.5] Import patch
|
||||
from bug tracker
|
||||
Thanks to winfried
|
||||
Fixes issue 304
|
||||
|
||||
2014-03-26 Mathieu Malaterre
|
||||
|
||||
* [r2807] configure.ac: [1.5] Fix big endian checking with
|
||||
autotools
|
||||
Thanks to winfried for patch
|
||||
Fixes issue 302
|
||||
|
||||
@@ -28,7 +28,7 @@ SET(CTEST_CUSTOM_WARNING_EXCEPTION
|
||||
# Suppress warning caused by intentional messages about deprecation
|
||||
".*warning,.* is deprecated"
|
||||
# supress warnings caused by 3rd party libs:
|
||||
".*/thirdparty/.*"
|
||||
".*thirdparty.*"
|
||||
"libtiff.*has no symbols"
|
||||
"libpng.*has no symbols"
|
||||
)
|
||||
|
||||
@@ -29,7 +29,7 @@ INCLUDE_REGULAR_EXPRESSION("^.*$")
|
||||
# OPENJPEG version number, useful for packaging and doxygen doc:
|
||||
SET(OPENJPEG_VERSION_MAJOR 1)
|
||||
SET(OPENJPEG_VERSION_MINOR 5)
|
||||
SET(OPENJPEG_VERSION_BUILD 0)
|
||||
SET(OPENJPEG_VERSION_BUILD 2)
|
||||
SET(OPENJPEG_VERSION
|
||||
"${OPENJPEG_VERSION_MAJOR}.${OPENJPEG_VERSION_MINOR}.${OPENJPEG_VERSION_BUILD}")
|
||||
SET(PACKAGE_VERSION
|
||||
@@ -44,6 +44,7 @@ SET(PACKAGE_VERSION
|
||||
# 1.3 | 3
|
||||
# 1.4 | 4
|
||||
# 1.5 | 5
|
||||
# 1.5.1 | 5
|
||||
# 2.0 | 6
|
||||
# above is the recommendation by the OPJ team. If you really need to override this default,
|
||||
# you can specify your own OPENJPEG_SOVERSION at cmake configuration time:
|
||||
@@ -135,6 +136,14 @@ IF(NOT OPENJPEG_INSTALL_DOC_DIR)
|
||||
SET(OPENJPEG_INSTALL_DOC_DIR "share/doc/${OPENJPEG_INSTALL_SUBDIR}")
|
||||
ENDIF(NOT OPENJPEG_INSTALL_DOC_DIR)
|
||||
|
||||
if(NOT OPENJPEG_INSTALL_JNI_DIR)
|
||||
if(WIN32)
|
||||
set(OPENJPEG_INSTALL_JNI_DIR ${OPENJPEG_INSTALL_BIN_DIR})
|
||||
else()
|
||||
set(OPENJPEG_INSTALL_JNI_DIR ${OPENJPEG_INSTALL_LIB_DIR})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
IF(NOT OPENJPEG_INSTALL_PACKAGE_DIR)
|
||||
# We could install *.cmake files in share/ however those files contains
|
||||
# hardcoded path to libraries on a multi-arch system (fedora/debian) those
|
||||
@@ -224,6 +233,8 @@ IF(BUILD_JPIP)
|
||||
ENDIF(BUILD_JPIP)
|
||||
OPTION(BUILD_VIEWER "Build the OPJViewer executable (C++)" OFF)
|
||||
OPTION(BUILD_JAVA "Build the openjpeg jar (Java)" OFF)
|
||||
OPTION(USE_SYSTEM_GETOPT "Prefer system installed getopt()" OFF)
|
||||
MARK_AS_ADVANCED(USE_SYSTEM_GETOPT)
|
||||
MARK_AS_ADVANCED(BUILD_VIEWER)
|
||||
MARK_AS_ADVANCED(BUILD_JAVA)
|
||||
|
||||
@@ -261,10 +272,9 @@ IF(BUILD_TESTING)
|
||||
# They could be found via svn on the OpenJPEG google code project
|
||||
# svn checkout http://openjpeg.googlecode.com/svn/data (about 70 Mo)
|
||||
FIND_PATH(OPJ_DATA_ROOT README-OPJ-Data
|
||||
PATHS
|
||||
$ENV{OPJ_DATA_ROOT}
|
||||
${CMAKE_SOURCE_DIR}/../data
|
||||
${CMAKE_SOURCE_DIR}/../../data
|
||||
PATHS $ENV{OPJ_DATA_ROOT} ${CMAKE_SOURCE_DIR}/../data
|
||||
${CMAKE_SOURCE_DIR}/../../data
|
||||
NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
|
||||
)
|
||||
|
||||
# Add repository where to find tests
|
||||
|
||||
19
NEWS
19
NEWS
@@ -2,23 +2,24 @@
|
||||
OpenJPEG NEWS - user visible changes
|
||||
====================================
|
||||
|
||||
Changes from OpenJPEG 1.5.1 to OpenJPEG 1.5.0
|
||||
Changes from OpenJPEG 1.5.2 to OpenJPEG 1.5.1
|
||||
----------------------------------------------
|
||||
|
||||
Security:
|
||||
|
||||
* Fixes: CVE-2012-3535
|
||||
* Fixes: CVE-2012-3358
|
||||
* Fixes: CVE-2013-4289 CVE-2013-4290
|
||||
* Fixes: CVE-2013-1447 CVE-2013-6045 CVE-2013-6052 CVE-2013-6054 CVE-2013-6053 CVE-2013-6887
|
||||
|
||||
New Features:
|
||||
|
||||
* Use a new API scheme and solve the SOVERSIONing in OpenJPEG
|
||||
* Allow better integration with multi-arch system
|
||||
* Compile & Install Java bindings (CMake)
|
||||
* Install required addXMLinJP2 (JPIP)
|
||||
* Compile Java with source/target specific java version
|
||||
* Do not set SONAME for Java module, fix linking (missing math lib)
|
||||
* Support some BMP/RGB8 files
|
||||
* Fix compilation on ARM
|
||||
|
||||
Misc:
|
||||
|
||||
* fix linker error by resolving all symbols (eg. missing -lm)
|
||||
* fix some man page typos
|
||||
* Remove BSD-4 license from getopt copy, since upstream switched to BSD-3
|
||||
* Support compilation against system installed getopt
|
||||
* Fix Big Endian checking (autotools)
|
||||
* Huge amount of bug fixes. See CHANGES for details.
|
||||
|
||||
@@ -24,13 +24,14 @@ include_directories(
|
||||
add_library(openjpegjni MODULE
|
||||
${openjpegjni_SRCS}
|
||||
)
|
||||
# Java module should not have a SONAME:
|
||||
set_property(TARGET openjpegjni PROPERTY NO_SONAME 1)
|
||||
|
||||
TARGET_LINK_LIBRARIES(openjpegjni ${OPENJPEG_LIBRARY_NAME})
|
||||
|
||||
IF(WIN32)
|
||||
SET(OPENJPEG_INSTALL_JNI_DIR ${OPENJPEG_INSTALL_BIN_DIR})
|
||||
ELSE()
|
||||
SET(OPENJPEG_INSTALL_JNI_DIR ${OPENJPEG_INSTALL_LIB_DIR})
|
||||
ENDIF()
|
||||
if(UNIX)
|
||||
target_link_libraries(openjpegjni m)
|
||||
endif()
|
||||
|
||||
INSTALL(TARGETS openjpegjni
|
||||
EXPORT OpenJPEGTargets
|
||||
|
||||
@@ -5,8 +5,12 @@ SET(common_SRCS
|
||||
convert.c
|
||||
index.c
|
||||
${OPENJPEG_SOURCE_DIR}/applications/common/color.c
|
||||
${OPENJPEG_SOURCE_DIR}/applications/common/opj_getopt.c
|
||||
)
|
||||
if(NOT USE_SYSTEM_GETOPT)
|
||||
list(APPEND common_SRCS
|
||||
${OPENJPEG_SOURCE_DIR}/applications/common/opj_getopt.c
|
||||
)
|
||||
endif()
|
||||
|
||||
# Headers file are located here:
|
||||
INCLUDE_DIRECTORIES(
|
||||
|
||||
@@ -78,7 +78,7 @@ JPWL_j2k_to_image_CPPFLAGS = \
|
||||
@LCMS1_CFLAGS@ \
|
||||
@LCMS2_CFLAGS@
|
||||
JPWL_j2k_to_image_CFLAGS =
|
||||
JPWL_j2k_to_image_LDADD = $(top_builddir)/libopenjpeg/jpwl/libopenjpeg_JPWL.la @LCMS1_LIBS@ @LCMS2_LIBS@ @TIFF_LIBS@ @PNG_LIBS@
|
||||
JPWL_j2k_to_image_LDADD = $(top_builddir)/libopenjpeg/jpwl/libopenjpeg_JPWL.la @LCMS1_LIBS@ @LCMS2_LIBS@ @TIFF_LIBS@ @PNG_LIBS@ -lm
|
||||
JPWL_j2k_to_image_SOURCES = \
|
||||
../common/color.c \
|
||||
../common/opj_getopt.c \
|
||||
@@ -96,7 +96,7 @@ JPWL_image_to_j2k_CPPFLAGS = \
|
||||
@TIFF_CFLAGS@ \
|
||||
@PNG_CFLAGS@
|
||||
JPWL_image_to_j2k_CFLAGS =
|
||||
JPWL_image_to_j2k_LDADD = $(top_builddir)/libopenjpeg/jpwl/libopenjpeg_JPWL.la @TIFF_LIBS@ @PNG_LIBS@
|
||||
JPWL_image_to_j2k_LDADD = $(top_builddir)/libopenjpeg/jpwl/libopenjpeg_JPWL.la @TIFF_LIBS@ @PNG_LIBS@ -lm
|
||||
|
||||
JPWL_image_to_j2k_SOURCES = \
|
||||
../common/opj_getopt.c \
|
||||
|
||||
@@ -94,7 +94,7 @@ struct tga_header
|
||||
|
||||
static unsigned short get_ushort(unsigned short val) {
|
||||
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
#ifdef OPJ_BIG_ENDIAN
|
||||
return( ((val & 0xff) << 8) + (val >> 8) );
|
||||
#else
|
||||
return( val );
|
||||
@@ -116,23 +116,28 @@ static int tga_readheader(FILE *fp, unsigned int *bits_per_pixel,
|
||||
|
||||
if (!bits_per_pixel || !width || !height || !flip_image)
|
||||
return 0;
|
||||
tga = (unsigned char*)malloc(18);
|
||||
tga = (unsigned char*)malloc(TGA_HEADER_SIZE);
|
||||
|
||||
if ( fread(tga, TGA_HEADER_SIZE, 1, fp) != 1 )
|
||||
{
|
||||
fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
|
||||
return 0 ;
|
||||
free(tga);
|
||||
return 0 ;
|
||||
}
|
||||
id_len = (unsigned char)tga[0];
|
||||
cmap_type = (unsigned char)tga[1];
|
||||
(void)cmap_type;
|
||||
image_type = (unsigned char)tga[2];
|
||||
cmap_index = get_ushort(*(unsigned short*)(&tga[3]));
|
||||
(void)cmap_index;
|
||||
cmap_len = get_ushort(*(unsigned short*)(&tga[5]));
|
||||
cmap_entry_size = (unsigned char)tga[7];
|
||||
|
||||
|
||||
x_origin = get_ushort(*(unsigned short*)(&tga[8]));
|
||||
(void)x_origin;
|
||||
y_origin = get_ushort(*(unsigned short*)(&tga[10]));
|
||||
(void)y_origin;
|
||||
image_w = get_ushort(*(unsigned short*)(&tga[12]));
|
||||
image_h = get_ushort(*(unsigned short*)(&tga[14]));
|
||||
pixel_depth = (unsigned char)tga[16];
|
||||
@@ -179,7 +184,7 @@ static int tga_readheader(FILE *fp, unsigned int *bits_per_pixel,
|
||||
return 1;
|
||||
}
|
||||
|
||||
#if WORDS_BIGENDIAN == 1
|
||||
#ifdef OPJ_BIG_ENDIAN
|
||||
|
||||
static inline int16_t swap16(int16_t x)
|
||||
{
|
||||
@@ -226,7 +231,7 @@ static int tga_writeheader(FILE *fp, int bits_per_pixel, int width, int height,
|
||||
image_w = (unsigned short)width;
|
||||
image_h = (unsigned short) height;
|
||||
|
||||
#if WORDS_BIGENDIAN == 0
|
||||
#ifndef OPJ_BIG_ENDIAN
|
||||
if(fwrite(&image_w, 2, 1, fp) != 1) goto fails;
|
||||
if(fwrite(&image_h, 2, 1, fp) != 1) goto fails;
|
||||
#else
|
||||
@@ -271,12 +276,16 @@ opj_image_t* tgatoimage(const char *filename, opj_cparameters_t *parameters) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!tga_readheader(f, &pixel_bit_depth, &image_width, &image_height, &flip_image))
|
||||
if (!tga_readheader(f, &pixel_bit_depth, &image_width, &image_height, &flip_image)) {
|
||||
fclose(f);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* We currently only support 24 & 32 bit tga's ... */
|
||||
if (!((pixel_bit_depth == 24) || (pixel_bit_depth == 32)))
|
||||
if (!((pixel_bit_depth == 24) || (pixel_bit_depth == 32))) {
|
||||
fclose(f);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* initialize image components */
|
||||
memset(&cmptparm[0], 0, 4 * sizeof(opj_image_cmptparm_t));
|
||||
@@ -309,8 +318,10 @@ opj_image_t* tgatoimage(const char *filename, opj_cparameters_t *parameters) {
|
||||
/* create the image */
|
||||
image = opj_image_create(numcomps, &cmptparm[0], color_space);
|
||||
|
||||
if (!image)
|
||||
if (!image) {
|
||||
fclose(f);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* set image offset and reference grid */
|
||||
image->x0 = parameters->image_offset_x0;
|
||||
@@ -338,19 +349,22 @@ opj_image_t* tgatoimage(const char *filename, opj_cparameters_t *parameters) {
|
||||
{
|
||||
fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
|
||||
opj_image_destroy(image);
|
||||
return NULL;
|
||||
fclose(f);
|
||||
return NULL;
|
||||
}
|
||||
if ( !fread(&g, 1, 1, f) )
|
||||
{
|
||||
fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
|
||||
opj_image_destroy(image);
|
||||
return NULL;
|
||||
fclose(f);
|
||||
return NULL;
|
||||
}
|
||||
if ( !fread(&r, 1, 1, f) )
|
||||
{
|
||||
fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
|
||||
opj_image_destroy(image);
|
||||
return NULL;
|
||||
fclose(f);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
image->comps[0].data[index]=r;
|
||||
@@ -368,25 +382,29 @@ opj_image_t* tgatoimage(const char *filename, opj_cparameters_t *parameters) {
|
||||
{
|
||||
fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
|
||||
opj_image_destroy(image);
|
||||
return NULL;
|
||||
fclose(f);
|
||||
return NULL;
|
||||
}
|
||||
if ( !fread(&g, 1, 1, f) )
|
||||
{
|
||||
fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
|
||||
opj_image_destroy(image);
|
||||
return NULL;
|
||||
fclose(f);
|
||||
return NULL;
|
||||
}
|
||||
if ( !fread(&r, 1, 1, f) )
|
||||
{
|
||||
fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
|
||||
opj_image_destroy(image);
|
||||
return NULL;
|
||||
fclose(f);
|
||||
return NULL;
|
||||
}
|
||||
if ( !fread(&a, 1, 1, f) )
|
||||
{
|
||||
fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
|
||||
opj_image_destroy(image);
|
||||
return NULL;
|
||||
fclose(f);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
image->comps[0].data[index]=r;
|
||||
@@ -399,7 +417,8 @@ opj_image_t* tgatoimage(const char *filename, opj_cparameters_t *parameters) {
|
||||
else {
|
||||
fprintf(stderr, "Currently unsupported bit depth : %s\n", filename);
|
||||
}
|
||||
}
|
||||
}
|
||||
fclose(f);
|
||||
return image;
|
||||
}
|
||||
|
||||
@@ -425,6 +444,7 @@ int imagetotga(opj_image_t * image, const char *outfile) {
|
||||
||(image->comps[0].dy != image->comps[i+1].dy)
|
||||
||(image->comps[0].prec != image->comps[i+1].prec)) {
|
||||
fprintf(stderr, "Unable to create a tga file with such J2K image charateristics.");
|
||||
fclose(fdest);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -437,8 +457,10 @@ int imagetotga(opj_image_t * image, const char *outfile) {
|
||||
|
||||
/* Write TGA header */
|
||||
bpp = write_alpha ? 32 : 24;
|
||||
if (!tga_writeheader(fdest, bpp, width , height, OPJ_TRUE))
|
||||
if (!tga_writeheader(fdest, bpp, width , height, OPJ_TRUE)) {
|
||||
fclose(fdest);
|
||||
return 1;
|
||||
}
|
||||
|
||||
alpha_channel = image->numcomps-1;
|
||||
|
||||
@@ -468,6 +490,7 @@ int imagetotga(opj_image_t * image, const char *outfile) {
|
||||
res = fwrite(&value,1,1,fdest);
|
||||
if( res < 1 ) {
|
||||
fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
|
||||
fclose(fdest);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -475,6 +498,7 @@ int imagetotga(opj_image_t * image, const char *outfile) {
|
||||
res = fwrite(&value,1,1,fdest);
|
||||
if( res < 1 ) {
|
||||
fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
|
||||
fclose(fdest);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -482,6 +506,7 @@ int imagetotga(opj_image_t * image, const char *outfile) {
|
||||
res = fwrite(&value,1,1,fdest);
|
||||
if( res < 1 ) {
|
||||
fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
|
||||
fclose(fdest);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -491,12 +516,14 @@ int imagetotga(opj_image_t * image, const char *outfile) {
|
||||
res = fwrite(&value,1,1,fdest);
|
||||
if( res < 1 ) {
|
||||
fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
|
||||
fclose(fdest);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fclose(fdest);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -534,6 +561,37 @@ typedef struct {
|
||||
DWORD biClrImportant; /* Number of important color (0: ALL) */
|
||||
} BITMAPINFOHEADER_t;
|
||||
|
||||
struct bmp_cmap
|
||||
{
|
||||
unsigned char blue;
|
||||
unsigned char green;
|
||||
unsigned char red;
|
||||
unsigned char alpha;
|
||||
};
|
||||
|
||||
static void BMP_read_RGB8(int *red, int *green, int *blue, unsigned int line,
|
||||
BITMAPINFOHEADER_t *hdr, struct bmp_cmap bmap[256], FILE *reader,
|
||||
unsigned int offset)
|
||||
{
|
||||
unsigned int w, start_pos, y, x, pixel;
|
||||
unsigned int i = 0;
|
||||
|
||||
w = hdr->biWidth;
|
||||
|
||||
start_pos = (((w * hdr->biBitCount + 31) & ~0x1f) >> 3);
|
||||
y = hdr->biHeight - line - 1;
|
||||
fseek(reader,offset + y * start_pos,SEEK_SET);
|
||||
|
||||
for(x = 0; x < w; ++x)
|
||||
{
|
||||
pixel = fgetc(reader);
|
||||
red[i] = (unsigned char)bmap[pixel].red;
|
||||
green[i] = (unsigned char)bmap[pixel].green;
|
||||
blue[i] = (unsigned char)bmap[pixel].blue;
|
||||
++i;
|
||||
}
|
||||
}
|
||||
|
||||
opj_image_t* bmptoimage(const char *filename, opj_cparameters_t *parameters)
|
||||
{
|
||||
int subsampling_dx = parameters->subsampling_dx;
|
||||
@@ -727,37 +785,24 @@ opj_image_t* bmptoimage(const char *filename, opj_cparameters_t *parameters)
|
||||
else
|
||||
if (Info_h.biBitCount == 8 && Info_h.biCompression == 0)/*RGB */
|
||||
{
|
||||
struct bmp_cmap cmap [256];
|
||||
|
||||
if(Info_h.biClrUsed == 0) Info_h.biClrUsed = 256;
|
||||
else
|
||||
if(Info_h.biClrUsed > 256) Info_h.biClrUsed = 256;
|
||||
|
||||
table_R = (unsigned char *) malloc(256 * sizeof(unsigned char));
|
||||
table_G = (unsigned char *) malloc(256 * sizeof(unsigned char));
|
||||
table_B = (unsigned char *) malloc(256 * sizeof(unsigned char));
|
||||
|
||||
has_color = 0;
|
||||
fseek(IN, 14+Info_h.biSize, SEEK_SET);
|
||||
memset(&cmap, 0, sizeof(struct bmp_cmap) * 256);
|
||||
|
||||
for (j = 0; j < Info_h.biClrUsed; j++)
|
||||
{
|
||||
table_B[j] = (unsigned char)getc(IN);
|
||||
table_G[j] = (unsigned char)getc(IN);
|
||||
table_R[j] = (unsigned char)getc(IN);
|
||||
cmap[j].blue = (unsigned char)getc(IN);
|
||||
cmap[j].green = (unsigned char)getc(IN);
|
||||
cmap[j].red = (unsigned char)getc(IN);
|
||||
getc(IN);
|
||||
has_color +=
|
||||
!(table_R[j] == table_G[j] && table_R[j] == table_B[j]);
|
||||
}
|
||||
if(has_color) gray_scale = 0;
|
||||
|
||||
/* Place the cursor at the beginning of the image information */
|
||||
fseek(IN, 0, SEEK_SET);
|
||||
fseek(IN, File_h.bfOffBits, SEEK_SET);
|
||||
|
||||
W = Info_h.biWidth;
|
||||
H = Info_h.biHeight;
|
||||
if (Info_h.biWidth % 2)
|
||||
W++;
|
||||
|
||||
numcomps = gray_scale ? 1 : 3;
|
||||
color_space = gray_scale ? CLRSPC_GRAY : CLRSPC_SRGB;
|
||||
numcomps = 3;
|
||||
color_space = CLRSPC_SRGB;
|
||||
/* initialize image components */
|
||||
memset(&cmptparm[0], 0, 3 * sizeof(opj_image_cmptparm_t));
|
||||
for(i = 0; i < numcomps; i++)
|
||||
@@ -775,7 +820,6 @@ opj_image_t* bmptoimage(const char *filename, opj_cparameters_t *parameters)
|
||||
if(!image)
|
||||
{
|
||||
fclose(IN);
|
||||
free(table_R); free(table_G); free(table_B);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -785,55 +829,21 @@ opj_image_t* bmptoimage(const char *filename, opj_cparameters_t *parameters)
|
||||
image->x1 = !image->x0 ? (w - 1) * subsampling_dx + 1 : image->x0 + (w - 1) * subsampling_dx + 1;
|
||||
image->y1 = !image->y0 ? (h - 1) * subsampling_dy + 1 : image->y0 + (h - 1) * subsampling_dy + 1;
|
||||
|
||||
{
|
||||
int *red = image->comps[0].data;
|
||||
int *green = image->comps[1].data;
|
||||
int *blue = image->comps[2].data;
|
||||
unsigned int offset = File_h.bfOffBits;
|
||||
int line;
|
||||
|
||||
/* set image data */
|
||||
|
||||
RGB = (unsigned char *) malloc(W * H * sizeof(unsigned char));
|
||||
|
||||
if ( fread(RGB, sizeof(unsigned char), W * H, IN) != W * H )
|
||||
{
|
||||
free(table_R);
|
||||
free(table_G);
|
||||
free(table_B);
|
||||
free(RGB);
|
||||
opj_image_destroy(image);
|
||||
fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
|
||||
return NULL;
|
||||
}
|
||||
if (gray_scale)
|
||||
{
|
||||
index = 0;
|
||||
for (j = 0; j < W * H; j++)
|
||||
for(line = 0; line < h; ++line)
|
||||
{
|
||||
if ((j % W < W - 1 && Info_h.biWidth % 2) || !(Info_h.biWidth % 2))
|
||||
{
|
||||
image->comps[0].data[index] =
|
||||
table_R[RGB[W * H - ((j) / (W) + 1) * W + (j) % (W)]];
|
||||
index++;
|
||||
}
|
||||
}
|
||||
BMP_read_RGB8(red, green, blue, line, &Info_h, cmap, IN, offset);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
index = 0;
|
||||
for (j = 0; j < W * H; j++)
|
||||
{
|
||||
if ((j % W < W - 1 && Info_h.biWidth % 2)
|
||||
|| !(Info_h.biWidth % 2))
|
||||
{
|
||||
unsigned char pixel_index =
|
||||
RGB[W * H - ((j) / (W) + 1) * W + (j) % (W)];
|
||||
image->comps[0].data[index] = table_R[pixel_index];
|
||||
image->comps[1].data[index] = table_G[pixel_index];
|
||||
image->comps[2].data[index] = table_B[pixel_index];
|
||||
index++;
|
||||
}
|
||||
red += w; green += w; blue += w;
|
||||
}
|
||||
}
|
||||
free(RGB);
|
||||
free(table_R);
|
||||
free(table_G);
|
||||
free(table_B);
|
||||
}/* RGB8 */
|
||||
else
|
||||
if (Info_h.biBitCount == 8 && Info_h.biCompression == 1)/*RLE8*/
|
||||
@@ -1125,7 +1135,12 @@ int imagetobmp(opj_image_t * image, const char *outfile) {
|
||||
<<-- <<-- <<-- <<-- */
|
||||
|
||||
fdest = fopen(outfile, "wb");
|
||||
w = image->comps[0].w;
|
||||
if (!fdest) {
|
||||
fprintf(stderr, "ERROR -> failed to open %s for writing\n", outfile);
|
||||
return 1;
|
||||
}
|
||||
|
||||
w = image->comps[0].w;
|
||||
h = image->comps[0].h;
|
||||
|
||||
fprintf(fdest, "BM");
|
||||
@@ -1293,6 +1308,7 @@ opj_image_t* pgxtoimage(const char *filename, opj_cparameters_t *parameters) {
|
||||
fseek(f, 0, SEEK_SET);
|
||||
if( fscanf(f, "PG%[ \t]%c%c%[ \t+-]%d%[ \t]%d%[ \t]%d",temp,&endian1,&endian2,signtmp,&prec,temp,&w,temp,&h) != 9){
|
||||
fprintf(stderr, "ERROR: Failed to read the right number of element from the fscanf() function!\n");
|
||||
fclose(f);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -1310,6 +1326,7 @@ opj_image_t* pgxtoimage(const char *filename, opj_cparameters_t *parameters) {
|
||||
bigendian = 0;
|
||||
} else {
|
||||
fprintf(stderr, "Bad pgx header, please check input file\n");
|
||||
fclose(f);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -1430,10 +1447,6 @@ int imagetopgx(opj_image_t * image, const char *outfile) {
|
||||
fprintf(stderr, "ERROR -> failed to open %s for writing\n", name);
|
||||
return 1;
|
||||
}
|
||||
/* dont need name anymore */
|
||||
if( total > 256 ) {
|
||||
free(name);
|
||||
}
|
||||
|
||||
w = image->comps[compno].w;
|
||||
h = image->comps[compno].h;
|
||||
@@ -1453,10 +1466,19 @@ int imagetopgx(opj_image_t * image, const char *outfile) {
|
||||
res = fwrite(&byte, 1, 1, fdest);
|
||||
if( res < 1 ) {
|
||||
fprintf(stderr, "failed to write 1 byte for %s\n", name);
|
||||
if( total > 256 ) {
|
||||
free(name);
|
||||
}
|
||||
fclose(fdest);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* dont need name anymore */
|
||||
if( total > 256 ) {
|
||||
free(name);
|
||||
}
|
||||
|
||||
fclose(fdest);
|
||||
}
|
||||
|
||||
@@ -2837,6 +2859,7 @@ opj_image_t* rawtoimage(const char *filename, opj_cparameters_t *parameters, raw
|
||||
image = opj_image_create(numcomps, &cmptparm[0], color_space);
|
||||
if(!image) {
|
||||
fclose(f);
|
||||
free(cmptparm);
|
||||
return NULL;
|
||||
}
|
||||
/* set image offset and reference grid */
|
||||
@@ -2852,6 +2875,9 @@ opj_image_t* rawtoimage(const char *filename, opj_cparameters_t *parameters, raw
|
||||
for (i = 0; i < w * h; i++) {
|
||||
if (!fread(&value, 1, 1, f)) {
|
||||
fprintf(stderr,"Error reading raw file. End of file probably reached.\n");
|
||||
fclose(f);
|
||||
free(cmptparm);
|
||||
opj_image_destroy(image);
|
||||
return NULL;
|
||||
}
|
||||
image->comps[compno].data[i] = raw_cp->rawSigned?(char)value:value;
|
||||
@@ -2866,11 +2892,17 @@ opj_image_t* rawtoimage(const char *filename, opj_cparameters_t *parameters, raw
|
||||
unsigned char temp;
|
||||
if (!fread(&temp, 1, 1, f)) {
|
||||
fprintf(stderr,"Error reading raw file. End of file probably reached.\n");
|
||||
fclose(f);
|
||||
free(cmptparm);
|
||||
opj_image_destroy(image);
|
||||
return NULL;
|
||||
}
|
||||
value = temp << 8;
|
||||
if (!fread(&temp, 1, 1, f)) {
|
||||
fprintf(stderr,"Error reading raw file. End of file probably reached.\n");
|
||||
fclose(f);
|
||||
free(cmptparm);
|
||||
opj_image_destroy(image);
|
||||
return NULL;
|
||||
}
|
||||
value += temp;
|
||||
@@ -2880,6 +2912,9 @@ opj_image_t* rawtoimage(const char *filename, opj_cparameters_t *parameters, raw
|
||||
}
|
||||
else {
|
||||
fprintf(stderr,"OpenJPEG cannot encode raw components with bit depth higher than 16 bits.\n");
|
||||
fclose(f);
|
||||
free(cmptparm);
|
||||
opj_image_destroy(image);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -2887,6 +2922,7 @@ opj_image_t* rawtoimage(const char *filename, opj_cparameters_t *parameters, raw
|
||||
fprintf(stderr,"Warning. End of raw file not reached... processing anyway\n");
|
||||
}
|
||||
fclose(f);
|
||||
free(cmptparm);
|
||||
|
||||
return image;
|
||||
}
|
||||
@@ -2935,6 +2971,7 @@ int imagetoraw(opj_image_t * image, const char *outfile)
|
||||
res = fwrite(&curr, sizeof(signed char), 1, rawFile);
|
||||
if( res < 1 ) {
|
||||
fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
|
||||
fclose(rawFile);
|
||||
return 1;
|
||||
}
|
||||
ptr++;
|
||||
@@ -2952,6 +2989,7 @@ int imagetoraw(opj_image_t * image, const char *outfile)
|
||||
res = fwrite(&curr, sizeof(unsigned char), 1, rawFile);
|
||||
if( res < 1 ) {
|
||||
fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
|
||||
fclose(rawFile);
|
||||
return 1;
|
||||
}
|
||||
ptr++;
|
||||
@@ -2974,12 +3012,14 @@ int imagetoraw(opj_image_t * image, const char *outfile)
|
||||
res = fwrite(&temp, 1, 1, rawFile);
|
||||
if( res < 1 ) {
|
||||
fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
|
||||
fclose(rawFile);
|
||||
return 1;
|
||||
}
|
||||
temp = (unsigned char) curr;
|
||||
res = fwrite(&temp, 1, 1, rawFile);
|
||||
if( res < 1 ) {
|
||||
fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
|
||||
fclose(rawFile);
|
||||
return 1;
|
||||
}
|
||||
ptr++;
|
||||
@@ -2999,12 +3039,14 @@ int imagetoraw(opj_image_t * image, const char *outfile)
|
||||
res = fwrite(&temp, 1, 1, rawFile);
|
||||
if( res < 1 ) {
|
||||
fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
|
||||
fclose(rawFile);
|
||||
return 1;
|
||||
}
|
||||
temp = (unsigned char) curr;
|
||||
res = fwrite(&temp, 1, 1, rawFile);
|
||||
if( res < 1 ) {
|
||||
fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
|
||||
fclose(rawFile);
|
||||
return 1;
|
||||
}
|
||||
ptr++;
|
||||
@@ -3015,11 +3057,13 @@ int imagetoraw(opj_image_t * image, const char *outfile)
|
||||
else if (image->comps[compno].prec <= 32)
|
||||
{
|
||||
fprintf(stderr,"More than 16 bits per component no handled yet\n");
|
||||
fclose(rawFile);
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf(stderr,"Error: invalid precision: %d\n", image->comps[compno].prec);
|
||||
fclose(rawFile);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,7 +82,7 @@ typedef struct img_folder{
|
||||
float *rates;
|
||||
}img_fol_t;
|
||||
|
||||
void encode_help_display(void) {
|
||||
static void encode_help_display(void) {
|
||||
fprintf(stdout,"HELP for image_to_j2k\n----\n\n");
|
||||
fprintf(stdout,"- the -h option displays this help information on screen\n\n");
|
||||
|
||||
@@ -321,7 +321,7 @@ void encode_help_display(void) {
|
||||
fprintf(stdout,"TotalDisto\n\n");
|
||||
}
|
||||
|
||||
OPJ_PROG_ORDER give_progression(char progression[4]) {
|
||||
static OPJ_PROG_ORDER give_progression(char progression[4]) {
|
||||
if(strncmp(progression, "LRCP", 4) == 0) {
|
||||
return LRCP;
|
||||
}
|
||||
@@ -341,7 +341,7 @@ OPJ_PROG_ORDER give_progression(char progression[4]) {
|
||||
return PROG_UNKNOWN;
|
||||
}
|
||||
|
||||
int get_num_images(char *imgdirpath){
|
||||
static int get_num_images(char *imgdirpath){
|
||||
DIR *dir;
|
||||
struct dirent* content;
|
||||
int num_images = 0;
|
||||
@@ -360,10 +360,11 @@ int get_num_images(char *imgdirpath){
|
||||
continue;
|
||||
num_images++;
|
||||
}
|
||||
closedir(dir);
|
||||
return num_images;
|
||||
}
|
||||
|
||||
int load_images(dircnt_t *dirptr, char *imgdirpath){
|
||||
static int load_images(dircnt_t *dirptr, char *imgdirpath){
|
||||
DIR *dir;
|
||||
struct dirent* content;
|
||||
int i = 0;
|
||||
@@ -385,10 +386,11 @@ int load_images(dircnt_t *dirptr, char *imgdirpath){
|
||||
strcpy(dirptr->filename[i],content->d_name);
|
||||
i++;
|
||||
}
|
||||
closedir(dir);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int get_file_format(char *filename) {
|
||||
static int get_file_format(char *filename) {
|
||||
unsigned int i;
|
||||
static const char *extension[] = {
|
||||
"pgx", "pnm", "pgm", "ppm", "pbm", "pam", "bmp", "tif", "raw", "tga", "png", "j2k", "jp2", "j2c", "jpc"
|
||||
@@ -408,14 +410,13 @@ int get_file_format(char *filename) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
char * get_file_name(char *name){
|
||||
static char * get_file_name(char *name){
|
||||
char *fname;
|
||||
fname= (char*)malloc(OPJ_PATH_LEN*sizeof(char));
|
||||
fname= strtok(name,".");
|
||||
return fname;
|
||||
}
|
||||
|
||||
char get_next_file(int imageno,dircnt_t *dirptr,img_fol_t *img_fol, opj_cparameters_t *parameters){
|
||||
static char get_next_file(int imageno,dircnt_t *dirptr,img_fol_t *img_fol, opj_cparameters_t *parameters){
|
||||
char image_filename[OPJ_PATH_LEN], infilename[OPJ_PATH_LEN],outfilename[OPJ_PATH_LEN],temp_ofname[OPJ_PATH_LEN];
|
||||
char *temp_p, temp1[OPJ_PATH_LEN]="";
|
||||
|
||||
@@ -458,7 +459,7 @@ static int initialise_4K_poc(opj_poc_t *POC, int numres){
|
||||
return 2;
|
||||
}
|
||||
|
||||
void cinema_parameters(opj_cparameters_t *parameters){
|
||||
static void cinema_parameters(opj_cparameters_t *parameters){
|
||||
parameters->tile_size_on = OPJ_FALSE;
|
||||
parameters->cp_tdx=1;
|
||||
parameters->cp_tdy=1;
|
||||
@@ -491,7 +492,7 @@ void cinema_parameters(opj_cparameters_t *parameters){
|
||||
|
||||
}
|
||||
|
||||
void cinema_setup_encoder(opj_cparameters_t *parameters,opj_image_t *image, img_fol_t *img_fol){
|
||||
static void cinema_setup_encoder(opj_cparameters_t *parameters,opj_image_t *image, img_fol_t *img_fol){
|
||||
int i;
|
||||
float temp_rate;
|
||||
|
||||
@@ -576,7 +577,7 @@ void cinema_setup_encoder(opj_cparameters_t *parameters,opj_image_t *image, img_
|
||||
|
||||
/* ------------------------------------------------------------------------------------ */
|
||||
|
||||
int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
|
||||
static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
|
||||
img_fol_t *img_fol, raw_cparameters_t *raw_cp, char *indexfilename) {
|
||||
int i, j, totlen, c;
|
||||
opj_option_t long_option[]={
|
||||
@@ -589,7 +590,8 @@ int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
|
||||
{"OutFor",REQ_ARG, NULL ,'O'},
|
||||
{"POC",REQ_ARG, NULL ,'P'},
|
||||
{"ROI",REQ_ARG, NULL ,'R'},
|
||||
{"jpip",NO_ARG, NULL, 'J'}
|
||||
{"jpip",NO_ARG, NULL, 'J'},
|
||||
{0,0,0,0} /* GNU getopt_long requirement */
|
||||
};
|
||||
|
||||
/* parse the command line */
|
||||
@@ -599,12 +601,16 @@ int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
|
||||
#endif /* USE_JPWL */
|
||||
"h";
|
||||
|
||||
totlen=sizeof(long_option);
|
||||
totlen=sizeof(long_option)-1;
|
||||
img_fol->set_out_format=0;
|
||||
raw_cp->rawWidth = 0;
|
||||
|
||||
do{
|
||||
#ifdef USE_SYSTEM_GETOPT
|
||||
c = opj_getopt_long(argc, argv, optlist,long_option,0);
|
||||
#else
|
||||
c = opj_getopt_long(argc, argv, optlist,long_option,totlen);
|
||||
#endif
|
||||
if (c == -1)
|
||||
break;
|
||||
switch (c) {
|
||||
@@ -1466,21 +1472,21 @@ int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
|
||||
/**
|
||||
sample error callback expecting a FILE* client object
|
||||
*/
|
||||
void error_callback(const char *msg, void *client_data) {
|
||||
static void error_callback(const char *msg, void *client_data) {
|
||||
FILE *stream = (FILE*)client_data;
|
||||
fprintf(stream, "[ERROR] %s", msg);
|
||||
}
|
||||
/**
|
||||
sample warning callback expecting a FILE* client object
|
||||
*/
|
||||
void warning_callback(const char *msg, void *client_data) {
|
||||
static void warning_callback(const char *msg, void *client_data) {
|
||||
FILE *stream = (FILE*)client_data;
|
||||
fprintf(stream, "[WARNING] %s", msg);
|
||||
}
|
||||
/**
|
||||
sample debug callback expecting a FILE* client object
|
||||
*/
|
||||
void info_callback(const char *msg, void *client_data) {
|
||||
static void info_callback(const char *msg, void *client_data) {
|
||||
FILE *stream = (FILE*)client_data;
|
||||
fprintf(stream, "[INFO] %s", msg);
|
||||
}
|
||||
|
||||
@@ -121,6 +121,7 @@ int get_num_images(char *imgdirpath){
|
||||
continue;
|
||||
num_images++;
|
||||
}
|
||||
closedir(dir);
|
||||
return num_images;
|
||||
}
|
||||
|
||||
@@ -146,6 +147,7 @@ int load_images(dircnt_t *dirptr, char *imgdirpath){
|
||||
strcpy(dirptr->filename[i],content->d_name);
|
||||
i++;
|
||||
}
|
||||
closedir(dir);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -199,15 +201,20 @@ int parse_cmdline_decoder(int argc, char **argv, opj_dparameters_t *parameters,i
|
||||
int totlen, c;
|
||||
opj_option_t long_option[]={
|
||||
{"ImgDir",REQ_ARG, NULL ,'y'},
|
||||
{0,0,0,0} /* GNU getopt_long requirement */
|
||||
};
|
||||
const char optlist[] = "i:o:h";
|
||||
|
||||
OPJ_ARG_NOT_USED(indexfilename);
|
||||
|
||||
totlen=sizeof(long_option);
|
||||
totlen=sizeof(long_option)-1;
|
||||
img_fol->set_out_format = 0;
|
||||
do {
|
||||
#ifdef USE_SYSTEM_GETOPT
|
||||
c = opj_getopt_long(argc, argv,optlist,long_option,0);
|
||||
#else
|
||||
c = opj_getopt_long(argc, argv,optlist,long_option,totlen);
|
||||
#endif
|
||||
if (c == -1)
|
||||
break;
|
||||
switch (c) {
|
||||
|
||||
@@ -85,7 +85,7 @@ typedef struct img_folder{
|
||||
|
||||
}img_fol_t;
|
||||
|
||||
void decode_help_display(void) {
|
||||
static void decode_help_display(void) {
|
||||
fprintf(stdout,"HELP for j2k_to_image\n----\n\n");
|
||||
fprintf(stdout,"- the -h option displays this help information on screen\n\n");
|
||||
|
||||
@@ -144,7 +144,7 @@ void decode_help_display(void) {
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
int get_num_images(char *imgdirpath){
|
||||
static int get_num_images(char *imgdirpath){
|
||||
DIR *dir;
|
||||
struct dirent* content;
|
||||
int num_images = 0;
|
||||
@@ -162,10 +162,11 @@ int get_num_images(char *imgdirpath){
|
||||
continue;
|
||||
num_images++;
|
||||
}
|
||||
closedir(dir);
|
||||
return num_images;
|
||||
}
|
||||
|
||||
int load_images(dircnt_t *dirptr, char *imgdirpath){
|
||||
static int load_images(dircnt_t *dirptr, char *imgdirpath){
|
||||
DIR *dir;
|
||||
struct dirent* content;
|
||||
int i = 0;
|
||||
@@ -187,10 +188,11 @@ int load_images(dircnt_t *dirptr, char *imgdirpath){
|
||||
strcpy(dirptr->filename[i],content->d_name);
|
||||
i++;
|
||||
}
|
||||
closedir(dir);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int get_file_format(char *filename) {
|
||||
static int get_file_format(char *filename) {
|
||||
unsigned int i;
|
||||
static const char *extension[] = {"pgx", "pnm", "pgm", "ppm", "bmp","tif", "raw", "tga", "png", "j2k", "jp2", "jpt", "j2c", "jpc" };
|
||||
static const int format[] = { PGX_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, BMP_DFMT, TIF_DFMT, RAW_DFMT, TGA_DFMT, PNG_DFMT, J2K_CFMT, JP2_CFMT, JPT_CFMT, J2K_CFMT, J2K_CFMT };
|
||||
@@ -209,7 +211,7 @@ int get_file_format(char *filename) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
char get_next_file(int imageno,dircnt_t *dirptr,img_fol_t *img_fol, opj_dparameters_t *parameters){
|
||||
static char get_next_file(int imageno,dircnt_t *dirptr,img_fol_t *img_fol, opj_dparameters_t *parameters){
|
||||
char image_filename[OPJ_PATH_LEN], infilename[OPJ_PATH_LEN],outfilename[OPJ_PATH_LEN],temp_ofname[OPJ_PATH_LEN];
|
||||
char *temp_p, temp1[OPJ_PATH_LEN]="";
|
||||
|
||||
@@ -235,12 +237,13 @@ char get_next_file(int imageno,dircnt_t *dirptr,img_fol_t *img_fol, opj_dparamet
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
int parse_cmdline_decoder(int argc, char **argv, opj_dparameters_t *parameters,img_fol_t *img_fol, char *indexfilename) {
|
||||
static int parse_cmdline_decoder(int argc, char **argv, opj_dparameters_t *parameters,img_fol_t *img_fol, char *indexfilename) {
|
||||
/* parse the command line */
|
||||
int totlen, c;
|
||||
opj_option_t long_option[]={
|
||||
{"ImgDir",REQ_ARG, NULL ,'y'},
|
||||
{"OutFor",REQ_ARG, NULL ,'O'},
|
||||
{0,0,0,0} /* GNU getopt_long requirement */
|
||||
};
|
||||
|
||||
const char optlist[] = "i:o:r:l:x:"
|
||||
@@ -251,10 +254,14 @@ int parse_cmdline_decoder(int argc, char **argv, opj_dparameters_t *parameters,i
|
||||
#endif /* USE_JPWL */
|
||||
/* <<UniPG */
|
||||
"h" ;
|
||||
totlen=sizeof(long_option);
|
||||
totlen=sizeof(long_option) - 1;
|
||||
img_fol->set_out_format = 0;
|
||||
do {
|
||||
#ifdef USE_SYSTEM_GETOPT
|
||||
c = opj_getopt_long(argc, argv,optlist,long_option,0);
|
||||
#else
|
||||
c = opj_getopt_long(argc, argv,optlist,long_option,totlen);
|
||||
#endif
|
||||
if (c == -1)
|
||||
break;
|
||||
switch (c) {
|
||||
@@ -490,21 +497,21 @@ int parse_cmdline_decoder(int argc, char **argv, opj_dparameters_t *parameters,i
|
||||
/**
|
||||
sample error callback expecting a FILE* client object
|
||||
*/
|
||||
void error_callback(const char *msg, void *client_data) {
|
||||
static void error_callback(const char *msg, void *client_data) {
|
||||
FILE *stream = (FILE*)client_data;
|
||||
fprintf(stream, "[ERROR] %s", msg);
|
||||
}
|
||||
/**
|
||||
sample warning callback expecting a FILE* client object
|
||||
*/
|
||||
void warning_callback(const char *msg, void *client_data) {
|
||||
static void warning_callback(const char *msg, void *client_data) {
|
||||
FILE *stream = (FILE*)client_data;
|
||||
fprintf(stream, "[WARNING] %s", msg);
|
||||
}
|
||||
/**
|
||||
sample debug callback expecting no client object
|
||||
*/
|
||||
void info_callback(const char *msg, void *client_data) {
|
||||
static void info_callback(const char *msg, void *client_data) {
|
||||
(void)client_data;
|
||||
fprintf(stdout, "[INFO] %s", msg);
|
||||
}
|
||||
|
||||
@@ -293,12 +293,14 @@ void color_apply_icc_profile(opj_image_t *image)
|
||||
if(in_prof == NULL) return;
|
||||
|
||||
in_space = cmsGetPCS(in_prof);
|
||||
(void)in_space;
|
||||
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;
|
||||
(void)prec;
|
||||
oldspace = image->color_space;
|
||||
|
||||
if(out_space == cmsSigRgbData) /* enumCS 16 */
|
||||
|
||||
@@ -10,11 +10,7 @@
|
||||
* 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
|
||||
* 3. 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.
|
||||
*
|
||||
@@ -42,6 +38,10 @@ static char sccsid[] = "@(#)opj_getopt.c 8.3 (Berkeley) 4/27/95";
|
||||
#include <string.h>
|
||||
#include "opj_getopt.h"
|
||||
|
||||
#ifdef USE_SYSTEM_GETOPT
|
||||
#error
|
||||
#endif
|
||||
|
||||
int opj_opterr = 1, /* if error message should be printed */
|
||||
opj_optind = 1, /* index into parent argv vector */
|
||||
opj_optopt, /* character checked for validity */
|
||||
|
||||
@@ -1,5 +1,26 @@
|
||||
/* last review : october 29th, 2002 */
|
||||
|
||||
#include "opj_config.h"
|
||||
|
||||
#ifdef USE_SYSTEM_GETOPT
|
||||
#include <getopt.h>
|
||||
|
||||
#define opj_opterr opterr
|
||||
#define opj_optind optind
|
||||
#define opj_optopt optopt
|
||||
#define opj_optreset optreset
|
||||
#define opj_optarg optarg
|
||||
|
||||
typedef struct option opj_option_t;
|
||||
|
||||
#define NO_ARG no_argument
|
||||
#define REQ_ARG required_argument
|
||||
#define OPT_ARG optional_argument
|
||||
|
||||
#define opj_getopt getopt
|
||||
#define opj_getopt_long getopt_long
|
||||
|
||||
#else
|
||||
#ifndef _GETOPT_H_
|
||||
#define _GETOPT_H_
|
||||
|
||||
@@ -9,7 +30,7 @@ typedef struct opj_option
|
||||
int has_arg;
|
||||
int *flag;
|
||||
int val;
|
||||
}opj_option_t;
|
||||
} opj_option_t;
|
||||
|
||||
#define NO_ARG 0
|
||||
#define REQ_ARG 1
|
||||
@@ -27,3 +48,4 @@ extern int opj_getopt_long(int argc, char * const argv[], const char *optstring,
|
||||
extern void reset_options_reading(void);
|
||||
|
||||
#endif /* _GETOPT_H_ */
|
||||
#endif /* USE_SYSTEM_GETOPT */
|
||||
|
||||
@@ -62,7 +62,7 @@ INSTALL(TARGETS openjpip_local
|
||||
|
||||
IF(BUILD_JPIP_SERVER)
|
||||
ADD_LIBRARY(openjpip_server STATIC ${OPENJPIP_SRCS} ${SERVER_SRCS})
|
||||
TARGET_LINK_LIBRARIES(openjpip_server ${FCGI_LIBRARIES} ${CURL_LIBRARIES} ${CMAKE_THREAD_LIBS})
|
||||
TARGET_LINK_LIBRARIES(openjpip_server ${FCGI_LIBRARIES} ${CURL_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
|
||||
SET_TARGET_PROPERTIES(openjpip_server
|
||||
PROPERTIES COMPILE_FLAGS "-DSERVER")
|
||||
INSTALL(TARGETS openjpip_server
|
||||
|
||||
@@ -677,7 +677,7 @@ placeholder_param_t * parse_phld( Byte_t *datastream, Byte8_t metalength)
|
||||
phld = (placeholder_param_t *)malloc( sizeof(placeholder_param_t));
|
||||
|
||||
phld->LBox = big4( datastream);
|
||||
strcpy( phld->TBox, "phld");
|
||||
strncpy( phld->TBox, "phld", 4);
|
||||
phld->Flags = big4( datastream+8);
|
||||
phld->OrigID = big8( datastream+12);
|
||||
phld->OrigBHlen = metalength - 20;
|
||||
|
||||
@@ -57,6 +57,14 @@ ENDFOREACH(exe)
|
||||
# Build the two java clients:
|
||||
FIND_PACKAGE(Java 1.5 COMPONENTS Development) # javac, jar
|
||||
|
||||
# User can override this:
|
||||
if(NOT DEFINED JAVA_SOURCE_VERSION)
|
||||
set(JAVA_SOURCE_VERSION 1.5)
|
||||
endif()
|
||||
if(NOT DEFINED JAVA_TARGET_VERSION)
|
||||
set(JAVA_TARGET_VERSION 1.5)
|
||||
endif()
|
||||
|
||||
# Only build the java viewer if dev is found:
|
||||
if(Java_Development_FOUND AND Java_JAVAC_EXECUTABLE)
|
||||
set(jflags $ENV{JFLAGS})
|
||||
@@ -70,6 +78,7 @@ if(Java_Development_FOUND AND Java_JAVAC_EXECUTABLE)
|
||||
ADD_CUSTOM_COMMAND(
|
||||
OUTPUT ${LIBRARY_OUTPUT_PATH}/opj_viewer.jar
|
||||
COMMAND ${Java_JAVAC_EXECUTABLE} ${jflags}
|
||||
-source ${JAVA_SOURCE_VERSION} -target ${JAVA_TARGET_VERSION}
|
||||
${java1_srcs} -d ${CMAKE_CURRENT_BINARY_DIR}/classes1
|
||||
COMMAND ${Java_JAR_EXECUTABLE} cfm ${LIBRARY_OUTPUT_PATH}/opj_viewer.jar
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/opj_viewer/dist/manifest.txt -C
|
||||
@@ -124,6 +133,7 @@ if(Java_Development_FOUND AND Java_JAVAC_EXECUTABLE)
|
||||
ADD_CUSTOM_COMMAND(
|
||||
OUTPUT ${LIBRARY_OUTPUT_PATH}/opj_viewer_xerces.jar
|
||||
COMMAND ${Java_JAVAC_EXECUTABLE} ${jflags}
|
||||
-source ${JAVA_SOURCE_VERSION} -target ${JAVA_TARGET_VERSION}
|
||||
-classpath ${APACHE_XERCES_JAR}
|
||||
${java2_srcs} -d ${CMAKE_CURRENT_BINARY_DIR}/classes2
|
||||
COMMAND ${Java_JAR_EXECUTABLE} cfm ${LIBRARY_OUTPUT_PATH}/opj_viewer_xerces.jar
|
||||
|
||||
13
configure.ac
13
configure.ac
@@ -7,7 +7,7 @@
|
||||
|
||||
m4_define([OPJ_MAJOR], [1])
|
||||
m4_define([OPJ_MINOR], [5])
|
||||
m4_define([OPJ_MICRO], [0])
|
||||
m4_define([OPJ_MICRO], [2])
|
||||
|
||||
m4_define([lt_cur], m4_eval(OPJ_MAJOR + OPJ_MINOR))
|
||||
m4_define([lt_rev], OPJ_MICRO)
|
||||
@@ -23,7 +23,6 @@ AC_CONFIG_SRCDIR([configure.ac])
|
||||
AC_CONFIG_MACRO_DIR([m4])
|
||||
AC_CONFIG_HEADERS([opj_config.h])
|
||||
|
||||
AC_CANONICAL_SYSTEM
|
||||
AC_CANONICAL_HOST
|
||||
|
||||
AM_INIT_AUTOMAKE([1.11 foreign dist-bzip2 dist-xz dist-zip])
|
||||
@@ -466,8 +465,14 @@ AC_HEADER_DIRENT
|
||||
### Checks for compiler characteristics
|
||||
|
||||
AM_PROG_CC_C_O
|
||||
AC_C_BIGENDIAN
|
||||
|
||||
ac_cv_c_big_endian=0
|
||||
AC_C_BIGENDIAN([ac_cv_c_big_endian=yes], [ac_cv_c_big_endian=no],[])
|
||||
#
|
||||
if test "x${ac_cv_c_big_endian}" = "xyes" ; then
|
||||
AC_DEFINE(OPJ_BIG_ENDIAN, [1], [define to 1 if your machine has BE])
|
||||
AC_DEFINE(WORDS_BIGENDIAN, [1], [define to 1 if your machine has BE])
|
||||
fi
|
||||
#
|
||||
#OPJ_COMPILER_FLAG([-Wall])
|
||||
#OPJ_COMPILER_FLAG([-Wextra])
|
||||
#OPJ_COMPILER_FLAG([-Wshadow])
|
||||
|
||||
@@ -147,7 +147,7 @@ HTML_STYLESHEET =
|
||||
HTML_COLORSTYLE_HUE = 220
|
||||
HTML_COLORSTYLE_SAT = 100
|
||||
HTML_COLORSTYLE_GAMMA = 80
|
||||
HTML_TIMESTAMP = YES
|
||||
HTML_TIMESTAMP = NO
|
||||
HTML_ALIGN_MEMBERS = YES
|
||||
HTML_DYNAMIC_SECTIONS = NO
|
||||
GENERATE_DOCSET = NO
|
||||
|
||||
@@ -148,7 +148,7 @@ HTML_STYLESHEET =
|
||||
HTML_COLORSTYLE_HUE = 220
|
||||
HTML_COLORSTYLE_SAT = 100
|
||||
HTML_COLORSTYLE_GAMMA = 80
|
||||
HTML_TIMESTAMP = YES
|
||||
HTML_TIMESTAMP = NO
|
||||
HTML_ALIGN_MEMBERS = YES
|
||||
HTML_DYNAMIC_SECTIONS = NO
|
||||
GENERATE_DOCSET = NO
|
||||
|
||||
@@ -45,6 +45,11 @@ dist_man3_MANS = \
|
||||
man/man3/libopenjpeg.3
|
||||
|
||||
install-data-hook:
|
||||
@echo -e " (MAN)\t$(man1dir)/image_to_j2k.1" >> $(top_builddir)/report.txt
|
||||
@echo -e " (MAN)\t$(man1dir)/j2k_dump.1" >> $(top_builddir)/report.txt
|
||||
@echo -e " (MAN)\t$(man1dir)/j2k_to_image.1" >> $(top_builddir)/report.txt
|
||||
@echo -e " (MAN)\t$(man3dir)/libopenjpeg.3" >> $(top_builddir)/report.txt
|
||||
if WANT_JPWL
|
||||
cd $(DESTDIR)$(man1dir) && \
|
||||
rm -f jpwl_image_to_j2k.1 && \
|
||||
$(LN_S) image_to_j2k.1 jpwl_image_to_j2k.1
|
||||
@@ -54,18 +59,17 @@ install-data-hook:
|
||||
cd $(DESTDIR)$(man3dir) && \
|
||||
rm -f jpwl_libopenjpeg.3 && \
|
||||
$(LN_S) libopenjpeg.3 jpwl_libopenjpeg.3
|
||||
@echo -e " (MAN)\t$(man1dir)/image_to_j2k.1" >> $(top_builddir)/report.txt
|
||||
@echo -e " (LN)\t$(man1dir)/jpwl_image_to_j2k.1" >> $(top_builddir)/report.txt
|
||||
@echo -e " (MAN)\t$(man1dir)/j2k_dump.1" >> $(top_builddir)/report.txt
|
||||
@echo -e " (MAN)\t$(man1dir)/j2k_to_image.1" >> $(top_builddir)/report.txt
|
||||
@echo -e " (LN)\t$(man1dir)//jpwl_j2k_to_image.1" >> $(top_builddir)/report.txt
|
||||
@echo -e " (MAN)\t$(man3dir)/libopenjpeg.3" >> $(top_builddir)/report.txt
|
||||
@echo -e " (LN)\t$(man3dir)/jpwl_libopenjpeg.3" >> $(top_builddir)/report.txt
|
||||
endif
|
||||
|
||||
uninstall-hook:
|
||||
if WANT_JPWL
|
||||
rm -f $(DESTDIR)$(man1dir)/jpwl_image_to_j2k.1
|
||||
rm -f $(DESTDIR)$(man1dir)/jpwl_j2k_to_image.1
|
||||
rm -f $(DESTDIR)$(man3dir)/jpwl_libopenjpeg.3
|
||||
endif
|
||||
|
||||
EXTRA_DIST = \
|
||||
CMakeLists.txt \
|
||||
|
||||
@@ -62,3 +62,10 @@ INSTALL(FILES openjpeg.h
|
||||
INSTALL(
|
||||
FILES ${OPENJPEG_SOURCE_DIR}/doc/man/man3/libopenjpeg.3
|
||||
DESTINATION ${OPENJPEG_INSTALL_MAN_DIR}/man3)
|
||||
|
||||
# internal utilities to generate t1_luts.h
|
||||
# no need to install:
|
||||
ADD_EXECUTABLE(t1_generate_luts t1_generate_luts.c)
|
||||
IF(UNIX)
|
||||
TARGET_LINK_LIBRARIES(t1_generate_luts m)
|
||||
ENDIF()
|
||||
|
||||
@@ -35,7 +35,6 @@ openjpeg.c \
|
||||
pi.c \
|
||||
raw.c \
|
||||
t1.c \
|
||||
t1_generate_luts.c \
|
||||
t2.c \
|
||||
tcd.c \
|
||||
tgt.c \
|
||||
|
||||
@@ -42,7 +42,7 @@ Write a bit
|
||||
@param bio BIO handle
|
||||
@param b Bit to write (0 or 1)
|
||||
*/
|
||||
static void bio_putbit(opj_bio_t *bio, int b);
|
||||
static void bio_putbit(opj_bio_t *bio, unsigned int b);
|
||||
/**
|
||||
Read a bit
|
||||
@param bio BIO handle
|
||||
@@ -78,7 +78,7 @@ static int bio_byteout(opj_bio_t *bio) {
|
||||
if (bio->bp >= bio->end) {
|
||||
return 1;
|
||||
}
|
||||
*bio->bp++ = bio->buf >> 8;
|
||||
*bio->bp++ = (unsigned char)(bio->buf >> 8);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -92,7 +92,7 @@ static int bio_bytein(opj_bio_t *bio) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void bio_putbit(opj_bio_t *bio, int b) {
|
||||
static void bio_putbit(opj_bio_t *bio, unsigned int b) {
|
||||
if (bio->ct == 0) {
|
||||
bio_byteout(bio);
|
||||
}
|
||||
@@ -126,7 +126,7 @@ void bio_destroy(opj_bio_t *bio) {
|
||||
}
|
||||
|
||||
int bio_numbytes(opj_bio_t *bio) {
|
||||
return (bio->bp - bio->start);
|
||||
return (int)(bio->bp - bio->start);
|
||||
}
|
||||
|
||||
void bio_init_enc(opj_bio_t *bio, unsigned char *bp, int len) {
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
*/
|
||||
|
||||
#include "opj_includes.h"
|
||||
#include <assert.h>
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
@@ -106,6 +107,7 @@ int OPJ_CALLCONV cio_tell(opj_cio_t *cio) {
|
||||
* pos : position, in number of bytes, from the beginning of the stream
|
||||
*/
|
||||
void OPJ_CALLCONV cio_seek(opj_cio_t *cio, int pos) {
|
||||
assert((cio->start + pos) <= cio->end);
|
||||
cio->bp = cio->start + pos;
|
||||
}
|
||||
|
||||
@@ -113,6 +115,7 @@ void OPJ_CALLCONV cio_seek(opj_cio_t *cio, int pos) {
|
||||
* Number of bytes left before the end of the stream.
|
||||
*/
|
||||
int cio_numbytesleft(opj_cio_t *cio) {
|
||||
assert((cio->end - cio->bp) >= 0);
|
||||
return cio->end - cio->bp;
|
||||
}
|
||||
|
||||
@@ -139,6 +142,7 @@ opj_bool cio_byteout(opj_cio_t *cio, unsigned char v) {
|
||||
* Read a byte.
|
||||
*/
|
||||
unsigned char cio_bytein(opj_cio_t *cio) {
|
||||
assert(cio->bp >= cio->start);
|
||||
if (cio->bp >= cio->end) {
|
||||
opj_event_msg(cio->cinfo, EVT_ERROR, "read error: passed the end of the codestream (start = %d, current = %d, end = %d\n", cio->start, cio->bp, cio->end);
|
||||
return 0;
|
||||
@@ -173,7 +177,7 @@ unsigned int cio_read(opj_cio_t *cio, int n) {
|
||||
unsigned int v;
|
||||
v = 0;
|
||||
for (i = n - 1; i >= 0; i--) {
|
||||
v += cio_bytein(cio) << (i << 3);
|
||||
v += (unsigned int)cio_bytein(cio) << (i << 3);
|
||||
}
|
||||
return v;
|
||||
}
|
||||
@@ -184,6 +188,10 @@ unsigned int cio_read(opj_cio_t *cio, int n) {
|
||||
* n : number of bytes to skip
|
||||
*/
|
||||
void cio_skip(opj_cio_t *cio, int n) {
|
||||
assert((cio->bp + n) >= cio->bp);
|
||||
if (((cio->bp + n) < cio->start) || ((cio->bp + n) > cio->end)) {
|
||||
assert(0);
|
||||
}
|
||||
cio->bp += n;
|
||||
}
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ opj_image_t* OPJ_CALLCONV opj_image_create(int numcmpts, opj_image_cmptparm_t *c
|
||||
image->color_space = clrspc;
|
||||
image->numcomps = numcmpts;
|
||||
/* allocate memory for the per-component information */
|
||||
image->comps = (opj_image_comp_t*)opj_malloc(image->numcomps * sizeof(opj_image_comp_t));
|
||||
image->comps = (opj_image_comp_t*)opj_calloc(1,image->numcomps * sizeof(opj_image_comp_t));
|
||||
if(!image->comps) {
|
||||
fprintf(stderr,"Unable to allocate memory for image.\n");
|
||||
opj_image_destroy(image);
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
*/
|
||||
|
||||
#include "opj_includes.h"
|
||||
#include <assert.h>
|
||||
|
||||
/** @defgroup J2K J2K - JPEG-2000 codestream reader/writer */
|
||||
/*@{*/
|
||||
@@ -404,6 +405,7 @@ static void j2k_write_siz(opj_j2k_t *j2k) {
|
||||
|
||||
static void j2k_read_siz(opj_j2k_t *j2k) {
|
||||
int len, i;
|
||||
int n_comps;
|
||||
|
||||
opj_cio_t *cio = j2k->cio;
|
||||
opj_image_t *image = j2k->image;
|
||||
@@ -422,12 +424,32 @@ static void j2k_read_siz(opj_j2k_t *j2k) {
|
||||
|
||||
if ((image->x0<0)||(image->x1<0)||(image->y0<0)||(image->y1<0)) {
|
||||
opj_event_msg(j2k->cinfo, EVT_ERROR,
|
||||
"%s: invalid image size (x0:%d, x1:%d, y0:%d, y1:%d)\n",
|
||||
"invalid image size (x0:%d, x1:%d, y0:%d, y1:%d)\n",
|
||||
image->x0,image->x1,image->y0,image->y1);
|
||||
return;
|
||||
}
|
||||
|
||||
n_comps = (len - 36 - 2 ) / 3;
|
||||
assert( (len - 36 - 2 ) % 3 == 0 );
|
||||
image->numcomps = cio_read(cio, 2); /* Csiz */
|
||||
assert( n_comps == image->numcomps );
|
||||
|
||||
/* testcase 4035.pdf.SIGSEGV.d8b.3375 */
|
||||
if (image->x0 > image->x1 || image->y0 > image->y1) {
|
||||
opj_event_msg(j2k->cinfo, EVT_ERROR, "Error with SIZ marker: negative image size (%d x %d)\n", image->x1 - image->x0, image->y1 - image->y0);
|
||||
return;
|
||||
}
|
||||
/* testcase 2539.pdf.SIGFPE.706.1712 (also 3622.pdf.SIGFPE.706.2916 and 4008.pdf.SIGFPE.706.3345 and maybe more) */
|
||||
if (!(cp->tdx * cp->tdy)) {
|
||||
opj_event_msg(j2k->cinfo, EVT_ERROR, "Error with SIZ marker: invalid tile size (tdx: %d, tdy: %d)\n", cp->tdx, cp->tdy);
|
||||
return;
|
||||
}
|
||||
|
||||
/* testcase 1610.pdf.SIGSEGV.59c.681 */
|
||||
if (((int64)image->x1) * ((int64)image->y1) != (image->x1 * image->y1)) {
|
||||
opj_event_msg(j2k->cinfo, EVT_ERROR, "Prevent buffer overflow (x1: %d, y1: %d)\n", image->x1, image->y1);
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef USE_JPWL
|
||||
if (j2k->cp->correct) {
|
||||
@@ -466,11 +488,19 @@ static void j2k_read_siz(opj_j2k_t *j2k) {
|
||||
/* update components number in the jpwl_exp_comps filed */
|
||||
cp->exp_comps = image->numcomps;
|
||||
}
|
||||
#else
|
||||
(void)len;
|
||||
#endif /* USE_JPWL */
|
||||
|
||||
/* prevent division by zero */
|
||||
if (!(cp->tdx * cp->tdy)) {
|
||||
opj_event_msg(j2k->cinfo, EVT_ERROR, "invalid tile size (tdx: %d, tdy: %d)\n", cp->tdx, cp->tdy);
|
||||
return;
|
||||
}
|
||||
|
||||
image->comps = (opj_image_comp_t*) opj_calloc(image->numcomps, sizeof(opj_image_comp_t));
|
||||
for (i = 0; i < image->numcomps; i++) {
|
||||
int tmp, w, h;
|
||||
int tmp;
|
||||
tmp = cio_read(cio, 1); /* Ssiz_i */
|
||||
image->comps[i].prec = (tmp & 0x7f) + 1;
|
||||
image->comps[i].sgnd = tmp >> 7;
|
||||
@@ -506,9 +536,11 @@ static void j2k_read_siz(opj_j2k_t *j2k) {
|
||||
}
|
||||
#endif /* USE_JPWL */
|
||||
|
||||
/* TODO: unused ? */
|
||||
w = int_ceildiv(image->x1 - image->x0, image->comps[i].dx);
|
||||
h = int_ceildiv(image->y1 - image->y0, image->comps[i].dy);
|
||||
/* prevent division by zero */
|
||||
if (!(image->comps[i].dx * image->comps[i].dy)) {
|
||||
opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: invalid component size (dx: %d, dy: %d)\n", image->comps[i].dx, image->comps[i].dy);
|
||||
return;
|
||||
}
|
||||
|
||||
image->comps[i].resno_decoded = 0; /* number of resolution decoded */
|
||||
image->comps[i].factor = cp->reduce; /* reducing factor per component */
|
||||
@@ -517,6 +549,15 @@ static void j2k_read_siz(opj_j2k_t *j2k) {
|
||||
cp->tw = int_ceildiv(image->x1 - cp->tx0, cp->tdx);
|
||||
cp->th = int_ceildiv(image->y1 - cp->ty0, cp->tdy);
|
||||
|
||||
/* gdal_fuzzer_check_number_of_tiles.jp2 */
|
||||
if (cp->tw == 0 || cp->th == 0 || cp->tw > 65535 / cp->th) {
|
||||
opj_event_msg(j2k->cinfo, EVT_ERROR,
|
||||
"Invalid number of tiles : %u x %u (maximum fixed by jpeg2000 norm is 65535 tiles)\n",
|
||||
cp->tw, cp->th);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
#ifdef USE_JPWL
|
||||
if (j2k->cp->correct) {
|
||||
/* if JPWL is on, we check whether TX errors have damaged
|
||||
@@ -769,6 +810,7 @@ static void j2k_read_cod(opj_j2k_t *j2k) {
|
||||
opj_image_t *image = j2k->image;
|
||||
|
||||
len = cio_read(cio, 2); /* Lcod */
|
||||
(void)len;
|
||||
tcp->csty = cio_read(cio, 1); /* Scod */
|
||||
tcp->prg = (OPJ_PROG_ORDER)cio_read(cio, 1); /* SGcod (A) */
|
||||
tcp->numlayers = cio_read(cio, 2); /* SGcod (B) */
|
||||
@@ -822,7 +864,14 @@ static void j2k_read_coc(opj_j2k_t *j2k) {
|
||||
opj_cio_t *cio = j2k->cio;
|
||||
|
||||
len = cio_read(cio, 2); /* Lcoc */
|
||||
(void)len;
|
||||
compno = cio_read(cio, image->numcomps <= 256 ? 1 : 2); /* Ccoc */
|
||||
if (compno >= image->numcomps) {
|
||||
opj_event_msg(j2k->cinfo, EVT_ERROR,
|
||||
"bad component number in COC (%d out of a maximum of %d)\n",
|
||||
compno, image->numcomps);
|
||||
return;
|
||||
}
|
||||
tcp->tccps[compno].csty = cio_read(cio, 1); /* Scoc */
|
||||
j2k_read_cox(j2k, compno);
|
||||
}
|
||||
@@ -893,6 +942,8 @@ static void j2k_read_qcx(opj_j2k_t *j2k, int compno, int len) {
|
||||
opj_event_msg(j2k->cinfo, EVT_WARNING ,
|
||||
"bad number of subbands in Sqcx (%d) regarding to J2K_MAXBANDS (%d) \n"
|
||||
"- limiting number of bands to J2K_MAXBANDS and try to move to the next markers\n", numbands, J2K_MAXBANDS);
|
||||
/* edf_c2_1013627.jp2 */
|
||||
numbands = 1;
|
||||
}
|
||||
|
||||
#endif /* USE_JPWL */
|
||||
@@ -1004,9 +1055,16 @@ static void j2k_read_qcc(opj_j2k_t *j2k) {
|
||||
|
||||
/* keep your private count of tiles */
|
||||
backup_compno++;
|
||||
};
|
||||
}
|
||||
#endif /* USE_JPWL */
|
||||
|
||||
if ((compno < 0) || (compno >= numcomp)) {
|
||||
opj_event_msg(j2k->cinfo, EVT_ERROR,
|
||||
"bad component number in QCC (%d out of a maximum of %d)\n",
|
||||
compno, j2k->image->numcomps);
|
||||
return;
|
||||
}
|
||||
|
||||
j2k_read_qcx(j2k, compno, len - 2 - (numcomp <= 256 ? 1 : 2));
|
||||
}
|
||||
|
||||
@@ -1052,6 +1110,15 @@ static void j2k_read_poc(opj_j2k_t *j2k) {
|
||||
len = cio_read(cio, 2); /* Lpoc */
|
||||
numpchgs = (len - 2) / (5 + 2 * (numcomps <= 256 ? 1 : 2));
|
||||
|
||||
if( numpchgs >= 32 )
|
||||
{
|
||||
/* edf_c2_1103421.jp2 */
|
||||
opj_event_msg(j2k->cinfo, EVT_ERROR,
|
||||
"bad number of POCS (%d out of a maximum of %d)\n",
|
||||
numpchgs, 32);
|
||||
numpchgs = 0;
|
||||
}
|
||||
|
||||
for (i = old_poc; i < numpchgs + old_poc; i++) {
|
||||
opj_poc_t *poc;
|
||||
poc = &tcp->pocs[i];
|
||||
@@ -1074,9 +1141,12 @@ static void j2k_read_crg(opj_j2k_t *j2k) {
|
||||
int numcomps = j2k->image->numcomps;
|
||||
|
||||
len = cio_read(cio, 2); /* Lcrg */
|
||||
(void)len;
|
||||
for (i = 0; i < numcomps; i++) {
|
||||
Xcrg_i = cio_read(cio, 2); /* Xcrg_i */
|
||||
(void)Xcrg_i;
|
||||
Ycrg_i = cio_read(cio, 2); /* Ycrg_i */
|
||||
(void)Ycrg_i;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1088,13 +1158,16 @@ static void j2k_read_tlm(opj_j2k_t *j2k) {
|
||||
|
||||
len = cio_read(cio, 2); /* Ltlm */
|
||||
Ztlm = cio_read(cio, 1); /* Ztlm */
|
||||
(void)Ztlm;
|
||||
Stlm = cio_read(cio, 1); /* Stlm */
|
||||
ST = ((Stlm >> 4) & 0x01) + ((Stlm >> 4) & 0x02);
|
||||
SP = (Stlm >> 6) & 0x01;
|
||||
tile_tlm = (len - 4) / ((SP + 1) * 2 + ST);
|
||||
for (i = 0; i < tile_tlm; i++) {
|
||||
Ttlm_i = cio_read(cio, ST); /* Ttlm_i */
|
||||
(void)Ttlm_i;
|
||||
Ptlm_i = cio_read(cio, SP ? 4 : 2); /* Ptlm_i */
|
||||
(void)Ptlm_i;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1105,6 +1178,7 @@ static void j2k_read_plm(opj_j2k_t *j2k) {
|
||||
|
||||
len = cio_read(cio, 2); /* Lplm */
|
||||
Zplm = cio_read(cio, 1); /* Zplm */
|
||||
(void)Zplm;
|
||||
len -= 3;
|
||||
while (len > 0) {
|
||||
Nplm = cio_read(cio, 4); /* Nplm */
|
||||
@@ -1130,6 +1204,7 @@ static void j2k_read_plt(opj_j2k_t *j2k) {
|
||||
|
||||
len = cio_read(cio, 2); /* Lplt */
|
||||
Zplt = cio_read(cio, 1); /* Zplt */
|
||||
(void)Zplt;
|
||||
for (i = len - 3; i > 0; i--) {
|
||||
add = cio_read(cio, 1);
|
||||
packet_len = (packet_len << 7) + add; /* Iplt_i */
|
||||
@@ -1277,6 +1352,7 @@ static void j2k_read_sot(opj_j2k_t *j2k) {
|
||||
opj_cio_t *cio = j2k->cio;
|
||||
|
||||
len = cio_read(cio, 2);
|
||||
(void)len;
|
||||
tileno = cio_read(cio, 2);
|
||||
|
||||
#ifdef USE_JPWL
|
||||
@@ -1513,26 +1589,14 @@ static void j2k_read_sod(opj_j2k_t *j2k) {
|
||||
truncate = 1; /* Case of a truncate codestream */
|
||||
}
|
||||
|
||||
{/* chop padding bytes: */
|
||||
unsigned char *s, *e;
|
||||
|
||||
s = cio_getbp(cio);
|
||||
e = s + len;
|
||||
|
||||
if(len > 8) s = e - 8;
|
||||
|
||||
if(e[-2] == 0x00 && e[-1] == 0x00) /* padding bytes */
|
||||
{
|
||||
while(e > s)
|
||||
{
|
||||
if(e[-2] == 0xff && e[-1] == 0xd9) break;
|
||||
--len; --e; truncate = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
data = j2k->tile_data[curtileno];
|
||||
data_ptr = data; /* store in case of failure */
|
||||
data = (unsigned char*) opj_realloc(data, (j2k->tile_len[curtileno] + len) * sizeof(unsigned char));
|
||||
if( data == NULL ) {
|
||||
opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not reallocated\n" );
|
||||
opj_free( data_ptr );
|
||||
return;
|
||||
}
|
||||
|
||||
data_ptr = data + j2k->tile_len[curtileno];
|
||||
for (i = 0; i < len; i++) {
|
||||
@@ -1572,8 +1636,10 @@ static void j2k_read_rgn(opj_j2k_t *j2k) {
|
||||
int numcomps = j2k->image->numcomps;
|
||||
|
||||
len = cio_read(cio, 2); /* Lrgn */
|
||||
(void)len;
|
||||
compno = cio_read(cio, numcomps <= 256 ? 1 : 2); /* Crgn */
|
||||
roisty = cio_read(cio, 1); /* Srgn */
|
||||
(void)roisty;
|
||||
|
||||
#ifdef USE_JPWL
|
||||
if (j2k->cp->correct) {
|
||||
@@ -1590,6 +1656,13 @@ static void j2k_read_rgn(opj_j2k_t *j2k) {
|
||||
};
|
||||
#endif /* USE_JPWL */
|
||||
|
||||
if (compno >= numcomps) {
|
||||
opj_event_msg(j2k->cinfo, EVT_ERROR,
|
||||
"bad component number in RGN (%d out of a maximum of %d)\n",
|
||||
compno, j2k->image->numcomps);
|
||||
return;
|
||||
}
|
||||
|
||||
tcp->tccps[compno].roishift = cio_read(cio, 1); /* SPrgn */
|
||||
}
|
||||
|
||||
@@ -1620,6 +1693,7 @@ static void j2k_read_eoc(opj_j2k_t *j2k) {
|
||||
{
|
||||
tileno = j2k->cp->tileno[i];
|
||||
success = tcd_decode_tile(tcd, j2k->tile_data[tileno], j2k->tile_len[tileno], tileno, j2k->cstr_info);
|
||||
assert( tileno != -1 );
|
||||
opj_free(j2k->tile_data[tileno]);
|
||||
j2k->tile_data[tileno] = NULL;
|
||||
tcd_free_decode_tile(tcd, i);
|
||||
@@ -1799,8 +1873,11 @@ void j2k_destroy_decompress(opj_j2k_t *j2k) {
|
||||
if(j2k->cp != NULL) {
|
||||
for (i = 0; i < j2k->cp->tileno_size; i++) {
|
||||
int tileno = j2k->cp->tileno[i];
|
||||
opj_free(j2k->tile_data[tileno]);
|
||||
j2k->tile_data[tileno] = NULL;
|
||||
if( tileno != -1 )
|
||||
{
|
||||
opj_free(j2k->tile_data[tileno]);
|
||||
j2k->tile_data[tileno] = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1964,6 +2041,11 @@ opj_image_t* j2k_decode(opj_j2k_t *j2k, opj_cio_t *cio, opj_codestream_info_t *c
|
||||
}
|
||||
if (j2k->state == J2K_STATE_NEOC) {
|
||||
j2k_read_eoc(j2k);
|
||||
/* Check one last time for errors during decoding before returning */
|
||||
if (j2k->state & J2K_STATE_ERR) {
|
||||
opj_image_destroy(image);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (j2k->state != J2K_STATE_MT) {
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#include "opj_includes.h"
|
||||
#include <assert.h>
|
||||
|
||||
/** @defgroup JP2 JP2 - JPEG-2000 file format reader/writer */
|
||||
/*@{*/
|
||||
@@ -172,6 +173,9 @@ static opj_bool jp2_read_boxhdr(opj_common_ptr cinfo, opj_cio_t *cio, opj_jp2_bo
|
||||
}
|
||||
else if (box->length == 0) {
|
||||
box->length = cio_numbytesleft(cio) + 8;
|
||||
} else if (box->length < 0) {
|
||||
opj_event_msg(cinfo, EVT_ERROR, "Integer overflow in box->length\n");
|
||||
return OPJ_FALSE; /* TODO: actually check jp2_read_boxhdr's return value */
|
||||
}
|
||||
|
||||
return OPJ_TRUE;
|
||||
@@ -518,10 +522,8 @@ static opj_bool jp2_read_cmap(opj_jp2_t *jp2, opj_cio_t *cio,
|
||||
static void jp2_apply_cdef(opj_image_t *image, opj_jp2_color_t *color)
|
||||
{
|
||||
opj_jp2_cdef_info_t *info;
|
||||
int color_space;
|
||||
unsigned short i, n, cn, typ, asoc, acn;
|
||||
|
||||
color_space = image->color_space;
|
||||
info = color->jp2_cdef->info;
|
||||
n = color->jp2_cdef->n;
|
||||
|
||||
@@ -531,6 +533,7 @@ static void jp2_apply_cdef(opj_image_t *image, opj_jp2_color_t *color)
|
||||
if((asoc = info[i].asoc) == 0) continue;
|
||||
|
||||
cn = info[i].cn; typ = info[i].typ; acn = asoc - 1;
|
||||
(void)typ;
|
||||
|
||||
if(cn != acn)
|
||||
{
|
||||
@@ -654,6 +657,7 @@ opj_bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, opj_jp2_color_t *color)
|
||||
opj_event_msg(cinfo, EVT_ERROR, "Expected JP2H Marker\n");
|
||||
return OPJ_FALSE;
|
||||
}
|
||||
if (box.length <= 8) return OPJ_FALSE;
|
||||
cio_skip(cio, box.length - 8);
|
||||
|
||||
if(cio->bp >= cio->end) return OPJ_FALSE;
|
||||
@@ -679,6 +683,7 @@ opj_bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, opj_jp2_color_t *color)
|
||||
{
|
||||
if( !jp2_read_colr(jp2, cio, &box, color))
|
||||
{
|
||||
if (box.length <= 8) return OPJ_FALSE;
|
||||
cio_seek(cio, box.init_pos + 8);
|
||||
cio_skip(cio, box.length - 8);
|
||||
}
|
||||
@@ -689,6 +694,7 @@ opj_bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, opj_jp2_color_t *color)
|
||||
{
|
||||
if( !jp2_read_cdef(jp2, cio, &box, color))
|
||||
{
|
||||
if (box.length <= 8) return OPJ_FALSE;
|
||||
cio_seek(cio, box.init_pos + 8);
|
||||
cio_skip(cio, box.length - 8);
|
||||
}
|
||||
@@ -699,6 +705,7 @@ opj_bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, opj_jp2_color_t *color)
|
||||
{
|
||||
if( !jp2_read_pclr(jp2, cio, &box, color))
|
||||
{
|
||||
if (box.length <= 8) return OPJ_FALSE;
|
||||
cio_seek(cio, box.init_pos + 8);
|
||||
cio_skip(cio, box.length - 8);
|
||||
}
|
||||
@@ -709,12 +716,14 @@ opj_bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, opj_jp2_color_t *color)
|
||||
{
|
||||
if( !jp2_read_cmap(jp2, cio, &box, color))
|
||||
{
|
||||
if (box.length <= 8) return OPJ_FALSE;
|
||||
cio_seek(cio, box.init_pos + 8);
|
||||
cio_skip(cio, box.length - 8);
|
||||
}
|
||||
if( jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE ) return OPJ_FALSE;
|
||||
continue;
|
||||
}
|
||||
if (box.length <= 8) return OPJ_FALSE;
|
||||
cio_seek(cio, box.init_pos + 8);
|
||||
cio_skip(cio, box.length - 8);
|
||||
if( jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE ) return OPJ_FALSE;
|
||||
@@ -728,6 +737,84 @@ opj_bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, opj_jp2_color_t *color)
|
||||
|
||||
}/* jp2_read_jp2h() */
|
||||
|
||||
static opj_bool opj_jp2_check_color(opj_image_t *image, opj_jp2_color_t *color, opj_common_ptr cinfo)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* testcase 4149.pdf.SIGSEGV.cf7.3501 */
|
||||
if (color->jp2_cdef) {
|
||||
opj_jp2_cdef_info_t *info = color->jp2_cdef->info;
|
||||
int n = color->jp2_cdef->n;
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
if (info[i].cn >= image->numcomps) {
|
||||
opj_event_msg(cinfo, EVT_ERROR, "Invalid component index %d (>= %d).\n", info[i].cn, image->numcomps);
|
||||
return OPJ_FALSE;
|
||||
}
|
||||
if (info[i].asoc > 0 && (info[i].asoc - 1) >= image->numcomps) {
|
||||
opj_event_msg(cinfo, EVT_ERROR, "Invalid component index %d (>= %d).\n", info[i].asoc - 1, image->numcomps);
|
||||
return OPJ_FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* testcases 451.pdf.SIGSEGV.f4c.3723, 451.pdf.SIGSEGV.5b5.3723 and
|
||||
66ea31acbb0f23a2bbc91f64d69a03f5_signal_sigsegv_13937c0_7030_5725.pdf */
|
||||
if (color->jp2_pclr && color->jp2_pclr->cmap) {
|
||||
int nr_channels = color->jp2_pclr->nr_channels;
|
||||
opj_jp2_cmap_comp_t *cmap = color->jp2_pclr->cmap;
|
||||
opj_bool *pcol_usage, is_sane = OPJ_TRUE;
|
||||
|
||||
/* verify that all original components match an existing one */
|
||||
for (i = 0; i < nr_channels; i++) {
|
||||
if (cmap[i].cmp >= image->numcomps) {
|
||||
opj_event_msg(cinfo, EVT_ERROR, "Invalid component index %d (>= %d).\n", cmap[i].cmp, image->numcomps);
|
||||
is_sane = OPJ_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
pcol_usage = opj_calloc(nr_channels, sizeof(opj_bool));
|
||||
if (!pcol_usage) {
|
||||
opj_event_msg(cinfo, EVT_ERROR, "Unexpected OOM.\n");
|
||||
return OPJ_FALSE;
|
||||
}
|
||||
/* verify that no component is targeted more than once */
|
||||
for (i = 0; i < nr_channels; i++) {
|
||||
int pcol = cmap[i].pcol;
|
||||
assert(cmap[i].mtyp == 0 || cmap[i].mtyp == 1);
|
||||
if (pcol >= nr_channels) {
|
||||
opj_event_msg(cinfo, EVT_ERROR, "Invalid component/palette index for direct mapping %d.\n", pcol);
|
||||
is_sane = OPJ_FALSE;
|
||||
}
|
||||
else if (pcol_usage[pcol] && cmap[i].mtyp == 1) {
|
||||
opj_event_msg(cinfo, EVT_ERROR, "Component %d is mapped twice.\n", pcol);
|
||||
is_sane = OPJ_FALSE;
|
||||
}
|
||||
else if (cmap[i].mtyp == 0 && cmap[i].pcol != 0) {
|
||||
/* I.5.3.5 PCOL: If the value of the MTYP field for this channel is 0, then
|
||||
* the value of this field shall be 0. */
|
||||
opj_event_msg(cinfo, EVT_ERROR, "Direct use at #%d however pcol=%d.\n", i, pcol);
|
||||
is_sane = OPJ_FALSE;
|
||||
}
|
||||
else
|
||||
pcol_usage[pcol] = OPJ_TRUE;
|
||||
}
|
||||
/* verify that all components are targeted at least once */
|
||||
for (i = 0; i < nr_channels; i++) {
|
||||
if (!pcol_usage[i] && cmap[i].mtyp != 0) {
|
||||
opj_event_msg(cinfo, EVT_ERROR, "Component %d doesn't have a mapping.\n", i);
|
||||
is_sane = OPJ_FALSE;
|
||||
}
|
||||
}
|
||||
opj_free(pcol_usage);
|
||||
if (!is_sane) {
|
||||
return OPJ_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
return OPJ_TRUE;
|
||||
}
|
||||
|
||||
opj_image_t* opj_jp2_decode(opj_jp2_t *jp2, opj_cio_t *cio,
|
||||
opj_codestream_info_t *cstr_info)
|
||||
{
|
||||
@@ -761,6 +848,10 @@ opj_image_t* opj_jp2_decode(opj_jp2_t *jp2, opj_cio_t *cio,
|
||||
}
|
||||
|
||||
if (!jp2->ignore_pclr_cmap_cdef){
|
||||
if (!opj_jp2_check_color(image, &color, cinfo)) {
|
||||
opj_event_msg(cinfo, EVT_ERROR, "Failed to decode PCRL box\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Set Image Color Space */
|
||||
if (jp2->enumcs == 16)
|
||||
@@ -856,6 +947,14 @@ static opj_bool jp2_read_ftyp(opj_jp2_t *jp2, opj_cio_t *cio) {
|
||||
jp2->brand = cio_read(cio, 4); /* BR */
|
||||
jp2->minversion = cio_read(cio, 4); /* MinV */
|
||||
jp2->numcl = (box.length - 16) / 4;
|
||||
|
||||
/* edf_c2_1673169.jp2 */
|
||||
if (cio_numbytesleft(cio) < ((int)jp2->numcl * 4)) {
|
||||
opj_event_msg(cinfo, EVT_ERROR, "Not enough bytes in FTYP Box "
|
||||
"(expected %d, but only %d left)\n",
|
||||
((int)jp2->numcl * 4), cio_numbytesleft(cio));
|
||||
return OPJ_FALSE;
|
||||
}
|
||||
jp2->cl = (unsigned int *) opj_malloc(jp2->numcl * sizeof(unsigned int));
|
||||
|
||||
for (i = 0; i < (int)jp2->numcl; i++) {
|
||||
@@ -910,12 +1009,14 @@ static opj_bool jp2_read_jp2c(opj_jp2_t *jp2, opj_cio_t *cio, unsigned int *j2k_
|
||||
}
|
||||
do {
|
||||
if(JP2_JP2C != box.type) {
|
||||
if (box.length <= 8) return OPJ_FALSE;
|
||||
cio_skip(cio, box.length - 8);
|
||||
if( jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE ) return OPJ_FALSE;
|
||||
}
|
||||
} while(JP2_JP2C != box.type);
|
||||
|
||||
*j2k_codestream_offset = cio_tell(cio);
|
||||
if (box.length <= 8) return OPJ_FALSE;
|
||||
*j2k_codestream_length = box.length - 8;
|
||||
|
||||
return OPJ_TRUE;
|
||||
@@ -1083,6 +1184,7 @@ void jp2_setup_decoder(opj_jp2_t *jp2, opj_dparameters_t *parameters) {
|
||||
opj_jp2_t* jp2_create_compress(opj_common_ptr cinfo) {
|
||||
opj_jp2_t *jp2 = (opj_jp2_t*)opj_malloc(sizeof(opj_jp2_t));
|
||||
if(jp2) {
|
||||
memset(jp2, 0, sizeof(opj_jp2_t));
|
||||
jp2->cinfo = cinfo;
|
||||
/* create the J2K codec */
|
||||
jp2->j2k = j2k_create_compress(cinfo);
|
||||
|
||||
@@ -18,7 +18,6 @@ OPJ_SRC = \
|
||||
../pi.c \
|
||||
../raw.c \
|
||||
../t1.c \
|
||||
../t1_generate_luts.c \
|
||||
../t2.c \
|
||||
../tcd.c \
|
||||
../tgt.c \
|
||||
|
||||
@@ -89,18 +89,17 @@ Most compilers implement their own version of this keyword ...
|
||||
/* MSVC and Borland C do not have lrintf */
|
||||
#if defined(_MSC_VER) || defined(__BORLANDC__)
|
||||
static INLINE long lrintf(float f){
|
||||
#ifdef _M_X64
|
||||
return (long)((f>0.0f) ? (f + 0.5f):(f -0.5f));
|
||||
#else
|
||||
int i;
|
||||
#ifdef _M_IX86
|
||||
long int i;
|
||||
|
||||
_asm{
|
||||
fld f
|
||||
fistp i
|
||||
};
|
||||
|
||||
return i;
|
||||
#endif
|
||||
#else
|
||||
return (long)((f>0.0f) ? (f + 0.5f):(f -0.5f));
|
||||
#endif /* _M_IX86 */
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -194,7 +194,7 @@ int main(){
|
||||
|
||||
printf("/* This file was automatically generated by t1_generate_luts.c */\n\n");
|
||||
|
||||
// lut_ctxno_zc
|
||||
/* lut_ctxno_zc */
|
||||
for (j = 0; j < 4; ++j) {
|
||||
for (i = 0; i < 256; ++i) {
|
||||
int orient = j;
|
||||
@@ -215,7 +215,7 @@ int main(){
|
||||
}
|
||||
printf("%i\n};\n\n", lut_ctxno_zc[1023]);
|
||||
|
||||
// lut_ctxno_sc
|
||||
/* lut_ctxno_sc */
|
||||
printf("static char lut_ctxno_sc[256] = {\n ");
|
||||
for (i = 0; i < 255; ++i) {
|
||||
printf("0x%x, ", t1_init_ctxno_sc(i << 4));
|
||||
@@ -224,7 +224,7 @@ int main(){
|
||||
}
|
||||
printf("0x%x\n};\n\n", t1_init_ctxno_sc(255 << 4));
|
||||
|
||||
// lut_spb
|
||||
/* lut_spb */
|
||||
printf("static char lut_spb[256] = {\n ");
|
||||
for (i = 0; i < 255; ++i) {
|
||||
printf("%i, ", t1_init_spb(i << 4));
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
*/
|
||||
|
||||
#include "opj_includes.h"
|
||||
#include <assert.h>
|
||||
|
||||
/** @defgroup T2 T2 - Implementation of a tier-2 coding */
|
||||
/*@{*/
|
||||
@@ -340,13 +341,15 @@ static int t2_decode_packet(opj_t2_t* t2, unsigned char *src, int len, opj_tcd_t
|
||||
int precno = pi->precno; /* precinct value */
|
||||
int layno = pi->layno; /* quality layer value */
|
||||
|
||||
opj_tcd_resolution_t* res = &tile->comps[compno].resolutions[resno];
|
||||
|
||||
unsigned char *hd = NULL;
|
||||
int present;
|
||||
|
||||
opj_bio_t *bio = NULL; /* BIO component */
|
||||
|
||||
|
||||
opj_tcd_resolution_t* res;
|
||||
assert(&tile->comps[compno] != NULL);
|
||||
res = &tile->comps[compno].resolutions[resno];
|
||||
|
||||
if (layno == 0) {
|
||||
for (bandno = 0; bandno < res->numbands; bandno++) {
|
||||
opj_tcd_band_t *band = &res->bands[bandno];
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
|
||||
#define _ISOC99_SOURCE /* lrintf is C99 */
|
||||
#include "opj_includes.h"
|
||||
#include <assert.h>
|
||||
|
||||
void tcd_dump(FILE *fd, opj_tcd_t *tcd, opj_tcd_image_t * img) {
|
||||
int tileno, compno, resno, bandno, precno;/*, cblkno;*/
|
||||
@@ -250,7 +251,9 @@ void tcd_malloc_encode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp, int c
|
||||
cbgwidthexpn = pdx - 1;
|
||||
cbgheightexpn = pdy - 1;
|
||||
}
|
||||
|
||||
(void)brcbgyend;
|
||||
(void)brcbgxend;
|
||||
|
||||
cblkwidthexpn = int_min(tccp->cblkw, cbgwidthexpn);
|
||||
cblkheightexpn = int_min(tccp->cblkh, cbgheightexpn);
|
||||
|
||||
@@ -512,6 +515,8 @@ void tcd_init_encode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp, int cur
|
||||
cbgwidthexpn = pdx - 1;
|
||||
cbgheightexpn = pdy - 1;
|
||||
}
|
||||
(void)brcbgyend;
|
||||
(void)brcbgxend;
|
||||
|
||||
cblkwidthexpn = int_min(tccp->cblkw, cbgwidthexpn);
|
||||
cblkheightexpn = int_min(tccp->cblkh, cbgheightexpn);
|
||||
@@ -760,6 +765,8 @@ void tcd_malloc_decode_tile(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp,
|
||||
cbgwidthexpn = pdx - 1;
|
||||
cbgheightexpn = pdy - 1;
|
||||
}
|
||||
(void)brcbgyend;
|
||||
(void)brcbgxend;
|
||||
|
||||
cblkwidthexpn = int_min(tccp->cblkw, cbgwidthexpn);
|
||||
cblkheightexpn = int_min(tccp->cblkh, cbgheightexpn);
|
||||
@@ -1381,6 +1388,7 @@ opj_bool tcd_decode_tile(opj_tcd_t *tcd, unsigned char *src, int len, int tileno
|
||||
if (l == -999) {
|
||||
eof = 1;
|
||||
opj_event_msg(tcd->cinfo, EVT_ERROR, "tcd_decode: incomplete bistream\n");
|
||||
return OPJ_FALSE;
|
||||
}
|
||||
|
||||
/*------------------TIER1-----------------*/
|
||||
@@ -1401,6 +1409,7 @@ opj_bool tcd_decode_tile(opj_tcd_t *tcd, unsigned char *src, int len, int tileno
|
||||
if (tilec->data == NULL)
|
||||
{
|
||||
opj_event_msg(tcd->cinfo, EVT_ERROR, "Out of memory\n");
|
||||
t1_destroy(t1);
|
||||
return OPJ_FALSE;
|
||||
}
|
||||
|
||||
@@ -1447,6 +1456,13 @@ opj_bool tcd_decode_tile(opj_tcd_t *tcd, unsigned char *src, int len, int tileno
|
||||
int n = (tile->comps[0].x1 - tile->comps[0].x0) * (tile->comps[0].y1 - tile->comps[0].y0);
|
||||
|
||||
if (tile->numcomps >= 3 ){
|
||||
/* testcase 1336.pdf.asan.47.376 */
|
||||
if ((tile->comps[0].x1 - tile->comps[0].x0) * (tile->comps[0].y1 - tile->comps[0].y0) < n ||
|
||||
( tile->comps[1].x1 - tile->comps[1].x0) * (tile->comps[1].y1 - tile->comps[1].y0) < n ||
|
||||
( tile->comps[2].x1 - tile->comps[2].x0) * (tile->comps[2].y1 - tile->comps[2].y0) < n) {
|
||||
opj_event_msg(tcd->cinfo, EVT_ERROR, "Tiles don't all have the same dimension. Skip the MCT step.\n");
|
||||
return OPJ_FALSE;
|
||||
}
|
||||
if (tcd->tcp->tccps[0].qmfbid == 1) {
|
||||
mct_decode(
|
||||
tile->comps[0].data,
|
||||
@@ -1478,10 +1494,19 @@ opj_bool tcd_decode_tile(opj_tcd_t *tcd, unsigned char *src, int len, int tileno
|
||||
int tw = tilec->x1 - tilec->x0;
|
||||
int w = imagec->w;
|
||||
|
||||
int i, j;
|
||||
int offset_x = int_ceildivpow2(imagec->x0, imagec->factor);
|
||||
int offset_y = int_ceildivpow2(imagec->y0, imagec->factor);
|
||||
/* NR-DEC-2977.pdf.asan.67.2198.jp2-52-decode */
|
||||
if( res->x0 - offset_x < 0 || res->x1 - offset_x < 0
|
||||
|| res->y0 - offset_y < 0 || res->y1 - offset_y < 0 )
|
||||
{
|
||||
opj_event_msg(tcd->cinfo, EVT_ERROR, "Impossible offsets %d / %d\n", offset_x, offset_y);
|
||||
return OPJ_FALSE;
|
||||
}
|
||||
assert( 0 <= res->x0 - offset_x && 0 <= res->x1 - offset_x );
|
||||
assert( 0 <= res->y0 - offset_y && 0 <= res->y1 - offset_y );
|
||||
|
||||
int i, j;
|
||||
if(!imagec->data){
|
||||
imagec->data = (int*) opj_malloc(imagec->w * imagec->h * sizeof(int));
|
||||
}
|
||||
@@ -1495,6 +1520,7 @@ opj_bool tcd_decode_tile(opj_tcd_t *tcd, unsigned char *src, int len, int tileno
|
||||
for(i = res->x0; i < res->x1; ++i) {
|
||||
int v = tilec->data[i - res->x0 + (j - res->y0) * tw];
|
||||
v += adjust;
|
||||
/*assert( (i - offset_x) + (j - offset_y) * w >= 0 );*/
|
||||
imagec->data[(i - offset_x) + (j - offset_y) * w] = int_clamp(v, min, max);
|
||||
}
|
||||
}
|
||||
@@ -1504,6 +1530,7 @@ opj_bool tcd_decode_tile(opj_tcd_t *tcd, unsigned char *src, int len, int tileno
|
||||
float tmp = ((float*)tilec->data)[i - res->x0 + (j - res->y0) * tw];
|
||||
int v = lrintf(tmp);
|
||||
v += adjust;
|
||||
/*assert( (i - offset_x) + (j - offset_y) * w >= 0 );*/
|
||||
imagec->data[(i - offset_x) + (j - offset_y) * w] = int_clamp(v, min, max);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,16 +21,28 @@ __opj_func=$4
|
||||
__opj_have_dep="no"
|
||||
|
||||
save_CPPFLAGS=${CPPFLAGS}
|
||||
save_LDFLAGS=${LDFLAGS}
|
||||
save_LIBS=${LIBS}
|
||||
|
||||
if test "x${__opj_prefix}" = "x" ; then
|
||||
if test "x$UP[_CFLAGS]" != "x"; then
|
||||
CPPFLAGS="${CPPFLAGS} $UP[_CFLAGS]"
|
||||
LDFLAGS="${LDFLAGS} $UP[_LIBS]"
|
||||
else
|
||||
CPPFLAGS="${CPPFLAGS} -I${__opj_prefix}/include"
|
||||
LDFLAGS="${LDFLAGS} -L${__opj_prefix}/lib"
|
||||
LIBS="${LIBS} -l${__opj_lib}"
|
||||
if test "x${__opj_prefix}" != "x" ; then
|
||||
__opj_CPPFLAGS="-I${__opj_prefix}/include"
|
||||
else
|
||||
__opj_CPPFLAGS=""
|
||||
fi
|
||||
CPPFLAGS="${CPPFLAGS} ${__opj_CPPFLAGS}"
|
||||
fi
|
||||
|
||||
if test "x$UP[_LIBS]" != "x"; then
|
||||
LIBS="${LIBS} $UP[_LIBS]"
|
||||
else
|
||||
if test "x${__opj_prefix}" != "x" ; then
|
||||
__opj_LIBS="-L${__opj_prefix}/lib -l${__opj_lib}"
|
||||
else
|
||||
__opj_LIBS="-l${__opj_lib}"
|
||||
fi
|
||||
LIBS="${LIBS} ${__opj_LIBS}"
|
||||
fi
|
||||
|
||||
AC_LINK_IFELSE(
|
||||
@@ -45,7 +57,6 @@ ${__opj_func}();
|
||||
[__opj_have_dep="no"])
|
||||
|
||||
CPPFLAGS=${save_CPPFLAGS}
|
||||
LDFLAGS=${save_LDFLAGS}
|
||||
LIBS=${save_LIBS}
|
||||
|
||||
if test "x${__opj_prefix}" = "x" ; then
|
||||
@@ -55,12 +66,12 @@ else
|
||||
fi
|
||||
AC_MSG_RESULT([${__opj_have_dep}])
|
||||
|
||||
if test "x${__opj_have_dep}" = "xyes" && ! test "x${__opj_prefix}" = "x"; then
|
||||
if test "x${__opj_have_dep}" = "xyes"; then
|
||||
if test "x${UP[]_CFLAGS}" = "x" ; then
|
||||
UP[]_CFLAGS="-I${__opj_prefix}/include"
|
||||
UP[]_CFLAGS="${__opj_CPPFLAGS}"
|
||||
fi
|
||||
if test "x${UP[]_LIBS}" = "x" ; then
|
||||
UP[]_LIBS="-L${__opj_prefix}/lib -l${__opj_lib}"
|
||||
UP[]_LIBS="${__opj_LIBS}"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#cmakedefine HAVE_LIBLCMS2
|
||||
#cmakedefine HAVE_LCMS1_H
|
||||
#cmakedefine HAVE_LCMS2_H
|
||||
#cmakedefine USE_SYSTEM_GETOPT
|
||||
|
||||
/* Byte order. */
|
||||
/* All compilers that support Mac OS X define either __BIG_ENDIAN__ or
|
||||
|
||||
@@ -11,14 +11,15 @@ INCLUDE_DIRECTORIES(
|
||||
# First thing define the common source:
|
||||
SET(comparePGXimages_SRCS comparePGXimages.c
|
||||
${OPENJPEG_SOURCE_DIR}/applications/codec/convert.c
|
||||
${OPENJPEG_SOURCE_DIR}/applications/common/opj_getopt.c
|
||||
)
|
||||
SET(compare_dump_files_SRCS compare_dump_files.c)
|
||||
SET(compareRAWimages_SRCS compareRAWimages.c)
|
||||
|
||||
SET(compare_dump_files_SRCS compare_dump_files.c
|
||||
${OPENJPEG_SOURCE_DIR}/applications/common/opj_getopt.c)
|
||||
|
||||
SET(compareRAWimages_SRCS compareRAWimages.c
|
||||
${OPENJPEG_SOURCE_DIR}/applications/common/opj_getopt.c)
|
||||
if(NOT USE_SYSTEM_GETOPT)
|
||||
list(APPEND comparePGXimages_SRCS ${OPENJPEG_SOURCE_DIR}/applications/common/opj_getopt.c)
|
||||
list(APPEND compare_dump_files_SRCS ${OPENJPEG_SOURCE_DIR}/applications/common/opj_getopt.c)
|
||||
list(APPEND compareRAWimages_SRCS ${OPENJPEG_SOURCE_DIR}/applications/common/opj_getopt.c)
|
||||
endif()
|
||||
|
||||
ADD_EXECUTABLE(comparePGXimages ${comparePGXimages_SRCS})
|
||||
TARGET_LINK_LIBRARIES(comparePGXimages
|
||||
@@ -51,7 +52,7 @@ IF(BUILD_JPIP)
|
||||
SET(s "${JPIP_SERVER}?target=16.jp2&fsiz=170,170&cnew=http&type=jpp-stream")
|
||||
SET(p "${CMAKE_CURRENT_BINARY_DIR}/jpip.dat")
|
||||
SET(md5 "62b00c620fb0a600c5ffd413cada4674")
|
||||
ADD_TEST(TestJPIP1 ${CMAKE_COMMAND} -DD_URL:STRING=${s} -DD_FILE:PATH=${p}
|
||||
ADD_TEST(NAME TestJPIP1 COMMAND ${CMAKE_COMMAND} -DD_URL:STRING=${s} -DD_FILE:PATH=${p}
|
||||
-DEXPECTED_MD5=${md5} -P ${PROJECT_SOURCE_DIR}/CMake/JPIPTestDriver.cmake)
|
||||
ENDIF(JPIP_SERVER)
|
||||
ENDIF(BUILD_JPIP)
|
||||
|
||||
@@ -11,9 +11,9 @@ SET(INPUT_CONF ${OPJ_DATA_ROOT}/input/conformance)
|
||||
# List of components by file (normaly p0_13.j2k have 257 components but for this
|
||||
#set of test we consider only 4)
|
||||
SET( CP0_nbC_list "not_used;1;1;1;3;4;4;3;3;1;3;1;1;4;3;1;1")
|
||||
SET( CP0_ignore_list "not_used;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;0")
|
||||
SET( CP0_ignore_list "not_used;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0")
|
||||
SET( CP1_nbC_list "not_used;1;3;4;1;3;3;2")
|
||||
SET( CP1_ignore_list "not_used;0;1;1;0;1;1;1")
|
||||
SET( CP1_ignore_list "not_used;0;0;0;0;0;0;0")
|
||||
|
||||
SET(COMMENTCODEVAR FALSE)
|
||||
|
||||
@@ -45,7 +45,9 @@ IF(ignore_test_value EQUAL 0)
|
||||
|
||||
# Get corresponding tests parameters
|
||||
list(GET C0P0_ResFactor_list ${numFileC0P0} ResFactor)
|
||||
list(GET CP0_nbC_list ${numFileC0P0} nbComponents)
|
||||
#For Class-0 testing, we always focus on the first component only
|
||||
#list(GET CP0_nbC_list ${numFileC0P0} nbComponents)
|
||||
set( nbComponents "1")
|
||||
list(GET C0P0_PEAK_list ${numFileC0P0} PEAK_limit)
|
||||
list(GET C0P0_MSE_list ${numFileC0P0} MSE_limit)
|
||||
|
||||
@@ -54,15 +56,15 @@ IF(ignore_test_value EQUAL 0)
|
||||
get_filename_component(filenameRefSub ${filenameRef} NAME_WE)
|
||||
#r = 0
|
||||
|
||||
ADD_TEST(ETS-C0P0-${filenameInput}-r0-decode
|
||||
${EXECUTABLE_OUTPUT_PATH}/j2k_to_image
|
||||
ADD_TEST(NAME ETS-C0P0-${filenameInput}-r0-decode
|
||||
COMMAND j2k_to_image
|
||||
-i ${INPUT_CONF}/${filenameInput}
|
||||
-o ${TEMP}/c0${filenameInput}-r0.pgx
|
||||
-r 0
|
||||
)
|
||||
|
||||
ADD_TEST(ETS-C0P0-${filenameInput}-r0-compare2ref
|
||||
${EXECUTABLE_OUTPUT_PATH}/comparePGXimages
|
||||
ADD_TEST(NAME ETS-C0P0-${filenameInput}-r0-compare2ref
|
||||
COMMAND comparePGXimages
|
||||
-b ${BASELINE_CONF}/${filenameRefSub}r0.pgx
|
||||
-t ${TEMP}/c0${filenameInput}-r0.pgx
|
||||
-n ${nbComponents}
|
||||
@@ -75,8 +77,8 @@ IF(ignore_test_value EQUAL 0)
|
||||
PROPERTIES DEPENDS
|
||||
ETS-C0P0-${filenameInput}-r0-decode)
|
||||
|
||||
ADD_TEST(NR-C0P0-${filenameInput}-r0-compare2base
|
||||
${EXECUTABLE_OUTPUT_PATH}/comparePGXimages
|
||||
ADD_TEST(NAME NR-C0P0-${filenameInput}-r0-compare2base
|
||||
COMMAND comparePGXimages
|
||||
-b ${BASELINE_NR}/opj_${filenameRefSub}-r0.pgx
|
||||
-t ${TEMP}/c0${filenameInput}-r0.pgx
|
||||
-n ${nbComponents}
|
||||
@@ -89,15 +91,15 @@ IF(ignore_test_value EQUAL 0)
|
||||
ETS-C0P0-${filenameInput}-r0-decode)
|
||||
|
||||
#r = 1
|
||||
ADD_TEST(ETS-C0P0-${filenameInput}-r1-decode
|
||||
${EXECUTABLE_OUTPUT_PATH}/j2k_to_image
|
||||
ADD_TEST(NAME ETS-C0P0-${filenameInput}-r1-decode
|
||||
COMMAND j2k_to_image
|
||||
-i ${INPUT_CONF}/${filenameInput}
|
||||
-o ${TEMP}/c0${filenameInput}-r1.pgx
|
||||
-r 1
|
||||
)
|
||||
|
||||
ADD_TEST(ETS-C0P0-${filenameInput}-r1-compare2ref
|
||||
${EXECUTABLE_OUTPUT_PATH}/comparePGXimages
|
||||
ADD_TEST(NAME ETS-C0P0-${filenameInput}-r1-compare2ref
|
||||
COMMAND comparePGXimages
|
||||
-b ${BASELINE_CONF}/${filenameRefSub}r1.pgx
|
||||
-t ${TEMP}/c0${filenameInput}-r1.pgx
|
||||
-n ${nbComponents}
|
||||
@@ -110,8 +112,8 @@ IF(ignore_test_value EQUAL 0)
|
||||
PROPERTIES DEPENDS
|
||||
ETS-C0P0-${filenameInput}-r1-decode)
|
||||
|
||||
ADD_TEST(NR-C0P0-${filenameInput}-r1-compare2base
|
||||
${EXECUTABLE_OUTPUT_PATH}/comparePGXimages
|
||||
ADD_TEST(NAME NR-C0P0-${filenameInput}-r1-compare2base
|
||||
COMMAND comparePGXimages
|
||||
-b ${BASELINE_NR}/opj_${filenameRefSub}-r1.pgx
|
||||
-t ${TEMP}/c0${filenameInput}-r1.pgx
|
||||
-n ${nbComponents}
|
||||
@@ -125,15 +127,15 @@ IF(ignore_test_value EQUAL 0)
|
||||
|
||||
ELSE(numFileC0P0 EQUAL 3 OR numFileC0P0 EQUAL 15)
|
||||
|
||||
ADD_TEST(ETS-C0P0-${filenameInput}-decode
|
||||
${EXECUTABLE_OUTPUT_PATH}/j2k_to_image
|
||||
ADD_TEST(NAME ETS-C0P0-${filenameInput}-decode
|
||||
COMMAND j2k_to_image
|
||||
-i ${INPUT_CONF}/${filenameInput}
|
||||
-o ${TEMP}/c0${filenameInput}.pgx
|
||||
-r ${ResFactor}
|
||||
)
|
||||
|
||||
ADD_TEST(ETS-C0P0-${filenameInput}-compare2ref
|
||||
${EXECUTABLE_OUTPUT_PATH}/comparePGXimages
|
||||
ADD_TEST(NAME ETS-C0P0-${filenameInput}-compare2ref
|
||||
COMMAND comparePGXimages
|
||||
-b ${BASELINE_CONF}/${filenameRef}
|
||||
-t ${TEMP}/c0${filenameInput}.pgx
|
||||
-n ${nbComponents}
|
||||
@@ -146,8 +148,8 @@ IF(ignore_test_value EQUAL 0)
|
||||
PROPERTIES DEPENDS
|
||||
ETS-C0P0-${filenameInput}-decode)
|
||||
|
||||
ADD_TEST(NR-C0P0-${filenameInput}-compare2base
|
||||
${EXECUTABLE_OUTPUT_PATH}/comparePGXimages
|
||||
ADD_TEST(NAME NR-C0P0-${filenameInput}-compare2base
|
||||
COMMAND comparePGXimages
|
||||
-b ${BASELINE_NR}/opj_${filenameRef}
|
||||
-t ${TEMP}/c0${filenameInput}.pgx
|
||||
-n ${nbComponents}
|
||||
@@ -187,7 +189,9 @@ IF(ignore_test_value2 EQUAL 0)
|
||||
|
||||
# Get corresponding tests parameters
|
||||
list(GET C0P1_ResFactor_list ${numFileC0P1} ResFactor)
|
||||
list(GET CP1_nbC_list ${numFileC0P1} nbComponents)
|
||||
#For Class-0 testing, we always focus on the first component only
|
||||
#list(GET CP0_nbC_list ${numFileC0P0} nbComponents)
|
||||
set( nbComponents "1")
|
||||
list(GET C0P1_PEAK_list ${numFileC0P1} PEAK_limit)
|
||||
list(GET C0P1_MSE_list ${numFileC0P1} MSE_limit)
|
||||
|
||||
@@ -196,15 +200,15 @@ IF(ignore_test_value2 EQUAL 0)
|
||||
get_filename_component(filenameRefSub ${filenameRef} NAME_WE)
|
||||
|
||||
#r = 0
|
||||
ADD_TEST(ETS-C0P1-${filenameInput}-r0-decode
|
||||
${EXECUTABLE_OUTPUT_PATH}/j2k_to_image
|
||||
ADD_TEST(NAME ETS-C0P1-${filenameInput}-r0-decode
|
||||
COMMAND j2k_to_image
|
||||
-i ${INPUT_CONF}/${filenameInput}
|
||||
-o ${TEMP}/c0${filenameInput}-r0.pgx
|
||||
-r 0
|
||||
)
|
||||
|
||||
ADD_TEST(ETS-C0P1-${filenameInput}-r0-compare2ref
|
||||
${EXECUTABLE_OUTPUT_PATH}/comparePGXimages
|
||||
ADD_TEST(NAME ETS-C0P1-${filenameInput}-r0-compare2ref
|
||||
COMMAND comparePGXimages
|
||||
-b ${BASELINE_CONF}/${filenameRefSub}r0.pgx
|
||||
-t ${TEMP}/c0${filenameInput}-r0.pgx
|
||||
-n ${nbComponents}
|
||||
@@ -217,8 +221,8 @@ IF(ignore_test_value2 EQUAL 0)
|
||||
PROPERTIES DEPENDS
|
||||
ETS-C0P1-${filenameInput}-r0-decode)
|
||||
|
||||
ADD_TEST(NR-C0P1-${filenameInput}-r0-compare2base
|
||||
${EXECUTABLE_OUTPUT_PATH}/comparePGXimages
|
||||
ADD_TEST(NAME NR-C0P1-${filenameInput}-r0-compare2base
|
||||
COMMAND comparePGXimages
|
||||
-b ${BASELINE_NR}/opj_${filenameRefSub}-r0.pgx
|
||||
-t ${TEMP}/c0${filenameInput}-r0.pgx
|
||||
-n ${nbComponents}
|
||||
@@ -231,15 +235,15 @@ IF(ignore_test_value2 EQUAL 0)
|
||||
ETS-C0P1-${filenameInput}-r0-decode)
|
||||
|
||||
#r = 3
|
||||
ADD_TEST(ETS-C0P1-${filenameInput}-r3-decode
|
||||
${EXECUTABLE_OUTPUT_PATH}/j2k_to_image
|
||||
ADD_TEST(NAME ETS-C0P1-${filenameInput}-r3-decode
|
||||
COMMAND j2k_to_image
|
||||
-i ${INPUT_CONF}/${filenameInput}
|
||||
-o ${TEMP}/c0${filenameInput}-r3.pgx
|
||||
-r 3
|
||||
)
|
||||
|
||||
ADD_TEST(ETS-C0P1-${filenameInput}-r3-compare2ref
|
||||
${EXECUTABLE_OUTPUT_PATH}/comparePGXimages
|
||||
ADD_TEST(NAME ETS-C0P1-${filenameInput}-r3-compare2ref
|
||||
COMMAND comparePGXimages
|
||||
-b ${BASELINE_CONF}/${filenameRefSub}r3.pgx
|
||||
-t ${TEMP}/c0${filenameInput}-r3.pgx
|
||||
-n ${nbComponents}
|
||||
@@ -252,8 +256,8 @@ IF(ignore_test_value2 EQUAL 0)
|
||||
PROPERTIES DEPENDS
|
||||
ETS-C0P1-${filenameInput}-r3-decode)
|
||||
|
||||
ADD_TEST(NR-C0P1-${filenameInput}-r3-compare2base
|
||||
${EXECUTABLE_OUTPUT_PATH}/comparePGXimages
|
||||
ADD_TEST(NAME NR-C0P1-${filenameInput}-r3-compare2base
|
||||
COMMAND comparePGXimages
|
||||
-b ${BASELINE_NR}/opj_${filenameRefSub}-r3.pgx
|
||||
-t ${TEMP}/c0${filenameInput}-r3.pgx
|
||||
-n ${nbComponents}
|
||||
@@ -267,15 +271,15 @@ IF(ignore_test_value2 EQUAL 0)
|
||||
|
||||
ELSE(numFileC0P1 EQUAL 4)
|
||||
|
||||
ADD_TEST(ETS-C0P1-${filenameInput}-decode
|
||||
${EXECUTABLE_OUTPUT_PATH}/j2k_to_image
|
||||
ADD_TEST(NAME ETS-C0P1-${filenameInput}-decode
|
||||
COMMAND j2k_to_image
|
||||
-i ${INPUT_CONF}/${filenameInput}
|
||||
-o ${TEMP}/c0${filenameInput}.pgx
|
||||
-r ${ResFactor}
|
||||
)
|
||||
|
||||
ADD_TEST(ETS-C0P1-${filenameInput}-compare2ref
|
||||
${EXECUTABLE_OUTPUT_PATH}/comparePGXimages
|
||||
ADD_TEST(NAME ETS-C0P1-${filenameInput}-compare2ref
|
||||
COMMAND comparePGXimages
|
||||
-b ${BASELINE_CONF}/${filenameRef}
|
||||
-t ${TEMP}/c0${filenameInput}.pgx
|
||||
-n ${nbComponents}
|
||||
@@ -288,8 +292,8 @@ IF(ignore_test_value2 EQUAL 0)
|
||||
PROPERTIES DEPENDS
|
||||
ETS-C0P1-${filenameInput}-decode)
|
||||
|
||||
ADD_TEST(NR-C0P1-${filenameInput}-compare2base
|
||||
${EXECUTABLE_OUTPUT_PATH}/comparePGXimages
|
||||
ADD_TEST(NAME NR-C0P1-${filenameInput}-compare2base
|
||||
COMMAND comparePGXimages
|
||||
-b ${BASELINE_NR}/opj_${filenameRef}
|
||||
-t ${TEMP}/c0${filenameInput}.pgx
|
||||
-n ${nbComponents}
|
||||
@@ -335,15 +339,15 @@ FOREACH(numFileC1P0 RANGE 1 16)
|
||||
list(GET C1P0_PEAK_list ${numFileC1P0} PEAK_limit)
|
||||
list(GET C1P0_MSE_list ${numFileC1P0} MSE_limit)
|
||||
|
||||
ADD_TEST(ETS-C1P0-${filenameInput}-decode
|
||||
${EXECUTABLE_OUTPUT_PATH}/j2k_to_image
|
||||
ADD_TEST(NAME ETS-C1P0-${filenameInput}-decode
|
||||
COMMAND j2k_to_image
|
||||
-i ${INPUT_CONF}/${filenameInput}
|
||||
-o ${TEMP}/c1${filenameInput}.pgx
|
||||
-r ${ResFactor}
|
||||
)
|
||||
|
||||
ADD_TEST(ETS-C1P0-${filenameInput}-compare2ref
|
||||
${EXECUTABLE_OUTPUT_PATH}/comparePGXimages
|
||||
ADD_TEST(NAME ETS-C1P0-${filenameInput}-compare2ref
|
||||
COMMAND comparePGXimages
|
||||
-b ${BASELINE_CONF}/${filenameRef}
|
||||
-t ${TEMP}/c1${filenameInput}.pgx
|
||||
-n ${nbComponents}
|
||||
@@ -356,8 +360,8 @@ FOREACH(numFileC1P0 RANGE 1 16)
|
||||
PROPERTIES DEPENDS
|
||||
ETS-C1P0-${filenameInput}-decode)
|
||||
|
||||
ADD_TEST(NR-C1P0-${filenameInput}-compare2base
|
||||
${EXECUTABLE_OUTPUT_PATH}/comparePGXimages
|
||||
ADD_TEST(NAME NR-C1P0-${filenameInput}-compare2base
|
||||
COMMAND comparePGXimages
|
||||
-b ${BASELINE_NR}/opj_${filenameRef}
|
||||
-t ${TEMP}/c1${filenameInput}.pgx
|
||||
-n ${nbComponents}
|
||||
@@ -394,15 +398,15 @@ FOREACH(numFileC1P1 RANGE 1 7)
|
||||
list(GET C1P1_PEAK_list ${numFileC1P1} PEAK_limit)
|
||||
list(GET C1P1_MSE_list ${numFileC1P1} MSE_limit)
|
||||
|
||||
ADD_TEST(ETS-C1P1-${filenameInput}-decode
|
||||
${EXECUTABLE_OUTPUT_PATH}/j2k_to_image
|
||||
ADD_TEST(NAME ETS-C1P1-${filenameInput}-decode
|
||||
COMMAND j2k_to_image
|
||||
-i ${INPUT_CONF}/${filenameInput}
|
||||
-o ${TEMP}/c1${filenameInput}.pgx
|
||||
-r 0
|
||||
)
|
||||
|
||||
ADD_TEST(ETS-C1P1-${filenameInput}-compare2ref
|
||||
${EXECUTABLE_OUTPUT_PATH}/comparePGXimages
|
||||
ADD_TEST(NAME ETS-C1P1-${filenameInput}-compare2ref
|
||||
COMMAND comparePGXimages
|
||||
-b ${BASELINE_CONF}/${filenameRef}
|
||||
-t ${TEMP}/c1${filenameInput}.pgx
|
||||
-n ${nbComponents}
|
||||
@@ -415,8 +419,8 @@ FOREACH(numFileC1P1 RANGE 1 7)
|
||||
PROPERTIES DEPENDS
|
||||
ETS-C1P1-${filenameInput}-decode)
|
||||
|
||||
ADD_TEST(NR-C1P1-${filenameInput}-compare2base
|
||||
${EXECUTABLE_OUTPUT_PATH}/comparePGXimages
|
||||
ADD_TEST(NAME NR-C1P1-${filenameInput}-compare2base
|
||||
COMMAND comparePGXimages
|
||||
-b ${BASELINE_NR}/opj_${filenameRef}
|
||||
-t ${TEMP}/c1${filenameInput}.pgx
|
||||
-n ${nbComponents}
|
||||
@@ -447,16 +451,16 @@ FOREACH(numFileJP2 RANGE 1 9)
|
||||
# Get corresponding tests parameters
|
||||
list(GET JP2_PEAK_list ${numFileJP2} PEAK_limit)
|
||||
|
||||
ADD_TEST(ETS-JP2-${filenameInput}-decode
|
||||
${EXECUTABLE_OUTPUT_PATH}/j2k_to_image
|
||||
ADD_TEST(NAME ETS-JP2-${filenameInput}-decode
|
||||
COMMAND j2k_to_image
|
||||
-i ${INPUT_CONF}/${filenameInput}
|
||||
-o ${TEMP}/${filenameInput}.tif
|
||||
)
|
||||
#
|
||||
# FIXME: Need to implement a compare tif images function
|
||||
#
|
||||
# ADD_TEST(ETS-JP2-${filenameInput}-compare2ref
|
||||
# ${EXECUTABLE_OUTPUT_PATH}/compareTIFimages
|
||||
# ADD_TEST(NAME ETS-JP2-${filenameInput}-compare2ref
|
||||
# COMMAND compareTIFimages
|
||||
# -b ${BASELINE_CONF}/${filenameRef_tif}
|
||||
# -t ${TEMP}/${filenameInput}.pgx
|
||||
# -p 4
|
||||
@@ -466,8 +470,8 @@ FOREACH(numFileJP2 RANGE 1 9)
|
||||
# PROPERTIES DEPENDS
|
||||
# ETS-JP2-${filenameInput}-decode)
|
||||
#
|
||||
# ADD_TEST(NR-JP2-${filenameInput}-compare2base
|
||||
# ${EXECUTABLE_OUTPUT_PATH}/compareTIFimages
|
||||
# ADD_TEST(NAME NR-JP2-${filenameInput}-compare2base
|
||||
# COMMAND compareTIFimages
|
||||
# -b ${BASELINE_NR}/opj_${filenameRef}
|
||||
# -t ${TEMP}/${filenameInput}.tif
|
||||
# -d
|
||||
@@ -499,14 +503,14 @@ FOREACH(numFileP0 RANGE 1 16)
|
||||
get_filename_component(filenameRefSub ${filenameInput} NAME_WE)
|
||||
|
||||
|
||||
ADD_TEST(NR-${filenameInput}-dump
|
||||
${EXECUTABLE_OUTPUT_PATH}/j2k_dump
|
||||
ADD_TEST(NAME NR-${filenameInput}-dump
|
||||
COMMAND j2k_dump
|
||||
-i ${INPUT_CONF}/${filenameInput}
|
||||
-o ${TEMP}/${filenameInput}.txt
|
||||
)
|
||||
|
||||
ADD_TEST(NR-${filenameInput}-compare_dump2base
|
||||
${EXECUTABLE_OUTPUT_PATH}/compare_dump_files
|
||||
ADD_TEST(NAME NR-${filenameInput}-compare_dump2base
|
||||
COMMAND compare_dump_files
|
||||
-b ${BASELINE_NR}/opj_${filenameRefSub}.txt
|
||||
-t ${TEMP}/${filenameInput}.txt
|
||||
)
|
||||
@@ -528,14 +532,14 @@ FOREACH(numFileP1 RANGE 1 7)
|
||||
SET( filenameInput p1_0${numFileP1}.j2k )
|
||||
get_filename_component(filenameInputSub ${filenameInput} NAME_WE)
|
||||
|
||||
ADD_TEST(NR-${filenameInput}-dump
|
||||
${EXECUTABLE_OUTPUT_PATH}/j2k_dump
|
||||
ADD_TEST(NAME NR-${filenameInput}-dump
|
||||
COMMAND j2k_dump
|
||||
-i ${INPUT_CONF}/${filenameInput}
|
||||
-o ${TEMP}/${filenameInput}.txt
|
||||
)
|
||||
|
||||
ADD_TEST(NR-${filenameInput}-compare_dump2base
|
||||
${EXECUTABLE_OUTPUT_PATH}/compare_dump_files
|
||||
ADD_TEST(NAME NR-${filenameInput}-compare_dump2base
|
||||
COMMAND compare_dump_files
|
||||
-b ${BASELINE_NR}/opj_${filenameInputSub}.txt
|
||||
-t ${TEMP}/${filenameInput}.txt
|
||||
)
|
||||
@@ -557,14 +561,14 @@ FOREACH(numFileJP2 RANGE 1 9)
|
||||
SET( filenameInput "file${numFileJP2}.jp2" )
|
||||
get_filename_component(filenameInputSub ${filenameInput} NAME_WE)
|
||||
|
||||
ADD_TEST(NR-${filenameInput}-dump
|
||||
${EXECUTABLE_OUTPUT_PATH}/j2k_dump
|
||||
ADD_TEST(NAME NR-${filenameInput}-dump
|
||||
COMMAND j2k_dump
|
||||
-i ${INPUT_CONF}/${filenameInput}
|
||||
-o ${TEMP}/${filenameInput}.txt
|
||||
)
|
||||
|
||||
ADD_TEST(NR-${filenameInput}-compare_dump2base
|
||||
${EXECUTABLE_OUTPUT_PATH}/compare_dump_files
|
||||
ADD_TEST(NAME NR-${filenameInput}-compare_dump2base
|
||||
COMMAND compare_dump_files
|
||||
-b ${BASELINE_NR}/opj_${filenameInputSub}.txt
|
||||
-t ${TEMP}/${filenameInput}.txt
|
||||
)
|
||||
@@ -573,4 +577,4 @@ FOREACH(numFileJP2 RANGE 1 9)
|
||||
PROPERTIES DEPENDS
|
||||
NR-${filenameInput}-dump)
|
||||
|
||||
ENDFOREACH(numFileJP2)
|
||||
ENDFOREACH(numFileJP2)
|
||||
|
||||
@@ -166,8 +166,8 @@ FOREACH(OPJ_TEST_CMD_LINE ${OPJ_TEST_CMD_LINE_LIST})
|
||||
math(EXPR IT_TEST_ENC "${IT_TEST_ENC}+1" )
|
||||
|
||||
# Encode an image into the jpeg2000 format
|
||||
ADD_TEST(NR-ENC-${INPUT_FILENAME_NAME}-${IT_TEST_ENC}-encode
|
||||
${EXECUTABLE_OUTPUT_PATH}/image_to_j2k
|
||||
ADD_TEST(NAME NR-ENC-${INPUT_FILENAME_NAME}-${IT_TEST_ENC}-encode
|
||||
COMMAND image_to_j2k
|
||||
${CMD_ARG_LIST_2}
|
||||
)
|
||||
|
||||
@@ -176,8 +176,8 @@ FOREACH(OPJ_TEST_CMD_LINE ${OPJ_TEST_CMD_LINE_LIST})
|
||||
ELSE(FAILED_TEST_FOUND)
|
||||
|
||||
# Dump the encoding file
|
||||
ADD_TEST(NR-ENC-${INPUT_FILENAME_NAME}-${IT_TEST_ENC}-dump
|
||||
${EXECUTABLE_OUTPUT_PATH}/j2k_dump
|
||||
ADD_TEST(NAME NR-ENC-${INPUT_FILENAME_NAME}-${IT_TEST_ENC}-dump
|
||||
COMMAND j2k_dump
|
||||
-i ${OUTPUT_FILENAME}
|
||||
-o ${OUTPUT_FILENAME}-ENC-${IT_TEST_ENC}.txt
|
||||
)
|
||||
@@ -186,8 +186,8 @@ FOREACH(OPJ_TEST_CMD_LINE ${OPJ_TEST_CMD_LINE_LIST})
|
||||
NR-ENC-${INPUT_FILENAME_NAME}-${IT_TEST_ENC}-encode)
|
||||
|
||||
# Compare the dump file with the baseline
|
||||
ADD_TEST(NR-ENC-${INPUT_FILENAME_NAME}-${IT_TEST_ENC}-compare_dump2base
|
||||
${EXECUTABLE_OUTPUT_PATH}/compare_dump_files
|
||||
ADD_TEST(NAME NR-ENC-${INPUT_FILENAME_NAME}-${IT_TEST_ENC}-compare_dump2base
|
||||
COMMAND compare_dump_files
|
||||
-b ${BASELINE_NR}/opj_${OUTPUT_FILENAME_NAME_WE}-ENC-${IT_TEST_ENC}.txt
|
||||
-t ${OUTPUT_FILENAME}-ENC-${IT_TEST_ENC}.txt
|
||||
)
|
||||
@@ -198,8 +198,8 @@ FOREACH(OPJ_TEST_CMD_LINE ${OPJ_TEST_CMD_LINE_LIST})
|
||||
|
||||
# Decode the encoding file with kakadu expand command
|
||||
IF (KDU_EXPAND_EXECUTABLE)
|
||||
ADD_TEST(NR-ENC-${INPUT_FILENAME_NAME}-${IT_TEST_ENC}-decode-ref
|
||||
${KDU_EXPAND_EXECUTABLE}
|
||||
ADD_TEST(NAME NR-ENC-${INPUT_FILENAME_NAME}-${IT_TEST_ENC}-decode-ref
|
||||
COMMAND ${KDU_EXPAND_EXECUTABLE}
|
||||
-i ${OUTPUT_FILENAME}
|
||||
-o ${OUTPUT_FILENAME}.raw
|
||||
)
|
||||
@@ -209,8 +209,8 @@ FOREACH(OPJ_TEST_CMD_LINE ${OPJ_TEST_CMD_LINE_LIST})
|
||||
NR-ENC-${INPUT_FILENAME_NAME}-${IT_TEST_ENC}-encode)
|
||||
|
||||
# Compare the decoding file with baseline generated from the kdu_expand and baseline.j2k
|
||||
ADD_TEST(NR-ENC-${INPUT_FILENAME_NAME}-${IT_TEST_ENC}-compare_dec-ref-out2base
|
||||
${EXECUTABLE_OUTPUT_PATH}/compareRAWimages
|
||||
ADD_TEST(NAME NR-ENC-${INPUT_FILENAME_NAME}-${IT_TEST_ENC}-compare_dec-ref-out2base
|
||||
COMMAND compareRAWimages
|
||||
-b ${BASELINE_NR}/opj_${OUTPUT_FILENAME_NAME_WE}-ENC-${IT_TEST_ENC}.raw
|
||||
-t ${OUTPUT_FILENAME}.raw
|
||||
)
|
||||
@@ -227,8 +227,8 @@ FOREACH(OPJ_TEST_CMD_LINE ${OPJ_TEST_CMD_LINE_LIST})
|
||||
math(EXPR IT_TEST_DEC "${IT_TEST_DEC}+1" )
|
||||
|
||||
# Decode the input image
|
||||
ADD_TEST(NR-DEC-${INPUT_FILENAME_NAME}-${IT_TEST_DEC}-decode
|
||||
${EXECUTABLE_OUTPUT_PATH}/j2k_to_image
|
||||
ADD_TEST(NAME NR-DEC-${INPUT_FILENAME_NAME}-${IT_TEST_DEC}-decode
|
||||
COMMAND j2k_to_image
|
||||
${CMD_ARG_LIST_2}
|
||||
)
|
||||
|
||||
@@ -237,11 +237,16 @@ FOREACH(OPJ_TEST_CMD_LINE ${OPJ_TEST_CMD_LINE_LIST})
|
||||
SET_TESTS_PROPERTIES(NR-DEC-${INPUT_FILENAME_NAME}-${IT_TEST_DEC}-decode PROPERTIES WILL_FAIL TRUE)
|
||||
|
||||
ELSE(FAILED_TEST_FOUND)
|
||||
|
||||
# if not failed, check against registered md5:
|
||||
add_test(NAME NR-DEC-${INPUT_FILENAME_NAME}-${IT_TEST_DEC}-decode-md5 COMMAND ${CMAKE_COMMAND}
|
||||
-DREFFILE:STRING=${CMAKE_CURRENT_SOURCE_DIR}/md5refs.txt
|
||||
-DFILENAME:STRING=${INPUT_FILENAME_NAME}
|
||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/checkmd5refs.cmake)
|
||||
|
||||
# FIXME: add a compare2base function base on raw which
|
||||
# can output png diff files if necesary
|
||||
# ADD_TEST(NR-${filename}-compare2base
|
||||
# ${EXECUTABLE_OUTPUT_PATH}/comparePGXimages
|
||||
# ADD_TEST(NAME NR-${filename}-compare2base
|
||||
# COMMAND comparePGXimages
|
||||
# -b ${BASELINE_NR}/opj_${filenameRef}
|
||||
# -t ${TEMP}/${filename}.pgx
|
||||
# -n ${nbComponents}
|
||||
@@ -254,15 +259,15 @@ FOREACH(OPJ_TEST_CMD_LINE ${OPJ_TEST_CMD_LINE_LIST})
|
||||
# NR-${filename}-decode)
|
||||
|
||||
# Dump the input image
|
||||
ADD_TEST(NR-DEC-${INPUT_FILENAME_NAME}-${IT_TEST_DEC}-dump
|
||||
${EXECUTABLE_OUTPUT_PATH}/j2k_dump
|
||||
ADD_TEST(NAME NR-DEC-${INPUT_FILENAME_NAME}-${IT_TEST_DEC}-dump
|
||||
COMMAND j2k_dump
|
||||
-i ${INPUT_FILENAME}
|
||||
-o ${TEMP}/${INPUT_FILENAME_NAME}.txt
|
||||
)
|
||||
|
||||
# Compare the dump output with the baseline
|
||||
ADD_TEST(NR-DEC-${INPUT_FILENAME_NAME}-${IT_TEST_DEC}-compare_dump2base
|
||||
${EXECUTABLE_OUTPUT_PATH}/compare_dump_files
|
||||
ADD_TEST(NAME NR-DEC-${INPUT_FILENAME_NAME}-${IT_TEST_DEC}-compare_dump2base
|
||||
COMMAND compare_dump_files
|
||||
-b ${BASELINE_NR}/opj_${INPUT_FILENAME_NAME_WE}.txt
|
||||
-t ${TEMP}/${INPUT_FILENAME_NAME}.txt
|
||||
)
|
||||
|
||||
56
tests/nonregression/checkmd5refs.cmake
Normal file
56
tests/nonregression/checkmd5refs.cmake
Normal file
@@ -0,0 +1,56 @@
|
||||
# Copyright (c) 2014 Mathieu Malaterre <mathieu.malaterre@voxxl.com>
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the New
|
||||
# BSD license.
|
||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||
|
||||
# check md5 refs
|
||||
#
|
||||
# This script will be used to make sure we never introduce a regression on any
|
||||
# of the nonregression file.
|
||||
#
|
||||
# The approach is relatively simple, we compute a md5sum for each of the decode
|
||||
# file. Anytime the md5sum is different from the reference one, we assume
|
||||
# something went wrong and simply fails. of course if could happen during the
|
||||
# course of openjpeg development that the internals are changed that impact the
|
||||
# decoding process that the output would be bitwise different (while PSNR would
|
||||
# be kept identical).
|
||||
|
||||
#message("0: ${REFFILE}")
|
||||
#message("1: ${CMAKE_CURRENT_BINARY_DIR}")
|
||||
#message("2: ${FILENAME}")
|
||||
file(GLOB globfiles "Temporary/${FILENAME}*.pgx" )
|
||||
#message("6: ${globfiles}")
|
||||
|
||||
# REFFILE follow what md5sum -c would expect as input:
|
||||
file(READ ${REFFILE} variable)
|
||||
#string(REGEX REPLACE "\r?\n" ";" variable "${variable}")
|
||||
|
||||
foreach(pgxfullpath ${globfiles})
|
||||
get_filename_component(pgxfile ${pgxfullpath} NAME)
|
||||
#message("8: ${pgxfile}")
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND} -E md5sum ${pgxfile}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/Temporary
|
||||
RESULT_VARIABLE res
|
||||
OUTPUT_VARIABLE output
|
||||
ERROR_VARIABLE error_output
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE # important
|
||||
)
|
||||
|
||||
# Pass the output back to ctest
|
||||
if(res)
|
||||
message(SEND_ERROR "md5 could not be computed, it failed with value ${res}. Output was: ${error_output}")
|
||||
endif()
|
||||
#message("3: ${output}")
|
||||
|
||||
#message("4: ${variable}")
|
||||
string(REGEX MATCH "[0-9a-f]+ ${pgxfile}" output_var "${variable}")
|
||||
#message("5: ${output_var}")
|
||||
|
||||
if("${output_var}" STREQUAL "${output}")
|
||||
#message("6: eqal")
|
||||
else()
|
||||
message(SEND_ERROR "not equal: [${output_var}] vs [${output}]")
|
||||
endif()
|
||||
endforeach()
|
||||
84
tests/nonregression/md5refs.txt
Normal file
84
tests/nonregression/md5refs.txt
Normal file
@@ -0,0 +1,84 @@
|
||||
6f22c9a9bd474202ac6cd3a066e15200 _00042.j2k_0.pgx
|
||||
a3a0606dfa0779d657c6a923b90e4678 _00042.j2k_1.pgx
|
||||
106954dc468dfe0884d02268e91f9f5b _00042.j2k_2.pgx
|
||||
8889def55f1e18dae6002b9b3a6dd152 123.j2c_0.pgx
|
||||
4a0daf7a9065101379eaebc28e436b1e Bretagne2.j2k_0.pgx
|
||||
07578fc7bf81d3da694de8ae27308b82 Bretagne2.j2k_1.pgx
|
||||
3690c42f83bad42f4abea48525d45e0e Bretagne2.j2k_2.pgx
|
||||
8889def55f1e18dae6002b9b3a6dd152 bug.j2c_0.pgx
|
||||
22c8d33a956ba83079d1102457bc77a1 buxI.j2k_0.pgx
|
||||
b8f473c07ba5ebfc195bdd53c3b3b97f buxR.j2k_0.pgx
|
||||
05c062aca83d13b8095460f38a690a08 Cannotreaddatawithnosizeknown.j2k_0.pgx
|
||||
6276da0ec5fac44d683d3468b290331d cthead1.j2k_0.pgx
|
||||
8afcac9a696cc8d753b0eb9f4ae692ff CT_Phillips_JPEG2K_Decompr_Problem.j2k_0.pgx
|
||||
04d35ab6160c9029549f72358df984da file409752_0.pgx
|
||||
2813bd6fdc2c306b91b3da3688b8bf49 file409752_1.pgx
|
||||
e273e2aaea4a4fc1b2cf7c09c53c3cc6 file409752_2.pgx
|
||||
05c062aca83d13b8095460f38a690a08 illegalcolortransform.j2k_0.pgx
|
||||
cb28787aa7c223f03e6acad71e244108 issue104_jpxstream.jp2_0.pgx
|
||||
cb28787aa7c223f03e6acad71e244108 issue104_jpxstream.jp2_1.pgx
|
||||
cb28787aa7c223f03e6acad71e244108 issue104_jpxstream.jp2_2.pgx
|
||||
adda4f5e46845b96dd3df14a76aa7229 issue188_beach_64bitsbox.jp2_0.pgx
|
||||
90a9709c166019d1e101e7b96d257ed9 issue188_beach_64bitsbox.jp2_1.pgx
|
||||
37e23d2df06ee60bf0f9f5e1c16054d8 issue188_beach_64bitsbox.jp2_2.pgx
|
||||
cb89739232898a823355861d834b5734 issue205.jp2_0.pgx
|
||||
a09d34928fd86e6f2d7e6edc1764d2b7 issue205.jp2_1.pgx
|
||||
6f712d0685f2c5522f01b238365f4284 issue205.jp2_2.pgx
|
||||
de992d54d59032eb07d21983dbe8155b issue205.jp2_3.pgx
|
||||
8fae7a39e459409f64e4529d2214087a issue206_image-000.jp2_0.pgx
|
||||
555a504a93c9a14f61c894da3b393e87 issue206_image-000.jp2_1.pgx
|
||||
5f06b7c45446ae20c22cada46478a9dc issue206_image-000.jp2_2.pgx
|
||||
e1807db57b5f5192c4b77b83e8b5c477 issue228.j2k_0.pgx
|
||||
4093cc34d838780b35a8be410247fa7f j2k32.j2k_0.pgx
|
||||
ce4e556aaa0844b92a92c35c200fc43e j2k32.j2k_1.pgx
|
||||
ea926520f990640862f3fe6616097613 j2k32.j2k_2.pgx
|
||||
66b60e866991e03f9a2de18e80d3102b kakadu_v4-4_openjpegv2_broken.j2k_0.pgx
|
||||
12a8a4668315d9ae27969991251ce85f kodak_2layers_lrcp.j2c_0.pgx
|
||||
56d0b0c547d6d5bb12f0c36e88722b11 kodak_2layers_lrcp.j2c_1.pgx
|
||||
48ba092fb40090c160bbd08bdf7bdbf2 kodak_2layers_lrcp.j2c_2.pgx
|
||||
05c062aca83d13b8095460f38a690a08 MarkerIsNotCompliant.j2k_0.pgx
|
||||
ff73d2bd32951d9e55b02186aac24aff Marrin.jp2_0.pgx
|
||||
55ce884dd2346af6a5172a434ee578fa Marrin.jp2_1.pgx
|
||||
29131264861b4ee21011149b27e4d488 mem-b2ace68c-1381.jp2_0.pgx
|
||||
29131264861b4ee21011149b27e4d488 mem-b2ace68c-1381.jp2_1.pgx
|
||||
29131264861b4ee21011149b27e4d488 mem-b2ace68c-1381.jp2_2.pgx
|
||||
df568fe0529219cc2c8f215e236f4b3d mem-b2ace68c-1381.jp2_3.pgx
|
||||
41ec1a0228c703b10f95388c1160753b mem-b2b86b74-2753.jp2_0.pgx
|
||||
41ec1a0228c703b10f95388c1160753b mem-b2b86b74-2753.jp2_1.pgx
|
||||
41ec1a0228c703b10f95388c1160753b mem-b2b86b74-2753.jp2_2.pgx
|
||||
97557ab9e38a7aff621e583fbb66b099 merged.jp2_0.pgx
|
||||
386fbdcd294429733e3272d62ed5a15a merged.jp2_1.pgx
|
||||
d3907bbd67be1dae31b4377fa4dc0373 merged.jp2_2.pgx
|
||||
de8bba9ac366eeb2f170f0cf3605cf12 movie_00000.j2k_0.pgx
|
||||
334bac3285f7138e9dd29d59bdcb22ff movie_00000.j2k_1.pgx
|
||||
5511d2c96d1d1f2062491e00d5234506 movie_00000.j2k_2.pgx
|
||||
de8bba9ac366eeb2f170f0cf3605cf12 movie_00001.j2k_0.pgx
|
||||
334bac3285f7138e9dd29d59bdcb22ff movie_00001.j2k_1.pgx
|
||||
5511d2c96d1d1f2062491e00d5234506 movie_00001.j2k_2.pgx
|
||||
de8bba9ac366eeb2f170f0cf3605cf12 movie_00002.j2k_0.pgx
|
||||
334bac3285f7138e9dd29d59bdcb22ff movie_00002.j2k_1.pgx
|
||||
5511d2c96d1d1f2062491e00d5234506 movie_00002.j2k_2.pgx
|
||||
951a55623a92e97a064a350f11c2637d orb-blue10-lin-j2k.j2k_0.pgx
|
||||
5033aaf699dfa3dfe041af33c9ad688d orb-blue10-lin-j2k.j2k_1.pgx
|
||||
dbe33d72484caedf9c2cc18fd670884c orb-blue10-lin-j2k.j2k_2.pgx
|
||||
0fec67d9546171699958c6682e725b79 orb-blue10-lin-j2k.j2k_3.pgx
|
||||
84462261381b6732ec4f2addb0070d24 orb-blue10-lin-jp2.jp2_0.pgx
|
||||
6129edf57e5db2344fcde5ce99ae8732 orb-blue10-lin-jp2.jp2_1.pgx
|
||||
fdad26b1e078aa32bd4b77a5f44da43c orb-blue10-lin-jp2.jp2_2.pgx
|
||||
0fec67d9546171699958c6682e725b79 orb-blue10-lin-jp2.jp2_3.pgx
|
||||
671feee525e2485060536edbf21380f1 orb-blue10-win-j2k.j2k_0.pgx
|
||||
912cdee24dd360b7999f7ee4a51083b4 orb-blue10-win-j2k.j2k_1.pgx
|
||||
64833b4b7557936b9233087e92f8ae28 orb-blue10-win-j2k.j2k_2.pgx
|
||||
789a299a1523b2d9d3f561d12a2da817 orb-blue10-win-j2k.j2k_3.pgx
|
||||
671feee525e2485060536edbf21380f1 orb-blue10-win-jp2.jp2_0.pgx
|
||||
7442756e83571c0e87493e03f12b2d34 orb-blue10-win-jp2.jp2_1.pgx
|
||||
5f99ff2aeb17e167fe7049bcf339d0b3 orb-blue10-win-jp2.jp2_2.pgx
|
||||
fe028d56d6c7aaee87239a115093412a orb-blue10-win-jp2.jp2_3.pgx
|
||||
371aa0a7ff40a73b45f1fa41e210d1db pacs.ge.j2k_0.pgx
|
||||
6ae110e1fb5a869af3dbc5fbc735b0bd relax.jp2_0.pgx
|
||||
518a8f28dacc034982507f43763b88dd relax.jp2_1.pgx
|
||||
c678b04f4d3e59b9d66a8bce37c553c0 relax.jp2_2.pgx
|
||||
cdb1d69eb48ffd8545751326b86d9d7e test_lossless.j2k_0.pgx
|
||||
a37e7e5811d7c0c7adb61582790ccd33 text_GBR.jp2_0.pgx
|
||||
fc2173be54954a146b4e2887ee14be06 text_GBR.jp2_1.pgx
|
||||
14108b4fb8d9126750db0424417ed17d text_GBR.jp2_2.pgx
|
||||
@@ -37,10 +37,11 @@ image_to_j2k -i @INPUT_NR_PATH@/X_6_2K_24_FULL_CBR_CIRCLE_000.tif -o @TEMP_PATH@
|
||||
j2k_to_image -i @INPUT_NR_PATH@/Bretagne2.j2k -o @TEMP_PATH@/Bretagne2.j2k.pgx
|
||||
j2k_to_image -i @INPUT_NR_PATH@/_00042.j2k -o @TEMP_PATH@/_00042.j2k.pgx
|
||||
j2k_to_image -i @INPUT_NR_PATH@/123.j2c -o @TEMP_PATH@/123.j2c.pgx
|
||||
j2k_to_image -i @INPUT_NR_PATH@/broken.jp2 -o @TEMP_PATH@/broken.jp2.pgx
|
||||
j2k_to_image -i @INPUT_NR_PATH@/broken2.jp2 -o @TEMP_PATH@/broken2.jp2.pgx
|
||||
j2k_to_image -i @INPUT_NR_PATH@/broken3.jp2 -o @TEMP_PATH@/broken3.jp2.pgx
|
||||
j2k_to_image -i @INPUT_NR_PATH@/broken4.jp2 -o @TEMP_PATH@/broken4.jp2.pgx
|
||||
# The 4 following tests should failed (kakadu indicates that they are corrupted)
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/broken.jp2 -o @TEMP_PATH@/broken.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/broken2.jp2 -o @TEMP_PATH@/broken2.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/broken3.jp2 -o @TEMP_PATH@/broken3.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/broken4.jp2 -o @TEMP_PATH@/broken4.jp2.pgx
|
||||
j2k_to_image -i @INPUT_NR_PATH@/bug.j2c -o @TEMP_PATH@/bug.j2c.pgx
|
||||
j2k_to_image -i @INPUT_NR_PATH@/buxI.j2k -o @TEMP_PATH@/buxI.j2k.pgx
|
||||
j2k_to_image -i @INPUT_NR_PATH@/buxR.j2k -o @TEMP_PATH@/buxR.j2k.pgx
|
||||
@@ -62,6 +63,93 @@ j2k_to_image -i @INPUT_NR_PATH@/orb-blue10-win-j2k.j2k -o @TEMP_PATH@/orb-blue1
|
||||
j2k_to_image -i @INPUT_NR_PATH@/orb-blue10-win-jp2.jp2 -o @TEMP_PATH@/orb-blue10-win-jp2.jp2.pgx
|
||||
j2k_to_image -i @INPUT_NR_PATH@/relax.jp2 -o @TEMP_PATH@/relax.jp2.pgx
|
||||
j2k_to_image -i @INPUT_NR_PATH@/test_lossless.j2k -o @TEMP_PATH@/test_lossless.j2k.pgx
|
||||
# text_GBR.jp2 file exhibt a error about a tile part with a index > of the number of tile-part in this tile (related to issue 202, 206, 208)
|
||||
j2k_to_image -i @INPUT_NR_PATH@/text_GBR.jp2 -o @TEMP_PATH@/text_GBR.jp2.pgx
|
||||
# pacs.ge file should throw an error but finally it seems work with v2
|
||||
j2k_to_image -i @INPUT_NR_PATH@/pacs.ge.j2k -o @TEMP_PATH@/pacs.ge.j2k.pgx
|
||||
# related to issue 135
|
||||
j2k_to_image -i @INPUT_NR_PATH@/kodak_2layers_lrcp.j2c -o @TEMP_PATH@/kodak_2layers_lrcp.j2c.pgx
|
||||
j2k_to_image -i @INPUT_NR_PATH@/kodak_2layers_lrcp.j2c -o @TEMP_PATH@/kodak_2layers_lrcp.j2c.pgx -l 2
|
||||
# related to issue 104 and 110
|
||||
j2k_to_image -i @INPUT_NR_PATH@/issue104_jpxstream.jp2 -o @TEMP_PATH@/issue104_jpxstream.jp2.pgx
|
||||
# File not supported by kakadu (Malformed PCLR box) and not supoprter by openjpeg (problem with value of TPSot)
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/mem-b2ace68c-1381.jp2 -o @TEMP_PATH@/mem-b2ace68c-1381.jp2.pgx
|
||||
# File which produced weird output with kakadu and not supoprter by openjpeg (problem with value of TPSot, issue 202, 206, 208)
|
||||
j2k_to_image -i @INPUT_NR_PATH@/mem-b2b86b74-2753.jp2 -o @TEMP_PATH@/mem-b2b86b74-2753.jp2.pgx
|
||||
# issue 191 raised by the gdal fuzzer test (should properly failed)
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/gdal_fuzzer_unchecked_numresolutions.jp2 -o @TEMP_PATH@/gdal_fuzzer_unchecked_numresolutions.pgx
|
||||
# issue 192 raised by the gdal fuzzer test (should nicely failed)
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/gdal_fuzzer_assert_in_opj_j2k_read_SQcd_SQcc.patch.jp2 -o @TEMP_PATH@/gdal_fuzzer_assert_in_opj_j2k_read_SQcd_SQcc.patch.pgx
|
||||
# issue 193 raised by the gdal fuzzer test (should nicely failed)
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/gdal_fuzzer_check_number_of_tiles.jp2 -o @TEMP_PATH@/gdal_fuzzer_check_number_of_tiles.pgx
|
||||
# issue 194 raised by the gdal fuzzer test (should nicely failed)
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/gdal_fuzzer_check_comp_dx_dy.jp2 -o @TEMP_PATH@/gdal_fuzzer_check_comp_dx_dy.pgx
|
||||
# issue 202
|
||||
j2k_to_image -i @INPUT_NR_PATH@/file409752.jp2 -o @TEMP_PATH@/file409752.jp2.pgx
|
||||
# issue 188
|
||||
j2k_to_image -i @INPUT_NR_PATH@/issue188_beach_64bitsbox.jp2 -o @TEMP_PATH@/issue188_beach_64bitsbox.jp2.pgx
|
||||
# issue 206
|
||||
j2k_to_image -i @INPUT_NR_PATH@/issue206_image-000.jp2 -o @TEMP_PATH@/issue206_image-000.jp2.pgx
|
||||
# issue 205
|
||||
j2k_to_image -i @INPUT_NR_PATH@/issue205.jp2 -o @TEMP_PATH@/issue205.jp2.pgx
|
||||
# issue 225 (sumatrapdf)
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/451.pdf.SIGSEGV.5b5.3723.jp2 -o @TEMP_PATH@/451.pdf.SIGSEGV.5b5.3723.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/1888.pdf.asan.35.988.jp2 -o @TEMP_PATH@/1888.pdf.asan.35.988.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/2539.pdf.SIGFPE.706.1712.jp2 -o @TEMP_PATH@/2539.pdf.SIGFPE.706.1712.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/2236.pdf.SIGSEGV.398.1376.jp2 -o @TEMP_PATH@/2236.pdf.SIGSEGV.398.1376.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/1336.pdf.asan.47.376.jp2 -o @TEMP_PATH@/1336.pdf.asan.47.376.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/1851.pdf.SIGSEGV.ce9.948.jp2 -o @TEMP_PATH@/1851.pdf.SIGSEGV.ce9.948.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/4149.pdf.SIGSEGV.cf7.3501.jp2 -o @TEMP_PATH@/4149.pdf.SIGSEGV.cf7.3501.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/4035.pdf.SIGSEGV.d8b.3375.jp2 -o @TEMP_PATH@/4035.pdf.SIGSEGV.d8b.3375.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/2977.pdf.asan.67.2198.jp2 -o @TEMP_PATH@/2977.pdf.asan.67.2198.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/451.pdf.SIGSEGV.ce9.3723.jp2 -o @TEMP_PATH@/451.pdf.SIGSEGV.ce9.3723.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/3635.pdf.asan.77.2930.jp2 -o @TEMP_PATH@/3635.pdf.asan.77.2930.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/1802.pdf.SIGSEGV.36e.894.jp2 -o @TEMP_PATH@/1802.pdf.SIGSEGV.36e.894.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/451.pdf.SIGSEGV.f4c.3723.jp2 -o @TEMP_PATH@/451.pdf.SIGSEGV.f4c.3723.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/2.pdf.SIGFPE.706.1112.jp2 -o @TEMP_PATH@/2.pdf.SIGFPE.706.1112.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/147af3f1083de4393666b7d99b01b58b_signal_sigsegv_130c531_6155_5136.jp2 -o @TEMP_PATH@/147af3f1083de4393666b7d99b01b58b_signal_sigsegv_130c531_6155_5136.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/4241ac039aba57e6a9c948d519d94216_asan_heap-oob_14650f2_7469_602.jp2 -o @TEMP_PATH@/4241ac039aba57e6a9c948d519d94216_asan_heap-oob_14650f2_7469_602.jp2
|
||||
# issue 228 (16bits/lossy)
|
||||
j2k_to_image -i @INPUT_NR_PATH@/issue228.j2k -o @TEMP_PATH@/issue228.j2k.pgx
|
||||
# issue 229
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/27ac957758a35d00d6765a0c86350d9c.SIGFPE.d25.537.jpc -o @TEMP_PATH@27ac957758a35d00d6765a0c86350d9c.SIGFPE.d25.537.jpc.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/26ccf3651020967f7778238ef5af08af.SIGFPE.d25.527.jp2 -o @TEMP_PATH@26ccf3651020967f7778238ef5af08af.SIGFPE.d25.527.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/0290cb77c5df21828fa74cf2ab2c84d8.SIGFPE.d25.31.jp2 -o @TEMP_PATH@0290cb77c5df21828fa74cf2ab2c84d8.SIGFPE.d25.31.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/3672da2f1f67bbecad27d7181b4e9d7c.SIGFPE.d25.805.jpc -o @TEMP_PATH@3672da2f1f67bbecad27d7181b4e9d7c.SIGFPE.d25.805.jpc.pgx
|
||||
# issue 254 (loss in quality)
|
||||
j2k_to_image -i @INPUT_NR_PATH@/issue254.jp2 -o @TEMP_PATH@/issue254.jp2.pgx
|
||||
# issue 142
|
||||
j2k_to_image -i @INPUT_NR_PATH@/issue142.j2k -o @TEMP_PATH@/issue142.j2k.pgx
|
||||
# issue 134
|
||||
j2k_to_image -i @INPUT_NR_PATH@/issue134.jp2 -o @TEMP_PATH@/issue134.jp2.pgx
|
||||
# issue 135
|
||||
j2k_to_image -i @INPUT_NR_PATH@/issue135.j2k -o @TEMP_PATH@/issue135.j2k.pgx
|
||||
# issue 208
|
||||
j2k_to_image -i @INPUT_NR_PATH@/issue208.jp2 -o @TEMP_PATH@/issue208.jp2.pgx
|
||||
# issue 211
|
||||
j2k_to_image -i @INPUT_NR_PATH@/issue211.jp2 -o @TEMP_PATH@/issue211.jp2.pgx
|
||||
# issue 171
|
||||
j2k_to_image -i @INPUT_NR_PATH@/issue171.jp2 -o @TEMP_PATH@/issue171.jp2.pgx
|
||||
# issue 171
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/issue165.jp2 -o @TEMP_PATH@/issue165.jp2.pgx
|
||||
#
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/broken.jpc -o @TEMP_PATH@/broken.jpc.pgx
|
||||
# issue 226
|
||||
j2k_to_image -i @INPUT_NR_PATH@/issue226.j2k -o @TEMP_PATH@/issue226.j2k.pgx
|
||||
# issue 297
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/edf_c2_1103421.jp2 -o @TEMP_PATH@/edf_c2_1103421.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/edf_c2_1178956.jp2 -o @TEMP_PATH@/edf_c2_1178956.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/edf_c2_1000290.jp2 -o @TEMP_PATH@/edf_c2_1000290.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/edf_c2_1000691.jp2 -o @TEMP_PATH@/edf_c2_1000691.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/edf_c2_20.jp2 -o @TEMP_PATH@/edf_c2_20.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/edf_c2_1377017.jp2 -o @TEMP_PATH@/edf_c2_1377017.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/edf_c2_1002767.jp2 -o @TEMP_PATH@/edf_c2_1002767.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/edf_c2_10025.jp2 -o @TEMP_PATH@/edf_c2_10025.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/edf_c2_1000234.jp2 -o @TEMP_PATH@/edf_c2_1000234.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/edf_c2_225881.jp2 -o @TEMP_PATH@/edf_c2_225881.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/edf_c2_1000671.jp2 -o @TEMP_PATH@/edf_c2_1000671.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/edf_c2_1013627.jp2 -o @TEMP_PATH@/edf_c2_1013627.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/edf_c2_1015644.jp2 -o @TEMP_PATH@/edf_c2_1015644.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/edf_c2_101463.jp2 -o @TEMP_PATH@/edf_c2_101463.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/edf_c2_1674177.jp2 -o @TEMP_PATH@/edf_c2_1674177.jp2.pgx
|
||||
!j2k_to_image -i @INPUT_NR_PATH@/edf_c2_1673169.jp2 -o @TEMP_PATH@/edf_c2_1673169.jp2.pgx
|
||||
|
||||
@@ -5,5 +5,5 @@ add_executable(testempty2 testempty2.c)
|
||||
target_link_libraries(testempty1 openjpeg)
|
||||
target_link_libraries(testempty2 openjpeg)
|
||||
|
||||
add_test(testempty1 ${EXECUTABLE_OUTPUT_PATH}/testempty1)
|
||||
add_test(testempty2 ${EXECUTABLE_OUTPUT_PATH}/testempty2)
|
||||
add_test(NAME testempty1 COMMAND testempty1)
|
||||
add_test(NAME testempty2 COMMAND testempty2)
|
||||
|
||||
@@ -63,8 +63,8 @@ int main(int argc, char *argv[])
|
||||
|
||||
opj_cparameters_t parameters;
|
||||
|
||||
int subsampling_dx = parameters.subsampling_dx;
|
||||
int subsampling_dy = parameters.subsampling_dy;
|
||||
int subsampling_dx;
|
||||
int subsampling_dy;
|
||||
const char outputfile[] = "testempty2.j2k";
|
||||
|
||||
opj_image_cmptparm_t cmptparm;
|
||||
@@ -81,6 +81,8 @@ int main(int argc, char *argv[])
|
||||
opj_set_default_encoder_parameters(¶meters);
|
||||
parameters.cod_format = J2K_CFMT;
|
||||
puts(v);
|
||||
subsampling_dx = parameters.subsampling_dx;
|
||||
subsampling_dy = parameters.subsampling_dy;
|
||||
cmptparm.prec = 8;
|
||||
cmptparm.bpp = 8;
|
||||
cmptparm.sgnd = 0;
|
||||
|
||||
Reference in New Issue
Block a user