Remove obsolete components JPWL, JP3D and MJ2 1350/head
authorEven Rouault <even.rouault@spatialys.com>
Tue, 4 May 2021 17:21:45 +0000 (19:21 +0200)
committerEven Rouault <even.rouault@spatialys.com>
Tue, 4 May 2021 17:21:45 +0000 (19:21 +0200)
136 files changed:
CMakeLists.txt
README.md
src/bin/CMakeLists.txt
src/bin/jp3d/CMakeLists.txt [deleted file]
src/bin/jp3d/convert.c [deleted file]
src/bin/jp3d/convert.h [deleted file]
src/bin/jp3d/getopt.c [deleted file]
src/bin/jp3d/getopt.h [deleted file]
src/bin/jp3d/opj_jp3d_compress.c [deleted file]
src/bin/jp3d/opj_jp3d_decompress.c [deleted file]
src/bin/jp3d/tcltk/LPI_JP3D_VM.tcl [deleted file]
src/bin/jp3d/tcltk/README [deleted file]
src/bin/jp3d/tcltk/Thumbs.db [deleted file]
src/bin/jp3d/tcltk/decoder.tcl [deleted file]
src/bin/jp3d/tcltk/encoder.tcl [deleted file]
src/bin/jp3d/tcltk/logoLPI.gif [deleted file]
src/bin/jp3d/windirent.h [deleted file]
src/bin/jpwl/CMakeLists.txt [deleted file]
src/bin/jpwl/convert.c [deleted file]
src/bin/jpwl/convert.h [deleted file]
src/bin/jpwl/index.c [deleted file]
src/bin/jpwl/index.h [deleted file]
src/bin/jpwl/opj_jpwl_compress.c [deleted file]
src/bin/jpwl/opj_jpwl_decompress.c [deleted file]
src/bin/jpwl/windirent.h [deleted file]
src/bin/mj2/CMakeLists.txt [deleted file]
src/bin/mj2/meta_out.c [deleted file]
src/bin/mj2/meta_out.h [deleted file]
src/bin/mj2/mj2_to_metadata.c [deleted file]
src/bin/mj2/mj2_to_metadata.dtd [deleted file]
src/bin/mj2/mj2_to_metadata.h [deleted file]
src/bin/mj2/mj2_to_metadata.sln [deleted file]
src/bin/mj2/mj2_to_metadata.vcproj [deleted file]
src/bin/mj2/mj2_to_metadata_Notes.doc [deleted file]
src/bin/mj2/opj_mj2_compress.c [deleted file]
src/bin/mj2/opj_mj2_decompress.c [deleted file]
src/bin/mj2/opj_mj2_extract.c [deleted file]
src/bin/mj2/opj_mj2_wrap.c [deleted file]
src/bin/mj2/readme.txt [deleted file]
src/lib/CMakeLists.txt
src/lib/openjp3d/CMakeLists.txt [deleted file]
src/lib/openjp3d/bio.c [deleted file]
src/lib/openjp3d/bio.h [deleted file]
src/lib/openjp3d/cio.c [deleted file]
src/lib/openjp3d/cio.h [deleted file]
src/lib/openjp3d/dwt.c [deleted file]
src/lib/openjp3d/dwt.h [deleted file]
src/lib/openjp3d/event.c [deleted file]
src/lib/openjp3d/event.h [deleted file]
src/lib/openjp3d/fix.h [deleted file]
src/lib/openjp3d/int.h [deleted file]
src/lib/openjp3d/jp3d.c [deleted file]
src/lib/openjp3d/jp3d.h [deleted file]
src/lib/openjp3d/jp3d_lib.c [deleted file]
src/lib/openjp3d/jp3d_lib.h [deleted file]
src/lib/openjp3d/libopenjp3d.pc.cmake.in [deleted file]
src/lib/openjp3d/mct.c [deleted file]
src/lib/openjp3d/mct.h [deleted file]
src/lib/openjp3d/mqc.c [deleted file]
src/lib/openjp3d/mqc.h [deleted file]
src/lib/openjp3d/openjp3d.c [deleted file]
src/lib/openjp3d/openjp3d.h [deleted file]
src/lib/openjp3d/opj_includes.h [deleted file]
src/lib/openjp3d/pi.c [deleted file]
src/lib/openjp3d/pi.h [deleted file]
src/lib/openjp3d/raw.c [deleted file]
src/lib/openjp3d/raw.h [deleted file]
src/lib/openjp3d/t1.c [deleted file]
src/lib/openjp3d/t1.h [deleted file]
src/lib/openjp3d/t1_3d.c [deleted file]
src/lib/openjp3d/t1_3d.h [deleted file]
src/lib/openjp3d/t2.c [deleted file]
src/lib/openjp3d/t2.h [deleted file]
src/lib/openjp3d/tcd.c [deleted file]
src/lib/openjp3d/tcd.h [deleted file]
src/lib/openjp3d/tgt.c [deleted file]
src/lib/openjp3d/tgt.h [deleted file]
src/lib/openjp3d/volume.c [deleted file]
src/lib/openjp3d/volume.h [deleted file]
src/lib/openjpwl/CMakeLists.txt [deleted file]
src/lib/openjpwl/README.txt [deleted file]
src/lib/openjpwl/crc.c [deleted file]
src/lib/openjpwl/crc.h [deleted file]
src/lib/openjpwl/jpwl.c [deleted file]
src/lib/openjpwl/jpwl.h [deleted file]
src/lib/openjpwl/jpwl_lib.c [deleted file]
src/lib/openjpwl/libopenjpwl.pc.cmake.in [deleted file]
src/lib/openjpwl/rs.c [deleted file]
src/lib/openjpwl/rs.h [deleted file]
src/lib/openmj2/CMakeLists.txt [deleted file]
src/lib/openmj2/bio.c [deleted file]
src/lib/openmj2/bio.h [deleted file]
src/lib/openmj2/cio.c [deleted file]
src/lib/openmj2/cio.h [deleted file]
src/lib/openmj2/dwt.c [deleted file]
src/lib/openmj2/dwt.h [deleted file]
src/lib/openmj2/event.c [deleted file]
src/lib/openmj2/event.h [deleted file]
src/lib/openmj2/fix.h [deleted file]
src/lib/openmj2/image.c [deleted file]
src/lib/openmj2/image.h [deleted file]
src/lib/openmj2/int.h [deleted file]
src/lib/openmj2/j2k.c [deleted file]
src/lib/openmj2/j2k.h [deleted file]
src/lib/openmj2/j2k_lib.c [deleted file]
src/lib/openmj2/j2k_lib.h [deleted file]
src/lib/openmj2/jp2.c [deleted file]
src/lib/openmj2/jp2.h [deleted file]
src/lib/openmj2/jpt.c [deleted file]
src/lib/openmj2/jpt.h [deleted file]
src/lib/openmj2/mct.c [deleted file]
src/lib/openmj2/mct.h [deleted file]
src/lib/openmj2/mj2.c [deleted file]
src/lib/openmj2/mj2.h [deleted file]
src/lib/openmj2/mj2_convert.c [deleted file]
src/lib/openmj2/mj2_convert.h [deleted file]
src/lib/openmj2/mqc.c [deleted file]
src/lib/openmj2/mqc.h [deleted file]
src/lib/openmj2/openjpeg.c [deleted file]
src/lib/openmj2/openjpeg.h [deleted file]
src/lib/openmj2/opj_includes.h [deleted file]
src/lib/openmj2/opj_malloc.h [deleted file]
src/lib/openmj2/pi.c [deleted file]
src/lib/openmj2/pi.h [deleted file]
src/lib/openmj2/raw.c [deleted file]
src/lib/openmj2/raw.h [deleted file]
src/lib/openmj2/t1.c [deleted file]
src/lib/openmj2/t1.h [deleted file]
src/lib/openmj2/t1_luts.h [deleted file]
src/lib/openmj2/t2.c [deleted file]
src/lib/openmj2/t2.h [deleted file]
src/lib/openmj2/tcd.c [deleted file]
src/lib/openmj2/tcd.h [deleted file]
src/lib/openmj2/tgt.c [deleted file]
src/lib/openmj2/tgt.h [deleted file]
wrapping/java/openjp2/CMakeLists.txt

index 136d72878cd78ec15e906387ec724895bd69e59c..299f74c3eccf3b8ba91e6736096e8a4d377e7158 100644 (file)
@@ -264,20 +264,16 @@ endif()
 #-----------------------------------------------------------------------------
 # Build Applications
 option(BUILD_CODEC "Build the CODEC executables" ON)
-option(BUILD_MJ2 "Build the MJ2 executables." OFF)
-option(BUILD_JPWL "Build the JPWL library and executables" OFF)
 option(BUILD_JPIP "Build the JPIP library and executables." OFF)
 if(BUILD_JPIP)
   option(BUILD_JPIP_SERVER "Build the JPIP server." OFF)
 endif()
 option(BUILD_VIEWER "Build the OPJViewer executable (C++)" OFF)
 option(BUILD_JAVA "Build the openjpeg jar (Java)" OFF)
-option(BUILD_JP3D "Build the JP3D comp" OFF)
 mark_as_advanced(BUILD_VIEWER)
 mark_as_advanced(BUILD_JAVA)
-mark_as_advanced(BUILD_JP3D)
 
-if(BUILD_CODEC OR BUILD_MJ2)
+if(BUILD_CODEC)
   # OFF: It will only build 3rd party libs if they are not found on the system
   # ON: 3rd party libs will ALWAYS be build, and used
   option(BUILD_THIRDPARTY "Build the thirdparty executables if it is needed" OFF)
@@ -367,14 +363,6 @@ if(BUILD_PKGCONFIG_FILES)
     ${CMAKE_CURRENT_BINARY_DIR}/libopenjp2.pc @ONLY)
   install( FILES  ${CMAKE_CURRENT_BINARY_DIR}/libopenjp2.pc DESTINATION
     ${OPENJPEG_INSTALL_LIB_DIR}/pkgconfig )
-#
-  if(BUILD_JPWL)
-  # install in lib and not share (see multi-arch note above)
-  configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/lib/openjpwl/libopenjpwl.pc.cmake.in
-    ${CMAKE_CURRENT_BINARY_DIR}/libopenjpwl.pc @ONLY)
-  install( FILES  ${CMAKE_CURRENT_BINARY_DIR}/libopenjpwl.pc DESTINATION
-    ${OPENJPEG_INSTALL_LIB_DIR}/pkgconfig )
-  endif()
 #
   if(BUILD_JPIP)
   # install in lib and not share (see multi-arch note above)
@@ -383,14 +371,6 @@ if(BUILD_PKGCONFIG_FILES)
   install( FILES  ${CMAKE_CURRENT_BINARY_DIR}/libopenjpip.pc DESTINATION
     ${OPENJPEG_INSTALL_LIB_DIR}/pkgconfig )
   endif()
-#
-  if(BUILD_JP3D)
-  # install in lib and not share (see multi-arch note above)
-  configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/lib/openjp3d/libopenjp3d.pc.cmake.in
-    ${CMAKE_CURRENT_BINARY_DIR}/libopenjp3d.pc @ONLY)
-  install( FILES  ${CMAKE_CURRENT_BINARY_DIR}/libopenjp3d.pc DESTINATION
-    ${OPENJPEG_INSTALL_LIB_DIR}/pkgconfig )
-  endif()
 endif()
 
 #-----------------------------------------------------------------------------
index f703d0eb6b81903eb568dc24a83ef6109e030277..7e9ae65f39f84fb0c8ebde6a1a110c8fdd14bc53 100644 (file)
--- a/README.md
+++ b/README.md
@@ -29,18 +29,12 @@ The library is developed and maintained by the Image and Signal Processing Group
 * src
   * lib
     * openjp2: contains the sources of the openjp2 library (Part 1 & 2)
-    * openjpwl: contains the additional sources if you want to build a JPWL-flavoured library.
     * openjpip: complete client-server architecture for remote browsing of jpeg 2000 images.
-    * openjp3d: JP3D implementation
-    * openmj2: MJ2 implementation
   * bin: contains all applications that use the openjpeg library
     * common: common files to all applications
     * jp2: a basic codec
-    * mj2: motion jpeg 2000 executables
     * jpip: OpenJPIP applications (server and dec server)
       * java: a Java client viewer for JPIP
-    * jp3d: JP3D applications
-      * tcltk: a test tool for JP3D
     * wx
       * OPJViewer: gui for displaying j2k files (based on wxWidget)
 * wrapping
@@ -57,6 +51,12 @@ See [INSTALL](https://github.com/uclouvain/openjpeg/blob/master/INSTALL.md) for
 
 See [NEWS](https://github.com/uclouvain/openjpeg/blob/master/NEWS.md) for user visible changes in successive releases.
 
+## Deprecated components
+
+The openjpwl, openjp3d and openmj2 components have been removed after the
+2.4.0 release. Their building and working state is unknown. People interested
+in them should start from the 2.4.0 tag.
+
 ## API/ABI
 
 An API/ABI timeline is automatically updated [here][link-api-timeline].
index edf85feba59f60476ef1d62ffe14b0b29e230935..292fe5a7135bc170bc62bf37dc4d4c98c6e252bd 100644 (file)
@@ -4,18 +4,9 @@ add_subdirectory(common)
 add_subdirectory(jp2)
 
 # optionals components:
-if(BUILD_JPWL)
-  add_subdirectory(jpwl)
-endif()
-if(BUILD_MJ2)
-  add_subdirectory(mj2)
-endif()
 if(BUILD_JPIP)
   add_subdirectory(jpip)
 endif()
-if(BUILD_JP3D)
-  add_subdirectory(jp3d)
-endif()
 
 # wx apps:
 add_subdirectory(wx)
diff --git a/src/bin/jp3d/CMakeLists.txt b/src/bin/jp3d/CMakeLists.txt
deleted file mode 100644 (file)
index 3cac1a8..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-# Build the demo app, small examples
-
-# First thing define the common source:
-set(common_SRCS
-  convert.c
-  ${OPENJPEG_SOURCE_DIR}/src/bin/common/opj_getopt.c
-  )
-
-# Headers file are located here:
-include_directories(
-  ${OPENJPEG_BINARY_DIR}/src/lib/openjp2 # opj_config.h
-  ${OPENJPEG_SOURCE_DIR}/src/lib/openjp3d
-  ${LCMS_INCLUDE_DIRNAME}
-  ${OPENJPEG_SOURCE_DIR}/src/bin/common
-  ${Z_INCLUDE_DIRNAME}
-  ${PNG_INCLUDE_DIRNAME}
-  ${TIFF_INCLUDE_DIRNAME}
-  )
-
-if(WIN32)
-  if(BUILD_SHARED_LIBS)
-    add_definitions(-DOPJ_EXPORTS)
-  else()
-    add_definitions(-DOPJ_STATIC)
-  endif()
-endif()
-
-# Loop over all executables:
-foreach(exe opj_jp3d_compress opj_jp3d_decompress)
-  add_executable(${exe} ${exe}.c ${common_SRCS})
-  target_link_libraries(${exe} openjp3d)
-  # On unix you need to link to the math library:
-  if(UNIX)
-    target_link_libraries(${exe} m)
-  endif(UNIX)
-  # Install exe
-  install(TARGETS ${exe}
-    EXPORT OpenJP3DTargets
-    DESTINATION ${OPENJPEG_INSTALL_BIN_DIR} COMPONENT Applications
-  )
-endforeach()
diff --git a/src/bin/jp3d/convert.c b/src/bin/jp3d/convert.c
deleted file mode 100644 (file)
index 4e4bea9..0000000
+++ /dev/null
@@ -1,1051 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * Copyright (c) 2006, Mónica Díez García, Image Processing Laboratory, University of Valladolid, Spain
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "openjp3d.h"
-#ifdef _WIN32
-#include "windirent.h"
-#else
-#include <dirent.h>
-#endif /* _WIN32 */
-
-
-
-void dump_volume(FILE *fd, opj_volume_t * vol)
-{
-    int compno;
-    fprintf(fd, "volume {\n");
-    fprintf(fd, "  x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d\n", vol->x0, vol->y0,
-            vol->z0, vol->x1, vol->y1,  vol->z1);
-    fprintf(fd, "  numcomps=%d\n", vol->numcomps);
-    for (compno = 0; compno < vol->numcomps; compno++) {
-        opj_volume_comp_t *comp = &vol->comps[compno];
-        fprintf(fd, "  comp %d {\n", compno);
-        fprintf(fd, "    dx=%d, dy=%d, dz=%d\n", comp->dx, comp->dy, comp->dz);
-        fprintf(fd, "    prec=%d\n", comp->prec);
-        fprintf(fd, "    sgnd=%d\n", comp->sgnd);
-        fprintf(fd, "  }\n");
-    }
-    fprintf(fd, "}\n");
-}
-
-/*
- * Get logarithm of an integer and round downwards.
- *
- * log2(a)
- */
-static int int_floorlog2(int a)
-{
-    int l;
-    for (l = 0; a > 1; l++) {
-        a >>= 1;
-    }
-    return l;
-}
-
-/*
- * Divide an integer by a power of 2 and round upwards.
- *
- * a divided by 2^b
- */
-static int int_ceildivpow2(int a, int b)
-{
-    return (a + (1 << b) - 1) >> b;
-}
-
-/*
- * Divide an integer and round upwards.
- *
- * a divided by b
- */
-static int int_ceildiv(int a, int b)
-{
-    return (a + b - 1) / b;
-}
-
-
-/* -->> -->> -->> -->>
-
-PGX IMAGE FORMAT
-
-<<-- <<-- <<-- <<-- */
-
-
-unsigned char readuchar(FILE * f)
-{
-    unsigned char c1;
-    fread(&c1, 1, 1, f);
-    return c1;
-}
-
-unsigned short readushort(FILE * f, int bigendian)
-{
-    unsigned char c1, c2;
-    fread(&c1, 1, 1, f);
-    fread(&c2, 1, 1, f);
-    if (bigendian) {
-        return (c1 << 8) + c2;
-    } else {
-        return (c2 << 8) + c1;
-    }
-}
-
-unsigned int readuint(FILE * f, int bigendian)
-{
-    unsigned char c1, c2, c3, c4;
-    fread(&c1, 1, 1, f);
-    fread(&c2, 1, 1, f);
-    fread(&c3, 1, 1, f);
-    fread(&c4, 1, 1, f);
-    if (bigendian) {
-        return (c1 << 24) + (c2 << 16) + (c3 << 8) + c4;
-    } else {
-        return (c4 << 24) + (c3 << 16) + (c2 << 8) + c1;
-    }
-}
-/*****************************************/
-static unsigned short ShortSwap(unsigned short v)
-{
-    unsigned char c1, c2;
-    c1 = v & 0xff;
-    c2 = (v >> 8) & 0xff;
-    return (c1 << 8) + c2;
-}
-
-static unsigned int LongSwap(unsigned int i)
-{
-    unsigned char b1, b2, b3, b4;
-    b1 = i & 255;
-    b2 = (i >> 8) & 255;
-    b3 = (i >> 16) & 255;
-    b4 = (i >> 24) & 255;
-    return ((int)b1 << 24) + ((int)b2 << 16) + ((int)b3 << 8) + b4;
-}
-/*****************************************/
-
-opj_volume_t* pgxtovolume(char *relpath, opj_cparameters_t *parameters)
-{
-
-    FILE *f = NULL;
-    int w, h, prec;
-    unsigned long offset;
-    int i, s, numcomps, maxvalue, sliceno, slicepos, maxslice = 0;
-
-    OPJ_COLOR_SPACE color_space;
-    opj_volume_cmptparm_t cmptparm; /* maximum of 1 component */
-    opj_volume_t * volume = NULL;
-
-    char endian1, endian2, sign;
-    char signtmp[32];
-    char temp[32];
-    opj_volume_comp_t *comp = NULL;
-
-    DIR *dirp;
-    struct dirent *direntp;
-
-    char *tmp = NULL, *tmp2 = NULL,
-          *point = NULL, *pgx = NULL;
-    char tmpdirpath[MAX_PATH];
-    char dirpath[MAX_PATH];
-    char pattern[MAX_PATH];
-    char pgxfiles[MAX_SLICES][MAX_PATH];
-    int pgxslicepos[MAX_SLICES];
-    char tmpno[3];
-
-    numcomps = 1;
-    color_space = CLRSPC_GRAY;
-    sliceno = 0;
-    maxvalue = 0;
-    memset(pgxfiles, 0, MAX_SLICES * MAX_PATH * sizeof(char));
-    memset(&cmptparm, 0, sizeof(opj_volume_cmptparm_t));
-
-    /* Separación del caso de un Ãºnico slice frente al de muchos */
-    if ((tmp = strrchr(relpath, '-')) == NULL) {
-        /*fprintf(stdout,"[INFO] A volume of only one slice....\n");*/
-        sliceno = 1;
-        maxslice = 1;
-        strcpy(pgxfiles[0], relpath);
-
-    } else {
-        /*Fetch only the path */
-        strcpy(tmpdirpath, relpath);
-        if ((tmp = strrchr(tmpdirpath, '/')) != NULL) {
-            tmp++;
-            *tmp = '\0';
-            strcpy(dirpath, tmpdirpath);
-        } else {
-            strcpy(dirpath, "./");
-        }
-
-        /*Fetch the pattern of the volume slices*/
-        if ((tmp = strrchr(relpath, '/')) != NULL) {
-            tmp++;
-        } else {
-            tmp = relpath;
-        }
-        if ((tmp2 = strrchr(tmp, '-')) != NULL) {
-            *tmp2 = '\0';
-        } else {
-            fprintf(stdout, "[ERROR] tmp2 ha dado null. no ha encontrado el * %s %s", tmp,
-                    relpath);
-            return NULL;
-        }
-        strcpy(pattern, tmp);
-
-        dirp = opendir(dirpath);
-        if (dirp == NULL) {
-            fprintf(stdout,
-                    "[ERROR] Infile must be a .pgx file or a directory that contain pgx files");
-            return NULL;
-        }
-
-        /*Read all .pgx files of directory */
-        while ((direntp = readdir(dirp)) != NULL) {
-            /* Found a directory, but ignore . and .. */
-            if (strcmp(".", direntp->d_name) == 0 || strcmp("..", direntp->d_name) == 0) {
-                continue;
-            }
-
-            if (((pgx = strstr(direntp->d_name, pattern)) != NULL) &&
-                    ((tmp2 = strstr(direntp->d_name, ".pgx")) != NULL)) {
-
-                strcpy(tmp, dirpath);
-                tmp = strcat(tmp, direntp->d_name);
-
-                /*Obtenemos el index de la secuencia de slices*/
-                if ((tmp2 = strpbrk(direntp->d_name, "0123456789")) == NULL) {
-                    continue;
-                }
-                i = 0;
-                while (tmp2 != NULL) {
-                    tmpno[i++] = *tmp2;
-                    point = tmp2;
-                    tmp2 = strpbrk(tmp2 + 1, "0123456789");
-                }
-                tmpno[i] = '\0';
-
-                /*Comprobamos que no estamos leyendo algo raro como pattern.jp3d*/
-                if ((point = strpbrk(point, ".")) == NULL) {
-                    break;
-                }
-                /*Slicepos --> index de slice; Sliceno --> no de slices hasta el momento*/
-                slicepos = atoi(tmpno);
-                pgxslicepos[sliceno] = slicepos - 1;
-                sliceno++;
-                if (slicepos > maxslice) {
-                    maxslice = slicepos;
-                }
-
-                /*Colocamos el slices en su posicion correspondiente*/
-                strcpy(pgxfiles[slicepos - 1], tmp);
-            }
-        }
-
-    }/* else if pattern*.pgx */
-
-    if (!sliceno) {
-        fprintf(stdout,
-                "[ERROR] No slices with this pattern founded !! Please check input volume name\n");
-        closedir(dirp);
-        return NULL;
-    }
-    /*if ( maxslice != sliceno) {
-        fprintf(stdout,"[ERROR] Slices are not sequentially numbered !! Please rename them accordingly\n");
-        return NULL;
-    }*/
-
-    for (s = 0; s < sliceno; s++) {
-        int pos = maxslice == sliceno ? s : pgxslicepos[s];
-        f = fopen(pgxfiles[pos], "rb");
-        if (!f) {
-            fprintf(stdout, "[ERROR] Failed to open %s for reading !\n", pgxfiles[s]);
-            return NULL;
-        }
-        fprintf(stdout, "[INFO] Loading %s \n", pgxfiles[pos]);
-
-        fseek(f, 0, SEEK_SET);
-        fscanf(f, "PG%31[ \t]%c%c%31[ \t+-]%d%31[ \t]%d%31[ \t]%d", temp, &endian1,
-               &endian2, signtmp, &prec, temp, &w, temp, &h);
-
-        i = 0;
-        sign = '+';
-        while (signtmp[i] != '\0') {
-            if (signtmp[i] == '-') {
-                sign = '-';
-            }
-            i++;
-        }
-
-        fgetc(f);
-        if (endian1 == 'M' && endian2 == 'L') {
-            cmptparm.bigendian = 1;
-        } else if (endian2 == 'M' && endian1 == 'L') {
-            cmptparm.bigendian = 0;
-        } else {
-            fprintf(stdout, "[ERROR] Bad pgx header, please check input file\n");
-            fclose(f);
-            closedir(dirp);
-            return NULL;
-        }
-
-        if (s == 0) {
-            /* initialize volume component */
-
-            cmptparm.x0 = parameters->volume_offset_x0;
-            cmptparm.y0 = parameters->volume_offset_y0;
-            cmptparm.z0 = parameters->volume_offset_z0;
-            cmptparm.w = !cmptparm.x0 ? (w - 1) * parameters->subsampling_dx + 1 :
-                         cmptparm.x0 + (w - 1) * parameters->subsampling_dx + 1;
-            cmptparm.h = !cmptparm.y0 ? (h - 1) * parameters->subsampling_dy + 1 :
-                         cmptparm.y0 + (h - 1) * parameters->subsampling_dy + 1;
-            cmptparm.l = !cmptparm.z0 ? (sliceno - 1) * parameters->subsampling_dz + 1 :
-                         cmptparm.z0 + (sliceno - 1) * parameters->subsampling_dz + 1;
-
-            if (sign == '-') {
-                cmptparm.sgnd = 1;
-            } else {
-                cmptparm.sgnd = 0;
-            }
-            cmptparm.prec = prec;
-            cmptparm.bpp = prec;
-            cmptparm.dcoffset = parameters->dcoffset;
-            cmptparm.dx = parameters->subsampling_dx;
-            cmptparm.dy = parameters->subsampling_dy;
-            cmptparm.dz = parameters->subsampling_dz;
-
-            /* create the volume */
-            volume = opj_volume_create(numcomps, &cmptparm, color_space);
-            if (!volume) {
-                fclose(f);
-                return NULL;
-            }
-            /* set volume offset and reference grid */
-            volume->x0 = cmptparm.x0;
-            volume->y0 = cmptparm.y0;
-            volume->z0 = cmptparm.z0;
-            volume->x1 = cmptparm.w;
-            volume->y1 = cmptparm.h;
-            volume->z1 = cmptparm.l;
-
-            /* set volume data :only one component, that is a volume*/
-            comp = &volume->comps[0];
-
-        }/*if sliceno==1*/
-
-        offset = w * h * s;
-
-        for (i = 0; i < w * h; i++) {
-            int v;
-            if (comp->prec <= 8) {
-                if (!comp->sgnd) {
-                    v = readuchar(f);
-                } else {
-                    v = (char) readuchar(f);
-                }
-            } else if (comp->prec <= 16) {
-                if (!comp->sgnd) {
-                    v = readushort(f, cmptparm.bigendian);
-                } else {
-                    v = (short) readushort(f, cmptparm.bigendian);
-                }
-            } else {
-                if (!comp->sgnd) {
-                    v = readuint(f, cmptparm.bigendian);
-                } else {
-                    v = (int) readuint(f, cmptparm.bigendian);
-                }
-            }
-            if (v > maxvalue) {
-                maxvalue = v;
-            }
-            comp->data[i + offset] = v;
-
-        }
-        fclose(f);
-    } /* for s --> sliceno*/
-    comp->bpp = int_floorlog2(maxvalue) + 1;
-    closedir(dirp);
-    /*dump_volume(stdout, volume);*/
-    return volume;
-}
-
-
-int volumetopgx(opj_volume_t * volume, char *outfile)
-{
-    int w, wr, wrr, h, hr, hrr, l, lr, lrr;
-    int i, j, compno, offset, sliceno;
-    FILE *fdest = NULL;
-
-    for (compno = 0; compno < volume->numcomps; compno++) {
-        opj_volume_comp_t *comp = &volume->comps[compno];
-        char name[256];
-        int nbytes = 0;
-        char *tmp = outfile;
-        while (*tmp) {
-            tmp++;
-        }
-        while (*tmp != '.') {
-            tmp--;
-        }
-        *tmp = '\0';
-        for (sliceno = 0; sliceno < volume->z1 - volume->z0; sliceno++) {
-
-            if (volume->numcomps > 1) {
-                sprintf(name, "%s%d-%d.pgx", outfile, sliceno + 1, compno);
-            } else if ((volume->z1 - volume->z0) > 1) {
-                sprintf(name, "%s%d.pgx", outfile, sliceno + 1);
-            } else {
-                sprintf(name, "%s.pgx", outfile);
-            }
-
-            fdest = fopen(name, "wb");
-            if (!fdest) {
-                fprintf(stdout, "[ERROR] Failed to open %s for writing \n", name);
-                return 1;
-            }
-
-            fprintf(stdout, "[INFO] Writing in %s (%s)\n", name,
-                    volume->comps[0].bigendian ? "Bigendian" : "Little-endian");
-
-            w = int_ceildiv(volume->x1 - volume->x0, volume->comps[compno].dx);
-            wr = volume->comps[compno].w;
-            wrr = int_ceildivpow2(volume->comps[compno].w, volume->comps[compno].factor[0]);
-
-            h = int_ceildiv(volume->y1 - volume->y0, volume->comps[compno].dy);
-            hr = volume->comps[compno].h;
-            hrr = int_ceildivpow2(volume->comps[compno].h, volume->comps[compno].factor[1]);
-
-            l = int_ceildiv(volume->z1 - volume->z0, volume->comps[compno].dz);
-            lr = volume->comps[compno].l;
-            lrr = int_ceildivpow2(volume->comps[compno].l, volume->comps[compno].factor[2]);
-
-            fprintf(fdest, "PG %c%c %c%d %d %d\n", comp->bigendian ? 'M' : 'L',
-                    comp->bigendian ? 'L' : 'M', comp->sgnd ? '-' : '+', comp->prec, wr, hr);
-            if (comp->prec <= 8) {
-                nbytes = 1;
-            } else if (comp->prec <= 16) {
-                nbytes = 2;
-            } else {
-                nbytes = 4;
-            }
-
-            offset = (sliceno / lrr * l) + (sliceno % lrr);
-            offset = wrr * hrr * offset;
-            /*fprintf(stdout,"%d %d %d %d\n",offset,wrr*hrr,wrr,w);*/
-            for (i = 0; i < wrr * hrr; i++) {
-                int v = volume->comps[0].data[(i / wrr * w) + (i % wrr) + offset];
-                if (volume->comps[0].bigendian) {
-                    for (j = nbytes - 1; j >= 0; j--) {
-                        char byte = (char)((v >> (j * 8)) & 0xff);
-                        fwrite(&byte, 1, 1, fdest);
-                    }
-                } else {
-                    for (j = 0; j <= nbytes - 1; j++) {
-                        char byte = (char)((v >> (j * 8)) & 0xff);
-                        fwrite(&byte, 1, 1, fdest);
-                    }
-                }
-            }
-
-            fclose(fdest);
-        }/*for sliceno*/
-    }/*for compno*/
-
-    return 0;
-}
-
-/* -->> -->> -->> -->>
-
-BIN IMAGE FORMAT
-
-<<-- <<-- <<-- <<-- */
-
-opj_volume_t* bintovolume(char *filename, char *fileimg,
-                          opj_cparameters_t *parameters)
-{
-    int subsampling_dx =  parameters->subsampling_dx;
-    int subsampling_dy =  parameters->subsampling_dy;
-    int subsampling_dz =  parameters->subsampling_dz;
-
-    int i, compno, w, h, l, numcomps = 1;
-    int prec, max = 0;
-
-    /*  char temp[32];*/
-    char line[100];
-    int bigendian;
-
-    FILE *f = NULL;
-    FILE *fimg = NULL;
-    OPJ_COLOR_SPACE color_space;
-    opj_volume_cmptparm_t cmptparm; /* maximum of 1 component */
-    opj_volume_t * volume = NULL;
-    opj_volume_comp_t *comp = NULL;
-
-    bigendian = 0;
-    color_space = CLRSPC_GRAY;
-
-    fimg = fopen(fileimg, "r");
-    if (!fimg) {
-        fprintf(stdout, "[ERROR] Failed to open %s for reading !!\n", fileimg);
-        return 0;
-    }
-
-    fseek(fimg, 0, SEEK_SET);
-    while (!feof(fimg)) {
-        fgets(line, 100, fimg);
-        /*fprintf(stdout,"%s %d \n",line,feof(fimg));*/
-        if (strncmp(line, "Bpp", 3) == 0) {
-            sscanf(line, "%*s%*[ \t]%d", &prec);
-        } else if (strncmp(line, "Color", 5) == 0) {
-            sscanf(line, "%*s%*[ \t]%d", &color_space);
-        } else if (strncmp(line, "Dim", 3) == 0) {
-            sscanf(line, "%*s%*[ \t]%d%*[ \t]%d%*[ \t]%d", &w, &h, &l);
-        }
-    }
-    /*fscanf(fimg, "Bpp%[ \t]%d%[ \t\n]",temp,&prec,temp);*/
-    /*fscanf(fimg, "Color Map%[ \t]%d%[ \n\t]Dimensions%[ \t]%d%[ \t]%d%[ \t]%d%[ \n\t]",temp,&color_space,temp,temp,&w,temp,&h,temp,&l,temp);*/
-    /*fscanf(fimg, "Resolution(mm)%[ \t]%d%[ \t]%d%[ \t]%d%[ \n\t]",temp,&subsampling_dx,temp,&subsampling_dy,temp,&subsampling_dz,temp);*/
-
-#ifdef VERBOSE
-    fprintf(stdout, "[INFO] %d \t %d %d %d \t %3.2f %2.2f %2.2f \t %d \n",
-            color_space, w, h, l, subsampling_dx, subsampling_dy, subsampling_dz, prec);
-#endif
-    fclose(fimg);
-
-    /* initialize volume components */
-    memset(&cmptparm, 0, sizeof(opj_volume_cmptparm_t));
-
-    cmptparm.prec = prec;
-    cmptparm.bpp = prec;
-    cmptparm.sgnd = 0;
-    cmptparm.bigendian = bigendian;
-    cmptparm.dcoffset = parameters->dcoffset;
-    cmptparm.dx = subsampling_dx;
-    cmptparm.dy = subsampling_dy;
-    cmptparm.dz = subsampling_dz;
-    cmptparm.w = w;
-    cmptparm.h = h;
-    cmptparm.l = l;
-
-    /* create the volume */
-    volume = opj_volume_create(numcomps, &cmptparm, color_space);
-    if (!volume) {
-        fprintf(stdout, "[ERROR] Unable to create volume");
-        fclose(f);
-        return NULL;
-    }
-
-    /* set volume offset and reference grid */
-    volume->x0 = parameters->volume_offset_x0;
-    volume->y0 = parameters->volume_offset_y0;
-    volume->z0 = parameters->volume_offset_z0;
-    volume->x1 = parameters->volume_offset_x0 + (w - 1) *   subsampling_dx + 1;
-    volume->y1 = parameters->volume_offset_y0 + (h - 1) *   subsampling_dy + 1;
-    volume->z1 = parameters->volume_offset_z0 + (l - 1) *   subsampling_dz + 1;
-
-    /* set volume data */
-    f = fopen(filename, "rb");
-    if (!f) {
-        fprintf(stdout, "[ERROR] Failed to open %s for reading !!\n", filename);
-        opj_free(volume);
-        return 0;
-    }
-
-    /* BINARY */
-    for (compno = 0; compno < volume->numcomps; compno++) {
-        int whl = w * h * l;
-        /* set volume data */
-        comp = &volume->comps[compno];
-
-        /*if (comp->prec <= 8) {
-            if (!comp->sgnd) {
-                unsigned char *data = (unsigned char *) malloc(whl * sizeof(unsigned char));
-                fread(data, 1, whl, f);
-                for (i = 0; i < whl; i++) {
-                    comp->data[i] = data[i];
-                    if (comp->data[i] > max)
-                        max = comp->data[i];
-                }
-                free(data);
-            } else {
-                char *data = (char *) malloc(whl);
-                fread(data, 1, whl, f);
-                for (i = 0; i < whl; i++) {
-                    comp->data[i] = data[i];
-                    if (comp->data[i] > max)
-                        max = comp->data[i];
-                }
-                free(data);
-            }
-        } else if (comp->prec <= 16) {
-            if (!comp->sgnd) {
-                unsigned short *data = (unsigned short *) malloc(whl * sizeof(unsigned short));
-                int leido = fread(data, 2, whl, f);
-                if (!leido) {
-                    free(data); fclose(f);
-                    return NULL;
-                }
-
-                for (i = 0; i < whl; i++) {
-                    if (bigendian)  //(c1 << 8) + c2;
-                        comp->data[i] = data[i];
-                    else{           //(c2 << 8) + c1;
-                        comp->data[i] = ShortSwap(data[i]);
-                    }
-                    if (comp->data[i] > max)
-                        max = comp->data[i];
-                }
-                free(data);
-            } else {
-                short *data = (short *) malloc(whl);
-                int leido = fread(data, 2, whl, f);
-                if (!leido) {
-                    free(data); fclose(f);
-                    return NULL;
-                }
-                for (i = 0; i < whl; i++) {
-                    if (bigendian){ //(c1 << 8) + c2;
-                        comp->data[i] = data[i];
-                    }else{          //(c2 << 8) + c1;
-                        comp->data[i] = (short) ShortSwap((unsigned short) data[i]);
-                    }
-                    if (comp->data[i] > max)
-                        max = comp->data[i];
-                }
-                free(data);
-            }
-        } else {
-            if (!comp->sgnd) {
-                unsigned int *data = (unsigned int *) malloc(whl * sizeof(unsigned int));
-                int leido = fread(data, 4, whl, f);
-                if (!leido) {
-                    free(data); fclose(f);
-                    return NULL;
-                }               for (i = 0; i < whl; i++) {
-                    if (!bigendian)
-                        comp->data[i] = LongSwap(data[i]);
-                    else
-                        comp->data[i] = data[i];
-                    if (comp->data[i] > max)
-                        max = comp->data[i];
-                }
-                free(data);
-            } else {
-                int leido = fread(comp->data, 4, whl, f);
-                if (!leido) {
-                    fclose(f);
-                    return NULL;
-                }
-                for (i = 0; i < whl; i++) {
-                    if (!bigendian)
-                        comp->data[i] = (int) LongSwap((unsigned int) comp->data[i]);
-                    if (comp->data[i] > max)
-                        max = comp->data[i];
-                }
-            }
-        }*/
-
-        for (i = 0; i < whl; i++) {
-            int v;
-            if (comp->prec <= 8) {
-                if (!comp->sgnd) {
-                    v = readuchar(f);
-                } else {
-                    v = (char) readuchar(f);
-                }
-            } else if (comp->prec <= 16) {
-                if (!comp->sgnd) {
-                    v = readushort(f, bigendian);
-                } else {
-                    v = (short) readushort(f, bigendian);
-                }
-            } else {
-                if (!comp->sgnd) {
-                    v = readuint(f, bigendian);
-                } else {
-                    v = (int) readuint(f, bigendian);
-                }
-            }
-            if (v > max) {
-                max = v;
-            }
-            comp->data[i] = v;
-        }
-        comp->bpp = int_floorlog2(max) + 1;
-    }
-    fclose(f);
-    return volume;
-}
-
-int volumetobin(opj_volume_t * volume, char *outfile)
-{
-    int w, wr, wrr, h, hr, hrr, l, lr, lrr, max;
-    int i, j, compno, nbytes;
-    int offset, sliceno;
-    FILE *fdest = NULL;
-    FILE *fimgdest = NULL;
-    /*  char *imgtemp;*/
-    char name[256];
-
-    for (compno = 0; compno < 1; compno++) { /*Only one component*/
-
-        fdest = fopen(outfile, "wb");
-        if (!fdest) {
-            fprintf(stdout, "[ERROR] Failed to open %s for writing\n", outfile);
-            return 1;
-        }
-        fprintf(stdout, "[INFO] Writing outfile %s (%s) \n", outfile,
-                volume->comps[0].bigendian ? "Bigendian" : "Little-endian");
-
-        w = int_ceildiv(volume->x1 - volume->x0, volume->comps[compno].dx);
-        wr = volume->comps[compno].w;
-        wrr = int_ceildivpow2(volume->comps[compno].w, volume->comps[compno].factor[0]);
-
-        h = int_ceildiv(volume->y1 - volume->y0, volume->comps[compno].dy);
-        hr = volume->comps[compno].h;
-        hrr = int_ceildivpow2(volume->comps[compno].h, volume->comps[compno].factor[1]);
-
-        l = int_ceildiv(volume->z1 - volume->z0, volume->comps[compno].dz);
-        lr = volume->comps[compno].l;
-        lrr = int_ceildivpow2(volume->comps[compno].l, volume->comps[compno].factor[2]);
-
-        max = (volume->comps[compno].prec <= 8) ? 255 : (1 <<
-                volume->comps[compno].prec) - 1;
-
-        volume->comps[compno].x0 = int_ceildivpow2(volume->comps[compno].x0 -
-                                   int_ceildiv(volume->x0, volume->comps[compno].dx),
-                                   volume->comps[compno].factor[0]);
-        volume->comps[compno].y0 = int_ceildivpow2(volume->comps[compno].y0 -
-                                   int_ceildiv(volume->y0, volume->comps[compno].dy),
-                                   volume->comps[compno].factor[1]);
-        volume->comps[compno].z0 = int_ceildivpow2(volume->comps[compno].z0 -
-                                   int_ceildiv(volume->z0, volume->comps[compno].dz),
-                                   volume->comps[compno].factor[2]);
-
-        if (volume->comps[0].prec <= 8) {
-            nbytes = 1;
-        } else if (volume->comps[0].prec <= 16) {
-            nbytes = 2;
-        } else {
-            nbytes = 4;
-        }
-
-        /*fprintf(stdout,"w %d wr %d wrr %d h %d hr %d hrr %d l %d lr %d lrr %d max %d nbytes %d\n Factor %d %d %d",w,wr,wrr,h,hr,hrr,l,lr,lrr,max,nbytes,volume->comps[compno].factor[0],volume->comps[compno].factor[1],volume->comps[compno].factor[2]);*/
-
-        for (sliceno = 0; sliceno < lrr; sliceno++) {
-            offset = (sliceno / lrr * l) + (sliceno % lrr);
-            offset = wrr * hrr * offset;
-            for (i = 0; i < wrr * hrr; i++) {
-                int v = volume->comps[0].data[(i / wrr * w) + (i % wrr) + offset];
-                if (volume->comps[0].bigendian) {
-                    for (j = nbytes - 1; j >= 0; j--) {
-                        char byte = (char)((v >> (j * 8)) & 0xff);
-                        fwrite(&byte, 1, 1, fdest);
-                    }
-                } else {
-                    for (j = 0; j <= nbytes - 1; j++) {
-                        char byte = (char)((v >> (j * 8)) & 0xff);
-                        fwrite(&byte, 1, 1, fdest);
-                    }
-                }
-            }
-        }
-
-    }
-
-    fclose(fdest);
-
-    snprintf(name, sizeof(name), "%s.img", outfile);
-    fimgdest = fopen(name, "w");
-    if (!fimgdest) {
-        fprintf(stdout, "[ERROR] Failed to open %s for writing\n", name);
-        return 1;
-    }
-    fprintf(fimgdest,
-            "Bpp\t%d\nColor Map\t2\nDimensions\t%d\t%d\t%d\nResolution(mm)\t%d\t%d\t%d\t\n",
-            volume->comps[0].prec, wrr, hrr, lrr, volume->comps[0].dx, volume->comps[0].dy,
-            volume->comps[0].dz);
-
-    fclose(fimgdest);
-    return 0;
-}
-/* -->> -->> -->> -->>
-
-IMG IMAGE FORMAT
-
-<<-- <<-- <<-- <<-- */
-opj_volume_t* imgtovolume(char *fileimg, opj_cparameters_t *parameters)
-{
-    int subsampling_dx =  parameters->subsampling_dx;
-    int subsampling_dy =  parameters->subsampling_dy;
-    int subsampling_dz =  parameters->subsampling_dz;
-
-    int i, compno, w, h, l, numcomps = 1;
-    int prec, max = 0, min = 0;
-    float dx, dy, dz;
-    char filename[100], tmpdirpath[100], dirpath[100], *tmp;
-    char line[100], datatype[100];
-    int bigendian;
-
-    FILE *f = NULL;
-    FILE *fimg = NULL;
-    OPJ_COLOR_SPACE color_space;
-    opj_volume_cmptparm_t cmptparm; /* maximum of 1 component */
-    opj_volume_t * volume = NULL;
-    opj_volume_comp_t *comp = NULL;
-
-    bigendian = 0;
-    color_space = CLRSPC_GRAY;
-
-    fimg = fopen(fileimg, "r");
-    if (!fimg) {
-        fprintf(stderr, "[ERROR] Failed to open %s for reading !!\n", fileimg);
-        return 0;
-    }
-
-    /*Fetch only the path */
-    strcpy(tmpdirpath, fileimg);
-    if ((tmp = strrchr(tmpdirpath, '/')) != NULL) {
-        tmp++;
-        *tmp = '\0';
-        strcpy(dirpath, tmpdirpath);
-    } else {
-        strcpy(dirpath, "./");
-    }
-
-    fseek(fimg, 0, SEEK_SET);
-    while (!feof(fimg)) {
-        fgets(line, 100, fimg);
-        /*fprintf(stdout,"%s %d \n",line,feof(fimg));*/
-        if (strncmp(line, "Image", 5) == 0) {
-            sscanf(line, "%*s%*[ \t]%s", datatype);
-        } else if (strncmp(line, "File", 4) == 0) {
-            sscanf(line, "%*s %*s%*[ \t]%s", filename);
-            strcat(dirpath, filename);
-            strcpy(filename, dirpath);
-        } else if (strncmp(line, "Min", 3) == 0) {
-            sscanf(line, "%*s %*s%*[ \t]%d%*[ \t]%d", &min, &max);
-            prec = int_floorlog2(max - min + 1);
-        } else if (strncmp(line, "Bpp", 3) == 0) {
-            sscanf(line, "%*s%*[ \t]%d", &prec);
-        } else if (strncmp(line, "Color", 5) == 0) {
-            sscanf(line, "%*s %*s%*[ \t]%d", &color_space);
-        } else if (strncmp(line, "Dim", 3) == 0) {
-            sscanf(line, "%*s%*[ \t]%d%*[ \t]%d%*[ \t]%d", &w, &h, &l);
-        } else if (strncmp(line, "Res", 3) == 0) {
-            sscanf(line, "%*s%*[ \t]%f%*[ \t]%f%*[ \t]%f", &dx, &dy, &dz);
-        }
-
-    }
-#ifdef VERBOSE
-    fprintf(stdout, "[INFO] %s %d \t %d %d %d \t %f %f %f \t %d %d %d \n", filename,
-            color_space, w, h, l, dx, dy, dz, max, min, prec);
-#endif
-    fclose(fimg);
-
-    /* error control */
-    if (!prec || !w || !h || !l) {
-        fprintf(stderr,
-                "[ERROR] Unable to read IMG file correctly. Found some null values.");
-        return NULL;
-    }
-
-    /* initialize volume components */
-    memset(&cmptparm, 0, sizeof(opj_volume_cmptparm_t));
-
-    cmptparm.prec = prec;
-    cmptparm.bpp = prec;
-    cmptparm.sgnd = 0;
-    cmptparm.bigendian = bigendian;
-    cmptparm.dcoffset = parameters->dcoffset;
-    cmptparm.dx = subsampling_dx;
-    cmptparm.dy = subsampling_dy;
-    cmptparm.dz = subsampling_dz;
-    cmptparm.w = w;
-    cmptparm.h = h;
-    cmptparm.l = l;
-
-    /* create the volume */
-    volume = opj_volume_create(numcomps, &cmptparm, color_space);
-    if (!volume) {
-        fprintf(stdout, "[ERROR] Unable to create volume");
-        return NULL;
-    }
-
-    /* set volume offset and reference grid */
-    volume->x0 = parameters->volume_offset_x0;
-    volume->y0 = parameters->volume_offset_y0;
-    volume->z0 = parameters->volume_offset_z0;
-    volume->x1 = parameters->volume_offset_x0 + (w - 1) *   subsampling_dx + 1;
-    volume->y1 = parameters->volume_offset_y0 + (h - 1) *   subsampling_dy + 1;
-    volume->z1 = parameters->volume_offset_z0 + (l - 1) *   subsampling_dz + 1;
-
-    max = 0;
-    /* set volume data */
-    f = fopen(filename, "rb");
-    if (!f) {
-        fprintf(stderr, "[ERROR] Failed to open %s for reading !!\n", filename);
-        opj_free(volume);
-        return 0;
-    }
-
-    /* BINARY */
-    for (compno = 0; compno < volume->numcomps; compno++) {
-        int whl = w * h * l;
-        /* set volume data */
-        comp = &volume->comps[compno];
-
-        /*if (comp->prec <= 8) {
-            if (!comp->sgnd) {
-                unsigned char *data = (unsigned char *) malloc(whl * sizeof(unsigned char));
-                fread(data, 1, whl, f);
-                for (i = 0; i < whl; i++) {
-                    comp->data[i] = data[i];
-                    if (comp->data[i] > max)
-                        max = comp->data[i];
-                }
-                free(data);
-            } else {
-                char *data = (char *) malloc(whl);
-                fread(data, 1, whl, f);
-                for (i = 0; i < whl; i++) {
-                    comp->data[i] = data[i];
-                    if (comp->data[i] > max)
-                        max = comp->data[i];
-                }
-                free(data);
-            }
-        } else if (comp->prec <= 16) {
-            if (!comp->sgnd) {
-                unsigned short *data = (unsigned short *) malloc(whl * sizeof(unsigned short));
-                int leido = fread(data, 2, whl, f);
-                if (!leido) {
-                    free(data); fclose(f);
-                    return NULL;
-                }
-
-                for (i = 0; i < whl; i++) {
-                    if (bigendian)  //(c1 << 8) + c2;
-                        comp->data[i] = data[i];
-                    else{           //(c2 << 8) + c1;
-                        comp->data[i] = ShortSwap(data[i]);
-                    }
-                    if (comp->data[i] > max)
-                        max = comp->data[i];
-                }
-                free(data);
-            } else {
-                short *data = (short *) malloc(whl);
-                int leido = fread(data, 2, whl, f);
-                if (!leido) {
-                    free(data); fclose(f);
-                    return NULL;
-                }
-                for (i = 0; i < whl; i++) {
-                    if (bigendian){ //(c1 << 8) + c2;
-                        comp->data[i] = data[i];
-                    }else{          //(c2 << 8) + c1;
-                        comp->data[i] = (short) ShortSwap((unsigned short) data[i]);
-                    }
-                    if (comp->data[i] > max)
-                        max = comp->data[i];
-                }
-                free(data);
-            }
-        } else {
-            if (!comp->sgnd) {
-                unsigned int *data = (unsigned int *) malloc(whl * sizeof(unsigned int));
-                int leido = fread(data, 4, whl, f);
-                if (!leido) {
-                    free(data); fclose(f);
-                    return NULL;
-                }               for (i = 0; i < whl; i++) {
-                    if (!bigendian)
-                        comp->data[i] = LongSwap(data[i]);
-                    else
-                        comp->data[i] = data[i];
-                    if (comp->data[i] > max)
-                        max = comp->data[i];
-                }
-                free(data);
-            } else {
-                int leido = fread(comp->data, 4, whl, f);
-                if (!leido) {
-                    fclose(f);
-                    return NULL;
-                }
-                for (i = 0; i < whl; i++) {
-                    if (!bigendian)
-                        comp->data[i] = (int) LongSwap((unsigned int) comp->data[i]);
-                    if (comp->data[i] > max)
-                        max = comp->data[i];
-                }
-            }
-        }*/
-
-        for (i = 0; i < whl; i++) {
-            int v;
-            if (comp->prec <= 8) {
-                if (!comp->sgnd) {
-                    v = readuchar(f);
-                } else {
-                    v = (char) readuchar(f);
-                }
-            } else if (comp->prec <= 16) {
-                if (!comp->sgnd) {
-                    v = readushort(f, bigendian);
-                } else {
-                    v = (short) readushort(f, bigendian);
-                }
-            } else {
-                if (!comp->sgnd) {
-                    v = readuint(f, bigendian);
-                } else {
-                    v = (int) readuint(f, bigendian);
-                }
-            }
-            if (v > max) {
-                max = v;
-            }
-            comp->data[i] = v;
-        }
-        comp->bpp = int_floorlog2(max) + 1;
-    }
-    fclose(f);
-    return volume;
-}
-
diff --git a/src/bin/jp3d/convert.h b/src/bin/jp3d/convert.h
deleted file mode 100644 (file)
index 255717e..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * Copyright (c) 2006, Mónica Díez García, Image Processing Laboratory, University of Valladolid, Spain
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef __JP3D_CONVERT_H
-#define __JP3D_CONVERT_H
-
-/**
-Load a single volume component encoded in PGX file format
-@param filename Name of the PGX file to load
-@param parameters *List ?*
-@return Returns a greyscale volume if successful, returns NULL otherwise
-*/
-opj_volume_t* pgxtovolume(char *filename, opj_cparameters_t *parameters);
-
-int volumetopgx(opj_volume_t *volume, char *outfile);
-
-opj_volume_t* bintovolume(char *filename, char *fileimg,
-                          opj_cparameters_t *parameters);
-
-int volumetobin(opj_volume_t *volume, char *outfile);
-
-opj_volume_t* imgtovolume(char *fileimg, opj_cparameters_t *parameters);
-
-#endif /* __J2K_CONVERT_H */
-
diff --git a/src/bin/jp3d/getopt.c b/src/bin/jp3d/getopt.c
deleted file mode 100644 (file)
index 855b9ae..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (c) 1987, 1993, 1994
- *  The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *  This product includes software developed by the University of
- *  California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/* last review : october 29th, 2002 */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)getopt.c   8.3 (Berkeley) 4/27/95";
-#endif              /* LIBC_SCCS and not lint */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-int opterr = 1,         /* if error message should be printed */
-    optind = 1,            /* index into parent argv vector */
-    optopt,                /* character checked for validity */
-    optreset;              /* reset getopt */
-char *optarg;           /* argument associated with option */
-
-#define BADCH   (int)'?'
-#define BADARG  (int)':'
-#define EMSG    ""
-
-/*
- * getopt --
- *  Parse argc/argv argument vector.
- */
-int getopt(int nargc, char *const *nargv, const char *ostr)
-{
-
-#  define __progname nargv[0] /* program name */
-
-    static char *place = EMSG;    /* option letter processing */
-    char *oli;                    /* option letter list index */
-
-    if (optreset || !*place) {    /* update scanning pointer */
-        optreset = 0;
-        if (optind >= nargc || *(place = nargv[optind]) != '-') {
-            place = EMSG;
-            return (-1);
-        }
-        if (place[1] && *++place == '-') {  /* found "--" */
-            ++optind;
-            place = EMSG;
-            return (-1);
-        }
-    } /* option letter okay? */
-
-    if ((optopt = (int) * place++) == (int) ':' || !(oli = strchr(ostr, optopt))) {
-        /* if the user didn't specify '-' as an option, assume it means -1. */
-        if (optopt == (int) '-') {
-            return (-1);
-        }
-        if (!*place) {
-            ++optind;
-        }
-        if (opterr && *ostr != ':') {
-            (void) fprintf(stdout, "[ERROR] %s: illegal option -- %c\n", __progname,
-                           optopt);
-        }
-        return (BADCH);
-    }
-
-    if (*++oli != ':') {      /* don't need argument */
-        optarg = NULL;
-        if (!*place) {
-            ++optind;
-        }
-    } else {                  /* need an argument */
-        if (*place) {                   /* no white space */
-            optarg = place;
-        } else if (nargc <= ++optind) { /* no arg */
-            place = EMSG;
-            if (*ostr == ':') {
-                return (BADARG);
-            }
-            if (opterr) {
-                (void) fprintf(stdout, "[ERROR] %s: option requires an argument -- %c\n",
-                               __progname, optopt);
-            }
-            return (BADCH);
-        } else {                        /* white space */
-            optarg = nargv[optind];
-        }
-        place = EMSG;
-        ++optind;
-    }
-    return (optopt);      /* dump back option letter */
-}
diff --git a/src/bin/jp3d/getopt.h b/src/bin/jp3d/getopt.h
deleted file mode 100644 (file)
index 935171b..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/* last review : october 29th, 2002 */
-
-#ifndef _GETOPT_H_
-#define _GETOPT_H_
-
-extern int opterr;
-extern int optind;
-extern int optopt;
-extern int optreset;
-extern char *optarg;
-
-extern int getopt(int nargc, char *const *nargv, const char *ostr);
-
-#endif              /* _GETOPT_H_ */
diff --git a/src/bin/jp3d/opj_jp3d_compress.c b/src/bin/jp3d/opj_jp3d_compress.c
deleted file mode 100644 (file)
index 901a14f..0000000
+++ /dev/null
@@ -1,989 +0,0 @@
-/*
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * Copyright (c) 2006, Mónica Díez García, Image Processing Laboratory, University of Valladolid, Spain
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include "opj_config.h"
-#include "openjp3d.h"
-#include "opj_getopt.h"
-#include "convert.h"
-
-#ifdef _WIN32
-#include <windows.h>
-#else
-#define stricmp strcasecmp
-#define strnicmp strncasecmp
-#endif /* _WIN32 */
-
-/* ----------------------------------------------------------------------- */
-
-void encode_help_display()
-{
-    fprintf(stdout, "List of parameters for the JPEG2000 Part 10 encoder:\n");
-    fprintf(stdout, "------------\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "Required Parameters (except with -h):\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "-i           : source file  (-i source.bin or source*.pgx) \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "-m           : source characteristics file (-m imgfile.img) \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "-o           : destination file (-o dest.jp3d) \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "Optional Parameters:\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "-h           : display the help information \n ");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "-n           : number of resolutions (-n 3,3,3) \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "-I           : use the irreversible transforms: ICT + DWT 9-7 (-I) \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "-C           : coding algorithm (-C 2EB) [2EB, 3EB] \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "-r           : different compression ratios for successive layers (-r 20,10,5)\n ");
-    fprintf(stdout,
-            "           - The rate specified for each quality level is the desired compression factor.\n");
-    fprintf(stdout, "           - Rate 1 means lossless compression\n");
-    fprintf(stdout,
-            "               (options -r and -q cannot be used together)\n ");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "-q           : different psnr for successive layers (-q 30,40,50) \n ");
-    fprintf(stdout,
-            "               (options -r and -q cannot be used together)\n ");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "-b           : size of code block (-b 32,32,32) \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "-c           : size of precinct (-c 128,128,128) \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "-t           : size of tile (-t 512,512,512) \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "-p           : progression order (-p LRCP) [LRCP, RLCP, RPCL, PCRL, CPRL] \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "-s           : subsampling factor (-s 2,2,2) [-s X,Y,Z] \n");
-    fprintf(stdout, "                    - Remark: subsampling bigger than 2 can produce error\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "-SOP         : write SOP marker before each packet \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "-EPH         : write EPH marker after each header packet \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "-M           : code-block style (-M 0) [1=BYPASS(LAZY) 2=RESET 4=RESTART(TERMALL)\n");
-    fprintf(stdout, "                 8=VSC 16=PTERM 32=SEGSYM 64=3DCTXT] \n");
-    fprintf(stdout,
-            "                 Indicate multiple modes by adding their values. \n");
-    fprintf(stdout,
-            "                 ex: RESTART(4) + RESET(2) + SEGMARK(32) = -M 38\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "-D           : define DC offset (-D 12) \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "-x           : create an index file *.Idx (-x index_name.Idx) \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "-ROI         : c=%%d,U=%%d : quantization indices upshifted \n");
-    fprintf(stdout, "               for component c=%%d [%%d = 0,1,2]\n");
-    fprintf(stdout,
-            "               with a value of U=%%d [0 <= %%d <= 37] (i.e. -ROI:c=0,U=25) \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "-d           : offset of the origin of the volume (-d 150,300,100) \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "-l           : offset of the origin of the tiles (-l 100,75,25) \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "DEFAULT CODING:\n");
-    fprintf(stdout, "------------\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, " * Lossless\n");
-    fprintf(stdout, " * 1 tile\n");
-    fprintf(stdout,
-            " * Size of precinct : 2^15 x 2^15 x 2^15 (means 1 precinct)\n");
-    fprintf(stdout, " * Size of code-block : 64 x 64 x 64\n");
-    fprintf(stdout, " * Number of resolutions in x, y and z axis: 3\n");
-    fprintf(stdout, " * No SOP marker in the codestream\n");
-    fprintf(stdout, " * No EPH marker in the codestream\n");
-    fprintf(stdout, " * No sub-sampling in x, y or z direction\n");
-    fprintf(stdout, " * No mode switch activated\n");
-    fprintf(stdout, " * Progression order: LRCP\n");
-    fprintf(stdout, " * No index file\n");
-    fprintf(stdout, " * No ROI upshifted\n");
-    fprintf(stdout, " * No offset of the origin of the volume\n");
-    fprintf(stdout, " * No offset of the origin of the tiles\n");
-    fprintf(stdout, " * Reversible DWT 5-3 on each 2D slice\n");
-    fprintf(stdout, " * Coding algorithm: 2D-EBCOT \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "REMARKS:\n");
-    fprintf(stdout, "---------\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "- The markers written to the main_header are : SOC SIZ COD QCD COM.\n");
-    fprintf(stdout,
-            "- COD and QCD markers will never appear in the tile_header.\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "- You need enough disk space memory (twice the original) to encode \n");
-    fprintf(stdout,
-            "the volume,i.e. for a 1.5 GB volume you need a minimum of 3GB of disk memory)\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "- When loading *.pgx files, a relative path to directory is needed for input argument \n");
-    fprintf(stdout,
-            " followed by the common prefix of the slices and a '*' character representing sequential numeration.\n");
-    fprintf(stdout, "( -i relativepath/slices*.pgx )\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, " - The index file has the structure below:\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "\t        Image_height Image_width Image_depth\n");
-    fprintf(stdout, "\t        Progression order: 0 (LRCP)\n");
-    fprintf(stdout, "\t        Tiles_size_X Tiles_size_Y Tiles_size_Z\n");
-    fprintf(stdout, "\t        Components_nb\n");
-    fprintf(stdout, "\t        Layers_nb\n");
-    fprintf(stdout, "\t        Decomposition_levels\n");
-    fprintf(stdout,
-            "\t        [Precincts_size_X_res_Nr Precincts_size_Y_res_Nr Precincts_size_Z_res_Nr]\n\t  ...\n");
-    fprintf(stdout,
-            "\t        [Precincts_size_X_res_0 Precincts_size_Y_res_0 Precincts_size_Z_res_0]\n");
-    fprintf(stdout, "\t        Main_header_end_position\n");
-    fprintf(stdout, "\t        Codestream_size\n");
-    fprintf(stdout,
-            "\t        Tile_0 [start_pos end_header end_pos TotalDisto NumPix MaxMSE]\n");
-    fprintf(stdout, "\t        ...\n");
-    fprintf(stdout,
-            "\t        Tile_Nt [  ''         ''        ''        ''       ''    ''  ]\n");
-    fprintf(stdout,
-            "\t  Tpacket_0 [Tile layer res. comp. prec. start_pos end_pos disto]\n");
-    fprintf(stdout, "\t  ...\n");
-    fprintf(stdout,
-            "\t  Tpacket_Np [''   ''    ''   ''    ''       ''       ''     '' ]\n");
-    fprintf(stdout, "\t  MaxDisto\n");
-    fprintf(stdout, "\t  TotalDisto\n\n");
-    fprintf(stdout, "\n");
-
-}
-
-OPJ_PROG_ORDER give_progression(char progression[4])
-{
-    if (strncmp(progression, "LRCP", 4) == 0) {
-        return LRCP;
-    }
-    if (strncmp(progression, "RLCP", 4) == 0) {
-        return RLCP;
-    }
-    if (strncmp(progression, "RPCL", 4) == 0) {
-        return RPCL;
-    }
-    if (strncmp(progression, "PCRL", 4) == 0) {
-        return PCRL;
-    }
-    if (strncmp(progression, "CPRL", 4) == 0) {
-        return CPRL;
-    }
-
-    return PROG_UNKNOWN;
-}
-
-OPJ_TRANSFORM give_transform(char transform[4])
-{
-    if (strncmp(transform, "2DWT", 4) == 0) {
-        return TRF_2D_DWT;
-    }
-    if (strncmp(transform, "3DWT", 4) == 0) {
-        return TRF_3D_DWT;
-    }
-    return TRF_UNKNOWN;
-}
-
-OPJ_ENTROPY_CODING give_coding(char coding[3])
-{
-
-    if (strncmp(coding, "2EB", 3) == 0) {
-        return ENCOD_2EB;
-    }
-    if (strncmp(coding, "3EB", 3) == 0) {
-        return ENCOD_3EB;
-    }
-    /*if(strncmp(coding, "2GR", 3) == 0) {
-        return ENCOD_2GR;
-    }
-    if(strncmp(coding, "3GR", 3) == 0) {
-        return ENCOD_3GR;
-    }*/
-
-    return ENCOD_UNKNOWN;
-}
-
-int get_file_format(char *filename)
-{
-    int i;
-    static const char *extension[] = {"pgx", "bin", "img", "j3d", "jp3d", "j2k"};
-    static const int format[] = { PGX_DFMT, BIN_DFMT, IMG_DFMT, J3D_CFMT, J3D_CFMT, J2K_CFMT};
-    char * ext = strrchr(filename, '.');
-    if (ext) {
-        ext++;
-        for (i = 0; i < sizeof(format) / sizeof(*format); i++) {
-            if (strnicmp(ext, extension[i], 3) == 0) {
-                return format[i];
-            }
-        }
-    }
-
-    return -1;
-}
-
-/* ------------------------------------------------------------------------------------ */
-
-int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters)
-{
-    int i, value;
-
-    /* parse the command line */
-
-    while (1) {
-        int c = opj_getopt(argc, argv,
-                           "i:m:o:r:q:f:t:n:c:b:x:p:s:d:hP:S:E:M:D:R:l:T:C:A:I");
-        if (c == -1) {
-            break;
-        }
-        switch (c) {
-        case 'i': {         /* input file */
-            char *infile = opj_optarg;
-            parameters->decod_format = get_file_format(infile);
-            switch (parameters->decod_format) {
-            case PGX_DFMT:
-            case BIN_DFMT:
-            case IMG_DFMT:
-                break;
-            default:
-                fprintf(stdout,
-                        "[ERROR] Unrecognized format for infile : %s [accept only *.pgx or *.bin] !!\n\n",
-                        infile);
-                return 1;
-                break;
-            }
-            strncpy(parameters->infile, infile, MAX_PATH);
-            fprintf(stdout, "[INFO] Infile: %s \n", parameters->infile);
-
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-        case 'm': {         /* input IMG file */
-            char *imgfile = opj_optarg;
-            int imgformat = get_file_format(imgfile);
-            switch (imgformat) {
-            case IMG_DFMT:
-                break;
-            default:
-                fprintf(stdout,
-                        "[ERROR] Unrecognized format for imgfile : %s [accept only *.img] !!\n\n",
-                        imgfile);
-                return 1;
-                break;
-            }
-            strncpy(parameters->imgfile, imgfile, MAX_PATH);
-            fprintf(stdout, "[INFO] Imgfile: %s Format: %d\n", parameters->imgfile,
-                    imgformat);
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-        case 'o': {         /* output file */
-            char *outfile = opj_optarg;
-            parameters->cod_format = get_file_format(outfile);
-            switch (parameters->cod_format) {
-            case J3D_CFMT:
-            case J2K_CFMT:
-            case LSE_CFMT:
-                break;
-            default:
-                fprintf(stdout,
-                        "[ERROR] Unknown output format volume %s [only *.j2k, *.lse3d or *.jp3d]!! \n",
-                        outfile);
-                return 1;
-                break;
-            }
-            strncpy(parameters->outfile, outfile, MAX_PATH);
-            fprintf(stdout, "[INFO] Outfile: %s \n", parameters->outfile);
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 'r': {         /* define compression rates for each layer */
-            char *s = opj_optarg;
-            while (sscanf(s, "%f", &parameters->tcp_rates[parameters->tcp_numlayers]) ==
-                    1) {
-                parameters->tcp_numlayers++;
-                while (*s && *s != ',') {
-                    s++;
-                }
-                if (!*s) {
-                    break;
-                }
-                s++;
-            }
-            parameters->cp_disto_alloc = 1;
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 'q': {         /* define distorsion (PSNR) for each layer */
-            char *s = opj_optarg;
-            while (sscanf(s, "%f", &parameters->tcp_distoratio[parameters->tcp_numlayers])
-                    == 1) {
-                parameters->tcp_numlayers++;
-                while (*s && *s != ',') {
-                    s++;
-                }
-                if (!*s) {
-                    break;
-                }
-                s++;
-            }
-            parameters->cp_fixed_quality = 1;
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 'f': {
-            fprintf(stdout, "/---------------------------------------------------\\\n");
-            fprintf(stdout, "|  Fixed layer allocation option not implemented !!  |\n");
-            fprintf(stdout, "\\---------------------------------------------------/\n");
-            /*int *row = NULL, *col = NULL;
-            int numlayers = 0, matrix_width = 0;
-
-            char *s = opj_optarg;
-            sscanf(s, "%d", &numlayers);
-            s++;
-            if (numlayers > 9)
-                s++;
-
-            parameters->tcp_numlayers = numlayers;
-            matrix_width = parameters->numresolution[0] + parameters->numresolution[1] + parameters->numresolution[2];
-            parameters->cp_matrice = (int *) malloc(numlayers * matrix_width * sizeof(int));
-            s = s + 2;
-
-            for (i = 0; i < numlayers; i++) {
-                row = &parameters->cp_matrice[i * matrix_width];
-                col = row;
-                parameters->tcp_rates[i] = 1;
-                sscanf(s, "%d,", &col[0]);
-                s += 2;
-                if (col[0] > 9)
-                    s++;
-                col[1] = 0;
-                col[2] = 0;
-                for (j = 1; j < matrix_width; j++) {
-                    col += 3; j+=2;
-                    sscanf(s, "%d,%d,%d", &col[0], &col[1], &col[2]);
-                    s += 6;
-                    if (col[0] > 9)
-                        s++;
-                    if (col[1] > 9)
-                        s++;
-                    if (col[2] > 9)
-                        s++;
-                }
-                if (i < numlayers - 1)
-                    s++;
-            }
-            parameters->cp_fixed_alloc = 1; */
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 't': {         /* tiles */
-            if (sscanf(opj_optarg, "%d,%d,%d", &parameters->cp_tdx, &parameters->cp_tdy,
-                       &parameters->cp_tdz) != 3) {
-                fprintf(stdout,
-                        "[ERROR] '-t' 'dimensions of tiles' argument error !  [-t tdx,tdy,tdz]\n");
-                return 1;
-            }
-            parameters->tile_size_on = true;
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 'n': {         /* resolution */
-            int aux;
-            aux = sscanf(opj_optarg, "%d,%d,%d", &parameters->numresolution[0],
-                         &parameters->numresolution[1], &parameters->numresolution[2]);
-            if (aux == 2) {
-                parameters->numresolution[2] = 1;
-            } else if (aux == 1) {
-                parameters->numresolution[1] = parameters->numresolution[0];
-                parameters->numresolution[2] = 1;
-            } else if (aux == 0) {
-                parameters->numresolution[0] = 1;
-                parameters->numresolution[1] = 1;
-                parameters->numresolution[2] = 1;
-            }
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-        case 'c': {         /* precinct dimension */
-            char sep;
-            int res_spec = 0;
-            int aux;
-            char *s = opj_optarg;
-            do {
-                sep = 0;
-                aux = sscanf(s, "[%d,%d,%d]%c", &parameters->prct_init[0][res_spec],
-                             &parameters->prct_init[1][res_spec], &parameters->prct_init[2][res_spec], &sep);
-                if (sep == ',' && aux != 4) {
-                    fprintf(stdout,
-                            "[ERROR] '-c' 'dimensions of precincts' argument error !  [-c [prcx_res0,prcy_res0,prcz_res0],...,[prcx_resN,prcy_resN,prcz_resN]]\n");
-                    return 1;
-                }
-                parameters->csty |= 0x01;
-                res_spec++;
-                s = strpbrk(s, "]") + 2;
-            } while (sep == ',');
-            parameters->res_spec = res_spec; /* number of precinct size specifications */
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 'b': {         /* code-block dimension */
-            int cblockw_init = 0, cblockh_init = 0, cblockl_init = 0;
-            if (sscanf(opj_optarg, "%d,%d,%d", &cblockw_init, &cblockh_init,
-                       &cblockl_init) != 3) {
-                fprintf(stdout,
-                        "[ERROR] '-b' 'dimensions of codeblocks' argument error !  [-b cblkx,cblky,cblkz]\n");
-                return 1;
-            }
-            if (cblockw_init * cblockh_init * cblockl_init > (1 << 18) ||
-                    cblockw_init > 1024 || cblockw_init < 4 || cblockh_init > 1024 ||
-                    cblockh_init < 4 || cblockl_init > 1024 || cblockl_init < 4) {
-                fprintf(stdout,
-                        "[ERROR] Size of code_block error (option -b) !!\n\nRestriction :\n * width*height*length<=4096\n * 4<=width,height,length<= 1024\n\n");
-                return 1;
-            }
-            parameters->cblock_init[0] = cblockw_init;
-            parameters->cblock_init[1] = cblockh_init;
-            parameters->cblock_init[2] = cblockl_init;
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 'x': {         /* creation of index file */
-            char *index = opj_optarg;
-            strncpy(parameters->index, index, MAX_PATH);
-            parameters->index_on = 1;
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 'p': {         /* progression order */
-            char progression[4];
-
-            strncpy(progression, opj_optarg, 4);
-            parameters->prog_order = give_progression(progression);
-            if (parameters->prog_order == -1) {
-                fprintf(stdout,
-                        "[ERROR] Unrecognized progression order [LRCP, RLCP, RPCL, PCRL, CPRL] !!\n");
-                return 1;
-            }
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 's': {         /* subsampling factor */
-            if (sscanf(opj_optarg, "%d,%d,%d", &parameters->subsampling_dx,
-                       &parameters->subsampling_dy, &parameters->subsampling_dz) != 3) {
-                fprintf(stdout, "[ERROR] '-s' sub-sampling argument error !  [-s dx,dy,dz]\n");
-                return 1;
-            }
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 'd': {         /* coordonnate of the reference grid */
-            if (sscanf(opj_optarg, "%d,%d,%d", &parameters->volume_offset_x0,
-                       &parameters->volume_offset_y0, &parameters->volume_offset_z0) != 3) {
-                fprintf(stdout,
-                        "[ERROR] -d 'coordonnate of the reference grid' argument error !! [-d x0,y0,z0]\n");
-                return 1;
-            }
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 'h': {         /* display an help description */
-            encode_help_display();
-            return 1;
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 'P': {         /* POC */
-            int numpocs = 0;        /* number of progression order change (POC) default 0 */
-            opj_poc_t *POC = NULL;  /* POC : used in case of Progression order change */
-
-            char *s = opj_optarg;
-            POC = parameters->POC;
-
-            fprintf(stdout, "/----------------------------------\\\n");
-            fprintf(stdout, "|  POC option not fully tested !!  |\n");
-            fprintf(stdout, "\\----------------------------------/\n");
-
-            while (sscanf(s, "T%d=%d,%d,%d,%d,%d,%s", &POC[numpocs].tile,
-                          &POC[numpocs].resno0, &POC[numpocs].compno0,
-                          &POC[numpocs].layno1, &POC[numpocs].resno1,
-                          &POC[numpocs].compno1, POC[numpocs].progorder) == 7) {
-                POC[numpocs].prg = give_progression(POC[numpocs].progorder);
-                /* POC[numpocs].tile; */
-                numpocs++;
-                while (*s && *s != '/') {
-                    s++;
-                }
-                if (!*s) {
-                    break;
-                }
-                s++;
-            }
-            parameters->numpocs = numpocs;
-        }
-        break;
-
-        /* ------------------------------------------------------ */
-
-        case 'S': {         /* SOP marker */
-            parameters->csty |= 0x02;
-        }
-        break;
-
-        /* ------------------------------------------------------ */
-
-        case 'E': {         /* EPH marker */
-            parameters->csty |= 0x04;
-        }
-        break;
-
-        /* ------------------------------------------------------ */
-
-        case 'M': {         /* Codification mode switch */
-            fprintf(stdout, "[INFO] Mode switch option not fully tested !!\n");
-            value = 0;
-            if (sscanf(opj_optarg, "%d", &value) == 1) {
-                for (i = 0; i <= 6; i++) {
-                    int cache = value & (1 << i);
-                    if (cache) {
-                        parameters->mode |= (1 << i);
-                    }
-                }
-            }
-        }
-        break;
-
-        /* ------------------------------------------------------ */
-
-        case 'D': {         /* DCO */
-            if (sscanf(opj_optarg, "%d", &parameters->dcoffset) != 1) {
-                fprintf(stdout, "[ERROR] DC offset error !! [-D %d]\n", parameters->dcoffset);
-                return 1;
-            }
-        }
-        break;
-
-        /* ------------------------------------------------------ */
-
-        case 'R': {         /* ROI */
-            if (sscanf(opj_optarg, "OI:c=%d,U=%d", &parameters->roi_compno,
-                       &parameters->roi_shift) != 2) {
-                fprintf(stdout, "[ERROR] ROI error !! [-ROI:c='compno',U='shift']\n");
-                return 1;
-            }
-        }
-        break;
-
-        /* ------------------------------------------------------ */
-
-        case 'l': {         /* Tile offset */
-            if (sscanf(opj_optarg, "%d,%d,%d", &parameters->cp_tx0, &parameters->cp_ty0,
-                       &parameters->cp_tz0) != 3) {
-                fprintf(stdout, "[ERROR] -l 'tile offset' argument error !! [-l X0,Y0,Z0]");
-                return 1;
-            }
-        }
-        break;
-
-        /* ------------------------------------------------------
-
-        case 'T':            // Transformation of original data (2D-DWT/3D-DWT/3D-RLS/2D-DWT+1D-RLS)
-        {
-        char transform[4];
-
-        strncpy(transform, opj_optarg, 4);
-        parameters->transform_format = give_transform(transform);
-        if (parameters->transform_format == -1) {
-            fprintf(stdout, "[ERROR] -T 'Transform domain' argument error !! [-T 2DWT, 3DWT, 3RLS or 3LSE only]");
-             return 1;
-        }
-        }
-        break;
-
-         ------------------------------------------------------ */
-
-        case 'C': {         /* Coding of transformed data */
-            char coding[3];
-
-            strncpy(coding, opj_optarg, 3);
-            parameters->encoding_format = give_coding(coding);
-            if (parameters->encoding_format == -1) {
-                fprintf(stdout,
-                        "[ERROR] -C 'Coding algorithm' argument error !! [-C 2EB, 3EB, 2GR, 3GR or GRI only]");
-                return 1;
-            }
-        }
-        break;
-
-        /* ------------------------------------------------------ */
-
-        case 'I': {         /* reversible or not */
-            parameters->irreversible = 1;
-        }
-        break;
-
-        default:
-            fprintf(stdout, "[ERROR] This option is not valid \"-%c %s\"\n", c, opj_optarg);
-            return 1;
-        }
-    }
-
-    /* check for possible errors */
-
-    if ((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) {
-        fprintf(stdout, "usage: jp3d_vm_enc -i volume-file -o jp3d-file (+ options)\n");
-        return 1;
-    }
-
-    if ((parameters->decod_format == BIN_DFMT) && (parameters->imgfile[0] == 0)) {
-        fprintf(stdout,
-                "usage: jp3d_vm_enc -i bin-volume-file -m img-file -o jp3d-file (+ options)\n");
-        return 1;
-    }
-
-    if ((parameters->decod_format != BIN_DFMT) &&
-            (parameters->decod_format != PGX_DFMT) &&
-            (parameters->decod_format != IMG_DFMT)) {
-        fprintf(stdout,
-                "usage: jp3d_vm_enc -i input-volume-file [*.bin,*.pgx,*.img] -o jp3d-file [*.jp3d,*.j2k] (+ options)\n");
-        return 1;
-    }
-    if ((parameters->cod_format != J3D_CFMT) &&
-            (parameters->cod_format != J2K_CFMT)) {
-        fprintf(stdout,
-                "usage: jp3d_vm_enc -i input-volume-file [*.bin,*.pgx,*.img] -o jp3d-file [*.jp3d,*.j2k] (+ options)\n");
-        return 1;
-    }
-
-    if ((parameters->encoding_format == ENCOD_2GR ||
-            parameters->encoding_format == ENCOD_3GR) &&
-            parameters->transform_format != TRF_3D_LSE &&
-            parameters->transform_format != TRF_3D_RLS) {
-        fprintf(stdout,
-                "[ERROR] Entropy coding options -C [2GR,3GR] are only compatible with predictive-based transform algorithms: -T [3RLS,3LSE].\n");
-        return 1;
-    }
-    if (parameters->encoding_format == ENCOD_3EB) {
-        parameters->mode |= (1 << 6);
-    }
-
-    if ((parameters->mode >> 6) & 1) {
-        parameters->encoding_format = ENCOD_3EB;
-    }
-
-    if ((parameters->numresolution[2] == 0 || (parameters->numresolution[1] == 0) ||
-            (parameters->numresolution[0] == 0))) {
-        fprintf(stdout,
-                "[ERROR] -n 'resolution levels' argument error ! Resolutions must be greater than 1 in order to perform DWT.\n");
-        return 1;
-    }
-    if (parameters->numresolution[1] != parameters->numresolution[0]) {
-        fprintf(stdout,
-                "[ERROR] -n 'resolution levels' argument error ! Resolutions in X and Y axis must be the same in this implementation.\n");
-        return 1;
-    }
-
-    if (parameters->numresolution[2] > parameters->numresolution[0]) {
-        fprintf(stdout,
-                "[ERROR] -n 'resolution levels' argument error ! Resolutions in Z axis must be lower than in X-Y axis.\n");
-        return 1;
-    }
-
-    if (parameters->dcoffset >= 128 && parameters->dcoffset <= -128) {
-        fprintf(stdout,
-                "[ERROR] -D 'DC offset' argument error ! Value must be -128<=DCO<=128.\n");
-        return 1;
-    }
-
-    if (parameters->numresolution[2] != 1) {
-        parameters->transform_format = TRF_3D_DWT;
-        /*fprintf(stdout, "[Warning] Resolution level in axial dim > 1 : 3D-DWT will be performed... \n");*/
-    } else if (parameters->numresolution[2] == 1) {
-        parameters->transform_format = TRF_2D_DWT;
-        /*fprintf(stdout, "[Warning] Resolution level in axial dim == 1 : 2D-DWT will be performed... \n");*/
-    }
-
-    if ((parameters->cod_format == J2K_CFMT) &&
-            (parameters->transform_format != TRF_2D_DWT ||
-             parameters->encoding_format != ENCOD_2EB)) {
-        fprintf(stdout,
-                "[WARNING] Incompatible options -o *.j2k and defined transform or encoding algorithm. Latter will be ignored\n");
-        parameters->transform_format = TRF_2D_DWT;
-        parameters->encoding_format = ENCOD_2EB;
-    }
-
-    if ((parameters->cp_disto_alloc || parameters->cp_fixed_alloc ||
-            parameters->cp_fixed_quality) &&
-            (!(parameters->cp_disto_alloc ^ parameters->cp_fixed_quality))) {
-        fprintf(stdout, "[ERROR] Options -r and -q cannot be used together !!\n");
-        return 1;
-    }               /* mod fixed_quality */
-
-    /* if no rate entered, lossless by default */
-    if (parameters->tcp_numlayers == 0) {
-        parameters->tcp_rates[0] = 0.0; /* MOD antonin : losslessbug */
-        parameters->tcp_numlayers++;
-        parameters->cp_disto_alloc = 1;
-    }
-
-    if ((parameters->cp_tx0 > parameters->volume_offset_x0) ||
-            (parameters->cp_ty0 > parameters->volume_offset_y0) ||
-            (parameters->cp_tz0 > parameters->volume_offset_z0)) {
-        fprintf(stdout,
-                "[ERROR] Tile offset dimension is unnappropriate --> TX0(%d)<=IMG_X0(%d) TYO(%d)<=IMG_Y0(%d) TZO(%d)<=IMG_Z0(%d)\n",
-                parameters->cp_tx0, parameters->volume_offset_x0, parameters->cp_ty0,
-                parameters->volume_offset_y0,
-                parameters->cp_tz0, parameters->volume_offset_z0);
-        return 1;
-    }
-
-    for (i = 0; i < parameters->numpocs; i++) {
-        if (parameters->POC[i].prg == -1) {
-            fprintf(stdout,
-                    "[ERROR] Unrecognized progression order in option -P (POC n %d) [LRCP, RLCP, RPCL, PCRL, CPRL] !!\n",
-                    i + 1);
-        }
-    }
-    return 0;
-}
-
-/* -------------------------------------------------------------------------- */
-
-/**
-sample error callback expecting a FILE* client object
-*/
-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)
-{
-    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)
-{
-    FILE *stream = (FILE*)client_data;
-    fprintf(stream, "[INFO] %s", msg);
-}
-
-/* -------------------------------------------------------------------------- */
-
-int main(int argc, char **argv)
-{
-    bool bSuccess;
-    bool delete_comment = true;
-    opj_cparameters_t parameters;   /* compression parameters */
-    opj_event_mgr_t event_mgr;      /* event manager */
-    opj_volume_t *volume = NULL;
-
-    /*
-    configure the event callbacks (not required)
-    setting of each callback is optional
-    */
-    memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
-    event_mgr.error_handler = error_callback;
-    event_mgr.warning_handler = warning_callback;
-    event_mgr.info_handler = info_callback;
-
-    /* set encoding parameters to default values */
-    opj_set_default_encoder_parameters(&parameters);
-
-    /* parse input and get user encoding parameters */
-    if (parse_cmdline_encoder(argc, argv, &parameters) == 1) {
-        return 0;
-    }
-
-    if (parameters.cp_comment == NULL) {
-        parameters.cp_comment = "Created by OpenJPEG version JP3D";
-        /* no need to delete parameters.cp_comment on exit */
-        delete_comment = false;
-    }
-
-    /* encode the destination volume */
-    /* ---------------------------- */
-    if (parameters.cod_format == J3D_CFMT || parameters.cod_format == J2K_CFMT) {
-        int codestream_length, pixels, bitsin;
-        opj_cio_t *cio = NULL;
-        FILE *f = NULL;
-        opj_cinfo_t* cinfo = NULL;
-
-        /* decode the source volume */
-        /* ----------------------- */
-        switch (parameters.decod_format) {
-        case PGX_DFMT:
-            fprintf(stdout, "[INFO] Loading pgx file(s)\n");
-            volume = pgxtovolume(parameters.infile, &parameters);
-            if (!volume) {
-                fprintf(stdout, "[ERROR] Unable to load pgx files\n");
-                return 1;
-            }
-            break;
-
-        case BIN_DFMT:
-            fprintf(stdout, "[INFO] Loading bin file\n");
-            volume = bintovolume(parameters.infile, parameters.imgfile, &parameters);
-            if (!volume) {
-                fprintf(stdout, "[ERROR] Unable to load bin file\n");
-                return 1;
-            }
-            break;
-
-        case IMG_DFMT:
-            fprintf(stdout, "[INFO] Loading img file\n");
-            volume = imgtovolume(parameters.infile, &parameters);
-            if (!volume) {
-                fprintf(stderr, "[ERROR] Unable to load img file\n");
-                return 1;
-            }
-            break;
-        }
-
-        /* get a JP3D or J2K compressor handle */
-        if (parameters.cod_format == J3D_CFMT) {
-            cinfo = opj_create_compress(CODEC_J3D);
-        } else if (parameters.cod_format == J2K_CFMT) {
-            cinfo = opj_create_compress(CODEC_J2K);
-        }
-
-        /* catch events using our callbacks and give a local context */
-        opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stdout);
-
-        /* setup the encoder parameters using the current volume and using user parameters */
-        opj_setup_encoder(cinfo, &parameters, volume);
-
-        /* open a byte stream for writing */
-        /* allocate memory for all tiles */
-        cio = opj_cio_open((opj_common_ptr)cinfo, NULL, 0);
-
-        /* encode the volume */
-        /*fprintf(stdout, "[INFO] Encode the volume\n");*/
-        bSuccess = opj_encode(cinfo, cio, volume, parameters.index);
-        if (!bSuccess) {
-            opj_cio_close(cio);
-            fprintf(stdout, "[ERROR] Failed to encode volume\n");
-            return 1;
-        }
-        codestream_length = cio_tell(cio);
-        pixels = (volume->x1 - volume->x0) * (volume->y1 - volume->y0) *
-                 (volume->z1 - volume->z0);
-        bitsin = pixels * volume->comps[0].prec;
-        fprintf(stdout,
-                "[RESULT] Volume: %d x %d x %d (x %d bpv)\n Codestream: %d B,  Ratio: %5.3f bpv,  (%5.3f : 1) \n",
-                (volume->x1 - volume->x0), (volume->y1 - volume->y0), (volume->z1 - volume->z0),
-                volume->comps[0].prec,
-                codestream_length, ((double)codestream_length * 8.0 / (double)pixels),
-                ((double)bitsin / (8.0 * (double)codestream_length)));
-
-        /* write the buffer to disk */
-        f = fopen(parameters.outfile, "wb");
-        if (!f) {
-            fprintf(stdout, "[ERROR] Failed to open %s for writing\n", parameters.outfile);
-            return 1;
-        }
-        fwrite(cio->buffer, 1, codestream_length, f);
-        fclose(f);
-
-        /* close and free the byte stream */
-        opj_cio_close(cio);
-
-        /* free remaining compression structures */
-        opj_destroy_compress(cinfo);
-    } else {
-        fprintf(stdout, "[ERROR] Cod_format != JP3d !!! \n");
-        return 1;
-    }
-
-    /* free user parameters structure */
-    if (delete_comment) {
-        if (parameters.cp_comment) {
-            free(parameters.cp_comment);
-        }
-    }
-    if (parameters.cp_matrice) {
-        free(parameters.cp_matrice);
-    }
-
-    /* free volume data */
-    opj_volume_destroy(volume);
-
-    return 0;
-}
diff --git a/src/bin/jp3d/opj_jp3d_decompress.c b/src/bin/jp3d/opj_jp3d_decompress.c
deleted file mode 100644 (file)
index eb7ebe8..0000000
+++ /dev/null
@@ -1,601 +0,0 @@
-/*
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * Copyright (c) 2006, Mónica Díez García, Image Processing Laboratory, University of Valladolid, Spain
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <math.h>
-
-#include "opj_config.h"
-#include "openjp3d.h"
-#include "opj_getopt.h"
-#include "convert.h"
-
-#ifdef _WIN32
-#include <windows.h>
-#else
-#define stricmp strcasecmp
-#define strnicmp strncasecmp
-#endif /* _WIN32 */
-
-/* ----------------------------------------------------------------------- */
-static double calc_PSNR(opj_volume_t *original, opj_volume_t *decoded)
-{
-    int max, i, k, compno = 0, size;
-    double sum, total = 0;
-    int global = 1;
-
-    max = (original->comps[compno].prec <= 8) ? 255 : (1 <<
-            original->comps[compno].prec) - 1;
-    if (global) {
-        size = (original->x1 - original->x0) * (original->y1 - original->y0) *
-               (original->z1 - original->z0);
-
-        for (compno = 0; compno < original->numcomps; compno++) {
-            for (sum = 0, i = 0; i < size; ++i) {
-                if ((decoded->comps[compno].data[i] < 0) ||
-                        (decoded->comps[compno].data[i] > max)) {
-                    fprintf(stdout, "[WARNING] Data out of range during PSNR computing...\n");
-                } else {
-                    sum += (original->comps[compno].data[i] - decoded->comps[compno].data[i]) *
-                           (original->comps[compno].data[i] - decoded->comps[compno].data[i]);
-                }
-            }
-        }
-        sum /= size;
-        total = ((sum == 0.0) ? 0.0 : 10 * log10(max * max / sum));
-    } else {
-        size = (original->x1 - original->x0) * (original->y1 - original->y0);
-
-        for (k = 0; k < original->z1 - original->z0; k++) {
-            int offset = k * size;
-            for (sum = 0, compno = 0; compno < original->numcomps; compno++) {
-                for (i = 0; i < size; ++i) {
-                    if ((decoded->comps[compno].data[i + offset] < 0) ||
-                            (decoded->comps[compno].data[i + offset] > max)) {
-                        fprintf(stdout, "[WARNING] Data out of range during PSNR computing...\n");
-                    } else {
-                        sum += (original->comps[compno].data[i + offset] - decoded->comps[compno].data[i
-                                + offset]) * (original->comps[compno].data[i + offset] -
-                                              decoded->comps[compno].data[i + offset]);
-                    }
-                }
-            }
-            sum /= size;
-            total = total + ((sum == 0.0) ? 0.0 : 10 * log10(max * max / sum));
-        }
-
-    }
-    if (total == 0) { /* perfect reconstruction, PSNR should return infinity */
-        return -1.0;
-    }
-
-    return total;
-    /*return 20 * log10((max - 1) / sqrt(sum));*/
-}
-
-static double calc_SSIM(opj_volume_t *original, opj_volume_t *decoded)
-{
-    int max, i, compno = 0, size, sizeM;
-    double sum;
-    double mux = 0.0, muy = 0.0, sigmax = 0.0, sigmay = 0.0,
-           sigmaxy = 0.0/*, structx = 0.0, structy = 0.0*/;
-    double lcomp, ccomp, scomp;
-    double C1, C2, C3;
-
-    max = (original->comps[compno].prec <= 8) ? 255 : (1 <<
-            original->comps[compno].prec) - 1;
-    size = (original->x1 - original->x0) * (original->y1 - original->y0) *
-           (original->z1 - original->z0);
-
-    /*MSSIM*/
-
-    /*  sizeM = size / (original->z1 - original->z0);*/
-
-    sizeM = size;
-    for (sum = 0, i = 0; i < sizeM; ++i) {
-        /* First, the luminance of each signal is compared.*/
-        mux += original->comps[compno].data[i];
-        muy += decoded->comps[compno].data[i];
-    }
-    mux /= sizeM;
-    muy /= sizeM;
-
-    /*We use the standard deviation (the square root of variance) as an estimate of the signal contrast.*/
-    for (sum = 0, i = 0; i < sizeM; ++i) {
-        /* First, the luminance of each signal is compared.*/
-        sigmax += (original->comps[compno].data[i] - mux) *
-                  (original->comps[compno].data[i] - mux);
-        sigmay += (decoded->comps[compno].data[i] - muy) *
-                  (decoded->comps[compno].data[i] - muy);
-        sigmaxy += (original->comps[compno].data[i] - mux) *
-                   (decoded->comps[compno].data[i] - muy);
-    }
-    sigmax /= sizeM - 1;
-    sigmay /= sizeM - 1;
-    sigmaxy /= sizeM - 1;
-
-    sigmax = sqrt(sigmax);
-    sigmay = sqrt(sigmay);
-    sigmaxy = sqrt(sigmaxy);
-
-    /*Third, the signal is normalized (divided) by its own standard deviation, */
-    /*so that the two signals being compared have unit standard deviation.*/
-
-    /*Luminance comparison*/
-    C1 = (0.01 * max) * (0.01 * max);
-    lcomp = ((2 * mux * muy) + C1) / ((mux * mux) + (muy * mux) + C1);
-    /*Constrast comparison*/
-    C2 = (0.03 * max) * (0.03 * max);
-    ccomp = ((2 * sigmax * sigmay) + C2) / ((sigmax * sigmax) +
-                                            (sigmay * sigmay) + C2);
-    /*Structure comparison*/
-    C3 = C2 / 2;
-    scomp = (sigmaxy + C3) / (sigmax * sigmay + C3);
-    /*Similarity measure*/
-
-    sum = lcomp * ccomp * scomp;
-    return sum;
-}
-
-void decode_help_display()
-{
-    fprintf(stdout, "HELP\n----\n\n");
-    fprintf(stdout, "- the -h option displays this help information on screen\n\n");
-
-    fprintf(stdout, "List of parameters for the JPEG 2000 encoder:\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, " Required arguments \n");
-    fprintf(stdout, " ---------------------------- \n");
-    fprintf(stdout, "  -i <compressed file> ( *.jp3d, *.j3d )\n");
-    fprintf(stdout,
-            "    Currently accepts J3D-files. The file type is identified based on its suffix.\n");
-    fprintf(stdout, "  -o <decompressed file> ( *.pgx, *.bin )\n");
-    fprintf(stdout,
-            "    Currently accepts PGX-files and BIN-files. Binary data is written to the file (not ascii). \n");
-    fprintf(stdout,
-            "    If a PGX filename is given, there will be as many output files as slices; \n");
-    fprintf(stdout,
-            "    an indice starting from 0 will then be appended to the output filename,\n");
-    fprintf(stdout, "    just before the \"pgx\" extension.\n");
-    fprintf(stdout, "  -m <characteristics file> ( *.img ) \n");
-    fprintf(stdout,
-            "    Required only for BIN-files. Ascii data of volume characteristics is written. \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, " Optional  \n");
-    fprintf(stdout, " ---------------------------- \n");
-    fprintf(stdout, "  -h \n ");
-    fprintf(stdout, "    Display the help information\n");
-    fprintf(stdout, "  -r <RFx,RFy,RFz>\n");
-    fprintf(stdout,
-            "    Set the number of highest resolution levels to be discarded on each dimension. \n");
-    fprintf(stdout,
-            "    The volume resolution is effectively divided by 2 to the power of the\n");
-    fprintf(stdout,
-            "    number of discarded levels. The reduce factor is limited by the\n");
-    fprintf(stdout,
-            "    smallest total number of decomposition levels among tiles.\n");
-    fprintf(stdout, "  -l <number of quality layers to decode>\n");
-    fprintf(stdout,
-            "    Set the maximum number of quality layers to decode. If there are\n");
-    fprintf(stdout,
-            "    less quality layers than the specified number, all the quality layers\n");
-    fprintf(stdout, "    are decoded. \n");
-    fprintf(stdout, "  -O original-file \n");
-    fprintf(stdout,
-            "    This option offers the possibility to compute some quality results  \n");
-    fprintf(stdout,
-            "    for the decompressed volume, like the PSNR value achieved or the global SSIM value.  \n");
-    fprintf(stdout,
-            "    Needs the original file in order to compare with the new one.\n");
-    fprintf(stdout,
-            "    NOTE: Only valid when -r option is 0,0,0 (both original and decompressed volumes have same resolutions) \n");
-    fprintf(stdout,
-            "    NOTE: If original file is .BIN file, the volume characteristics file shall be defined with the -m option. \n");
-    fprintf(stdout, "    (i.e. -O original-BIN-file -m original-IMG-file) \n");
-    fprintf(stdout, "  -BE \n");
-    fprintf(stdout,
-            "    Define that the recovered volume data will be saved with big endian byte order.\n");
-    fprintf(stdout, "    By default, little endian byte order is used.\n");
-    fprintf(stdout, "\n");
-}
-
-/* -------------------------------------------------------------------------- */
-
-int get_file_format(char *filename)
-{
-    int i;
-    static const char *extension[] = {"pgx", "bin", "j3d", "jp3d", "j2k", "img"};
-    static const int format[] = { PGX_DFMT, BIN_DFMT, J3D_CFMT, J3D_CFMT, J2K_CFMT, IMG_DFMT};
-    char * ext = strrchr(filename, '.');
-    if (ext) {
-        ext++;
-        for (i = 0; i < sizeof(format) / sizeof(format[0]); i++) {
-            if (strnicmp(ext, extension[i], 3) == 0) {
-                return format[i];
-            }
-        }
-    }
-
-    return -1;
-}
-
-/* -------------------------------------------------------------------------- */
-
-int parse_cmdline_decoder(int argc, char **argv, opj_dparameters_t *parameters)
-{
-    /* parse the command line */
-
-    while (1) {
-        int c = opj_getopt(argc, argv, "i:o:O:r:l:B:m:h");
-        if (c == -1) {
-            break;
-        }
-        switch (c) {
-        case 'i': {         /* input file */
-            char *infile = opj_optarg;
-            parameters->decod_format = get_file_format(infile);
-            switch (parameters->decod_format) {
-            case J3D_CFMT:
-            case J2K_CFMT:
-                break;
-            default:
-                fprintf(stdout, "[ERROR] Unknown format for infile %s [only *.j3d]!! \n",
-                        infile);
-                return 1;
-                break;
-            }
-            strncpy(parameters->infile, infile, MAX_PATH);
-            fprintf(stdout, "[INFO] Infile: %s \n", parameters->infile);
-
-        }
-        break;
-
-        case 'm': {         /* img file */
-            char *imgfile = opj_optarg;
-            int imgformat = get_file_format(imgfile);
-            switch (imgformat) {
-            case IMG_DFMT:
-                break;
-            default:
-                fprintf(stdout,
-                        "[ERROR] Unrecognized format for imgfile : %s [accept only *.img] !!\n\n",
-                        imgfile);
-                return 1;
-                break;
-            }
-            strncpy(parameters->imgfile, imgfile, MAX_PATH);
-            fprintf(stdout, "[INFO] Imgfile: %s Format: %d\n", parameters->imgfile,
-                    imgformat);
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 'o': {         /* output file */
-            char *outfile = opj_optarg;
-            parameters->cod_format = get_file_format(outfile);
-            switch (parameters->cod_format) {
-            case PGX_DFMT:
-            case BIN_DFMT:
-                break;
-            default:
-                fprintf(stdout,
-                        "[ERROR] Unrecognized format for outfile : %s [accept only *.pgx or *.bin] !!\n\n",
-                        outfile);
-                return 1;
-                break;
-            }
-            strncpy(parameters->outfile, outfile, MAX_PATH);
-            fprintf(stdout, "[INFO] Outfile: %s \n", parameters->outfile);
-
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 'O': {     /* Original image for PSNR computing */
-            char *original = opj_optarg;
-            parameters->orig_format = get_file_format(original);
-            switch (parameters->orig_format) {
-            case PGX_DFMT:
-            case BIN_DFMT:
-                break;
-            default:
-                fprintf(stdout,
-                        "[ERROR] Unrecognized format for original file : %s [accept only *.pgx or *.bin] !!\n\n",
-                        original);
-                return 1;
-                break;
-            }
-            strncpy(parameters->original, original, MAX_PATH);
-            fprintf(stdout, "[INFO] Original file: %s \n", parameters->original);
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 'r': {     /* reduce option */
-            /*sscanf(opj_optarg, "%d, %d, %d", &parameters->cp_reduce[0], &parameters->cp_reduce[1], &parameters->cp_reduce[2]);*/
-            int aux;
-            aux = sscanf(opj_optarg, "%d,%d,%d", &parameters->cp_reduce[0],
-                         &parameters->cp_reduce[1], &parameters->cp_reduce[2]);
-            if (aux == 2) {
-                parameters->cp_reduce[2] = 0;
-            } else if (aux == 1) {
-                parameters->cp_reduce[1] = parameters->cp_reduce[0];
-                parameters->cp_reduce[2] = 0;
-            } else if (aux == 0) {
-                parameters->cp_reduce[0] = 0;
-                parameters->cp_reduce[1] = 0;
-                parameters->cp_reduce[2] = 0;
-            }
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 'l': {     /* layering option */
-            sscanf(opj_optarg, "%d", &parameters->cp_layer);
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 'B': {     /* BIGENDIAN vs. LITTLEENDIAN */
-            parameters->bigendian = 1;
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 'L': {     /* BIGENDIAN vs. LITTLEENDIAN */
-            parameters->decod_format = LSE_CFMT;
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 'h': {         /* display an help description */
-            decode_help_display();
-            return 1;
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        default:
-            fprintf(stdout, "[WARNING] This option is not valid \"-%c %s\"\n", c,
-                    opj_optarg);
-            break;
-        }
-    }
-
-    /* check for possible errors */
-
-    if ((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) {
-        fprintf(stdout,
-                "[ERROR] At least one required argument is missing\n Check jp3d_to_volume -help for usage information\n");
-        return 1;
-    }
-
-    return 0;
-}
-
-/* -------------------------------------------------------------------------- */
-
-/**
-sample error callback expecting a FILE* client object
-*/
-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)
-{
-    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)
-{
-    fprintf(stdout, "[INFO] %s", msg);
-}
-
-/* -------------------------------------------------------------------------- */
-
-int main(int argc, char **argv)
-{
-
-    opj_dparameters_t parameters;   /* decompression parameters */
-    opj_event_mgr_t event_mgr;      /* event manager */
-    opj_volume_t *volume = NULL;
-
-    opj_volume_t *original = NULL;
-    opj_cparameters_t cparameters;  /* original parameters */
-
-    FILE *fsrc = NULL;
-    unsigned char *src = NULL;
-    int file_length;
-    int decodeok;
-    double psnr, ssim;
-
-    opj_dinfo_t* dinfo = NULL;  /* handle to a decompressor */
-    opj_cio_t *cio = NULL;
-
-    /* configure the event callbacks (not required) */
-    memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
-    event_mgr.error_handler = error_callback;
-    event_mgr.warning_handler = warning_callback;
-    event_mgr.info_handler = info_callback;
-
-    /* set decoding parameters to default values */
-    opj_set_default_decoder_parameters(&parameters);
-
-    /* parse input and get user decoding parameters */
-    strcpy(parameters.original, "NULL");
-    strcpy(parameters.imgfile, "NULL");
-    if (parse_cmdline_decoder(argc, argv, &parameters) == 1) {
-        return 0;
-    }
-
-    /* read the input file and put it in memory */
-    /* ---------------------------------------- */
-    fprintf(stdout, "[INFO] Loading %s file \n",
-            parameters.decod_format == J3D_CFMT ? ".jp3d" : ".j2k");
-    fsrc = fopen(parameters.infile, "rb");
-    if (!fsrc) {
-        fprintf(stdout, "[ERROR] Failed to open %s for reading\n", parameters.infile);
-        return 1;
-    }
-    fseek(fsrc, 0, SEEK_END);
-    file_length = ftell(fsrc);
-    fseek(fsrc, 0, SEEK_SET);
-    src = (unsigned char *) malloc(file_length);
-    fread(src, 1, file_length, fsrc);
-    fclose(fsrc);
-
-    /* decode the code-stream */
-    /* ---------------------- */
-    if (parameters.decod_format == J3D_CFMT ||
-            parameters.decod_format == J2K_CFMT) {
-        /* get a JP3D or J2K decoder handle */
-        if (parameters.decod_format == J3D_CFMT) {
-            dinfo = opj_create_decompress(CODEC_J3D);
-        } else if (parameters.decod_format == J2K_CFMT) {
-            dinfo = opj_create_decompress(CODEC_J2K);
-        }
-
-        /* catch events using our callbacks and give a local context */
-        opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
-
-        /* setup the decoder decoding parameters using user parameters */
-        opj_setup_decoder(dinfo, &parameters);
-
-        /* open a byte stream */
-        cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length);
-
-        /* decode the stream and fill the volume structure */
-        volume = opj_decode(dinfo, cio);
-        if (!volume) {
-            fprintf(stdout, "[ERROR] jp3d_to_volume: failed to decode volume!\n");
-            opj_destroy_decompress(dinfo);
-            opj_cio_close(cio);
-            return 1;
-        }
-
-        /* close the byte stream */
-        opj_cio_close(cio);
-    }
-
-    /* free the memory containing the code-stream */
-    free(src);
-    src = NULL;
-
-    /* create output volume */
-    /* ------------------- */
-
-    switch (parameters.cod_format) {
-    case PGX_DFMT:          /* PGX */
-        decodeok = volumetopgx(volume, parameters.outfile);
-        if (decodeok) {
-            fprintf(stdout, "[ERROR] Unable to write decoded volume into pgx files\n");
-        }
-        break;
-
-    case BIN_DFMT:          /* BMP */
-        decodeok = volumetobin(volume, parameters.outfile);
-        if (decodeok) {
-            fprintf(stdout, "[ERROR] Unable to write decoded volume into pgx files\n");
-        }
-        break;
-    }
-    switch (parameters.orig_format) {
-    case PGX_DFMT:          /* PGX */
-        if (strcmp("NULL", parameters.original) != 0) {
-            fprintf(stdout, "Loading original file %s \n", parameters.original);
-            cparameters.subsampling_dx = 1;
-            cparameters.subsampling_dy = 1;
-            cparameters.subsampling_dz = 1;
-            cparameters.volume_offset_x0 = 0;
-            cparameters.volume_offset_y0 = 0;
-            cparameters.volume_offset_z0 = 0;
-            original = pgxtovolume(parameters.original, &cparameters);
-        }
-        break;
-
-    case BIN_DFMT:          /* BMP */
-        if (strcmp("NULL", parameters.original) != 0 &&
-                strcmp("NULL", parameters.imgfile) != 0) {
-            fprintf(stdout, "Loading original file %s %s\n", parameters.original,
-                    parameters.imgfile);
-            cparameters.subsampling_dx = 1;
-            cparameters.subsampling_dy = 1;
-            cparameters.subsampling_dz = 1;
-            cparameters.volume_offset_x0 = 0;
-            cparameters.volume_offset_y0 = 0;
-            cparameters.volume_offset_z0 = 0;
-            original = bintovolume(parameters.original, parameters.imgfile, &cparameters);
-        }
-        break;
-    }
-
-    fprintf(stdout, "[RESULT] Volume: %d x %d x %d (x %d bpv)\n ",
-            (volume->comps[0].w >> volume->comps[0].factor[0]),
-            (volume->comps[0].h >> volume->comps[0].factor[1]),
-            (volume->comps[0].l >> volume->comps[0].factor[2]),
-            volume->comps[0].prec);
-
-    if (original) {
-        psnr = calc_PSNR(original, volume);
-        ssim = calc_SSIM(original, volume);
-        if (psnr < 0.0) {
-            fprintf(stdout, "  PSNR: Inf , SSMI %f -- Perfect reconstruction!\n", ssim);
-        } else {
-            fprintf(stdout, "  PSNR: %f , SSIM %f \n", psnr, ssim);
-        }
-    }
-    /* free remaining structures */
-    if (dinfo) {
-        opj_destroy_decompress(dinfo);
-    }
-
-    /* free volume data structure */
-    opj_volume_destroy(volume);
-
-    return 0;
-}
-
diff --git a/src/bin/jp3d/tcltk/LPI_JP3D_VM.tcl b/src/bin/jp3d/tcltk/LPI_JP3D_VM.tcl
deleted file mode 100755 (executable)
index 37657b2..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-#!/bin/sh
-# The next line is executed by /bin/sh, but not tcl \
-exec wish "$0" ${1+"$@"}
-lappend auto_path /usr/share/tcltk/bwidget1.9.2
-
-namespace eval jp3dVM {
-
-    variable _progress 0
-    variable _afterid  ""
-    variable _status "Compute in progress..."
-    variable notebook
-    variable mainframe
-    variable dataout "Process execution information"
-    variable status
-    variable prgtext
-    variable prgindic
-
-    set pwd [pwd]
-    cd [file dirname [info script]]
-    variable VMDIR [pwd]
-    cd $pwd
-
-    foreach script {encoder.tcl decoder.tcl} {
-       namespace inscope :: source $VMDIR/$script
-    }
-}
-
-
-proc jp3dVM::create { } {
-    variable notebook
-    variable mainframe
-    variable dataout
-
-    bind all <F12> { catch {console show} }
-
-    # Menu description
-    set descmenu {
-        "&File" {} {} 0 {
-            {command "E&xit" {} "Exit BWidget jp3dVM" {} -command exit}
-        }
-        "&Options" {} {} 0 {
-            {command "&Encode" {} "Show encoder" {}
-                -command  {$jp3dVM::notebook raise [$jp3dVM::notebook page 0]}
-            }
-            {command "&Decode" {} "Show decoder" {}
-                -command  {$jp3dVM::notebook raise [$jp3dVM::notebook page 1]}
-            }
-        }
-       "&Help" {} {} 0 {
-            {command "&About authors..." {} "Show info about authors" {} 
-               -command {MessageDlg .msgdlg -parent . -title "About authors" -message " Copyright @ LPI-UVA 2006 " -type ok -icon info}}
-        }
-    }
-
-    set mainframe [MainFrame .mainframe \
-                       -menu         $descmenu \
-                       -textvariable jp3dVM::status \
-                       -progressvar  jp3dVM::prgindic]
-
-    $mainframe addindicator -text "JP3D Verification Model 1.0.0"
-
-    # NoteBook creation
-    set frame    [$mainframe getframe]
-    set notebook [NoteBook $frame.nb]
-
-    set logo [frame $frame.logo]
-    #creo imagen logo
-    image create photo LPIimg -file logoLPI.gif
-    set logoimg [Label $logo.logoimg -image LPIimg]
-    
-    set f0  [VMEncoder::create $notebook]
-    set f1  [VMDecoder::create $notebook]
-
-       set tfinfo [TitleFrame $frame.codinfo -text "Program Execution"]
-       set codinfo [$tfinfo getframe]
-       set sw [ScrolledWindow $codinfo.sw -relief sunken -borderwidth 2 -scrollbar both]
-       set sf [ScrollableFrame $codinfo.sf ]
-       $sw setwidget $sf
-       set subf [$sf getframe]
-       set labinfo [label $subf.labinfo -textvariable jp3dVM::dataout -justify left]
-
-       pack $labinfo -side left 
-       pack $sw 
-
-    $notebook compute_size
-    $notebook raise [$notebook page 0]
-
-    pack $logoimg -side left -fill x -expand yes 
-    pack $notebook -expand yes 
-    pack $logo $tfinfo -side left -expand yes 
-    pack $mainframe -fill both -expand yes
-    update idletasks
-}
-
-
-proc jp3dVM::main {} {
-    variable VMDIR
-
-    lappend ::auto_path [file dirname $VMDIR]
-    namespace inscope :: package require BWidget
-
-    option add *TitleFrame.l.font {helvetica 11 bold italic}
-
-    wm withdraw .
-    wm title . "JP3D Verification Model @ LPI"
-
-    jp3dVM::create
-    BWidget::place . 0 0 center
-    wm deiconify .
-    raise .
-    focus -force .
-}
-
-jp3dVM::main
-wm geom . [wm geom .]
diff --git a/src/bin/jp3d/tcltk/README b/src/bin/jp3d/tcltk/README
deleted file mode 100644 (file)
index f4e2e35..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-HOWTO USE THE TCL/TK APP IN 'jp3d/tcltk'
-----------------------------------------
-1. Download the 'BWidget-1.9.2'
-    http://www.sourceforge.net/projects/tcllib/
-
-2. Install it e.g. in '/usr/local/BWidget-1.9.2/'
-3. Add the lappend command in line 4
-  to jp3d/tcltk/LPI_JP3D_VM.tcl:
-
-#!/bin/sh
-# The next line is executed by /bin/sh, but not tcl \
-exec wish "$0" ${1+"$@"}
-lappend auto_path /usr/local/BWidget-1.9.2
diff --git a/src/bin/jp3d/tcltk/Thumbs.db b/src/bin/jp3d/tcltk/Thumbs.db
deleted file mode 100755 (executable)
index 5d6ffdf..0000000
Binary files a/src/bin/jp3d/tcltk/Thumbs.db and /dev/null differ
diff --git a/src/bin/jp3d/tcltk/decoder.tcl b/src/bin/jp3d/tcltk/decoder.tcl
deleted file mode 100755 (executable)
index 98edcde..0000000
+++ /dev/null
@@ -1,272 +0,0 @@
-\r
-namespace eval VMDecoder {\r
-       variable var\r
-       variable JP3Ddecoder "../bin/jp3d_to_volume.exe"\r
-       #variable JP3Ddecoder "jp3d_to_volume.exe"\r
-}\r
-\r
-\r
-proc VMDecoder::create { nb } {\r
-       variable var\r
-\r
-       set frameD [$nb insert end VMDecoder -text "Decoder"]\r
-       set topfD       [frame $frameD.topfD]\r
-       set medfD       [frame $frameD.medfD]\r
-       set bottomfD    [frame $frameD.bottomfD]\r
-       set srcfD [TitleFrame $topfD.srcfD -text "Source"]\r
-       set dstfD [TitleFrame $topfD.dstfD -text "Destination"]\r
-       set paramfD [TitleFrame $medfD.paramfD -text "Decoding parameters"]\r
-       set infofD [TitleFrame $medfD.infofD -text "Distortion measures"]\r
-\r
-       set frame1 [$srcfD getframe]\r
-       _sourceD  $frame1\r
-       set frame2  [$dstfD getframe]\r
-       _destinationD  $frame2\r
-       set frame3  [$infofD getframe]\r
-       _originalD $frame3\r
-       set frame4  [$paramfD getframe]\r
-       _paramsD $frame4\r
-\r
-       set butD   [Button $bottomfD.butD -text "Decode!" \\r
-                  -command  "VMDecoder::_decode $frame1 $frame2 $frame3" \\r
-                  -helptext "Decoding trigger button"]\r
-       set butR   [Button $bottomfD.butR -text "Save info" \\r
-                  -command  "VMDecoder::_save $frame3" \\r
-                  -helptext "Save information"]\r
-       \r
-       pack $srcfD $dstfD -side left -fill both -padx 10 -ipadx 5 -expand yes\r
-       pack $topfD -pady 4 -fill x\r
-       \r
-       pack $paramfD $infofD -side left -fill both -padx 10 -pady 2 -ipadx 5 -expand yes\r
-       pack $medfD -pady 4 -fill x \r
-\r
-       pack $butD $butR -side left -padx 4 -pady 5 -expand yes\r
-       pack $bottomfD -pady 4 -fill x\r
-\r
-return $frameD\r
-}\r
-\r
-\r
-proc fileDialogD {w ent operation} {\r
-\r
-       variable file\r
-       \r
-       if {$operation == "open"} {\r
-               #-----Type names---------Extension(s)---\r
-               set types {\r
-               {"JP3D Files"      {.jp3d}      }\r
-               {"All files"            *}\r
-               }\r
-               set file [tk_getOpenFile -filetypes $types -parent $w ]\r
-       } elseif {$operation == "original"} {\r
-               #-----Type names---------Extension(s)---\r
-               set types {\r
-               {"BIN Raw Image Files"  {.bin}  }\r
-               {"PGX Raw Image Files"  {.pgx}  }\r
-               {"All files"            *}\r
-               }\r
-               set file [tk_getOpenFile -filetypes $types -parent $w ]\r
-       } else {\r
-               #-----Type names---------Extension(s)---\r
-               set types {\r
-               {"BIN Raw Image Files"  {.bin}  }\r
-               {"PGX Raw Image Files"  {.pgx}  }\r
-               {"All files"            *}\r
-               }\r
-               set file [tk_getSaveFile -filetypes $types -parent $w -initialfile Untitled -defaultextension "*.bin"]\r
-       }\r
-       if {[string compare $file ""]} {\r
-               $ent delete 0 end\r
-               $ent insert end $file\r
-               $ent xview moveto 1\r
-       }\r
-}\r
-\r
-proc VMDecoder::_sourceD { parent } {\r
-       \r
-       variable var\r
-       \r
-       set labsrcD [LabelFrame $parent.labsrcD -text "Select compressed file: " -side top \\r
-                       -anchor w -relief flat -borderwidth 0]\r
-       set subsrcD [$labsrcD getframe]\r
-       set listD [entry $subsrcD.entrysrcD -width 40 -textvariable VMDecoder::var(sourceD)]\r
-       \r
-       set labbrw [LabelFrame $parent.labbrw -side top -anchor w -relief flat -borderwidth 0]\r
-       set subbrw [$labbrw getframe]\r
-       set butbrw [button $subbrw.butbrw -image [Bitmap::get open] \\r
-               -relief raised -borderwidth 1 -padx 1 -pady 1 \\r
-               -command "fileDialogD . $subsrcD.entrysrcD open"]\r
-       \r
-       pack $listD -side top\r
-       pack $butbrw -side top\r
-       pack $labsrcD $labbrw -side left -fill both -expand yes\r
-\r
-\r
-}\r
-\r
-proc VMDecoder::_destinationD { parent } {\r
-       \r
-       variable var\r
-       \r
-       set labdstD [LabelFrame $parent.labdstD -text "Save decompressed volume file(s) as: " -side top \\r
-                       -anchor w -relief flat -borderwidth 0]\r
-       set subdstD [$labdstD getframe]\r
-       set listD [entry $subdstD.entrydstD -width 40 -textvariable VMDecoder::var(destinationD)]\r
-       \r
-       set labbrw [LabelFrame $parent.labbrw -side top -anchor w -relief flat -borderwidth 0]\r
-       set subbrw [$labbrw getframe]\r
-       set butbrw [button $subbrw.butbrw -image [Bitmap::get save] \\r
-               -relief raised -borderwidth 1 -padx 1 -pady 1 \\r
-               -command "fileDialogD . $subdstD.entrydstD save"]\r
-\r
-       pack $listD -side top\r
-       pack $butbrw -side top\r
-       pack $labdstD $labbrw -side left -fill both -expand yes\r
-}\r
-\r
-proc VMDecoder::_originalD { parent } {\r
-       \r
-       variable var\r
-       \r
-       set laborgD [LabelFrame $parent.laborgD -text "Select original file: " -side top \\r
-                       -anchor w -relief flat -borderwidth 0]\r
-       set suborgD [$laborgD getframe]\r
-       set listorgD [entry $suborgD.entryorgD -width 30 -textvariable VMDecoder::var(originalD)]\r
-       \r
-       set labbrw2 [LabelFrame $parent.labbrw2 -side top -anchor w -relief flat -borderwidth 0]\r
-       set subbrw2 [$labbrw2 getframe]\r
-       set butbrw2 [button $subbrw2.butbrw2 -image [Bitmap::get open] \\r
-               -relief raised -borderwidth 1 -padx 1 -pady 1 \\r
-               -command "fileDialogD . $suborgD.entryorgD original"]\r
-       \r
-       set infoD [Label $parent.infoD -relief sunken -textvariable VMDecoder::var(decodinfo) -justify left]\r
-\r
-       pack $listorgD -side left -anchor n\r
-       pack $butbrw2 -side left -anchor n\r
-       pack $infoD -side bottom -anchor nw -pady 4 -ipadx 150 -ipady 20 -expand yes\r
-       pack $laborgD $labbrw2 -side left -fill both \r
-\r
-\r
-}\r
-\r
-proc VMDecoder::_paramsD { parent } {\r
-       \r
-       variable var\r
-       \r
-       ########### DECODING  #############\r
-       set labcod [LabelFrame $parent.labcod -side top -anchor w -relief sunken -borderwidth 1]\r
-       set subcod  [$labcod getframe]\r
-\r
-               set frameres [frame $subcod.frameres -borderwidth 1]\r
-               set labres [LabelEntry $frameres.labres -label "Resolutions to discard: " -labelwidth 20 -labelanchor w \\r
-                   -textvariable VMDecoder::var(resdiscard) -editable 1 \\r
-                   -helptext "Number of highest resolution levels to be discarded on each dimension" ]\r
-       set VMDecoder::var(resdiscard) "0,0,0"\r
-       \r
-               set framelayer [frame $subcod.framelayer -borderwidth 1]\r
-               set lablayer [LabelEntry $framelayer.lablayer -label "Layers to decode: " -labelwidth 20 -labelanchor w \\r
-                   -textvariable VMDecoder::var(layer) -editable 1 \\r
-                   -helptext "Maximum number of quality layers to decode" ]\r
-       set VMDecoder::var(layer) "All"\r
-\r
-       set framebe [frame $subcod.framebe -borderwidth 1]\r
-       set chkbe [checkbutton $framebe.chkbe -text "Write decoded file with BigEndian byte order" \\r
-                  -variable VMDecoder::var(be) -onvalue 1 -offvalue 0 ]\r
-\r
-               pack $labres -side left -padx 2 -anchor n\r
-               pack $lablayer -side left -padx 2 -anchor n\r
-               pack $chkbe -side left -padx 2 -anchor w\r
-               pack $frameres $framelayer $framebe -side top -anchor w\r
-\r
-       pack $subcod -anchor n\r
-       pack $labcod -side left -fill both -padx 4 -expand yes\r
-}\r
-\r
-\r
-proc VMDecoder::_decode { framesrc framedst frameinfo} {\r
-\r
-       variable var\r
-\r
-       set sourceD [$framesrc.labsrcD.f.entrysrcD get ]\r
-       set destinationD [$framedst.labdstD.f.entrydstD get ]\r
-       set originD [$frameinfo.laborgD.f.entryorgD get ]\r
-       set cond1 [string match *.pgx [string tolower $destinationD]]\r
-       set cond2 [string match *\**.pgx [string tolower $destinationD]]\r
-       set cond3 [string match *.bin [string tolower $destinationD]]\r
-       \r
-       #comprobamos datos son correctos\r
-       if {($cond1 == 1) && ($cond2 == 0)} {\r
-               set pgx "*.pgx"\r
-               set pattern [string range $destinationD 0 [expr [string length $destinationD]-5]]\r
-               set destinationD $pattern$img\r
-       } elseif {$sourceD == ""} {\r
-         MessageDlg .msgdlg -parent . -message "Error : Source file is not defined !" -type ok -icon error \r
-       } elseif {$destinationD == ""} {\r
-         MessageDlg .msgdlg -parent . -message "Error : Destination file is not defined !" -type ok -icon error \r
-       } else {\r
-\r
-               #creamos datain a partir de los parametros de entrada\r
-               #set dirJP3Ddecoder [mk_relativepath $VMDecoder::JP3Ddecoder]\r
-               set dirJP3Ddecoder $VMDecoder::JP3Ddecoder\r
-               set datain [concat " $dirJP3Ddecoder -i [mk_relativepath $sourceD] "]\r
-               set datain [concat " $datain -o [mk_relativepath $destinationD] "]\r
-               if {$originD != ""} {\r
-                       set datain [concat " $datain -O [mk_relativepath $originD] "]\r
-                       if {$cond3 == 1} {\r
-                               set img ".img"\r
-                               set pattern [string range $originD 0 [expr [string length $originD]-5]]\r
-                               set pattern $pattern$img\r
-                               if {[file exists $pattern]} {\r
-                                 set datain [concat " $datain -m [mk_relativepath $pattern] "]\r
-                               } else {\r
-                                 MessageDlg .msgdlg -parent . -message "Error : IMG file associated to original BIN volume file not found in same directory !" -type ok -icon info \r
-                               }\r
-                       }\r
-               }\r
-               if {$VMDecoder::var(resdiscard) != "0,0,0"} {\r
-                       set datain [concat " $datain -r $VMDecoder::var(resdiscard) "]\r
-               }\r
-               if {$VMDecoder::var(layer) != "All" && $VMDecoder::var(layer) > 0} {\r
-                       set datain [concat " $datain -l $VMDecoder::var(layer) "]\r
-               }\r
-               if {$VMDecoder::var(be) == 1} {\r
-                       set datain [concat " $datain -BE"]\r
-               }\r
-               \r
-               set VMDecoder::var(progval) 10\r
-               ProgressDlg .progress -parent . -title "Wait..." \\r
-                       -type         infinite \\r
-                       -width        20 \\r
-                       -textvariable "Compute in progress..."\\r
-                       -variable     VMDecoder::progval \\r
-                       -stop         "Stop" \\r
-                       -command      {destroy .progress}\r
-\r
-               after 200 set VMDecoder::var(progval) 2\r
-\r
-               set fp [open "| $datain " r+] \r
-               fconfigure $fp -buffering line \r
-               set jp3dVM::dataout [concat "EXECUTED PROGRAM:\n\t$datain"]\r
-               while {-1 != [gets $fp tmp]} {\r
-                       set jp3dVM::dataout [concat "$jp3dVM::dataout\n$tmp"]\r
-               }\r
-               close $fp\r
-               destroy .progress\r
-               set cond [string first "ERROR" $jp3dVM::dataout]\r
-               set cond2 [string first "PSNR" $jp3dVM::dataout]\r
-               set cond3 [string first "RESULT" $jp3dVM::dataout]\r
-               if {$cond != -1} {\r
-                  MessageDlg .msgdlg -parent . -message [string range $jp3dVM::dataout [expr $cond-1] end] -type ok -icon error\r
-               } elseif {$cond3 != -1} {\r
-                       if {$cond2 != -1} {\r
-                               set VMDecoder::var(decodinfo) [string range $jp3dVM::dataout [expr $cond2-1] end]\r
-                       }\r
-                       MessageDlg .msgdlg -parent . -message [string range $jp3dVM::dataout [expr $cond3-1] end] -type ok -icon info\r
-               }\r
-       }\r
-}\r
-\r
-proc VMDecoder::_save { frameinfo } {\r
-\r
-}\r
-\r
diff --git a/src/bin/jp3d/tcltk/encoder.tcl b/src/bin/jp3d/tcltk/encoder.tcl
deleted file mode 100755 (executable)
index 6c4a508..0000000
+++ /dev/null
@@ -1,470 +0,0 @@
-
-namespace eval VMEncoder {
-       variable var
-       variable JP3Dencoder "../bin/bin/volume_to_jp3d"
-}
-
-proc VMEncoder::create { nb } {
-
-       set frame [$nb insert end VMEncoder -text "Encoder"]
-       set topf        [frame $frame.topf]
-       set midf        [frame $frame.midf]
-       set bottomf     [frame $frame.bottomf]
-       set srcf [TitleFrame $topf.srcf -text "Source"]
-       set dstf [TitleFrame $topf.dstf -text "Destination"]
-       set Tparf [TitleFrame $midf.parfT -text "Transform Parameters"]
-       set Cparf [TitleFrame $midf.parfC -text "Coding Parameters"]
-
-       set frame1 [$srcf getframe]
-               VMEncoder::_sourceE  $frame1
-       
-       set frame2  [$dstf getframe]
-               VMEncoder::_destinationE  $frame2
-       
-       set frame3  [$Tparf getframe]
-               VMEncoder::_transformE $frame3
-
-       set frame4  [$Cparf getframe]
-               VMEncoder::_codingE $frame4
-       
-       set butE  [Button $bottomf.butE -text "Encode!" \
-                  -command  "VMEncoder::_encode $frame1 $frame2" \
-                  -helptext "Encoding trigger button"]
-       set butR  [Button $bottomf.butR -text "Restore defaults" \
-                  -command  "VMEncoder::_reset $frame1 $frame2 $frame3 $frame4" \
-                  -helptext "Reset to default values"]
-
-       pack $srcf $dstf -side left -fill y -padx 4 -expand yes
-       pack $topf -pady 2 -fill x
-
-       pack $Tparf $Cparf -side left -fill both -padx 4 -expand yes
-       pack $midf -pady 2 -fill x
-       
-       pack $butE $butR -side left -padx 40 -pady 5 -fill y -expand yes
-       pack $bottomf -pady 2 -fill x
-
-       return $frame
-}
-
-proc VMEncoder::_sourceE { parent } {
-
-       variable var
-
-       set labsrc [LabelFrame $parent.labsrc -text "Select volume file to encode: " -side top \
-                       -anchor w -relief flat -borderwidth 0]
-       set subsrc [$labsrc getframe]
-       set list [entry $subsrc.entrysrc -width 30 -textvariable VMDecoder::var(source)]
-       
-       set labbrw [LabelFrame $parent.labbrw -side top -anchor w -relief flat -borderwidth 0]
-       set subbrw [$labbrw getframe]
-       set butbrw [button $subbrw.butbrw -image [Bitmap::get open] \
-               -relief raised -borderwidth 1 -padx 1 -pady 1 \
-               -command "fileDialogE . $subsrc.entrysrc open"]
-       
-       pack $list -side top
-       pack $butbrw -side top
-       pack $labsrc $labbrw -side left -fill both -expand yes
-}
-
-proc VMEncoder::_destinationE { parent } {
-
-       variable var
-
-       set labdst [LabelFrame $parent.labdst -text "Save compressed volume as: " -side top \
-                       -anchor w -relief flat -borderwidth 0]
-       set subdst [$labdst getframe]
-       set list [entry $subdst.entrydst -width 30 -textvariable VMDecoder::var(destination)]
-       
-       set labbrw [LabelFrame $parent.labbrw -side top -anchor w -relief flat -borderwidth 0]
-       set subbrw [$labbrw getframe]
-       set butbrw [button $subbrw.butbrw -image [Bitmap::get save] \
-               -relief raised -borderwidth 1 -padx 1 -pady 1 \
-               -command "fileDialogE . $subdst.entrydst save"]
-       
-       pack $list -side top
-       pack $butbrw -side top
-       pack $labdst $labbrw -side left -fill both -expand yes
-}
-
-proc VMEncoder::_codingE { parent } {
-
-       
-       ########### CODING  #############
-       set labcod [LabelFrame $parent.labcod -side top -anchor w -relief sunken -borderwidth 1]
-       set subcod  [$labcod getframe]
-
-               set framerate [frame $subcod.framerate -borderwidth 1]
-               set labrate [LabelEntry $framerate.labrate -label "Rates: " -labelwidth 9 -labelanchor w \
-                   -textvariable VMEncoder::var(rate) -editable 1 \
-                   -helptext "Compression ratios for different layers (R1, R2, R3,...). If R=1, lossless coding" ]
-       set VMEncoder::var(rate) "1"
-
-               set framecblk [frame $subcod.framecblk -borderwidth 1]
-               set labcblk [LabelEntry $framecblk.labcblk -label "Codeblock: " -labelwidth 9 -labelanchor w \
-                   -textvariable VMEncoder::var(cblksize) -editable 1 \
-                   -helptext "Codeblock size (X, Y, Z)" ]
-       set VMEncoder::var(cblksize) "64,64,64"
-
-               set frametile [frame $subcod.frametile -borderwidth 1]
-               set labtile [LabelEntry $frametile.labtile -label "Tile size: " -labelwidth 9 -labelanchor w \
-                   -textvariable VMEncoder::var(tilesize) -editable 1 \
-                   -helptext "Tile size (X, Y, Z)" ]
-       set VMEncoder::var(tilesize) "512,512,512"
-
-               set framesop [frame $subcod.framesop -borderwidth 1]
-               set chksop [checkbutton $framesop.chksop -text "Write SOP marker" \
-                          -variable VMEncoder::var(sop) -onvalue 1 -offvalue 0 ]
-               set frameeph [frame $subcod.frameeph -borderwidth 1]
-               set chkeph [checkbutton $frameeph.chkeph -text "Write EPH marker" \
-                          -variable VMEncoder::var(eph) -onvalue 1 -offvalue 0 ]
-       
-               set framepoc [frame $subcod.framepoc -borderwidth 1]
-               set labpoc [label $framepoc.labpoc -text "Progression order: " ]
-               set progorder [ComboBox $framepoc.progorder \
-                          -text {Choose a progression order} \
-                          -width 10 \
-                          -textvariable VMEncoder::var(progorder) \
-                          -values {"LRCP" "RLCP" "RPCL" "PCRL" "CPRL"} \
-                          -helptext "Progression order"]
-               set VMEncoder::var(progorder) "LRCP"
-
-               pack $labrate -side left -padx 2 -anchor n
-               pack $labcblk -side left -padx 2 -anchor n
-               pack $labpoc $progorder -side left -padx 2 -anchor w
-               #pack $labtile -side left -padx 2 -anchor n
-               pack $chksop -side left -padx 2 -anchor w
-               pack $chkeph -side left -padx 2 -anchor w
-       ########### ENTROPY CODING  #############
-       set labent [LabelFrame $parent.labent -text "Entropy Coding" -side top -anchor w -relief sunken -borderwidth 1]
-       set subent  [$labent getframe]
-               foreach entval {2EB 3EB} entropy {2D_EBCOT 3D_EBCOT} {
-                       set rad [radiobutton $subent.$entval \
-                               -text $entropy \
-                               -variable VMEncoder::var(encoding) \
-                               -command "disableGR $entval $labcblk $progorder $labrate $chksop $chkeph" \
-                               -value $entval ]
-                       pack $rad -anchor w
-               }
-               $subent.2EB select 
-
-       pack $subent -padx 2 -anchor n
-
-       pack $framerate $framecblk $framepoc $framesop $frameeph -side top -anchor w
-       pack $subcod -anchor n
-
-       pack $labent $labcod -side left -fill both -padx 4 -expand yes
-
-
-}
-
-proc VMEncoder::_transformE { parent } {
-
-       variable var
-
-       ########### TRANSFORM  #############
-       set labtrf [LabelFrame $parent.labtrf -text "Transform" -side top -anchor w -relief sunken -borderwidth 1]
-       set subtrf  [$labtrf getframe]
-       set labres [LabelFrame $parent.labres -side top -anchor w -relief sunken -borderwidth 1]
-       set subres [$labres getframe]
-               
-               ########### ATK #############
-               set frameatk [frame $subres.frameatk -borderwidth 1]
-               set labatk [label $frameatk.labatk -text "Wavelet kernel:  " -anchor w]
-               set atk [ComboBox $frameatk.atk \
-                               -textvariable VMEncoder::var(atk) \
-                               -width 20 \
-                               -text {Choose a wavelet kernel} \
-                               -editable false \
-                               -values {"R5.3" "I9.7"} ]
-               set VMEncoder::var(atk) "R5.3"
-               pack $labatk $atk -side left -anchor w
-               ########### RESOLUTIONS #############
-               set frameres1 [frame $subres.frameres1 -borderwidth 1]
-               set labresolution [label $frameres1.labresol -text "Resolutions: " -anchor w ]
-               set frameres2 [frame $subres.frameres2 -borderwidth 1]
-               set labresX [label $frameres2.labresX -text "  X" -anchor w ]
-               set labresY [label $frameres2.labresY -text "  Y" -anchor w ]
-               set labresZ [label $frameres2.labresZ -text "  Z" -anchor w ]
-               
-
-               set resX [SpinBox $frameres2.spinresX \
-                               -range {1 6 1} -textvariable VMEncoder::var(resX) \
-                               -helptext "Number of resolutions in X" \
-                               -width 3 \
-                               -editable false ]
-               set resY [SpinBox $frameres2.spinresY \
-                               -range {1 6 1} -textvariable VMEncoder::var(resY) \
-                               -helptext "Number of resolutions in Y" \
-                               -width 3 \
-                               -editable false ]
-               set resZ [SpinBox $frameres2.spinresZ \
-                               -range {1 6 1} -textvariable VMEncoder::var(resZ) \
-                               -helptext "Number of resolutions in Z" \
-                               -width 3 \
-                               -editable false \
-                               -state disabled ]
-               set VMEncoder::var(resX) 3
-               set VMEncoder::var(resY) 3
-               set VMEncoder::var(resZ) 3
-
-               ########### TRF  #############
-               foreach trfval {2DWT 3DWT} trf {2D-DWT 3D-DWT} {
-                       set rad [radiobutton $subtrf.$trfval -text $trf \
-                                       -variable VMEncoder::var(transform) \
-                                       -command "disable3RLS $trfval $atk $resX $resY $resZ"\
-                                       -value $trfval ]
-                       pack $rad -anchor w
-               }
-               $subtrf.2DWT select
-               
-       pack $subtrf -side left -padx 2 -pady 4
-       
-               pack $labresolution -padx 2 -side left -anchor w
-               pack $labresX $resX -padx 2 -side left -anchor w
-               pack $labresY $resY -padx 2 -side left -anchor w
-               pack $labresZ $resZ -padx 2 -side left -anchor w
-
-               pack $frameres1 -side top -fill x
-               pack $frameres2 $frameatk -side top -padx 2 -pady 4 -anchor n
-
-       pack $subres -side left -padx 2 -pady 4
-       pack $labtrf $labres -side left -fill both -padx 4 -expand yes
-}
-
-
-proc VMEncoder::_encode { framesrc framedst } {
-
-       variable var
-
-       set source [$framesrc.labsrc.f.entrysrc get ]
-       set destination [$framedst.labdst.f.entrydst get ]
-       set cond1 [string match *.pgx [string tolower $source]]
-       set cond2 [string match *-*.pgx [string tolower $source]]
-       set cond3 [string match *.bin [string tolower $source]]
-
-       set img ".img"
-       set pattern [string range $source 0 [expr [string length $source]-5]]
-       set pattern $pattern$img
-       set exist [file exists $pattern]
-       
-       #comprobamos datos son correctos
-       if {($cond1 == 1) && ($cond2 == 0)} {
-         MessageDlg .msgdlg -parent . -message "Info : Really want to encode an slice instead of a volume?.\n For a group of .pgx slices, name must contain a - denoting a sequential index!" -type ok -icon info
-       } 
-       
-       if {$source == ""} {
-         MessageDlg .msgdlg -parent . -message "Error : Source file is not defined !" -type ok -icon error 
-       } elseif {$destination == ""} {
-         MessageDlg .msgdlg -parent . -message "Error : Destination file is not defined !" -type ok -icon error 
-       } elseif { ($VMEncoder::var(transform) != "3RLS") && ($VMEncoder::var(atk) == "Choose a wavelet transformation kernel") } {
-         MessageDlg .msgdlg -parent . -title "Info" -message "Please choose a wavelet transformation kernel"\
-                       -type ok -icon warning
-       } elseif {($exist == 0) && ($cond1 == 0) && ($cond3 == 1)} {
-                 MessageDlg .msgdlg -parent . -message "Error : IMG file associated to BIN volume file not found in same directory !" -type ok -icon info 
-       } else {
-
-               #creamos datain a partir de los parametros de entrada
-#              set dirJP3Dencoder [mk_relativepath $VMEncoder::JP3Dencoder]
-               set dirJP3Dencoder $VMEncoder::JP3Dencoder
-               set datain [concat " $dirJP3Dencoder -i [mk_relativepath $source] "]
-               if {$cond3 == 1} {
-                  set datain [concat " $datain -m [mk_relativepath $pattern] "]
-               }
-               set datain [concat " $datain -o [mk_relativepath $destination] "]
-               if {$VMEncoder::var(encoding) != "2EB"} {
-                       set datain [concat " $datain -C $VMEncoder::var(encoding) "]
-               }
-               if {$VMEncoder::var(transform) == "2DWT"} {
-                       set datain [concat " $datain -n $VMEncoder::var(resX),$VMEncoder::var(resY) "]
-               } elseif {$VMEncoder::var(transform) == "3DWT"} {
-                       set datain [concat " $datain -n $VMEncoder::var(resX),$VMEncoder::var(resY),$VMEncoder::var(resZ) "]
-               }
-               
-               set datain [concat " $datain -r $VMEncoder::var(rate) "]
-               
-               if {$VMEncoder::var(atk) == "I9.7"} {
-                       set datain [concat " $datain -I "]
-               } 
-               if {$VMEncoder::var(sop) == 1} {
-                       set datain [concat " $datain -SOP "]
-               }
-               if {$VMEncoder::var(eph) == 1} {
-                       set datain [concat " $datain -EPH "]
-               }
-               if {$VMEncoder::var(progorder) != "LRCP"} {
-                       set datain [concat " $datain -p $VMEncoder::var(progorder) "]
-               }
-               if {$VMEncoder::var(cblksize) != "64,64,64"} {
-                       set datain [concat " $datain -b $VMEncoder::var(cblksize) "]
-               }
-
-               
-               #Making this work would be great !!! 
-               set VMEncoder::var(progval) 10
-               ProgressDlg .progress -parent . -title "Wait..." \
-                       -type         infinite \
-                       -width        20 \
-                       -textvariable "Compute in progress..."\
-                       -variable     VMEncoder::progval \
-                       -stop         "Stop" \
-                       -command      {destroy .progress}
-               after 200 set VMEncoder::var(progval) 2
-               set fp [open "| $datain " r+] 
-               fconfigure $fp -buffering line 
-               set jp3dVM::dataout [concat "EXECUTED PROGRAM:\n\t$datain"]
-               while {-1 != [gets $fp tmp]} {
-                       set jp3dVM::dataout [concat "$jp3dVM::dataout\n$tmp"]
-               }
-               destroy .progress
-               set cond [string first "ERROR" $jp3dVM::dataout]
-               set cond2 [string first "RESULT" $jp3dVM::dataout]
-               if {$cond != -1} {
-                  MessageDlg .msgdlg -parent . -message [string range $jp3dVM::dataout [expr $cond-1] end] -type ok -icon error
-               } elseif {$cond2 != -1} {
-                  MessageDlg .msgdlg -parent . -message [string range $jp3dVM::dataout [expr $cond2+7] end] -type ok -icon info
-                  close $fp
-               } else {
-                  #Must do something with this !!! [pid $fp]
-                  close $fp
-               }
-       }
-}
-
-proc VMEncoder::_reset { framesrc framedst frametrf framecod} {
-
-       variable var
-
-       #Restore defaults values
-       set VMEncoder::var(transform) 2DWT
-       set VMEncoder::var(encoding) 2EB
-       set VMEncoder::var(atk) "R5.3"
-       set VMEncoder::var(progorder) "LRCP"
-       set atk $frametrf.labres.f.frameatk.atk
-       set resX $frametrf.labres.f.frameres2.spinresX
-       set resY $frametrf.labres.f.frameres2.spinresY
-       set resZ $frametrf.labres.f.frameres2.spinresZ
-       disable3RLS 2DWT $atk $resX $resY $resZ 
-       set labcblk $framecod.labcod.f.framecblk.labcblk
-       set progorder $framecod.labcod.f.framepoc.progorder
-       set labrate $framecod.labcod.f.framerate.labrate
-       set chksop $framecod.labcod.f.framesop.chksop
-       set chkeph $framecod.labcod.f.frameeph.chkeph
-       disableGR 3EB $labcblk $progorder $labrate $chksop $chkeph
-
-       $framesrc.labsrc.f.entrysrc delete 0 end
-       $framedst.labdst.f.entrydst delete 0 end
-}
-
-proc fileDialogE {w ent operation} {
-
-       variable file
-       variable i j
-
-       if {$operation == "open"} {
-               set types {
-                       {"Source Image Files"   {.pgx .bin}     }
-                       {"All files"            *}
-               }
-               set file [tk_getOpenFile -filetypes $types -parent $w]
-               if {[string compare $file ""]} {
-                       $ent delete 0 end
-                       $ent insert end $file
-                       $ent xview moveto 1
-               }
-       } else {
-               set types {
-                       {"JP3D Files"              {.jp3d}      }
-                       {"JPEG2000 Files"          {.j2k}       }
-                       {"All files"            *}
-               }
-               set file [tk_getSaveFile -filetypes $types -parent $w \
-                       -initialfile Untitled -defaultextension .jp3d]
-               if {[string compare $file ""]} {
-                       $ent delete 0 end
-                       $ent insert end $file
-                       $ent xview moveto 1
-               }
-       }
-}
-
-proc mk_relativepath {abspath} {
-
-       set mydir [split [string trimleft [pwd] {/}] {/}]
-       set abspathcomps [split [string trimleft $abspath {/}] {/}]
-
-       set i 0
-       while {$i<[llength $mydir]} {
-               if {![string compare [lindex $abspathcomps $i] [lindex $mydir $i]]} {
-                       incr i
-               } else {
-                       break
-               }
-       }
-       set h [expr [llength $mydir]-$i]
-       set j [expr [llength $abspathcomps]-$i]
-
-       if {!$h} {
-               set relpath "./"
-       } else {
-               set relpath ""
-               while { $h > 0 } {
-                       set relpath "../$relpath"
-                       incr h -1
-               }
-       }
-
-       set h [llength $abspathcomps]
-       while { $h > $i } {
-               set relpath [concat $relpath[lindex $abspathcomps [expr [llength $abspathcomps]-$j]]/]
-               incr h -1
-               incr j -1
-       }
-       return [string trim $relpath {/}]
-}
-
-proc disable3RLS {flag atk resX resY resZ}  {
-
-       if {$flag == "3RLS"} {
-               $atk configure -state disabled
-               $resX configure -state disabled
-               $resY configure -state disabled
-               $resZ configure -state disabled
-       } elseif {$flag == "2DWT"} {
-               $atk configure -state normal
-               $resX configure -state normal
-               $resY configure -state normal
-               $resZ configure -state disabled
-       } elseif {$flag == "3DWT"} {
-               $atk configure -state normal
-               $resX configure -state normal
-               $resY configure -state normal
-               $resZ configure -state normal
-       }
-}
-
-proc disableGR {flag labcblk progorder labrate chksop chkeph} {
-       
-       if {$flag == "2EB"} {
-               $labcblk configure -state normal
-               $progorder configure -state normal
-               $labrate configure -state normal
-               $chksop configure -state normal
-               $chkeph configure -state normal
-               set VMEncoder::var(cblksize) "64,64,64"
-               set VMEncoder::var(tilesize) "512,512,512"
-       } elseif {$flag == "3EB"} {
-               $labcblk configure -state normal
-               $progorder configure -state normal
-               $labrate configure -state normal
-               $chksop configure -state normal
-               $chkeph configure -state normal
-               set VMEncoder::var(cblksize) "64,64,64"
-               set VMEncoder::var(tilesize) "512,512,512"
-       } else {
-               $labcblk configure -state disabled
-               $progorder configure -state disabled
-               $labrate configure -state disabled
-               $chksop configure -state disabled
-               $chkeph configure -state disabled
-       }
-}
diff --git a/src/bin/jp3d/tcltk/logoLPI.gif b/src/bin/jp3d/tcltk/logoLPI.gif
deleted file mode 100755 (executable)
index df79515..0000000
Binary files a/src/bin/jp3d/tcltk/logoLPI.gif and /dev/null differ
diff --git a/src/bin/jp3d/windirent.h b/src/bin/jp3d/windirent.h
deleted file mode 100644 (file)
index 4b1d9ff..0000000
+++ /dev/null
@@ -1,679 +0,0 @@
-/*
- * uce-dirent.h - operating system independent dirent implementation
- *
- * Copyright (C) 1998-2002  Toni Ronkko
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * ``Software''), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL TONI RONKKO BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- *
- * May 28 1998, Toni Ronkko <tronkko@messi.uku.fi>
- *
- * $Id: uce-dirent.h,v 1.7 2002/05/13 10:48:35 tr Exp $
- *
- * $Log: uce-dirent.h,v $
- * Revision 1.7  2002/05/13 10:48:35  tr
- * embedded some source code directly to the header so that no source
- * modules need to be included in the MS Visual C project using the
- * interface, removed all the dependencies to other headers of the `uce'
- * library so that the header can be made public
- *
- * Revision 1.6  2002/04/12 16:22:04  tr
- * Unified Compiling Environment (UCE) replaced `std' library
- *
- * Revision 1.5  2001/07/20 16:33:40  tr
- * moved to `std' library and re-named defines accordingly
- *
- * Revision 1.4  2001/07/10 16:47:18  tronkko
- * revised comments
- *
- * Revision 1.3  2001/01/11 13:16:43  tr
- * using ``uce-machine.h'' for finding out defines such as `FREEBSD'
- *
- * Revision 1.2  2000/10/08 16:00:41  tr
- * copy of FreeBSD man page
- *
- * Revision 1.1  2000/07/10 05:53:16  tr
- * Initial revision
- *
- * Revision 1.2  1998/07/19 18:29:14  tr
- * Added error reporting capabilities and some asserts.
- *
- * Revision 1.1  1998/07/04 16:27:51  tr
- * Initial revision
- *
- *
- * MSVC 1.0 scans automatic dependencies incorrectly when your project
- * contains this very header.  The problem is that MSVC cannot handle
- * include directives inside #if..#endif block those are never entered.
- * Since this header ought to compile in many different operating systems,
- * there had to be several conditional blocks that are compiled only in
- * operating systems for what they were designed for.  MSVC 1.0 cannot
- * handle inclusion of sys/dir.h in a part that is compiled only in Apollo
- * operating system.  To fix the problem you need to insert DIR.H into
- * SYSINCL.DAT located in MSVC\BIN directory and restart visual C++.
- * Consult manuals for more informaton about the problem.
- *
- * Since many UNIX systems have dirent.h we assume to have one also.
- * However, if your UNIX system does not have dirent.h you can download one
- * for example at: http://ftp.uni-mannheim.de/ftp/GNU/dirent/dirent.tar.gz.
- * You can also see if you have one of dirent.h, direct.h, dir.h, ndir.h,
- * sys/dir.h and sys/ndir.h somewhere.  Try defining HAVE_DIRENT_H,
- * HAVE_DIRECT_H, HAVE_DIR_H, HAVE_NDIR_H, HAVE_SYS_DIR_H and
- * HAVE_SYS_NDIR_H according to the files found.
- */
-#ifndef DIRENT_H
-#define DIRENT_H
-#define DIRENT_H_INCLUDED
-
-/* find out platform */
-#if defined(MSDOS)                             /* MS-DOS */
-#elif defined(__MSDOS__)                       /* Turbo C/Borland */
-# define MSDOS
-#elif defined(__DOS__)                         /* Watcom */
-# define MSDOS
-#endif
-
-#if defined(WIN32)                             /* MS-Windows */
-#elif defined(__NT__)                          /* Watcom */
-# define WIN32
-#elif defined(_WIN32)                          /* Microsoft */
-# define WIN32
-#elif defined(__WIN32__)                       /* Borland */
-# define WIN32
-#endif
-
-/*
- * See what kind of dirent interface we have unless autoconf has already
- * determinated that.
- */
-#if !defined(HAVE_DIRENT_H) && !defined(HAVE_DIRECT_H) && !defined(HAVE_SYS_DIR_H) && !defined(HAVE_NDIR_H) && !defined(HAVE_SYS_NDIR_H) && !defined(HAVE_DIR_H)
-# if defined(_MSC_VER)                         /* Microsoft C/C++ */
-/* no dirent.h */
-# elif defined(__MINGW32__)                    /* MinGW */
-/* no dirent.h */
-# elif defined(__BORLANDC__)                   /* Borland C/C++ */
-#   define HAVE_DIRENT_H
-#   define VOID_CLOSEDIR
-# elif defined(__TURBOC__)                     /* Borland Turbo C */
-/* no dirent.h */
-# elif defined(__WATCOMC__)                    /* Watcom C/C++ */
-#   define HAVE_DIRECT_H
-# elif defined(__apollo)                       /* Apollo */
-#   define HAVE_SYS_DIR_H
-# elif defined(__hpux)                         /* HP-UX */
-#   define HAVE_DIRENT_H
-# elif defined(__alpha) || defined(__alpha__)  /* Alpha OSF1 */
-#   error "not implemented"
-# elif defined(__sgi)                          /* Silicon Graphics */
-#   define HAVE_DIRENT_H
-# elif defined(sun) || defined(_sun)           /* Sun Solaris */
-#   define HAVE_DIRENT_H
-# elif defined(__FreeBSD__)                    /* FreeBSD */
-#   define HAVE_DIRENT_H
-# elif defined(__linux__)                      /* Linux */
-#   define HAVE_DIRENT_H
-# elif defined(__GNUC__)                       /* GNU C/C++ */
-#   define HAVE_DIRENT_H
-# else
-#   error "not implemented"
-# endif
-#endif
-
-/* include proper interface headers */
-#if defined(HAVE_DIRENT_H)
-# include <dirent.h>
-# ifdef FREEBSD
-#   define NAMLEN(dp) ((int)((dp)->d_namlen))
-# else
-#   define NAMLEN(dp) ((int)(strlen((dp)->d_name)))
-# endif
-
-#elif defined(HAVE_NDIR_H)
-# include <ndir.h>
-# define NAMLEN(dp) ((int)((dp)->d_namlen))
-
-#elif defined(HAVE_SYS_NDIR_H)
-# include <sys/ndir.h>
-# define NAMLEN(dp) ((int)((dp)->d_namlen))
-
-#elif defined(HAVE_DIRECT_H)
-# include <direct.h>
-# define NAMLEN(dp) ((int)((dp)->d_namlen))
-
-#elif defined(HAVE_DIR_H)
-# include <dir.h>
-# define NAMLEN(dp) ((int)((dp)->d_namlen))
-
-#elif defined(HAVE_SYS_DIR_H)
-# include <sys/types.h>
-# include <sys/dir.h>
-# ifndef dirent
-#   define dirent direct
-# endif
-# define NAMLEN(dp) ((int)((dp)->d_namlen))
-
-#elif defined(MSDOS) || defined(WIN32)
-
-/* figure out type of underlaying directory interface to be used */
-# if defined(WIN32)
-#   define DIRENT_WIN32_INTERFACE
-# elif defined(MSDOS)
-#   define DIRENT_MSDOS_INTERFACE
-# else
-#   error "missing native dirent interface"
-# endif
-
-/*** WIN32 specifics ***/
-# if defined(DIRENT_WIN32_INTERFACE)
-#   include <windows.h>
-#   if !defined(DIRENT_MAXNAMLEN)
-#     define DIRENT_MAXNAMLEN (MAX_PATH)
-#   endif
-
-
-/*** MS-DOS specifics ***/
-# elif defined(DIRENT_MSDOS_INTERFACE)
-#   include <dos.h>
-
-/* Borland defines file length macros in dir.h */
-#   if defined(__BORLANDC__)
-#     include <dir.h>
-#     if !defined(DIRENT_MAXNAMLEN)
-#       define DIRENT_MAXNAMLEN ((MAXFILE)+(MAXEXT))
-#     endif
-#     if !defined(_find_t)
-#       define _find_t find_t
-#     endif
-
-/* Turbo C defines ffblk structure in dir.h */
-#   elif defined(__TURBOC__)
-#     include <dir.h>
-#     if !defined(DIRENT_MAXNAMLEN)
-#       define DIRENT_MAXNAMLEN ((MAXFILE)+(MAXEXT))
-#     endif
-#     define DIRENT_USE_FFBLK
-
-/* MSVC */
-#   elif defined(_MSC_VER)
-#     if !defined(DIRENT_MAXNAMLEN)
-#       define DIRENT_MAXNAMLEN (12)
-#     endif
-
-/* Watcom */
-#   elif defined(__WATCOMC__)
-#     if !defined(DIRENT_MAXNAMLEN)
-#       if defined(__OS2__) || defined(__NT__)
-#         define DIRENT_MAXNAMLEN (255)
-#       else
-#         define DIRENT_MAXNAMLEN (12)
-#       endif
-#     endif
-
-#   endif
-# endif
-
-/*** generic MS-DOS and MS-Windows stuff ***/
-# if !defined(NAME_MAX) && defined(DIRENT_MAXNAMLEN)
-#   define NAME_MAX DIRENT_MAXNAMLEN
-# endif
-# if NAME_MAX < DIRENT_MAXNAMLEN
-#   error "assertion failed: NAME_MAX >= DIRENT_MAXNAMLEN"
-# endif
-
-
-/*
- * Substitute for real dirent structure.  Note that `d_name' field is a
- * true character array although we have it copied in the implementation
- * dependent data.  We could save some memory if we had declared `d_name'
- * as a pointer referring the name within implementation dependent data.
- * We have not done that since some code may rely on sizeof(d_name) to be
- * something other than four.  Besides, directory entries are typically so
- * small that it takes virtually no time to copy them from place to place.
- */
-typedef struct dirent {
-    char d_name[NAME_MAX + 1];
-
-    /*** Operating system specific part ***/
-# if defined(DIRENT_WIN32_INTERFACE)       /*WIN32*/
-    WIN32_FIND_DATA data;
-# elif defined(DIRENT_MSDOS_INTERFACE)     /*MSDOS*/
-#   if defined(DIRENT_USE_FFBLK)
-    struct ffblk data;
-#   else
-    struct _find_t data;
-#   endif
-# endif
-} dirent;
-
-/* DIR substitute structure containing directory name.  The name is
- * essential for the operation of ``rewinndir'' function. */
-typedef struct DIR {
-    char          *dirname;                    /* directory being scanned */
-    dirent        current;                     /* current entry */
-    int           dirent_filled;               /* is current un-processed? */
-
-    /*** Operating system specific part ***/
-#  if defined(DIRENT_WIN32_INTERFACE)
-    HANDLE        search_handle;
-#  elif defined(DIRENT_MSDOS_INTERFACE)
-#  endif
-} DIR;
-
-# ifdef __cplusplus
-extern "C" {
-# endif
-
-/* supply prototypes for dirent functions */
-static DIR *opendir(const char *dirname);
-static struct dirent *readdir(DIR *dirp);
-static int closedir(DIR *dirp);
-static void rewinddir(DIR *dirp);
-
-/*
- * Implement dirent interface as static functions so that the user does not
- * need to change his project in any way to use dirent function.  With this
- * it is sufficient to include this very header from source modules using
- * dirent functions and the functions will be pulled in automatically.
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <errno.h>
-
-/* use ffblk instead of _find_t if requested */
-#if defined(DIRENT_USE_FFBLK)
-# define _A_ARCH   (FA_ARCH)
-# define _A_HIDDEN (FA_HIDDEN)
-# define _A_NORMAL (0)
-# define _A_RDONLY (FA_RDONLY)
-# define _A_SUBDIR (FA_DIREC)
-# define _A_SYSTEM (FA_SYSTEM)
-# define _A_VOLID  (FA_LABEL)
-# define _dos_findnext(dest) findnext(dest)
-# define _dos_findfirst(name,flags,dest) findfirst(name,dest,flags)
-#endif
-
-static int _initdir(DIR *p);
-static const char *_getdirname(const struct dirent *dp);
-static void _setdirname(struct DIR *dirp);
-
-/*
- * <function name="opendir">
- * <intro>open directory stream for reading
- * <syntax>DIR *opendir (const char *dirname);
- *
- * <desc>Open named directory stream for read and return pointer to the
- * internal working area that is used for retrieving individual directory
- * entries.  The internal working area has no fields of your interest.
- *
- * <ret>Returns a pointer to the internal working area or NULL in case the
- * directory stream could not be opened.  Global `errno' variable will set
- * in case of error as follows:
- *
- * <table>
- * [EACESS  |Permission denied.
- * [EMFILE  |Too many open files used by the process.
- * [ENFILE  |Too many open files in system.
- * [ENOENT  |Directory does not exist.
- * [ENOMEM  |Insufficient memory.
- * [ENOTDIR |dirname does not refer to directory.  This value is not
- *           reliable on MS-DOS and MS-Windows platforms.  Many
- *           implementations return ENOENT even when the name refers to a
- *           file.]
- * </table>
- * </function>
- */
-static DIR *opendir(const char *dirname)
-{
-    DIR *dirp;
-    assert(dirname != NULL);
-
-    dirp = (DIR*)malloc(sizeof(struct DIR));
-    if (dirp != NULL) {
-        char *p;
-
-        /* allocate room for directory name */
-        dirp->dirname = (char*) malloc(strlen(dirname) + 1 + strlen("\\*.*"));
-        if (dirp->dirname == NULL) {
-            /* failed to duplicate directory name.  errno set by malloc() */
-            free(dirp);
-            return NULL;
-        }
-        /* Copy directory name while appending directory separator and "*.*".
-         * Directory separator is not appended if the name already ends with
-         * drive or directory separator.  Directory separator is assumed to be
-         * '/' or '\' and drive separator is assumed to be ':'. */
-        strcpy(dirp->dirname, dirname);
-        p = strchr(dirp->dirname, '\0');
-        if (dirp->dirname < p  &&
-                *(p - 1) != '\\'  &&  *(p - 1) != '/'  &&  *(p - 1) != ':') {
-            strcpy(p++, "\\");
-        }
-# ifdef DIRENT_WIN32_INTERFACE
-        strcpy(p, "*");  /*scan files with and without extension in win32*/
-# else
-        strcpy(p, "*.*");  /*scan files with and without extension in DOS*/
-# endif
-
-        /* open stream */
-        if (_initdir(dirp) == 0) {
-            /* initialization failed */
-            free(dirp->dirname);
-            free(dirp);
-            return NULL;
-        }
-    }
-    return dirp;
-}
-
-
-/*
- * <function name="readdir">
- * <intro>read a directory entry
- * <syntax>struct dirent *readdir (DIR *dirp);
- *
- * <desc>Read individual directory entry and return pointer to a structure
- * containing the name of the entry.  Individual directory entries returned
- * include normal files, sub-directories, pseudo-directories "." and ".."
- * and also volume labels, hidden files and system files in MS-DOS and
- * MS-Windows.   You might want to use stat(2) function to determinate which
- * one are you dealing with.  Many dirent implementations already contain
- * equivalent information in dirent structure but you cannot depend on
- * this.
- *
- * The dirent structure contains several system dependent fields that
- * generally have no interest to you.  The only interesting one is char
- * d_name[] that is also portable across different systems.  The d_name
- * field contains the name of the directory entry without leading path.
- * While d_name is portable across different systems the actual storage
- * capacity of d_name varies from system to system and there is no portable
- * way to find out it at compile time as different systems define the
- * capacity of d_name with different macros and some systems do not define
- * capacity at all (besides actual declaration of the field). If you really
- * need to find out storage capacity of d_name then you might want to try
- * NAME_MAX macro. The NAME_MAX is defined in POSIX standard although
- * there are many MS-DOS and MS-Windows implementations those do not define
- * it.  There are also systems that declare d_name as "char d_name[1]" and
- * then allocate suitable amount of memory at run-time.  Thanks to Alain
- * Decamps (Alain.Decamps@advalvas.be) for pointing it out to me.
- *
- * This all leads to the fact that it is difficult to allocate space
- * for the directory names when the very same program is being compiled on
- * number of operating systems.  Therefore I suggest that you always
- * allocate space for directory names dynamically.
- *
- * <ret>
- * Returns a pointer to a structure containing name of the directory entry
- * in `d_name' field or NULL if there was an error.  In case of an error the
- * global `errno' variable will set as follows:
- *
- * <table>
- * [EBADF  |dir parameter refers to an invalid directory stream.  This value
- *          is not set reliably on all implementations.]
- * </table>
- * </function>
- */
-static struct dirent *
-readdir(DIR *dirp)
-{
-    assert(dirp != NULL);
-    if (dirp == NULL) {
-        errno = EBADF;
-        return NULL;
-    }
-
-#if defined(DIRENT_WIN32_INTERFACE)
-    if (dirp->search_handle == INVALID_HANDLE_VALUE) {
-        /* directory stream was opened/rewound incorrectly or it ended normally */
-        errno = EBADF;
-        return NULL;
-    }
-#endif
-
-    if (dirp->dirent_filled != 0) {
-        /*
-         * Directory entry has already been retrieved and there is no need to
-         * retrieve a new one.  Directory entry will be retrieved in advance
-         * when the user calls readdir function for the first time.  This is so
-         * because real dirent has separate functions for opening and reading
-         * the stream whereas Win32 and DOS dirents open the stream
-         * automatically when we retrieve the first file.  Therefore, we have to
-         * save the first file when opening the stream and later we have to
-         * return the saved entry when the user tries to read the first entry.
-         */
-        dirp->dirent_filled = 0;
-    } else {
-        /* fill in entry and return that */
-#if defined(DIRENT_WIN32_INTERFACE)
-        if (FindNextFile(dirp->search_handle, &dirp->current.data) == FALSE) {
-            /* Last file has been processed or an error occurred */
-            FindClose(dirp->search_handle);
-            dirp->search_handle = INVALID_HANDLE_VALUE;
-            errno = ENOENT;
-            return NULL;
-        }
-
-# elif defined(DIRENT_MSDOS_INTERFACE)
-        if (_dos_findnext(&dirp->current.data) != 0) {
-            /* _dos_findnext and findnext will set errno to ENOENT when no
-             * more entries could be retrieved. */
-            return NULL;
-        }
-# endif
-
-        _setdirname(dirp);
-        assert(dirp->dirent_filled == 0);
-    }
-    return &dirp->current;
-}
-
-
-/*
- * <function name="closedir">
- * <intro>close directory stream.
- * <syntax>int closedir (DIR *dirp);
- *
- * <desc>Close directory stream opened by the `opendir' function.  Close of
- * directory stream invalidates the DIR structure as well as previously read
- * dirent entry.
- *
- * <ret>The function typically returns 0 on success and -1 on failure but
- * the function may be declared to return void on same systems.  At least
- * Borland C/C++ and some UNIX implementations use void as a return type.
- * The dirent wrapper tries to define VOID_CLOSEDIR whenever closedir is
- * known to return nothing.  The very same definition is made by the GNU
- * autoconf if you happen to use it.
- *
- * The global `errno' variable will set to EBADF in case of error.
- * </function>
- */
-static int
-closedir(DIR *dirp)
-{
-    int retcode = 0;
-
-    /* make sure that dirp points to legal structure */
-    assert(dirp != NULL);
-    if (dirp == NULL) {
-        errno = EBADF;
-        return -1;
-    }
-
-    /* free directory name and search handles */
-    if (dirp->dirname != NULL) {
-        free(dirp->dirname);
-    }
-
-#if defined(DIRENT_WIN32_INTERFACE)
-    if (dirp->search_handle != INVALID_HANDLE_VALUE) {
-        if (FindClose(dirp->search_handle) == FALSE) {
-            /* Unknown error */
-            retcode = -1;
-            errno = EBADF;
-        }
-    }
-#endif
-
-    /* clear dirp structure to make sure that it cannot be used anymore*/
-    memset(dirp, 0, sizeof(*dirp));
-# if defined(DIRENT_WIN32_INTERFACE)
-    dirp->search_handle = INVALID_HANDLE_VALUE;
-# endif
-
-    free(dirp);
-    return retcode;
-}
-
-
-/*
- * <function name="rewinddir">
- * <intro>rewind directory stream to the beginning
- * <syntax>void rewinddir (DIR *dirp);
- *
- * <desc>Rewind directory stream to the beginning so that the next call of
- * readdir() returns the very first directory entry again.  However, note
- * that next call of readdir() may not return the same directory entry as it
- * did in first time.  The directory stream may have been affected by newly
- * created files.
- *
- * Almost every dirent implementation ensure that rewinddir will update
- * the directory stream to reflect any changes made to the directory entries
- * since the previous ``opendir'' or ``rewinddir'' call.  Keep an eye on
- * this if your program depends on the feature.  I know at least one dirent
- * implementation where you are required to close and re-open the stream to
- * see the changes.
- *
- * <ret>Returns nothing.  If something went wrong while rewinding, you will
- * notice it later when you try to retrieve the first directory entry.
- */
-static void
-rewinddir(DIR *dirp)
-{
-    /* make sure that dirp is legal */
-    assert(dirp != NULL);
-    if (dirp == NULL) {
-        errno = EBADF;
-        return;
-    }
-    assert(dirp->dirname != NULL);
-
-    /* close previous stream */
-#if defined(DIRENT_WIN32_INTERFACE)
-    if (dirp->search_handle != INVALID_HANDLE_VALUE) {
-        if (FindClose(dirp->search_handle) == FALSE) {
-            /* Unknown error */
-            errno = EBADF;
-        }
-    }
-#endif
-
-    /* re-open previous stream */
-    if (_initdir(dirp) == 0) {
-        /* initialization failed but we cannot deal with error.  User will notice
-         * error later when she tries to retrieve first directory enty. */
-        /*EMPTY*/;
-    }
-}
-
-
-/*
- * Open native directory stream object and retrieve first file.
- * Be sure to close previous stream before opening new one.
- */
-static int
-_initdir(DIR *dirp)
-{
-    assert(dirp != NULL);
-    assert(dirp->dirname != NULL);
-    dirp->dirent_filled = 0;
-
-# if defined(DIRENT_WIN32_INTERFACE)
-    /* Open stream and retrieve first file */
-    dirp->search_handle = FindFirstFile(dirp->dirname, &dirp->current.data);
-    if (dirp->search_handle == INVALID_HANDLE_VALUE) {
-        /* something went wrong but we don't know what.  GetLastError() could
-         * give us more information about the error, but then we should map
-         * the error code into errno. */
-        errno = ENOENT;
-        return 0;
-    }
-
-# elif defined(DIRENT_MSDOS_INTERFACE)
-    if (_dos_findfirst(dirp->dirname,
-                       _A_SUBDIR | _A_RDONLY | _A_ARCH | _A_SYSTEM | _A_HIDDEN,
-                       &dirp->current.data) != 0) {
-        /* _dos_findfirst and findfirst will set errno to ENOENT when no
-         * more entries could be retrieved. */
-        return 0;
-    }
-# endif
-
-    /* initialize DIR and it's first entry */
-    _setdirname(dirp);
-    dirp->dirent_filled = 1;
-    return 1;
-}
-
-
-/*
- * Return implementation dependent name of the current directory entry.
- */
-static const char *
-_getdirname(const struct dirent *dp)
-{
-#if defined(DIRENT_WIN32_INTERFACE)
-    return dp->data.cFileName;
-
-#elif defined(DIRENT_USE_FFBLK)
-    return dp->data.ff_name;
-
-#else
-    return dp->data.name;
-#endif
-}
-
-
-/*
- * Copy name of implementation dependent directory entry to the d_name field.
- */
-static void
-_setdirname(struct DIR *dirp)
-{
-    /* make sure that d_name is long enough */
-    assert(strlen(_getdirname(&dirp->current)) <= NAME_MAX);
-
-    strncpy(dirp->current.d_name,
-            _getdirname(&dirp->current),
-            NAME_MAX);
-    dirp->current.d_name[NAME_MAX] = '\0'; /*char d_name[NAME_MAX+1]*/
-}
-
-# ifdef __cplusplus
-}
-# endif
-# define NAMLEN(dp) ((int)(strlen((dp)->d_name)))
-
-#else
-# error "missing dirent interface"
-#endif
-
-
-#endif /*DIRENT_H*/
diff --git a/src/bin/jpwl/CMakeLists.txt b/src/bin/jpwl/CMakeLists.txt
deleted file mode 100644 (file)
index 5df225d..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-# jpwl apps
-
-# First thing define the common source:
-set(common_SRCS
-  convert.c
-  index.c
-  ${OPENJPEG_SOURCE_DIR}/src/bin/common/color.c
-  ${OPENJPEG_SOURCE_DIR}/src/bin/common/opj_getopt.c
-  )
-
-# Headers file are located here:
-include_directories(
-  ${OPENJPEG_BINARY_DIR}/src/lib/openjp2 # opj_config.h
-  ${OPENJPEG_BINARY_DIR}/src/bin/common # opj_apps_config.h
-  ${OPENJPEG_SOURCE_DIR}/src/lib/openmj2
-  ${OPENJPEG_SOURCE_DIR}/src/bin/common
-  ${LCMS_INCLUDE_DIRNAME}
-  ${Z_INCLUDE_DIRNAME}
-  ${PNG_INCLUDE_DIRNAME}
-  ${TIFF_INCLUDE_DIRNAME}
-  )
-
-if(WIN32)
-  if(BUILD_SHARED_LIBS)
-    add_definitions(-DOPJ_EXPORTS)
-  else()
-    add_definitions(-DOPJ_STATIC)
-  endif()
-endif()
-
-add_definitions(-DOPJ_USE_LEGACY)
-foreach(exe decompress compress)
-  set(jpwl_exe opj_jpwl_${exe})
-  set(jp2_exe opj_${exe})
-  add_executable(${jpwl_exe}
-    #../jp2/${jp2_exe}.c
-    ${jpwl_exe}.c
-    ${common_SRCS}
-  )
-  set_property(
-    TARGET ${jpwl_exe}
-    APPEND PROPERTY COMPILE_DEFINITIONS USE_JPWL
-  )
-
-  target_link_libraries(${jpwl_exe} openjpwl
-    ${LCMS_LIBNAME} ${PNG_LIBNAME} ${TIFF_LIBNAME})
-
-  # To support universal exe:
-  if(ZLIB_FOUND AND APPLE)
-    target_link_libraries(${jpwl_exe} z)
-  else(ZLIB_FOUND AND APPLE)
-    target_link_libraries(${jpwl_exe} ${Z_LIBNAME})
-  endif()
-
-  if(UNIX)
-    target_link_libraries(${jpwl_exe} m)
-  endif()
-
-  install(TARGETS ${jpwl_exe}
-    DESTINATION ${OPENJPEG_INSTALL_BIN_DIR} COMPONENT Applications
-  )
-endforeach()
diff --git a/src/bin/jpwl/convert.c b/src/bin/jpwl/convert.c
deleted file mode 100644 (file)
index b7fb5b5..0000000
+++ /dev/null
@@ -1,3771 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2006-2007, Parvatha Elangovan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#include "opj_apps_config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <limits.h>
-
-#ifdef OPJ_HAVE_LIBTIFF
-#include <tiffio.h>
-#endif /* OPJ_HAVE_LIBTIFF */
-
-#ifdef OPJ_HAVE_LIBPNG
-#include <zlib.h>
-#include <png.h>
-#endif /* OPJ_HAVE_LIBPNG */
-
-#include "openjpeg.h"
-#include "convert.h"
-
-/*
- * Get logarithm of an integer and round downwards.
- *
- * log2(a)
- */
-static int int_floorlog2(int a)
-{
-    int l;
-    for (l = 0; a > 1; l++) {
-        a >>= 1;
-    }
-    return l;
-}
-
-/* -->> -->> -->> -->>
-
-  TGA IMAGE FORMAT
-
- <<-- <<-- <<-- <<-- */
-
-#ifdef INFORMATION_ONLY
-/* TGA header definition. */
-struct tga_header {
-    unsigned char   id_length;              /* Image id field length    */
-    unsigned char   colour_map_type;        /* Colour map type          */
-    unsigned char   image_type;             /* Image type               */
-    /*
-    ** Colour map specification
-    */
-    unsigned short  colour_map_index;       /* First entry index        */
-    unsigned short  colour_map_length;      /* Colour map length        */
-    unsigned char   colour_map_entry_size;  /* Colour map entry size    */
-    /*
-    ** Image specification
-    */
-    unsigned short  x_origin;               /* x origin of image        */
-    unsigned short  y_origin;               /* u origin of image        */
-    unsigned short  image_width;            /* Image width              */
-    unsigned short  image_height;           /* Image height             */
-    unsigned char   pixel_depth;            /* Pixel depth              */
-    unsigned char   image_desc;             /* Image descriptor         */
-};
-#endif /* INFORMATION_ONLY */
-
-static unsigned short get_ushort(unsigned short val)
-{
-
-#ifdef OPJ_BIG_ENDIAN
-    return (((val & 0xff) << 8) + (val >> 8));
-#else
-    return (val);
-#endif
-
-}
-
-#define TGA_HEADER_SIZE 18
-
-static int tga_readheader(FILE *fp, unsigned int *bits_per_pixel,
-                          unsigned int *width, unsigned int *height, int *flip_image)
-{
-    int palette_size;
-    unsigned char *tga ;
-    unsigned char id_len, cmap_type, image_type;
-    unsigned char pixel_depth, image_desc;
-    unsigned short cmap_index, cmap_len, cmap_entry_size;
-    unsigned short x_origin, y_origin, image_w, image_h;
-
-    if (!bits_per_pixel || !width || !height || !flip_image) {
-        return 0;
-    }
-    tga = (unsigned char*)malloc(18);
-
-    if (fread(tga, TGA_HEADER_SIZE, 1, fp) != 1) {
-        fprintf(stderr,
-                "\nError: fread return a number of element different from the expected.\n");
-        free(tga);
-        return 0 ;
-    }
-    id_len = (unsigned char)tga[0];
-    cmap_type = (unsigned char)tga[1];
-    image_type = (unsigned char)tga[2];
-    cmap_index = get_ushort(*(unsigned short*)(&tga[3]));
-    cmap_len = get_ushort(*(unsigned short*)(&tga[5]));
-    cmap_entry_size = (unsigned char)tga[7];
-
-
-    x_origin = get_ushort(*(unsigned short*)(&tga[8]));
-    y_origin = get_ushort(*(unsigned short*)(&tga[10]));
-    image_w = get_ushort(*(unsigned short*)(&tga[12]));
-    image_h = get_ushort(*(unsigned short*)(&tga[14]));
-    pixel_depth = (unsigned char)tga[16];
-    image_desc  = (unsigned char)tga[17];
-
-    free(tga);
-
-    *bits_per_pixel = (unsigned int)pixel_depth;
-    *width  = (unsigned int)image_w;
-    *height = (unsigned int)image_h;
-
-    /* Ignore tga identifier, if present ... */
-    if (id_len) {
-        unsigned char *id = (unsigned char *) malloc(id_len);
-        if (!fread(id, id_len, 1, fp)) {
-            fprintf(stderr,
-                    "\nError: fread return a number of element different from the expected.\n");
-            free(id);
-            return 0 ;
-        }
-        free(id);
-    }
-
-    /* Test for compressed formats ... not yet supported ...
-    // Note :-  9 - RLE encoded palettized.
-    //         10 - RLE encoded RGB. */
-    if (image_type > 8) {
-        fprintf(stderr, "Sorry, compressed tga files are not currently supported.\n");
-        return 0 ;
-    }
-
-    *flip_image = !(image_desc & 32);
-
-    /* Palettized formats are not yet supported, skip over the palette, if present ... */
-    palette_size = cmap_len * (cmap_entry_size / 8);
-
-    if (palette_size > 0) {
-        fprintf(stderr, "File contains a palette - not yet supported.");
-        fseek(fp, palette_size, SEEK_CUR);
-    }
-    return 1;
-}
-
-#ifdef OPJ_BIG_ENDIAN
-
-static inline uint16_t swap16(uint16_t x)
-{
-    return (((x & 0x00ffU) << 8) | ((x & 0xff00U) >> 8));
-}
-
-#endif
-
-static int tga_writeheader(FILE *fp, int bits_per_pixel, int width, int height,
-                           opj_bool flip_image)
-{
-    unsigned short image_w, image_h, us0;
-    unsigned char uc0, image_type;
-    unsigned char pixel_depth, image_desc;
-
-    if (!bits_per_pixel || !width || !height) {
-        return 0;
-    }
-
-    pixel_depth = 0;
-
-    if (bits_per_pixel < 256) {
-        pixel_depth = (unsigned char)bits_per_pixel;
-    } else {
-        fprintf(stderr, "ERROR: Wrong bits per pixel inside tga_header");
-        return 0;
-    }
-    uc0 = 0;
-
-    if (fwrite(&uc0, 1, 1, fp) != 1) {
-        goto fails;    /* id_length */
-    }
-    if (fwrite(&uc0, 1, 1, fp) != 1) {
-        goto fails;    /* colour_map_type */
-    }
-
-    image_type = 2; /* Uncompressed. */
-    if (fwrite(&image_type, 1, 1, fp) != 1) {
-        goto fails;
-    }
-
-    us0 = 0;
-    if (fwrite(&us0, 2, 1, fp) != 1) {
-        goto fails;    /* colour_map_index */
-    }
-    if (fwrite(&us0, 2, 1, fp) != 1) {
-        goto fails;    /* colour_map_length */
-    }
-    if (fwrite(&uc0, 1, 1, fp) != 1) {
-        goto fails;    /* colour_map_entry_size */
-    }
-
-    if (fwrite(&us0, 2, 1, fp) != 1) {
-        goto fails;    /* x_origin */
-    }
-    if (fwrite(&us0, 2, 1, fp) != 1) {
-        goto fails;    /* y_origin */
-    }
-
-    image_w = (unsigned short)width;
-    image_h = (unsigned short) height;
-
-#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
-    image_w = swap16(image_w);
-    image_h = swap16(image_h);
-    if (fwrite(&image_w, 2, 1, fp) != 1) {
-        goto fails;
-    }
-    if (fwrite(&image_h, 2, 1, fp) != 1) {
-        goto fails;
-    }
-#endif
-
-    if (fwrite(&pixel_depth, 1, 1, fp) != 1) {
-        goto fails;
-    }
-
-    image_desc = 8; /* 8 bits per component. */
-
-    if (flip_image) {
-        image_desc |= 32;
-    }
-    if (fwrite(&image_desc, 1, 1, fp) != 1) {
-        goto fails;
-    }
-
-    return 1;
-
-fails:
-    fputs("\nwrite_tgaheader: write ERROR\n", stderr);
-    return 0;
-}
-
-opj_image_t* tgatoimage(const char *filename, opj_cparameters_t *parameters)
-{
-    FILE *f;
-    opj_image_t *image;
-    unsigned int image_width, image_height, pixel_bit_depth;
-    unsigned int x, y;
-    int flip_image = 0;
-    opj_image_cmptparm_t cmptparm[4];   /* maximum 4 components */
-    int numcomps;
-    OPJ_COLOR_SPACE color_space;
-    opj_bool mono ;
-    opj_bool save_alpha;
-    int subsampling_dx, subsampling_dy;
-    int i;
-
-    f = fopen(filename, "rb");
-    if (!f) {
-        fprintf(stderr, "Failed to open %s for reading !!\n", filename);
-        return 0;
-    }
-
-    if (!tga_readheader(f, &pixel_bit_depth, &image_width, &image_height,
-                        &flip_image)) {
-        return NULL;
-    }
-
-    /* We currently only support 24 & 32 bit tga's ... */
-    if (!((pixel_bit_depth == 24) || (pixel_bit_depth == 32))) {
-        return NULL;
-    }
-
-    /* initialize image components */
-    memset(&cmptparm[0], 0, 4 * sizeof(opj_image_cmptparm_t));
-
-    mono = (pixel_bit_depth == 8) ||
-           (pixel_bit_depth == 16);  /* Mono with & without alpha. */
-    save_alpha = (pixel_bit_depth == 16) ||
-                 (pixel_bit_depth == 32); /* Mono with alpha, or RGB with alpha */
-
-    if (mono) {
-        color_space = CLRSPC_GRAY;
-        numcomps = save_alpha ? 2 : 1;
-    } else {
-        numcomps = save_alpha ? 4 : 3;
-        color_space = CLRSPC_SRGB;
-    }
-
-    subsampling_dx = parameters->subsampling_dx;
-    subsampling_dy = parameters->subsampling_dy;
-
-    for (i = 0; i < numcomps; i++) {
-        cmptparm[i].prec = 8;
-        cmptparm[i].bpp = 8;
-        cmptparm[i].sgnd = 0;
-        cmptparm[i].dx = subsampling_dx;
-        cmptparm[i].dy = subsampling_dy;
-        cmptparm[i].w = image_width;
-        cmptparm[i].h = image_height;
-    }
-
-    /* create the image */
-    image = opj_image_create(numcomps, &cmptparm[0], color_space);
-
-    if (!image) {
-        return NULL;
-    }
-
-    /* set image offset and reference grid */
-    image->x0 = parameters->image_offset_x0;
-    image->y0 = parameters->image_offset_y0;
-    image->x1 = !image->x0 ? (image_width - 1) * subsampling_dx + 1 : image->x0 +
-                (image_width - 1) * subsampling_dx + 1;
-    image->y1 = !image->y0 ? (image_height - 1) * subsampling_dy + 1 : image->y0 +
-                (image_height - 1) * subsampling_dy + 1;
-
-    /* set image data */
-    for (y = 0; y < image_height; y++) {
-        int index;
-
-        if (flip_image) {
-            index = (image_height - y - 1) * image_width;
-        } else {
-            index = y * image_width;
-        }
-
-        if (numcomps == 3) {
-            for (x = 0; x < image_width; x++) {
-                unsigned char r, g, b;
-
-                if (!fread(&b, 1, 1, f)) {
-                    fprintf(stderr,
-                            "\nError: fread return a number of element different from the expected.\n");
-                    opj_image_destroy(image);
-                    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;
-                }
-                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;
-                }
-
-                image->comps[0].data[index] = r;
-                image->comps[1].data[index] = g;
-                image->comps[2].data[index] = b;
-                index++;
-            }
-        } else if (numcomps == 4) {
-            for (x = 0; x < image_width; x++) {
-                unsigned char r, g, b, a;
-                if (!fread(&b, 1, 1, f)) {
-                    fprintf(stderr,
-                            "\nError: fread return a number of element different from the expected.\n");
-                    opj_image_destroy(image);
-                    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;
-                }
-                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;
-                }
-                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;
-                }
-
-                image->comps[0].data[index] = r;
-                image->comps[1].data[index] = g;
-                image->comps[2].data[index] = b;
-                image->comps[3].data[index] = a;
-                index++;
-            }
-        } else {
-            fprintf(stderr, "Currently unsupported bit depth : %s\n", filename);
-        }
-    }
-    return image;
-}
-
-int imagetotga(opj_image_t * image, const char *outfile)
-{
-    int width, height, bpp, x, y;
-    opj_bool write_alpha;
-    int i, adjustR, adjustG = 0, adjustB = 0;
-    unsigned int alpha_channel;
-    float r, g, b, a;
-    unsigned char value;
-    float scale;
-    FILE *fdest;
-    size_t res;
-
-    fdest = fopen(outfile, "wb");
-    if (!fdest) {
-        fprintf(stderr, "ERROR -> failed to open %s for writing\n", outfile);
-        return 1;
-    }
-
-    for (i = 0; i < image->numcomps - 1; i++) {
-        if ((image->comps[0].dx != image->comps[i + 1].dx)
-                || (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;
-        }
-    }
-
-    width = image->comps[0].w;
-    height = image->comps[0].h;
-
-    /* Mono with alpha, or RGB with alpha. */
-    write_alpha = (image->numcomps == 2) || (image->numcomps == 4);
-
-    /* Write TGA header  */
-    bpp = write_alpha ? 32 : 24;
-    if (!tga_writeheader(fdest, bpp, width, height, OPJ_TRUE)) {
-        fclose(fdest);
-        return 1;
-    }
-
-    alpha_channel = image->numcomps - 1;
-
-    scale = 255.0f / (float)((1 << image->comps[0].prec) - 1);
-
-    adjustR = (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
-    if (image->numcomps >= 3) {
-        adjustG = (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
-        adjustB = (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
-    }
-
-    for (y = 0; y < height; y++) {
-        unsigned int index = y * width;
-
-        for (x = 0; x < width; x++, index++)  {
-            r = (float)(image->comps[0].data[index] + adjustR);
-
-            if (image->numcomps > 2) {
-                g = (float)(image->comps[1].data[index] + adjustG);
-                b = (float)(image->comps[2].data[index] + adjustB);
-            } else  { /* Greyscale ... */
-                g = r;
-                b = r;
-            }
-
-            /* TGA format writes BGR ... */
-            value = (unsigned char)(b * scale);
-            res = fwrite(&value, 1, 1, fdest);
-            if (res < 1) {
-                fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
-                fclose(fdest);
-                return 1;
-            }
-
-            value = (unsigned char)(g * scale);
-            res = fwrite(&value, 1, 1, fdest);
-            if (res < 1) {
-                fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
-                fclose(fdest);
-                return 1;
-            }
-
-            value = (unsigned char)(r * scale);
-            res = fwrite(&value, 1, 1, fdest);
-            if (res < 1) {
-                fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
-                fclose(fdest);
-                return 1;
-            }
-
-            if (write_alpha) {
-                a = (float)(image->comps[alpha_channel].data[index]);
-                value = (unsigned char)(a * scale);
-                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;
-}
-
-/* -->> -->> -->> -->>
-
-  BMP IMAGE FORMAT
-
- <<-- <<-- <<-- <<-- */
-
-/* WORD defines a two byte word */
-typedef unsigned short int WORD;
-
-/* DWORD defines a four byte word */
-typedef unsigned int DWORD;
-
-typedef struct {
-    WORD bfType;          /* 'BM' for Bitmap (19776) */
-    DWORD bfSize;         /* Size of the file        */
-    WORD bfReserved1;     /* Reserved : 0            */
-    WORD bfReserved2;     /* Reserved : 0            */
-    DWORD bfOffBits;      /* Offset                  */
-} BITMAPFILEHEADER_t;
-
-typedef struct {
-    DWORD biSize;         /* Size of the structure in bytes */
-    DWORD biWidth;        /* Width of the image in pixels */
-    DWORD biHeight;       /* Height of the image in pixels */
-    WORD biPlanes;        /* 1 */
-    WORD biBitCount;      /* Number of color bits by pixels */
-    DWORD biCompression;      /* Type of encoding 0: none 1: RLE8 2: RLE4 */
-    DWORD biSizeImage;        /* Size of the image in bytes */
-    DWORD biXpelsPerMeter;    /* Horizontal (X) resolution in pixels/meter */
-    DWORD biYpelsPerMeter;    /* Vertical (Y) resolution in pixels/meter */
-    DWORD biClrUsed;      /* Number of color used in the image (0: ALL) */
-    DWORD biClrImportant;     /* Number of important color (0: ALL) */
-} BITMAPINFOHEADER_t;
-
-opj_image_t* bmptoimage(const char *filename, opj_cparameters_t *parameters)
-{
-    int subsampling_dx = parameters->subsampling_dx;
-    int subsampling_dy = parameters->subsampling_dy;
-
-    int i, numcomps, w, h;
-    OPJ_COLOR_SPACE color_space;
-    opj_image_cmptparm_t cmptparm[3];   /* maximum of 3 components */
-    opj_image_t * image = NULL;
-
-    FILE *IN;
-    BITMAPFILEHEADER_t File_h;
-    BITMAPINFOHEADER_t Info_h;
-    unsigned char *RGB;
-    unsigned char *table_R, *table_G, *table_B;
-    unsigned int j, PAD = 0;
-
-    int x, y, index;
-    int gray_scale = 1;
-    int has_color;
-    DWORD W, H;
-
-    IN = fopen(filename, "rb");
-    if (!IN) {
-        fprintf(stderr, "Failed to open %s for reading !!\n", filename);
-        return NULL;
-    }
-
-    File_h.bfType = getc(IN);
-    File_h.bfType = (getc(IN) << 8) + File_h.bfType;
-
-    if (File_h.bfType != 19778) {
-        fprintf(stderr, "Error, not a BMP file!\n");
-        fclose(IN);
-        return NULL;
-    }
-    /* FILE HEADER */
-    /* ------------- */
-    File_h.bfSize = getc(IN);
-    File_h.bfSize = (getc(IN) << 8) + File_h.bfSize;
-    File_h.bfSize = (getc(IN) << 16) + File_h.bfSize;
-    File_h.bfSize = (getc(IN) << 24) + File_h.bfSize;
-
-    File_h.bfReserved1 = getc(IN);
-    File_h.bfReserved1 = (getc(IN) << 8) + File_h.bfReserved1;
-
-    File_h.bfReserved2 = getc(IN);
-    File_h.bfReserved2 = (getc(IN) << 8) + File_h.bfReserved2;
-
-    File_h.bfOffBits = getc(IN);
-    File_h.bfOffBits = (getc(IN) << 8) + File_h.bfOffBits;
-    File_h.bfOffBits = (getc(IN) << 16) + File_h.bfOffBits;
-    File_h.bfOffBits = (getc(IN) << 24) + File_h.bfOffBits;
-
-    /* INFO HEADER */
-    /* ------------- */
-
-    Info_h.biSize = getc(IN);
-    Info_h.biSize = (getc(IN) << 8) + Info_h.biSize;
-    Info_h.biSize = (getc(IN) << 16) + Info_h.biSize;
-    Info_h.biSize = (getc(IN) << 24) + Info_h.biSize;
-
-    if (Info_h.biSize != 40) {
-        fprintf(stderr, "Error, unknown BMP header size %d\n", Info_h.biSize);
-        fclose(IN);
-        return NULL;
-    }
-    Info_h.biWidth = getc(IN);
-    Info_h.biWidth = (getc(IN) << 8) + Info_h.biWidth;
-    Info_h.biWidth = (getc(IN) << 16) + Info_h.biWidth;
-    Info_h.biWidth = (getc(IN) << 24) + Info_h.biWidth;
-    w = Info_h.biWidth;
-
-    Info_h.biHeight = getc(IN);
-    Info_h.biHeight = (getc(IN) << 8) + Info_h.biHeight;
-    Info_h.biHeight = (getc(IN) << 16) + Info_h.biHeight;
-    Info_h.biHeight = (getc(IN) << 24) + Info_h.biHeight;
-    h = Info_h.biHeight;
-
-    Info_h.biPlanes = getc(IN);
-    Info_h.biPlanes = (getc(IN) << 8) + Info_h.biPlanes;
-
-    Info_h.biBitCount = getc(IN);
-    Info_h.biBitCount = (getc(IN) << 8) + Info_h.biBitCount;
-
-    Info_h.biCompression = getc(IN);
-    Info_h.biCompression = (getc(IN) << 8) + Info_h.biCompression;
-    Info_h.biCompression = (getc(IN) << 16) + Info_h.biCompression;
-    Info_h.biCompression = (getc(IN) << 24) + Info_h.biCompression;
-
-    Info_h.biSizeImage = getc(IN);
-    Info_h.biSizeImage = (getc(IN) << 8) + Info_h.biSizeImage;
-    Info_h.biSizeImage = (getc(IN) << 16) + Info_h.biSizeImage;
-    Info_h.biSizeImage = (getc(IN) << 24) + Info_h.biSizeImage;
-
-    Info_h.biXpelsPerMeter = getc(IN);
-    Info_h.biXpelsPerMeter = (getc(IN) << 8) + Info_h.biXpelsPerMeter;
-    Info_h.biXpelsPerMeter = (getc(IN) << 16) + Info_h.biXpelsPerMeter;
-    Info_h.biXpelsPerMeter = (getc(IN) << 24) + Info_h.biXpelsPerMeter;
-
-    Info_h.biYpelsPerMeter = getc(IN);
-    Info_h.biYpelsPerMeter = (getc(IN) << 8) + Info_h.biYpelsPerMeter;
-    Info_h.biYpelsPerMeter = (getc(IN) << 16) + Info_h.biYpelsPerMeter;
-    Info_h.biYpelsPerMeter = (getc(IN) << 24) + Info_h.biYpelsPerMeter;
-
-    Info_h.biClrUsed = getc(IN);
-    Info_h.biClrUsed = (getc(IN) << 8) + Info_h.biClrUsed;
-    Info_h.biClrUsed = (getc(IN) << 16) + Info_h.biClrUsed;
-    Info_h.biClrUsed = (getc(IN) << 24) + Info_h.biClrUsed;
-
-    Info_h.biClrImportant = getc(IN);
-    Info_h.biClrImportant = (getc(IN) << 8) + Info_h.biClrImportant;
-    Info_h.biClrImportant = (getc(IN) << 16) + Info_h.biClrImportant;
-    Info_h.biClrImportant = (getc(IN) << 24) + Info_h.biClrImportant;
-
-    /* Read the data and store them in the OUT file */
-
-    if (Info_h.biBitCount == 24) {
-        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++) {
-            cmptparm[i].prec = 8;
-            cmptparm[i].bpp = 8;
-            cmptparm[i].sgnd = 0;
-            cmptparm[i].dx = subsampling_dx;
-            cmptparm[i].dy = subsampling_dy;
-            cmptparm[i].w = w;
-            cmptparm[i].h = h;
-        }
-        /* create the image */
-        image = opj_image_create(numcomps, &cmptparm[0], color_space);
-        if (!image) {
-            fclose(IN);
-            return NULL;
-        }
-
-        /* set image offset and reference grid */
-        image->x0 = parameters->image_offset_x0;
-        image->y0 = parameters->image_offset_y0;
-        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;
-
-        /* set image data */
-
-        /* 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;
-
-        /* PAD = 4 - (3 * W) % 4; */
-        /* PAD = (PAD == 4) ? 0 : PAD; */
-        PAD = (3 * W) % 4 ? 4 - (3 * W) % 4 : 0;
-
-        RGB = (unsigned char *)
-              malloc((3 * W + PAD) * H * sizeof(unsigned char));
-
-        if (fread(RGB, sizeof(unsigned char), (3 * W + PAD) * H,
-                  IN) != (3 * W + PAD) * H) {
-            fclose(IN);
-            free(RGB);
-            opj_image_destroy(image);
-            fprintf(stderr,
-                    "\nError: fread return a number of element different from the expected.\n");
-            return NULL;
-        }
-
-        index = 0;
-
-        for (y = 0; y < (int)H; y++) {
-            unsigned char *scanline = RGB + (3 * W + PAD) * (H - 1 - y);
-            for (x = 0; x < (int)W; x++) {
-                unsigned char *pixel = &scanline[3 * x];
-                image->comps[0].data[index] = pixel[2]; /* R */
-                image->comps[1].data[index] = pixel[1]; /* G */
-                image->comps[2].data[index] = pixel[0]; /* B */
-                index++;
-            }
-        }
-        free(RGB);
-    }/* if (Info_h.biBitCount == 24) */
-    else if (Info_h.biBitCount == 8 && Info_h.biCompression == 0) { /*RGB */
-        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;
-        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);
-            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;
-        /* initialize image components */
-        memset(&cmptparm[0], 0, 3 * sizeof(opj_image_cmptparm_t));
-        for (i = 0; i < numcomps; i++) {
-            cmptparm[i].prec = 8;
-            cmptparm[i].bpp = 8;
-            cmptparm[i].sgnd = 0;
-            cmptparm[i].dx = subsampling_dx;
-            cmptparm[i].dy = subsampling_dy;
-            cmptparm[i].w = w;
-            cmptparm[i].h = h;
-        }
-        /* create the image */
-        image = opj_image_create(numcomps, &cmptparm[0], color_space);
-        if (!image) {
-            fclose(IN);
-            free(table_R);
-            free(table_G);
-            free(table_B);
-            return NULL;
-        }
-
-        /* set image offset and reference grid */
-        image->x0 = parameters->image_offset_x0;
-        image->y0 = parameters->image_offset_y0;
-        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;
-
-        /* set image data */
-
-        RGB = (unsigned char *) malloc(W * H * sizeof(unsigned char));
-
-        if (fread(RGB, sizeof(unsigned char), W * H, IN) != W * H) {
-            fclose(IN);
-            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++) {
-                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++;
-                }
-            }
-
-        } 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++;
-                }
-            }
-        }
-        free(RGB);
-        free(table_R);
-        free(table_G);
-        free(table_B);
-    }/* RGB8 */
-    else if (Info_h.biBitCount == 8 && Info_h.biCompression == 1) { /*RLE8*/
-        unsigned char *pix, *beyond;
-        int *gray, *red, *green, *blue;
-        unsigned int x, y, max;
-        int i, c, c1;
-        unsigned char uc;
-
-        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;
-        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);
-            getc(IN);
-            has_color += !(table_R[j] == table_G[j] && table_R[j] == table_B[j]);
-        }
-
-        if (has_color) {
-            gray_scale = 0;
-        }
-
-        numcomps = gray_scale ? 1 : 3;
-        color_space = gray_scale ? CLRSPC_GRAY : CLRSPC_SRGB;
-        /* initialize image components */
-        memset(&cmptparm[0], 0, 3 * sizeof(opj_image_cmptparm_t));
-        for (i = 0; i < numcomps; i++) {
-            cmptparm[i].prec = 8;
-            cmptparm[i].bpp = 8;
-            cmptparm[i].sgnd = 0;
-            cmptparm[i].dx = subsampling_dx;
-            cmptparm[i].dy = subsampling_dy;
-            cmptparm[i].w = w;
-            cmptparm[i].h = h;
-        }
-        /* create the image */
-        image = opj_image_create(numcomps, &cmptparm[0], color_space);
-        if (!image) {
-            fclose(IN);
-            free(table_R);
-            free(table_G);
-            free(table_B);
-            return NULL;
-        }
-
-        /* set image offset and reference grid */
-        image->x0 = parameters->image_offset_x0;
-        image->y0 = parameters->image_offset_y0;
-        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;
-
-        /* set image data */
-
-        /* 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;
-        RGB = (unsigned char *) calloc(1, W * H * sizeof(unsigned char));
-        beyond = RGB + W * H;
-        pix = beyond - W;
-        x = y = 0;
-
-        while (y < H) {
-            c = getc(IN);
-
-            if (c) {
-                c1 = getc(IN);
-
-                for (i = 0; i < c && x < W && pix < beyond; i++, x++, pix++) {
-                    *pix = (unsigned char)c1;
-                }
-            } else {
-                c = getc(IN);
-
-                if (c == 0x00) { /* EOL */
-                    x = 0;
-                    ++y;
-                    pix = RGB + x + (H - y - 1) * W;
-                } else if (c == 0x01) { /* EOP */
-                    break;
-                } else if (c == 0x02) { /* MOVE by dxdy */
-                    c = getc(IN);
-                    x += c;
-                    c = getc(IN);
-                    y += c;
-                    pix = RGB + (H - y - 1) * W + x;
-                } else { /* 03 .. 255 */
-                    i = 0;
-                    for (; i < c && x < W && pix < beyond; i++, x++, pix++) {
-                        c1 = getc(IN);
-                        *pix = (unsigned char)c1;
-                    }
-                    if (c & 1) { /* skip padding byte */
-                        getc(IN);
-                    }
-                }
-            }
-        }/* while() */
-
-        if (gray_scale) {
-            gray = image->comps[0].data;
-            pix = RGB;
-            max = W * H;
-
-            while (max--) {
-                uc = *pix++;
-
-                *gray++ = table_R[uc];
-            }
-        } else {
-            /*int *red, *green, *blue;*/
-
-            red = image->comps[0].data;
-            green = image->comps[1].data;
-            blue = image->comps[2].data;
-            pix = RGB;
-            max = W * H;
-
-            while (max--) {
-                uc = *pix++;
-
-                *red++ = table_R[uc];
-                *green++ = table_G[uc];
-                *blue++ = table_B[uc];
-            }
-        }
-        free(RGB);
-        free(table_R);
-        free(table_G);
-        free(table_B);
-    }/* RLE8 */
-    else {
-        fprintf(stderr,
-                "Other system than 24 bits/pixels or 8 bits (no RLE coding) "
-                "is not yet implemented [%d]\n", Info_h.biBitCount);
-    }
-    fclose(IN);
-    return image;
-}
-
-int imagetobmp(opj_image_t * image, const char *outfile)
-{
-    int w, h;
-    int i, pad;
-    FILE *fdest = NULL;
-    int adjustR, adjustG, adjustB;
-
-    if (image->comps[0].prec < 8) {
-        fprintf(stderr, "Unsupported precision: %d\n", image->comps[0].prec);
-        return 1;
-    }
-    if (image->numcomps >= 3 && image->comps[0].dx == image->comps[1].dx
-            && image->comps[1].dx == image->comps[2].dx
-            && image->comps[0].dy == image->comps[1].dy
-            && image->comps[1].dy == image->comps[2].dy
-            && image->comps[0].prec == image->comps[1].prec
-            && image->comps[1].prec == image->comps[2].prec) {
-
-        /* -->> -->> -->> -->>
-        24 bits color
-        <<-- <<-- <<-- <<-- */
-
-        fdest = fopen(outfile, "wb");
-        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");
-
-        /* FILE HEADER */
-        /* ------------- */
-        fprintf(fdest, "%c%c%c%c",
-                (unsigned char)(h * w * 3 + 3 * h * (w % 2) + 54) & 0xff,
-                (unsigned char)((h * w * 3 + 3 * h * (w % 2) + 54) >> 8) & 0xff,
-                (unsigned char)((h * w * 3 + 3 * h * (w % 2) + 54) >> 16) & 0xff,
-                (unsigned char)((h * w * 3 + 3 * h * (w % 2) + 54) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff,
-                ((0) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (54) & 0xff, ((54) >> 8) & 0xff, ((54) >> 16) & 0xff,
-                ((54) >> 24) & 0xff);
-
-        /* INFO HEADER   */
-        /* ------------- */
-        fprintf(fdest, "%c%c%c%c", (40) & 0xff, ((40) >> 8) & 0xff, ((40) >> 16) & 0xff,
-                ((40) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (unsigned char)((w) & 0xff),
-                (unsigned char)((w) >> 8) & 0xff,
-                (unsigned char)((w) >> 16) & 0xff,
-                (unsigned char)((w) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (unsigned char)((h) & 0xff),
-                (unsigned char)((h) >> 8) & 0xff,
-                (unsigned char)((h) >> 16) & 0xff,
-                (unsigned char)((h) >> 24) & 0xff);
-        fprintf(fdest, "%c%c", (1) & 0xff, ((1) >> 8) & 0xff);
-        fprintf(fdest, "%c%c", (24) & 0xff, ((24) >> 8) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff,
-                ((0) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (unsigned char)(3 * h * w + 3 * h * (w % 2)) & 0xff,
-                (unsigned char)((h * w * 3 + 3 * h * (w % 2)) >> 8) & 0xff,
-                (unsigned char)((h * w * 3 + 3 * h * (w % 2)) >> 16) & 0xff,
-                (unsigned char)((h * w * 3 + 3 * h * (w % 2)) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff,
-                ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff,
-                ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff,
-                ((0) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff,
-                ((0) >> 24) & 0xff);
-
-        if (image->comps[0].prec > 8) {
-            adjustR = image->comps[0].prec - 8;
-            printf("BMP CONVERSION: Truncating component 0 from %d bits to 8 bits\n",
-                   image->comps[0].prec);
-        } else {
-            adjustR = 0;
-        }
-        if (image->comps[1].prec > 8) {
-            adjustG = image->comps[1].prec - 8;
-            printf("BMP CONVERSION: Truncating component 1 from %d bits to 8 bits\n",
-                   image->comps[1].prec);
-        } else {
-            adjustG = 0;
-        }
-        if (image->comps[2].prec > 8) {
-            adjustB = image->comps[2].prec - 8;
-            printf("BMP CONVERSION: Truncating component 2 from %d bits to 8 bits\n",
-                   image->comps[2].prec);
-        } else {
-            adjustB = 0;
-        }
-
-        for (i = 0; i < w * h; i++) {
-            unsigned char rc, gc, bc;
-            int r, g, b;
-
-            r = image->comps[0].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];
-            r += (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
-            r = ((r >> adjustR) + ((r >> (adjustR - 1)) % 2));
-            if (r > 255) {
-                r = 255;
-            } else if (r < 0) {
-                r = 0;
-            }
-            rc = (unsigned char)r;
-
-            g = image->comps[1].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];
-            g += (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
-            g = ((g >> adjustG) + ((g >> (adjustG - 1)) % 2));
-            if (g > 255) {
-                g = 255;
-            } else if (g < 0) {
-                g = 0;
-            }
-            gc = (unsigned char)g;
-
-            b = image->comps[2].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];
-            b += (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
-            b = ((b >> adjustB) + ((b >> (adjustB - 1)) % 2));
-            if (b > 255) {
-                b = 255;
-            } else if (b < 0) {
-                b = 0;
-            }
-            bc = (unsigned char)b;
-
-            fprintf(fdest, "%c%c%c", bc, gc, rc);
-
-            if ((i + 1) % w == 0) {
-                for (pad = (3 * w) % 4 ? 4 - (3 * w) % 4 : 0; pad > 0; pad--) { /* ADD */
-                    fprintf(fdest, "%c", 0);
-                }
-            }
-        }
-        fclose(fdest);
-    } else {            /* Gray-scale */
-
-        /* -->> -->> -->> -->>
-        8 bits non code (Gray scale)
-        <<-- <<-- <<-- <<-- */
-
-        fdest = fopen(outfile, "wb");
-        w = image->comps[0].w;
-        h = image->comps[0].h;
-
-        fprintf(fdest, "BM");
-
-        /* FILE HEADER */
-        /* ------------- */
-        fprintf(fdest, "%c%c%c%c",
-                (unsigned char)(h * w + 54 + 1024 + h * (w % 2)) & 0xff,
-                (unsigned char)((h * w + 54 + 1024 + h * (w % 2)) >> 8) & 0xff,
-                (unsigned char)((h * w + 54 + 1024 + h * (w % 2)) >> 16) & 0xff,
-                (unsigned char)((h * w + 54 + 1024 + w * (w % 2)) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff,
-                ((0) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (54 + 1024) & 0xff, ((54 + 1024) >> 8) & 0xff,
-                ((54 + 1024) >> 16) & 0xff,
-                ((54 + 1024) >> 24) & 0xff);
-
-        /* INFO HEADER */
-        /* ------------- */
-        fprintf(fdest, "%c%c%c%c", (40) & 0xff, ((40) >> 8) & 0xff, ((40) >> 16) & 0xff,
-                ((40) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (unsigned char)((w) & 0xff),
-                (unsigned char)((w) >> 8) & 0xff,
-                (unsigned char)((w) >> 16) & 0xff,
-                (unsigned char)((w) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (unsigned char)((h) & 0xff),
-                (unsigned char)((h) >> 8) & 0xff,
-                (unsigned char)((h) >> 16) & 0xff,
-                (unsigned char)((h) >> 24) & 0xff);
-        fprintf(fdest, "%c%c", (1) & 0xff, ((1) >> 8) & 0xff);
-        fprintf(fdest, "%c%c", (8) & 0xff, ((8) >> 8) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff,
-                ((0) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (unsigned char)(h * w + h * (w % 2)) & 0xff,
-                (unsigned char)((h * w + h * (w % 2)) >> 8) &  0xff,
-                (unsigned char)((h * w + h * (w % 2)) >> 16) & 0xff,
-                (unsigned char)((h * w + h * (w % 2)) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff,
-                ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff,
-                ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (256) & 0xff, ((256) >> 8) & 0xff,
-                ((256) >> 16) & 0xff, ((256) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (256) & 0xff, ((256) >> 8) & 0xff,
-                ((256) >> 16) & 0xff, ((256) >> 24) & 0xff);
-
-        if (image->comps[0].prec > 8) {
-            adjustR = image->comps[0].prec - 8;
-            printf("BMP CONVERSION: Truncating component 0 from %d bits to 8 bits\n",
-                   image->comps[0].prec);
-        } else {
-            adjustR = 0;
-        }
-
-        for (i = 0; i < 256; i++) {
-            fprintf(fdest, "%c%c%c%c", i, i, i, 0);
-        }
-
-        for (i = 0; i < w * h; i++) {
-            int r;
-
-            r = image->comps[0].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];
-            r += (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
-            r = ((r >> adjustR) + ((r >> (adjustR - 1)) % 2));
-            if (r > 255) {
-                r = 255;
-            } else if (r < 0) {
-                r = 0;
-            }
-
-            fprintf(fdest, "%c", (unsigned char)r);
-
-            if ((i + 1) % w == 0) {
-                for (pad = w % 4 ? 4 - w % 4 : 0; pad > 0; pad--) { /* ADD */
-                    fprintf(fdest, "%c", 0);
-                }
-            }
-        }
-        fclose(fdest);
-    }
-
-    return 0;
-}
-
-/* -->> -->> -->> -->>
-
-PGX IMAGE FORMAT
-
-<<-- <<-- <<-- <<-- */
-
-
-static unsigned char readuchar(FILE * f)
-{
-    unsigned char c1;
-    if (!fread(&c1, 1, 1, f)) {
-        fprintf(stderr,
-                "\nError: fread return a number of element different from the expected.\n");
-        return 0;
-    }
-    return c1;
-}
-
-static unsigned short readushort(FILE * f, int bigendian)
-{
-    unsigned char c1, c2;
-    if (!fread(&c1, 1, 1, f)) {
-        fprintf(stderr,
-                "\nError: fread return a number of element different from the expected.\n");
-        return 0;
-    }
-    if (!fread(&c2, 1, 1, f)) {
-        fprintf(stderr,
-                "\nError: fread return a number of element different from the expected.\n");
-        return 0;
-    }
-    if (bigendian) {
-        return (c1 << 8) + c2;
-    } else {
-        return (c2 << 8) + c1;
-    }
-}
-
-static unsigned int readuint(FILE * f, int bigendian)
-{
-    unsigned char c1, c2, c3, c4;
-    if (!fread(&c1, 1, 1, f)) {
-        fprintf(stderr,
-                "\nError: fread return a number of element different from the expected.\n");
-        return 0;
-    }
-    if (!fread(&c2, 1, 1, f)) {
-        fprintf(stderr,
-                "\nError: fread return a number of element different from the expected.\n");
-        return 0;
-    }
-    if (!fread(&c3, 1, 1, f)) {
-        fprintf(stderr,
-                "\nError: fread return a number of element different from the expected.\n");
-        return 0;
-    }
-    if (!fread(&c4, 1, 1, f)) {
-        fprintf(stderr,
-                "\nError: fread return a number of element different from the expected.\n");
-        return 0;
-    }
-    if (bigendian) {
-        return (c1 << 24) + (c2 << 16) + (c3 << 8) + c4;
-    } else {
-        return (c4 << 24) + (c3 << 16) + (c2 << 8) + c1;
-    }
-}
-
-opj_image_t* pgxtoimage(const char *filename, opj_cparameters_t *parameters)
-{
-    FILE *f = NULL;
-    int w, h, prec;
-    int i, numcomps, max;
-    OPJ_COLOR_SPACE color_space;
-    opj_image_cmptparm_t cmptparm;  /* maximum of 1 component  */
-    opj_image_t * image = NULL;
-    int adjustS, ushift, dshift, force8;
-
-    char endian1, endian2, sign;
-    char signtmp[32];
-
-    char temp[32];
-    int bigendian;
-    opj_image_comp_t *comp = NULL;
-
-    numcomps = 1;
-    color_space = CLRSPC_GRAY;
-
-    memset(&cmptparm, 0, sizeof(opj_image_cmptparm_t));
-
-    max = 0;
-
-    f = fopen(filename, "rb");
-    if (!f) {
-        fprintf(stderr, "Failed to open %s for reading !\n", filename);
-        return NULL;
-    }
-
-    fseek(f, 0, SEEK_SET);
-    if (fscanf(f, "PG%31[ \t]%c%c%31[ \t+-]%d%31[ \t]%d%31[ \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;
-    }
-
-    i = 0;
-    sign = '+';
-    while (signtmp[i] != '\0') {
-        if (signtmp[i] == '-') {
-            sign = '-';
-        }
-        i++;
-    }
-
-    fgetc(f);
-    if (endian1 == 'M' && endian2 == 'L') {
-        bigendian = 1;
-    } else if (endian2 == 'M' && endian1 == 'L') {
-        bigendian = 0;
-    } else {
-        fprintf(stderr, "Bad pgx header, please check input file\n");
-        fclose(f);
-        return NULL;
-    }
-
-    /* initialize image component */
-
-    cmptparm.x0 = parameters->image_offset_x0;
-    cmptparm.y0 = parameters->image_offset_y0;
-    cmptparm.w = !cmptparm.x0 ? (w - 1) * parameters->subsampling_dx + 1 :
-                 cmptparm.x0 + (w - 1) * parameters->subsampling_dx + 1;
-    cmptparm.h = !cmptparm.y0 ? (h - 1) * parameters->subsampling_dy + 1 :
-                 cmptparm.y0 + (h - 1) * parameters->subsampling_dy + 1;
-
-    if (sign == '-') {
-        cmptparm.sgnd = 1;
-    } else {
-        cmptparm.sgnd = 0;
-    }
-    if (prec < 8) {
-        force8 = 1;
-        ushift = 8 - prec;
-        dshift = prec - ushift;
-        if (cmptparm.sgnd) {
-            adjustS = (1 << (prec - 1));
-        } else {
-            adjustS = 0;
-        }
-        cmptparm.sgnd = 0;
-        prec = 8;
-    } else {
-        ushift = dshift = force8 = adjustS = 0;
-    }
-
-    cmptparm.prec = prec;
-    cmptparm.bpp = prec;
-    cmptparm.dx = parameters->subsampling_dx;
-    cmptparm.dy = parameters->subsampling_dy;
-
-    /* create the image */
-    image = opj_image_create(numcomps, &cmptparm, color_space);
-    if (!image) {
-        fclose(f);
-        return NULL;
-    }
-    /* set image offset and reference grid */
-    image->x0 = cmptparm.x0;
-    image->y0 = cmptparm.x0;
-    image->x1 = cmptparm.w;
-    image->y1 = cmptparm.h;
-
-    /* set image data */
-
-    comp = &image->comps[0];
-
-    for (i = 0; i < w * h; i++) {
-        int v;
-        if (force8) {
-            v = readuchar(f) + adjustS;
-            v = (v << ushift) + (v >> dshift);
-            comp->data[i] = (unsigned char)v;
-
-            if (v > max) {
-                max = v;
-            }
-
-            continue;
-        }
-        if (comp->prec == 8) {
-            if (!comp->sgnd) {
-                v = readuchar(f);
-            } else {
-                v = (char) readuchar(f);
-            }
-        } else if (comp->prec <= 16) {
-            if (!comp->sgnd) {
-                v = readushort(f, bigendian);
-            } else {
-                v = (short) readushort(f, bigendian);
-            }
-        } else {
-            if (!comp->sgnd) {
-                v = readuint(f, bigendian);
-            } else {
-                v = (int) readuint(f, bigendian);
-            }
-        }
-        if (v > max) {
-            max = v;
-        }
-        comp->data[i] = v;
-    }
-    fclose(f);
-    comp->bpp = int_floorlog2(max) + 1;
-
-    return image;
-}
-
-int imagetopgx(opj_image_t * image, const char *outfile)
-{
-    int w, h;
-    int i, j, compno;
-    FILE *fdest = NULL;
-
-    for (compno = 0; compno < image->numcomps; compno++) {
-        opj_image_comp_t *comp = &image->comps[compno];
-        char bname[256]; /* buffer for name */
-        char *name = bname; /* pointer */
-        int nbytes = 0;
-        size_t res;
-        const size_t olen = strlen(outfile);
-        const size_t dotpos = olen - 4;
-        const size_t total = dotpos + 1 + 1 + 4; /* '-' + '[1-3]' + '.pgx' */
-        if (olen < 4 || outfile[dotpos] != '.') {
-            /* `pgx` was recognized but there is no dot at expected position */
-            fprintf(stderr, "ERROR -> Impossible happen.");
-            return 1;
-        }
-        if (total > 256) {
-            name = (char*)malloc(total + 1);
-        }
-        strncpy(name, outfile, dotpos);
-        /*if (image->numcomps > 1) {*/
-        sprintf(name + dotpos, "_%d.pgx", compno);
-        /*} else {
-            strcpy(name+dotpos, ".pgx");
-        }*/
-        fdest = fopen(name, "wb");
-        if (!fdest) {
-            fprintf(stderr, "ERROR -> failed to open %s for writing\n", name);
-            free(name);
-            return 1;
-        }
-        /* don't need name anymore */
-        if (total > 256) {
-            free(name);
-        }
-
-        w = image->comps[compno].w;
-        h = image->comps[compno].h;
-
-        fprintf(fdest, "PG ML %c %d %d %d\n", comp->sgnd ? '-' : '+', comp->prec, w, h);
-        if (comp->prec <= 8) {
-            nbytes = 1;
-        } else if (comp->prec <= 16) {
-            nbytes = 2;
-        } else {
-            nbytes = 4;
-        }
-        for (i = 0; i < w * h; i++) {
-            int v = image->comps[compno].data[i];
-            for (j = nbytes - 1; j >= 0; j--) {
-                char byte = (char)(v >> (j * 8));
-                res = fwrite(&byte, 1, 1, fdest);
-                if (res < 1) {
-                    fprintf(stderr, "failed to write 1 byte for %s\n", name);
-                    fclose(fdest);
-                    return 1;
-                }
-            }
-        }
-        fclose(fdest);
-    }
-
-    return 0;
-}
-
-/* -->> -->> -->> -->>
-
-PNM IMAGE FORMAT
-
-<<-- <<-- <<-- <<-- */
-
-struct pnm_header {
-    int width, height, maxval, depth, format;
-    char rgb, rgba, gray, graya, bw;
-    char ok;
-};
-
-static char *skip_white(char *s)
-{
-    while (*s) {
-        if (*s == '\n' || *s == '\r') {
-            return NULL;
-        }
-        if (isspace(*s)) {
-            ++s;
-            continue;
-        }
-        return s;
-    }
-    return NULL;
-}
-
-static char *skip_int(char *start, int *out_n)
-{
-    char *s;
-    char c;
-
-    *out_n = 0;
-    s = start;
-
-    s = skip_white(start);
-    if (s == NULL) {
-        return NULL;
-    }
-    start = s;
-
-    while (*s) {
-        if (!isdigit(*s)) {
-            break;
-        }
-        ++s;
-    }
-    c = *s;
-    *s = 0;
-    *out_n = atoi(start);
-    *s = c;
-    return s;
-}
-
-static char *skip_idf(char *start, char out_idf[256])
-{
-    char *s;
-    char c;
-
-    s = skip_white(start);
-    if (s == NULL) {
-        return NULL;
-    }
-    start = s;
-
-    while (*s) {
-        if (isalpha(*s) || *s == '_') {
-            ++s;
-            continue;
-        }
-        break;
-    }
-    c = *s;
-    *s = 0;
-    strncpy(out_idf, start, 255);
-    *s = c;
-    return s;
-}
-
-static void read_pnm_header(FILE *reader, struct pnm_header *ph)
-{
-    char *s;
-    int format, have_wh, end, ttype;
-    char idf[256], type[256];
-    char line[256];
-
-    if (fgets(line, 250, reader) == NULL) {
-        fprintf(stderr, "\nWARNING: fgets return a NULL value");
-        return;
-    }
-
-    if (line[0] != 'P') {
-        fprintf(stderr, "read_pnm_header:PNM:magic P missing\n");
-        return;
-    }
-    format = atoi(line + 1);
-    if (format < 1 || format > 7) {
-        fprintf(stderr, "read_pnm_header:magic format %d invalid\n", format);
-        return;
-    }
-    ph->format = format;
-    ttype = end = have_wh = 0;
-
-    while (fgets(line, 250, reader)) {
-        if (*line == '#') {
-            continue;
-        }
-
-        s = line;
-
-        if (format == 7) {
-            s = skip_idf(s, idf);
-
-            if (s == NULL || *s == 0) {
-                return;
-            }
-
-            if (strcmp(idf, "ENDHDR") == 0) {
-                end = 1;
-                break;
-            }
-            if (strcmp(idf, "WIDTH") == 0) {
-                s = skip_int(s, &ph->width);
-                if (s == NULL || *s == 0) {
-                    return;
-                }
-
-                continue;
-            }
-            if (strcmp(idf, "HEIGHT") == 0) {
-                s = skip_int(s, &ph->height);
-                if (s == NULL || *s == 0) {
-                    return;
-                }
-
-                continue;
-            }
-            if (strcmp(idf, "DEPTH") == 0) {
-                s = skip_int(s, &ph->depth);
-                if (s == NULL || *s == 0) {
-                    return;
-                }
-
-                continue;
-            }
-            if (strcmp(idf, "MAXVAL") == 0) {
-                s = skip_int(s, &ph->maxval);
-                if (s == NULL || *s == 0) {
-                    return;
-                }
-
-                continue;
-            }
-            if (strcmp(idf, "TUPLTYPE") == 0) {
-                s = skip_idf(s, type);
-                if (s == NULL || *s == 0) {
-                    return;
-                }
-
-                if (strcmp(type, "BLACKANDWHITE") == 0) {
-                    ph->bw = 1;
-                    ttype = 1;
-                    continue;
-                }
-                if (strcmp(type, "GRAYSCALE") == 0) {
-                    ph->gray = 1;
-                    ttype = 1;
-                    continue;
-                }
-                if (strcmp(type, "GRAYSCALE_ALPHA") == 0) {
-                    ph->graya = 1;
-                    ttype = 1;
-                    continue;
-                }
-                if (strcmp(type, "RGB") == 0) {
-                    ph->rgb = 1;
-                    ttype = 1;
-                    continue;
-                }
-                if (strcmp(type, "RGB_ALPHA") == 0) {
-                    ph->rgba = 1;
-                    ttype = 1;
-                    continue;
-                }
-                fprintf(stderr, "read_pnm_header:unknown P7 TUPLTYPE %s\n", type);
-                return;
-            }
-            fprintf(stderr, "read_pnm_header:unknown P7 idf %s\n", idf);
-            return;
-        } /* if(format == 7) */
-
-        if (!have_wh) {
-            s = skip_int(s, &ph->width);
-
-            s = skip_int(s, &ph->height);
-
-            have_wh = 1;
-
-            if (format == 1 || format == 4) {
-                break;
-            }
-
-            continue;
-        }
-        if (format == 2 || format == 3 || format == 5 || format == 6) {
-            /* P2, P3, P5, P6: */
-            s = skip_int(s, &ph->maxval);
-
-            if (ph->maxval > 65535) {
-                return;
-            }
-        }
-        break;
-    }/* while(fgets( ) */
-    if (format == 2 || format == 3 || format > 4) {
-        if (ph->maxval < 1 || ph->maxval > 65535) {
-            return;
-        }
-    }
-    if (ph->width < 1 || ph->height < 1) {
-        return;
-    }
-
-    if (format == 7) {
-        if (!end) {
-            fprintf(stderr, "read_pnm_header:P7 without ENDHDR\n");
-            return;
-        }
-        if (ph->depth < 1 || ph->depth > 4) {
-            return;
-        }
-
-        if (ph->width && ph->height && ph->depth & ph->maxval && ttype) {
-            ph->ok = 1;
-        }
-    } else {
-        if (format != 1 && format != 4) {
-            if (ph->width && ph->height && ph->maxval) {
-                ph->ok = 1;
-            }
-        } else {
-            if (ph->width && ph->height) {
-                ph->ok = 1;
-            }
-            ph->maxval = 255;
-        }
-    }
-}
-
-static int has_prec(int val)
-{
-    if (val < 2) {
-        return 1;
-    }
-    if (val < 4) {
-        return 2;
-    }
-    if (val < 8) {
-        return 3;
-    }
-    if (val < 16) {
-        return 4;
-    }
-    if (val < 32) {
-        return 5;
-    }
-    if (val < 64) {
-        return 6;
-    }
-    if (val < 128) {
-        return 7;
-    }
-    if (val < 256) {
-        return 8;
-    }
-    if (val < 512) {
-        return 9;
-    }
-    if (val < 1024) {
-        return 10;
-    }
-    if (val < 2048) {
-        return 11;
-    }
-    if (val < 4096) {
-        return 12;
-    }
-    if (val < 8192) {
-        return 13;
-    }
-    if (val < 16384) {
-        return 14;
-    }
-    if (val < 32768) {
-        return 15;
-    }
-    return 16;
-}
-
-opj_image_t* pnmtoimage(const char *filename, opj_cparameters_t *parameters)
-{
-    int subsampling_dx = parameters->subsampling_dx;
-    int subsampling_dy = parameters->subsampling_dy;
-
-    FILE *fp = NULL;
-    int i, compno, numcomps, w, h, prec, format;
-    OPJ_COLOR_SPACE color_space;
-    opj_image_cmptparm_t cmptparm[4]; /* RGBA: max. 4 components */
-    opj_image_t * image = NULL;
-    struct pnm_header header_info;
-
-    if ((fp = fopen(filename, "rb")) == NULL) {
-        fprintf(stderr, "pnmtoimage:Failed to open %s for reading!\n", filename);
-        return NULL;
-    }
-    memset(&header_info, 0, sizeof(struct pnm_header));
-
-    read_pnm_header(fp, &header_info);
-
-    if (!header_info.ok) {
-        fclose(fp);
-        return NULL;
-    }
-
-    /* This limitation could be removed by making sure to use size_t below */
-    if (header_info.height != 0 &&
-            header_info.width > INT_MAX / header_info.height) {
-        fprintf(stderr, "pnmtoimage:Image %dx%d too big!\n",
-                header_info.width, header_info.height);
-        fclose(fp);
-        return NULL;
-    }
-
-    format = header_info.format;
-
-    switch (format) {
-    case 1: /* ascii bitmap */
-    case 4: /* raw bitmap */
-        numcomps = 1;
-        break;
-
-    case 2: /* ascii greymap */
-    case 5: /* raw greymap */
-        numcomps = 1;
-        break;
-
-    case 3: /* ascii pixmap */
-    case 6: /* raw pixmap */
-        numcomps = 3;
-        break;
-
-    case 7: /* arbitrary map */
-        numcomps = header_info.depth;
-        break;
-
-    default:
-        fclose(fp);
-        return NULL;
-    }
-    if (numcomps < 3) {
-        color_space = CLRSPC_GRAY;    /* GRAY, GRAYA */
-    } else {
-        color_space = CLRSPC_SRGB;    /* RGB, RGBA */
-    }
-
-    prec = has_prec(header_info.maxval);
-
-    if (prec < 8) {
-        prec = 8;
-    }
-
-    w = header_info.width;
-    h = header_info.height;
-    subsampling_dx = parameters->subsampling_dx;
-    subsampling_dy = parameters->subsampling_dy;
-
-    memset(&cmptparm[0], 0, numcomps * sizeof(opj_image_cmptparm_t));
-
-    for (i = 0; i < numcomps; i++) {
-        cmptparm[i].prec = prec;
-        cmptparm[i].bpp = prec;
-        cmptparm[i].sgnd = 0;
-        cmptparm[i].dx = subsampling_dx;
-        cmptparm[i].dy = subsampling_dy;
-        cmptparm[i].w = w;
-        cmptparm[i].h = h;
-    }
-    image = opj_image_create(numcomps, &cmptparm[0], color_space);
-
-    if (!image) {
-        fclose(fp);
-        return NULL;
-    }
-
-    /* set image offset and reference grid */
-    image->x0 = parameters->image_offset_x0;
-    image->y0 = parameters->image_offset_y0;
-    image->x1 = parameters->image_offset_x0 + (w - 1) * subsampling_dx + 1;
-    image->y1 = parameters->image_offset_y0 + (h - 1) * subsampling_dy + 1;
-
-    if ((format == 2) || (format == 3)) { /* ascii pixmap */
-        unsigned int index;
-
-        for (i = 0; i < w * h; i++) {
-            for (compno = 0; compno < numcomps; compno++) {
-                index = 0;
-                if (fscanf(fp, "%u", &index) != 1) {
-                    fprintf(stderr,
-                            "\nWARNING: fscanf return a number of element different from the expected.\n");
-                }
-
-                image->comps[compno].data[i] = (index * 255) / header_info.maxval;
-            }
-        }
-    } else if ((format == 5)
-               || (format == 6)
-               || ((format == 7)
-                   && (header_info.gray || header_info.graya
-                       || header_info.rgb || header_info.rgba))) { /* binary pixmap */
-        unsigned char c0, c1, one;
-
-        one = (prec < 9);
-
-        for (i = 0; i < w * h; i++) {
-            for (compno = 0; compno < numcomps; compno++) {
-                if (!fread(&c0, 1, 1, fp)) {
-                    fprintf(stderr,
-                            "\nError: fread return a number of element different from the expected.\n");
-                }
-                if (one) {
-                    image->comps[compno].data[i] = c0;
-                } else {
-                    if (!fread(&c1, 1, 1, fp)) {
-                        fprintf(stderr,
-                                "\nError: fread return a number of element different from the expected.\n");
-                    }
-                    /* netpbm: */
-                    image->comps[compno].data[i] = ((c0 << 8) | c1);
-                }
-            }
-        }
-    } else if (format == 1) { /* ascii bitmap */
-        for (i = 0; i < w * h; i++) {
-            unsigned int index;
-
-            if (fscanf(fp, "%u", &index) != 1) {
-                fprintf(stderr,
-                        "\nWARNING: fscanf return a number of element different from the expected.\n");
-            }
-
-            image->comps[0].data[i] = (index ? 0 : 255);
-        }
-    } else if (format == 4) {
-        int x, y, bit;
-        unsigned char uc;
-
-        i = 0;
-        for (y = 0; y < h; ++y) {
-            bit = -1;
-            uc = 0;
-
-            for (x = 0; x < w; ++x) {
-                if (bit == -1) {
-                    bit = 7;
-                    uc = (unsigned char)getc(fp);
-                }
-                image->comps[0].data[i] = (((uc >> bit) & 1) ? 0 : 255);
-                --bit;
-                ++i;
-            }
-        }
-    } else if ((format == 7 && header_info.bw)) { /*MONO*/
-        unsigned char uc;
-
-        for (i = 0; i < w * h; ++i) {
-            if (!fread(&uc, 1, 1, fp)) {
-                fprintf(stderr,
-                        "\nError: fread return a number of element different from the expected.\n");
-            }
-            image->comps[0].data[i] = (uc & 1) ? 0 : 255;
-        }
-    }
-    fclose(fp);
-
-    return image;
-}/* pnmtoimage() */
-
-int imagetopnm(opj_image_t * image, const char *outfile)
-{
-    int *red, *green, *blue, *alpha;
-    int wr, hr, max;
-    int i, compno, ncomp;
-    int adjustR, adjustG, adjustB, adjustA;
-    int fails, two, want_gray, has_alpha, triple;
-    int prec, v;
-    FILE *fdest = NULL;
-    const char *tmp = outfile;
-    char *destname;
-    alpha = NULL;
-    if ((prec = image->comps[0].prec) > 16) {
-        fprintf(stderr, "%s:%d:imagetopnm\n\tprecision %d is larger than 16"
-                "\n\t: refused.\n", __FILE__, __LINE__, prec);
-        return 1;
-    }
-    two = has_alpha = 0;
-    fails = 1;
-    ncomp = image->numcomps;
-
-    while (*tmp) {
-        ++tmp;
-    }
-    tmp -= 2;
-    want_gray = (*tmp == 'g' || *tmp == 'G');
-    ncomp = image->numcomps;
-
-    if (want_gray) {
-        ncomp = 1;
-    }
-
-    if (ncomp == 2 /* GRAYA */
-            || (ncomp > 2 /* RGB, RGBA */
-                && image->comps[0].dx == image->comps[1].dx
-                && image->comps[1].dx == image->comps[2].dx
-                && image->comps[0].dy == image->comps[1].dy
-                && image->comps[1].dy == image->comps[2].dy
-                && image->comps[0].prec == image->comps[1].prec
-                && image->comps[1].prec == image->comps[2].prec
-               )) {
-        fdest = fopen(outfile, "wb");
-
-        if (!fdest) {
-            fprintf(stderr, "ERROR -> failed to open %s for writing\n", outfile);
-            return fails;
-        }
-        two = (prec > 8);
-        triple = (ncomp > 2);
-        wr = image->comps[0].w;
-        hr = image->comps[0].h;
-        max = (1 << prec) - 1;
-        has_alpha = (ncomp == 4 || ncomp == 2);
-
-        red = image->comps[0].data;
-
-        if (triple) {
-            green = image->comps[1].data;
-            blue = image->comps[2].data;
-        } else {
-            green = blue = NULL;
-        }
-
-        if (has_alpha) {
-            const char *tt = (triple ? "RGB_ALPHA" : "GRAYSCALE_ALPHA");
-
-            fprintf(fdest, "P7\n# OpenJPEG-%s\nWIDTH %d\nHEIGHT %d\nDEPTH %d\n"
-                    "MAXVAL %d\nTUPLTYPE %s\nENDHDR\n", opj_version(),
-                    wr, hr, ncomp, max, tt);
-            alpha = image->comps[ncomp - 1].data;
-            adjustA = (image->comps[ncomp - 1].sgnd ?
-                       1 << (image->comps[ncomp - 1].prec - 1) : 0);
-        } else {
-            fprintf(fdest, "P6\n# OpenJPEG-%s\n%d %d\n%d\n",
-                    opj_version(), wr, hr, max);
-            adjustA = 0;
-        }
-        adjustR = (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
-
-        if (triple) {
-            adjustG = (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
-            adjustB = (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
-        } else {
-            adjustG = adjustB = 0;
-        }
-
-        for (i = 0; i < wr * hr; ++i) {
-            if (two) {
-                v = *red + adjustR;
-                ++red;
-                /* netpbm: */
-                fprintf(fdest, "%c%c", (unsigned char)(v >> 8), (unsigned char)v);
-
-                if (triple) {
-                    v = *green + adjustG;
-                    ++green;
-                    /* netpbm: */
-                    fprintf(fdest, "%c%c", (unsigned char)(v >> 8), (unsigned char)v);
-
-                    v =  *blue + adjustB;
-                    ++blue;
-                    /* netpbm: */
-                    fprintf(fdest, "%c%c", (unsigned char)(v >> 8), (unsigned char)v);
-
-                }/* if(triple) */
-
-                if (has_alpha) {
-                    v = *alpha + adjustA;
-                    ++alpha;
-                    /* netpbm: */
-                    fprintf(fdest, "%c%c", (unsigned char)(v >> 8), (unsigned char)v);
-                }
-                continue;
-
-            }  /* if(two) */
-
-            /* prec <= 8: */
-
-            fprintf(fdest, "%c", (unsigned char)*red++);
-            if (triple) {
-                fprintf(fdest, "%c%c", (unsigned char)*green++, (unsigned char)*blue++);
-            }
-
-            if (has_alpha) {
-                fprintf(fdest, "%c", (unsigned char)*alpha++);
-            }
-
-        } /* for(i */
-
-        fclose(fdest);
-        return 0;
-    }
-
-    /* YUV or MONO: */
-
-    if (image->numcomps > ncomp) {
-        fprintf(stderr, "WARNING -> [PGM file] Only the first component\n");
-        fprintf(stderr, "           is written to the file\n");
-    }
-    destname = (char*)malloc(strlen(outfile) + 8);
-
-    for (compno = 0; compno < ncomp; compno++) {
-        if (ncomp > 1) {
-            sprintf(destname, "%d.%s", compno, outfile);
-        } else {
-            sprintf(destname, "%s", outfile);
-        }
-
-        fdest = fopen(destname, "wb");
-        if (!fdest) {
-            fprintf(stderr, "ERROR -> failed to open %s for writing\n", destname);
-            free(destname);
-            return 1;
-        }
-        wr = image->comps[compno].w;
-        hr = image->comps[compno].h;
-        prec = image->comps[compno].prec;
-        max = (1 << prec) - 1;
-
-        fprintf(fdest, "P5\n#OpenJPEG-%s\n%d %d\n%d\n",
-                opj_version(), wr, hr, max);
-
-        red = image->comps[compno].data;
-        adjustR =
-            (image->comps[compno].sgnd ? 1 << (image->comps[compno].prec - 1) : 0);
-
-        if (prec > 8) {
-            for (i = 0; i < wr * hr; i++) {
-                v = *red + adjustR;
-                ++red;
-                /* netpbm: */
-                fprintf(fdest, "%c%c", (unsigned char)(v >> 8), (unsigned char)v);
-
-                if (has_alpha) {
-                    v = *alpha++;
-                    /* netpbm: */
-                    fprintf(fdest, "%c%c", (unsigned char)(v >> 8), (unsigned char)v);
-                }
-            }/* for(i */
-        } else { /* prec <= 8 */
-            for (i = 0; i < wr * hr; ++i) {
-                fprintf(fdest, "%c", (unsigned char)(*red + adjustR));
-                ++red;
-            }
-        }
-        fclose(fdest);
-    } /* for (compno */
-    free(destname);
-
-    return 0;
-}/* imagetopnm() */
-
-#ifdef OPJ_HAVE_LIBTIFF
-/* -->> -->> -->> -->>
-
-    TIFF IMAGE FORMAT
-
- <<-- <<-- <<-- <<-- */
-
-int imagetotif(opj_image_t * image, const char *outfile)
-{
-    int width, height, imgsize;
-    int bps, index, adjust, sgnd;
-    int ushift, dshift, has_alpha, force16;
-    TIFF *tif;
-    tdata_t buf;
-    tstrip_t strip;
-    tsize_t strip_size;
-
-    ushift = dshift = force16 = has_alpha = 0;
-    bps = image->comps[0].prec;
-
-    if (bps > 8 && bps < 16) {
-        ushift = 16 - bps;
-        dshift = bps - ushift;
-        bps = 16;
-        force16 = 1;
-    }
-
-    if (bps != 8 && bps != 16) {
-        fprintf(stderr, "imagetotif: Bits=%d, Only 8 and 16 bits implemented\n",
-                bps);
-        fprintf(stderr, "\tAborting\n");
-        return 1;
-    }
-    tif = TIFFOpen(outfile, "wb");
-
-    if (!tif) {
-        fprintf(stderr, "imagetotif:failed to open %s for writing\n", outfile);
-        return 1;
-    }
-    sgnd = image->comps[0].sgnd;
-    adjust = sgnd ? 1 << (image->comps[0].prec - 1) : 0;
-
-    if (image->numcomps >= 3
-            && image->comps[0].dx == image->comps[1].dx
-            && image->comps[1].dx == image->comps[2].dx
-            && image->comps[0].dy == image->comps[1].dy
-            && image->comps[1].dy == image->comps[2].dy
-            && image->comps[0].prec == image->comps[1].prec
-            && image->comps[1].prec == image->comps[2].prec) {
-        has_alpha = (image->numcomps == 4);
-
-        width   = image->comps[0].w;
-        height  = image->comps[0].h;
-        imgsize = width * height ;
-
-        TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width);
-        TIFFSetField(tif, TIFFTAG_IMAGELENGTH, height);
-        TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 3 + has_alpha);
-        TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, bps);
-        TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
-        TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
-        TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB);
-        TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1);
-        strip_size = TIFFStripSize(tif);
-        buf = _TIFFmalloc(strip_size);
-        index = 0;
-
-        for (strip = 0; strip < TIFFNumberOfStrips(tif); strip++) {
-            unsigned char *dat8;
-            tsize_t i, ssize, last_i = 0;
-            int step, restx;
-            ssize = TIFFStripSize(tif);
-            dat8 = (unsigned char*)buf;
-
-            if (bps == 8) {
-                step = 3 + has_alpha;
-                restx = step - 1;
-
-                for (i = 0; i < ssize - restx; i += step) {
-                    int r, g, b, a = 0;
-
-                    if (index < imgsize) {
-                        r = image->comps[0].data[index];
-                        g = image->comps[1].data[index];
-                        b = image->comps[2].data[index];
-                        if (has_alpha) {
-                            a = image->comps[3].data[index];
-                        }
-
-                        if (sgnd) {
-                            r += adjust;
-                            g += adjust;
-                            b += adjust;
-                            if (has_alpha) {
-                                a += adjust;
-                            }
-                        }
-                        dat8[i + 0] = r ;
-                        dat8[i + 1] = g ;
-                        dat8[i + 2] = b ;
-                        if (has_alpha) {
-                            dat8[i + 3] = a;
-                        }
-
-                        index++;
-                        last_i = i + step;
-                    } else {
-                        break;
-                    }
-                }/*for(i = 0;)*/
-
-                if (last_i < ssize) {
-                    for (i = last_i; i < ssize; i += step) {
-                        int r, g, b, a = 0;
-
-                        if (index < imgsize) {
-                            r = image->comps[0].data[index];
-                            g = image->comps[1].data[index];
-                            b = image->comps[2].data[index];
-                            if (has_alpha) {
-                                a = image->comps[3].data[index];
-                            }
-
-                            if (sgnd) {
-                                r += adjust;
-                                g += adjust;
-                                b += adjust;
-                                if (has_alpha) {
-                                    a += adjust;
-                                }
-                            }
-                            dat8[i + 0] = r ;
-                            if (i + 1 < ssize) {
-                                dat8[i + 1] = g ;
-                            }  else {
-                                break;
-                            }
-                            if (i + 2 < ssize) {
-                                dat8[i + 2] = b ;
-                            }  else {
-                                break;
-                            }
-                            if (has_alpha) {
-                                if (i + 3 < ssize) {
-                                    dat8[i + 3] = a ;
-                                }  else {
-                                    break;
-                                }
-                            }
-                            index++;
-                        } else {
-                            break;
-                        }
-                    }/*for(i)*/
-                }/*if(last_i < ssize)*/
-
-            }  /*if(bps == 8)*/
-            else if (bps == 16) {
-                step = 6 + has_alpha + has_alpha;
-                restx = step - 1;
-
-                for (i = 0; i < ssize - restx ; i += step) {
-                    int r, g, b, a = 0;
-
-                    if (index < imgsize) {
-                        r = image->comps[0].data[index];
-                        g = image->comps[1].data[index];
-                        b = image->comps[2].data[index];
-                        if (has_alpha) {
-                            a = image->comps[3].data[index];
-                        }
-
-                        if (sgnd) {
-                            r += adjust;
-                            g += adjust;
-                            b += adjust;
-                            if (has_alpha) {
-                                a += adjust;
-                            }
-                        }
-                        if (force16) {
-                            r = (r << ushift) + (r >> dshift);
-                            g = (g << ushift) + (g >> dshift);
-                            b = (b << ushift) + (b >> dshift);
-                            if (has_alpha) {
-                                a = (a << ushift) + (a >> dshift);
-                            }
-                        }
-                        dat8[i + 0] =  r; /*LSB*/
-                        dat8[i + 1] = (r >> 8); /*MSB*/
-                        dat8[i + 2] =  g;
-                        dat8[i + 3] = (g >> 8);
-                        dat8[i + 4] =  b;
-                        dat8[i + 5] = (b >> 8);
-                        if (has_alpha) {
-                            dat8[i + 6] =  a;
-                            dat8[i + 7] = (a >> 8);
-                        }
-                        index++;
-                        last_i = i + step;
-                    } else {
-                        break;
-                    }
-                }/*for(i = 0;)*/
-
-                if (last_i < ssize) {
-                    for (i = last_i ; i < ssize ; i += step) {
-                        int r, g, b, a = 0;
-
-                        if (index < imgsize) {
-                            r = image->comps[0].data[index];
-                            g = image->comps[1].data[index];
-                            b = image->comps[2].data[index];
-                            if (has_alpha) {
-                                a = image->comps[3].data[index];
-                            }
-
-                            if (sgnd) {
-                                r += adjust;
-                                g += adjust;
-                                b += adjust;
-                                if (has_alpha) {
-                                    a += adjust;
-                                }
-                            }
-                            if (force16) {
-                                r = (r << ushift) + (r >> dshift);
-                                g = (g << ushift) + (g >> dshift);
-                                b = (b << ushift) + (b >> dshift);
-                                if (has_alpha) {
-                                    a = (a << ushift) + (a >> dshift);
-                                }
-                            }
-                            dat8[i + 0] =  r; /*LSB*/
-                            if (i + 1 < ssize) {
-                                dat8[i + 1] = (r >> 8);
-                            } else {
-                                break;    /*MSB*/
-                            }
-                            if (i + 2 < ssize) {
-                                dat8[i + 2] =  g;
-                            }      else {
-                                break;
-                            }
-                            if (i + 3 < ssize) {
-                                dat8[i + 3] = (g >> 8);
-                            } else {
-                                break;
-                            }
-                            if (i + 4 < ssize) {
-                                dat8[i + 4] =  b;
-                            }      else {
-                                break;
-                            }
-                            if (i + 5 < ssize) {
-                                dat8[i + 5] = (b >> 8);
-                            } else {
-                                break;
-                            }
-
-                            if (has_alpha) {
-                                if (i + 6 < ssize) {
-                                    dat8[i + 6] = a;
-                                } else {
-                                    break;
-                                }
-                                if (i + 7 < ssize) {
-                                    dat8[i + 7] = (a >> 8);
-                                } else {
-                                    break;
-                                }
-                            }
-                            index++;
-                        } else {
-                            break;
-                        }
-                    }/*for(i)*/
-                }/*if(last_i < ssize)*/
-
-            }/*if(bps == 16)*/
-            (void)TIFFWriteEncodedStrip(tif, strip, (void*)buf, strip_size);
-        }/*for(strip = 0; )*/
-
-        _TIFFfree((void*)buf);
-        TIFFClose(tif);
-
-        return 0;
-    }/*RGB(A)*/
-
-    if (image->numcomps == 1 /* GRAY */
-            || (image->numcomps == 2    /* GRAY_ALPHA */
-                && image->comps[0].dx == image->comps[1].dx
-                && image->comps[0].dy == image->comps[1].dy
-                && image->comps[0].prec == image->comps[1].prec)) {
-        int step;
-
-        has_alpha = (image->numcomps == 2);
-
-        width   = image->comps[0].w;
-        height  = image->comps[0].h;
-        imgsize = width * height;
-
-        /* Set tags */
-        TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width);
-        TIFFSetField(tif, TIFFTAG_IMAGELENGTH, height);
-        TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1 + has_alpha);
-        TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, bps);
-        TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
-        TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
-        TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK);
-        TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1);
-
-        /* Get a buffer for the data */
-        strip_size = TIFFStripSize(tif);
-        buf = _TIFFmalloc(strip_size);
-        index = 0;
-
-        for (strip = 0; strip < TIFFNumberOfStrips(tif); strip++) {
-            unsigned char *dat8;
-            tsize_t i, ssize = TIFFStripSize(tif);
-            dat8 = (unsigned char*)buf;
-
-            if (bps == 8) {
-                step = 1 + has_alpha;
-
-                for (i = 0; i < ssize; i += step) {
-                    if (index < imgsize) {
-                        int r, a = 0;
-
-                        r = image->comps[0].data[index];
-                        if (has_alpha) {
-                            a = image->comps[1].data[index];
-                        }
-
-                        if (sgnd) {
-                            r += adjust;
-                            if (has_alpha) {
-                                a += adjust;
-                            }
-                        }
-                        dat8[i + 0] = r;
-                        if (has_alpha) {
-                            dat8[i + 1] = a;
-                        }
-                        index++;
-                    } else {
-                        break;
-                    }
-                }/*for(i )*/
-            }/*if(bps == 8*/
-            else if (bps == 16) {
-                step = 2 + has_alpha + has_alpha;
-
-                for (i = 0; i < ssize; i += step) {
-                    if (index < imgsize) {
-                        int r, a = 0;
-
-                        r = image->comps[0].data[index];
-                        if (has_alpha) {
-                            a = image->comps[1].data[index];
-                        }
-
-                        if (sgnd) {
-                            r += adjust;
-                            if (has_alpha) {
-                                a += adjust;
-                            }
-                        }
-                        if (force16) {
-                            r = (r << ushift) + (r >> dshift);
-                            if (has_alpha) {
-                                a = (a << ushift) + (a >> dshift);
-                            }
-                        }
-                        dat8[i + 0] = r; /*LSB*/
-                        dat8[i + 1] = r >> 8; /*MSB*/
-                        if (has_alpha) {
-                            dat8[i + 2] = a;
-                            dat8[i + 3] = a >> 8;
-                        }
-                        index++;
-                    }/*if(index < imgsize)*/
-                    else {
-                        break;
-                    }
-                }/*for(i )*/
-            }
-            (void)TIFFWriteEncodedStrip(tif, strip, (void*)buf, strip_size);
-        }/*for(strip*/
-
-        _TIFFfree(buf);
-        TIFFClose(tif);
-
-        return 0;
-    }
-
-    TIFFClose(tif);
-
-    fprintf(stderr, "imagetotif: Bad color format.\n"
-            "\tOnly RGB(A) and GRAY(A) has been implemented\n");
-    fprintf(stderr, "\tFOUND: numcomps(%d)\n\tAborting\n",
-            image->numcomps);
-
-    return 1;
-}/* imagetotif() */
-
-/*
- * libtiff/tif_getimage.c : 1,2,4,8,16 bitspersample accepted
- * CINEMA                 : 12 bit precision
-*/
-opj_image_t* tiftoimage(const char *filename, opj_cparameters_t *parameters)
-{
-    int subsampling_dx = parameters->subsampling_dx;
-    int subsampling_dy = parameters->subsampling_dy;
-    TIFF *tif;
-    tdata_t buf;
-    tstrip_t strip;
-    tsize_t strip_size;
-    int j, numcomps, w, h, index;
-    OPJ_COLOR_SPACE color_space;
-    opj_image_cmptparm_t cmptparm[4]; /* RGBA */
-    opj_image_t *image = NULL;
-    int imgsize = 0;
-    int has_alpha = 0;
-    unsigned short tiBps, tiPhoto, tiSf, tiSpp, tiPC;
-    unsigned int tiWidth, tiHeight;
-
-    tif = TIFFOpen(filename, "r");
-
-    if (!tif) {
-        fprintf(stderr, "tiftoimage:Failed to open %s for reading\n", filename);
-        return 0;
-    }
-    tiBps = tiPhoto = tiSf = tiSpp = tiPC = 0;
-    tiWidth = tiHeight = 0;
-
-    TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &tiWidth);
-    TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &tiHeight);
-    TIFFGetField(tif, TIFFTAG_BITSPERSAMPLE, &tiBps);
-    TIFFGetField(tif, TIFFTAG_SAMPLEFORMAT, &tiSf);
-    TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &tiSpp);
-    TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &tiPhoto);
-    TIFFGetField(tif, TIFFTAG_PLANARCONFIG, &tiPC);
-    w = tiWidth;
-    h = tiHeight;
-
-    {
-        unsigned short b = tiBps, p = tiPhoto;
-
-        if (tiBps != 8 && tiBps != 16 && tiBps != 12) {
-            b = 0;
-        }
-        if (tiPhoto != 1 && tiPhoto != 2) {
-            p = 0;
-        }
-
-        if (!b || !p) {
-            if (!b)
-                fprintf(stderr, "imagetotif: Bits=%d, Only 8 and 16 bits"
-                        " implemented\n", tiBps);
-            else if (!p)
-                fprintf(stderr, "tiftoimage: Bad color format %d.\n\tOnly RGB(A)"
-                        " and GRAY(A) has been implemented\n", (int) tiPhoto);
-
-            fprintf(stderr, "\tAborting\n");
-            TIFFClose(tif);
-
-            return NULL;
-        }
-    }
-    {/* From: tiff-4.0.x/libtiff/tif_getimage.c : */
-        uint16* sampleinfo;
-        uint16 extrasamples;
-
-        TIFFGetFieldDefaulted(tif, TIFFTAG_EXTRASAMPLES,
-                              &extrasamples, &sampleinfo);
-
-        if (extrasamples >= 1) {
-            switch (sampleinfo[0]) {
-            case EXTRASAMPLE_UNSPECIFIED:
-                /* Workaround for some images without correct info about alpha channel
-                */
-                if (tiSpp > 3) {
-                    has_alpha = 1;
-                }
-                break;
-
-            case EXTRASAMPLE_ASSOCALPHA: /* data pre-multiplied */
-            case EXTRASAMPLE_UNASSALPHA: /* data not pre-multiplied */
-                has_alpha = 1;
-                break;
-            }
-        } else /* extrasamples == 0 */
-            if (tiSpp == 4 || tiSpp == 2) {
-                has_alpha = 1;
-            }
-    }
-
-    /* initialize image components
-    */
-    memset(&cmptparm[0], 0, 4 * sizeof(opj_image_cmptparm_t));
-
-    if (tiPhoto == PHOTOMETRIC_RGB) { /* RGB(A) */
-        numcomps = 3 + has_alpha;
-        color_space = CLRSPC_SRGB;
-
-        for (j = 0; j < numcomps; j++) {
-            if (parameters->cp_cinema) {
-                cmptparm[j].prec = 12;
-                cmptparm[j].bpp = 12;
-            } else {
-                cmptparm[j].prec = tiBps;
-                cmptparm[j].bpp = tiBps;
-            }
-            cmptparm[j].dx = subsampling_dx;
-            cmptparm[j].dy = subsampling_dy;
-            cmptparm[j].w = w;
-            cmptparm[j].h = h;
-        }
-
-        image = opj_image_create(numcomps, &cmptparm[0], color_space);
-
-        if (!image) {
-            TIFFClose(tif);
-            return NULL;
-        }
-        /* set image offset and reference grid
-        */
-        image->x0 = parameters->image_offset_x0;
-        image->y0 = parameters->image_offset_y0;
-        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;
-
-        buf = _TIFFmalloc(TIFFStripSize(tif));
-
-        strip_size = TIFFStripSize(tif);
-        index = 0;
-        imgsize = image->comps[0].w * image->comps[0].h ;
-        /* Read the Image components
-        */
-        for (strip = 0; strip < TIFFNumberOfStrips(tif); strip++) {
-            unsigned char *dat8;
-            int step;
-            tsize_t i, ssize;
-            ssize = TIFFReadEncodedStrip(tif, strip, buf, strip_size);
-            dat8 = (unsigned char*)buf;
-
-            if (tiBps == 16) {
-                step = 6 + has_alpha + has_alpha;
-
-                for (i = 0; i < ssize; i += step) {
-                    if (index < imgsize) {
-                        image->comps[0].data[index] = (dat8[i + 1] << 8) | dat8[i + 0]; /* R */
-                        image->comps[1].data[index] = (dat8[i + 3] << 8) | dat8[i + 2]; /* G */
-                        image->comps[2].data[index] = (dat8[i + 5] << 8) | dat8[i + 4]; /* B */
-                        if (has_alpha) {
-                            image->comps[3].data[index] = (dat8[i + 7] << 8) | dat8[i + 6];
-                        }
-
-                        if (parameters->cp_cinema) {
-                            /* Rounding 16 to 12 bits
-                            */
-                            image->comps[0].data[index] =
-                                (image->comps[0].data[index] + 0x08) >> 4 ;
-                            image->comps[1].data[index] =
-                                (image->comps[1].data[index] + 0x08) >> 4 ;
-                            image->comps[2].data[index] =
-                                (image->comps[2].data[index] + 0x08) >> 4 ;
-                            if (has_alpha)
-                                image->comps[3].data[index] =
-                                    (image->comps[3].data[index] + 0x08) >> 4 ;
-                        }
-                        index++;
-                    } else {
-                        break;
-                    }
-                }/*for(i = 0)*/
-            }/*if(tiBps == 16)*/
-            else if (tiBps == 8) {
-                step = 3 + has_alpha;
-
-                for (i = 0; i < ssize; i += step) {
-                    if (index < imgsize) {
-                        image->comps[0].data[index] = dat8[i + 0]; /* R */
-                        image->comps[1].data[index] = dat8[i + 1]; /* G */
-                        image->comps[2].data[index] = dat8[i + 2]; /* B */
-                        if (has_alpha) {
-                            image->comps[3].data[index] = dat8[i + 3];
-                        }
-
-                        if (parameters->cp_cinema) {
-                            /* Rounding 8 to 12 bits
-                            */
-                            image->comps[0].data[index] = image->comps[0].data[index] << 4 ;
-                            image->comps[1].data[index] = image->comps[1].data[index] << 4 ;
-                            image->comps[2].data[index] = image->comps[2].data[index] << 4 ;
-                            if (has_alpha) {
-                                image->comps[3].data[index] = image->comps[3].data[index] << 4 ;
-                            }
-                        }
-                        index++;
-                    }/*if(index*/
-                    else {
-                        break;
-                    }
-                }/*for(i )*/
-            }/*if( tiBps == 8)*/
-            else if (tiBps == 12) { /* CINEMA file */
-                step = 9;
-
-                for (i = 0; i < ssize; i += step) {
-                    if ((index < imgsize) & (index + 1 < imgsize)) {
-                        image->comps[0].data[index]   = (dat8[i + 0] << 4)        | (dat8[i + 1] >> 4);
-                        image->comps[1].data[index]   = ((dat8[i + 1] & 0x0f) << 8) | dat8[i + 2];
-
-                        image->comps[2].data[index]   = (dat8[i + 3] << 4)         | (dat8[i + 4] >> 4);
-                        image->comps[0].data[index + 1] = ((dat8[i + 4] & 0x0f) << 8) | dat8[i + 5];
-
-                        image->comps[1].data[index + 1] = (dat8[i + 6] << 4)        |
-                                                          (dat8[i + 7] >> 4);
-                        image->comps[2].data[index + 1] = ((dat8[i + 7] & 0x0f) << 8) | dat8[i + 8];
-
-                        index += 2;
-                    } else {
-                        break;
-                    }
-                }/*for(i )*/
-            }
-        }/*for(strip = 0; )*/
-
-        _TIFFfree(buf);
-        TIFFClose(tif);
-
-        return image;
-    }/*RGB(A)*/
-
-    if (tiPhoto == PHOTOMETRIC_MINISBLACK) { /* GRAY(A) */
-        numcomps = 1 + has_alpha;
-        color_space = CLRSPC_GRAY;
-
-        for (j = 0; j < numcomps; ++j) {
-            cmptparm[j].prec = tiBps;
-            cmptparm[j].bpp = tiBps;
-            cmptparm[j].dx = subsampling_dx;
-            cmptparm[j].dy = subsampling_dy;
-            cmptparm[j].w = w;
-            cmptparm[j].h = h;
-        }
-        image = opj_image_create(numcomps, &cmptparm[0], color_space);
-
-        if (!image) {
-            TIFFClose(tif);
-            return NULL;
-        }
-        /* set image offset and reference grid
-        */
-        image->x0 = parameters->image_offset_x0;
-        image->y0 = parameters->image_offset_y0;
-        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;
-
-        buf = _TIFFmalloc(TIFFStripSize(tif));
-
-        strip_size = TIFFStripSize(tif);
-        index = 0;
-        imgsize = image->comps[0].w * image->comps[0].h ;
-        /* Read the Image components
-        */
-        for (strip = 0; strip < TIFFNumberOfStrips(tif); strip++) {
-            unsigned char *dat8;
-            tsize_t i, ssize;
-            int step;
-
-            ssize = TIFFReadEncodedStrip(tif, strip, buf, strip_size);
-            dat8 = (unsigned char*)buf;
-
-            if (tiBps == 16) {
-                step = 2 + has_alpha + has_alpha;
-
-                for (i = 0; i < ssize; i += step) {
-                    if (index < imgsize) {
-                        image->comps[0].data[index] = (dat8[i + 1] << 8) | dat8[i + 0];
-                        if (has_alpha) {
-                            image->comps[1].data[index] = (dat8[i + 3] << 8) | dat8[i + 2];
-                        }
-                        index++;
-                    } else {
-                        break;
-                    }
-                }/*for(i )*/
-            } else if (tiBps == 8) {
-                step = 1 + has_alpha;
-
-                for (i = 0; i < ssize; i += step) {
-                    if (index < imgsize) {
-                        image->comps[0].data[index] = dat8[i + 0];
-                        if (has_alpha) {
-                            image->comps[1].data[index] = dat8[i + 1];
-                        }
-                        index++;
-                    } else {
-                        break;
-                    }
-                }/*for(i )*/
-            }
-        }/*for(strip = 0;*/
-
-        _TIFFfree(buf);
-        TIFFClose(tif);
-
-    }/*GRAY(A)*/
-
-    return image;
-
-}/* tiftoimage() */
-
-#endif /* OPJ_HAVE_LIBTIFF */
-
-/* -->> -->> -->> -->>
-
-    RAW IMAGE FORMAT
-
- <<-- <<-- <<-- <<-- */
-
-opj_image_t* rawtoimage(const char *filename, opj_cparameters_t *parameters,
-                        raw_cparameters_t *raw_cp)
-{
-    int subsampling_dx = parameters->subsampling_dx;
-    int subsampling_dy = parameters->subsampling_dy;
-
-    FILE *f = NULL;
-    int i, compno, numcomps, w, h;
-    OPJ_COLOR_SPACE color_space;
-    opj_image_cmptparm_t *cmptparm;
-    opj_image_t * image = NULL;
-    unsigned short ch;
-
-    if ((!(raw_cp->rawWidth & raw_cp->rawHeight & raw_cp->rawComp &
-            raw_cp->rawBitDepth)) == 0) {
-        fprintf(stderr, "\nError: invalid raw image parameters\n");
-        fprintf(stderr, "Please use the Format option -F:\n");
-        fprintf(stderr,
-                "-F rawWidth,rawHeight,rawComp,rawBitDepth,s/u (Signed/Unsigned)\n");
-        fprintf(stderr, "Example: -i lena.raw -o lena.j2k -F 512,512,3,8,u\n");
-        fprintf(stderr, "Aborting\n");
-        return NULL;
-    }
-
-    f = fopen(filename, "rb");
-    if (!f) {
-        fprintf(stderr, "Failed to open %s for reading !!\n", filename);
-        fprintf(stderr, "Aborting\n");
-        return NULL;
-    }
-    numcomps = raw_cp->rawComp;
-    color_space = CLRSPC_SRGB;
-    w = raw_cp->rawWidth;
-    h = raw_cp->rawHeight;
-    cmptparm = (opj_image_cmptparm_t*) malloc(numcomps * sizeof(
-                   opj_image_cmptparm_t));
-
-    /* initialize image components */
-    memset(&cmptparm[0], 0, numcomps * sizeof(opj_image_cmptparm_t));
-    for (i = 0; i < numcomps; i++) {
-        cmptparm[i].prec = raw_cp->rawBitDepth;
-        cmptparm[i].bpp = raw_cp->rawBitDepth;
-        cmptparm[i].sgnd = raw_cp->rawSigned;
-        cmptparm[i].dx = subsampling_dx;
-        cmptparm[i].dy = subsampling_dy;
-        cmptparm[i].w = w;
-        cmptparm[i].h = h;
-    }
-    /* create the image */
-    image = opj_image_create(numcomps, &cmptparm[0], color_space);
-    if (!image) {
-        fclose(f);
-        return NULL;
-    }
-    /* set image offset and reference grid */
-    image->x0 = parameters->image_offset_x0;
-    image->y0 = parameters->image_offset_y0;
-    image->x1 = parameters->image_offset_x0 + (w - 1) * subsampling_dx + 1;
-    image->y1 = parameters->image_offset_y0 + (h - 1) * subsampling_dy + 1;
-
-    if (raw_cp->rawBitDepth <= 8) {
-        unsigned char value = 0;
-        for (compno = 0; compno < numcomps; compno++) {
-            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);
-                    return NULL;
-                }
-                image->comps[compno].data[i] = raw_cp->rawSigned ? (char)value : value;
-            }
-        }
-    } else if (raw_cp->rawBitDepth <= 16) {
-        unsigned short value;
-        for (compno = 0; compno < numcomps; compno++) {
-            for (i = 0; i < w * h; i++) {
-                unsigned char temp;
-                if (!fread(&temp, 1, 1, f)) {
-                    fprintf(stderr, "Error reading raw file. End of file probably reached.\n");
-                    fclose(f);
-                    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);
-                    return NULL;
-                }
-                value += temp;
-                image->comps[compno].data[i] = raw_cp->rawSigned ? (short)value : value;
-            }
-        }
-    } else {
-        fprintf(stderr,
-                "OpenJPEG cannot encode raw components with bit depth higher than 16 bits.\n");
-        fclose(f);
-        return NULL;
-    }
-
-    if (fread(&ch, 1, 1, f)) {
-        fprintf(stderr, "Warning. End of raw file not reached... processing anyway\n");
-    }
-    fclose(f);
-
-    return image;
-}
-
-int imagetoraw(opj_image_t * image, const char *outfile)
-{
-    FILE *rawFile = NULL;
-    size_t res;
-    int compno;
-    int w, h;
-    int line, row;
-    int *ptr;
-
-    if ((image->numcomps * image->x1 * image->y1) == 0) {
-        fprintf(stderr, "\nError: invalid raw image parameters\n");
-        return 1;
-    }
-
-    rawFile = fopen(outfile, "wb");
-    if (!rawFile) {
-        fprintf(stderr, "Failed to open %s for writing !!\n", outfile);
-        return 1;
-    }
-
-    fprintf(stdout, "Raw image characteristics: %d components\n", image->numcomps);
-
-    for (compno = 0; compno < image->numcomps; compno++) {
-        fprintf(stdout, "Component %d characteristics: %dx%dx%d %s\n", compno,
-                image->comps[compno].w,
-                image->comps[compno].h, image->comps[compno].prec,
-                image->comps[compno].sgnd == 1 ? "signed" : "unsigned");
-
-        w = image->comps[compno].w;
-        h = image->comps[compno].h;
-
-        if (image->comps[compno].prec <= 8) {
-            if (image->comps[compno].sgnd == 1) {
-                signed char curr;
-                int mask = (1 << image->comps[compno].prec) - 1;
-                ptr = image->comps[compno].data;
-                for (line = 0; line < h; line++) {
-                    for (row = 0; row < w; row++)    {
-                        curr = (signed char)(*ptr & mask);
-                        res = fwrite(&curr, sizeof(signed char), 1, rawFile);
-                        if (res < 1) {
-                            fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
-                            return 1;
-                        }
-                        ptr++;
-                    }
-                }
-            } else if (image->comps[compno].sgnd == 0) {
-                unsigned char curr;
-                int mask = (1 << image->comps[compno].prec) - 1;
-                ptr = image->comps[compno].data;
-                for (line = 0; line < h; line++) {
-                    for (row = 0; row < w; row++)    {
-                        curr = (unsigned char)(*ptr & mask);
-                        res = fwrite(&curr, sizeof(unsigned char), 1, rawFile);
-                        if (res < 1) {
-                            fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
-                            return 1;
-                        }
-                        ptr++;
-                    }
-                }
-            }
-        } else if (image->comps[compno].prec <= 16) {
-            if (image->comps[compno].sgnd == 1) {
-                signed short int curr;
-                int mask = (1 << image->comps[compno].prec) - 1;
-                ptr = image->comps[compno].data;
-                for (line = 0; line < h; line++) {
-                    for (row = 0; row < w; row++)    {
-                        unsigned char temp;
-                        curr = (signed short int)(*ptr & mask);
-                        temp = (unsigned char)(curr >> 8);
-                        res = fwrite(&temp, 1, 1, rawFile);
-                        if (res < 1) {
-                            fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
-                            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);
-                            return 1;
-                        }
-                        ptr++;
-                    }
-                }
-            } else if (image->comps[compno].sgnd == 0) {
-                unsigned short int curr;
-                int mask = (1 << image->comps[compno].prec) - 1;
-                ptr = image->comps[compno].data;
-                for (line = 0; line < h; line++) {
-                    for (row = 0; row < w; row++)    {
-                        unsigned char temp;
-                        curr = (unsigned short int)(*ptr & mask);
-                        temp = (unsigned char)(curr >> 8);
-                        res = fwrite(&temp, 1, 1, rawFile);
-                        if (res < 1) {
-                            fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
-                            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);
-                            return 1;
-                        }
-                        ptr++;
-                    }
-                }
-            }
-        } else if (image->comps[compno].prec <= 32) {
-            fprintf(stderr, "More than 16 bits per component no handled yet\n");
-            return 1;
-        } else {
-            fprintf(stderr, "Error: invalid precision: %d\n", image->comps[compno].prec);
-            return 1;
-        }
-    }
-    fclose(rawFile);
-    return 0;
-}
-
-#ifdef OPJ_HAVE_LIBPNG
-
-#define PNG_MAGIC "\x89PNG\x0d\x0a\x1a\x0a"
-#define MAGIC_SIZE 8
-/* PNG allows bits per sample: 1, 2, 4, 8, 16 */
-
-opj_image_t *pngtoimage(const char *read_idf, opj_cparameters_t * params)
-{
-    png_structp  png;
-    png_infop    info;
-    double gamma, display_exponent;
-    int bit_depth, interlace_type, compression_type, filter_type;
-    int unit;
-    png_uint_32 resx, resy;
-    unsigned int i, j;
-    png_uint_32  width, height;
-    int color_type, has_alpha, is16;
-    unsigned char *s;
-    FILE *reader;
-    unsigned char **rows;
-    /* j2k: */
-    opj_image_t *image;
-    opj_image_cmptparm_t cmptparm[4];
-    int sub_dx, sub_dy;
-    unsigned int nr_comp;
-    int *r, *g, *b, *a;
-    unsigned char sigbuf[8];
-
-    if ((reader = fopen(read_idf, "rb")) == NULL) {
-        fprintf(stderr, "pngtoimage: can not open %s\n", read_idf);
-        return NULL;
-    }
-    image = NULL;
-    png = NULL;
-    rows = NULL;
-
-    if (fread(sigbuf, 1, MAGIC_SIZE, reader) != MAGIC_SIZE
-            || memcmp(sigbuf, PNG_MAGIC, MAGIC_SIZE) != 0) {
-        fprintf(stderr, "pngtoimage: %s is no valid PNG file\n", read_idf);
-        goto fin;
-    }
-    /* libpng-VERSION/example.c:
-     * PC : screen_gamma = 2.2;
-     * Mac: screen_gamma = 1.7 or 1.0;
-    */
-    display_exponent = 2.2;
-
-    if ((png = png_create_read_struct(PNG_LIBPNG_VER_STRING,
-                                      NULL, NULL, NULL)) == NULL) {
-        goto fin;
-    }
-    if ((info = png_create_info_struct(png)) == NULL) {
-        goto fin;
-    }
-
-    if (setjmp(png_jmpbuf(png))) {
-        goto fin;
-    }
-
-    png_init_io(png, reader);
-    png_set_sig_bytes(png, MAGIC_SIZE);
-
-    png_read_info(png, info);
-
-    if (png_get_IHDR(png, info, &width, &height,
-                     &bit_depth, &color_type, &interlace_type,
-                     &compression_type, &filter_type) == 0) {
-        goto fin;
-    }
-
-    /* png_set_expand():
-     * expand paletted images to RGB, expand grayscale images of
-     * less than 8-bit depth to 8-bit depth, and expand tRNS chunks
-     * to alpha channels.
-    */
-    if (color_type == PNG_COLOR_TYPE_PALETTE) {
-        png_set_expand(png);
-    } else if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) {
-        png_set_expand(png);
-    }
-
-    if (png_get_valid(png, info, PNG_INFO_tRNS)) {
-        png_set_expand(png);
-    }
-
-    is16 = (bit_depth == 16);
-
-    /* GRAY => RGB; GRAY_ALPHA => RGBA
-    */
-    if (color_type == PNG_COLOR_TYPE_GRAY
-            || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) {
-        png_set_gray_to_rgb(png);
-        color_type =
-            (color_type == PNG_COLOR_TYPE_GRAY ? PNG_COLOR_TYPE_RGB :
-             PNG_COLOR_TYPE_RGB_ALPHA);
-    }
-    if (!png_get_gAMA(png, info, &gamma)) {
-        gamma = 0.45455;
-    }
-
-    png_set_gamma(png, display_exponent, gamma);
-
-    png_read_update_info(png, info);
-
-    png_get_pHYs(png, info, &resx, &resy, &unit);
-
-    color_type = png_get_color_type(png, info);
-
-    has_alpha = (color_type == PNG_COLOR_TYPE_RGB_ALPHA);
-
-    nr_comp = 3 + has_alpha;
-
-    bit_depth = png_get_bit_depth(png, info);
-
-    rows = (unsigned char**)calloc(height + 1, sizeof(unsigned char*));
-    for (i = 0; i < height; ++i) {
-        rows[i] = (unsigned char*)malloc(png_get_rowbytes(png, info));
-    }
-
-    png_read_image(png, rows);
-
-    memset(&cmptparm, 0, 4 * sizeof(opj_image_cmptparm_t));
-
-    sub_dx = params->subsampling_dx;
-    sub_dy = params->subsampling_dy;
-
-    for (i = 0; i < nr_comp; ++i) {
-        cmptparm[i].prec = bit_depth;
-        /* bits_per_pixel: 8 or 16 */
-        cmptparm[i].bpp = bit_depth;
-        cmptparm[i].sgnd = 0;
-        cmptparm[i].dx = sub_dx;
-        cmptparm[i].dy = sub_dy;
-        cmptparm[i].w = width;
-        cmptparm[i].h = height;
-    }
-
-    image = opj_image_create(nr_comp, &cmptparm[0], CLRSPC_SRGB);
-
-    if (image == NULL) {
-        goto fin;
-    }
-
-    image->x0 = params->image_offset_x0;
-    image->y0 = params->image_offset_y0;
-    image->x1 = image->x0 + (width  - 1) * sub_dx + 1 + image->x0;
-    image->y1 = image->y0 + (height - 1) * sub_dy + 1 + image->y0;
-
-    r = image->comps[0].data;
-    g = image->comps[1].data;
-    b = image->comps[2].data;
-    a = image->comps[3].data;
-
-    for (i = 0; i < height; ++i) {
-        s = rows[i];
-
-        for (j = 0; j < width; ++j) {
-            if (is16) {
-                *r++ = s[0] << 8 | s[1];
-                s += 2;
-
-                *g++ = s[0] << 8 | s[1];
-                s += 2;
-
-                *b++ = s[0] << 8 | s[1];
-                s += 2;
-
-                if (has_alpha) {
-                    *a++ = s[0] << 8 | s[1];
-                    s += 2;
-                }
-
-                continue;
-            }
-            *r++ = *s++;
-            *g++ = *s++;
-            *b++ = *s++;
-
-            if (has_alpha) {
-                *a++ = *s++;
-            }
-        }
-    }
-fin:
-    if (rows) {
-        for (i = 0; i < height; ++i) {
-            free(rows[i]);
-        }
-        free(rows);
-    }
-    if (png) {
-        png_destroy_read_struct(&png, &info, NULL);
-    }
-
-    fclose(reader);
-
-    return image;
-
-}/* pngtoimage() */
-
-int imagetopng(opj_image_t * image, const char *write_idf)
-{
-    FILE *writer;
-    png_structp png;
-    png_infop info;
-    int *red, *green, *blue, *alpha;
-    unsigned char *row_buf, *d;
-    int has_alpha, width, height, nr_comp, color_type;
-    int adjustR, adjustG, adjustB, adjustA, x, y, fails;
-    int prec, ushift, dshift, is16, force16, force8;
-    unsigned short mask = 0xffff;
-    png_color_8 sig_bit;
-
-    is16 = force16 = force8 = ushift = dshift = 0;
-    fails = 1;
-    prec = image->comps[0].prec;
-    nr_comp = image->numcomps;
-
-    if (prec > 8 && prec < 16) {
-        ushift = 16 - prec;
-        dshift = prec - ushift;
-        prec = 16;
-        force16 = 1;
-    } else if (prec < 8 && nr_comp > 1) { /* GRAY_ALPHA, RGB, RGB_ALPHA */
-        ushift = 8 - prec;
-        dshift = 8 - ushift;
-        prec = 8;
-        force8 = 1;
-    }
-
-    if (prec != 1 && prec != 2 && prec != 4 && prec != 8 && prec != 16) {
-        fprintf(stderr, "imagetopng: can not create %s"
-                "\n\twrong bit_depth %d\n", write_idf, prec);
-        return fails;
-    }
-    writer = fopen(write_idf, "wb");
-
-    if (writer == NULL) {
-        return fails;
-    }
-
-    info = NULL;
-    has_alpha = 0;
-
-    /* Create and initialize the png_struct with the desired error handler
-     * functions.  If you want to use the default stderr and longjump method,
-     * you can supply NULL for the last three parameters.  We also check that
-     * the library version is compatible with the one used at compile time,
-     * in case we are using dynamically linked libraries.  REQUIRED.
-    */
-    png = png_create_write_struct(PNG_LIBPNG_VER_STRING,
-                                  NULL, NULL, NULL);
-    /*png_voidp user_error_ptr, user_error_fn, user_warning_fn); */
-
-    if (png == NULL) {
-        goto fin;
-    }
-
-    /* Allocate/initialize the image information data.  REQUIRED
-    */
-    info = png_create_info_struct(png);
-
-    if (info == NULL) {
-        goto fin;
-    }
-
-    /* Set error handling.  REQUIRED if you are not supplying your own
-     * error handling functions in the png_create_write_struct() call.
-    */
-    if (setjmp(png_jmpbuf(png))) {
-        goto fin;
-    }
-
-    /* I/O initialization functions is REQUIRED
-    */
-    png_init_io(png, writer);
-
-    /* Set the image information here.  Width and height are up to 2^31,
-     * bit_depth is one of 1, 2, 4, 8, or 16, but valid values also depend on
-     * the color_type selected. color_type is one of PNG_COLOR_TYPE_GRAY,
-     * PNG_COLOR_TYPE_GRAY_ALPHA, PNG_COLOR_TYPE_PALETTE, PNG_COLOR_TYPE_RGB,
-     * or PNG_COLOR_TYPE_RGB_ALPHA.  interlace is either PNG_INTERLACE_NONE or
-     * PNG_INTERLACE_ADAM7, and the compression_type and filter_type MUST
-     * currently be PNG_COMPRESSION_TYPE_BASE and PNG_FILTER_TYPE_BASE.
-     * REQUIRED
-     *
-     * ERRORS:
-     *
-     * color_type == PNG_COLOR_TYPE_PALETTE && bit_depth > 8
-     * color_type == PNG_COLOR_TYPE_RGB && bit_depth < 8
-     * color_type == PNG_COLOR_TYPE_GRAY_ALPHA && bit_depth < 8
-     * color_type == PNG_COLOR_TYPE_RGB_ALPHA) && bit_depth < 8
-     *
-    */
-    png_set_compression_level(png, Z_BEST_COMPRESSION);
-
-    if (prec == 16) {
-        mask = 0xffff;
-    } else if (prec == 8) {
-        mask = 0x00ff;
-    } else if (prec == 4) {
-        mask = 0x000f;
-    } else if (prec == 2) {
-        mask = 0x0003;
-    } else if (prec == 1) {
-        mask = 0x0001;
-    }
-
-    if (nr_comp >= 3
-            && image->comps[0].dx == image->comps[1].dx
-            && image->comps[1].dx == image->comps[2].dx
-            && image->comps[0].dy == image->comps[1].dy
-            && image->comps[1].dy == image->comps[2].dy
-            && image->comps[0].prec == image->comps[1].prec
-            && image->comps[1].prec == image->comps[2].prec) {
-        int v;
-
-        has_alpha = (nr_comp > 3);
-
-        is16 = (prec == 16);
-
-        width = image->comps[0].w;
-        height = image->comps[0].h;
-
-        red = image->comps[0].data;
-        green = image->comps[1].data;
-        blue = image->comps[2].data;
-
-        sig_bit.red = sig_bit.green = sig_bit.blue = prec;
-
-        if (has_alpha) {
-            sig_bit.alpha = prec;
-            alpha = image->comps[3].data;
-            color_type = PNG_COLOR_TYPE_RGB_ALPHA;
-            adjustA = (image->comps[3].sgnd ? 1 << (image->comps[3].prec - 1) : 0);
-        } else {
-            sig_bit.alpha = 0;
-            alpha = NULL;
-            color_type = PNG_COLOR_TYPE_RGB;
-            adjustA = 0;
-        }
-        png_set_sBIT(png, info, &sig_bit);
-
-        png_set_IHDR(png, info, width, height, prec,
-                     color_type,
-                     PNG_INTERLACE_NONE,
-                     PNG_COMPRESSION_TYPE_BASE,  PNG_FILTER_TYPE_BASE);
-        /*=============================*/
-        png_write_info(png, info);
-        /*=============================*/
-        if (prec < 8) {
-            png_set_packing(png);
-        }
-        adjustR = (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
-        adjustG = (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
-        adjustB = (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
-
-        row_buf = (unsigned char*)malloc(width * nr_comp * 2);
-
-        for (y = 0; y < height; ++y) {
-            d = row_buf;
-
-            for (x = 0; x < width; ++x) {
-                if (is16) {
-                    v = *red + adjustR;
-                    ++red;
-
-                    if (force16) {
-                        v = (v << ushift) + (v >> dshift);
-                    }
-
-                    *d++ = (unsigned char)(v >> 8);
-                    *d++ = (unsigned char)v;
-
-                    v = *green + adjustG;
-                    ++green;
-
-                    if (force16) {
-                        v = (v << ushift) + (v >> dshift);
-                    }
-
-                    *d++ = (unsigned char)(v >> 8);
-                    *d++ = (unsigned char)v;
-
-                    v =  *blue + adjustB;
-                    ++blue;
-
-                    if (force16) {
-                        v = (v << ushift) + (v >> dshift);
-                    }
-
-                    *d++ = (unsigned char)(v >> 8);
-                    *d++ = (unsigned char)v;
-
-                    if (has_alpha) {
-                        v = *alpha + adjustA;
-                        ++alpha;
-
-                        if (force16) {
-                            v = (v << ushift) + (v >> dshift);
-                        }
-
-                        *d++ = (unsigned char)(v >> 8);
-                        *d++ = (unsigned char)v;
-                    }
-                    continue;
-                }/* if(is16) */
-
-                v = *red + adjustR;
-                ++red;
-
-                if (force8) {
-                    v = (v << ushift) + (v >> dshift);
-                }
-
-                *d++ = (unsigned char)(v & mask);
-
-                v = *green + adjustG;
-                ++green;
-
-                if (force8) {
-                    v = (v << ushift) + (v >> dshift);
-                }
-
-                *d++ = (unsigned char)(v & mask);
-
-                v = *blue + adjustB;
-                ++blue;
-
-                if (force8) {
-                    v = (v << ushift) + (v >> dshift);
-                }
-
-                *d++ = (unsigned char)(v & mask);
-
-                if (has_alpha) {
-                    v = *alpha + adjustA;
-                    ++alpha;
-
-                    if (force8) {
-                        v = (v << ushift) + (v >> dshift);
-                    }
-
-                    *d++ = (unsigned char)(v & mask);
-                }
-            }  /* for(x) */
-
-            png_write_row(png, row_buf);
-
-        } /* for(y) */
-        free(row_buf);
-
-    }/* nr_comp >= 3 */
-    else if (nr_comp == 1 /* GRAY */
-             || (nr_comp == 2    /* GRAY_ALPHA */
-                 && image->comps[0].dx == image->comps[1].dx
-                 && image->comps[0].dy == image->comps[1].dy
-                 && image->comps[0].prec == image->comps[1].prec)) {
-        int v;
-
-        red = image->comps[0].data;
-
-        sig_bit.gray = prec;
-        sig_bit.red = sig_bit.green = sig_bit.blue = sig_bit.alpha = 0;
-        alpha = NULL;
-        adjustA = 0;
-        color_type = PNG_COLOR_TYPE_GRAY;
-
-        if (nr_comp == 2) {
-            has_alpha = 1;
-            sig_bit.alpha = prec;
-            alpha = image->comps[1].data;
-            color_type = PNG_COLOR_TYPE_GRAY_ALPHA;
-            adjustA = (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
-        }
-        width = image->comps[0].w;
-        height = image->comps[0].h;
-
-        png_set_IHDR(png, info, width, height, sig_bit.gray,
-                     color_type,
-                     PNG_INTERLACE_NONE,
-                     PNG_COMPRESSION_TYPE_BASE,  PNG_FILTER_TYPE_BASE);
-
-        png_set_sBIT(png, info, &sig_bit);
-        /*=============================*/
-        png_write_info(png, info);
-        /*=============================*/
-        adjustR = (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
-
-        if (prec < 8) {
-            png_set_packing(png);
-        }
-
-        if (prec > 8) {
-            row_buf = (unsigned char*)
-                      malloc(width * nr_comp * sizeof(unsigned short));
-
-            for (y = 0; y < height; ++y) {
-                d = row_buf;
-
-                for (x = 0; x < width; ++x) {
-                    v = *red + adjustR;
-                    ++red;
-
-                    if (force16) {
-                        v = (v << ushift) + (v >> dshift);
-                    }
-
-                    *d++ = (unsigned char)(v >> 8);
-                    *d++ = (unsigned char)v;
-
-                    if (has_alpha) {
-                        v = *alpha++;
-
-                        if (force16) {
-                            v = (v << ushift) + (v >> dshift);
-                        }
-
-                        *d++ = (unsigned char)(v >> 8);
-                        *d++ = (unsigned char)v;
-                    }
-                }/* for(x) */
-                png_write_row(png, row_buf);
-
-            }  /* for(y) */
-            free(row_buf);
-        } else { /* prec <= 8 */
-            row_buf = (unsigned char*)calloc(width, nr_comp * 2);
-
-            for (y = 0; y < height; ++y) {
-                d = row_buf;
-
-                for (x = 0; x < width; ++x) {
-                    v = *red + adjustR;
-                    ++red;
-
-                    if (force8) {
-                        v = (v << ushift) + (v >> dshift);
-                    }
-
-                    *d++ = (unsigned char)(v & mask);
-
-                    if (has_alpha) {
-                        v = *alpha + adjustA;
-                        ++alpha;
-
-                        if (force8) {
-                            v = (v << ushift) + (v >> dshift);
-                        }
-
-                        *d++ = (unsigned char)(v & mask);
-                    }
-                }/* for(x) */
-
-                png_write_row(png, row_buf);
-
-            }  /* for(y) */
-            free(row_buf);
-        }
-    } else {
-        fprintf(stderr, "imagetopng: can not create %s\n", write_idf);
-        goto fin;
-    }
-    png_write_end(png, info);
-
-    fails = 0;
-
-fin:
-
-    if (png) {
-        png_destroy_write_struct(&png, &info);
-    }
-    fclose(writer);
-
-    if (fails) {
-        remove(write_idf);
-    }
-
-    return fails;
-}/* imagetopng() */
-#endif /* OPJ_HAVE_LIBPNG */
diff --git a/src/bin/jpwl/convert.h b/src/bin/jpwl/convert.h
deleted file mode 100644 (file)
index 7f1a5bc..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef __J2K_CONVERT_H
-#define __J2K_CONVERT_H
-
-/**@name RAW image encoding parameters */
-/*@{*/
-typedef struct raw_cparameters {
-    /** width of the raw image */
-    int rawWidth;
-    /** height of the raw image */
-    int rawHeight;
-    /** components of the raw image */
-    int rawComp;
-    /** bit depth of the raw image */
-    int rawBitDepth;
-    /** signed/unsigned raw image */
-    opj_bool rawSigned;
-    /*@}*/
-} raw_cparameters_t;
-
-/* TGA conversion */
-opj_image_t* tgatoimage(const char *filename, opj_cparameters_t *parameters);
-int imagetotga(opj_image_t * image, const char *outfile);
-
-/* BMP conversion */
-opj_image_t* bmptoimage(const char *filename, opj_cparameters_t *parameters);
-int imagetobmp(opj_image_t *image, const char *outfile);
-
-/* TIFF conversion*/
-opj_image_t* tiftoimage(const char *filename, opj_cparameters_t *parameters);
-int imagetotif(opj_image_t *image, const char *outfile);
-/**
-Load a single image component encoded in PGX file format
-@param filename Name of the PGX file to load
-@param parameters *List ?*
-@return Returns a greyscale image if successful, returns NULL otherwise
-*/
-opj_image_t* pgxtoimage(const char *filename, opj_cparameters_t *parameters);
-int imagetopgx(opj_image_t *image, const char *outfile);
-
-opj_image_t* pnmtoimage(const char *filename, opj_cparameters_t *parameters);
-int imagetopnm(opj_image_t *image, const char *outfile);
-
-/* RAW conversion */
-int imagetoraw(opj_image_t * image, const char *outfile);
-opj_image_t* rawtoimage(const char *filename, opj_cparameters_t *parameters,
-                        raw_cparameters_t *raw_cp);
-
-/* PNG conversion*/
-extern int imagetopng(opj_image_t *image, const char *write_idf);
-extern opj_image_t* pngtoimage(const char *filename,
-                               opj_cparameters_t *parameters);
-
-#endif /* __J2K_CONVERT_H */
-
diff --git a/src/bin/jpwl/index.c b/src/bin/jpwl/index.c
deleted file mode 100644 (file)
index 6c6c8fc..0000000
+++ /dev/null
@@ -1,454 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include "openjpeg.h"
-#include "index.h"
-
-/* ------------------------------------------------------------------------------------ */
-
-/**
-Write a structured index to a file
-@param cstr_info Codestream information
-@param index Index filename
-@return Returns 0 if successful, returns 1 otherwise
-*/
-int write_index_file(opj_codestream_info_t *cstr_info, char *index)
-{
-    int tileno, compno, layno, resno, precno, pack_nb, x, y;
-    FILE *stream = NULL;
-    double total_disto = 0;
-    /* UniPG>> */
-    int tilepartno;
-    char disto_on, numpix_on;
-
-#ifdef USE_JPWL
-    if (!strcmp(index, JPWL_PRIVATEINDEX_NAME)) {
-        return 0;
-    }
-#endif /* USE_JPWL */
-    /* <<UniPG */
-
-    if (!cstr_info) {
-        return 1;
-    }
-
-    stream = fopen(index, "w");
-    if (!stream) {
-        fprintf(stderr, "failed to open index file [%s] for writing\n", index);
-        return 1;
-    }
-
-    if (cstr_info->tile[0].distotile) {
-        disto_on = 1;
-    } else {
-        disto_on = 0;
-    }
-
-    if (cstr_info->tile[0].numpix) {
-        numpix_on = 1;
-    } else {
-        numpix_on = 0;
-    }
-
-    fprintf(stream, "%d %d\n", cstr_info->image_w, cstr_info->image_h);
-    fprintf(stream, "%d\n", cstr_info->prog);
-    fprintf(stream, "%d %d\n", cstr_info->tile_x, cstr_info->tile_y);
-    fprintf(stream, "%d %d\n", cstr_info->tw, cstr_info->th);
-    fprintf(stream, "%d\n", cstr_info->numcomps);
-    fprintf(stream, "%d\n", cstr_info->numlayers);
-    fprintf(stream, "%d\n", cstr_info->numdecompos[0]); /* based on component 0 */
-
-    for (resno = cstr_info->numdecompos[0]; resno >= 0; resno--) {
-        fprintf(stream, "[%d,%d] ",
-                (1 << cstr_info->tile[0].pdx[resno]),
-                (1 << cstr_info->tile[0].pdx[resno]));    /* based on tile 0 and component 0 */
-    }
-
-    fprintf(stream, "\n");
-    /* UniPG>> */
-    fprintf(stream, "%d\n", cstr_info->main_head_start);
-    /* <<UniPG */
-    fprintf(stream, "%d\n", cstr_info->main_head_end);
-    fprintf(stream, "%d\n", cstr_info->codestream_size);
-
-    fprintf(stream, "\nINFO ON TILES\n");
-    fprintf(stream, "tileno start_pos  end_hd  end_tile   nbparts");
-    if (disto_on) {
-        fprintf(stream, "         disto");
-    }
-    if (numpix_on) {
-        fprintf(stream, "     nbpix");
-    }
-    if (disto_on && numpix_on) {
-        fprintf(stream, "  disto/nbpix");
-    }
-    fprintf(stream, "\n");
-
-    for (tileno = 0; tileno < cstr_info->tw * cstr_info->th; tileno++) {
-        fprintf(stream, "%4d %9d %9d %9d %9d",
-                cstr_info->tile[tileno].tileno,
-                cstr_info->tile[tileno].start_pos,
-                cstr_info->tile[tileno].end_header,
-                cstr_info->tile[tileno].end_pos,
-                cstr_info->tile[tileno].num_tps);
-        if (disto_on) {
-            fprintf(stream, " %9e", cstr_info->tile[tileno].distotile);
-        }
-        if (numpix_on) {
-            fprintf(stream, " %9d", cstr_info->tile[tileno].numpix);
-        }
-        if (disto_on && numpix_on) {
-            fprintf(stream, " %9e", cstr_info->tile[tileno].distotile /
-                    cstr_info->tile[tileno].numpix);
-        }
-        fprintf(stream, "\n");
-    }
-
-    for (tileno = 0; tileno < cstr_info->tw * cstr_info->th; tileno++) {
-        int start_pos, end_ph_pos, end_pos;
-        double disto = 0;
-        int max_numdecompos = 0;
-        pack_nb = 0;
-
-        for (compno = 0; compno < cstr_info->numcomps; compno++) {
-            if (max_numdecompos < cstr_info->numdecompos[compno]) {
-                max_numdecompos = cstr_info->numdecompos[compno];
-            }
-        }
-
-        fprintf(stream, "\nTILE %d DETAILS\n", tileno);
-        fprintf(stream,
-                "part_nb tileno  start_pack num_packs  start_pos end_tph_pos   end_pos\n");
-        for (tilepartno = 0; tilepartno < cstr_info->tile[tileno].num_tps; tilepartno++)
-            fprintf(stream, "%4d %9d   %9d %9d  %9d %11d %9d\n",
-                    tilepartno, tileno,
-                    cstr_info->tile[tileno].tp[tilepartno].tp_start_pack,
-                    cstr_info->tile[tileno].tp[tilepartno].tp_numpacks,
-                    cstr_info->tile[tileno].tp[tilepartno].tp_start_pos,
-                    cstr_info->tile[tileno].tp[tilepartno].tp_end_header,
-                    cstr_info->tile[tileno].tp[tilepartno].tp_end_pos
-                   );
-
-        if (cstr_info->prog == LRCP) {  /* LRCP */
-            fprintf(stream,
-                    "LRCP\npack_nb tileno layno resno compno precno start_pos end_ph_pos end_pos");
-            if (disto_on) {
-                fprintf(stream, " disto");
-            }
-            fprintf(stream, "\n");
-
-            for (layno = 0; layno < cstr_info->numlayers; layno++) {
-                for (resno = 0; resno < max_numdecompos + 1; resno++) {
-                    for (compno = 0; compno < cstr_info->numcomps; compno++) {
-                        int prec_max;
-                        if (resno > cstr_info->numdecompos[compno]) {
-                            break;
-                        }
-                        prec_max = cstr_info->tile[tileno].pw[resno] *
-                                   cstr_info->tile[tileno].ph[resno];
-                        for (precno = 0; precno < prec_max; precno++) {
-                            start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
-                            end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
-                            end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
-                            disto = cstr_info->tile[tileno].packet[pack_nb].disto;
-                            fprintf(stream, "%4d %6d %7d %5d %6d  %6d    %6d     %6d %7d",
-                                    pack_nb, tileno, layno, resno, compno, precno, start_pos, end_ph_pos, end_pos);
-                            if (disto_on) {
-                                fprintf(stream, " %8e", disto);
-                            }
-                            fprintf(stream, "\n");
-                            total_disto += disto;
-                            pack_nb++;
-                        }
-                    }
-                }
-            }
-        } /* LRCP */
-
-        else if (cstr_info->prog == RLCP) { /* RLCP */
-            fprintf(stream,
-                    "RLCP\npack_nb tileno resno layno compno precno start_pos end_ph_pos end_pos\n");
-            if (disto_on) {
-                fprintf(stream, " disto");
-            }
-            fprintf(stream, "\n");
-
-            for (resno = 0; resno < max_numdecompos + 1; resno++) {
-                for (layno = 0; layno < cstr_info->numlayers; layno++) {
-                    for (compno = 0; compno < cstr_info->numcomps; compno++) {
-                        int prec_max;
-                        if (resno > cstr_info->numdecompos[compno]) {
-                            break;
-                        }
-                        prec_max = cstr_info->tile[tileno].pw[resno] *
-                                   cstr_info->tile[tileno].ph[resno];
-                        for (precno = 0; precno < prec_max; precno++) {
-                            start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
-                            end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
-                            end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
-                            disto = cstr_info->tile[tileno].packet[pack_nb].disto;
-                            fprintf(stream, "%4d %6d %5d %7d %6d %6d %9d   %9d %7d",
-                                    pack_nb, tileno, resno, layno, compno, precno, start_pos, end_ph_pos, end_pos);
-                            if (disto_on) {
-                                fprintf(stream, " %8e", disto);
-                            }
-                            fprintf(stream, "\n");
-                            total_disto += disto;
-                            pack_nb++;
-                        }
-                    }
-                }
-            }
-        } /* RLCP */
-
-        else if (cstr_info->prog == RPCL) { /* RPCL */
-
-            fprintf(stream,
-                    "RPCL\npack_nb tileno resno precno compno layno start_pos end_ph_pos end_pos");
-            if (disto_on) {
-                fprintf(stream, " disto");
-            }
-            fprintf(stream, "\n");
-
-            for (resno = 0; resno < max_numdecompos + 1; resno++) {
-                int numprec = cstr_info->tile[tileno].pw[resno] *
-                              cstr_info->tile[tileno].ph[resno];
-                for (precno = 0; precno < numprec; precno++) {
-                    /* I suppose components have same XRsiz, YRsiz */
-                    int x0 = cstr_info->tile_Ox + tileno - (int)floor((float)tileno /
-                             (float)cstr_info->tw) * cstr_info->tw * cstr_info->tile_x;
-                    int y0 = cstr_info->tile_Ox + (int)floor((float)tileno /
-                             (float)cstr_info->tw) * cstr_info->tile_y;
-                    int x1 = x0 + cstr_info->tile_x;
-                    int y1 = y0 + cstr_info->tile_y;
-                    for (compno = 0; compno < cstr_info->numcomps; compno++) {
-                        int pcnx = cstr_info->tile[tileno].pw[resno];
-                        int pcx = (int) pow(2, cstr_info->tile[tileno].pdx[resno] +
-                                            cstr_info->numdecompos[compno] - resno);
-                        int pcy = (int) pow(2, cstr_info->tile[tileno].pdy[resno] +
-                                            cstr_info->numdecompos[compno] - resno);
-                        int precno_x = precno - (int) floor((float)precno / (float)pcnx) * pcnx;
-                        int precno_y = (int) floor((float)precno / (float)pcnx);
-                        if (resno > cstr_info->numdecompos[compno]) {
-                            break;
-                        }
-                        for (y = y0; y < y1; y++) {
-                            if (precno_y * pcy == y) {
-                                for (x = x0; x < x1; x++) {
-                                    if (precno_x * pcx == x) {
-                                        for (layno = 0; layno < cstr_info->numlayers; layno++) {
-                                            start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
-                                            end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
-                                            end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
-                                            disto = cstr_info->tile[tileno].packet[pack_nb].disto;
-                                            fprintf(stream, "%4d %6d %5d %6d %6d %7d %9d   %9d %7d",
-                                                    pack_nb, tileno, resno, precno, compno, layno, start_pos, end_ph_pos, end_pos);
-                                            if (disto_on) {
-                                                fprintf(stream, " %8e", disto);
-                                            }
-                                            fprintf(stream, "\n");
-                                            total_disto += disto;
-                                            pack_nb++;
-                                        }
-                                    }
-                                }/* x = x0..x1 */
-                            }
-                        }  /* y = y0..y1 */
-                    } /* precno */
-                } /* compno */
-            } /* resno */
-        } /* RPCL */
-
-        else if (cstr_info->prog == PCRL) { /* PCRL */
-            /* I suppose components have same XRsiz, YRsiz */
-            int x0 = cstr_info->tile_Ox + tileno - (int)floor((float)tileno /
-                     (float)cstr_info->tw) * cstr_info->tw * cstr_info->tile_x;
-            int y0 = cstr_info->tile_Ox + (int)floor((float)tileno /
-                     (float)cstr_info->tw) * cstr_info->tile_y;
-            int x1 = x0 + cstr_info->tile_x;
-            int y1 = y0 + cstr_info->tile_y;
-
-            /* Count the maximum number of precincts */
-            int max_numprec = 0;
-            for (resno = 0; resno < max_numdecompos + 1; resno++) {
-                int numprec = cstr_info->tile[tileno].pw[resno] *
-                              cstr_info->tile[tileno].ph[resno];
-                if (numprec > max_numprec) {
-                    max_numprec = numprec;
-                }
-            }
-
-            fprintf(stream,
-                    "PCRL\npack_nb tileno precno compno resno layno start_pos end_ph_pos end_pos");
-            if (disto_on) {
-                fprintf(stream, " disto");
-            }
-            fprintf(stream, "\n");
-
-            for (precno = 0; precno < max_numprec; precno++) {
-                for (compno = 0; compno < cstr_info->numcomps; compno++) {
-                    for (resno = 0; resno < cstr_info->numdecompos[compno] + 1; resno++) {
-                        int numprec = cstr_info->tile[tileno].pw[resno] *
-                                      cstr_info->tile[tileno].ph[resno];
-                        int pcnx = cstr_info->tile[tileno].pw[resno];
-                        int pcx = (int) pow(2, cstr_info->tile[tileno].pdx[resno] +
-                                            cstr_info->numdecompos[compno] - resno);
-                        int pcy = (int) pow(2, cstr_info->tile[tileno].pdy[resno] +
-                                            cstr_info->numdecompos[compno] - resno);
-                        int precno_x = precno - (int) floor((float)precno / (float)pcnx) * pcnx;
-                        int precno_y = (int) floor((float)precno / (float)pcnx);
-                        if (precno >= numprec) {
-                            continue;
-                        }
-                        for (y = y0; y < y1; y++) {
-                            if (precno_y * pcy == y) {
-                                for (x = x0; x < x1; x++) {
-                                    if (precno_x * pcx == x) {
-                                        for (layno = 0; layno < cstr_info->numlayers; layno++) {
-                                            start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
-                                            end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
-                                            end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
-                                            disto = cstr_info->tile[tileno].packet[pack_nb].disto;
-                                            fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d   %9d %7d",
-                                                    pack_nb, tileno, precno, compno, resno, layno, start_pos, end_ph_pos, end_pos);
-                                            if (disto_on) {
-                                                fprintf(stream, " %8e", disto);
-                                            }
-                                            fprintf(stream, "\n");
-                                            total_disto += disto;
-                                            pack_nb++;
-                                        }
-                                    }
-                                }/* x = x0..x1 */
-                            }
-                        }  /* y = y0..y1 */
-                    } /* resno */
-                } /* compno */
-            } /* precno */
-        } /* PCRL */
-
-        else {  /* CPRL */
-            /* Count the maximum number of precincts */
-            int max_numprec = 0;
-            for (resno = 0; resno < max_numdecompos + 1; resno++) {
-                int numprec = cstr_info->tile[tileno].pw[resno] *
-                              cstr_info->tile[tileno].ph[resno];
-                if (numprec > max_numprec) {
-                    max_numprec = numprec;
-                }
-            }
-
-            fprintf(stream,
-                    "CPRL\npack_nb tileno compno precno resno layno start_pos end_ph_pos end_pos");
-            if (disto_on) {
-                fprintf(stream, " disto");
-            }
-            fprintf(stream, "\n");
-
-            for (compno = 0; compno < cstr_info->numcomps; compno++) {
-                /* I suppose components have same XRsiz, YRsiz */
-                int x0 = cstr_info->tile_Ox + tileno - (int)floor((float)tileno /
-                         (float)cstr_info->tw) * cstr_info->tw * cstr_info->tile_x;
-                int y0 = cstr_info->tile_Ox + (int)floor((float)tileno /
-                         (float)cstr_info->tw) * cstr_info->tile_y;
-                int x1 = x0 + cstr_info->tile_x;
-                int y1 = y0 + cstr_info->tile_y;
-
-                for (precno = 0; precno < max_numprec; precno++) {
-                    for (resno = 0; resno < cstr_info->numdecompos[compno] + 1; resno++) {
-                        int numprec = cstr_info->tile[tileno].pw[resno] *
-                                      cstr_info->tile[tileno].ph[resno];
-                        int pcnx = cstr_info->tile[tileno].pw[resno];
-                        int pcx = (int) pow(2, cstr_info->tile[tileno].pdx[resno] +
-                                            cstr_info->numdecompos[compno] - resno);
-                        int pcy = (int) pow(2, cstr_info->tile[tileno].pdy[resno] +
-                                            cstr_info->numdecompos[compno] - resno);
-                        int precno_x = precno - (int) floor((float)precno / (float)pcnx) * pcnx;
-                        int precno_y = (int) floor((float)precno / (float)pcnx);
-                        if (precno >= numprec) {
-                            continue;
-                        }
-
-                        for (y = y0; y < y1; y++) {
-                            if (precno_y * pcy == y) {
-                                for (x = x0; x < x1; x++) {
-                                    if (precno_x * pcx == x) {
-                                        for (layno = 0; layno < cstr_info->numlayers; layno++) {
-                                            start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
-                                            end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
-                                            end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
-                                            disto = cstr_info->tile[tileno].packet[pack_nb].disto;
-                                            fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d   %9d %7d",
-                                                    pack_nb, tileno, compno, precno, resno, layno, start_pos, end_ph_pos, end_pos);
-                                            if (disto_on) {
-                                                fprintf(stream, " %8e", disto);
-                                            }
-                                            fprintf(stream, "\n");
-                                            total_disto += disto;
-                                            pack_nb++;
-                                        }
-                                    }
-                                }/* x = x0..x1 */
-                            }
-                        } /* y = y0..y1 */
-                    } /* resno */
-                } /* precno */
-            } /* compno */
-        } /* CPRL */
-    } /* tileno */
-
-    if (disto_on) {
-        fprintf(stream, "%8e\n", cstr_info->D_max); /* SE max */
-        fprintf(stream, "%.8e\n", total_disto); /* SE totale */
-    }
-    /* UniPG>> */
-    /* print the markers' list */
-    if (cstr_info->marknum) {
-        fprintf(stream, "\nMARKER LIST\n");
-        fprintf(stream, "%d\n", cstr_info->marknum);
-        fprintf(stream, "type\tstart_pos    length\n");
-        for (x = 0; x < cstr_info->marknum; x++) {
-            fprintf(stream, "%X\t%9d %9d\n", cstr_info->marker[x].type,
-                    cstr_info->marker[x].pos, cstr_info->marker[x].len);
-        }
-    }
-    /* <<UniPG */
-    fclose(stream);
-
-    fprintf(stderr, "Generated index file %s\n", index);
-
-    return 0;
-}
diff --git a/src/bin/jpwl/index.h b/src/bin/jpwl/index.h
deleted file mode 100644 (file)
index b461e91..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __J2K_INDEX_H
-#define __J2K_INDEX_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
-Write a structured index to a file
-@param cstr_info Codestream information
-@param index Index filename
-@return Returns 0 if successful, returns 1 otherwise
-*/
-int write_index_file(opj_codestream_info_t *cstr_info, char *index);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __J2K_INDEX_H */
-
diff --git a/src/bin/jpwl/opj_jpwl_compress.c b/src/bin/jpwl/opj_jpwl_compress.c
deleted file mode 100644 (file)
index ccf0361..0000000
+++ /dev/null
@@ -1,1965 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2006-2007, Parvatha Elangovan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <math.h>
-
-#ifdef _WIN32
-#include "windirent.h"
-#else
-#include <dirent.h>
-#endif /* _WIN32 */
-
-#ifdef _WIN32
-#include <windows.h>
-#define strcasecmp _stricmp
-#define strncasecmp _strnicmp
-#else
-#include <strings.h>
-#endif /* _WIN32 */
-
-#include "opj_apps_config.h"
-#include "openjpeg.h"
-#include "opj_getopt.h"
-#include "convert.h"
-#include "index.h"
-
-#include "format_defs.h"
-
-#define CINEMA_24_CS 1302083    /*Codestream length for 24fps*/
-#define CINEMA_48_CS 651041     /*Codestream length for 48fps*/
-#define COMP_24_CS 1041666      /*Maximum size per color component for 2K & 4K @ 24fps*/
-#define COMP_48_CS 520833       /*Maximum size per color component for 2K @ 48fps*/
-
-typedef struct dircnt {
-    /** Buffer for holding images read from Directory*/
-    char *filename_buf;
-    /** Pointer to the buffer*/
-    char **filename;
-} dircnt_t;
-
-typedef struct img_folder {
-    /** The directory path of the folder containing input images*/
-    char *imgdirpath;
-    /** Output format*/
-    char *out_format;
-    /** Enable option*/
-    char set_imgdir;
-    /** Enable Cod Format for output*/
-    char set_out_format;
-    /** User specified rate stored in case of cinema option*/
-    float *rates;
-} img_fol_t;
-
-static void encode_help_display(void)
-{
-    fprintf(stdout, "HELP for opj_jpwl_compress\n----\n\n");
-    fprintf(stdout, "- the -h option displays this help information on screen\n\n");
-
-    /* UniPG>> */
-    fprintf(stdout, "List of parameters for the JPEG 2000 "
-#ifdef USE_JPWL
-            "+ JPWL "
-#endif /* USE_JPWL */
-            "encoder:\n");
-    /* <<UniPG */
-    fprintf(stdout, "\n");
-    fprintf(stdout, "REMARKS:\n");
-    fprintf(stdout, "---------\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "The markers written to the main_header are : SOC SIZ COD QCD COM.\n");
-    fprintf(stdout, "COD and QCD never appear in the tile_header.\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "By default:\n");
-    fprintf(stdout, "------------\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, " * Lossless\n");
-    fprintf(stdout, " * 1 tile\n");
-    fprintf(stdout, " * Size of precinct : 2^15 x 2^15 (means 1 precinct)\n");
-    fprintf(stdout, " * Size of code-block : 64 x 64\n");
-    fprintf(stdout, " * Number of resolutions: 6\n");
-    fprintf(stdout, " * No SOP marker in the codestream\n");
-    fprintf(stdout, " * No EPH marker in the codestream\n");
-    fprintf(stdout, " * No sub-sampling in x or y direction\n");
-    fprintf(stdout, " * No mode switch activated\n");
-    fprintf(stdout, " * Progression order: LRCP\n");
-    fprintf(stdout, " * No index file\n");
-    fprintf(stdout, " * No ROI upshifted\n");
-    fprintf(stdout, " * No offset of the origin of the image\n");
-    fprintf(stdout, " * No offset of the origin of the tiles\n");
-    fprintf(stdout, " * Reversible DWT 5-3\n");
-    /* UniPG>> */
-#ifdef USE_JPWL
-    fprintf(stdout, " * No JPWL protection\n");
-#endif /* USE_JPWL */
-    /* <<UniPG */
-    fprintf(stdout, "\n");
-    fprintf(stdout, "Parameters:\n");
-    fprintf(stdout, "------------\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "Required Parameters (except with -h):\n");
-    fprintf(stdout, "One of the two options -ImgDir or -i must be used\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "-ImgDir      : Image file Directory path (example ../Images) \n");
-    fprintf(stdout, "    When using this option -OutFor must be used\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "-OutFor \n");
-    fprintf(stdout, "    REQUIRED only if -ImgDir is used\n");
-    fprintf(stdout, "    Need to specify only format without filename <BMP>  \n");
-    fprintf(stdout,
-            "    Currently accepts PBM, PGM, PPM, PNM, PAM, PGX, PNG, BMP, TIF, RAW and TGA formats\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "-i           : source file  (-i source.pnm also *pbm, *.pgm, *.ppm, *.pam, *.pgx, *png, *.bmp, *.tif, *.raw, *.tga) \n");
-    fprintf(stdout, "    When using this option -o must be used\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "-o           : destination file (-o dest.j2k or .jp2) \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "Optional Parameters:\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "-h           : display the help information \n ");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "-cinema2K    : Digital Cinema 2K profile compliant codestream for 2K resolution.(-cinema2k 24 or 48) \n");
-    fprintf(stdout,
-            "    Need to specify the frames per second for a 2K resolution. Only 24 or 48 fps is allowed\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "-cinema4K    : Digital Cinema 4K profile compliant codestream for 4K resolution \n");
-    fprintf(stdout, "    Frames per second not required. Default value is 24fps\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "-r           : different compression ratios for successive layers (-r 20,10,5)\n ");
-    fprintf(stdout,
-            "           - The rate specified for each quality level is the desired \n");
-    fprintf(stdout, "             compression factor.\n");
-    fprintf(stdout, "             Example: -r 20,10,1 means quality 1: compress 20x, \n");
-    fprintf(stdout,
-            "               quality 2: compress 10x and quality 3: compress lossless\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "               (options -r and -q cannot be used together)\n ");
-    fprintf(stdout, "\n");
-
-    fprintf(stdout,
-            "-q           : different psnr for successive layers (-q 30,40,50) \n ");
-
-    fprintf(stdout,
-            "               (options -r and -q cannot be used together)\n ");
-
-    fprintf(stdout, "\n");
-    fprintf(stdout, "-n           : number of resolutions (-n 3) \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "-b           : size of code block (-b 32,32) \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "-c           : size of precinct (-c 128,128) \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "-t           : size of tile (-t 512,512) \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "-p           : progression order (-p LRCP) [LRCP, RLCP, RPCL, PCRL, CPRL] \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "-s           : subsampling factor (-s 2,2) [-s X,Y] \n");
-    fprintf(stdout, "       Remark: subsampling bigger than 2 can produce error\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "-POC         : Progression order change (-POC T1=0,0,1,5,3,CPRL/T1=5,0,1,6,3,CPRL) \n");
-    fprintf(stdout, "      Example: T1=0,0,1,5,3,CPRL \n");
-    fprintf(stdout,
-            "                   : Ttilenumber=Resolution num start,Component num start,Layer num end,Resolution num end,Component num end,Progression order\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "-SOP         : write SOP marker before each packet \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "-EPH         : write EPH marker after each header packet \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "-M           : mode switch (-M 3) [1=BYPASS(LAZY) 2=RESET 4=RESTART(TERMALL)\n");
-    fprintf(stdout,
-            "                 8=VSC 16=ERTERM(SEGTERM) 32=SEGMARK(SEGSYM)] \n");
-    fprintf(stdout,
-            "                 Indicate multiple modes by adding their values. \n");
-    fprintf(stdout,
-            "                 ex: RESTART(4) + RESET(2) + SEGMARK(32) = -M 38\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "-TP          : divide packets of every tile into tile-parts (-TP R) [R, L, C]\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "-x           : create an index file *.Idx (-x index_name.Idx) \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "-ROI         : c=%%d,U=%%d : quantization indices upshifted \n");
-    fprintf(stdout, "               for component c=%%d [%%d = 0,1,2]\n");
-    fprintf(stdout,
-            "               with a value of U=%%d [0 <= %%d <= 37] (i.e. -ROI c=0,U=25) \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "-d           : offset of the origin of the image (-d 150,300) \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "-T           : offset of the origin of the tiles (-T 100,75) \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "-I           : use the irreversible DWT 9-7 (-I) \n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "-F           : characteristics of the raw input image\n");
-    fprintf(stdout,
-            "               -F rawWidth,rawHeight,rawComp,rawBitDepth,s/u (Signed/Unsigned)\n");
-    fprintf(stdout,
-            "               Example: -i lena.raw -o lena.j2k -F 512,512,3,8,u\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "-jpip        : write jpip codestream index box in JP2 output file\n");
-    fprintf(stdout, "               NOTICE: currently supports only RPCL order\n");
-    fprintf(stdout, "\n");
-    /* UniPG>> */
-#ifdef USE_JPWL
-    fprintf(stdout,
-            "-W           : adoption of JPWL (Part 11) capabilities (-W params)\n");
-    fprintf(stdout,
-            "               The parameters can be written and repeated in any order:\n");
-    fprintf(stdout,
-            "               [h<tilepart><=type>,s<tilepart><=method>,a=<addr>,...\n");
-    fprintf(stdout,
-            "                ...,z=<size>,g=<range>,p<tilepart:pack><=type>]\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "                 h selects the header error protection (EPB): 'type' can be\n");
-    fprintf(stdout,
-            "                   [0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS]\n");
-    fprintf(stdout,
-            "                   if 'tilepart' is absent, it is for main and tile headers\n");
-    fprintf(stdout,
-            "                   if 'tilepart' is present, it applies from that tile\n");
-    fprintf(stdout,
-            "                     onwards, up to the next h<> spec, or to the last tilepart\n");
-    fprintf(stdout, "                     in the codestream (max. %d specs)\n",
-            JPWL_MAX_NO_TILESPECS);
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "                 p selects the packet error protection (EEP/UEP with EPBs)\n");
-    fprintf(stdout, "                  to be applied to raw data: 'type' can be\n");
-    fprintf(stdout,
-            "                   [0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS]\n");
-    fprintf(stdout,
-            "                   if 'tilepart:pack' is absent, it is from tile 0, packet 0\n");
-    fprintf(stdout,
-            "                   if 'tilepart:pack' is present, it applies from that tile\n");
-    fprintf(stdout,
-            "                     and that packet onwards, up to the next packet spec\n");
-    fprintf(stdout,
-            "                     or to the last packet in the last tilepart in the stream\n");
-    fprintf(stdout, "                     (max. %d specs)\n",
-            JPWL_MAX_NO_PACKSPECS);
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "                 s enables sensitivity data insertion (ESD): 'method' can be\n");
-    fprintf(stdout,
-            "                   [-1=NO ESD 0=RELATIVE ERROR 1=MSE 2=MSE REDUCTION 3=PSNR\n");
-    fprintf(stdout,
-            "                    4=PSNR INCREMENT 5=MAXERR 6=TSE 7=RESERVED]\n");
-    fprintf(stdout,
-            "                   if 'tilepart' is absent, it is for main header only\n");
-    fprintf(stdout,
-            "                   if 'tilepart' is present, it applies from that tile\n");
-    fprintf(stdout,
-            "                     onwards, up to the next s<> spec, or to the last tilepart\n");
-    fprintf(stdout, "                     in the codestream (max. %d specs)\n",
-            JPWL_MAX_NO_TILESPECS);
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "                 g determines the addressing mode: <range> can be\n");
-    fprintf(stdout, "                   [0=PACKET 1=BYTE RANGE 2=PACKET RANGE]\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "                 a determines the size of data addressing: <addr> can be\n");
-    fprintf(stdout,
-            "                   2/4 bytes (small/large codestreams). If not set, auto-mode\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "                 z determines the size of sensitivity values: <size> can be\n");
-    fprintf(stdout,
-            "                   1/2 bytes, for the transformed pseudo-floating point value\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "                 ex.:\n");
-    fprintf(stdout,
-            "                   h,h0=64,h3=16,h5=32,p0=78,p0:24=56,p1,p3:0=0,p3:20=32,s=0,\n");
-    fprintf(stdout, "                     s0=6,s3=-1,a=0,g=1,z=1\n");
-    fprintf(stdout, "                 means\n");
-    fprintf(stdout,
-            "                   predefined EPB in MH, rs(64,32) from TPH 0 to TPH 2,\n");
-    fprintf(stdout,
-            "                   CRC-16 in TPH 3 and TPH 4, CRC-32 in remaining TPHs,\n");
-    fprintf(stdout,
-            "                   UEP rs(78,32) for packets 0 to 23 of tile 0,\n");
-    fprintf(stdout,
-            "                   UEP rs(56,32) for packs. 24 to the last of tilepart 0,\n");
-    fprintf(stdout,
-            "                   UEP rs default for packets of tilepart 1,\n");
-    fprintf(stdout,
-            "                   no UEP for packets 0 to 19 of tilepart 3,\n");
-    fprintf(stdout,
-            "                   UEP CRC-32 for packs. 20 of tilepart 3 to last tilepart,\n");
-    fprintf(stdout, "                   relative sensitivity ESD for MH,\n");
-    fprintf(stdout,
-            "                   TSE ESD from TPH 0 to TPH 2, byte range with automatic\n");
-    fprintf(stdout,
-            "                   size of addresses and 1 byte for each sensitivity value\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "                 ex.:\n");
-    fprintf(stdout, "                       h,s,p\n");
-    fprintf(stdout, "                 means\n");
-    fprintf(stdout,
-            "                   default protection to headers (MH and TPHs) as well as\n");
-    fprintf(stdout, "                   data packets, one ESD in MH\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "                 N.B.: use the following recommendations when specifying\n");
-    fprintf(stdout, "                       the JPWL parameters list\n");
-    fprintf(stdout,
-            "                   - when you use UEP, always pair the 'p' option with 'h'\n");
-    fprintf(stdout, "                 \n");
-#endif /* USE_JPWL */
-    /* <<UniPG */
-    fprintf(stdout, "IMPORTANT:\n");
-    fprintf(stdout, "-----------\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "The index file has the structure below:\n");
-    fprintf(stdout, "---------------------------------------\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "Image_height Image_width\n");
-    fprintf(stdout, "progression order\n");
-    fprintf(stdout, "Tiles_size_X Tiles_size_Y\n");
-    fprintf(stdout, "Tiles_nb_X Tiles_nb_Y\n");
-    fprintf(stdout, "Components_nb\n");
-    fprintf(stdout, "Layers_nb\n");
-    fprintf(stdout, "decomposition_levels\n");
-    fprintf(stdout, "[Precincts_size_X_res_Nr Precincts_size_Y_res_Nr]...\n");
-    fprintf(stdout, "   [Precincts_size_X_res_0 Precincts_size_Y_res_0]\n");
-    fprintf(stdout, "Main_header_start_position\n");
-    fprintf(stdout, "Main_header_end_position\n");
-    fprintf(stdout, "Codestream_size\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "INFO ON TILES\n");
-    fprintf(stdout,
-            "tileno start_pos end_hd end_tile nbparts disto nbpix disto/nbpix\n");
-    fprintf(stdout,
-            "Tile_0 start_pos end_Theader end_pos NumParts TotalDisto NumPix MaxMSE\n");
-    fprintf(stdout,
-            "Tile_1   ''           ''        ''        ''       ''    ''      ''\n");
-    fprintf(stdout, "...\n");
-    fprintf(stdout,
-            "Tile_Nt   ''           ''        ''        ''       ''    ''     ''\n");
-    fprintf(stdout, "...\n");
-    fprintf(stdout, "TILE 0 DETAILS\n");
-    fprintf(stdout, "part_nb tileno num_packs start_pos end_tph_pos end_pos\n");
-    fprintf(stdout, "...\n");
-    fprintf(stdout, "Progression_string\n");
-    fprintf(stdout,
-            "pack_nb tileno layno resno compno precno start_pos end_ph_pos end_pos disto\n");
-    fprintf(stdout,
-            "Tpacket_0 Tile layer res. comp. prec. start_pos end_pos disto\n");
-    fprintf(stdout, "...\n");
-    fprintf(stdout,
-            "Tpacket_Np ''   ''    ''   ''    ''       ''       ''     ''\n");
-
-    fprintf(stdout, "MaxDisto\n");
-
-    fprintf(stdout, "TotalDisto\n\n");
-}
-
-static OPJ_PROG_ORDER give_progression(const char progression[4])
-{
-    if (strncmp(progression, "LRCP", 4) == 0) {
-        return LRCP;
-    }
-    if (strncmp(progression, "RLCP", 4) == 0) {
-        return RLCP;
-    }
-    if (strncmp(progression, "RPCL", 4) == 0) {
-        return RPCL;
-    }
-    if (strncmp(progression, "PCRL", 4) == 0) {
-        return PCRL;
-    }
-    if (strncmp(progression, "CPRL", 4) == 0) {
-        return CPRL;
-    }
-
-    return PROG_UNKNOWN;
-}
-
-static unsigned int get_num_images(char *imgdirpath)
-{
-    DIR *dir;
-    struct dirent* content;
-    unsigned int num_images = 0;
-
-    /*Reading the input images from given input directory*/
-
-    dir = opendir(imgdirpath);
-    if (!dir) {
-        fprintf(stderr, "Could not open Folder %s\n", imgdirpath);
-        return 0;
-    }
-
-    num_images = 0;
-    while ((content = readdir(dir)) != NULL) {
-        if (strcmp(".", content->d_name) == 0 || strcmp("..", content->d_name) == 0) {
-            continue;
-        }
-        num_images++;
-    }
-    return num_images;
-}
-
-static int load_images(dircnt_t *dirptr, char *imgdirpath)
-{
-    DIR *dir;
-    struct dirent* content;
-    int i = 0;
-
-    /*Reading the input images from given input directory*/
-
-    dir = opendir(imgdirpath);
-    if (!dir) {
-        fprintf(stderr, "Could not open Folder %s\n", imgdirpath);
-        return 1;
-    } else   {
-        fprintf(stderr, "Folder opened successfully\n");
-    }
-
-    while ((content = readdir(dir)) != NULL) {
-        if (strcmp(".", content->d_name) == 0 || strcmp("..", content->d_name) == 0) {
-            continue;
-        }
-
-        strcpy(dirptr->filename[i], content->d_name);
-        i++;
-    }
-    return 0;
-}
-
-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"
-    };
-    static const int format[] = {
-        PGX_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, BMP_DFMT, TIF_DFMT, RAW_DFMT, TGA_DFMT, PNG_DFMT, J2K_CFMT, JP2_CFMT, J2K_CFMT, J2K_CFMT
-    };
-    char * ext = strrchr(filename, '.');
-    if (ext == NULL) {
-        return -1;
-    }
-    ext++;
-    for (i = 0; i < sizeof(format) / sizeof(*format); i++) {
-        if (strcasecmp(ext, extension[i]) == 0) {
-            return format[i];
-        }
-    }
-    return -1;
-}
-
-static char * get_file_name(char *name)
-{
-    char *fname;
-    fname = (char*)malloc(OPJ_PATH_LEN * sizeof(char));
-    fname = strtok(name, ".");
-    return fname;
-}
-
-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] = "";
-
-    strcpy(image_filename, dirptr->filename[imageno]);
-    fprintf(stderr, "File Number %d \"%s\"\n", imageno, image_filename);
-    parameters->decod_format = get_file_format(image_filename);
-    if (parameters->decod_format == -1) {
-        return 1;
-    }
-    sprintf(infilename, "%s/%s", img_fol->imgdirpath, image_filename);
-    strncpy(parameters->infile, infilename, sizeof(infilename));
-
-    /*Set output file*/
-    strcpy(temp_ofname, get_file_name(image_filename));
-    while ((temp_p = strtok(NULL, ".")) != NULL) {
-        strcat(temp_ofname, temp1);
-        sprintf(temp1, ".%s", temp_p);
-    }
-    if (img_fol->set_out_format == 1) {
-        sprintf(outfilename, "%s/%s.%s", img_fol->imgdirpath, temp_ofname,
-                img_fol->out_format);
-        strncpy(parameters->outfile, outfilename, sizeof(outfilename));
-    }
-    return 0;
-}
-
-static int initialise_4K_poc(opj_poc_t *POC, int numres)
-{
-    POC[0].tile  = 1;
-    POC[0].resno0  = 0;
-    POC[0].compno0 = 0;
-    POC[0].layno1  = 1;
-    POC[0].resno1  = numres - 1;
-    POC[0].compno1 = 3;
-    POC[0].prg1 = CPRL;
-    POC[1].tile  = 1;
-    POC[1].resno0  = numres - 1;
-    POC[1].compno0 = 0;
-    POC[1].layno1  = 1;
-    POC[1].resno1  = numres;
-    POC[1].compno1 = 3;
-    POC[1].prg1 = CPRL;
-    return 2;
-}
-
-static void cinema_parameters(opj_cparameters_t *parameters)
-{
-    parameters->tile_size_on = OPJ_FALSE;
-    parameters->cp_tdx = 1;
-    parameters->cp_tdy = 1;
-
-    /*Tile part*/
-    parameters->tp_flag = 'C';
-    parameters->tp_on = 1;
-
-    /*Tile and Image shall be at (0,0)*/
-    parameters->cp_tx0 = 0;
-    parameters->cp_ty0 = 0;
-    parameters->image_offset_x0 = 0;
-    parameters->image_offset_y0 = 0;
-
-    /*Codeblock size= 32*32*/
-    parameters->cblockw_init = 32;
-    parameters->cblockh_init = 32;
-    parameters->csty |= 0x01;
-
-    /*The progression order shall be CPRL*/
-    parameters->prog_order = CPRL;
-
-    /* No ROI */
-    parameters->roi_compno = -1;
-
-    parameters->subsampling_dx = 1;
-    parameters->subsampling_dy = 1;
-
-    /* 9-7 transform */
-    parameters->irreversible = 1;
-
-}
-
-static void cinema_setup_encoder(opj_cparameters_t *parameters,
-                                 opj_image_t *image, img_fol_t *img_fol)
-{
-    int i;
-    float temp_rate;
-
-    switch (parameters->cp_cinema) {
-    case CINEMA2K_24:
-    case CINEMA2K_48:
-        if (parameters->numresolution > 6) {
-            parameters->numresolution = 6;
-        }
-        if (!((image->comps[0].w == 2048) | (image->comps[0].h == 1080))) {
-            fprintf(stdout,
-                    "Image coordinates %d x %d is not 2K compliant.\nJPEG Digital Cinema Profile-3 "
-                    "(2K profile) compliance requires that at least one of coordinates match 2048 x 1080\n",
-                    image->comps[0].w, image->comps[0].h);
-            parameters->cp_rsiz = STD_RSIZ;
-        }
-        break;
-
-    case CINEMA4K_24:
-        if (parameters->numresolution < 1) {
-            parameters->numresolution = 1;
-        } else if (parameters->numresolution > 7) {
-            parameters->numresolution = 7;
-        }
-        if (!((image->comps[0].w == 4096) | (image->comps[0].h == 2160))) {
-            fprintf(stdout,
-                    "Image coordinates %d x %d is not 4K compliant.\nJPEG Digital Cinema Profile-4"
-                    "(4K profile) compliance requires that at least one of coordinates match 4096 x 2160\n",
-                    image->comps[0].w, image->comps[0].h);
-            parameters->cp_rsiz = STD_RSIZ;
-        }
-        parameters->numpocs = initialise_4K_poc(parameters->POC,
-                                                parameters->numresolution);
-        break;
-    default :
-        break;
-    }
-
-    switch (parameters->cp_cinema) {
-    case CINEMA2K_24:
-    case CINEMA4K_24:
-        for (i = 0 ; i < parameters->tcp_numlayers ; i++) {
-            temp_rate = 0 ;
-            if (img_fol->rates[i] == 0) {
-                parameters->tcp_rates[0] = ((float)(image->numcomps * image->comps[0].w *
-                                                    image->comps[0].h * image->comps[0].prec)) /
-                                           (CINEMA_24_CS * 8 * image->comps[0].dx * image->comps[0].dy);
-            } else {
-                temp_rate = ((float)(image->numcomps * image->comps[0].w * image->comps[0].h *
-                                     image->comps[0].prec)) /
-                            (img_fol->rates[i] * 8 * image->comps[0].dx * image->comps[0].dy);
-                if (temp_rate > CINEMA_24_CS) {
-                    parameters->tcp_rates[i] = ((float)(image->numcomps * image->comps[0].w *
-                                                        image->comps[0].h * image->comps[0].prec)) /
-                                               (CINEMA_24_CS * 8 * image->comps[0].dx * image->comps[0].dy);
-                } else {
-                    parameters->tcp_rates[i] = img_fol->rates[i];
-                }
-            }
-        }
-        parameters->max_comp_size = COMP_24_CS;
-        break;
-
-    case CINEMA2K_48:
-        for (i = 0 ; i < parameters->tcp_numlayers ; i++) {
-            temp_rate = 0 ;
-            if (img_fol->rates[i] == 0) {
-                parameters->tcp_rates[0] = ((float)(image->numcomps * image->comps[0].w *
-                                                    image->comps[0].h * image->comps[0].prec)) /
-                                           (CINEMA_48_CS * 8 * image->comps[0].dx * image->comps[0].dy);
-            } else {
-                temp_rate = ((float)(image->numcomps * image->comps[0].w * image->comps[0].h *
-                                     image->comps[0].prec)) /
-                            (img_fol->rates[i] * 8 * image->comps[0].dx * image->comps[0].dy);
-                if (temp_rate > CINEMA_48_CS) {
-                    parameters->tcp_rates[0] = ((float)(image->numcomps * image->comps[0].w *
-                                                        image->comps[0].h * image->comps[0].prec)) /
-                                               (CINEMA_48_CS * 8 * image->comps[0].dx * image->comps[0].dy);
-                } else {
-                    parameters->tcp_rates[i] = img_fol->rates[i];
-                }
-            }
-        }
-        parameters->max_comp_size = COMP_48_CS;
-        break;
-    default:
-        break;
-    }
-    parameters->cp_disto_alloc = 1;
-}
-
-/* ------------------------------------------------------------------------------------ */
-
-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[] = {
-        {"cinema2K", REQ_ARG, NULL, 'w'},
-        {"cinema4K", NO_ARG, NULL, 'y'},
-        {"ImgDir", REQ_ARG, NULL, 'z'},
-        {"TP", REQ_ARG, NULL, 'u'},
-        {"SOP", NO_ARG, NULL, 'S'},
-        {"EPH", NO_ARG, NULL, 'E'},
-        {"OutFor", REQ_ARG, NULL, 'O'},
-        {"POC", REQ_ARG, NULL, 'P'},
-        {"ROI", REQ_ARG, NULL, 'R'},
-        {"jpip", NO_ARG, NULL, 'J'}
-    };
-
-    /* parse the command line */
-    const char optlist[] = "i:o:r:q:n:b:c:t:p:s:SEM:x:R:d:T:If:P:C:F:u:J"
-#ifdef USE_JPWL
-                           "W:"
-#endif /* USE_JPWL */
-                           "h";
-
-    totlen = sizeof(long_option);
-    img_fol->set_out_format = 0;
-    raw_cp->rawWidth = 0;
-
-    do {
-        c = opj_getopt_long(argc, argv, optlist, long_option, totlen);
-        if (c == -1) {
-            break;
-        }
-        switch (c) {
-        case 'i': {         /* input file */
-            char *infile = opj_optarg;
-            parameters->decod_format = get_file_format(infile);
-            switch (parameters->decod_format) {
-            case PGX_DFMT:
-            case PXM_DFMT:
-            case BMP_DFMT:
-            case TIF_DFMT:
-            case RAW_DFMT:
-            case TGA_DFMT:
-            case PNG_DFMT:
-                break;
-            default:
-                fprintf(stderr,
-                        "!! Unrecognized format for infile : %s "
-                        "[accept only *.pnm, *.pgm, *.ppm, *.pgx, *png, *.bmp, *.tif, *.raw or *.tga] !!\n\n",
-                        infile);
-                return 1;
-            }
-            strncpy(parameters->infile, infile, sizeof(parameters->infile) - 1);
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 'o': {         /* output file */
-            char *outfile = opj_optarg;
-            parameters->cod_format = get_file_format(outfile);
-            switch (parameters->cod_format) {
-            case J2K_CFMT:
-            case JP2_CFMT:
-                break;
-            default:
-                fprintf(stderr,
-                        "Unknown output format image %s [only *.j2k, *.j2c or *.jp2]!! \n", outfile);
-                return 1;
-            }
-            strncpy(parameters->outfile, outfile, sizeof(parameters->outfile) - 1);
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-        case 'O': {         /* output format */
-            char outformat[50];
-            char *of = opj_optarg;
-            sprintf(outformat, ".%s", of);
-            img_fol->set_out_format = 1;
-            parameters->cod_format = get_file_format(outformat);
-            switch (parameters->cod_format) {
-            case J2K_CFMT:
-            case JP2_CFMT:
-                img_fol->out_format = opj_optarg;
-                break;
-            default:
-                fprintf(stderr, "Unknown output format image [only j2k, j2c, jp2]!! \n");
-                return 1;
-            }
-        }
-        break;
-
-
-        /* ----------------------------------------------------- */
-
-
-        case 'r': {         /* rates rates/distorsion */
-            char *s = opj_optarg;
-            parameters->tcp_numlayers = 0;
-            while (sscanf(s, "%f", &parameters->tcp_rates[parameters->tcp_numlayers]) ==
-                    1) {
-                parameters->tcp_numlayers++;
-                while (*s && *s != ',') {
-                    s++;
-                }
-                if (!*s) {
-                    break;
-                }
-                s++;
-            }
-            parameters->cp_disto_alloc = 1;
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-
-        case 'F': {         /* Raw image format parameters */
-            char signo;
-            char *s = opj_optarg;
-            if (sscanf(s, "%d,%d,%d,%d,%c", &raw_cp->rawWidth, &raw_cp->rawHeight,
-                       &raw_cp->rawComp, &raw_cp->rawBitDepth, &signo) == 5) {
-                if (signo == 's') {
-                    raw_cp->rawSigned = OPJ_TRUE;
-                    fprintf(stdout, "\nRaw file parameters: %d,%d,%d,%d Signed\n", raw_cp->rawWidth,
-                            raw_cp->rawHeight, raw_cp->rawComp, raw_cp->rawBitDepth);
-                } else if (signo == 'u') {
-                    raw_cp->rawSigned = OPJ_FALSE;
-                    fprintf(stdout, "\nRaw file parameters: %d,%d,%d,%d Unsigned\n",
-                            raw_cp->rawWidth, raw_cp->rawHeight, raw_cp->rawComp, raw_cp->rawBitDepth);
-                } else {
-                    fprintf(stderr,
-                            "\nError: invalid raw image parameters: Unknown sign of raw file\n");
-                    fprintf(stderr, "Please use the Format option -F:\n");
-                    fprintf(stderr,
-                            "-F rawWidth,rawHeight,rawComp,rawBitDepth,s/u (Signed/Unsigned)\n");
-                    fprintf(stderr, "Example: -i lena.raw -o lena.j2k -F 512,512,3,8,u\n");
-                    fprintf(stderr, "Aborting\n");
-                }
-            } else {
-                fprintf(stderr, "\nError: invalid raw image parameters\n");
-                fprintf(stderr, "Please use the Format option -F:\n");
-                fprintf(stderr,
-                        "-F rawWidth,rawHeight,rawComp,rawBitDepth,s/u (Signed/Unsigned)\n");
-                fprintf(stderr, "Example: -i lena.raw -o lena.j2k -F 512,512,3,8,u\n");
-                fprintf(stderr, "Aborting\n");
-                return 1;
-            }
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 'q': {         /* add fixed_quality */
-            char *s = opj_optarg;
-            while (sscanf(s, "%f", &parameters->tcp_distoratio[parameters->tcp_numlayers])
-                    == 1) {
-                parameters->tcp_numlayers++;
-                while (*s && *s != ',') {
-                    s++;
-                }
-                if (!*s) {
-                    break;
-                }
-                s++;
-            }
-            parameters->cp_fixed_quality = 1;
-        }
-        break;
-
-        /* dda */
-        /* ----------------------------------------------------- */
-
-        case 'f': {         /* mod fixed_quality (before : -q) */
-            int *row = NULL, *col = NULL;
-            int numlayers = 0, numresolution = 0, matrix_width = 0;
-
-            char *s = opj_optarg;
-            sscanf(s, "%d", &numlayers);
-            s++;
-            if (numlayers > 9) {
-                s++;
-            }
-
-            parameters->tcp_numlayers = numlayers;
-            numresolution = parameters->numresolution;
-            matrix_width = numresolution * 3;
-            parameters->cp_matrice = (int *) malloc(numlayers * matrix_width * sizeof(int));
-            s = s + 2;
-
-            for (i = 0; i < numlayers; i++) {
-                row = &parameters->cp_matrice[i * matrix_width];
-                col = row;
-                parameters->tcp_rates[i] = 1;
-                sscanf(s, "%d,", &col[0]);
-                s += 2;
-                if (col[0] > 9) {
-                    s++;
-                }
-                col[1] = 0;
-                col[2] = 0;
-                for (j = 1; j < numresolution; j++) {
-                    col += 3;
-                    sscanf(s, "%d,%d,%d", &col[0], &col[1], &col[2]);
-                    s += 6;
-                    if (col[0] > 9) {
-                        s++;
-                    }
-                    if (col[1] > 9) {
-                        s++;
-                    }
-                    if (col[2] > 9) {
-                        s++;
-                    }
-                }
-                if (i < numlayers - 1) {
-                    s++;
-                }
-            }
-            parameters->cp_fixed_alloc = 1;
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 't': {         /* tiles */
-            sscanf(opj_optarg, "%d,%d", &parameters->cp_tdx, &parameters->cp_tdy);
-            parameters->tile_size_on = OPJ_TRUE;
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 'n': {         /* resolution */
-            sscanf(opj_optarg, "%d", &parameters->numresolution);
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-        case 'c': {         /* precinct dimension */
-            char sep;
-            int res_spec = 0;
-
-            char *s = opj_optarg;
-            do {
-                sep = 0;
-                sscanf(s, "[%d,%d]%c", &parameters->prcw_init[res_spec],
-                       &parameters->prch_init[res_spec], &sep);
-                parameters->csty |= 0x01;
-                res_spec++;
-                s = strpbrk(s, "]") + 2;
-            } while (sep == ',');
-            parameters->res_spec = res_spec;
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 'b': {         /* code-block dimension */
-            int cblockw_init = 0, cblockh_init = 0;
-            sscanf(opj_optarg, "%d,%d", &cblockw_init, &cblockh_init);
-            if (cblockw_init > 1024 || cblockw_init < 4 ||
-                    cblockh_init > 1024 || cblockh_init < 4 ||
-                    cblockw_init * cblockh_init > 4096) {
-                fprintf(stderr,
-                        "!! Size of code_block error (option -b) !!\n\nRestriction :\n"
-                        "    * width*height<=4096\n    * 4<=width,height<= 1024\n\n");
-                return 1;
-            }
-            parameters->cblockw_init = cblockw_init;
-            parameters->cblockh_init = cblockh_init;
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 'x': {         /* creation of index file */
-            char *index = opj_optarg;
-            strncpy(indexfilename, index, OPJ_PATH_LEN);
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 'p': {         /* progression order */
-            char progression[4];
-
-            strncpy(progression, opj_optarg, 4);
-            parameters->prog_order = give_progression(progression);
-            if (parameters->prog_order == -1) {
-                fprintf(stderr, "Unrecognized progression order "
-                        "[LRCP, RLCP, RPCL, PCRL, CPRL] !!\n");
-                return 1;
-            }
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 's': {         /* subsampling factor */
-            if (sscanf(opj_optarg, "%d,%d", &parameters->subsampling_dx,
-                       &parameters->subsampling_dy) != 2) {
-                fprintf(stderr, "'-s' sub-sampling argument error !  [-s dx,dy]\n");
-                return 1;
-            }
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 'd': {         /* coordonnate of the reference grid */
-            if (sscanf(opj_optarg, "%d,%d", &parameters->image_offset_x0,
-                       &parameters->image_offset_y0) != 2) {
-                fprintf(stderr, "-d 'coordonnate of the reference grid' argument "
-                        "error !! [-d x0,y0]\n");
-                return 1;
-            }
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 'h':           /* display an help description */
-            encode_help_display();
-            return 1;
-
-        /* ----------------------------------------------------- */
-
-        case 'P': {         /* POC */
-            int numpocs = 0;        /* number of progression order change (POC) default 0 */
-            opj_poc_t *POC = NULL;  /* POC : used in case of Progression order change */
-
-            char *s = opj_optarg;
-            POC = parameters->POC;
-
-            while (sscanf(s, "T%d=%d,%d,%d,%d,%d,%4s", &POC[numpocs].tile,
-                          &POC[numpocs].resno0, &POC[numpocs].compno0,
-                          &POC[numpocs].layno1, &POC[numpocs].resno1,
-                          &POC[numpocs].compno1, POC[numpocs].progorder) == 7) {
-                POC[numpocs].prg1 = give_progression(POC[numpocs].progorder);
-                numpocs++;
-                while (*s && *s != '/') {
-                    s++;
-                }
-                if (!*s) {
-                    break;
-                }
-                s++;
-            }
-            parameters->numpocs = numpocs;
-        }
-        break;
-
-        /* ------------------------------------------------------ */
-
-        case 'S': {         /* SOP marker */
-            parameters->csty |= 0x02;
-        }
-        break;
-
-        /* ------------------------------------------------------ */
-
-        case 'E': {         /* EPH marker */
-            parameters->csty |= 0x04;
-        }
-        break;
-
-        /* ------------------------------------------------------ */
-
-        case 'M': {         /* Mode switch pas tous au point !! */
-            int value = 0;
-            if (sscanf(opj_optarg, "%d", &value) == 1) {
-                for (i = 0; i <= 5; i++) {
-                    int cache = value & (1 << i);
-                    if (cache) {
-                        parameters->mode |= (1 << i);
-                    }
-                }
-            }
-        }
-        break;
-
-        /* ------------------------------------------------------ */
-
-        case 'R': {         /* ROI */
-            if (sscanf(opj_optarg, "c=%d,U=%d", &parameters->roi_compno,
-                       &parameters->roi_shift) != 2) {
-                fprintf(stderr, "ROI error !! [-ROI c='compno',U='shift']\n");
-                return 1;
-            }
-        }
-        break;
-
-        /* ------------------------------------------------------ */
-
-        case 'T': {         /* Tile offset */
-            if (sscanf(opj_optarg, "%d,%d", &parameters->cp_tx0,
-                       &parameters->cp_ty0) != 2) {
-                fprintf(stderr, "-T 'tile offset' argument error !! [-T X0,Y0]");
-                return 1;
-            }
-        }
-        break;
-
-        /* ------------------------------------------------------ */
-
-        case 'C': {         /* add a comment */
-            parameters->cp_comment = (char*)malloc(strlen(opj_optarg) + 1);
-            if (parameters->cp_comment) {
-                strcpy(parameters->cp_comment, opj_optarg);
-            }
-        }
-        break;
-
-
-        /* ------------------------------------------------------ */
-
-        case 'I': {         /* reversible or not */
-            parameters->irreversible = 1;
-        }
-        break;
-
-        /* ------------------------------------------------------ */
-
-        case 'u': {         /* Tile part generation*/
-            parameters->tp_flag = opj_optarg[0];
-            parameters->tp_on = 1;
-        }
-        break;
-
-        /* ------------------------------------------------------ */
-
-        case 'z': {         /* Image Directory path */
-            img_fol->imgdirpath = (char*)malloc(strlen(opj_optarg) + 1);
-            strcpy(img_fol->imgdirpath, opj_optarg);
-            img_fol->set_imgdir = 1;
-        }
-        break;
-
-        /* ------------------------------------------------------ */
-
-        case 'w': {         /* Digital Cinema 2K profile compliance*/
-            int fps = 0;
-            sscanf(opj_optarg, "%d", &fps);
-            if (fps == 24) {
-                parameters->cp_cinema = CINEMA2K_24;
-            } else if (fps == 48) {
-                parameters->cp_cinema = CINEMA2K_48;
-            } else {
-                fprintf(stderr, "Incorrect value!! must be 24 or 48\n");
-                return 1;
-            }
-            fprintf(stdout, "CINEMA 2K compliant codestream\n");
-            parameters->cp_rsiz = CINEMA2K;
-
-        }
-        break;
-
-        /* ------------------------------------------------------ */
-
-        case 'y': {         /* Digital Cinema 4K profile compliance*/
-            parameters->cp_cinema = CINEMA4K_24;
-            fprintf(stdout, "CINEMA 4K compliant codestream\n");
-            parameters->cp_rsiz = CINEMA4K;
-        }
-        break;
-
-            /* ------------------------------------------------------ */
-
-            /* UniPG>> */
-#ifdef USE_JPWL
-        /* ------------------------------------------------------ */
-
-        case 'W': {         /* JPWL capabilities switched on */
-            char *token = NULL;
-            int hprot, pprot, sens, addr, size, range;
-
-            /* we need to enable indexing */
-            if (!indexfilename || !*indexfilename) {
-                strncpy(indexfilename, JPWL_PRIVATEINDEX_NAME, OPJ_PATH_LEN);
-            }
-
-            /* search for different protection methods */
-
-            /* break the option in comma points and parse the result */
-            token = strtok(opj_optarg, ",");
-            while (token != NULL) {
-
-                /* search header error protection method */
-                if (*token == 'h') {
-
-                    static int tile = 0, tilespec = 0, lasttileno = 0;
-
-                    hprot = 1; /* predefined method */
-
-                    if (sscanf(token, "h=%d", &hprot) == 1) {
-                        /* Main header, specified */
-                        if (!((hprot == 0) || (hprot == 1) || (hprot == 16) || (hprot == 32) ||
-                                ((hprot >= 37) && (hprot <= 128)))) {
-                            fprintf(stderr, "ERROR -> invalid main header protection method h = %d\n",
-                                    hprot);
-                            return 1;
-                        }
-                        parameters->jpwl_hprot_MH = hprot;
-
-                    } else if (sscanf(token, "h%d=%d", &tile, &hprot) == 2) {
-                        /* Tile part header, specified */
-                        if (!((hprot == 0) || (hprot == 1) || (hprot == 16) || (hprot == 32) ||
-                                ((hprot >= 37) && (hprot <= 128)))) {
-                            fprintf(stderr, "ERROR -> invalid tile part header protection method h = %d\n",
-                                    hprot);
-                            return 1;
-                        }
-                        if (tile < 0) {
-                            fprintf(stderr,
-                                    "ERROR -> invalid tile part number on protection method t = %d\n", tile);
-                            return 1;
-                        }
-                        if (tilespec < JPWL_MAX_NO_TILESPECS) {
-                            parameters->jpwl_hprot_TPH_tileno[tilespec] = lasttileno = tile;
-                            parameters->jpwl_hprot_TPH[tilespec++] = hprot;
-                        }
-
-                    } else if (sscanf(token, "h%d", &tile) == 1) {
-                        /* Tile part header, unspecified */
-                        if (tile < 0) {
-                            fprintf(stderr,
-                                    "ERROR -> invalid tile part number on protection method t = %d\n", tile);
-                            return 1;
-                        }
-                        if (tilespec < JPWL_MAX_NO_TILESPECS) {
-                            parameters->jpwl_hprot_TPH_tileno[tilespec] = lasttileno = tile;
-                            parameters->jpwl_hprot_TPH[tilespec++] = hprot;
-                        }
-
-
-                    } else if (!strcmp(token, "h")) {
-                        /* Main header, unspecified */
-                        parameters->jpwl_hprot_MH = hprot;
-
-                    } else {
-                        fprintf(stderr, "ERROR -> invalid protection method selection = %s\n", token);
-                        return 1;
-                    };
-
-                }
-
-                /* search packet error protection method */
-                if (*token == 'p') {
-
-                    static int pack = 0, tile = 0, packspec = 0;
-
-                    pprot = 1; /* predefined method */
-
-                    if (sscanf(token, "p=%d", &pprot) == 1) {
-                        /* Method for all tiles and all packets */
-                        if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) ||
-                                ((pprot >= 37) && (pprot <= 128)))) {
-                            fprintf(stderr, "ERROR -> invalid default packet protection method p = %d\n",
-                                    pprot);
-                            return 1;
-                        }
-                        parameters->jpwl_pprot_tileno[0] = 0;
-                        parameters->jpwl_pprot_packno[0] = 0;
-                        parameters->jpwl_pprot[0] = pprot;
-
-                    } else if (sscanf(token, "p%d=%d", &tile, &pprot) == 2) {
-                        /* method specified from that tile on */
-                        if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) ||
-                                ((pprot >= 37) && (pprot <= 128)))) {
-                            fprintf(stderr, "ERROR -> invalid packet protection method p = %d\n", pprot);
-                            return 1;
-                        }
-                        if (tile < 0) {
-                            fprintf(stderr,
-                                    "ERROR -> invalid tile part number on protection method p = %d\n", tile);
-                            return 1;
-                        }
-                        if (packspec < JPWL_MAX_NO_PACKSPECS) {
-                            parameters->jpwl_pprot_tileno[packspec] = tile;
-                            parameters->jpwl_pprot_packno[packspec] = 0;
-                            parameters->jpwl_pprot[packspec++] = pprot;
-                        }
-
-                    } else if (sscanf(token, "p%d:%d=%d", &tile, &pack, &pprot) == 3) {
-                        /* method fully specified from that tile and that packet on */
-                        if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) ||
-                                ((pprot >= 37) && (pprot <= 128)))) {
-                            fprintf(stderr, "ERROR -> invalid packet protection method p = %d\n", pprot);
-                            return 1;
-                        }
-                        if (tile < 0) {
-                            fprintf(stderr,
-                                    "ERROR -> invalid tile part number on protection method p = %d\n", tile);
-                            return 1;
-                        }
-                        if (pack < 0) {
-                            fprintf(stderr, "ERROR -> invalid packet number on protection method p = %d\n",
-                                    pack);
-                            return 1;
-                        }
-                        if (packspec < JPWL_MAX_NO_PACKSPECS) {
-                            parameters->jpwl_pprot_tileno[packspec] = tile;
-                            parameters->jpwl_pprot_packno[packspec] = pack;
-                            parameters->jpwl_pprot[packspec++] = pprot;
-                        }
-
-                    } else if (sscanf(token, "p%d:%d", &tile, &pack) == 2) {
-                        /* default method from that tile and that packet on */
-                        if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) ||
-                                ((pprot >= 37) && (pprot <= 128)))) {
-                            fprintf(stderr, "ERROR -> invalid packet protection method p = %d\n", pprot);
-                            return 1;
-                        }
-                        if (tile < 0) {
-                            fprintf(stderr,
-                                    "ERROR -> invalid tile part number on protection method p = %d\n", tile);
-                            return 1;
-                        }
-                        if (pack < 0) {
-                            fprintf(stderr, "ERROR -> invalid packet number on protection method p = %d\n",
-                                    pack);
-                            return 1;
-                        }
-                        if (packspec < JPWL_MAX_NO_PACKSPECS) {
-                            parameters->jpwl_pprot_tileno[packspec] = tile;
-                            parameters->jpwl_pprot_packno[packspec] = pack;
-                            parameters->jpwl_pprot[packspec++] = pprot;
-                        }
-
-                    } else if (sscanf(token, "p%d", &tile) == 1) {
-                        /* default from a tile on */
-                        if (tile < 0) {
-                            fprintf(stderr,
-                                    "ERROR -> invalid tile part number on protection method p = %d\n", tile);
-                            return 1;
-                        }
-                        if (packspec < JPWL_MAX_NO_PACKSPECS) {
-                            parameters->jpwl_pprot_tileno[packspec] = tile;
-                            parameters->jpwl_pprot_packno[packspec] = 0;
-                            parameters->jpwl_pprot[packspec++] = pprot;
-                        }
-
-
-                    } else if (!strcmp(token, "p")) {
-                        /* all default */
-                        parameters->jpwl_pprot_tileno[0] = 0;
-                        parameters->jpwl_pprot_packno[0] = 0;
-                        parameters->jpwl_pprot[0] = pprot;
-
-                    } else {
-                        fprintf(stderr, "ERROR -> invalid protection method selection = %s\n", token);
-                        return 1;
-                    };
-
-                }
-
-                /* search sensitivity method */
-                if (*token == 's') {
-
-                    static int tile = 0, tilespec = 0, lasttileno = 0;
-
-                    sens = 0; /* predefined: relative error */
-
-                    if (sscanf(token, "s=%d", &sens) == 1) {
-                        /* Main header, specified */
-                        if ((sens < -1) || (sens > 7)) {
-                            fprintf(stderr, "ERROR -> invalid main header sensitivity method s = %d\n",
-                                    sens);
-                            return 1;
-                        }
-                        parameters->jpwl_sens_MH = sens;
-
-                    } else if (sscanf(token, "s%d=%d", &tile, &sens) == 2) {
-                        /* Tile part header, specified */
-                        if ((sens < -1) || (sens > 7)) {
-                            fprintf(stderr, "ERROR -> invalid tile part header sensitivity method s = %d\n",
-                                    sens);
-                            return 1;
-                        }
-                        if (tile < 0) {
-                            fprintf(stderr,
-                                    "ERROR -> invalid tile part number on sensitivity method t = %d\n", tile);
-                            return 1;
-                        }
-                        if (tilespec < JPWL_MAX_NO_TILESPECS) {
-                            parameters->jpwl_sens_TPH_tileno[tilespec] = lasttileno = tile;
-                            parameters->jpwl_sens_TPH[tilespec++] = sens;
-                        }
-
-                    } else if (sscanf(token, "s%d", &tile) == 1) {
-                        /* Tile part header, unspecified */
-                        if (tile < 0) {
-                            fprintf(stderr,
-                                    "ERROR -> invalid tile part number on sensitivity method t = %d\n", tile);
-                            return 1;
-                        }
-                        if (tilespec < JPWL_MAX_NO_TILESPECS) {
-                            parameters->jpwl_sens_TPH_tileno[tilespec] = lasttileno = tile;
-                            parameters->jpwl_sens_TPH[tilespec++] = hprot;
-                        }
-
-                    } else if (!strcmp(token, "s")) {
-                        /* Main header, unspecified */
-                        parameters->jpwl_sens_MH = sens;
-
-                    } else {
-                        fprintf(stderr, "ERROR -> invalid sensitivity method selection = %s\n", token);
-                        return 1;
-                    };
-
-                    parameters->jpwl_sens_size = 2; /* 2 bytes for default size */
-                }
-
-                /* search addressing size */
-                if (*token == 'a') {
-
-
-                    addr = 0; /* predefined: auto */
-
-                    if (sscanf(token, "a=%d", &addr) == 1) {
-                        /* Specified */
-                        if ((addr != 0) && (addr != 2) && (addr != 4)) {
-                            fprintf(stderr, "ERROR -> invalid addressing size a = %d\n", addr);
-                            return 1;
-                        }
-                        parameters->jpwl_sens_addr = addr;
-
-                    } else if (!strcmp(token, "a")) {
-                        /* default */
-                        parameters->jpwl_sens_addr = addr; /* auto for default size */
-
-                    } else {
-                        fprintf(stderr, "ERROR -> invalid addressing selection = %s\n", token);
-                        return 1;
-                    };
-
-                }
-
-                /* search sensitivity size */
-                if (*token == 'z') {
-
-
-                    size = 1; /* predefined: 1 byte */
-
-                    if (sscanf(token, "z=%d", &size) == 1) {
-                        /* Specified */
-                        if ((size != 0) && (size != 1) && (size != 2)) {
-                            fprintf(stderr, "ERROR -> invalid sensitivity size z = %d\n", size);
-                            return 1;
-                        }
-                        parameters->jpwl_sens_size = size;
-
-                    } else if (!strcmp(token, "a")) {
-                        /* default */
-                        parameters->jpwl_sens_size = size; /* 1 for default size */
-
-                    } else {
-                        fprintf(stderr, "ERROR -> invalid size selection = %s\n", token);
-                        return 1;
-                    };
-
-                }
-
-                /* search range method */
-                if (*token == 'g') {
-
-
-                    range = 0; /* predefined: 0 (packet) */
-
-                    if (sscanf(token, "g=%d", &range) == 1) {
-                        /* Specified */
-                        if ((range < 0) || (range > 3)) {
-                            fprintf(stderr, "ERROR -> invalid sensitivity range method g = %d\n", range);
-                            return 1;
-                        }
-                        parameters->jpwl_sens_range = range;
-
-                    } else if (!strcmp(token, "g")) {
-                        /* default */
-                        parameters->jpwl_sens_range = range;
-
-                    } else {
-                        fprintf(stderr, "ERROR -> invalid range selection = %s\n", token);
-                        return 1;
-                    };
-
-                }
-
-                /* next token or bust */
-                token = strtok(NULL, ",");
-            };
-
-
-            /* some info */
-            fprintf(stdout, "Info: JPWL capabilities enabled\n");
-            parameters->jpwl_epc_on = OPJ_TRUE;
-
-        }
-        break;
-#endif /* USE_JPWL */
-        /* <<UniPG */
-        /* ------------------------------------------------------ */
-
-        case 'J': {         /* jpip on */
-            /*parameters->jpip_on = OPJ_TRUE;*/
-        }
-        break;
-        /* ------------------------------------------------------ */
-
-
-        default:
-            fprintf(stderr, "ERROR -> Command line not valid\n");
-            return 1;
-        }
-    } while (c != -1);
-
-    /* check for possible errors */
-    if (parameters->cp_cinema) {
-        if (parameters->tcp_numlayers > 1) {
-            parameters->cp_rsiz = STD_RSIZ;
-            fprintf(stdout,
-                    "Warning: DC profiles do not allow more than one quality layer. The codestream created will not be compliant with the DC profile\n");
-        }
-    }
-    if (img_fol->set_imgdir == 1) {
-        if (!(parameters->infile[0] == 0)) {
-            fprintf(stderr, "Error: options -ImgDir and -i cannot be used together !!\n");
-            return 1;
-        }
-        if (img_fol->set_out_format == 0) {
-            fprintf(stderr,
-                    "Error: When -ImgDir is used, -OutFor <FORMAT> must be used !!\n");
-            fprintf(stderr, "Only one format allowed! Valid formats are j2k and jp2!!\n");
-            return 1;
-        }
-        if (!((parameters->outfile[0] == 0))) {
-            fprintf(stderr, "Error: options -ImgDir and -o cannot be used together !!\n");
-            fprintf(stderr, "Specify OutputFormat using -OutFor<FORMAT> !!\n");
-            return 1;
-        }
-    } else {
-        if ((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) {
-            fprintf(stderr, "Example: %s -i image.ppm  -o image.j2k\n", argv[0]);
-            fprintf(stderr, "    Try: %s -h\n", argv[0]);
-            return 1;
-        }
-    }
-
-    if (parameters->decod_format == RAW_DFMT && raw_cp->rawWidth == 0) {
-        fprintf(stderr, "\nError: invalid raw image parameters\n");
-        fprintf(stderr, "Please use the Format option -F:\n");
-        fprintf(stderr,
-                "-F rawWidth,rawHeight,rawComp,rawBitDepth,s/u (Signed/Unsigned)\n");
-        fprintf(stderr, "Example: -i lena.raw -o lena.j2k -F 512,512,3,8,u\n");
-        fprintf(stderr, "Aborting\n");
-        return 1;
-    }
-
-    if ((parameters->cp_disto_alloc || parameters->cp_fixed_alloc ||
-            parameters->cp_fixed_quality)
-            && (!(parameters->cp_disto_alloc ^ parameters->cp_fixed_alloc ^
-                  parameters->cp_fixed_quality))) {
-        fprintf(stderr, "Error: options -r -q and -f cannot be used together !!\n");
-        return 1;
-    }               /* mod fixed_quality */
-
-    /* if no rate entered, lossless by default */
-    if (parameters->tcp_numlayers == 0) {
-        parameters->tcp_rates[0] = 0;   /* MOD antonin : losslessbug */
-        parameters->tcp_numlayers++;
-        parameters->cp_disto_alloc = 1;
-    }
-
-    if ((parameters->cp_tx0 > parameters->image_offset_x0) ||
-            (parameters->cp_ty0 > parameters->image_offset_y0)) {
-        fprintf(stderr,
-                "Error: Tile offset dimension is unnappropriate --> TX0(%d)<=IMG_X0(%d) TYO(%d)<=IMG_Y0(%d) \n",
-                parameters->cp_tx0, parameters->image_offset_x0, parameters->cp_ty0,
-                parameters->image_offset_y0);
-        return 1;
-    }
-
-    for (i = 0; i < parameters->numpocs; i++) {
-        if (parameters->POC[i].prg == -1) {
-            fprintf(stderr,
-                    "Unrecognized progression order in option -P (POC n %d) [LRCP, RLCP, RPCL, PCRL, CPRL] !!\n",
-                    i + 1);
-        }
-    }
-
-    return 0;
-}
-
-/* -------------------------------------------------------------------------- */
-
-/**
-sample error callback expecting a FILE* client object
-*/
-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
-*/
-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
-*/
-static void info_callback(const char *msg, void *client_data)
-{
-    FILE *stream = (FILE*)client_data;
-    fprintf(stream, "[INFO] %s", msg);
-}
-
-/* -------------------------------------------------------------------------- */
-
-int main(int argc, char **argv)
-{
-    opj_bool bSuccess;
-    opj_cparameters_t parameters;   /* compression parameters */
-    img_fol_t img_fol;
-    opj_event_mgr_t event_mgr;      /* event manager */
-    opj_image_t *image = NULL;
-    int i, num_images;
-    int imageno;
-    dircnt_t *dirptr = NULL;
-    raw_cparameters_t raw_cp;
-    opj_codestream_info_t cstr_info;        /* Codestream information structure */
-    char indexfilename[OPJ_PATH_LEN];   /* index file name */
-
-    /*
-    configure the event callbacks (not required)
-    setting of each callback is optional
-    */
-    memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
-    event_mgr.error_handler = error_callback;
-    event_mgr.warning_handler = warning_callback;
-    event_mgr.info_handler = info_callback;
-
-    /* set encoding parameters to default values */
-    opj_set_default_encoder_parameters(&parameters);
-
-    /* Initialize indexfilename and img_fol */
-    *indexfilename = 0;
-    memset(&img_fol, 0, sizeof(img_fol_t));
-
-    /* parse input and get user encoding parameters */
-    if (parse_cmdline_encoder(argc, argv, &parameters, &img_fol, &raw_cp,
-                              indexfilename) == 1) {
-        return 1;
-    }
-
-    if (parameters.cp_cinema) {
-        img_fol.rates = (float*)malloc(parameters.tcp_numlayers * sizeof(float));
-        for (i = 0; i < parameters.tcp_numlayers; i++) {
-            img_fol.rates[i] = parameters.tcp_rates[i];
-        }
-        cinema_parameters(&parameters);
-    }
-
-    /* Create comment for codestream */
-    if (parameters.cp_comment == NULL) {
-        const char comment[] = "Created by OpenJPEG version ";
-        const size_t clen = strlen(comment);
-        const char *version = opj_version();
-        /* UniPG>> */
-#ifdef USE_JPWL
-        parameters.cp_comment = (char*)malloc(clen + strlen(version) + 11);
-        sprintf(parameters.cp_comment, "%s%s with JPWL", comment, version);
-#else
-        parameters.cp_comment = (char*)malloc(clen + strlen(version) + 1);
-        sprintf(parameters.cp_comment, "%s%s", comment, version);
-#endif
-        /* <<UniPG */
-    }
-
-    /* Read directory if necessary */
-    if (img_fol.set_imgdir == 1) {
-        num_images = get_num_images(img_fol.imgdirpath);
-        dirptr = (dircnt_t*)malloc(sizeof(dircnt_t));
-        if (dirptr) {
-            dirptr->filename_buf = (char*)malloc(num_images * OPJ_PATH_LEN * sizeof(
-                    char)); /* Stores at max 10 image file names*/
-            if (!dirptr->filename_buf) {
-                free(parameters.cp_comment);
-                free(dirptr);
-                return 0;
-            }
-            dirptr->filename = (char**) malloc(num_images * sizeof(char*));
-            if (!dirptr->filename) {
-                free(parameters.cp_comment);
-                free(dirptr);
-                return 0;
-            }
-            for (i = 0; i < num_images; i++) {
-                dirptr->filename[i] = dirptr->filename_buf + i * OPJ_PATH_LEN;
-            }
-        }
-        if (load_images(dirptr, img_fol.imgdirpath) == 1) {
-            free(parameters.cp_comment);
-            free(dirptr);
-            return 0;
-        }
-        if (num_images == 0) {
-            free(parameters.cp_comment);
-            free(dirptr);
-            fprintf(stdout, "Folder is empty\n");
-            return 0;
-        }
-    } else {
-        num_images = 1;
-    }
-    /*Encoding image one by one*/
-    for (imageno = 0; imageno < num_images; imageno++) {
-        image = NULL;
-        fprintf(stderr, "\n");
-
-        if (img_fol.set_imgdir == 1) {
-            if (get_next_file(imageno, dirptr, &img_fol, &parameters)) {
-                fprintf(stderr, "skipping file...\n");
-                continue;
-            }
-        }
-        switch (parameters.decod_format) {
-        case PGX_DFMT:
-            break;
-        case PXM_DFMT:
-            break;
-        case BMP_DFMT:
-            break;
-        case TIF_DFMT:
-            break;
-        case RAW_DFMT:
-            break;
-        case TGA_DFMT:
-            break;
-        case PNG_DFMT:
-            break;
-        default:
-            fprintf(stderr, "skipping file...\n");
-            continue;
-        }
-
-        /* decode the source image */
-        /* ----------------------- */
-
-        switch (parameters.decod_format) {
-        case PGX_DFMT:
-            image = pgxtoimage(parameters.infile, &parameters);
-            if (!image) {
-                fprintf(stderr, "Unable to load pgx file\n");
-                return 1;
-            }
-            break;
-
-        case PXM_DFMT:
-            image = pnmtoimage(parameters.infile, &parameters);
-            if (!image) {
-                fprintf(stderr, "Unable to load pnm file\n");
-                return 1;
-            }
-            break;
-
-        case BMP_DFMT:
-            image = bmptoimage(parameters.infile, &parameters);
-            if (!image) {
-                fprintf(stderr, "Unable to load bmp file\n");
-                return 1;
-            }
-            break;
-#ifdef OPJ_HAVE_LIBTIFF
-        case TIF_DFMT:
-            image = tiftoimage(parameters.infile, &parameters);
-            if (!image) {
-                fprintf(stderr, "Unable to load tiff file\n");
-                return 1;
-            }
-            break;
-#endif /* OPJ_HAVE_LIBTIFF */
-        case RAW_DFMT:
-            image = rawtoimage(parameters.infile, &parameters, &raw_cp);
-            if (!image) {
-                fprintf(stderr, "Unable to load raw file\n");
-                return 1;
-            }
-            break;
-
-        case TGA_DFMT:
-            image = tgatoimage(parameters.infile, &parameters);
-            if (!image) {
-                fprintf(stderr, "Unable to load tga file\n");
-                return 1;
-            }
-            break;
-#ifdef OPJ_HAVE_LIBPNG
-        case PNG_DFMT:
-            image = pngtoimage(parameters.infile, &parameters);
-            if (!image) {
-                fprintf(stderr, "Unable to load png file\n");
-                return 1;
-            }
-            break;
-#endif /* OPJ_HAVE_LIBPNG */
-        }
-        /* Can happen if input file is TIFF or PNG
-         * and OPJ_HAVE_LIBTIF or OPJ_HAVE_LIBPNG is undefined
-        */
-        if (!image) {
-            fprintf(stderr, "Unable to load file: got no image\n");
-            return 1;
-        }
-        /* Decide if MCT should be used */
-        parameters.tcp_mct = image->numcomps == 3 ? 1 : 0;
-
-        if (parameters.cp_cinema) {
-            cinema_setup_encoder(&parameters, image, &img_fol);
-        }
-
-        /* encode the destination image */
-        /* ---------------------------- */
-
-        if (parameters.cod_format == J2K_CFMT) {    /* J2K format output */
-            int codestream_length;
-            size_t res;
-            opj_cio_t *cio = NULL;
-            FILE *f = NULL;
-
-            /* get a J2K compressor handle */
-            opj_cinfo_t* cinfo = opj_create_compress(CODEC_J2K);
-
-            /* catch events using our callbacks and give a local context */
-            opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stderr);
-
-            /* setup the encoder parameters using the current image and user parameters */
-            opj_setup_encoder(cinfo, &parameters, image);
-
-            /* open a byte stream for writing */
-            /* allocate memory for all tiles */
-            cio = opj_cio_open((opj_common_ptr)cinfo, NULL, 0);
-
-            /* encode the image */
-            if (*indexfilename) {               /* If need to extract codestream information*/
-                bSuccess = opj_encode_with_info(cinfo, cio, image, &cstr_info);
-            } else {
-                bSuccess = opj_encode(cinfo, cio, image, NULL);
-            }
-            if (!bSuccess) {
-                opj_cio_close(cio);
-                fprintf(stderr, "failed to encode image\n");
-                return 1;
-            }
-            codestream_length = cio_tell(cio);
-
-            /* write the buffer to disk */
-            f = fopen(parameters.outfile, "wb");
-            if (!f) {
-                fprintf(stderr, "failed to open %s for writing\n", parameters.outfile);
-                return 1;
-            }
-            res = fwrite(cio->buffer, 1, codestream_length, f);
-            if (res < (size_t)codestream_length) {  /* FIXME */
-                fprintf(stderr, "failed to write %d (%s)\n", codestream_length,
-                        parameters.outfile);
-                fclose(f);
-                return 1;
-            }
-            fclose(f);
-
-            fprintf(stderr, "Generated outfile %s\n", parameters.outfile);
-            /* close and free the byte stream */
-            opj_cio_close(cio);
-
-            /* Write the index to disk */
-            if (*indexfilename) {
-                bSuccess = write_index_file(&cstr_info, indexfilename);
-                if (bSuccess) {
-                    fprintf(stderr, "Failed to output index file into [%s]\n", indexfilename);
-                }
-            }
-
-            /* free remaining compression structures */
-            opj_destroy_compress(cinfo);
-            if (*indexfilename) {
-                opj_destroy_cstr_info(&cstr_info);
-            }
-        } else {            /* JP2 format output */
-            int codestream_length;
-            size_t res;
-            opj_cio_t *cio = NULL;
-            FILE *f = NULL;
-            opj_cinfo_t *cinfo = NULL;
-
-            /* get a JP2 compressor handle */
-            cinfo = opj_create_compress(CODEC_JP2);
-
-            /* catch events using our callbacks and give a local context */
-            opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stderr);
-
-            /* setup the encoder parameters using the current image and using user parameters */
-            opj_setup_encoder(cinfo, &parameters, image);
-
-            /* open a byte stream for writing */
-            /* allocate memory for all tiles */
-            cio = opj_cio_open((opj_common_ptr)cinfo, NULL, 0);
-
-            /* encode the image */
-            if (*indexfilename /*|| parameters.jpip_on*/) { /* If need to extract codestream information*/
-                bSuccess = opj_encode_with_info(cinfo, cio, image, &cstr_info);
-            } else {
-                bSuccess = opj_encode(cinfo, cio, image, NULL);
-            }
-            if (!bSuccess) {
-                opj_cio_close(cio);
-                fprintf(stderr, "failed to encode image\n");
-                return 1;
-            }
-            codestream_length = cio_tell(cio);
-
-            /* write the buffer to disk */
-            f = fopen(parameters.outfile, "wb");
-            if (!f) {
-                fprintf(stderr, "failed to open %s for writing\n", parameters.outfile);
-                return 1;
-            }
-            res = fwrite(cio->buffer, 1, codestream_length, f);
-            if (res < (size_t)codestream_length) {  /* FIXME */
-                fprintf(stderr, "failed to write %d (%s)\n", codestream_length,
-                        parameters.outfile);
-                fclose(f);
-                return 1;
-            }
-            fclose(f);
-            fprintf(stderr, "Generated outfile %s\n", parameters.outfile);
-            /* close and free the byte stream */
-            opj_cio_close(cio);
-
-            /* Write the index to disk */
-            if (*indexfilename) {
-                bSuccess = write_index_file(&cstr_info, indexfilename);
-                if (bSuccess) {
-                    fprintf(stderr, "Failed to output index file\n");
-                }
-            }
-
-            /* free remaining compression structures */
-            opj_destroy_compress(cinfo);
-            if (*indexfilename) {
-                opj_destroy_cstr_info(&cstr_info);
-            }
-        }
-
-        /* free image data */
-        opj_image_destroy(image);
-    }
-
-    /* free user parameters structure */
-    if (parameters.cp_comment) {
-        free(parameters.cp_comment);
-    }
-    if (parameters.cp_matrice) {
-        free(parameters.cp_matrice);
-    }
-
-    return 0;
-}
diff --git a/src/bin/jpwl/opj_jpwl_decompress.c b/src/bin/jpwl/opj_jpwl_decompress.c
deleted file mode 100644 (file)
index a73be1c..0000000
+++ /dev/null
@@ -1,900 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2006-2007, Parvatha Elangovan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <math.h>
-
-#ifdef _WIN32
-#include "windirent.h"
-#else
-#include <dirent.h>
-#endif /* _WIN32 */
-
-#ifdef _WIN32
-#include <windows.h>
-#else
-#include <strings.h>
-#define _stricmp strcasecmp
-#define _strnicmp strncasecmp
-#endif /* _WIN32 */
-
-#include "opj_apps_config.h"
-#include "openjpeg.h"
-#include "opj_getopt.h"
-#include "convert.h"
-#include "index.h"
-
-#ifdef OPJ_HAVE_LIBLCMS2
-#include <lcms2.h>
-#endif
-#ifdef OPJ_HAVE_LIBLCMS1
-#include <lcms.h>
-#endif
-#include "color.h"
-
-#include "format_defs.h"
-
-typedef struct dircnt {
-    /** Buffer for holding images read from Directory*/
-    char *filename_buf;
-    /** Pointer to the buffer*/
-    char **filename;
-} dircnt_t;
-
-
-typedef struct img_folder {
-    /** The directory path of the folder containing input images*/
-    char *imgdirpath;
-    /** Output format*/
-    const char *out_format;
-    /** Enable option*/
-    char set_imgdir;
-    /** Enable Cod Format for output*/
-    char set_out_format;
-
-} img_fol_t;
-
-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");
-
-    /* UniPG>> */
-    fprintf(stdout, "List of parameters for the JPEG 2000 "
-#ifdef USE_JPWL
-            "+ JPWL "
-#endif /* USE_JPWL */
-            "decoder:\n");
-    /* <<UniPG */
-    fprintf(stdout, "\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "  -ImgDir \n");
-    fprintf(stdout, "  Image file Directory path \n");
-    fprintf(stdout, "  -OutFor \n");
-    fprintf(stdout, "    REQUIRED only if -ImgDir is used\n");
-    fprintf(stdout, "    Need to specify only format without filename <BMP>  \n");
-    fprintf(stdout,
-            "    Currently accepts PGM, PPM, PNM, PGX, PNG, BMP, TIF, RAW and TGA formats\n");
-    fprintf(stdout, "  -i <compressed file>\n");
-    fprintf(stdout,
-            "    REQUIRED only if an Input image directory not specified\n");
-    fprintf(stdout,
-            "    Currently accepts J2K-files, JP2-files and JPT-files. The file type\n");
-    fprintf(stdout, "    is identified based on its suffix.\n");
-    fprintf(stdout, "  -o <decompressed file>\n");
-    fprintf(stdout, "    REQUIRED\n");
-    fprintf(stdout,
-            "    Currently accepts PGM, PPM, PNM, PGX, PNG, BMP, TIF, RAW and TGA files\n");
-    fprintf(stdout,
-            "    Binary data is written to the file (not ascii). If a PGX\n");
-    fprintf(stdout,
-            "    filename is given, there will be as many output files as there are\n");
-    fprintf(stdout,
-            "    components: an indice starting from 0 will then be appended to the\n");
-    fprintf(stdout,
-            "    output filename, just before the \"pgx\" extension. If a PGM filename\n");
-    fprintf(stdout,
-            "    is given and there are more than one component, only the first component\n");
-    fprintf(stdout, "    will be written to the file.\n");
-    fprintf(stdout, "  -r <reduce factor>\n");
-    fprintf(stdout,
-            "    Set the number of highest resolution levels to be discarded. The\n");
-    fprintf(stdout,
-            "    image resolution is effectively divided by 2 to the power of the\n");
-    fprintf(stdout,
-            "    number of discarded levels. The reduce factor is limited by the\n");
-    fprintf(stdout,
-            "    smallest total number of decomposition levels among tiles.\n");
-    fprintf(stdout, "  -l <number of quality layers to decode>\n");
-    fprintf(stdout,
-            "    Set the maximum number of quality layers to decode. If there are\n");
-    fprintf(stdout,
-            "    less quality layers than the specified number, all the quality layers\n");
-    fprintf(stdout, "    are decoded.\n");
-    fprintf(stdout, "  -x  \n");
-    fprintf(stdout, "    Create an index file *.Idx (-x index_name.Idx) \n");
-    fprintf(stdout, "\n");
-    /* UniPG>> */
-#ifdef USE_JPWL
-    fprintf(stdout, "  -W <options>\n");
-    fprintf(stdout,
-            "    Activates the JPWL correction capability, if the codestream complies.\n");
-    fprintf(stdout,
-            "    Options can be a comma separated list of <param=val> tokens:\n");
-    fprintf(stdout, "    c, c=numcomps\n");
-    fprintf(stdout,
-            "       numcomps is the number of expected components in the codestream\n");
-    fprintf(stdout, "       (search of first EPB rely upon this, default is %d)\n",
-            JPWL_EXPECTED_COMPONENTS);
-#endif /* USE_JPWL */
-    /* <<UniPG */
-    fprintf(stdout, "\n");
-}
-
-/* -------------------------------------------------------------------------- */
-
-int get_num_images(char *imgdirpath)
-{
-    DIR *dir;
-    struct dirent* content;
-    int num_images = 0;
-
-    /*Reading the input images from given input directory*/
-
-    dir = opendir(imgdirpath);
-    if (!dir) {
-        fprintf(stderr, "Could not open Folder %s\n", imgdirpath);
-        return 0;
-    }
-
-    while ((content = readdir(dir)) != NULL) {
-        if (strcmp(".", content->d_name) == 0 || strcmp("..", content->d_name) == 0) {
-            continue;
-        }
-        num_images++;
-    }
-    return num_images;
-}
-
-int load_images(dircnt_t *dirptr, char *imgdirpath)
-{
-    DIR *dir;
-    struct dirent* content;
-    int i = 0;
-
-    /*Reading the input images from given input directory*/
-
-    dir = opendir(imgdirpath);
-    if (!dir) {
-        fprintf(stderr, "Could not open Folder %s\n", imgdirpath);
-        return 1;
-    } else   {
-        fprintf(stderr, "Folder opened successfully\n");
-    }
-
-    while ((content = readdir(dir)) != NULL) {
-        if (strcmp(".", content->d_name) == 0 || strcmp("..", content->d_name) == 0) {
-            continue;
-        }
-
-        strcpy(dirptr->filename[i], content->d_name);
-        i++;
-    }
-    return 0;
-}
-
-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 };
-    char * ext = strrchr(filename, '.');
-    if (ext == NULL) {
-        return -1;
-    }
-    ext++;
-    if (ext) {
-        for (i = 0; i < sizeof(format) / sizeof(*format); i++) {
-            if (_strnicmp(ext, extension[i], 3) == 0) {
-                return format[i];
-            }
-        }
-    }
-
-    return -1;
-}
-
-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] = "";
-
-    strcpy(image_filename, dirptr->filename[imageno]);
-    fprintf(stderr, "File Number %d \"%s\"\n", imageno, image_filename);
-    parameters->decod_format = get_file_format(image_filename);
-    if (parameters->decod_format == -1) {
-        return 1;
-    }
-    sprintf(infilename, "%s/%s", img_fol->imgdirpath, image_filename);
-    strncpy(parameters->infile, infilename, sizeof(infilename));
-
-    /*Set output file*/
-    strcpy(temp_ofname, strtok(image_filename, "."));
-    while ((temp_p = strtok(NULL, ".")) != NULL) {
-        strcat(temp_ofname, temp1);
-        sprintf(temp1, ".%s", temp_p);
-    }
-    if (img_fol->set_out_format == 1) {
-        sprintf(outfilename, "%s/%s.%s", img_fol->imgdirpath, temp_ofname,
-                img_fol->out_format);
-        strncpy(parameters->outfile, outfilename, sizeof(outfilename));
-    }
-    return 0;
-}
-
-/* -------------------------------------------------------------------------- */
-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'},
-    };
-
-    const char optlist[] = "i:o:r:l:x:"
-
-                           /* UniPG>> */
-#ifdef USE_JPWL
-                           "W:"
-#endif /* USE_JPWL */
-                           /* <<UniPG */
-                           "h"     ;
-    totlen = sizeof(long_option);
-    img_fol->set_out_format = 0;
-    do {
-        c = opj_getopt_long(argc, argv, optlist, long_option, totlen);
-        if (c == -1) {
-            break;
-        }
-        switch (c) {
-        case 'i': {         /* input file */
-            char *infile = opj_optarg;
-            parameters->decod_format = get_file_format(infile);
-            switch (parameters->decod_format) {
-            case J2K_CFMT:
-            case JP2_CFMT:
-            case JPT_CFMT:
-                break;
-            default:
-                fprintf(stderr,
-                        "!! Unrecognized format for infile : %s [accept only *.j2k, *.jp2, *.jpc or *.jpt] !!\n\n",
-                        infile);
-                return 1;
-            }
-            strncpy(parameters->infile, infile, sizeof(parameters->infile) - 1);
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 'o': {         /* output file */
-            char *outfile = opj_optarg;
-            parameters->cod_format = get_file_format(outfile);
-            switch (parameters->cod_format) {
-            case PGX_DFMT:
-            case PXM_DFMT:
-            case BMP_DFMT:
-            case TIF_DFMT:
-            case RAW_DFMT:
-            case TGA_DFMT:
-            case PNG_DFMT:
-                break;
-            default:
-                fprintf(stderr,
-                        "Unknown output format image %s [only *.pnm, *.pgm, *.ppm, *.pgx, *.bmp, *.tif, *.raw or *.tga]!! \n",
-                        outfile);
-                return 1;
-            }
-            strncpy(parameters->outfile, outfile, sizeof(parameters->outfile) - 1);
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 'O': {         /* output format */
-            char outformat[50];
-            char *of = opj_optarg;
-            sprintf(outformat, ".%s", of);
-            img_fol->set_out_format = 1;
-            parameters->cod_format = get_file_format(outformat);
-            switch (parameters->cod_format) {
-            case PGX_DFMT:
-                img_fol->out_format = "pgx";
-                break;
-            case PXM_DFMT:
-                img_fol->out_format = "ppm";
-                break;
-            case BMP_DFMT:
-                img_fol->out_format = "bmp";
-                break;
-            case TIF_DFMT:
-                img_fol->out_format = "tif";
-                break;
-            case RAW_DFMT:
-                img_fol->out_format = "raw";
-                break;
-            case TGA_DFMT:
-                img_fol->out_format = "raw";
-                break;
-            case PNG_DFMT:
-                img_fol->out_format = "png";
-                break;
-            default:
-                fprintf(stderr,
-                        "Unknown output format image %s [only *.pnm, *.pgm, *.ppm, *.pgx, *.bmp, *.tif, *.raw or *.tga]!! \n",
-                        outformat);
-                return 1;
-                break;
-            }
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-
-        case 'r': {     /* reduce option */
-            sscanf(opj_optarg, "%d", &parameters->cp_reduce);
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-
-        case 'l': {     /* layering option */
-            sscanf(opj_optarg, "%d", &parameters->cp_layer);
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-
-        case 'h':           /* display an help description */
-            decode_help_display();
-            return 1;
-
-        /* ------------------------------------------------------ */
-
-        case 'y': {         /* Image Directory path */
-            img_fol->imgdirpath = (char*)malloc(strlen(opj_optarg) + 1);
-            strcpy(img_fol->imgdirpath, opj_optarg);
-            img_fol->set_imgdir = 1;
-        }
-        break;
-        /* ----------------------------------------------------- */
-        case 'x': {         /* Creation of index file */
-            char *index = opj_optarg;
-            strncpy(indexfilename, index, OPJ_PATH_LEN);
-        }
-        break;
-            /* ----------------------------------------------------- */
-            /* UniPG>> */
-#ifdef USE_JPWL
-
-        case 'W': {         /* activate JPWL correction */
-            char *token = NULL;
-
-            token = strtok(opj_optarg, ",");
-            while (token != NULL) {
-
-                /* search expected number of components */
-                if (*token == 'c') {
-
-                    static int compno;
-
-                    compno = JPWL_EXPECTED_COMPONENTS; /* predefined no. of components */
-
-                    if (sscanf(token, "c=%d", &compno) == 1) {
-                        /* Specified */
-                        if ((compno < 1) || (compno > 256)) {
-                            fprintf(stderr, "ERROR -> invalid number of components c = %d\n", compno);
-                            return 1;
-                        }
-                        parameters->jpwl_exp_comps = compno;
-
-                    } else if (!strcmp(token, "c")) {
-                        /* default */
-                        parameters->jpwl_exp_comps = compno; /* auto for default size */
-
-                    } else {
-                        fprintf(stderr, "ERROR -> invalid components specified = %s\n", token);
-                        return 1;
-                    };
-                }
-
-                /* search maximum number of tiles */
-                if (*token == 't') {
-
-                    static int tileno;
-
-                    tileno = JPWL_MAXIMUM_TILES; /* maximum no. of tiles */
-
-                    if (sscanf(token, "t=%d", &tileno) == 1) {
-                        /* Specified */
-                        if ((tileno < 1) || (tileno > JPWL_MAXIMUM_TILES)) {
-                            fprintf(stderr, "ERROR -> invalid number of tiles t = %d\n", tileno);
-                            return 1;
-                        }
-                        parameters->jpwl_max_tiles = tileno;
-
-                    } else if (!strcmp(token, "t")) {
-                        /* default */
-                        parameters->jpwl_max_tiles = tileno; /* auto for default size */
-
-                    } else {
-                        fprintf(stderr, "ERROR -> invalid tiles specified = %s\n", token);
-                        return 1;
-                    };
-                }
-
-                /* next token or bust */
-                token = strtok(NULL, ",");
-            };
-            parameters->jpwl_correct = OPJ_TRUE;
-            fprintf(stdout, "JPWL correction capability activated\n");
-            fprintf(stdout, "- expecting %d components\n", parameters->jpwl_exp_comps);
-        }
-        break;
-#endif /* USE_JPWL */
-        /* <<UniPG */
-
-        /* ----------------------------------------------------- */
-
-        default:
-            fprintf(stderr, "WARNING -> this option is not valid \"-%c %s\"\n", c,
-                    opj_optarg);
-            break;
-        }
-    } while (c != -1);
-
-    /* check for possible errors */
-    if (img_fol->set_imgdir == 1) {
-        if (!(parameters->infile[0] == 0)) {
-            fprintf(stderr, "Error: options -ImgDir and -i cannot be used together !!\n");
-            return 1;
-        }
-        if (img_fol->set_out_format == 0) {
-            fprintf(stderr,
-                    "Error: When -ImgDir is used, -OutFor <FORMAT> must be used !!\n");
-            fprintf(stderr,
-                    "Only one format allowed! Valid format PGM, PPM, PNM, PGX, BMP, TIF, RAW and TGA!!\n");
-            return 1;
-        }
-        if (!((parameters->outfile[0] == 0))) {
-            fprintf(stderr, "Error: options -ImgDir and -o cannot be used together !!\n");
-            return 1;
-        }
-    } else {
-        if ((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) {
-            fprintf(stderr, "Example: %s -i image.j2k -o image.pgm\n", argv[0]);
-            fprintf(stderr, "    Try: %s -h\n", argv[0]);
-            return 1;
-        }
-    }
-
-    return 0;
-}
-
-/* -------------------------------------------------------------------------- */
-
-/**
-sample error callback expecting a FILE* client object
-*/
-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)
-{
-    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)
-{
-    (void)client_data;
-    fprintf(stdout, "[INFO] %s", msg);
-}
-
-/* -------------------------------------------------------------------------- */
-
-int main(int argc, char **argv)
-{
-    opj_dparameters_t parameters;   /* decompression parameters */
-    img_fol_t img_fol;
-    opj_event_mgr_t event_mgr;      /* event manager */
-    opj_image_t *image = NULL;
-    FILE *fsrc = NULL;
-    unsigned char *src = NULL;
-    int file_length;
-    int num_images;
-    int i, imageno;
-    dircnt_t *dirptr = NULL;
-    opj_dinfo_t* dinfo = NULL;  /* handle to a decompressor */
-    opj_cio_t *cio = NULL;
-    opj_codestream_info_t cstr_info;  /* Codestream information structure */
-    char indexfilename[OPJ_PATH_LEN];   /* index file name */
-
-    /* configure the event callbacks (not required) */
-    memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
-    event_mgr.error_handler = error_callback;
-    event_mgr.warning_handler = warning_callback;
-    event_mgr.info_handler = info_callback;
-
-    /* set decoding parameters to default values */
-    opj_set_default_decoder_parameters(&parameters);
-
-    /* Initialize indexfilename and img_fol */
-    *indexfilename = 0;
-    memset(&img_fol, 0, sizeof(img_fol_t));
-
-    /* parse input and get user encoding parameters */
-    if (parse_cmdline_decoder(argc, argv, &parameters, &img_fol,
-                              indexfilename) == 1) {
-        return 1;
-    }
-
-    /* Initialize reading of directory */
-    if (img_fol.set_imgdir == 1) {
-        num_images = get_num_images(img_fol.imgdirpath);
-
-        dirptr = (dircnt_t*)malloc(sizeof(dircnt_t));
-        if (dirptr) {
-            dirptr->filename_buf = (char*)malloc(num_images * OPJ_PATH_LEN * sizeof(
-                    char)); /* Stores at max 10 image file names*/
-            if (!dirptr->filename_buf) {
-                free(dirptr);
-                return 1;
-            }
-            dirptr->filename = (char**) malloc(num_images * sizeof(char*));
-            if (!dirptr->filename) {
-                free(dirptr);
-                return 1;
-            }
-
-            for (i = 0; i < num_images; i++) {
-                dirptr->filename[i] = dirptr->filename_buf + i * OPJ_PATH_LEN;
-            }
-        }
-        if (load_images(dirptr, img_fol.imgdirpath) == 1) {
-            return 1;
-        }
-        if (num_images == 0) {
-            fprintf(stdout, "Folder is empty\n");
-            return 1;
-        }
-    } else {
-        num_images = 1;
-    }
-
-    /*Encoding image one by one*/
-    for (imageno = 0; imageno < num_images ; imageno++)  {
-        image = NULL;
-        fprintf(stderr, "\n");
-
-        if (img_fol.set_imgdir == 1) {
-            if (get_next_file(imageno, dirptr, &img_fol, &parameters)) {
-                fprintf(stderr, "skipping file...\n");
-                continue;
-            }
-        }
-
-        /* read the input file and put it in memory */
-        /* ---------------------------------------- */
-        fsrc = fopen(parameters.infile, "rb");
-        if (!fsrc) {
-            fprintf(stderr, "ERROR -> failed to open %s for reading\n", parameters.infile);
-            return 1;
-        }
-        fseek(fsrc, 0, SEEK_END);
-        file_length = ftell(fsrc);
-        fseek(fsrc, 0, SEEK_SET);
-        src = (unsigned char *) malloc(file_length);
-        if (fread(src, 1, file_length, fsrc) != (size_t)file_length) {
-            free(src);
-            fclose(fsrc);
-            fprintf(stderr,
-                    "\nERROR: fread return a number of element different from the expected.\n");
-            return 1;
-        }
-        fclose(fsrc);
-
-        /* decode the code-stream */
-        /* ---------------------- */
-
-        switch (parameters.decod_format) {
-        case J2K_CFMT: {
-            /* JPEG-2000 codestream */
-
-            /* get a decoder handle */
-            dinfo = opj_create_decompress(CODEC_J2K);
-
-            /* catch events using our callbacks and give a local context */
-            opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
-
-            /* setup the decoder decoding parameters using user parameters */
-            opj_setup_decoder(dinfo, &parameters);
-
-            /* open a byte stream */
-            cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length);
-
-            /* decode the stream and fill the image structure */
-            if (*indexfilename) {           /* If need to extract codestream information*/
-                image = opj_decode_with_info(dinfo, cio, &cstr_info);
-            } else {
-                image = opj_decode(dinfo, cio);
-            }
-            if (!image) {
-                fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n");
-                opj_destroy_decompress(dinfo);
-                opj_cio_close(cio);
-                free(src);
-                return 1;
-            }
-
-            /* close the byte stream */
-            opj_cio_close(cio);
-
-            /* Write the index to disk */
-            if (*indexfilename) {
-                opj_bool bSuccess;
-                bSuccess = write_index_file(&cstr_info, indexfilename);
-                if (bSuccess) {
-                    fprintf(stderr, "Failed to output index file\n");
-                }
-            }
-        }
-        break;
-
-        case JP2_CFMT: {
-            /* JPEG 2000 compressed image data */
-
-            /* get a decoder handle */
-            dinfo = opj_create_decompress(CODEC_JP2);
-
-            /* catch events using our callbacks and give a local context */
-            opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
-
-            /* setup the decoder decoding parameters using the current image and user parameters */
-            opj_setup_decoder(dinfo, &parameters);
-
-            /* open a byte stream */
-            cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length);
-
-            /* decode the stream and fill the image structure */
-            if (*indexfilename) {           /* If need to extract codestream information*/
-                image = opj_decode_with_info(dinfo, cio, &cstr_info);
-            } else {
-                image = opj_decode(dinfo, cio);
-            }
-            if (!image) {
-                fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n");
-                opj_destroy_decompress(dinfo);
-                opj_cio_close(cio);
-                free(src);
-                return 1;
-            }
-
-            /* close the byte stream */
-            opj_cio_close(cio);
-
-            /* Write the index to disk */
-            if (*indexfilename) {
-                opj_bool bSuccess;
-                bSuccess = write_index_file(&cstr_info, indexfilename);
-                if (bSuccess) {
-                    fprintf(stderr, "Failed to output index file\n");
-                }
-            }
-        }
-        break;
-
-        case JPT_CFMT: {
-            /* JPEG 2000, JPIP */
-
-            /* get a decoder handle */
-            dinfo = opj_create_decompress(CODEC_JPT);
-
-            /* catch events using our callbacks and give a local context */
-            opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
-
-            /* setup the decoder decoding parameters using user parameters */
-            opj_setup_decoder(dinfo, &parameters);
-
-            /* open a byte stream */
-            cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length);
-
-            /* decode the stream and fill the image structure */
-            if (*indexfilename) {           /* If need to extract codestream information*/
-                image = opj_decode_with_info(dinfo, cio, &cstr_info);
-            } else {
-                image = opj_decode(dinfo, cio);
-            }
-            if (!image) {
-                fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n");
-                opj_destroy_decompress(dinfo);
-                opj_cio_close(cio);
-                free(src);
-                return 1;
-            }
-
-            /* close the byte stream */
-            opj_cio_close(cio);
-
-            /* Write the index to disk */
-            if (*indexfilename) {
-                opj_bool bSuccess;
-                bSuccess = write_index_file(&cstr_info, indexfilename);
-                if (bSuccess) {
-                    fprintf(stderr, "Failed to output index file\n");
-                }
-            }
-        }
-        break;
-
-        default:
-            fprintf(stderr, "skipping file..\n");
-            continue;
-        }
-
-        /* free the memory containing the code-stream */
-        free(src);
-        src = NULL;
-
-        if (image->color_space == CLRSPC_SYCC) {
-            color_sycc_to_rgb(image);
-        }
-
-        if (image->icc_profile_buf) {
-#if defined(OPJ_HAVE_LIBLCMS1) || defined(OPJ_HAVE_LIBLCMS2)
-            color_apply_icc_profile(image);
-#endif
-
-            free(image->icc_profile_buf);
-            image->icc_profile_buf = NULL;
-            image->icc_profile_len = 0;
-        }
-
-        /* create output image */
-        /* ------------------- */
-        switch (parameters.cod_format) {
-        case PXM_DFMT:          /* PNM PGM PPM */
-            if (imagetopnm(image, parameters.outfile)) {
-                fprintf(stdout, "Outfile %s not generated\n", parameters.outfile);
-            } else {
-                fprintf(stdout, "Generated Outfile %s\n", parameters.outfile);
-            }
-            break;
-
-        case PGX_DFMT:          /* PGX */
-            if (imagetopgx(image, parameters.outfile)) {
-                fprintf(stdout, "Outfile %s not generated\n", parameters.outfile);
-            } else {
-                fprintf(stdout, "Generated Outfile %s\n", parameters.outfile);
-            }
-            break;
-
-        case BMP_DFMT:          /* BMP */
-            if (imagetobmp(image, parameters.outfile)) {
-                fprintf(stdout, "Outfile %s not generated\n", parameters.outfile);
-            } else {
-                fprintf(stdout, "Generated Outfile %s\n", parameters.outfile);
-            }
-            break;
-#ifdef OPJ_HAVE_LIBTIFF
-        case TIF_DFMT:          /* TIFF */
-            if (imagetotif(image, parameters.outfile)) {
-                fprintf(stdout, "Outfile %s not generated\n", parameters.outfile);
-            } else {
-                fprintf(stdout, "Generated Outfile %s\n", parameters.outfile);
-            }
-            break;
-#endif /* OPJ_HAVE_LIBTIFF */
-        case RAW_DFMT:          /* RAW */
-            if (imagetoraw(image, parameters.outfile)) {
-                fprintf(stdout, "Error generating raw file. Outfile %s not generated\n",
-                        parameters.outfile);
-            } else {
-                fprintf(stdout, "Successfully generated Outfile %s\n", parameters.outfile);
-            }
-            break;
-
-        case TGA_DFMT:          /* TGA */
-            if (imagetotga(image, parameters.outfile)) {
-                fprintf(stdout, "Error generating tga file. Outfile %s not generated\n",
-                        parameters.outfile);
-            } else {
-                fprintf(stdout, "Successfully generated Outfile %s\n", parameters.outfile);
-            }
-            break;
-#ifdef OPJ_HAVE_LIBPNG
-        case PNG_DFMT:          /* PNG */
-            if (imagetopng(image, parameters.outfile)) {
-                fprintf(stdout, "Error generating png file. Outfile %s not generated\n",
-                        parameters.outfile);
-            } else {
-                fprintf(stdout, "Successfully generated Outfile %s\n", parameters.outfile);
-            }
-            break;
-#endif /* OPJ_HAVE_LIBPNG */
-        /* Can happen if output file is TIFF or PNG
-         * and OPJ_HAVE_LIBTIF or OPJ_HAVE_LIBPNG is undefined
-        */
-        default:
-            fprintf(stderr, "Outfile %s not generated\n", parameters.outfile);
-        }
-
-        /* free remaining structures */
-        if (dinfo) {
-            opj_destroy_decompress(dinfo);
-        }
-        /* free codestream information structure */
-        if (*indexfilename) {
-            opj_destroy_cstr_info(&cstr_info);
-        }
-        /* free image data structure */
-        opj_image_destroy(image);
-
-    }
-    return 0;
-}
-/*end main*/
-
-
-
-
diff --git a/src/bin/jpwl/windirent.h b/src/bin/jpwl/windirent.h
deleted file mode 100644 (file)
index b7ed9a3..0000000
+++ /dev/null
@@ -1,680 +0,0 @@
-
-/*
- * uce-dirent.h - operating system independent dirent implementation
- *
- * Copyright (C) 1998-2002  Toni Ronkko
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * ``Software''), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL TONI RONKKO BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- *
- * May 28 1998, Toni Ronkko <tronkko@messi.uku.fi>
- *
- * $Id: uce-dirent.h,v 1.7 2002/05/13 10:48:35 tr Exp $
- *
- * $Log: uce-dirent.h,v $
- * Revision 1.7  2002/05/13 10:48:35  tr
- * embedded some source code directly to the header so that no source
- * modules need to be included in the MS Visual C project using the
- * interface, removed all the dependencies to other headers of the `uce'
- * library so that the header can be made public
- *
- * Revision 1.6  2002/04/12 16:22:04  tr
- * Unified Compiling Environment (UCE) replaced `std' library
- *
- * Revision 1.5  2001/07/20 16:33:40  tr
- * moved to `std' library and re-named defines accordingly
- *
- * Revision 1.4  2001/07/10 16:47:18  tronkko
- * revised comments
- *
- * Revision 1.3  2001/01/11 13:16:43  tr
- * using ``uce-machine.h'' for finding out defines such as `FREEBSD'
- *
- * Revision 1.2  2000/10/08 16:00:41  tr
- * copy of FreeBSD man page
- *
- * Revision 1.1  2000/07/10 05:53:16  tr
- * Initial revision
- *
- * Revision 1.2  1998/07/19 18:29:14  tr
- * Added error reporting capabilities and some asserts.
- *
- * Revision 1.1  1998/07/04 16:27:51  tr
- * Initial revision
- *
- *
- * MSVC 1.0 scans automatic dependencies incorrectly when your project
- * contains this very header.  The problem is that MSVC cannot handle
- * include directives inside #if..#endif block those are never entered.
- * Since this header ought to compile in many different operating systems,
- * there had to be several conditional blocks that are compiled only in
- * operating systems for what they were designed for.  MSVC 1.0 cannot
- * handle inclusion of sys/dir.h in a part that is compiled only in Apollo
- * operating system.  To fix the problem you need to insert DIR.H into
- * SYSINCL.DAT located in MSVC\BIN directory and restart visual C++.
- * Consult manuals for more informaton about the problem.
- *
- * Since many UNIX systems have dirent.h we assume to have one also.
- * However, if your UNIX system does not have dirent.h you can download one
- * for example at: http://ftp.uni-mannheim.de/ftp/GNU/dirent/dirent.tar.gz.
- * You can also see if you have one of dirent.h, direct.h, dir.h, ndir.h,
- * sys/dir.h and sys/ndir.h somewhere.  Try defining HAVE_DIRENT_H,
- * HAVE_DIRECT_H, HAVE_DIR_H, HAVE_NDIR_H, HAVE_SYS_DIR_H and
- * HAVE_SYS_NDIR_H according to the files found.
- */
-#ifndef DIRENT_H
-#define DIRENT_H
-#define DIRENT_H_INCLUDED
-
-/* find out platform */
-#if defined(MSDOS)                             /* MS-DOS */
-#elif defined(__MSDOS__)                       /* Turbo C/Borland */
-# define MSDOS
-#elif defined(__DOS__)                         /* Watcom */
-# define MSDOS
-#endif
-
-#if defined(WIN32)                             /* MS-Windows */
-#elif defined(__NT__)                          /* Watcom */
-# define WIN32
-#elif defined(_WIN32)                          /* Microsoft */
-# define WIN32
-#elif defined(__WIN32__)                       /* Borland */
-# define WIN32
-#endif
-
-/*
- * See what kind of dirent interface we have unless autoconf has already
- * determinated that.
- */
-#if !defined(HAVE_DIRENT_H) && !defined(HAVE_DIRECT_H) && !defined(HAVE_SYS_DIR_H) && !defined(HAVE_NDIR_H) && !defined(HAVE_SYS_NDIR_H) && !defined(HAVE_DIR_H)
-# if defined(_MSC_VER)                         /* Microsoft C/C++ */
-/* no dirent.h */
-# elif defined(__MINGW32__)                    /* MinGW */
-/* no dirent.h */
-# elif defined(__BORLANDC__)                   /* Borland C/C++ */
-#   define HAVE_DIRENT_H
-#   define VOID_CLOSEDIR
-# elif defined(__TURBOC__)                     /* Borland Turbo C */
-/* no dirent.h */
-# elif defined(__WATCOMC__)                    /* Watcom C/C++ */
-#   define HAVE_DIRECT_H
-# elif defined(__apollo)                       /* Apollo */
-#   define HAVE_SYS_DIR_H
-# elif defined(__hpux)                         /* HP-UX */
-#   define HAVE_DIRENT_H
-# elif (defined(__alpha) || defined(__alpha__)) && !defined(__linux__)  /* Alpha OSF1 */
-#   error "not implemented"
-# elif defined(__sgi)                          /* Silicon Graphics */
-#   define HAVE_DIRENT_H
-# elif defined(sun) || defined(__sun)           /* Sun Solaris */
-#   define HAVE_DIRENT_H
-# elif defined(__FreeBSD__)                    /* FreeBSD */
-#   define HAVE_DIRENT_H
-# elif defined(__linux__)                      /* Linux */
-#   define HAVE_DIRENT_H
-# elif defined(__GNUC__)                       /* GNU C/C++ */
-#   define HAVE_DIRENT_H
-# else
-#   error "not implemented"
-# endif
-#endif
-
-/* include proper interface headers */
-#if defined(HAVE_DIRENT_H)
-# include <dirent.h>
-# ifdef FREEBSD
-#   define NAMLEN(dp) ((int)((dp)->d_namlen))
-# else
-#   define NAMLEN(dp) ((int)(strlen((dp)->d_name)))
-# endif
-
-#elif defined(HAVE_NDIR_H)
-# include <ndir.h>
-# define NAMLEN(dp) ((int)((dp)->d_namlen))
-
-#elif defined(HAVE_SYS_NDIR_H)
-# include <sys/ndir.h>
-# define NAMLEN(dp) ((int)((dp)->d_namlen))
-
-#elif defined(HAVE_DIRECT_H)
-# include <direct.h>
-# define NAMLEN(dp) ((int)((dp)->d_namlen))
-
-#elif defined(HAVE_DIR_H)
-# include <dir.h>
-# define NAMLEN(dp) ((int)((dp)->d_namlen))
-
-#elif defined(HAVE_SYS_DIR_H)
-# include <sys/types.h>
-# include <sys/dir.h>
-# ifndef dirent
-#   define dirent direct
-# endif
-# define NAMLEN(dp) ((int)((dp)->d_namlen))
-
-#elif defined(MSDOS) || defined(WIN32)
-
-/* figure out type of underlaying directory interface to be used */
-# if defined(WIN32)
-#   define DIRENT_WIN32_INTERFACE
-# elif defined(MSDOS)
-#   define DIRENT_MSDOS_INTERFACE
-# else
-#   error "missing native dirent interface"
-# endif
-
-/*** WIN32 specifics ***/
-# if defined(DIRENT_WIN32_INTERFACE)
-#   include <windows.h>
-#   if !defined(DIRENT_MAXNAMLEN)
-#     define DIRENT_MAXNAMLEN (MAX_PATH)
-#   endif
-
-
-/*** MS-DOS specifics ***/
-# elif defined(DIRENT_MSDOS_INTERFACE)
-#   include <dos.h>
-
-/* Borland defines file length macros in dir.h */
-#   if defined(__BORLANDC__)
-#     include <dir.h>
-#     if !defined(DIRENT_MAXNAMLEN)
-#       define DIRENT_MAXNAMLEN ((MAXFILE)+(MAXEXT))
-#     endif
-#     if !defined(_find_t)
-#       define _find_t find_t
-#     endif
-
-/* Turbo C defines ffblk structure in dir.h */
-#   elif defined(__TURBOC__)
-#     include <dir.h>
-#     if !defined(DIRENT_MAXNAMLEN)
-#       define DIRENT_MAXNAMLEN ((MAXFILE)+(MAXEXT))
-#     endif
-#     define DIRENT_USE_FFBLK
-
-/* MSVC */
-#   elif defined(_MSC_VER)
-#     if !defined(DIRENT_MAXNAMLEN)
-#       define DIRENT_MAXNAMLEN (12)
-#     endif
-
-/* Watcom */
-#   elif defined(__WATCOMC__)
-#     if !defined(DIRENT_MAXNAMLEN)
-#       if defined(__OS2__) || defined(__NT__)
-#         define DIRENT_MAXNAMLEN (255)
-#       else
-#         define DIRENT_MAXNAMLEN (12)
-#       endif
-#     endif
-
-#   endif
-# endif
-
-/*** generic MS-DOS and MS-Windows stuff ***/
-# if !defined(NAME_MAX) && defined(DIRENT_MAXNAMLEN)
-#   define NAME_MAX DIRENT_MAXNAMLEN
-# endif
-# if NAME_MAX < DIRENT_MAXNAMLEN
-#   error "assertion failed: NAME_MAX >= DIRENT_MAXNAMLEN"
-# endif
-
-
-/*
- * Substitute for real dirent structure.  Note that `d_name' field is a
- * true character array although we have it copied in the implementation
- * dependent data.  We could save some memory if we had declared `d_name'
- * as a pointer referring the name within implementation dependent data.
- * We have not done that since some code may rely on sizeof(d_name) to be
- * something other than four.  Besides, directory entries are typically so
- * small that it takes virtually no time to copy them from place to place.
- */
-typedef struct dirent {
-    char d_name[NAME_MAX + 1];
-
-    /*** Operating system specific part ***/
-# if defined(DIRENT_WIN32_INTERFACE)       /*WIN32*/
-    WIN32_FIND_DATA data;
-# elif defined(DIRENT_MSDOS_INTERFACE)     /*MSDOS*/
-#   if defined(DIRENT_USE_FFBLK)
-    struct ffblk data;
-#   else
-    struct _find_t data;
-#   endif
-# endif
-} dirent;
-
-/* DIR substitute structure containing directory name.  The name is
- * essential for the operation of ``rewinndir'' function. */
-typedef struct DIR {
-    char          *dirname;                    /* directory being scanned */
-    dirent        current;                     /* current entry */
-    int           dirent_filled;               /* is current un-processed? */
-
-    /*** Operating system specific part ***/
-#  if defined(DIRENT_WIN32_INTERFACE)
-    HANDLE        search_handle;
-#  elif defined(DIRENT_MSDOS_INTERFACE)
-#  endif
-} DIR;
-
-# ifdef __cplusplus
-extern "C" {
-# endif
-
-/* supply prototypes for dirent functions */
-static DIR *opendir(const char *dirname);
-static struct dirent *readdir(DIR *dirp);
-static int closedir(DIR *dirp);
-static void rewinddir(DIR *dirp);
-
-/*
- * Implement dirent interface as static functions so that the user does not
- * need to change his project in any way to use dirent function.  With this
- * it is sufficient to include this very header from source modules using
- * dirent functions and the functions will be pulled in automatically.
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <errno.h>
-
-/* use ffblk instead of _find_t if requested */
-#if defined(DIRENT_USE_FFBLK)
-# define _A_ARCH   (FA_ARCH)
-# define _A_HIDDEN (FA_HIDDEN)
-# define _A_NORMAL (0)
-# define _A_RDONLY (FA_RDONLY)
-# define _A_SUBDIR (FA_DIREC)
-# define _A_SYSTEM (FA_SYSTEM)
-# define _A_VOLID  (FA_LABEL)
-# define _dos_findnext(dest) findnext(dest)
-# define _dos_findfirst(name,flags,dest) findfirst(name,dest,flags)
-#endif
-
-static int _initdir(DIR *p);
-static const char *_getdirname(const struct dirent *dp);
-static void _setdirname(struct DIR *dirp);
-
-/*
- * <function name="opendir">
- * <intro>open directory stream for reading
- * <syntax>DIR *opendir (const char *dirname);
- *
- * <desc>Open named directory stream for read and return pointer to the
- * internal working area that is used for retrieving individual directory
- * entries.  The internal working area has no fields of your interest.
- *
- * <ret>Returns a pointer to the internal working area or NULL in case the
- * directory stream could not be opened.  Global `errno' variable will set
- * in case of error as follows:
- *
- * <table>
- * [EACESS  |Permission denied.
- * [EMFILE  |Too many open files used by the process.
- * [ENFILE  |Too many open files in system.
- * [ENOENT  |Directory does not exist.
- * [ENOMEM  |Insufficient memory.
- * [ENOTDIR |dirname does not refer to directory.  This value is not
- *           reliable on MS-DOS and MS-Windows platforms.  Many
- *           implementations return ENOENT even when the name refers to a
- *           file.]
- * </table>
- * </function>
- */
-static DIR *opendir(const char *dirname)
-{
-    DIR *dirp;
-    assert(dirname != NULL);
-
-    dirp = (DIR*)malloc(sizeof(struct DIR));
-    if (dirp != NULL) {
-        char *p;
-
-        /* allocate room for directory name */
-        dirp->dirname = (char*) malloc(strlen(dirname) + 1 + strlen("\\*.*"));
-        if (dirp->dirname == NULL) {
-            /* failed to duplicate directory name.  errno set by malloc() */
-            free(dirp);
-            return NULL;
-        }
-        /* Copy directory name while appending directory separator and "*.*".
-         * Directory separator is not appended if the name already ends with
-         * drive or directory separator.  Directory separator is assumed to be
-         * '/' or '\' and drive separator is assumed to be ':'. */
-        strcpy(dirp->dirname, dirname);
-        p = strchr(dirp->dirname, '\0');
-        if (dirp->dirname < p  &&
-                *(p - 1) != '\\'  &&  *(p - 1) != '/'  &&  *(p - 1) != ':') {
-            strcpy(p++, "\\");
-        }
-# ifdef DIRENT_WIN32_INTERFACE
-        strcpy(p, "*");  /*scan files with and without extension in win32*/
-# else
-        strcpy(p, "*.*");  /*scan files with and without extension in DOS*/
-# endif
-
-        /* open stream */
-        if (_initdir(dirp) == 0) {
-            /* initialization failed */
-            free(dirp->dirname);
-            free(dirp);
-            return NULL;
-        }
-    }
-    return dirp;
-}
-
-
-/*
- * <function name="readdir">
- * <intro>read a directory entry
- * <syntax>struct dirent *readdir (DIR *dirp);
- *
- * <desc>Read individual directory entry and return pointer to a structure
- * containing the name of the entry.  Individual directory entries returned
- * include normal files, sub-directories, pseudo-directories "." and ".."
- * and also volume labels, hidden files and system files in MS-DOS and
- * MS-Windows.   You might want to use stat(2) function to determinate which
- * one are you dealing with.  Many dirent implementations already contain
- * equivalent information in dirent structure but you cannot depend on
- * this.
- *
- * The dirent structure contains several system dependent fields that
- * generally have no interest to you.  The only interesting one is char
- * d_name[] that is also portable across different systems.  The d_name
- * field contains the name of the directory entry without leading path.
- * While d_name is portable across different systems the actual storage
- * capacity of d_name varies from system to system and there is no portable
- * way to find out it at compile time as different systems define the
- * capacity of d_name with different macros and some systems do not define
- * capacity at all (besides actual declaration of the field). If you really
- * need to find out storage capacity of d_name then you might want to try
- * NAME_MAX macro. The NAME_MAX is defined in POSIX standard although
- * there are many MS-DOS and MS-Windows implementations those do not define
- * it.  There are also systems that declare d_name as "char d_name[1]" and
- * then allocate suitable amount of memory at run-time.  Thanks to Alain
- * Decamps (Alain.Decamps@advalvas.be) for pointing it out to me.
- *
- * This all leads to the fact that it is difficult to allocate space
- * for the directory names when the very same program is being compiled on
- * number of operating systems.  Therefore I suggest that you always
- * allocate space for directory names dynamically.
- *
- * <ret>
- * Returns a pointer to a structure containing name of the directory entry
- * in `d_name' field or NULL if there was an error.  In case of an error the
- * global `errno' variable will set as follows:
- *
- * <table>
- * [EBADF  |dir parameter refers to an invalid directory stream.  This value
- *          is not set reliably on all implementations.]
- * </table>
- * </function>
- */
-static struct dirent *
-readdir(DIR *dirp)
-{
-    assert(dirp != NULL);
-    if (dirp == NULL) {
-        errno = EBADF;
-        return NULL;
-    }
-
-#if defined(DIRENT_WIN32_INTERFACE)
-    if (dirp->search_handle == INVALID_HANDLE_VALUE) {
-        /* directory stream was opened/rewound incorrectly or it ended normally */
-        errno = EBADF;
-        return NULL;
-    }
-#endif
-
-    if (dirp->dirent_filled != 0) {
-        /*
-         * Directory entry has already been retrieved and there is no need to
-         * retrieve a new one.  Directory entry will be retrieved in advance
-         * when the user calls readdir function for the first time.  This is so
-         * because real dirent has separate functions for opening and reading
-         * the stream whereas Win32 and DOS dirents open the stream
-         * automatically when we retrieve the first file.  Therefore, we have to
-         * save the first file when opening the stream and later we have to
-         * return the saved entry when the user tries to read the first entry.
-         */
-        dirp->dirent_filled = 0;
-    } else {
-        /* fill in entry and return that */
-#if defined(DIRENT_WIN32_INTERFACE)
-        if (FindNextFile(dirp->search_handle, &dirp->current.data) == FALSE) {
-            /* Last file has been processed or an error occurred */
-            FindClose(dirp->search_handle);
-            dirp->search_handle = INVALID_HANDLE_VALUE;
-            errno = ENOENT;
-            return NULL;
-        }
-
-# elif defined(DIRENT_MSDOS_INTERFACE)
-        if (_dos_findnext(&dirp->current.data) != 0) {
-            /* _dos_findnext and findnext will set errno to ENOENT when no
-             * more entries could be retrieved. */
-            return NULL;
-        }
-# endif
-
-        _setdirname(dirp);
-        assert(dirp->dirent_filled == 0);
-    }
-    return &dirp->current;
-}
-
-
-/*
- * <function name="closedir">
- * <intro>close directory stream.
- * <syntax>int closedir (DIR *dirp);
- *
- * <desc>Close directory stream opened by the `opendir' function.  Close of
- * directory stream invalidates the DIR structure as well as previously read
- * dirent entry.
- *
- * <ret>The function typically returns 0 on success and -1 on failure but
- * the function may be declared to return void on same systems.  At least
- * Borland C/C++ and some UNIX implementations use void as a return type.
- * The dirent wrapper tries to define VOID_CLOSEDIR whenever closedir is
- * known to return nothing.  The very same definition is made by the GNU
- * autoconf if you happen to use it.
- *
- * The global `errno' variable will set to EBADF in case of error.
- * </function>
- */
-static int
-closedir(DIR *dirp)
-{
-    int retcode = 0;
-
-    /* make sure that dirp points to legal structure */
-    assert(dirp != NULL);
-    if (dirp == NULL) {
-        errno = EBADF;
-        return -1;
-    }
-
-    /* free directory name and search handles */
-    if (dirp->dirname != NULL) {
-        free(dirp->dirname);
-    }
-
-#if defined(DIRENT_WIN32_INTERFACE)
-    if (dirp->search_handle != INVALID_HANDLE_VALUE) {
-        if (FindClose(dirp->search_handle) == FALSE) {
-            /* Unknown error */
-            retcode = -1;
-            errno = EBADF;
-        }
-    }
-#endif
-
-    /* clear dirp structure to make sure that it cannot be used anymore*/
-    memset(dirp, 0, sizeof(*dirp));
-# if defined(DIRENT_WIN32_INTERFACE)
-    dirp->search_handle = INVALID_HANDLE_VALUE;
-# endif
-
-    free(dirp);
-    return retcode;
-}
-
-
-/*
- * <function name="rewinddir">
- * <intro>rewind directory stream to the beginning
- * <syntax>void rewinddir (DIR *dirp);
- *
- * <desc>Rewind directory stream to the beginning so that the next call of
- * readdir() returns the very first directory entry again.  However, note
- * that next call of readdir() may not return the same directory entry as it
- * did in first time.  The directory stream may have been affected by newly
- * created files.
- *
- * Almost every dirent implementation ensure that rewinddir will update
- * the directory stream to reflect any changes made to the directory entries
- * since the previous ``opendir'' or ``rewinddir'' call.  Keep an eye on
- * this if your program depends on the feature.  I know at least one dirent
- * implementation where you are required to close and re-open the stream to
- * see the changes.
- *
- * <ret>Returns nothing.  If something went wrong while rewinding, you will
- * notice it later when you try to retrieve the first directory entry.
- */
-static void
-rewinddir(DIR *dirp)
-{
-    /* make sure that dirp is legal */
-    assert(dirp != NULL);
-    if (dirp == NULL) {
-        errno = EBADF;
-        return;
-    }
-    assert(dirp->dirname != NULL);
-
-    /* close previous stream */
-#if defined(DIRENT_WIN32_INTERFACE)
-    if (dirp->search_handle != INVALID_HANDLE_VALUE) {
-        if (FindClose(dirp->search_handle) == FALSE) {
-            /* Unknown error */
-            errno = EBADF;
-        }
-    }
-#endif
-
-    /* re-open previous stream */
-    if (_initdir(dirp) == 0) {
-        /* initialization failed but we cannot deal with error.  User will notice
-         * error later when she tries to retrieve first directory enty. */
-        /*EMPTY*/;
-    }
-}
-
-
-/*
- * Open native directory stream object and retrieve first file.
- * Be sure to close previous stream before opening new one.
- */
-static int
-_initdir(DIR *dirp)
-{
-    assert(dirp != NULL);
-    assert(dirp->dirname != NULL);
-    dirp->dirent_filled = 0;
-
-# if defined(DIRENT_WIN32_INTERFACE)
-    /* Open stream and retrieve first file */
-    dirp->search_handle = FindFirstFile(dirp->dirname, &dirp->current.data);
-    if (dirp->search_handle == INVALID_HANDLE_VALUE) {
-        /* something went wrong but we don't know what.  GetLastError() could
-         * give us more information about the error, but then we should map
-         * the error code into errno. */
-        errno = ENOENT;
-        return 0;
-    }
-
-# elif defined(DIRENT_MSDOS_INTERFACE)
-    if (_dos_findfirst(dirp->dirname,
-                       _A_SUBDIR | _A_RDONLY | _A_ARCH | _A_SYSTEM | _A_HIDDEN,
-                       &dirp->current.data) != 0) {
-        /* _dos_findfirst and findfirst will set errno to ENOENT when no
-         * more entries could be retrieved. */
-        return 0;
-    }
-# endif
-
-    /* initialize DIR and it's first entry */
-    _setdirname(dirp);
-    dirp->dirent_filled = 1;
-    return 1;
-}
-
-
-/*
- * Return implementation dependent name of the current directory entry.
- */
-static const char *
-_getdirname(const struct dirent *dp)
-{
-#if defined(DIRENT_WIN32_INTERFACE)
-    return dp->data.cFileName;
-
-#elif defined(DIRENT_USE_FFBLK)
-    return dp->data.ff_name;
-
-#else
-    return dp->data.name;
-#endif
-}
-
-
-/*
- * Copy name of implementation dependent directory entry to the d_name field.
- */
-static void
-_setdirname(struct DIR *dirp)
-{
-    /* make sure that d_name is long enough */
-    assert(strlen(_getdirname(&dirp->current)) <= NAME_MAX);
-
-    strncpy(dirp->current.d_name,
-            _getdirname(&dirp->current),
-            NAME_MAX);
-    dirp->current.d_name[NAME_MAX] = '\0'; /*char d_name[NAME_MAX+1]*/
-}
-
-# ifdef __cplusplus
-}
-# endif
-# define NAMLEN(dp) ((int)(strlen((dp)->d_name)))
-
-#else
-# error "missing dirent interface"
-#endif
-
-
-#endif /*DIRENT_H*/
diff --git a/src/bin/mj2/CMakeLists.txt b/src/bin/mj2/CMakeLists.txt
deleted file mode 100644 (file)
index 5d3e288..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-# Makefile for the MJ2 codecs of the OpenJPEG library: frames_to_mj2, mj2_to_frames, extract_j2k_from_mj2 and wrap_j2k_in_mj2
-
-set(common_SRCS ${OPENJPEG_SOURCE_DIR}/src/bin/common/opj_getopt.c)
-
-if(WIN32)
-  if(BUILD_SHARED_LIBS)
-    add_definitions(-DOPJ_EXPORTS)
-  else()
-    add_definitions(-DOPJ_STATIC)
-  endif()
-endif()
-
-# Headers file are located here:
-include_directories(
-  ${OPENJPEG_BINARY_DIR}/src/lib/openjp2 # opj_config.h
-  ${OPENJPEG_BINARY_DIR}/src/bin/common # opj_apps_config.h
-  ${OPENJPEG_SOURCE_DIR}/src/lib/openmj2
-  ${OPENJPEG_SOURCE_DIR}/src/bin/common
-  ${LCMS_INCLUDE_DIRNAME}
-  )
-
-foreach(exe
-  opj_mj2_wrap
-  opj_mj2_extract
-  opj_mj2_decompress
-  opj_mj2_compress
-)
-  add_definitions(-DOPJ_USE_LEGACY)
-  add_executable(${exe}
-    ${exe}.c
-    ${common_SRCS}
-    ${MJ2_SRCS}
-    ${OPENJPEG_SOURCE_DIR}/src/bin/common/color.c
-    )
-  set_property(
-    TARGET ${exe}
-    APPEND PROPERTY COMPILE_DEFINITIONS USE_MJ2
-  )
-  target_link_libraries(${exe} ${LCMS_LIBNAME} openmj2)
-
-  if(UNIX)
-    target_link_libraries(${exe} m)
-  endif()
-
-  install(TARGETS ${exe}
-       DESTINATION ${OPENJPEG_INSTALL_BIN_DIR})
-endforeach()
diff --git a/src/bin/mj2/meta_out.c b/src/bin/mj2/meta_out.c
deleted file mode 100644 (file)
index 139b270..0000000
+++ /dev/null
@@ -1,2858 +0,0 @@
-/* meta_out.c */
-/* Dump MJ2, JP2 metadata (partial so far) to xml file */
-/* Callable from mj2_to_metadata */
-/* Contributed to Open JPEG by Glenn Pearson, contract software developer, U.S. National Library of Medicine.
-
-The base code in this file was developed by the author as part of a video archiving
-project for the U.S. National Library of Medicine, Bethesda, MD.
-It is the policy of NLM (and U.S. government) to not assert copyright.
-
-A non-exclusive copy of this code has been contributed to the Open JPEG project.
-Except for copyright, inclusion of the code within Open JPEG for distribution and use
-can be bound by the Open JPEG open-source license and disclaimer, expressed elsewhere.
-*/
-
-#include <windows.h> /* for time functions */
-
-#include "opj_includes.h"
-#include "mj2.h"
-
-#include <time.h>
-#include "meta_out.h"
-
-static BOOL notes = TRUE;
-static BOOL sampletables = FALSE;
-static BOOL raw = TRUE;
-static BOOL derived = TRUE;
-
-opj_tcp_t *j2k_default_tcp;
-
-/* Forwards */
-int xml_write_overall_header(FILE *file, FILE *xmlout, opj_mj2_t * movie,
-                             unsigned int sampleframe, opj_event_mgr_t *event_mgr);
-int xml_write_moov(FILE *file, FILE *xmlout, opj_mj2_t * movie,
-                   unsigned int sampleframe, opj_event_mgr_t *event_mgr);
-
-void uint_to_chars(unsigned int value, char* buf);
-
-void xml_write_trak(FILE* file, FILE* xmlout, mj2_tk_t *track,
-                    unsigned int tnum, unsigned int sampleframe, opj_event_mgr_t *event_mgr);
-void xml_write_tkhd(FILE* file, FILE* xmlout, mj2_tk_t *track,
-                    unsigned int tnum);
-void xml_write_udta(FILE* file, FILE* xmlout, mj2_tk_t *track,
-                    unsigned int tnum);
-void xml_write_mdia(FILE* file, FILE* xmlout, mj2_tk_t *track,
-                    unsigned int tnum);
-void xml_write_stbl(FILE* file, FILE* xmlout, mj2_tk_t *track,
-                    unsigned int tnum);
-
-void UnixTimeToFileTime(time_t t, LPFILETIME pft);
-void UnixTimeToSystemTime(time_t t, LPSYSTEMTIME pst);
-void xml_time_out(FILE* xmlout, time_t t);
-
-void int16_to_3packedchars(short int value, char* buf);
-
-void xml_write_moov_udta(FILE* xmlout, opj_mj2_t * movie);
-void xml_write_free_and_skip(FILE* xmlout, opj_mj2_t * movie);
-void xml_write_uuid(FILE* xmlout, opj_mj2_t * movie);
-
-int xml_out_frame(FILE* file, FILE* xmlout, mj2_sample_t *sample,
-                  unsigned int snum, opj_event_mgr_t *event_mgr);
-
-void xml_out_frame_siz(FILE* xmlout, opj_image_t *img, opj_cp_t *cp);
-void xml_out_frame_cod(FILE* xmlout, opj_tcp_t *tcp);
-void xml_out_frame_coc(FILE* xmlout, opj_tcp_t *tcp,
-                       int numcomps); /* opj_image_t *img); */
-BOOL same_component_style(opj_tccp_t *tccp1, opj_tccp_t *tccp2);
-void xml_out_frame_qcd(FILE* xmlout, opj_tcp_t *tcp);
-void xml_out_frame_qcc(FILE* xmlout, opj_tcp_t *tcp,
-                       int numcomps); /* opj_image_t *img); */
-BOOL same_component_quantization(opj_tccp_t *tccp1, opj_tccp_t *tccp2);
-void xml_out_frame_rgn(FILE* xmlout, opj_tcp_t *tcp,
-                       int numcomps);/* opj_image_t *img);*/
-void xml_out_frame_poc(FILE* xmlout, opj_tcp_t *tcp);
-void xml_out_frame_ppm(FILE* xmlout, opj_cp_t *cp);
-void xml_out_frame_ppt(FILE* xmlout, opj_tcp_t *tcp);
-void xml_out_frame_tlm(FILE*
-                       xmlout); /* j2k_default_tcp is passed globally */ /* NO-OP.  TLM NOT SAVED IN DATA STRUCTURE */
-void xml_out_frame_plm(FILE*
-                       xmlout); /* j2k_default_tcp is passed globally */ /* NO-OP.  PLM NOT SAVED IN DATA STRUCTURE.  opt in main; can be used in conjunction with PLT */
-void xml_out_frame_plt(FILE* xmlout,
-                       opj_tcp_t *tcp); /* NO-OP.  PLM NOT SAVED IN DATA STRUCTURE.  opt in main; can be used in conjunction with PLT */
-void xml_out_frame_crg(FILE*
-                       xmlout); /* j2k_default_tcp is passed globally */ /* opt in main; */
-void xml_out_frame_com(FILE* xmlout,
-                       opj_tcp_t *tcp); /* NO-OP.  COM NOT SAVED IN DATA STRUCTURE */ /* opt in main; */
-void xml_out_dump_hex(FILE* xmlout, char *data, int data_len, char* s);
-void xml_out_dump_hex_and_ascii(FILE* xmlout, char *data, int data_len,
-                                char* s);
-void xml_out_frame_jp2h(FILE* xmlout, opj_jp2_t *jp2_struct);
-#ifdef NOTYET
-/* Shown with cp, extended, as data structure... but it could be a new different one */
-void xml_out_frame_jp2i(FILE* xmlout,
-                        opj_cp_t *cp);/* IntellectualProperty 'jp2i' (no restrictions on location) */
-void xml_out_frame_xml(FILE* xmlout,
-                       opj_cp_t *cp); /* XML 'xml\040' (0x786d6c20).  Can appear multiply */
-void xml_out_frame_uuid(FILE* xmlout,
-                        opj_cp_t *cp); /* UUID 'uuid' (top level only) */
-void xml_out_frame_uinf(FILE* xmlout,
-                        opj_cp_t *cp); /* UUIDInfo 'uinf', includes UUIDList 'ulst' and URL 'url\40' */
-void xml_out_frame_unknown_type(FILE* xmlout, opj_cp_t *cp);
-#endif
-
-
-void xml_write_init(BOOL n, BOOL t, BOOL r, BOOL d)
-{
-    /* Init file globals */
-    notes = n;
-    sampletables = t;
-    raw = r;
-    derived = d;
-}
-
-int xml_write_struct(FILE* file, FILE *xmlout, opj_mj2_t * movie,
-                     unsigned int sampleframe, char* stringDTD, opj_event_mgr_t *event_mgr)
-{
-
-    if (stringDTD != NULL) {
-        fprintf(xmlout, "<?xml version=\"1.0\" standalone=\"no\"?>\n");
-        /* stringDTD is known to start with "SYSTEM " or "PUBLIC " */
-        /* typical: SYSTEM mj2_to_metadata.dtd */
-        stringDTD[6] =
-            '\0'; /* Break into two strings at space, so quotes can be inserted. */
-        fprintf(xmlout, "<!DOCTYPE MJ2_File %s \"%s\">\n", stringDTD, stringDTD + 7);
-        stringDTD[6] = ' '; /* restore for sake of debugger or memory allocator */
-    } else {
-        fprintf(xmlout, "<?xml version=\"1.0\" standalone=\"yes\"?>\n");
-    }
-
-    fprintf(xmlout, "<MJ2_File>\n");
-    xml_write_overall_header(file, xmlout, movie, sampleframe, event_mgr);
-    fprintf(xmlout, "</MJ2_File>");
-    return 0;
-}
-
-/* ------------- */
-
-int xml_write_overall_header(FILE *file, FILE *xmlout, opj_mj2_t * movie,
-                             unsigned int sampleframe, opj_event_mgr_t *event_mgr)
-{
-    int i;
-    char buf[5];
-    buf[4] = '\0';
-
-    fprintf(xmlout,
-            "  <JP2 BoxType=\"jP[space][space]\" Signature=\"0x0d0a870a\" />\n");
-    // Called after structure initialized by mj2_read_ftyp
-    fprintf(xmlout,   "  <FileType BoxType=\"ftyp\">\n");
-    uint_to_chars(movie->brand, buf);
-    fprintf(xmlout,   "    <Brand>%s</Brand>\n",
-            buf);    /* 4 character; BR              */
-    fprintf(xmlout,   "    <MinorVersion>%u</MinorVersion>\n",
-            movie->minversion);    /* 4 char; MinV            */
-    fprintf(xmlout,   "    <CompatibilityList Count=\"%d\">\n", movie->num_cl);
-    for (i = movie->num_cl - 1; i > -1;
-            i--) { /* read routine stored in reverse order, so let's undo damage */
-        uint_to_chars(movie->cl[i], buf);
-        fprintf(xmlout, "      <CompatibleBrand>%s</CompatibleBrand>\n",
-                buf);    /*4 characters, each CLi */
-    }
-    fprintf(xmlout,   "    </CompatibilityList>\n");
-    fprintf(xmlout,   "  </FileType>\n");
-    xml_write_moov(file, xmlout, movie, sampleframe, event_mgr);
-    // To come?              <mdat>  // This is the container for media data that can also be accessed through track structures,
-    // so is redundant, and simply not of interest as metadata
-    //                       <moof>  // Allows incremental build up of movie.  Probably not in Simple Profile
-    xml_write_free_and_skip(xmlout,
-                            movie); /* NO OP so far */ /* May be a place where user squirrels metadata */
-    xml_write_uuid(xmlout,
-                   movie); /* NO OP so far */ /* May be a place where user squirrels metadata */
-    return 0;
-}
-
-/* ------------- */
-
-int xml_write_moov(FILE *file, FILE *xmlout, opj_mj2_t * movie,
-                   unsigned int sampleframe, opj_event_mgr_t *event_mgr)
-{
-    unsigned int tnum;
-    mj2_tk_t *track;
-
-    fprintf(xmlout,   "  <MovieBox BoxType=\"moov\">\n");
-    fprintf(xmlout,   "    <MovieHeader BoxType=\"mvhd\">\n");
-    fprintf(xmlout,   "      <CreationTime>\n");
-    if (raw) {
-        fprintf(xmlout, "        <InSeconds>%u</InSeconds>\n", movie->creation_time);
-    }
-    if (notes) {
-        fprintf(xmlout,
-                "        <!-- Seconds since start of Jan. 1, 1904 UTC (Greenwich) -->\n");
-    }
-    /*  2082844800 = seconds between 1/1/04 and 1/1/70 */
-    /* There's still a time zone offset problem not solved... but spec is ambiguous as to whether stored time
-       should be local or UTC */
-    if (derived) {
-        fprintf(xmlout, "        <AsLocalTime>");
-        xml_time_out(xmlout, movie->creation_time - 2082844800);
-        fprintf(xmlout, "</AsLocalTime>\n");
-    }
-    fprintf(xmlout,   "      </CreationTime>\n");
-    fprintf(xmlout,   "      <ModificationTime>\n");
-    if (raw) {
-        fprintf(xmlout, "        <InSeconds>%u</InSeconds>\n",
-                movie->modification_time);
-    }
-    if (derived) {
-        fprintf(xmlout, "        <AsLocalTime>");
-        xml_time_out(xmlout, movie->modification_time - 2082844800);
-        fprintf(xmlout, "</AsLocalTime>\n");
-    }
-    fprintf(xmlout,   "      </ModificationTime>\n");
-    fprintf(xmlout,   "      <Timescale>%d</Timescale>\n", movie->timescale);
-    if (notes) {
-        fprintf(xmlout, "      <!-- Timescale defines time units in one second -->\n");
-    }
-    fprintf(xmlout,
-            "      <Rate>\n");        /* Rate to play presentation  (default = 0x00010000)          */
-    if (notes) {
-        fprintf(xmlout,
-                "      <!-- Rate to play presentation is stored as fixed-point binary 16.16 value. Decimal value is approximation. -->\n");
-        fprintf(xmlout,
-                "      <!-- Rate is expressed relative to normal (default) value of 0x00010000 (1.0) -->\n");
-    }
-    if (raw) {
-        fprintf(xmlout, "        <AsHex>0x%08x</AsHex>\n", movie->rate);
-    }
-    if (derived) {
-        fprintf(xmlout, "        <AsDecimal>%12.6f</AsDecimal>\n",
-                (double)movie->rate / (double)0x00010000);
-    }
-    fprintf(xmlout,   "      </Rate>\n");
-    fprintf(xmlout,   "      <Duration>\n");
-    if (raw) {
-        fprintf(xmlout, "        <InTimeUnits>%u</InTimeUnits>\n", movie->duration);
-    }
-    if (derived) {
-        fprintf(xmlout, "        <InSeconds>%12.3f</InSeconds>\n",
-                (double)movie->duration / (double)
-                movie->timescale);    // Make this double later to get fractional seconds
-    }
-    fprintf(xmlout,   "      </Duration>\n");
-#ifdef CURRENTSTRUCT
-    movie->volume = movie->volume << 8;
-#endif
-    fprintf(xmlout,   "      <Volume>\n");
-    if (notes) {
-        fprintf(xmlout,
-                "      <!-- Audio volume stored as fixed-point binary 8.8 value. Decimal value is approximation. -->\n");
-        fprintf(xmlout,
-                "      <!-- Full, normal (default) value is 0x0100 (1.0) -->\n");
-    }
-    if (raw) {
-        fprintf(xmlout, "        <AsHex>0x%04x</AsHex>\n", movie->volume);
-    }
-    if (derived) {
-        fprintf(xmlout, "        <AsDecimal>%6.3f</AsDecimal>\n",
-                (double)movie->volume / (double)0x0100);
-    }
-    fprintf(xmlout,   "      </Volume>\n");
-#ifdef CURRENTSTRUCT
-    if (notes) {
-        fprintf(xmlout,
-                "      <!-- Current m2j_to_metadata implementation always shows bits to right of decimal as zeroed. -->\n");
-    }
-    movie->volume = movie->volume >> 8;
-#endif
-    /* Transformation matrix for video                            */
-    fprintf(xmlout,   "      <TransformationMatrix>\n");
-    if (notes) {
-        fprintf(xmlout,
-                "      <!-- 3 x 3 Video Transformation Matrix {a,b,u,c,d,v,x,y,w}.  Required: u=0, v=0, w=1 -->\n");
-        fprintf(xmlout,
-                "      <!-- Maps decompressed point (p,q) to rendered point (ap + cq + x, bp + dq + y) -->\n");
-        fprintf(xmlout,
-                "      <!-- Stored as Fixed Point Hex: all are binary 16.16, except u,v,w are 2.30 -->\n");
-        fprintf(xmlout,
-                "      <!-- Unity = 0x00010000,0,0,0,0x00010000,0,0,0,0x40000000 -->\n");
-    }
-    fprintf(xmlout,   "        <TMa>0x%08x</TMa>\n", movie->trans_matrix[0]);
-    fprintf(xmlout,   "        <TMb>0x%08x</TMb>\n", movie->trans_matrix[1]);
-    fprintf(xmlout,   "        <TMu>0x%08x</TMu>\n", movie->trans_matrix[2]);
-    fprintf(xmlout,   "        <TMc>0x%08x</TMc>\n", movie->trans_matrix[3]);
-    fprintf(xmlout,   "        <TMd>0x%08x</TMd>\n", movie->trans_matrix[4]);
-    fprintf(xmlout,   "        <TMv>0x%08x</TMv>\n", movie->trans_matrix[5]);
-    fprintf(xmlout,   "        <TMx>0x%08x</TMx>\n", movie->trans_matrix[6]);
-    fprintf(xmlout,   "        <TMy>0x%08x</TMy>\n", movie->trans_matrix[7]);
-    fprintf(xmlout,   "        <TMw>0x%08x</TMw>\n", movie->trans_matrix[8]);
-    fprintf(xmlout,   "      </TransformationMatrix>\n");
-    fprintf(xmlout,   "    </MovieHeader>\n");
-
-    fprintf(xmlout,   "    <Statistics>\n");
-    fprintf(xmlout,   "      <TracksFound>\n");
-    fprintf(xmlout,   "        <Video>%d</Video>\n", movie->num_vtk);
-    fprintf(xmlout,   "        <Audio>%d</Audio>\n", movie->num_stk);
-    fprintf(xmlout,   "        <Hint>%d</Hint>\n", movie->num_htk);
-    if (notes) {
-        fprintf(xmlout,
-                "        <!-- Hint tracks for streaming video are not part of MJ2, but are a defined extension. -->\n");
-    }
-    /* See Part 3 Amend 2 Section 4.2 for relation of MJ2 to Part 12 Sections 7 and 10 hints */
-    fprintf(xmlout,   "      </TracksFound>\n");
-    fprintf(xmlout,   "    </Statistics>\n");
-    /* Idea for the future:  It would be possible to add code to verify that the file values:
-      1) are legal and self-consistent
-    2) comply with particular JP2 and/or MJ2 profiles.
-    This could be reported here as additional XML elements */
-
-    // Find first video track
-    tnum = 0;
-    while (movie->tk[tnum].track_type != 0) {
-        tnum ++;
-    }
-
-    track = &(movie->tk[tnum]);
-    // For now, output info on first video track
-    xml_write_trak(file, xmlout, track, tnum, sampleframe, event_mgr);
-
-    // to come:                <MovieExtends mvek> // possibly not in Simple Profile
-    xml_write_moov_udta(xmlout,
-                        movie); /* NO OP so far */ /* <UserDataBox udta> contains <CopyrightBox cprt> */
-    fprintf(xmlout,   "  </MovieBox>\n");
-    return 0;
-}
-
-/* --------------- */
-
-void uint_to_chars(unsigned int value, char* buf)
-{
-    /* buf is at least char[5] */
-    int i;
-    for (i = 3; i >= 0; i--) {
-        buf[i] = (value & 0x000000ff);
-        value = (value >> 8);
-    }
-    buf[4] = '\0'; /* Precautionary */
-}
-
-/* ------------- */
-
-/* WINDOWS SPECIFIC */
-
-void UnixTimeToFileTime(time_t t, LPFILETIME pft)
-{
-    /* Windows specific.  From MS Q167296 */
-    /* 'time_t' represents seconds since midnight January 1, 1970 UTC (coordinated universal time). */
-    /* 64-bit FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601 UTC (coordinate universal time). */
-    LONGLONG ll; /* LONGLONG is a 64-bit value. */
-    ll = Int32x32To64(t, 10000000) + 116444736000000000;
-    pft->dwLowDateTime = (DWORD)ll;
-    /* pft->dwLowDateTime = (DWORD)(0x00000000ffffffff & ll); */
-    pft->dwHighDateTime = (DWORD)(ll >> 32);
-}
-// Once the UNIX time is converted to a FILETIME structure,
-// other Win32 time formats can be easily obtained by using Win32 functions such
-// as FileTimeToSystemTime() and FileTimeToDosDateTime().
-
-/* ------------- */
-
-void UnixTimeToSystemTime(time_t t, LPSYSTEMTIME pst)
-{
-    /* Windows specific */
-    FILETIME ft;
-    UnixTimeToFileTime(t, &ft);
-    FileTimeToLocalFileTime(&ft, &ft);   /* Adjust from UTC to local time zone */
-    FileTimeToSystemTime(&ft, pst);
-}
-
-/* ------------- */
-
-void xml_time_out(FILE* xmlout, time_t t)
-{
-    /* Windows specific */
-    SYSTEMTIME st;
-    char szLocalDate[255], szLocalTime[255];
-    UnixTimeToSystemTime(t, &st);
-    GetDateFormat(LOCALE_USER_DEFAULT, DATE_LONGDATE, &st, NULL, szLocalDate, 255);
-    GetTimeFormat(LOCALE_USER_DEFAULT, 0, &st, NULL, szLocalTime, 255);
-    fprintf(xmlout, "%s %s", szLocalDate, szLocalTime);
-}
-
-/* END WINDOWS SPECIFIC */
-
-/* ------------- */
-
-void xml_write_moov_udta(FILE* xmlout, opj_mj2_t * movie)
-{
-    /* Compare with xml_write_udta */
-#ifdef NOTYET
-    /* NO-OP so far.  Optional UserData 'udta' (zero or one in moov or each trak)
-       can contain multiple Copyright 'cprt' with different language codes */
-    /* There may be nested non-standard boxes within udta */
-    IMAGINE movie->udta, movie->copyright_count,
-            movie->copyright_language[i](array of 16bit ints),
-            movie->copyright_notice[i](array of buffers)
-            PROBABLY ALSO NEED movie->udta_len or special handler for non - standard boxes
-            char buf[5];
-    int i;
-
-    if (movie->udta != 1) {
-        return;    /* Not present */
-    }
-
-    fprintf(xmlout,    "    <UserData BoxType=\"udta\">\n");
-    for (i = 0; i < movie->copyright_count; i++) {
-        fprintf(xmlout,  "      <Copyright BoxType=\"cprt\"> Instance=\"%d\">\n",
-                i + 1);
-        int16_to_3packedchars((short int)movie->copyright_languages[i], buf);
-        fprintf(xmlout,  "        <Language>%s</Language>\n", buf);    /* 3 chars */
-        fprintf(xmlout,  "        <Notice>%s</Notice>\n", movie->copyright_notices[i]);
-        fprintf(xmlout,  "      </Copyright>\n", i + 1);
-    }
-    /* TO DO: Non-standard boxes */
-    fprintf(xmlout,    "    </UserData>\n");
-#endif
-}
-
-void xml_write_free_and_skip(FILE* xmlout, opj_mj2_t * movie)
-{
-#ifdef NOTYET
-    /* NO-OP so far.  There can be zero or more instances of free and/or skip
-       at the top level of the file.  This may be a place where the user squirrel's metadata.
-     Let's assume unstructured, and do a dump */
-    IMAGINE movie->free_and_skip, movie->free_and_skip_count,
-            movie->free_and_skip_content[i](array of buffers),
-            movie->free_and_skip_len[i](array of ints), movie->is_skip[i](array of BOOL)
-            int i;
-
-    if (movie->free_and_skip != 1) {
-        return;    /* Not present */
-    }
-
-    for (i = 0; i < movie->free_and_skip_count; i++) {
-        if (movie->is_skip[i]) {
-            fprintf(xmlout,    "  <Skip BoxType=\"skip\">\n");
-        } else {
-            fprintf(xmlout,    "  <Free BoxType=\"free\">\n");
-        }
-
-        xml_out_dump_hex_and_ascii(xmlout, movie->free_and_skip_contents[i],
-                                   movie->free_and_skip_len[i]);
-
-        if (movie->is_skip[i]) {
-            fprintf(xmlout,    "  </Skip>\n");
-        } else {
-            fprintf(xmlout,    "  </Free>\n");
-        }
-    }
-#endif
-}
-
-void xml_write_uuid(FILE* xmlout, opj_mj2_t * movie)
-{
-    /* Universal Unique IDs of 16 bytes.  */
-#ifdef NOTYET
-    /* NO-OP so far.  There can be zero or more instances of private uuid boxes in a file.
-       This function supports the top level of the file, but uuid may be elsewhere [not yet supported].
-     This may be a place where the user squirrel's metadata.  Let's assume unstructured, and do a dump */
-    IMAGINE movie->uuid, movie->uuid_count,
-            movie->uuid_content[i](array of buffers),
-            movie->uuid_len[i](array of ints),
-            movie->uuid_type[i](array of 17 - byte(16 + null termination) buffers)
-            int i;
-
-    if (movie->uuid != 1) {
-        return;    /* Not present */
-    }
-
-    for (i = 0; i < movie->uuid_count; i++) {
-        fprintf(xmlout,    "  <PrivateExtension BoxType=\"uuid\" UUID=\"%s\">\n",
-                movie->uuid_type[i]);
-        // See Part III section 5.2.1, 6.1, 6.2
-        xml_out_dump_hex_and_ascii(xmlout, movie->uuid_contents[i], movie->uuid_len[i]);
-        fprintf(xmlout,    "  </PrivateExtension>\n");
-    }
-#endif
-}
-
-/* ------------- */
-
-void xml_write_trak(FILE* file, FILE* xmlout, mj2_tk_t *track,
-                    unsigned int tnum, unsigned int sampleframe, opj_event_mgr_t *event_mgr)
-{
-    fprintf(xmlout,    "    <Track BoxType=\"trak\" Instance=\"%d\">\n", tnum);
-    xml_write_tkhd(file, xmlout, track, tnum);
-    // TO DO: TrackReferenceContainer 'tref'  just used in hint track
-    // TO DO: EditListContainer 'edts', contains EditList 'elst' with media-time, segment-duration, media-rate
-    xml_write_mdia(file, xmlout, track, tnum);
-    xml_write_udta(file, xmlout, track,
-                   tnum); // NO-OP so far.  Optional UserData 'udta', can contain multiple Copyright 'cprt'
-
-    if (track->track_type == 0) { /* Only do for visual track */
-        /* sampleframe is from user option -f.  1 = first frame */
-        /* sampleframe of 0 is a user requests: no jp2 header */
-        /* Treat out-of-bounds values in the same way */
-        if (sampleframe > 0 && sampleframe <= track->num_samples) {
-            mj2_sample_t *sample;
-            unsigned int snum;
-
-            snum = sampleframe - 1;
-            // Someday maybe do a smart range scan... for (snum=0; snum < track->num_samples; snum++){
-            //  fprintf(stdout,"Frame %d: ",snum+1);
-            sample = &track->sample[snum];
-            if (xml_out_frame(file, xmlout, sample, snum, event_mgr)) {
-                return;    /* Not great error handling here */
-            }
-        }
-    }
-    fprintf(xmlout,    "    </Track>\n");
-}
-
-/* ------------- */
-
-void xml_write_tkhd(FILE* file, FILE* xmlout, mj2_tk_t *track,
-                    unsigned int tnum)
-{
-    fprintf(xmlout,    "      <TrackHeader BoxType=\"tkhd\">\n");
-    if (notes) {
-        fprintf(xmlout,
-                "      <!-- Not shown here: CreationTime, ModificationTime, Duration. -->\n");
-        fprintf(xmlout,
-                "      <!-- These 3 fields are reported under MediaHeader below.   When reading these 3, -->\n");
-        fprintf(xmlout,
-                "      <!-- m2j_to_metadata currently doesn't distinguish between TrackHeader and MediaHeader source. -->\n");
-        fprintf(xmlout,
-                "      <!-- If both found, value read from MediaHeader is used. -->\n");
-    }
-    fprintf(xmlout,    "        <TrackID>%u</TrackID>\n", track->track_ID);
-    if (track->track_type == 0) { /* For visual track */
-        fprintf(xmlout,  "        <TrackLayer>%d</TrackLayer>\n", track->layer);
-        if (notes) {
-            fprintf(xmlout,
-                    "        <!-- front-to-back ordering of video tracks. 0 = normal, -1 is closer, etc. -->\n");
-        }
-    }
-    if (track->track_type != 0) { /* volume irrelevant for visual track */
-#ifdef CURRENTSTRUCT
-        track->volume = track->volume << 8;
-#endif
-        fprintf(xmlout,  "        <Volume>\n");
-        if (notes) {
-            fprintf(xmlout,
-                    "          <!-- Track audio volume stored as fixed-point binary 8.8 value. Decimal value is approximation. -->\n");
-            fprintf(xmlout,
-                    "          <!-- Full, normal (default) value is 0x0100 (1.0) -->\n");
-        }
-        if (raw) {
-            fprintf(xmlout, "          <AsHex>0x%04x</AsHex>\n", track->volume);
-        }
-        if (derived) {
-            fprintf(xmlout, "          <AsDecimal>%6.3f</AsDecimal>\n",
-                    (double)track->volume / (double)0x0100);
-        }
-        fprintf(xmlout,  "        </Volume>\n");
-#ifdef CURRENTSTRUCT
-        if (notes) {
-            fprintf(xmlout,
-                    "        <!-- Current m2j_to_metadata implementation always shows bits to right of decimal as zeroed. -->\n");
-        }
-        track->volume = track->volume >> 8;
-#endif
-    }
-    if (track->track_type == 0) {
-        /* Transformation matrix for video                            */
-        fprintf(xmlout,  "        <TransformationMatrix>\n");
-        if (notes) {
-            fprintf(xmlout,
-                    "          <!-- Comments about matrix in MovieHeader apply here as well. -->\n");
-            fprintf(xmlout,
-                    "          <!-- This matrix is applied before MovieHeader one. -->\n");
-        }
-        fprintf(xmlout,  "          <TMa>0x%08x</TMa>\n", track->trans_matrix[0]);
-        fprintf(xmlout,  "          <TMb>0x%08x</TMb>\n", track->trans_matrix[1]);
-        fprintf(xmlout,  "          <TMu>0x%08x</TMu>\n", track->trans_matrix[2]);
-        fprintf(xmlout,  "          <TMc>0x%08x</TMc>\n", track->trans_matrix[3]);
-        fprintf(xmlout,  "          <TMd>0x%08x</TMd>\n", track->trans_matrix[4]);
-        fprintf(xmlout,  "          <TMv>0x%08x</TMv>\n", track->trans_matrix[5]);
-        fprintf(xmlout,  "          <TMx>0x%08x</TMx>\n", track->trans_matrix[6]);
-        fprintf(xmlout,  "          <TMy>0x%08x</TMy>\n", track->trans_matrix[7]);
-        fprintf(xmlout,  "          <TMw>0x%08x</TMw>\n", track->trans_matrix[8]);
-        fprintf(xmlout,  "        </TransformationMatrix>\n");
-    }
-#ifdef CURRENTSTRUCT
-    track->w = track->w << 16;
-    track->h = track->h << 16;
-#endif
-    if (notes) {
-        fprintf(xmlout,
-                "        <!-- Width and Height in pixels are for the presentation; frames will be scaled to this. -->\n");
-        fprintf(xmlout,
-                "        <!-- Both stored as fixed-point binary 16.16 values. Decimal values are approximations. -->\n");
-    }
-    fprintf(xmlout,    "        <Width>\n");
-    if (raw) {
-        fprintf(xmlout,  "          <AsHex>0x%08x</AsHex>\n", track->w);
-    }
-    if (derived) {
-        fprintf(xmlout,  "          <AsDecimal>%12.6f</AsDecimal>\n",
-                (double)track->w / (double)
-                0x00010000);    /* Rate to play presentation  (default = 0x00010000)          */
-    }
-    fprintf(xmlout,    "        </Width>\n");
-    fprintf(xmlout,    "        <Height>\n");
-    if (raw) {
-        fprintf(xmlout,  "          <AsHex>0x%08x</AsHex>\n", track->h);
-    }
-    if (derived) {
-        fprintf(xmlout,  "          <AsDecimal>%12.6f</AsDecimal>\n",
-                (double)track->h / (double)
-                0x00010000);    /* Rate to play presentation  (default = 0x00010000)          */
-    }
-    fprintf(xmlout,    "        </Height>\n");
-#ifdef CURRENTSTRUCT
-    if (notes) {
-        fprintf(xmlout,
-                "        <!-- Current m2j_to_metadata implementation always shows bits to right of decimal as zeroed. -->\n");
-        fprintf(xmlout,
-                "        <!-- Also, width and height values shown here will actually be those read from track's <VisualSampleEntry> if given. -->\n");
-    }
-    track->w = track->w >> 16;
-    track->h = track->h >> 16;
-#endif
-    fprintf(xmlout,    "      </TrackHeader>\n");
-}
-
-/* ------------- */
-
-void xml_write_udta(FILE* file, FILE* xmlout, mj2_tk_t *track,
-                    unsigned int tnum)
-{
-    /* NO-OP so far.  Optional UserData 'udta' (zero or one in moov or each trak)
-       can contain multiple Copyright 'cprt' with different language codes */
-    /* There may be nested non-standard boxes within udta */
-#ifdef NOTYET
-    IMAGINE track->udta, track->copyright_count,
-            track->copyright_language[i](array of 16bit ints),
-            track->copyright_notice[i](array of buffers)
-            PROBABLY ALSO NEED track->udta_len or special handler for non - standard boxes
-            char buf[5];
-    int i;
-
-    if (track->udta != 1) {
-        return;    /* Not present */
-    }
-
-    fprintf(xmlout,    "      <UserData BoxType=\"udta\">\n");
-    for (i = 0; i < track->copyright_count; i++) {
-        fprintf(xmlout,  "        <Copyright BoxType=\"cprt\"> Instance=\"%d\">\n",
-                i + 1);
-        int16_to_3packedchars((short int)track->copyright_languages[i], buf);
-        fprintf(xmlout,  "          <Language>%s</Language>\n", buf);    /* 3 chars */
-        fprintf(xmlout,  "          <Notice>%s</Notice>\n",
-                track->copyright_notices[i]);
-        fprintf(xmlout,  "        </Copyright>\n", i + 1);
-    }
-    /* TO DO: Non-standard boxes */
-    fprintf(xmlout,    "      </UserData>\n");
-#endif
-}
-
-/* ------------- */
-
-void xml_write_mdia(FILE* file, FILE* xmlout, mj2_tk_t *track,
-                    unsigned int tnum)
-{
-    char buf[5];
-    int i, k;
-    buf[4] = '\0';
-
-    fprintf(xmlout,    "      <Media BoxType=\"mdia\">\n");
-    fprintf(xmlout,    "        <MediaHeader BoxType=\"mdhd\">\n");
-    fprintf(xmlout,    "          <CreationTime>\n");
-    if (raw) {
-        fprintf(xmlout,  "            <InSeconds>%u</InSeconds>\n",
-                track->creation_time);
-    }
-    if (notes) {
-        fprintf(xmlout,
-                "            <!-- Seconds since start of Jan. 1, 1904 UTC (Greenwich) -->\n");
-    }
-    /*  2082844800 = seconds between 1/1/04 and 1/1/70 */
-    /* There's still a time zone offset problem not solved... but spec is ambiguous as to whether stored time
-       should be local or UTC */
-    if (derived) {
-        fprintf(xmlout,  "            <AsLocalTime>");
-        xml_time_out(xmlout, track->creation_time - 2082844800);
-        fprintf(xmlout, "</AsLocalTime>\n");
-    }
-    fprintf(xmlout,    "          </CreationTime>\n");
-    fprintf(xmlout,    "          <ModificationTime>\n");
-    if (raw) {
-        fprintf(xmlout,  "            <InSeconds>%u</InSeconds>\n",
-                track->modification_time);
-    }
-    if (derived) {
-        fprintf(xmlout,  "            <AsLocalTime>");
-        xml_time_out(xmlout, track->modification_time - 2082844800);
-        fprintf(xmlout, "</AsLocalTime>\n");
-    }
-    fprintf(xmlout,    "          </ModificationTime>\n");
-    fprintf(xmlout,    "          <Timescale>%d</Timescale>\n", track->timescale);
-    if (notes) {
-        fprintf(xmlout,
-                "          <!-- Timescale defines time units in one second -->\n");
-    }
-    fprintf(xmlout,    "          <Duration>\n");
-    if (raw) {
-        fprintf(xmlout,  "            <InTimeUnits>%u</InTimeUnits>\n",
-                track->duration);
-    }
-    if (derived) {
-        fprintf(xmlout,  "            <InSeconds>%12.3f</InSeconds>\n",
-                (double)track->duration / (double)
-                track->timescale);    // Make this double later to get fractional seconds
-    }
-    fprintf(xmlout,    "          </Duration>\n");
-    int16_to_3packedchars((short int)track->language, buf);
-    fprintf(xmlout,    "          <Language>%s</Language>\n", buf);    /* 3 chars */
-    fprintf(xmlout,    "        </MediaHeader>\n");
-    fprintf(xmlout,    "        <HandlerReference BoxType=\"hdlr\">\n");
-    switch (track->track_type) {
-    case 0:
-        fprintf(xmlout,
-                "          <HandlerType Code=\"vide\">video media track</HandlerType>\n");
-        break;
-    case 1:
-        fprintf(xmlout,  "          <HandlerType Code=\"soun\">Sound</HandlerType>\n");
-        break;
-    case 2:
-        fprintf(xmlout,  "          <HandlerType Code=\"hint\">Hint</HandlerType>\n");
-        break;
-    }
-    if (notes) {
-        fprintf(xmlout,
-                "          <!-- String value shown is not actually read from file. -->\n");
-        fprintf(xmlout,
-                "          <!-- Shown value is one used for our encode. -->\n");
-    }
-    fprintf(xmlout,    "        </HandlerReference>\n");
-    fprintf(xmlout,    "        <MediaInfoContainer BoxType=\"minf\">\n");
-    switch (track->track_type) {
-    case 0:
-        fprintf(xmlout,  "          <VideoMediaHeader BoxType=\"vmhd\">\n");
-        fprintf(xmlout,  "            <GraphicsMode>0x%02x</GraphicsMode>\n",
-                track->graphicsmode);
-        if (notes) {
-            fprintf(xmlout, "            <!-- Enumerated values of graphics mode: -->\n");
-            fprintf(xmlout, "            <!--  0x00 = copy (over existing image); -->\n");
-            fprintf(xmlout,
-                    "            <!--  0x24 = transparent; 'blue-screen' this image using opcolor; -->\n");
-            fprintf(xmlout,
-                    "            <!--  0x100 = alpha; alpha-blend this image -->\n");
-            /*    fprintf(xmlout,"            <!--  0x101 = whitealpha; alpha-blend this image, which has been blended with white; -->\n"); This was evidently dropped upon amendment */
-            fprintf(xmlout,
-                    "            <!--  0x102 = pre-multiplied black alpha; image has been already been alpha-blended with black. -->\n");
-            fprintf(xmlout,
-                    "            <!--  0x110 = component alpha; blend alpha channel(s) and color channels individually. -->\n");
-        }
-        fprintf(xmlout,  "            <Opcolor>\n");
-        fprintf(xmlout,  "              <Red>0x%02x</Red>\n", track->opcolor[0]);
-        fprintf(xmlout,  "              <Green>0x%02x</Green>\n", track->opcolor[1]);
-        fprintf(xmlout,  "              <Blue>0x%02x</Blue>\n", track->opcolor[2]);
-        fprintf(xmlout,  "            </Opcolor>\n");
-        fprintf(xmlout,  "          </VideoMediaHeader>\n");
-        break;
-    case 1:
-        fprintf(xmlout,  "          <SoundMediaHeader BoxType=\"smhd\">\n");
-#ifdef CURRENTSTRUCT
-        track->balance = track->balance << 8;
-#endif
-        fprintf(xmlout,  "            <Balance>\n");
-        if (notes) {
-            fprintf(xmlout,
-                    "              <!-- Track audio balance fixes mono track in stereo space. -->\n");
-            fprintf(xmlout,
-                    "              <!-- Stored as fixed-point binary 8.8 value. Decimal value is approximation. -->\n");
-            fprintf(xmlout,
-                    "              <!-- 0.0 = center, -1.0 = full left, 1.0 = full right -->\n");
-        }
-        if (raw) {
-            fprintf(xmlout, "              <AsHex>0x%04x</AsHex>\n", track->balance);
-        }
-        if (derived) {
-            fprintf(xmlout, "              <AsDecimal>%6.3f</AsDecimal>\n",
-                    (double)track->balance / (double)0x0100);
-        }
-        fprintf(xmlout,  "            </Balance>\n");
-#ifdef CURRENTSTRUCT
-        if (notes) {
-            fprintf(xmlout,
-                    "            <!-- Current m2j_to_metadata implementation always shows bits to right of decimal as zeroed. -->\n");
-        }
-        track->balance = track->balance >> 8;
-#endif
-        fprintf(xmlout,  "          </SoundMediaHeader>\n");
-        break;
-    case 2:
-        fprintf(xmlout,  "          <HintMediaHeader BoxType=\"hmhd\">\n");
-        fprintf(xmlout,  "            <MaxPDU_Size>%d</MaxPDU_Size>\n",
-                track->maxPDUsize);
-        if (notes) {
-            fprintf(xmlout,
-                    "            <!-- Size in bytes of largest PDU in this hint stream. -->\n");
-        }
-        fprintf(xmlout,  "            <AvgPDU_Size>%d</AvgPDU_Size>\n",
-                track->avgPDUsize);
-        if (notes) {
-            fprintf(xmlout,
-                    "            <!-- Average size in bytes of a PDU over the entire presentation. -->\n");
-        }
-        fprintf(xmlout,  "            <MaxBitRate>%d</MaxBitRate>\n",
-                track->maxbitrate);
-        if (notes) {
-            fprintf(xmlout,
-                    "            <!-- Maximum rate in bits per second over any window of 1 second. -->\n");
-        }
-        fprintf(xmlout,  "            <AvgBitRate>%d</AvgBitRate>\n",
-                track->avgbitrate);
-        if (notes) {
-            fprintf(xmlout,
-                    "            <!-- Averate rate in bits per second over the entire presentation. -->\n");
-        }
-        fprintf(xmlout,  "            <SlidingAvgBit>%d</SlidingAvgBitRate>\n",
-                track->slidingavgbitrate);
-        if (notes) {
-            fprintf(xmlout,
-                    "            <!-- Maximum rate in bits per second over any window of one minute. -->\n");
-        }
-        fprintf(xmlout,  "          </HintMediaHeader>\n");
-        break;
-    }
-    fprintf(xmlout,    "          <DataInfo BoxType=\"dinf\">\n");
-    fprintf(xmlout,
-            "            <DataReference BoxType=\"dref\"  URL_Count=\"%d\" URN_Count=\"%d\">\n",
-            track->num_url, track->num_urn); // table w. flags, URLs, URNs
-    // Data structure does not distinguish between single URL, single URN, or DREF table or URLs & URNs.
-    // We could infer those, but for now just present everything as a DREF table.
-    if (notes) {
-        fprintf(xmlout,
-                "              <!-- No entries here mean that file is self-contained, as required by Simple Profile. -->\n");
-    }
-    for (k = 0; k < track->num_url; k++) {
-        fprintf(xmlout,
-                "            <DataEntryUrlBox BoxType=\"url[space]\">\n"); // table w. flags, URLs, URNs
-        if (notes) {
-            fprintf(xmlout,
-                    "              <!-- Only the first 16 bytes of URL location are recorded in mj2_to_metadata data structure. -->\n");
-        }
-        for (i = 0; i < 4; i++) {
-            uint_to_chars(track->url[track->num_url].location[i], buf);
-            fprintf(xmlout,  "              <Location>%s</Location>\n", buf);
-        }
-        fprintf(xmlout,
-                "            </DataEntryUrlBox>\n"); // table w. flags, URLs, URNs
-    }
-    for (k = 0; k < track->num_urn; k++) {
-        fprintf(xmlout,
-                "            <DataEntryUrnBox BoxType=\"urn[space]\">\n"); // table w. flags, URLs, URNs
-        // Only the first 16 bytes are recorded in the data structure currently.
-        if (notes) {
-            fprintf(xmlout,
-                    "              <!-- Only the first 16 bytes each of URN name and optional location are recorded in mj2_to_metadata data structure. -->\n");
-        }
-        fprintf(xmlout,  "              <Name>");
-        for (i = 0; i < 4; i++) {
-            uint_to_chars(track->urn[track->num_urn].name[i], buf);
-            fprintf(xmlout, "%s", buf);
-        }
-        fprintf(xmlout,  "</Name>\n");
-        fprintf(xmlout,  "              <Location>");
-        for (i = 0; i < 4; i++) {
-            uint_to_chars(track->urn[track->num_urn].location[i], buf);
-            fprintf(xmlout, "%s", buf);
-        }
-        fprintf(xmlout,  "</Location>\n");
-        fprintf(xmlout,  "            </DataEntryUrnBox>\n");
-    }
-    fprintf(xmlout,    "            </DataReference>\n");
-    fprintf(xmlout,    "          </DataInfo>\n");
-
-    xml_write_stbl(file, xmlout, track, tnum); /* SampleTable */
-
-    fprintf(xmlout,    "        </MediaInfoContainer>\n");
-    fprintf(xmlout,    "      </Media>\n");
-}
-
-/* ------------- */
-
-void xml_write_stbl(FILE* file, FILE* xmlout, mj2_tk_t *track,
-                    unsigned int tnum)
-{
-    char buf[5], buf33[33];
-    int i, len;
-    buf[4] = '\0';
-
-    fprintf(xmlout,      "          <SampleTable BoxType=\"stbl\">\n");
-    if (notes) {
-        fprintf(xmlout,
-                "            <!-- What follows are specific instances of generic SampleDescription BoxType=\"stsd\" -->\n");
-    }
-    switch (track->track_type) {
-    case 0:
-        // There could be multiple instances of this, but "entry_count" is just a local at read-time.
-        // And it's used wrong, too, as count of just visual type, when it's really all 3 types.
-        // This is referred to as "smj2" within mj2.c
-        fprintf(xmlout,    "            <VisualSampleEntry BoxType=\"mjp2\">\n");
-        if (notes) {
-            fprintf(xmlout,
-                    "            <!-- If multiple instances of this box, only first is shown here. -->\n");
-            fprintf(xmlout,
-                    "            <!-- Width and Height are in pixels.  Unlike the Track Header, there is no fractional part. -->\n");
-            fprintf(xmlout,
-                    "            <!-- In mj2_to_metadata implementation, the values are not represented separately from Track Header's values. -->\n");
-        }
-        /* No shifting required.  If CURRENTSTRUCT gets changed, then may need to revisit treatment of these */
-        fprintf(xmlout,    "              <WidthAsInteger>%d</WidthAsInteger>\n",
-                track->w);
-        fprintf(xmlout,    "              <HeightAsInteger>%d</HeightAsInteger>\n",
-                track->h);
-// Horizresolution and vertresolution don't require shifting, already stored right in CURRENTSTRUCT
-        if (notes) {
-            fprintf(xmlout,
-                    "              <!-- Resolutions are in pixels per inch, for the highest-resolution component (typically luminance). -->\n");
-            fprintf(xmlout,
-                    "              <!-- Both stored as fixed-point binary 16.16 values. Decimal values are approximations. -->\n");
-            fprintf(xmlout,
-                    "              <!-- Typical value for both resolutions is 0x00480000  (72.0) -->\n");
-        }
-        fprintf(xmlout,    "              <HorizontalRes>\n");
-        if (raw) {
-            fprintf(xmlout,  "                <AsHex>0x%08x</AsHex>\n",
-                    track->horizresolution);
-        }
-        if (derived) {
-            fprintf(xmlout,  "                <AsDecimal>%12.6f</AsDecimal>\n",
-                    (double)track->horizresolution / (double)
-                    0x00010000);    /* Rate to play presentation  (default = 0x00010000)          */
-        }
-        fprintf(xmlout,    "              </HorizontalRes>\n");
-        fprintf(xmlout,    "              <VerticalRes>\n");
-        if (raw) {
-            fprintf(xmlout,  "                <AsHex>0x%08x</AsHex>\n",
-                    track->vertresolution);
-        }
-        if (derived) {
-            fprintf(xmlout,  "                <AsDecimal>%12.6f</AsDecimal>\n",
-                    (double)track->vertresolution / (double)
-                    0x00010000);    /* Rate to play presentation  (default = 0x00010000)          */
-        }
-        fprintf(xmlout,    "              </VerticalRes>\n");
-
-        buf33[0] = '\0';
-        for (i = 0; i < 8; i++) {
-            uint_to_chars((unsigned int)track->compressorname[i], buf);
-            strcat(buf33,
-                   buf); /* This loads up (4 * 8) + 1 chars, but trailing ones are usually junk */
-        }
-        len = (int)
-              buf33[0]; /* First byte has string length in bytes.  There may be garbage beyond it. */
-        buf33[len + 1] = '\0'; /* Suppress it */
-        fprintf(xmlout,    "              <CompressorName>%s</CompressorName>\n",
-                buf33 + 1); /* Start beyond first byte */
-        if (notes) {
-            fprintf(xmlout,
-                    "              <!-- Compressor name for debugging.  Standard restricts max length to 31 bytes. -->\n");
-            fprintf(xmlout,
-                    "              <!-- Usually blank or \"Motion JPEG2000\" -->\n");
-        }
-        fprintf(xmlout,    "              <Depth>0x%02x</Depth>\n", track->depth);
-        if (notes) {
-            fprintf(xmlout,  "              <!-- Depth is: -->\n");
-            fprintf(xmlout,
-                    "              <!--   0x20: alpha channels present (color or grayscale) -->\n");
-            fprintf(xmlout,  "              <!--   0x28: grayscale without alpha -->\n");
-            fprintf(xmlout,  "              <!--   0x18: color without alpha -->\n");
-        }
-
-        xml_out_frame_jp2h(xmlout, &(track->jp2_struct));  /* JP2 Header */
-
-        /* Following subboxes are optional */
-        fprintf(xmlout,    "              <FieldCoding BoxType=\"fiel\">\n");
-        fprintf(xmlout,    "                <FieldCount>%d</FieldCount>\n",
-                (unsigned int)track->fieldcount); /* uchar as 1 byte uint */
-        if (notes) {
-            fprintf(xmlout,  "                <!-- Must be either 1 or 2 -->\n");
-        }
-        fprintf(xmlout,    "                <FieldOrder>%d</FieldOrder>\n",
-                (unsigned int)track->fieldorder); /* uchar as 1 byte uint */
-        if (notes) {
-            fprintf(xmlout,
-                    "                <!-- When FieldCount=2, FieldOrder means: -->\n");
-            fprintf(xmlout,  "                <!--   0: Field coding unknown -->\n");
-            fprintf(xmlout,
-                    "                <!--   1: Field with topmost line is stored first in sample; fields are in temporal order -->\n");
-            fprintf(xmlout,
-                    "                <!--   6: Field with topmost line is stored second in sample; fields are in temporal order -->\n");
-            fprintf(xmlout,
-                    "                <!-- Defaults: FieldCount=1, FieldOrder=0 if FieldCoding box not present -->\n");
-            fprintf(xmlout,
-                    "                <!-- Current implementation doesn't retain whether box was actually present. -->\n");
-        }
-        fprintf(xmlout,    "              </FieldCoding>\n");
-
-        fprintf(xmlout,
-                "              <MJP2_Profile BoxType=\"jp2p\" Count=\"%d\">\n", track->num_br);
-        for (i = 0; i < track->num_br;
-                i++) { /* read routine stored in reverse order, so let's undo damage */
-            uint_to_chars(track->br[i], buf);
-            fprintf(xmlout,  "                <CompatibleBrand>%s</CompatibleBrand>\n",
-                    buf);    /*4 characters, each CLi */
-        }
-        fprintf(xmlout,    "              </MJP2_Profile>\n");
-
-        fprintf(xmlout,
-                "              <MJP2_Prefix BoxType=\"jp2x\" Count=\"%d\">\n", track->num_jp2x);
-        for (i = 0; i < track->num_jp2x; i++) {
-            // We'll probably need better formatting than this
-            fprintf(xmlout,  "                <Data>0x%02x</Data>\n",
-                    track->jp2xdata[i]);    /* Each entry is single byte */
-        }
-        fprintf(xmlout,    "              </MJP2_Prefix>\n");
-
-        fprintf(xmlout,
-                "              <MJP2_SubSampling BoxType=\"jsub\">\n"); /* These values are all 1 byte */
-        if (notes) {
-            fprintf(xmlout,
-                    "              <!-- Typical subsample value is 2 for 4:2:0 -->\n");
-        }
-        fprintf(xmlout,    "                <HorizontalSub>%d</HorizontalSub>\n",
-                track->hsub);
-        fprintf(xmlout,    "                <VerticalSub>%d</VerticalSub>\n",
-                track->vsub);
-        fprintf(xmlout,    "                <HorizontalOffset>%d</HorizontalOffset>\n",
-                track->hoff);
-        fprintf(xmlout,    "                <VerticalOffset>%d</VerticalOffset>\n",
-                track->voff);
-        if (notes) {
-            fprintf(xmlout,
-                    "                <!-- Typical {horizontal, vertical} chroma offset values: -->\n");
-            fprintf(xmlout,
-                    "                <!-- 4:2:2 format (CCIR601, H.262, MPEG2, MPEG4, recom. Exif): {0, 0} -->\n");
-            fprintf(xmlout,
-                    "                <!-- 4:2:2 format (JFIF):                                      {1, 0} -->\n");
-            fprintf(xmlout,
-                    "                <!-- 4:2:0 format (H.262, MPEG2, MPEG4):                       {0, 1} -->\n");
-            fprintf(xmlout,
-                    "                <!-- 4:2:0 format (MPEG1, H.261, JFIF, recom. Exif):           {1, 1} -->\n");
-        }
-        fprintf(xmlout,
-                "              </MJP2_SubSampling>\n"); /* These values are all 1 byte */
-
-        fprintf(xmlout,
-                "              <MJP2_OriginalFormat BoxType=\"orfo\">\n"); /* Part III Appx. 2 */
-        fprintf(xmlout,
-                "                <OriginalFieldCount>%u</OriginalFieldCount>\n",
-                (unsigned int)track->or_fieldcount); /* uchar as 1-byte uint */
-        if (notes) {
-            fprintf(xmlout,
-                    "                <!-- In original material before encoding.  Must be either 1 or 2 -->\n");
-        }
-        fprintf(xmlout,
-                "                <OriginalFieldOrder>%u</OriginalFieldOrder>\n",
-                (unsigned int)track->or_fieldorder); /* uchar as 1-byte uint */
-        if (notes) {
-            fprintf(xmlout,
-                    "                <!-- When FieldCount=2, FieldOrder means: -->\n");
-            fprintf(xmlout,  "                <!--   0: Field coding unknown -->\n");
-            fprintf(xmlout,
-                    "                <!--   11: Topmost line came from the earlier field; -->\n");
-            fprintf(xmlout,
-                    "                <!--   16:  Topmost line came form the later field. -->\n");
-            fprintf(xmlout,
-                    "                <!-- Defaults: FieldCount=1, FieldOrder=0 if FieldCoding box not present -->\n");
-            fprintf(xmlout,
-                    "                <!-- Current implementation doesn't retain whether box was actually present. -->\n");
-        }
-        fprintf(xmlout,    "              </MJP2_OriginalFormat>\n");
-        fprintf(xmlout,    "            </VisualSampleEntry>\n");
-        break;
-    case 1:
-    case 2:
-        if (notes) {
-            fprintf(xmlout,
-                    "            <!-- mj2_to_metadata's data structure doesn't record this currently. -->\n");
-        }
-        break;
-    }
-    fprintf(xmlout,      "            <TimeToSample BoxType=\"stts\">\n");
-    fprintf(xmlout,      "              <SampleStatistics>\n");
-    fprintf(xmlout,      "                <TotalSamples>%d</TotalSamples>\n",
-            track->num_samples);
-    if (notes) {
-        fprintf(xmlout,
-                "                <!-- For video, gives the total frames in the track, by summing all entries in the Sample Table -->\n");
-    }
-    fprintf(xmlout,      "              </SampleStatistics>\n");
-    fprintf(xmlout,      "              <SampleEntries EntryCount=\"%d\">\n",
-            track->num_tts);
-    for (i = 0; i < track->num_tts; i++) {
-        fprintf(xmlout,
-                "                <Table Entry=\"%u\" SampleCount=\"%d\" SampleDelta=\"%u\" />\n",
-                i + 1, track->tts[i].sample_count, track->tts[i].sample_delta);
-    }
-    fprintf(xmlout,      "              </SampleEntries>\n");
-    fprintf(xmlout,      "            </TimeToSample>\n");
-
-    fprintf(xmlout,
-            "            <SampleToChunk BoxType=\"stsc\" Count=\"%d\">\n",
-            track->num_samplestochunk);
-    for (i = 0; i < track->num_samplestochunk; i++) {
-        fprintf(xmlout,    "              <FirstChunk>%u</FirstChunk>\n",
-                track->sampletochunk[i].first_chunk); /* 4 bytes */
-        fprintf(xmlout,    "              <SamplesPerChunk>%u</SamplesPerChunk>\n",
-                track->sampletochunk[i].samples_per_chunk); /* 4 bytes */
-        fprintf(xmlout,    "              <SampleDescrIndex>%u</SampleDescrIndex>\n",
-                track->sampletochunk[i].sample_descr_idx); /* 4 bytes */
-    }
-    fprintf(xmlout,      "            </SampleToChunk>\n");
-    // After reading this info in, track->num_chunks is calculated and a decompressed table established internally.
-
-    fprintf(xmlout,      "            <SampleSize BoxType=\"stsz\">\n");
-    if (track->same_sample_size) {
-        // all values in track->sample[i].sample_size are equal.  Grab the first one.
-        fprintf(xmlout,    "              <Sample_Size>%u</Sample_Size>\n",
-                track->sample[0].sample_size);
-        if (notes) {
-            fprintf(xmlout,
-                    "              <!-- Non-zero value means all samples have that size. -->\n");
-            fprintf(xmlout,
-                    "              <!-- So <Sample_Count> (aka Entry_Count in std.) has no meaning, is suppressed from this output, and no table follows. -->\n");
-        }
-    } else {
-        fprintf(xmlout,    "              <Sample_Size>0</Sample_Size>\n");
-        if (notes)
-            if (sampletables) {
-                fprintf(xmlout,
-                        "              <!-- Zero value means samples have different sizes, given in table next of length Sample_Count (aka Entry_Count in std). -->\n");
-            } else {
-                fprintf(xmlout,
-                        "              <!-- Zero value means samples have different sizes, given in table (not shown) of length Sample_Count (aka Entry_Count in std). -->\n");
-            }
-        fprintf(xmlout,    "              <Sample_Count>%u</Sample_Count>\n",
-                track->num_samples);
-        if (sampletables)
-            for (i = 0; i < (int)track->num_samples; i++) {
-                fprintf(xmlout,  "              <EntrySize Num=\"%u\">%u</EntrySize>\n", i + 1,
-                        track->sample[i].sample_size);
-            }
-    }
-    fprintf(xmlout,      "            </SampleSize>\n");
-
-    fprintf(xmlout,      "            <ChunkOffset BoxType=\"stco\">\n");
-    // Structure not yet - Variant ChunkLargeOffset 'co64'
-    fprintf(xmlout,      "              <EntryCount>%u</EntryCount>\n",
-            track->num_chunks);
-    if (notes) {
-        fprintf(xmlout,
-                "              <!-- For this implementation, EntryCount shown is one calculated during file read of <SampleToChunk> data. -->\n");
-        fprintf(xmlout,
-                "              <!-- Implementation will report failure during file read of <ChunkOffset> data if read entry-count disagrees. -->\n");
-    }
-    if (sampletables)
-        for (i = 0; i < (int)track->num_chunks; i++) {
-            fprintf(xmlout,  "              <Chunk_Offset Num=\"%d\">%u</Chunk_Offset>\n",
-                    i + 1, track->chunk[i].offset);
-        }
-    fprintf(xmlout,      "            </ChunkOffset>\n");
-
-    fprintf(xmlout,      "          </SampleTable>\n");
-}
-
-/* ------------- */
-
-int xml_out_frame(FILE* file, FILE* xmlout, mj2_sample_t *sample,
-                  unsigned int snum, opj_event_mgr_t *event_mgr)
-{
-    opj_dparameters_t parameters;   /* decompression parameters */
-    opj_image_t *img;
-    opj_cp_t *cp;
-    int i;
-    int numcomps;
-    unsigned char* frame_codestream;
-    opj_dinfo_t* dinfo = NULL;  /* handle to a decompressor */
-    opj_cio_t *cio = NULL;
-    opj_j2k_t *j2k;
-
-    /* JPEG 2000 compressed image data */
-
-    /* get a decoder handle */
-    dinfo = opj_create_decompress(CODEC_J2K);
-
-    /* catch events using our callbacks and give a local context */
-    opj_set_event_mgr((opj_common_ptr)dinfo, event_mgr, stderr);
-
-    /* setup the decoder decoding parameters using the current image and user parameters */
-    parameters.cp_limit_decoding = DECODE_ALL_BUT_PACKETS;
-    opj_setup_decoder(dinfo, &parameters);
-
-    frame_codestream = (unsigned char*) malloc(sample->sample_size -
-                       8); /* Skipping JP2C marker */
-    if (frame_codestream == NULL) {
-        return 1;
-    }
-
-    fseek(file, sample->offset + 8, SEEK_SET);
-    fread(frame_codestream, sample->sample_size - 8, 1,
-          file); /* Assuming that jp and ftyp markers size do */
-
-    /* open a byte stream */
-    cio = opj_cio_open((opj_common_ptr)dinfo, frame_codestream,
-                       sample->sample_size - 8);
-
-    /* Decode J2K to image: */
-    img = opj_decode(dinfo, cio);
-    if (!img) {
-        fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n");
-        opj_destroy_decompress(dinfo);
-        opj_cio_close(cio);
-        return 1;
-    }
-
-    j2k = (opj_j2k_t*)dinfo->j2k_handle;
-    j2k_default_tcp = j2k->default_tcp;
-    cp = j2k->cp;
-
-    numcomps = img->numcomps;
-    /*  Alignments:        "      <       To help maintain xml pretty-printing */
-    fprintf(xmlout,      "      <JP2_Frame Num=\"%d\">\n", snum + 1);
-    fprintf(xmlout,      "        <MainHeader>\n");
-    /* There can be multiple codestreams; a particular image is entirely within a single codestream */
-    /* TO DO:  A frame can be represented by two I-guess-contiguous codestreams if its interleaved. */
-    fprintf(xmlout,      "          <StartOfCodestream Marker=\"SOC\" />\n");
-    /* "cp" stands for "coding parameter"; "tcp" is tile coding parameters, "tccp" is tile-component coding parameters */
-    xml_out_frame_siz(xmlout, img, cp); /* reqd in main */
-    xml_out_frame_cod(xmlout, j2k_default_tcp); /* reqd in main */
-    xml_out_frame_coc(xmlout, j2k_default_tcp,
-                      numcomps); /* opt in main, at most 1 per component */
-    xml_out_frame_qcd(xmlout, j2k_default_tcp); /* reqd in main */
-    xml_out_frame_qcc(xmlout, j2k_default_tcp,
-                      numcomps); /* opt in main, at most 1 per component */
-    xml_out_frame_rgn(xmlout, j2k_default_tcp,
-                      numcomps); /* opt, at most 1 per component */
-    xml_out_frame_poc(xmlout,
-                      j2k_default_tcp); /*  opt (but reqd in main or tile for any progression order changes) */
-    /* Next four get j2k_default_tcp passed globally: */
-#ifdef SUPPRESS_FOR_NOW
-    xml_out_frame_ppm(xmlout,
-                      cp); /* opt (but either PPM or PPT [distributed in tile headers] or codestream packet header reqd) */
-#endif
-    xml_out_frame_tlm(
-        xmlout); /* NO-OP.  TLM NOT SAVED IN DATA STRUCTURE */ /* opt */
-    xml_out_frame_plm(
-        xmlout); /* NO-OP.  PLM NOT SAVED IN DATA STRUCTURE */ /* opt in main; can be used in conjunction with PLT */
-    xml_out_frame_crg(
-        xmlout); /* NO-OP.  CRG NOT SAVED IN DATA STRUCTURE */ /* opt in main; */
-    xml_out_frame_com(xmlout,
-                      j2k_default_tcp); /* NO-OP.  COM NOT SAVED IN DATA STRUCTURE */ /* opt in main; */
-
-    fprintf(xmlout,      "        </MainHeader>\n");
-
-    /*    TO DO: all the tile headers (sigh)  */
-    fprintf(xmlout,      "        <TilePartHeaders Count=\"%d\">\n",
-            cp->tileno_size);        /* size of the vector tileno */
-    for (i = 0; i < cp->tileno_size;
-            i++) { /* I think cp->tileno_size will be same number as (cp->tw * cp->th) or as global j2k_curtileno */
-        // Standard seems to use zero-based # for tile-part.
-        fprintf(xmlout,    "          <TilePartHeader Num=\"%d\" ID=\"%d\">\n", i,
-                cp->tileno[i]);          /* ID number of the tiles present in the codestream */
-        fprintf(xmlout,    "            <StartOfTilePart Marker=\"SOT\" />\n");
-        /* All markers in tile-part headers (between SOT and SOD) are optional, unless structure requires. */
-        if (i == 0) {
-            xml_out_frame_cod(xmlout, &(cp->tcps[i])); /* No more than 1 per tile */
-            xml_out_frame_coc(xmlout, &(cp->tcps[i]),
-                              numcomps); /* No more than 1 per component */
-            xml_out_frame_qcd(xmlout, &(cp->tcps[i])); /* No more than 1 per tile */
-            xml_out_frame_qcc(xmlout, &(cp->tcps[i]),
-                              numcomps);  /* No more than 1 per component */
-            xml_out_frame_rgn(xmlout, &(cp->tcps[i]),
-                              numcomps); /* No more than 1 per component */
-        }
-        xml_out_frame_poc(xmlout,
-                          &(cp->tcps[i])); /* Reqd only if any progression order changes different from main POC */
-#ifdef SUPPRESS_FOR_NOW
-        xml_out_frame_ppt(xmlout,
-                          &(cp->tcps[i])); /* Either PPT [distributed in tile headers] or PPM or codestream packet header reqd. */
-#endif
-        xml_out_frame_plt(xmlout,
-                          &(cp->tcps[i])); /* NO-OP.  PLT NOT SAVED IN DATA STRUCTURE */ /* Can be used in conjunction with main's PLM */
-        xml_out_frame_com(xmlout,
-                          &(cp->tcps[i])); /* NO-OP.  COM NOT SAVED IN DATA STRUCTURE */
-        /* opj_tcp_t * cp->tcps; "tile coding parameters" */
-        /* Maybe not: fprintf(xmlout,  "        <>%d</>, cp->matrice[i];            */ /* Fixed layer    */
-        fprintf(xmlout,    "            <StartOfData Marker=\"SOD\" />\n");
-        if (notes) {
-            fprintf(xmlout,
-                    "            <!-- Tile-part bitstream, not shown, follows tile-part header and SOD marker. -->\n");
-        }
-        fprintf(xmlout,    "          </TilePartHeader>\n");
-    }
-    fprintf(xmlout,
-            "        </TilePartHeaders>\n");     /* size of the vector tileno */
-
-#ifdef NOTYET
-    IMAGINE the cp object has data to support the following... but we could use an
-    new different data structure instead
-    /* I'm unclear if the span of the original fread(frame_codestream...) included the following items if they're trailing. */
-    /* ALSO TO DO, BUT DATA STRUCTURE DOESN'T HANDLE YET: boxes (anywhere in file except before the Filetype box): */
-    xml_out_frame_jp2i(xmlout,
-                       &cp); /* IntellectualProperty 'jp2i' (no restrictions on location) */
-    xml_out_frame_xml(xmlout,
-                      &cp); /* XML 'xml\040' (0x786d6c20).  Can appear multiply */
-    xml_out_frame_uuid(xmlout, &cp); /* UUID 'uuid' (top level only) */
-    xml_out_frame_uinf(xmlout,
-                       &cp); /* UUIDInfo 'uinf', includes UUIDList 'ulst' and URL 'url\40' */
-#endif
-
-    fprintf(xmlout,      "      </JP2_Frame>\n");
-
-    /* Extra commentary: */
-    if (notes) {
-        fprintf(xmlout,
-                "      <!-- Given the number and size of components, mj2_to_frame would try to convert this -->\n");
-        if (((img->numcomps == 3) && (img->comps[0].dx == img->comps[1].dx / 2)
-                && (img->comps[0].dx == img->comps[2].dx / 2) && (img->comps[0].dx == 1))
-                || (img->numcomps == 1)) {
-            fprintf(xmlout,  "      <!-- file to a YUV movie in the normal manner. -->\n");
-        } else if ((img->numcomps == 3) &&
-                   (img->comps[0].dx == 1) && (img->comps[1].dx == 1) &&
-                   (img->comps[2].dx == 1))  {// If YUV 4:4:4 input --> to bmp
-            fprintf(xmlout,  "      <!-- YUV 4:4:4 file to a series of .bmp files. -->\n");
-        } else {
-            fprintf(xmlout,
-                    "      <!-- file whose image component dimension are unknown, to a series of .j2k files. -->\n");
-        }
-    }
-
-    opj_destroy_decompress(dinfo);
-    opj_cio_close(cio);
-    free(frame_codestream);
-
-    return 0;
-}
-
-/* ------------- */
-
-void int16_to_3packedchars(short int value, char* buf)
-{
-    /* This is to retrieve the 3-letter ASCII language code */
-    /* Each char is packed into 5 bits, as difference from 0x60 */
-    int i;
-    for (i = 2; i >= 0; i--) {
-        buf[i] = (value & 0x001f) + 0x60;
-        value = (value >> 5);
-    }
-    buf[3] = '\0';
-}
-
-/* ------------- */
-
-void xml_out_frame_siz(FILE* xmlout, opj_image_t *img, opj_cp_t *cp)
-{
-    opj_image_comp_t *comp;
-    int i;
-
-    fprintf(xmlout,    "          <ImageAndFileSize Marker=\"SIZ\">\n");
-    // This is similar to j2k.c's j2k_dump_image.
-    // Not of interest: Lsiz, Rsiz
-    fprintf(xmlout,    "            <Xsiz>%d</Xsiz>\n", img->x1);
-    fprintf(xmlout,    "            <Ysiz>%d</Ysiz>\n", img->y1);
-    if (notes) {
-        fprintf(xmlout,
-                "            <!-- Xsiz, Ysiz is the size of the reference grid. -->\n");
-    }
-    fprintf(xmlout,    "            <XOsiz>%d</XOsiz>\n", img->x0);
-    fprintf(xmlout,    "            <YOsiz>%d</YOsiz>\n", img->y0);
-    if (notes) {
-        fprintf(xmlout,
-                "            <!-- XOsiz, YOsiz are offsets from grid origin to image origin. -->\n");
-    }
-    fprintf(xmlout,    "            <XTsiz>%d</XTsiz>\n", cp->tdx);
-    fprintf(xmlout,    "            <YTsiz>%d</YTsiz>\n", cp->tdy);
-    if (notes) {
-        fprintf(xmlout,
-                "            <!-- XTsiz, YTsiz is the size of one tile with respect to the grid. -->\n");
-    }
-    fprintf(xmlout,    "            <XTOsiz>%d</XTOsiz>\n", cp->tx0);
-    fprintf(xmlout,    "            <YTOsiz>%d</YTOsiz>\n", cp->ty0);
-    if (notes) {
-        fprintf(xmlout,
-                "            <!-- XTOsiz, YTOsiz are offsets from grid origin to first tile origin. -->\n");
-    }
-    fprintf(xmlout,    "            <Csiz>%d</Csiz>\n", img->numcomps);
-    if (notes) {
-        fprintf(xmlout,
-                "            <!-- Csiz is the number of components in the image. -->\n");
-        fprintf(xmlout,  "            <!-- For image components next: -->\n");
-        fprintf(xmlout,
-                "            <!--   XRsiz, YRsiz denote pixel-sample-spacing on the grid, per Part I Annex B. -->\n");
-        //fprintf(xmlout,"            <!--   XO, YO is offset of the component compared to the whole image. -->\n");
-        fprintf(xmlout,
-                "            <!--   Bits per pixel (bpp) is the pixel depth. -->\n");
-        fprintf(xmlout,
-                "            <!--   WidthOfData and HeightOfData are calculated values, e.g.: w = roundup((Xsiz - XOsiz)/ XRsiz) -->\n");
-    }
-
-    for (i = 0; i < img->numcomps; i++) {/* image-components */
-        comp = &(img->comps[i]);
-        fprintf(xmlout,  "            <Component Num=\"%d\">\n", i + 1);
-        fprintf(xmlout,  "              <Ssiz>\n");
-        if (raw) {
-            fprintf(xmlout, "                <AsHex>0x%02x</AsHex>\n",
-                    (comp->sgnd << 7) & (comp->prec - 1));
-        }
-        if (derived) {
-            fprintf(xmlout, "                <Signed>%d</Signed>\n", comp->sgnd);
-            fprintf(xmlout, "                <PrecisionInBits>%d</PrecisionInBits>\n",
-                    comp->prec);
-        }
-        fprintf(xmlout,  "              </Ssiz>\n");
-        fprintf(xmlout,  "              <XRsiz>%d</XRsiz>\n", comp->dx);
-        fprintf(xmlout,  "              <YRsiz>%d</YRsiz>\n", comp->dy);
-        fprintf(xmlout,  "              <WidthOfData>%d</WidthOfData>\n", comp->w);
-        fprintf(xmlout,  "              <HeightOfData>%d</HeightOfData>\n", comp->h);
-        /* Rest of these aren't calculated when SIZ is read:
-        fprintf(xmlout,  "              <XO>%d</XO>\n", comp->x0);
-        fprintf(xmlout,  "              <YO>%d</YO>\n", comp->y0);
-        if(notes)
-          fprintf(xmlout,"              <!--  XO, YO is offset of the component compared to the whole image. -->\n");
-        fprintf(xmlout,  "              <BitsPerPixel>%d</BitsPerPixel>\n", comp->bpp);
-        fprintf(xmlout,  "              <NumberOfDecodedResolution>%d</NumberOfDecodedResolution>\n", comp->resno_decoded); */
-        // SUPPRESS: n/a to mj2_to_metadata.  fprintf(xmlout,"        <Factor>%d</Factor\n", comp->factor);
-        /* factor = number of division by 2 of the out image  compare to the original size of image */
-        // TO DO comp->data:  int *data;            /* image-component data      */
-
-        fprintf(xmlout,  "            </Component>\n");
-    }
-    fprintf(xmlout,    "          </ImageAndFileSize>\n");
-}
-
-/* ------------- */
-
-void xml_out_frame_cod(FILE* xmlout, opj_tcp_t *tcp)
-{
-    /* Could be called with tcp = &j2k_default_tcp;
-    /* Or, for tile-part header, with &j2k_cp->tcps[j2k_curtileno]
-    /*  Alignment for main:"          < < < <   To help maintain xml pretty-printing */
-    /*  Alignment for tile:"            < < <   To help maintain xml pretty-printing */
-    opj_tccp_t *tccp;
-    int i;
-    char spaces[13] = "            "; /* 12 spaces if tilepart*/
-    char* s = spaces;
-    if (tcp == j2k_default_tcp) {
-        s++;
-        s++; /* shorten s to 10 spaces if main */
-    }
-    tccp = &(tcp->tccps[0]);
-
-    fprintf(xmlout,      "%s<CodingStyleDefault Marker=\"COD\">\n",
-            s); /* Required in main header */
-    /* Not retained or of interest: Lcod */
-    fprintf(xmlout,      "%s  <Scod>0x%02x</Scod>\n", s, tcp->csty); /* 1 byte */
-    if (notes) {
-        fprintf(xmlout,
-                "%s  <!-- For Scod, specific bits mean (where bit 0 is lowest or rightmost): -->\n",
-                s);
-        fprintf(xmlout,    "%s  <!-- bit 0: Defines entropy coder precincts -->\n", s);
-        fprintf(xmlout,
-                "%s  <!--        0 = (PPx=15, PPy=15); 1 = precincts defined below. -->\n", s);
-        fprintf(xmlout,    "%s  <!-- bit 1: 1 = SOP marker may be used; 0 = not. -->\n",
-                s);
-        fprintf(xmlout,    "%s  <!-- bit 2: 1 = EPH marker may be used; 0 = not. -->\n",
-                s);
-    }
-    fprintf(xmlout,      "%s  <SGcod>\n", s);
-    fprintf(xmlout,      "%s    <ProgressionOrder>%d</ProgressionOrder>\n", s,
-            tcp->prg); /* 1 byte, SGcod (A) */
-    if (notes) {
-        fprintf(xmlout,    "%s    <!-- Defined Progression Order Values are: -->\n", s);
-        fprintf(xmlout,
-                "%s    <!-- 0 = LRCP; 1 = RLCP; 2 = RPCL; 3 = PCRL; 4 = CPRL -->\n", s);
-        fprintf(xmlout,
-                "%s    <!-- where L = \"layer\", R = \"resolution level\", C = \"component\", P = \"position\". -->\n",
-                s);
-    }
-    fprintf(xmlout,      "%s    <NumberOfLayers>%d</NumberOfLayers>\n", s,
-            tcp->numlayers); /* 2 bytes, SGcod (B) */
-    fprintf(xmlout,
-            "%s    <MultipleComponentTransformation>%d</MultipleComponentTransformation>\n",
-            s, tcp->mct); /* 1 byte, SGcod (C).  More or less boolean */
-    if (notes) {
-        fprintf(xmlout,
-                "%s    <!-- For MCT, 0 = none, 1 = transform first 3 components for efficiency, per Part I Annex G -->\n",
-                s);
-    }
-    fprintf(xmlout,      "%s  </SGcod>\n", s);
-    /* This code will compile only if declaration of j2k_default_tcp is changed from static (to implicit extern) in j2k.c */
-    fprintf(xmlout,      "%s  <SPcod>\n", s);
-    /* Internal data structure tccp defines separate defaults for each component, but they all get the same values */
-    /* So we only have to report the first component's values here. */
-    /* Compare j2k_read_cox(...) */
-    fprintf(xmlout,
-            "%s    <NumberOfDecompositionLevels>%d</NumberOfDecompositionLevels>\n", s,
-            tccp->numresolutions - 1);   /* 1 byte, SPcox (D) */
-    fprintf(xmlout,      "%s    <CodeblockWidth>%d</CodeblockWidth>\n", s,
-            tccp->cblkw - 2);  /* 1 byte, SPcox (E) */
-    fprintf(xmlout,      "%s    <CodeblockHeight>%d</CodeblockHeight>\n", s,
-            tccp->cblkh - 2);    /* 1 byte, SPcox (F) */
-    if (notes) {
-        fprintf(xmlout,
-                "%s    <!-- CBW and CBH are non-negative, and summed cannot exceed 8 -->\n", s);
-        fprintf(xmlout,    "%s    <!-- Codeblock dimension is 2^(value + 2) -->\n", s);
-    }
-    fprintf(xmlout,      "%s    <CodeblockStyle>0x%02x</CodeblockStyle>\n", s,
-            tccp->cblksty);    /* 1 byte, SPcox (G) */
-    if (notes) {
-        fprintf(xmlout,
-                "%s    <!-- For CodeblockStyle, bits mean (with value 1=feature on, 0=off): -->\n",
-                s);
-        fprintf(xmlout,
-                "%s    <!-- bit 0: Selective arithmetic coding bypass. -->\n", s);
-        fprintf(xmlout,
-                "%s    <!-- bit 1: Reset context probabilities on coding pass boundaries. -->\n",
-                s);
-        fprintf(xmlout,    "%s    <!-- bit 2: Termination on each coding pass. -->\n",
-                s);
-        fprintf(xmlout,    "%s    <!-- bit 3: Vertically causal context. -->\n", s);
-        fprintf(xmlout,    "%s    <!-- bit 4: Predictable termination. -->\n", s);
-        fprintf(xmlout,    "%s    <!-- bit 5: Segmentation symbols are used. -->\n", s);
-    }
-    fprintf(xmlout,      "%s    <Transformation>%d</Transformation>\n", s,
-            tccp->qmfbid); /* 1 byte, SPcox (H) */
-    if (notes) {
-        fprintf(xmlout,
-                "%s    <!-- For Transformation, 0=\"9-7 irreversible filter\", 1=\"5-3 reversible filter\" -->\n",
-                s);
-    }
-    if (tccp->csty & J2K_CP_CSTY_PRT) {
-        fprintf(xmlout,    "%s    <PrecinctSize>\n", s); /* 1 byte, SPcox (I_i) */
-        if (notes) {
-            fprintf(xmlout,
-                    "%s    <!-- These are size exponents PPx and PPy. May be zero only for first level (aka N(L)LL subband)-->\n",
-                    s);
-        }
-        for (i = 0; i < tccp->numresolutions; i++) {
-            fprintf(xmlout,  "%s      <PrecinctHeightAndWidth  ResolutionLevel=\"%d\">\n",
-                    s, i);
-            if (raw) {
-                fprintf(xmlout, "%s        <AsHex>0x%02x</AsHex>\n", s,
-                        (tccp->prch[i] << 4) | tccp->prcw[i]);    /* packed into 1 byte, SPcox (G) */
-            }
-            if (derived) {
-                fprintf(xmlout, "%s        <WidthAsDecimal>%d</WidthAsDecimal>\n", s,
-                        tccp->prcw[i]);
-                fprintf(xmlout, "%s        <HeightAsDecimal>%d</HeightAsDecimal>\n", s,
-                        tccp->prch[i]);
-            }
-            fprintf(xmlout,  "%s      </PrecinctHeightAndWidth>\n", s, i);
-        }
-        fprintf(xmlout,    "%s    </PrecinctSize>\n", s); /* 1 byte, SPcox (I_i) */
-    }
-    fprintf(xmlout,      "%s  </SPcod>\n", s);
-    fprintf(xmlout,      "%s</CodingStyleDefault>\n", s);
-}
-
-/* ------------- */
-
-void xml_out_frame_coc(FILE* xmlout, opj_tcp_t *tcp,
-                       int numcomps) /* Optional in main & tile-part headers */
-{
-    /* Uses global j2k_default_tcp */
-    opj_tccp_t *tccp, *firstcomp_tccp;
-    int i, compno;
-    char spaces[13] = "            "; /* 12 spaces if tilepart*/
-    char* s = spaces;
-    if (tcp == j2k_default_tcp) {
-        s++;
-        s++; /* shorten s to 10 spaces if main */
-    }
-
-    firstcomp_tccp = &(tcp->tccps[0]);
-    /* Internal data structure tccp defines separate defaults for each component, set from main */
-    /* default, then selectively overwritten. */
-    /* Compare j2k_read_cox(...) */
-    /* We don't really know which was the default, and which were not */
-    /* Let's pretend that [0] is the default and all others are not */
-    if (notes) {
-        fprintf(xmlout,
-                "%s<!-- mj2_to_metadata implementation always reports component[0] as using default COD, -->\n",
-                s);
-        if (tcp == j2k_default_tcp) {
-            fprintf(xmlout,
-                    "%s<!-- and any other component, with main-header style values different from [0], as COC. -->\n",
-                    s);
-        } else {
-            fprintf(xmlout,
-                    "%s<!-- and any other component, with tile-part-header style values different from [0], as COC. -->\n",
-                    s);
-        }
-    }
-    for (compno = 1; compno < numcomps;
-            compno++) { /* spec says components are zero-based */
-        tccp = &tcp->tccps[compno];
-        if (same_component_style(firstcomp_tccp, tccp)) {
-            continue;
-        }
-
-        /*  Alignments:          "      < < < < <   To help maintain xml pretty-printing */
-        fprintf(xmlout,      "%s<CodingStyleComponent Marker=\"COC\">\n",
-                s); /* Optional in main header, at most 1 per component */
-        if (notes) {
-            fprintf(xmlout,
-                    "%s  <!-- See Ccoc below for zero-based component number. -->\n", s);
-        }
-        /* Overrides the main COD for the specific component */
-        /* Not retained or of interest: Lcod */
-        fprintf(xmlout,      "%s  <Scoc>0x%02x</Scoc>\n", s, tccp->csty); /* 1 byte */
-        if (notes) {
-            fprintf(xmlout,    "%s  <!-- Scoc defines entropy coder precincts: -->\n", s);
-            fprintf(xmlout,
-                    "%s  <!--   0 = maximum, namely (PPx=15, PPy=15); 1 = precincts defined below. -->\n",
-                    s);
-        }
-        fprintf(xmlout,      "%s  <Ccoc>%d</Ccoc>\n", s, compno); /* 1 or 2 bytes */
-        /* Unfortunately compo isn't retained in j2k_read_coc:  compno = cio_read(j2k_img->numcomps <= 256 ? 1 : 2);    /* Ccoc */
-        /*if(j2k_img_numcomps <=256)
-          component is 1 byte
-        else
-          compno is 2 byte */
-
-        /* This code will compile only if declaration of j2k_default_tcp is changed from static (to implicit extern) in j2k.c */
-        fprintf(xmlout,      "%s  <SPcoc>\n", s);
-        fprintf(xmlout,
-                "%s    <NumberOfDecompositionLevels>%d</NumberOfDecompositionLevels>\n", s,
-                tccp->numresolutions - 1); /* 1 byte, SPcox (D) */
-        fprintf(xmlout,      "%s    <CodeblockWidth>%d</CodeblockWidth>\n", s,
-                tccp->cblkw - 2);    /* 1 byte, SPcox (E) */
-        fprintf(xmlout,      "%s    <CodeblockHeight>%d</CodeblockHeight>\n", s,
-                tccp->cblkh - 2);  /* 1 byte, SPcox (F) */
-        if (notes) {
-            fprintf(xmlout,
-                    "%s    <!-- CBW and CBH are non-negative, and summed cannot exceed 8 -->\n", s);
-            fprintf(xmlout,    "%s    <!-- Codeblock dimension is 2^(value + 2) -->\n", s);
-        }
-        fprintf(xmlout,      "%s    <CodeblockStyle>0x%02x</CodeblockStyle>\n", s,
-                tccp->cblksty);  /* 1 byte, SPcox (G) */
-        if (notes) {
-            fprintf(xmlout,
-                    "%s    <!-- For CodeblockStyle, bits mean (with value 1=feature on, 0=off): -->\n",
-                    s);
-            fprintf(xmlout,
-                    "%s    <!-- bit 0: Selective arithmetic coding bypass. -->\n", s);
-            fprintf(xmlout,
-                    "%s    <!-- bit 1: Reset context probabilities on coding pass boundaries. -->\n",
-                    s);
-            fprintf(xmlout,    "%s    <!-- bit 2: Termination on each coding pass. -->\n",
-                    s);
-            fprintf(xmlout,    "%s    <!-- bit 3: Vertically causal context. -->\n", s);
-            fprintf(xmlout,    "%s    <!-- bit 4: Predictable termination. -->\n", s);
-            fprintf(xmlout,    "%s    <!-- bit 5: Segmentation symbols are used. -->\n", s);
-        }
-        fprintf(xmlout,      "%s    <Transformation>%d</Transformation>\n", s,
-                tccp->qmfbid);   /* 1 byte, SPcox (H) */
-        if (notes) {
-            fprintf(xmlout,
-                    "%s    <!-- For Transformation, 0=\"9-7 irreversible filter\", 1=\"5-3 reversible filter\" -->\n",
-                    s);
-        }
-        if (tccp->csty & J2K_CP_CSTY_PRT) {
-            fprintf(xmlout,    "%s    <PrecinctSize>\n", s); /* 1 byte, SPcox (I_i) */
-            if (notes) {
-                fprintf(xmlout,
-                        "%s      <!-- These are size exponents PPx and PPy. May be zero only for first level (aka N(L)LL subband)-->\n",
-                        s);
-            }
-            for (i = 0; i < tccp->numresolutions - 1;
-                    i++) { /* subtract 1 to get # of decomposition levels */
-                fprintf(xmlout,  "%s      <PrecinctHeightAndWidth  ResolutionLevel=\"%d\">\n",
-                        s, i);
-                if (raw) {
-                    fprintf(xmlout, "%s        <AsHex>0x%02x</AsHex>\n", s,
-                            (tccp->prch[i] << 4) | tccp->prcw[i]);    /* packed into 1 byte, SPcox (G) */
-                }
-                if (derived) {
-                    fprintf(xmlout, "%s        <WidthAsDecimal>%d</WidthAsDecimal>\n", s,
-                            tccp->prcw[i]);
-                    fprintf(xmlout, "%s        <HeightAsDecimal>%d</HeightAsDecimal>\n", s,
-                            tccp->prch[i]);
-                }
-                fprintf(xmlout,  "%s      </PrecinctHeightAndWidth>\n", s, i);
-            }
-            fprintf(xmlout,    "%s    </PrecinctSize>\n", s); /* 1 byte, SPcox (I_i) */
-        }
-        fprintf(xmlout,      "%s  </SPcoc>\n", s);
-        fprintf(xmlout,      "%s</CodingStyleComponent>\n", s);
-    }
-}
-
-/* ------------- */
-
-BOOL same_component_style(opj_tccp_t *tccp1, opj_tccp_t *tccp2)
-{
-    int i;
-
-    if (tccp1->numresolutions != tccp2->numresolutions) {
-        return FALSE;
-    }
-    if (tccp1->cblkw != tccp2->cblkw) {
-        return FALSE;
-    }
-    if (tccp1->cblkh != tccp2->cblkh) {
-        return FALSE;
-    }
-    if (tccp1->cblksty != tccp2->cblksty) {
-        return FALSE;
-    }
-    if (tccp1->csty != tccp2->csty) {
-        return FALSE;
-    }
-
-    if (tccp1->csty & J2K_CP_CSTY_PRT) {
-        for (i = 0; i < tccp1->numresolutions; i++) {
-            if (tccp1->prcw[i] != tccp2->prcw[i] || tccp1->prch[i] != tccp2->prch[i]) {
-                return FALSE;
-            }
-        }
-    }
-    return TRUE;
-}
-
-/* ------------- */
-
-void xml_out_frame_qcd(FILE* xmlout, opj_tcp_t *tcp)
-{
-    /* This code will compile only if declaration of j2k_default_tcp is changed from static (to implicit extern) in j2k.c */
-    opj_tccp_t *tccp;
-    int bandno, numbands;
-    char spaces[13] = "            "; /* 12 spaces if tilepart*/
-    char* s = spaces;
-    if (tcp == j2k_default_tcp) {
-        s++;
-        s++; /* shorten s to 10 spaces if main */
-    }
-
-    /* Compare j2k_read_qcx */
-    fprintf(xmlout,      "%s<QuantizationDefault Marker=\"QCD\">\n",
-            s); /* Required in main header, single occurrence */
-    tccp = &(tcp->tccps[0]);
-    /* Not retained or of interest: Lqcd */
-    fprintf(xmlout,      "%s  <Sqcd>\n", s);      /* 1 byte */
-    if (notes) {
-        fprintf(xmlout,
-                "%s  <!-- Default quantization style for all components. -->\n", s);
-    }
-    if (raw) {
-        fprintf(xmlout,    "%s    <AsHex>0x%02x</AsHex>\n", s,
-                (tccp->numgbits) << 5 | tccp->qntsty);
-    }
-    if (derived) {
-        fprintf(xmlout,    "%s    <QuantizationStyle>%d</QuantizationStyle>\n", s,
-                tccp->qntsty);
-    }
-    if (notes) {
-        fprintf(xmlout,
-                "%s    <!-- Quantization style (in Sqcd's low 5 bits) may be: -->\n", s);
-        fprintf(xmlout,    "%s    <!--   0 = No quantization. SPqcd size = 8 bits-->\n",
-                s);
-        fprintf(xmlout,
-                "%s    <!--   1 = Scalar derived (values signaled for N(L)LL subband only). Use Eq. E.5. SPqcd size = 16. -->\n",
-                s);
-        fprintf(xmlout,
-                "%s    <!--   2 = Scalar expounded (values signaled for each subband). SPqcd size = 16. -->\n",
-                s);
-    }
-    if (derived) {
-        fprintf(xmlout,    "%s    <NumberOfGuardBits>%d</NumberOfGuardBits>\n", s,
-                tccp->numgbits);
-    }
-    if (notes) {
-        fprintf(xmlout,
-                "%s    <!-- 0-7 guard bits allowed (stored in Sqcd's high 3 bits) -->\n", s);
-    }
-    fprintf(xmlout,      "%s  </Sqcd>\n", s);
-
-    /* Problem: numbands in some cases is calculated from len, which is not retained or available here at this time */
-    /* So we'll just dump all internal values */
-    /* We could calculate it, but I'm having trouble believing the length equations in the standard */
-
-    fprintf(xmlout,      "%s  <SPqcd>\n", s);
-    switch (tccp->qntsty) {
-    case J2K_CCP_QNTSTY_NOQNT: /* no quantization */
-        /* This is what standard says, but I don't believe it: len = 4 + (3*decomp); */
-        numbands = J2K_MAXBANDS; /* should be: numbands = len - 1; */
-        /* Better: IMAGINE numbands = tccp->stepsize_numbands; */
-        /* Instead look for first zero exponent, quit there.  Adequate? */
-        fprintf(xmlout,    "%s    <ReversibleStepSizeValue>\n", s);
-        if (notes) {
-            fprintf(xmlout,
-                    "%s    <!-- Current mj2_to_metadata implementation dumps entire internal table, -->\n",
-                    s);
-            fprintf(xmlout,
-                    "%s    <!-- until an exponent with zero value is reached. -->\n", s);
-            fprintf(xmlout,
-                    "%s    <!-- Exponent epsilon(b) of reversible dynamic range. -->\n", s);
-            fprintf(xmlout,
-                    "%s    <!-- Hex value is as stored, in high-order 5 bits. -->\n", s);
-        }
-        for (bandno = 0; bandno < numbands; bandno++) {
-            if (tccp->stepsizes[bandno].expn == 0) {
-                break;    /* Remove when we have real numbands */
-            }
-            fprintf(xmlout,  "%s      <DynamicRangeExponent Subband=\"%d\">\n", s, bandno);
-            if (raw) {
-                fprintf(xmlout, "%s        <AsHex>0x%02x</AsHex>\n", s,
-                        tccp->stepsizes[bandno].expn << 3);
-            }
-            if (derived) {
-                fprintf(xmlout, "%s        <AsDecimal>%d</AsDecimal>\n", s,
-                        tccp->stepsizes[bandno].expn);
-            }
-            fprintf(xmlout,  "%s      </DynamicRangeExponent>\n", s);
-        }
-        fprintf(xmlout,    "%s    </ReversibleStepSizeValue>\n", s);
-        break;
-    case J2K_CCP_QNTSTY_SIQNT:  /* scalar quantization derived */
-        /* This is what standard says.  Should I believe it:: len = 5;
-        /* numbands = 1; */
-        fprintf(xmlout,    "%s    <QuantizationStepSizeValues>\n", s);
-        if (notes) {
-            fprintf(xmlout,
-                    "%s    <!-- For irreversible transformation only.  See Part I Annex E Equation E.3 -->\n",
-                    s);
-        }
-        fprintf(xmlout,    "%s      <QuantizationValues Subband=\"0\">\n", s);
-        if (notes) {
-            fprintf(xmlout,  "%s      <!-- For N(L)LL subband: >\n", s);
-        }
-        if (raw) {
-            fprintf(xmlout,  "%s        <AsHex>0x%02x</AsHex>\n", s,
-                    (tccp->stepsizes[0].expn << 11) | tccp->stepsizes[0].mant);
-        }
-        if (derived) {
-            fprintf(xmlout,  "%s        <Exponent>%d</Exponent>\n", s,
-                    tccp->stepsizes[0].expn);
-            fprintf(xmlout,  "%s        <Mantissa>%d</Mantissa>\n", s,
-                    tccp->stepsizes[0].mant);
-        }
-        fprintf(xmlout,    "%s      </QuantizationValues>\n", s);
-        if (notes) {
-            fprintf(xmlout,
-                    "%s      <!-- Exponents for subbands beyond 0 are not from header, but calculated per Eq. E.5 -->\n",
-                    s);
-            fprintf(xmlout,
-                    "%s      <!-- The mantissa for all subbands is the same, given by the value above. -->\n",
-                    s);
-            fprintf(xmlout,
-                    "%s      <!-- Current mj2_to_metadata implementation dumps entire internal table, -->\n",
-                    s);
-            fprintf(xmlout,
-                    "%s      <!-- until a subband with exponent of zero value is reached. -->\n",
-                    s);
-        }
-
-        for (bandno = 1; bandno < J2K_MAXBANDS; bandno++) {
-            if (tccp->stepsizes[bandno].expn == 0) {
-                break;
-            }
-
-            fprintf(xmlout,
-                    "%s      <CalculatedExponent Subband=\"%d\">%d</CalculatedExponent>\n", s,
-                    bandno, tccp->stepsizes[bandno].expn);
-        }
-
-        fprintf(xmlout,    "%s    </QuantizationStepSizeValues>\n", s);
-        break;
-
-    default: /* J2K_CCP_QNTSTY_SEQNT */ /* scalar quantization expounded */
-        /* This is what standard says, but should I believe it: len = 5 + 6*decomp; */
-        numbands = J2K_MAXBANDS; /* should be: (len - 1) / 2;*/
-        /* Better: IMAGINE numbands = tccp->stepsize_numbands; */
-        fprintf(xmlout,    "%s    <QuantizationStepSizeValues>\n", s);
-        if (notes) {
-            fprintf(xmlout,
-                    "%s    <!-- For irreversible transformation only.  See Part I Annex E Equation E.3 -->\n",
-                    s);
-            fprintf(xmlout,
-                    "%s    <!-- Current mj2_to_metadata implementation dumps entire internal table, -->\n",
-                    s);
-            fprintf(xmlout,
-                    "%s    <!-- until a subband with mantissa and exponent of zero values is reached. -->\n",
-                    s);
-        }
-        for (bandno = 0; bandno < numbands; bandno++) {
-            if (tccp->stepsizes[bandno].expn == 0 && tccp->stepsizes[bandno].mant == 0) {
-                break;    /* Remove when we have real numbands */
-            }
-
-            fprintf(xmlout,  "%s      <QuantizationValues Subband=\"%d\">\n", s, bandno);
-            if (raw) {
-                fprintf(xmlout, "%s        <AsHex>0x%02x</AsHex>\n", s,
-                        (tccp->stepsizes[bandno].expn << 11) | tccp->stepsizes[bandno].mant);
-            }
-            if (derived) {
-                fprintf(xmlout, "%s        <Exponent>%d</Exponent>\n", s,
-                        tccp->stepsizes[bandno].expn);
-                fprintf(xmlout, "%s        <Mantissa>%d</Mantissa>\n", s,
-                        tccp->stepsizes[bandno].mant);
-            }
-            fprintf(xmlout,  "%s      </QuantizationValues>\n", s);
-        }
-        fprintf(xmlout,    "%s    </QuantizationStepSizeValues>\n", s);
-        break;
-    } /* switch */
-    fprintf(xmlout,      "%s  </SPqcd>\n", s);
-    fprintf(xmlout,      "%s</QuantizationDefault>\n", s);
-
-    /*  Alignments:        "    < < < < <   To help maintain xml pretty-printing */
-}
-
-/* ------------- */
-
-void xml_out_frame_qcc(FILE* xmlout, opj_tcp_t *tcp, int numcomps)
-{
-    /* Uses global j2k_default_tcp */
-    /* This code will compile only if declaration of j2k_default_tcp is changed from static (to implicit extern) in j2k.c */
-    opj_tccp_t *tccp, *firstcomp_tccp;
-    int bandno, numbands;
-    int compno;
-    char spaces[13] = "            "; /* 12 spaces if tilepart*/
-    char* s = spaces;
-    if (tcp == j2k_default_tcp) {
-        s++;
-        s++; /* shorten s to 10 spaces if main */
-    }
-
-    firstcomp_tccp = &(tcp->tccps[0]);
-    /* Internal data structure tccp defines separate defaults for each component, set from main */
-    /* default, then selectively overwritten. */
-    /* Compare j2k_read_qcx(...) */
-    /* We don't really know which was the default, and which were not */
-    /* Let's pretend that [0] is the default and all others are not */
-    if (notes) {
-        fprintf(xmlout,
-                "%s<!-- mj2_to_metadata implementation always reports component[0] as using default QCD, -->\n",
-                s);
-        if (tcp == j2k_default_tcp) {
-            fprintf(xmlout,
-                    "%s<!-- and any other component, with main-header quantization values different from [0], as QCC. -->\n",
-                    s);
-        } else {
-            fprintf(xmlout,
-                    "%s<!-- and any other component, with tile-part-header quantization values different from [0], as QCC. -->\n",
-                    s);
-        }
-    }
-    for (compno = 1; compno < numcomps;
-            compno++) { /* spec says components are zero-based */
-        tccp = &(tcp->tccps[compno]);
-        if (same_component_quantization(firstcomp_tccp, tccp)) {
-            continue;
-        }
-
-        /* Compare j2k_read_qcx */
-        fprintf(xmlout,
-                "%s<QuantizationComponent Marker=\"QCC\" Component=\"%d\">\n", s,
-                compno); /* Required in main header, single occurrence */
-        tccp = &j2k_default_tcp->tccps[0];
-        /* Not retained or perhaps of interest: Lqcd   It maybe can be calculated.  */
-        fprintf(xmlout,      "%s  <Sqcc>\n", s);        /* 1 byte */
-        if (notes) {
-            fprintf(xmlout,    "%s  <!-- Quantization style for this component. -->\n", s);
-        }
-        if (raw) {
-            fprintf(xmlout,    "%s    <AsHex>0x%02x</AsHex>\n", s,
-                    (tccp->numgbits) << 5 | tccp->qntsty);
-        }
-        if (derived) {
-            fprintf(xmlout,    "%s    <QuantizationStyle>%d</QuantizationStyle>\n", s,
-                    tccp->qntsty);
-        }
-        if (notes) {
-            fprintf(xmlout,
-                    "%s    <!-- Quantization style (in Sqcc's low 5 bits) may be: -->\n", s);
-            fprintf(xmlout,    "%s    <!--   0 = No quantization. SPqcc size = 8 bits-->\n",
-                    s);
-            fprintf(xmlout,
-                    "%s    <!--   1 = Scalar derived (values signaled for N(L)LL subband only). Use Eq. E.5. SPqcc size = 16. -->\n",
-                    s);
-            fprintf(xmlout,
-                    "%s    <!--   2 = Scalar expounded (values signaled for each subband). SPqcc size = 16. -->\n",
-                    s);
-        }
-        if (derived) {
-            fprintf(xmlout,    "%s    <NumberOfGuardBits>%d</NumberOfGuardBits>\n", s,
-                    tccp->numgbits);
-        }
-        if (notes) {
-            fprintf(xmlout,
-                    "%s    <!-- 0-7 guard bits allowed (stored in Sqcc's high 3 bits) -->\n", s);
-        }
-        fprintf(xmlout,      "%s  </Sqcc>\n", s);
-
-        /* Problem: numbands in some cases is calculated from len, which is not retained or available here at this time */
-        /* So we'll just dump all internal values */
-        fprintf(xmlout,      "%s  <SPqcc>\n", s);
-        switch (tccp->qntsty) {
-        case J2K_CCP_QNTSTY_NOQNT:
-            numbands = J2K_MAXBANDS; /* should be: numbands = len - 1; */
-            /* Better: IMAGINE numbands = tccp->stepsize_numbands; */
-
-            /* Instead look for first zero exponent, quit there.  Adequate? */
-            fprintf(xmlout,    "%s    <ReversibleStepSizeValue>\n", s);
-            if (notes) {
-                fprintf(xmlout,
-                        "%s    <!-- Current mj2_to_metadata implementation dumps entire internal table, -->\n",
-                        s);
-                fprintf(xmlout,
-                        "%s    <!-- until an exponent with zero value is reached. -->\n", s);
-                fprintf(xmlout,
-                        "%s    <!-- Exponent epsilon(b) of reversible dynamic range. -->\n", s);
-                fprintf(xmlout,
-                        "%s    <!-- Hex value is as stored, in high-order 5 bits. -->\n", s);
-            }
-            for (bandno = 0; bandno < numbands; bandno++) {
-                if (tccp->stepsizes[bandno].expn == 0) {
-                    break;    /* Remove this once we have real numbands */
-                }
-                fprintf(xmlout,  "%s      <Exponent Subband=\"%d\">\n", s, bandno);
-                if (raw) {
-                    fprintf(xmlout, "%s        <AsHex>0x%02x</AsHex>\n", s,
-                            tccp->stepsizes[bandno].expn << 3);
-                }
-                if (derived) {
-                    fprintf(xmlout, "%s        <AsDecimal>%d</AsDecimal>\n", s,
-                            tccp->stepsizes[bandno].expn);
-                }
-                fprintf(xmlout,  "%s      </Exponent>\n", s);
-            }
-            fprintf(xmlout,    "%s    </ReversibleStepSizeValue>\n", s);
-            break;
-        case J2K_CCP_QNTSTY_SIQNT:
-            /* numbands = 1; */
-            fprintf(xmlout,    "%s    <QuantizationStepSizeValues>\n", s);
-            if (notes) {
-                fprintf(xmlout,
-                        "%s    <!-- For irreversible transformation only.  See Part I Annex E Equation E.3 -->\n",
-                        s);
-            }
-            fprintf(xmlout,    "%s      <QuantizationValuesForSubband0>\n", s);
-            if (notes) {
-                fprintf(xmlout,  "%s      <!-- For N(L)LL subband: >\n", s);
-            }
-            if (raw) {
-                fprintf(xmlout,  "%s        <AsHex>0x%02x</AsHex>\n", s,
-                        (tccp->stepsizes[0].expn << 11) | tccp->stepsizes[0].mant);
-            }
-            if (derived) {
-                fprintf(xmlout,  "%s        <Exponent>%d</Exponent>\n", s,
-                        tccp->stepsizes[0].expn);
-                fprintf(xmlout,  "%s        <Mantissa>%d</Mantissa>\n", s,
-                        tccp->stepsizes[0].mant);
-            }
-            fprintf(xmlout,    "%s      </QuantizationValuesForSubband0>\n", s);
-            if (notes) {
-                fprintf(xmlout,
-                        "%s      <!-- Exponents for subbands beyond 0 are not from header, but calculated per Eq. E.5 -->\n",
-                        s);
-                fprintf(xmlout,
-                        "%s      <!-- The mantissa for all subbands is the same, given by the value above. -->\n",
-                        s);
-                fprintf(xmlout,
-                        "%s      <!-- Current mj2_to_metadata implementation dumps entire internal table, -->\n",
-                        s);
-                fprintf(xmlout,
-                        "%s      <!-- until a subband with exponent of zero value is reached. -->\n",
-                        s);
-            }
-
-            for (bandno = 1; bandno < J2K_MAXBANDS; bandno++) {
-                if (tccp->stepsizes[bandno].expn == 0) {
-                    break;
-                }
-
-                fprintf(xmlout,
-                        "%s      <CalculatedExponent Subband=\"%d\">%d</CalculatedExponent>\n", s,
-                        bandno, tccp->stepsizes[bandno].expn);
-            }
-            fprintf(xmlout,    "%s    </QuantizationStepSizeValues>\n", s);
-            break;
-
-        default: /* J2K_CCP_QNTSTY_SEQNT */
-            numbands = J2K_MAXBANDS; /* should be: (len - 1) / 2;*/
-            /* Better: IMAGINE numbands = tccp->stepsize_numbands; */
-            fprintf(xmlout,    "%s    <QuantizationStepSizeValues>\n", s);
-            if (notes) {
-                fprintf(xmlout,
-                        "%s    <!-- For irreversible transformation only.  See Part I Annex E Equation E.3 -->\n",
-                        s);
-                fprintf(xmlout,
-                        "%s    <!-- Current mj2_to_metadata implementation dumps entire internal table, -->\n",
-                        s);
-                fprintf(xmlout,
-                        "%s    <!-- until a subband with mantissa and exponent of zero values is reached. -->\n",
-                        s);
-            }
-            for (bandno = 0; bandno < numbands; bandno++) {
-                if (tccp->stepsizes[bandno].expn == 0 && tccp->stepsizes[bandno].mant == 0) {
-                    break;    /* Remove this once we have real numbands count */
-                }
-                fprintf(xmlout,  "%s      <QuantizationValues Subband=\"%d\">\n", s, bandno);
-                if (raw) {
-                    fprintf(xmlout, "%s        <AsHex>0x%02x</AsHex>\n", s,
-                            (tccp->stepsizes[bandno].expn << 11) | tccp->stepsizes[bandno].mant);
-                }
-                if (derived) {
-                    fprintf(xmlout, "%s        <Exponent>%d</Exponent>\n", s,
-                            tccp->stepsizes[bandno].expn);
-                    fprintf(xmlout, "%s        <Mantissa>%d</Mantissa>\n", s,
-                            tccp->stepsizes[bandno].mant);
-                }
-                fprintf(xmlout,  "%s      </QuantizationValues>\n", s);
-            }
-            fprintf(xmlout,    "%s    </QuantizationStepSizeValues>\n", s);
-            break;
-        } /* switch */
-        fprintf(xmlout,      "%s  </SPqcc>\n", s);
-        fprintf(xmlout,      "%s</QuantizationComponent>\n", s);
-    }
-    /*  Alignments:          "    < < < < <   To help maintain xml pretty-printing */
-}
-
-/* ------------- */
-
-BOOL same_component_quantization(opj_tccp_t *tccp1, opj_tccp_t *tccp2)
-{
-    int bandno, numbands;
-
-    if (tccp1->qntsty != tccp2->qntsty) {
-        return FALSE;
-    }
-    if (tccp1->numgbits != tccp2->numgbits) {
-        return FALSE;
-    }
-
-    switch (tccp1->qntsty) {
-    case J2K_CCP_QNTSTY_NOQNT:
-        numbands = J2K_MAXBANDS; /* should be: numbands = len - 1; */
-        /* Instead look for first zero exponent, quit there.  Adequate? */
-        for (bandno = 0; bandno < numbands; bandno++) {
-            if (tccp1->stepsizes[bandno].expn == 0) {
-                break;
-            }
-            if (tccp1->stepsizes[bandno].expn != tccp2->stepsizes[bandno].expn) {
-                return FALSE;
-            }
-        }
-        break;
-    case J2K_CCP_QNTSTY_SIQNT:
-        /* numbands = 1; */
-        if (tccp1->stepsizes[0].expn != tccp2->stepsizes[0].expn ||
-                tccp1->stepsizes[0].mant != tccp2->stepsizes[0].mant) {
-            return FALSE;
-        }
-        /* Don't need to check remainder, since they are calculated from [0] */
-        break;
-
-    default: /* J2K_CCP_QNTSTY_SEQNT */
-        numbands = J2K_MAXBANDS; /* should be: (len - 1) / 2;*/
-        /* This comparison may cause us problems with trailing junk values. */
-        for (bandno = 0; bandno < numbands; bandno++) {
-            if (tccp1->stepsizes[bandno].expn != tccp2->stepsizes[bandno].expn ||
-                    tccp1->stepsizes[bandno].mant != tccp2->stepsizes[bandno].mant);
-            return FALSE;
-        }
-        break;
-    } /* switch */
-    return TRUE;
-}
-
-/* ------------- */
-
-void xml_out_frame_rgn(FILE* xmlout, opj_tcp_t *tcp, int numcomps)
-{
-    int compno, SPrgn;
-    /* MJ2 files can have regions of interest if hybridized with JPX Part II */
-    char spaces[13] = "            "; /* 12 spaces if tilepart*/
-    char* s = spaces;
-    if (tcp == j2k_default_tcp) {
-        s++;
-        s++; /* shorten s to 10 spaces if main */
-    }
-
-    for (compno = 0; compno < numcomps; compno++) {
-        SPrgn = tcp->tccps[compno].roishift;    /* 1 byte; SPrgn */
-        if (SPrgn == 0) {
-            continue;    /* Yet another kludge */
-        }
-
-        fprintf(xmlout,    "%s<RegionOfInterest Marker=\"RGN\">\n",
-                s); /* Optional in main header, at most 1 per component */
-        if (notes) {
-            fprintf(xmlout,  "%s<!-- See Crgn below for zero-based component number. -->\n",
-                    s);
-        }
-        /* Not retained or of interest: Lrgd */
-        fprintf(xmlout,    "%s  <Srgn>0</Srgn>\n", s); /* 1 byte */
-        if (notes) {
-            fprintf(xmlout,
-                    "%s  <!-- Srgn is ROI style.  Only style=0 defined: Implicit ROI (max. shift) -->\n",
-                    s);
-        }
-        fprintf(xmlout,    "%s  <Crgn>%d</Crgn>\n", s, compno); /* 1 or 2 bytes */
-        fprintf(xmlout,    "%s  <SPrgn>%d</SPrgn>\n", s, SPrgn); /* 1 byte */
-        if (notes) {
-            fprintf(xmlout,
-                    "%s  <!-- SPrgn is implicit ROI shift, i.e., binary shifting of ROI coefficients above background. -->\n",
-                    s);
-        }
-        fprintf(xmlout,    "</RegionOfInterest\n",
-                s); /* Optional in main header, at most 1 per component */
-    }
-}
-
-/* ------------- */
-
-void xml_out_frame_poc(FILE* xmlout,
-                       opj_tcp_t *tcp)   /* Progression Order Change */
-{
-    /* Compare j2k_read_poc() */
-    int i;
-    opj_poc_t *poc;
-    char spaces[13] = "            "; /* 12 spaces if tilepart*/
-    char* s = spaces;
-    if (tcp == j2k_default_tcp) {
-        s++;
-        s++; /* shorten s to 10 spaces if main */
-    }
-
-    if (tcp->POC != 1) {
-        return;    /* Not present */
-    }
-
-    fprintf(xmlout,    "%s<ProgressionOrderChange Marker=\"POC\">\n",
-            s); /* Optional in main header, at most 1 per component */
-    /* j2k_read_poc seems to allow accumulation of default pocs from multiple POC segments, but does
-    the spec really allow that? */
-    /* 2 bytes, not retained; Lpoc */
-    /* I probably didn't get this dump precisely right. */
-    for (i = 0; i < tcp->numpocs; i++) {
-        poc = &tcp->pocs[i];
-        fprintf(xmlout,  "%s  <Progression Num=\"%d\">\n", s, i + 1);
-        fprintf(xmlout,  "%S    <RSpoc>%d</RSpoc>\n", s,
-                poc->resno0);  /* 1 byte, RSpoc_i */
-        if (notes) {
-            fprintf(xmlout,
-                    "%s    <!-- Resolution level index (inclusive) for progression start. Range: 0 to 33 -->\n",
-                    s);
-        }
-        fprintf(xmlout,  "%s    <CSpoc>%d</CSpoc>\n", s,
-                poc->compno0);/* j2k_img->numcomps <= 256 ? 1 byte : 2 bytes; CSpoc_i */
-        if (notes) {
-            fprintf(xmlout,
-                    "%s    <!-- Component index (inclusive) for progression start. -->\n", s);
-        }
-        fprintf(xmlout,  "%s    <LYEpoc>%d</LYEpoc>\n", s,
-                poc->layno1); /* int_min(cio_read(2), tcp->numlayers);   /* 2 bytes; LYEpoc_i */
-        if (notes) {
-            fprintf(xmlout, "%s    <!-- Layer index (exclusive) for progression end. -->\n",
-                    s);
-        }
-        fprintf(xmlout,  "%s    <REpoc>%d</REpoc>\n", s,
-                poc->resno1); /*int_min(cio_read(1), tccp->numresolutions);    /* REpoc_i */
-        if (notes) {
-            fprintf(xmlout,
-                    "%s    <!-- Resolution level index (exclusive) for progression end. Range: RSpoc to 33 -->\n",
-                    s);
-        }
-        fprintf(xmlout,  "%s    <CEpoc>%d</CEpoc>\n", s,
-                poc->compno1); /* int_min(cio_read(j2k_img->numcomps <= 256 ? 1 : 2), j2k_img->numcomps);  /* CEpoc_i */
-        if (notes) {
-            fprintf(xmlout,
-                    "%s    <!-- Component index (exclusive) for progression end.  Minimum: CSpoc -->\n",
-                    s);
-        }
-        fprintf(xmlout,  "%s    <Ppoc>%d</Ppoc>\n", s, poc->prg); /* 1 byte Ppoc_i */
-        if (notes) {
-            fprintf(xmlout, "%s    <!-- Defined Progression Order Values are: -->\n", s);
-            fprintf(xmlout,
-                    "%s    <!-- 0 = LRCP; 1 = RLCP; 2 = RPCL; 3 = PCRL; 4 = CPRL -->\n", s);
-            fprintf(xmlout,
-                    "%s    <!-- where L = \"layer\", R = \"resolution level\", C = \"component\", P = \"position\". -->\n",
-                    s);
-        }
-        fprintf(xmlout,  "%s  </Progression>\n", s);
-    }
-    fprintf(xmlout,    "%s</ProgressionOrderChange\n", s);
-}
-
-/* ------------- */
-
-#ifdef SUPPRESS_FOR_NOW
-/* Suppress PPM and PPT since we're not showing data from the third option, namely within the codestream, and
-that's evidently what frames_to_mj2 uses.  And a hex dump isn't so useful anyway */
-
-void xml_out_frame_ppm(FILE *xmlout,
-                       opj_cp_t *cp)   /* For main header, not tile-part (which uses PPT instead). */
-{
-    /* Either the PPM or PPT is required if the packet headers are not distributed in the bit stream */
-    /* Use of PPM and PPT are mutually exclusive. */
-    /* Compare j2k_read_ppm() */
-    int j;
-
-    if (cp->ppm != 1) {
-        return;    /* Not present */
-    }
-    /* Main header uses indent of 10 spaces */
-    fprintf(xmlout,
-            "          <PackedPacketHeadersMainHeader Marker=\"PPM\">\n"); /* Optional in main header, but if not, must be in PPT or codestream */
-    /* 2 bytes Lppm not saved */
-    if (notes) {
-        fprintf(xmlout,
-                "          <!-- If there are multiple PPM marker segments in the main header, -->\n");
-        fprintf(xmlout,
-                "          <!-- this mj2_to_metadata implementation will report them as a single consolidated PPM header. -->\n");
-        fprintf(xmlout,
-                "          <!-- The implementation can't currently segregate by tile-part. -->\n");
-        fprintf(xmlout,
-                "          <!-- TO DO? further map the packet headers to xml. -->\n");
-    }
-
-    /* 1 byte, not retained ; Zppm is sequence # of this PPM header */
-    /* 4 bytes, possibly overwritten multiple times in j2k_cp->ppm_previous: Nppm */
-    /* Use j symbol for index instead of i, to make comparable with j2k_read_ppm */
-    /* Not real clear whether to use ppm->store or ppm_len as upper bound */
-    fprintf(xmlout,    "            <PackedData>\n");
-    xml_out_dump_hex(xmlout, cp->ppm_data, cp->ppm_len);
-    /* Dump packet headers 1 byte at a time: lppm[i][j] */
-    fprintf(xmlout,    "            </PackedData>\n");
-    fprintf(xmlout,
-            "          </PackedPacketHeadersMainHeader>\n"); /* Optional in main header, but if not, must be in PPT or codestream */
-}
-
-/* ------------- */
-
-void xml_out_frame_ppt(FILE *xmlout,
-                       opj_tcp_t *tcp)   /* For tile-part header, not main (which uses PPM instead). */
-{
-    /* Either the PPM or PPT is required if the packet headers are not distributed in the bit stream */
-    /* Use of PPM and PPT are mutually exclusive. */
-    /* Compare j2k_read_ppt() */
-    int j;
-
-    if (tcp->ppt != 1) {
-        return;    /* Not present */
-    }
-
-    /* Tile-part indents are 12 spaces */
-    fprintf(xmlout,
-            "            <PackedPacketHeadersTilePartHeader Marker=\"PPT\">\n"); /* Optional in main header, but if not, must be in PPT or codestream */
-    /* 2 bytes Lppm not saved */
-    if (notes) {
-        fprintf(xmlout,
-                "            <!-- If there are multiple PPT marker segments in the tile-part header, -->\n");
-        fprintf(xmlout,
-                "            <!-- this mj2_to_metadata implementation will report them as a single consolidated PPT header. -->\n");
-        fprintf(xmlout,
-                "            <!-- The implementation can't currently segregate by tile-part. -->\n");
-        fprintf(xmlout,
-                "            <!-- TO DO? further map the packet headers to xml. -->\n");
-    }
-
-    /* 1 byte, not retained ; Zppt is sequence # of this PPT header */
-    /* 4 bytes, possibly overwritten multiple times in j2k_cp->ppt_previous: Nppt */
-    /* Use j symbol for index instead of i, to make comparable with j2k_read_ppt */
-    /* Not real clear whether to use ppt->store or ppt_len as upper bound */
-    fprintf(xmlout,    "              <PackedData>\n");
-    xml_out_dump_hex(xmlout, tcp->ppt_data, tcp->ppt_len);
-    /* Dump packet headers 1 byte at a time: lppt[i][j] */
-    fprintf(xmlout,    "              </PackedData>\n");
-    fprintf(xmlout,
-            "            </PackedPacketHeadersTileHeader>\n"); /* Optional in tile-part header, but if not, must be in PPM or codestream */
-}
-#endif SUPPRESS_FOR_NOW
-
-/* ------------- */
-
-void xml_out_frame_tlm(FILE*
-                       xmlout)   /* opt, main header only.  May be multiple. */
-{
-    /* Compare j2k_read_tlm()... which doesn't retain anything! */
-    /* Plan:  Since this is only called from main header, not tilepart, use global j2k_default_tcp rather than parameter */
-    /* Main header indents are 10 spaces */
-}
-
-/* ------------- */
-
-void xml_out_frame_plm(FILE*
-                       xmlout)   /* opt, main header only; can be used in conjunction with tile-part's PLT */
-{
-    /* NO-OP.  PLM NOT SAVED IN DATA STRUCTURE */
-    /* Compare j2k_read_plm()... which doesn't retain anything! */
-    /* Plan:  Since this is only called from main header, not tilepart, use global j2k_default_tcp rather than parameter */
-    /* Main header indents are 10 spaces */
-}
-
-/* ------------- */
-
-void xml_out_frame_plt(FILE* xmlout,
-                       opj_tcp_t *tcp)   /* opt, tile-part headers only; can be used in conjunction with main header's PLM */
-{
-    /* NO-OP.  PLT NOT SAVED IN DATA STRUCTURE */
-    /* Compare j2k_read_plt()... which doesn't retain anything! */
-    /* Tile-part header indents are 12 spaces */
-}
-
-/* ------------- */
-
-void xml_out_frame_crg(FILE* xmlout)
-{
-    /* NO-OP.  CRG NOT SAVED IN DATA STRUCTURE */ /* opt, main header only; */
-    /* Compare j2k_read_crg()... which doesn't retain anything! */
-    /* Plan:  Since this is only called from main header, not tilepart, use global j2k_default_tcp rather than parameter */
-#ifdef NOTYET
-THIS PSEUDOCODE IMAGINES THESE EXIST:
-    j2k_default_tcp->crg, j2k_default_tcp->crg_i, j2k_default_tcp->crg_xcrg*,
-                    j2k_default_tcp->crg_ycrg*
-                    (POSSIBLY DON'T NEED crg_i, CAN GET NUMBER OR COMPONENTS FROM ELSEWHERE)
-                     if (j2k_default_tcp->crg != 1 || j2k_default_tcp->crg_i == 0)
-                     return; /* Not present */
-
-                     /* Main header indents are 10 spaces */
-                     fprintf(xmlout,
-                             "          <ComponentRegistration Marker=\"RG\" Count=\"%d\">\n",
-                             j2k_default_tcp->crg_i);
-    if (notes) {
-        fprintf(xmlout,
-                "          <!-- Fine tuning of registration of components with respect to each other, -->\n");
-            fprintf(xmlout,
-                    "          <!-- not required but potentially helpful for decoder. -->\n");
-            fprintf(xmlout,
-                    "          <!-- These supplementary fractional offsets are in units of 1/65536 of the horizontal -->\n");
-            fprintf(xmlout,
-                    "          <!-- or vertical separation (e.g., XRsiz[i] or YRsiz[i] for component i). -->\n");
-        }
-    /* This isn't the most compact form of table, but is OK when number of components is small, as is likely. */
-    for (i = 0; i < j2k_default_tcp->crg_i; i++) {
-    fprintf(xmlout,  "            <Component Num=\"%d\">\n", i + 1);
-        fprintf(xmlout,  "              <Xcrg>\n");
-        if (raw) {
-            fprintf(xmlout, "                <AsNumerator>%d</AsNumerator>\n",
-                    j2k_default_tcp->crg_xcrg[i]);
-        }
-        if (derived) {
-            /* Calculate n * 100%/65536; 4 digits after decimal point is sufficiently accurate */
-            fprintf(xmlout, "                <AsPercentage>%.4f</AsPercentage>\n",
-                    ((double)j2k_default_tcp->crg_xcrg[i]) / 655.36);
-            /* We could do another calculation that include XRsiz[i]; maybe later. */
-        }
-        fprintf(xmlout,  "              </Xcrg>\n");
-        fprintf(xmlout,  "              <Ycrg>\n");
-        if (raw) {
-            fprintf(xmlout, "                <AsNumerator>%d</AsNumerator>\n",
-                    j2k_default_tcp->crg_ycrg[i]);
-        }
-        if (derived) {
-            fprintf(xmlout, "                <AsPercentage>%f</AsPercentage>\n",
-                    ((double)j2k_default_tcp->crg_ycrg[i]) / 655.36);
-        }
-        fprintf(xmlout,  "              </Ycrg>\n");
-        fprintf(xmlout,  "            </Component>\n");
-    }
-
-    fprintf(xmlout,    "          </ComponentRegistration>\n");
-
-#endif
-}
-
-/* ------------- */
-
-/* Regrettably from a metadata point of view, j2k_read_com() skips over any comments in main header or tile-part-header */
-void xml_out_frame_com(FILE* xmlout, opj_tcp_t *tcp)
-{
-    /* NO-OP.  COM NOT SAVED IN DATA STRUCTURE */ /* opt in main or tile-part headers; */
-    /* Compare j2k_read_com()... which doesn't retain anything! */
-#ifdef NOTYET
-    char spaces[13] = "            "; /* 12 spaces if tilepart*/
-    char* s = spaces;
-    if (tcp == &j2k_default_tcp) {
-        s++;
-        s++; /* shorten s to 10 spaces if main */
-    }
-THIS PSEUDOCODE IMAGINES THESE EXIST:
-    tcp->com, tcp->com_len, tcp->com_data array
-    if (tcp->com != 1) {
-        return;    /* Not present */
-    }
-
-    fprintf(xmlout,    "%s<Comment Marker=\"COM\">\n",
-            s); /* Optional in main or tile-part header */
-    xml_out_dump_hex_and_ascii(tcp->com_data, tcp->com_len, s);
-    fprintf(xmlout,    "%s</Comment>\n", s);
-#endif
-}
-
-void xml_out_dump_hex(FILE* xmlout, char *data, int data_len, char* s)
-{
-    /* s is a string of spaces for indent */
-    int i;
-
-    /* This is called when raw is true, or there is no appropriate derived form */
-    fprintf(xmlout,    "%s<AsHex>\n", s);
-    fprintf(xmlout,    "%s  ", s); /* Inadequate for pretty printing */
-    for (i = 0; i < data_len; i++) {  /* Dump packet headers */
-        fprintf(xmlout,  "%02x", data[i]);
-    }
-    fprintf(xmlout,    "%s</AsHex>\n", s);
-}
-
-/* Define this as an even number: */
-#define BYTES_PER_DUMP_LINE 40
-/* Current total width for Hex and ASCII is : 11 spaces lead + (3 * BPDL) + 2 spaces + BPDL */
-void xml_out_dump_hex_and_ascii(FILE* xmlout, char *data, int data_len,
-                                char* s)
-{
-    /* s is a string of spaces for indent */
-    int i, j;
-
-    if (raw) {
-        xml_out_dump_hex(xmlout, data, data_len, s);
-    }
-
-    if (derived) {
-        fprintf(xmlout,  "%s<AsHexAndASCII>\n", s);
-        for (i = 0; i < data_len;) {
-            fprintf(xmlout, "%s ", s); /* Additional leading space added in loop */
-            /* First column: hex */
-            for (j = 0; j < BYTES_PER_DUMP_LINE; j++) { /* Dump bytes */
-                fprintf(xmlout, " %02x", data[i + j]);
-            }
-            /* Space between columns... */ fprintf(xmlout,  "  ");
-            /* Second column: ASCII */
-            for (j = 0; j < BYTES_PER_DUMP_LINE; j++, i++) {
-                if (isprint((int)data[i]) && i < data_len) {
-                    fprintf(xmlout, "%c", data[i]);
-                } else {
-                    fprintf(xmlout, " ");
-                }
-            }
-            /* If we also wanted to output UCS-2 Unicode as a third column, then entire document
-            must use fwprintf.  Forget about it for now.  As it stands, if data is UCS-2 format but still
-            the ASCII set, then we'll be able to read every other byte as ASCII in column 2.  If
-            data is UTF-8 format but still ASCII, then we'll be able to read every byte as ASCII
-            in column 2. */
-        }
-        fprintf(xmlout,  "%s</AsHexAndASCII>\n", s);
-    }
-}
-
-
-/* ------------- */
-
-void xml_out_frame_jp2h(FILE* xmlout, opj_jp2_t *jp2_struct)    /* JP2 Header */
-{
-    /* Compare jp2_read_jp2h(opj_jp2_t * jp2_struct) */
-    int i;
-
-    fprintf(xmlout,      "              <JP2Header BoxType=\"jp2h\">\n");
-
-    /* Compare jp2_read_ihdr(jp2_struct)) */
-    fprintf(xmlout,      "                <ImageHeader BoxType=\"ihdr\">\n");
-    fprintf(xmlout,      "                  <HEIGHT>%d</HEIGHT>\n",
-            jp2_struct->h); /* 4 bytes */
-    fprintf(xmlout,      "                  <WIDTH>%d</WIDTH>\n",
-            jp2_struct->w); /* 4 bytes */
-    if (notes) {
-        fprintf(xmlout,
-                "                  <!-- HEIGHT here, if 2 fields per image, is of total deinterlaced height. -->\n");
-    }
-    fprintf(xmlout,      "                  <NC>%d</NC>\n",
-            jp2_struct->numcomps); /* 2 bytes */
-    if (notes) {
-        fprintf(xmlout,
-                "                  <!-- NC is number of components -->\n");    /* 2 bytes */
-    }
-    fprintf(xmlout,      "                  <BPC>\n"); /* 1 byte */
-    if (jp2_struct->bpc == 255) {
-        fprintf(xmlout,    "                    <AsHex>0x%02x</AsHex>\n",
-                jp2_struct->bpc); /* 1 byte */
-        if (notes) {
-            fprintf(xmlout,
-                    "                    <!-- BPC = 0xff means bits per pixel varies with component; see table below. -->\n");
-        }
-    } else { /* Not 0xff */
-        if (raw) {
-            fprintf(xmlout,  "                    <AsHex>0x%02x</AsHex>\n",
-                    jp2_struct->bpc); /* 1 byte */
-            if (notes) {
-                fprintf(xmlout,
-                        "                    <!-- BPC = 0xff means bits per pixel varies with component; see table below. -->\n");
-            }
-        }
-        if (derived) {
-            fprintf(xmlout,  "                    <BitsPerPixel>%d</BitsPerPixel>\n",
-                    jp2_struct->bpc & 0x7f);
-            fprintf(xmlout,  "                    <Signed>%d</Signed>\n",
-                    jp2_struct->bpc >> 7);
-        }
-    }
-    fprintf(xmlout,      "                  </BPC>\n");
-    fprintf(xmlout,      "                  <C>%d</C>\n",
-            jp2_struct->C); /* 1 byte */
-    if (notes) {
-        fprintf(xmlout,
-                "                  <!-- C is compression type.  Only \"7\" is allowed to date. -->\n");    /* 2 bytes */
-    }
-    fprintf(xmlout,      "                  <UnkC>%d</UnkC>\n",
-            jp2_struct->UnkC); /* 1 byte */
-    if (notes) {
-        fprintf(xmlout,
-                "                  <!-- Colourspace Unknown. 1 = unknown, 0 = known (e.g., colourspace spec is accurate) -->\n");    /* 1 byte */
-    }
-    fprintf(xmlout,      "                  <IPR>%d</IPR>\n",
-            jp2_struct->IPR); /* 1 byte */
-    if (notes) {
-        fprintf(xmlout,
-                "                  <!-- IPR is 1 if frame contains an Intellectual Property box; 0 otherwise. -->\n");    /* 2 bytes */
-    }
-    fprintf(xmlout,      "                </ImageHeader>\n");
-
-    if (jp2_struct->bpc == 255) {
-        fprintf(xmlout,    "                <BitsPerComponent BoxType=\"bpcc\">\n");
-        if (notes) {
-            fprintf(xmlout,
-                    "                <!-- Pixel depth (range 1 to 38) is low 7 bits of hex value + 1 -->\n");
-        }
-        /* Bits per pixel varies with components */
-        /* Compare jp2_read_bpcc(jp2_struct) */
-        for (i = 0; i < (int)jp2_struct->numcomps; i++) {
-            if (raw) {
-                fprintf(xmlout, "                  <AsHex>0x%02x</AsHex>\n",
-                        jp2_struct->comps[i].bpcc);    /* 1 byte */
-            }
-            if (derived) {
-                fprintf(xmlout, "                  <BitsPerPixel>%d</BitsPerPixel>\n",
-                        (jp2_struct->comps[i].bpcc & 0x7f) + 1);
-                fprintf(xmlout, "                  <Signed>%d</Signed>\n",
-                        jp2_struct->comps[i].bpcc >> 7);
-            }
-        }
-        fprintf(xmlout,    "                </BitsPerComponent>\n");
-    }
-
-    /* Compare jp2_read_colr(jp2_struct) */
-    fprintf(xmlout,
-            "                <ColourSpecification BoxType=\"colr\">\n");
-    fprintf(xmlout,      "                  <METH>%d</METH>\n",
-            jp2_struct->meth); /* 1 byte */
-    if (notes) {
-        fprintf(xmlout,
-                "                  <!-- Valid values of specification method so far: -->\n");
-        fprintf(xmlout,
-                "                  <!--   1 = Enumerated colourspace, in EnumCS field -->\n");
-        fprintf(xmlout,
-                "                  <!--   2 = Restricted ICC Profile, in PROFILE field -->\n");
-    }
-    fprintf(xmlout,      "                  <PREC>%d</PREC>\n",
-            jp2_struct->precedence); /* 1 byte */
-    if (notes) {
-        fprintf(xmlout,
-                "                  <!-- 0 is only valid value of precedence so far. -->\n");
-    }
-    fprintf(xmlout,      "                  <APPROX>%d</APPROX>\n",
-            jp2_struct->approx); /* 1 byte */
-    if (notes) {
-        fprintf(xmlout,
-                "                  <!-- 0 is only valid value of colourspace approximation so far. -->\n");
-    }
-
-    if (jp2_struct->meth == 1) {
-        fprintf(xmlout,    "                  <EnumCS>%d</EnumCS>\n",
-                jp2_struct->enumcs); /* 4 bytes */
-        if (notes) {
-            fprintf(xmlout,
-                    "                  <!-- Valid values of enumerated MJ2 colourspace so far: -->\n");
-            fprintf(xmlout,
-                    "                  <!--   16: sRGB as defined by IEC 61966-2-1. -->\n");
-            fprintf(xmlout,
-                    "                  <!--   17: greyscale (related to sRGB). -->\n");
-            fprintf(xmlout,
-                    "                  <!--   18: sRGB YCC (from JPEG 2000 Part II). -->\n");
-            fprintf(xmlout,
-                    "                  <!-- (Additional JPX values are defined in Part II). -->\n");
-        }
-    } else if (notes) {
-        fprintf(xmlout,
-                "                  <!-- PROFILE is not handled by current OpenJPEG implementation. -->\n");
-    }
-    /* only 1 byte is read and nothing stored */
-    fprintf(xmlout,      "                </ColourSpecification>\n");
-
-    /* TO DO?  No OpenJPEG support.
-    Palette 'pclr'
-    ComponentMapping 'cmap'
-    ChannelDefinition 'cdef'
-    Resolution 'res'
-    */
-    fprintf(xmlout,      "              </JP2Header>\n");
-}
-/* ------------- */
-
-#ifdef NOTYET
-IMAGE these use cp structure,
-      extended... but we could use a new data structure instead
-      void xml_out_frame_jp2i(FILE* xmlout, opj_cp_t *cp)
-{
-    /* IntellectualProperty 'jp2i' (no restrictions on location) */
-    int i;
-    IMAGE cp->jp2i, cp->jp2i_count, cp->jp2i_data(array of chars),
-          cp->cp2i_len(array of ints)
-    if (cp->jp2i != 1) {
-        return;    /* Not present */
-    }
-
-    for (i = 0; i < cp->jp2i_count; i++) {
-        fprintf(xmlout,      "            <IntellectualProperty BoxType=\"jp2i\">\n");
-        /* I think this can be anything, including binary, so do a dump */
-        /* Is it better to indent or not indent this content?  Indent is better for reading, but
-        worse for cut/paste. */
-        xml_out_dump_hex_and_ascii(xmlout, cp->jp2i_data[i], cp->jp2i_len[i]);
-        fprintf(xmlout,      "            </IntellectualProperty>\n");
-    }
-}
-
-void xml_out_frame_xml(FILE* xmlout, opj_cp_t *cp)
-{
-    /* XML 'xml\040' (0x786d6c20).  Can appear multiply, before or after jp2c codestreams */
-    IMAGE cp->xml, cp->xml_count, cp->xml_data(array of chars)
-    MAYBE WE DON'T NEED cp->xml_len (array of ints) IF WE ASSUME xml_data IS NULL-TERMINATED.
-    ASSUME ASSUME EACH LINE IS ENDED BY \n.
-    int i;
-    if (cp->xml != 1) {
-        return;    /* Not present */
-    }
-
-    for (i = 0; i < cp->xml_count; i++) {
-        fprintf(xmlout,      "            <TextFormXML BoxType=\"xml[space]" Instance =
-                    \"%d\">\n", i + 1);
-        /* Is it better to indent or not indent this content?  Indent is better for reading, but
-        worse for cut/paste. Being lazy, didn't indent here. */
-        fprintf(xmlout,
-                cp->xml_data[i]); /* May be multiple lines */ /* Could check if this is well-formed */
-        fprintf(xmlout,      "            </TextFormXML>\n");
-    }
-}
-
-void xml_out_frame_uuid(FILE* xmlout, opj_cp_t *cp)
-{
-    /* UUID 'uuid' (top level only) */
-    /* Part I 1.7.2 says: may appear multiply in JP2 file, anywhere except before File Type box */
-    /* Part III 5.2.1 says: Private extensions shall be achieved through the 'uuid' type. */
-    /* A UUID is a 16-byte value.  There is a conventional string representation for it:
-       "0x12345678-9ABC-DEF0-1234-567890ABCDEF".  Let's assume that is what is stored in uuid_value */
-
-    /* Part III 6.1 Any other MJ2 box type could be alternatively written as a 'uuid' box, with value given
-       as : 0xXXXXXXXX-0011-0010-8000-00AA00389B71, where the Xs are the boxtype in hex.  However,
-       such a file is "not compliant; systems may choose to read [such] objects ... as equivalent to the box of
-       the same type, or not."  Here, we choose not to. */
-    int i;
-    IMAGE cp->uuid, cp->uuid_count,
-          cp->uuid_value(array of uuids...
-                         let's say fixed-length strings) cp->uuid_data (array of char buffers), cp->uuid_len (array of ints)
-                         if (cp->juuid != 1)
-                         return; /* Not present */
-
-    for (i = 0; i < cp->uuid_count; i++) {
-        fprintf(xmlout,      "            <UniversalUniqueID BoxType=\"uuid\">
-                fprintf(xmlout,      "              <UUID>%s</UUDI>\n", cp->uuid_value[i]);
-                fprintf(xmlout,      "              <Data>\n");
-                /* I think this can be anything, including binary, so do a dump */
-                /* Is it better to indent or not indent this content?  Indent is better for reading, but
-                worse for cut/paste. */
-                xml_out_dump_hex_and_ascii(xmlout, cp->uuid_data[i], cp->uuid_len[i]);
-                fprintf(xmlout,      "              </Data>\n");
-                fprintf(xmlout,      "            </UniversalUniqueID>\n");
-    }
-}
-
-void xml_out_frame_uinf(FILE* xmlout, opj_cp_t *cp)
-{
-    /* UUIDInfo 'uinf', includes UUIDList 'ulst' and URL 'url\40' */
-    /* Part I 1.7.3 says: may appear multiply in JP2 file, anywhere at the top level except before File Type box */
-    /* So there may be multiple ulst's, and each can have multiple UUIDs listed (with a single URL) */
-    /* This is not quite as vendor-specific as UUIDs, or at least is meant to be generally readable */
-    /* Assume UUIDs stored in canonical string format */
-    int i, j;
-    IMAGE cp->uinf, cp->uinf_count, cp->uinf_ulst_nu(array of ints)
-    cp->uinf_uuid(2 dimensional array of uuids... let's say fixed-length strings),
-                  cp->uinf_url(array of char buffers)
-
-                  if (cp->uinf != 1)
-                  return; /* Not present */
-
-    for (i = 0; i < cp->uuid_count; i++) {
-        fprintf(xmlout,      "            <UUIDInfo BoxType=\"uinf\">\n");
-            fprintf(xmlout,      "              <UUIDList BoxType=\"ulst\" Count=\"%d\">\n",
-                    cp->cp->uinf_ulst_nu[i]);
-            for (j = 0; j < cp->uinf_ulst_nu[i];  j++) {
-                fprintf(xmlout,    "              <ID Instance=\"%s\">%s</ID>\n",
-                        cp->uuif_uuid[i][j], j + 1);
-            }
-            fprintf(xmlout,      "              </UUIDList>\n");
-            fprintf(xmlout,      "              <DataEntryURL>\n");
-            /* Could add VERS and FLAG here */
-            fprintf(xmlout,      "                <LOC>\n");
-            fprintf(xmlout,      "                  %s",
-                    cp->uinf_url[i]); /* Probably single line, so indent works */ /* In theory, could check if this is well-formed, or good live link */
-            fprintf(xmlout,      "                </LOC>\n");
-            fprintf(xmlout,      "              </DataEntryURL>\n");
-            fprintf(xmlout,      "            </UUIDInfo>\n");
-        }
-}
-
-IMAGE these use cp structure,
-extended... but we could use a new data structure instead
-void xml_out_frame_unknown_type(FILE* xmlout, opj_cp_t *cp)
-{
-    /* Part III 5.2.1 says "Type fields not defined here are reserved.  Private extensions
-       shall be acieved through the 'uuid' type." [This implies an unknown
-       type would be an error, but then...] "Boxes not explicitly defined in this standard,
-     or otherwise unrecognized by a reader, may be ignored."
-     Also, it says  "the following types are not and will not be used, or used only in
-     their existing sense, in future versions of this specification, to avoid conflict
-     with existing content using earlier pre-standard versions of this format:
-       clip, crgn, matt, kmat, pnot, ctab, load, imap;
-       track reference types tmcd, chap, sync,scpt, ssrc"
-     [But good luck figuring out the mapping.]
-     Part III Amend. 2 4.1 is stronger: "All these specifications [of this family, e.g.,
-     JP2 Part I, ISO Base format (Part 12) leading to MP4, Quicktime, and possibly including
-     MJ2] require that readers ignore objects that are unrecognizable to them".
-     */
-    int i;
-    IMAGE cp->unknown_type, cp->unknown_type_count,
-          cp->unknown_type_boxtype(array of buf[5]s),
-          cp->unknown_type_data(array of chars), cp->unknown_type_len(array of ints)
-    if (cp->unknown_type != 1) {
-        return;    /* Not present */
-    }
-
-    for (i = 0; i < cp->unknown_type_count; i++) {
-        fprintf(xmlout,      "            <UnknownType BoxType=\"%s\">\n",
-                cp->unknown_type_boxtype[i]);
-        /* Can be anything, including binary, so do a dump */
-        /* Is it better to indent or not indent this content?  Indent is better for reading, but
-        worse for cut/paste. */
-        xml_out_dump_hex_and_ascii(xmlout, cp->unknown_type_data[i],
-                                   cp->unknown_type_len[i]);
-        fprintf(xmlout,      "            </UnknownType>\n");
-    }
-}
-
-#endif
diff --git a/src/bin/mj2/meta_out.h b/src/bin/mj2/meta_out.h
deleted file mode 100644 (file)
index 769ff39..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/* meta_out.h */
-/* Dump MJ2, JP2 metadata (partial so far) to xml file */
-/* Callable from mj2_to_metadata */
-/* Contributed to Open JPEG by Glenn Pearson, U.S. National Library of Medicine */
-
-#define BOOL int
-#define FALSE 0
-#define TRUE 1
-
-void xml_write_init(BOOL n, BOOL t, BOOL r, BOOL d);
-
-int xml_write_struct(FILE *file, FILE *xmlout, opj_mj2_t * movie,
-                     unsigned int sampleframe, char* stringDTD, opj_event_mgr_t *event_mgr);
-
diff --git a/src/bin/mj2/mj2_to_metadata.c b/src/bin/mj2/mj2_to_metadata.c
deleted file mode 100644 (file)
index 27f164d..0000000
+++ /dev/null
@@ -1,350 +0,0 @@
-/* mj2_to_metadata.c */
-/* Dump MJ2, JP2 metadata (partial so far) to xml file */
-/* Contributed to Open JPEG by Glenn Pearson, contract software developer, U.S. National Library of Medicine.
-
-The base code in this file was developed by the author as part of a video archiving
-project for the U.S. National Library of Medicine, Bethesda, MD.
-It is the policy of NLM (and U.S. government) to not assert copyright.
-
-A non-exclusive copy of this code has been contributed to the Open JPEG project.
-Except for copyright, inclusion of the code within Open JPEG for distribution and use
-can be bound by the Open JPEG open-source license and disclaimer, expressed elsewhere.
-*/
-
-#include "opj_includes.h"
-#include "mj2.h"
-
-#include "mj2_to_metadata.h"
-#include <string.h>
-#include "opj_getopt.h"
-
-/* -------------------------------------------------------------------------- */
-
-/**
-sample error callback expecting a FILE* client object
-*/
-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)
-{
-    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)
-{
-    FILE *stream = (FILE*)client_data;
-    fprintf(stream, "[INFO] %s", msg);
-}
-
-/* -------------------------------------------------------------------------- */
-
-
-
-/* ------------- */
-
-void help_display()
-{
-    /*             "1234567890123456789012345678901234567890123456789012345678901234567890123456789" */
-    fprintf(stdout, "                Help for the 'mj2_to_metadata' Program\n");
-    fprintf(stdout, "                ======================================\n");
-    fprintf(stdout, "The -h option displays this information on screen.\n\n");
-
-    fprintf(stdout,
-            "mj2_to_metadata generates an XML file from a Motion JPEG 2000 file.\n");
-    fprintf(stdout,
-            "The generated XML shows the structural, but not (yet) curatorial,\n");
-    fprintf(stdout,
-            "metadata from the movie header and from the JPEG 2000 image and tile\n");
-    fprintf(stdout,
-            "headers of a sample frame.  Excluded: low-level packed-bits image data.\n\n");
-
-    fprintf(stdout, "By Default\n");
-    fprintf(stdout, "----------\n");
-    fprintf(stdout,
-            "The metadata includes the jp2 image and tile headers of the first frame.\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "Metadata values are shown in 'raw' form (e.g., hexadecimal) as stored in the\n");
-    fprintf(stdout,
-            "file, and, if apt, in a 'derived' form that is more quickly grasped.\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "Notes explaining the XML are embedded as terse comments.  These include\n");
-    fprintf(stdout, "   meaning of non-obvious tag abbreviations;\n");
-    fprintf(stdout, "   range and precision of valid values;\n");
-    fprintf(stdout, "   interpretations of values, such as enumerations; and\n");
-    fprintf(stdout, "   current implementation limitations.\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "The sample-size and chunk-offset tables, each with 1 row per frame, are not reported.\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout,
-            "The file is self-contained and no verification (e.g., against a DTD) is requested.\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "Required Parameters (except with -h)\n");
-    fprintf(stdout, "------------------------------------\n");
-    fprintf(stdout,
-            "[Caution: file strings that contain spaces should be wrapped with quotes.]\n");
-    fprintf(stdout,
-            "-i input.mj2  : where 'input' is any source file name or path.\n");
-    fprintf(stdout,
-            "                MJ2 files created with 'frames_to_mj2' are supported so far.\n");
-    fprintf(stdout,
-            "                These are silent, single-track, 'MJ2 Simple Profile' videos.\n");
-    fprintf(stdout,
-            "-o output.xml : where 'output' is any destination file name or path.\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "Optional Parameters\n");
-    fprintf(stdout, "-------------------\n");
-    fprintf(stdout, "-h            : Display this help information.\n");
-    fprintf(stdout, "-n            : Suppress all mj2_to_metadata notes.\n");
-    fprintf(stdout,
-            "-t            : Include sample-size and chunk-offset tables.\n");
-    fprintf(stdout,
-            "-f n          : where n > 0.  Include jp2 header info for frame n [default=1].\n");
-    fprintf(stdout, "-f 0          : No jp2 header info.\n");
-    fprintf(stdout,
-            "-r            : Suppress all 'raw' data for which a 'derived' form exists.\n");
-    fprintf(stdout, "-d            : Suppress all 'derived' data.\n");
-    fprintf(stdout,
-            "                (If both -r and -d given, -r will be ignored.)\n");
-    fprintf(stdout,
-            "-v string     : Verify against the DTD file located by the string.\n");
-    fprintf(stdout,
-            "                Prepend quoted 'string' with either SYSTEM or PUBLIC keyword.\n");
-    fprintf(stdout,
-            "                Thus, for the distributed DTD placed in the same directory as\n");
-    fprintf(stdout,
-            "                the output file: -v \"SYSTEM mj2_to_metadata.dtd\"\n");
-    fprintf(stdout,
-            "                \"PUBLIC\" is used with an access protocol (e.g., http:) + URL.\n");
-    /* More to come */
-    fprintf(stdout, "\n");
-    /*             "1234567890123456789012345678901234567890123456789012345678901234567890123456789" */
-}
-
-/* ------------- */
-
-int main(int argc, char *argv[])
-{
-
-    opj_dinfo_t* dinfo;
-    opj_event_mgr_t event_mgr;      /* event manager */
-
-    FILE *file, *xmlout;
-    /*  char xmloutname[50]; */
-    opj_mj2_t *movie;
-
-    char* infile = 0;
-    char* outfile = 0;
-    char* s, S1, S2, S3;
-    int len;
-    unsigned int sampleframe = 1; /* First frame */
-    char* stringDTD = NULL;
-    BOOL notes = TRUE;
-    BOOL sampletables = FALSE;
-    BOOL raw = TRUE;
-    BOOL derived = TRUE;
-    mj2_dparameters_t parameters;
-
-    while (TRUE) {
-        /* ':' after letter means it takes an argument */
-        int c = getopt(argc, argv, "i:o:f:v:hntrd");
-        /* FUTURE:  Reserve 'p' for pruning file (which will probably make -t redundant) */
-        if (c == -1) {
-            break;
-        }
-        switch (c) {
-        case 'i':           /* IN file */
-            infile = optarg;
-            s = optarg;
-            while (*s) {
-                s++;    /* Run to filename end */
-            }
-            s--;
-            S3 = *s;
-            s--;
-            S2 = *s;
-            s--;
-            S1 = *s;
-
-            if ((S1 == 'm' && S2 == 'j' && S3 == '2')
-                    || (S1 == 'M' && S2 == 'J' && S3 == '2')) {
-                break;
-            }
-            fprintf(stderr, "Input file name must have .mj2 extension, not .%c%c%c.\n", S1,
-                    S2, S3);
-            return 1;
-
-        /* ----------------------------------------------------- */
-        case 'o':           /* OUT file */
-            outfile = optarg;
-            while (*outfile) {
-                outfile++;    /* Run to filename end */
-            }
-            outfile--;
-            S3 = *outfile;
-            outfile--;
-            S2 = *outfile;
-            outfile--;
-            S1 = *outfile;
-
-            outfile = optarg;
-
-            if ((S1 == 'x' && S2 == 'm' && S3 == 'l')
-                    || (S1 == 'X' && S2 == 'M' && S3 == 'L')) {
-                break;
-            }
-
-            fprintf(stderr,
-                    "Output file name must have .xml extension, not .%c%c%c\n", S1, S2, S3);
-            return 1;
-
-        /* ----------------------------------------------------- */
-        case 'f':           /* Choose sample frame.  0 = none */
-            sscanf(optarg, "%u", &sampleframe);
-            break;
-
-        /* ----------------------------------------------------- */
-        case 'v':           /* Verification by DTD. */
-            stringDTD = optarg;
-            /* We will not insist upon last 3 chars being "dtd", since non-file
-            access protocol may be used. */
-            if (strchr(stringDTD, '"') != NULL) {
-                fprintf(stderr,
-                        "-D's string must not contain any embedded double-quote characters.\n");
-                return 1;
-            }
-
-            if (strncmp(stringDTD, "PUBLIC ", 7) == 0 ||
-                    strncmp(stringDTD, "SYSTEM ", 7) == 0) {
-                break;
-            }
-
-            fprintf(stderr, "-D's string must start with \"PUBLIC \" or \"SYSTEM \"\n");
-            return 1;
-
-        /* ----------------------------------------------------- */
-        case 'n':           /* Suppress comments */
-            notes = FALSE;
-            break;
-
-        /* ----------------------------------------------------- */
-        case 't':           /* Show sample size and chunk offset tables */
-            sampletables = TRUE;
-            break;
-
-        /* ----------------------------------------------------- */
-        case 'h':           /* Display an help description */
-            help_display();
-            return 0;
-
-        /* ----------------------------------------------------- */
-        case 'r':           /* Suppress raw data */
-            raw = FALSE;
-            break;
-
-        /* ----------------------------------------------------- */
-        case 'd':           /* Suppress derived data */
-            derived = FALSE;
-            break;
-
-        /* ----------------------------------------------------- */
-        default:
-            return 1;
-        } /* switch */
-    } /* while */
-
-    if (!raw && !derived) {
-        raw = TRUE;    /* At least one of 'raw' and 'derived' must be true */
-    }
-
-    /* Error messages */
-    /* -------------- */
-    if (!infile || !outfile) {
-        fprintf(stderr,
-                "Correct usage: mj2_to_metadata -i mj2-file -o xml-file (plus options)\n");
-        return 1;
-    }
-
-    /* was:
-      if (argc != 3) {
-        printf("Bad syntax: Usage: MJ2_to_metadata inputfile.mj2 outputfile.xml\n");
-        printf("Example: MJ2_to_metadata foreman.mj2 foreman.xml\n");
-        return 1;
-      }
-    */
-    len = strlen(infile);
-    if (infile[0] == ' ') {
-        infile++; /* There may be a leading blank if user put space after -i */
-    }
-
-    file = fopen(infile, "rb"); /* was: argv[1] */
-
-    if (!file) {
-        fprintf(stderr, "Failed to open %s for reading.\n", infile); /* was: argv[1] */
-        return 1;
-    }
-
-    len = strlen(outfile);
-    if (outfile[0] == ' ') {
-        outfile++; /* There may be a leading blank if user put space after -o */
-    }
-
-    // Checking output file
-    xmlout = fopen(outfile, "w"); /* was: argv[2] */
-    if (!xmlout) {
-        fprintf(stderr, "Failed to open %s for writing.\n", outfile); /* was: argv[2] */
-        fclose(file);
-        return 1;
-    }
-    // Leave it open
-
-    /*
-    configure the event callbacks (not required)
-    setting of each callback is optional
-    */
-    memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
-    event_mgr.error_handler = error_callback;
-    event_mgr.warning_handler = warning_callback;
-    event_mgr.info_handler = info_callback;
-
-    /* get a MJ2 decompressor handle */
-    dinfo = mj2_create_decompress();
-
-    /* catch events using our callbacks and give a local context */
-    opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
-
-    /* setup the decoder decoding parameters using user parameters */
-    movie = (opj_mj2_t*) dinfo->mj2_handle;
-    mj2_setup_decoder(dinfo->mj2_handle, &parameters);
-
-    if (mj2_read_struct(file, movie)) { // Creating the movie structure
-        fclose(xmlout);
-        return 1;
-    }
-
-    xml_write_init(notes, sampletables, raw, derived);
-    xml_write_struct(file, xmlout, movie, sampleframe, stringDTD, &event_mgr);
-    fclose(xmlout);
-
-    fprintf(stderr, "Metadata correctly extracted to XML file \n");;
-
-    /* free remaining structures */
-    if (dinfo) {
-        mj2_destroy_decompress((opj_mj2_t*)dinfo->mj2_handle);
-    }
-
-    return 0;
-}
-
-
diff --git a/src/bin/mj2/mj2_to_metadata.dtd b/src/bin/mj2/mj2_to_metadata.dtd
deleted file mode 100644 (file)
index 249de1a..0000000
+++ /dev/null
@@ -1,425 +0,0 @@
-<!--
-Preliminary DTD for Open JPEG "mj2_to_metadata" function.
-Last revised: April 20, 2005
-Author:  Glenn Pearson, at U.S. National Library of Medicine.
-See mj2_to_metadata.c regarding copyright, license, disclaimer status.
-
-While the vocabulary of this DTD is based on the relevant portions of the
-ISO/IEC JPEG 200 standard, the detailed representation is the author's own.
-It is neither an ISO/IEC nor NLM official or consensus representation.
-Furthermore, it deviates from a pure representation of the ISO/IEC standard
-in these aspects:
-
-  - it is incomplete in a number of ways (which to some extent may be
-    addressed over time);
-  - it has extensions for "derived" data and "statistics";
-  - it is more flexible.  That is, some elements are marked as optional
-    not because they are optional in an MJ2 file, but because reporting
-    of them is optional based on current or projected mj2_to_metadata
-    command-line flags.
--->
-<!ELEMENT MJ2_File (JP2?, FileType?, MovieBox?)>
-<!ELEMENT JP2 EMPTY>
-<!ATTLIST JP2 BoxType CDATA #FIXED "jP[space][space]">
-<!ATTLIST JP2 Signature CDATA #FIXED "0x0d0a870a">
-<!ELEMENT FileType (Brand, MinorVersion, CompatibilityList)>
-<!ATTLIST FileType BoxType CDATA #FIXED "ftyp">
-<!ELEMENT Brand (#PCDATA)> <!-- 4 characters max -->
-<!ELEMENT MinorVersion (#PCDATA)> <!-- 4 chararcters max -->
-<!ELEMENT CompatibilityList (CompatibleBrand)*>
-<!ATTLIST CompatibilityList Count CDATA #REQUIRED>  <!-- Count >= 0 -->
-<!ELEMENT CompatibleBrand (#PCDATA)> <!-- 4 characters max -->
-<!ELEMENT MovieBox (MovieHeader, Statistics?, Track*)>
-<!ATTLIST MovieBox BoxType CDATA #FIXED "moov">
-<!ELEMENT MovieHeader (CreationTime, ModificationTime, Timescale, Rate, Duration, Volume, TransformationMatrix)>
-<!ATTLIST MovieHeader BoxType CDATA #FIXED "mvhd">
-<!ELEMENT CreationTime (InSeconds?,AsLocalTime?)>
-<!ELEMENT InSeconds (#PCDATA)>
-<!ELEMENT AsLocalTime (#PCDATA)>
-<!ELEMENT ModificationTime (InSeconds?,AsLocalTime?)>
-<!ELEMENT Timescale (#PCDATA)> <!-- Timescale defines time units in one second -->
-<!ELEMENT Rate (AsHex | (AsHex, AsDecimal) | AsDecimal)>  <!-- Decimal is Approximation; Optional on input. -->
-<!ELEMENT AsHex (#PCDATA)>
-<!ELEMENT AsDecimal (#PCDATA)> 
-<!ELEMENT Duration (InTimeUnits | (InTimeUnits, InSeconds) | InSeconds)>  <!-- InSeconds Optional on input. -->
-<!ELEMENT InTimeUnits (#PCDATA)>
-<!ELEMENT Volume (AsHex | (AsHex, AsDecimal) | AsDecimal)>   <!-- hex default = 0x0100 -->
-<!-- Fixed 8.8 value of audio volume.  Full, normal value is 1.0 (0x0100) -->
-<!ELEMENT TransformationMatrix (TMa,TMb,TMu,TMc,TMd,TMv,TMx,TMy,TMw)> <!-- for video -->
-<!-- 3 x 3 Video Transformation Matrix {a,b,u,c,d,v,x,y,w}.  Required: u=0, v=0, w=1 -->
-<!-- Maps decompressed point (p,q) to rendered point (ap + cq + x, bp + dq + y) -->
-<!-- Stored as Fixed Point Hex: all are 16.16, except u,v,w are 2.30 -->
-<!-- Unity = 0x00010000,0,0,0,0x00010000,0,0,0,0x40000000 -->
-<!ELEMENT TMa (#PCDATA)>    
-<!ELEMENT TMb (#PCDATA)>  
-<!ELEMENT TMu (#PCDATA)> <!--Always "0x00000000" -->
-<!ELEMENT TMc (#PCDATA)>
-<!ELEMENT TMd (#PCDATA)>
-<!ELEMENT TMv (#PCDATA)> <!--Always "0x00000000" -->
-<!ELEMENT TMx (#PCDATA)>
-<!ELEMENT TMy (#PCDATA)>
-<!ELEMENT TMw (#PCDATA)> <!--Always "0x40000000" -->
-
-<!ELEMENT Statistics (TracksFound)>
-<!ELEMENT TracksFound (Video,Audio,Hint)>
-<!ELEMENT Video (#PCDATA)>
-<!ELEMENT Audio (#PCDATA)>
-<!ELEMENT Hint (#PCDATA)>
-
-<!-- For now, output info on at most one video track -->
-
-
-<!ELEMENT Track (TrackHeader, TrackReferenceContainer?, EditListContainer?, Media, JP2_Frame?)>  <!-- JP2_Frame is mj2_to_metadata extension -->
-<!ATTLIST Track BoxType CDATA #FIXED "trak">
-<!ATTLIST Track Instance CDATA #REQUIRED>
-<!ELEMENT TrackHeader (TrackID, TrackLayer?, Volume?, TransformationMatrix?, Width?, Height?)>
-<!ATTLIST TrackHeader BoxType CDATA #FIXED "tkhd">
-<!-- Not shown here: CreationTime, ModificationTime, Duration. -->
-<!-- These 3 fields are reported under MediaHeader below.   When reading these 3, -->
-<!-- m2j_to_metadata currently doesn't distinguish between TrackHeader and MediaHeader source. -->
-<!-- If both found, value read from MediaHeader is used. -->
-<!ELEMENT TrackID (#PCDATA)>
-<!ELEMENT TrackLayer (#PCDATA)>  <!-- front-to-back ordering of video tracks. 0 = normal, -1 is closer, etc. -->
-<!-- "Volume" element described above; here it is for particular audio track.  Full, normal (default = 0x0100) -->
-<!-- "TransformationMatrix" element described above; matrix here is applied before MovieHeader one. -->
-<!ELEMENT Width (AsHex | (AsHex, AsDecimal) | AsDecimal)>
-<!ELEMENT Height (AsHex | (AsHex, AsDecimal) | AsDecimal)>
-<!-- AsHex, AsDecimal already defined above -->
- <!-- Width and Height are for the presentation; frames will be scaled to this -->
-<!-- /TrackHeader -->
-<!ELEMENT TrackReferenceContainer ANY>  <!-- TO DO: TrackReferenceContainer 'tref'  just used in hint track -->
-<!ELEMENT EditListContainer ANY>  <!-- TO DO: EditListContainer 'edts', contains EditList 'elst' with media-time, segment-duration, media-rate -->
-<!ELEMENT Media (MediaHeader, HandlerReference,MediaInfoContainer)>
-<!ATTLIST Media BoxType CDATA #FIXED "mdia">
-<!ELEMENT MediaHeader (CreationTime,ModificationTime,Timescale,Duration,Language)>
-<!ATTLIST MediaHeader BoxType CDATA #FIXED "mdhd">
-<!-- Elements already defined above: CreationTime, ModificationTime, Timescale, Duration -->
-<!ELEMENT Language (#PCDATA)> <!-- 3 chars max.  There's an enumeration available -->
-<!ELEMENT HandlerReference (HandlerType)>
-<!ATTLIST HandlerReference BoxType CDATA #FIXED "hdlr">
-<!ELEMENT HandlerType (#PCDATA)>
-<!ATTLIST HandlerType Code ( vide | soun | hint ) "vide">
-
-<!-- make the media headers multiple? -->
-<!ELEMENT MediaInfoContainer ((VideoMediaHeader | SoundMediaHeader | HintMediaHeader), DataInfo, SampleTable)>
-<!ATTLIST MediaInfoContainer BoxType CDATA #FIXED "minf">
-<!ELEMENT VideoMediaHeader (GraphicsMode, Opcolor)>
-<!ATTLIST VideoMediaHeader BoxType CDATA #FIXED "vmhd">
-<!ELEMENT GraphicsMode (#PCDATA)>
-          <!-- Enumerated values of graphics mode: -->
-          <!--  0x00 = copy (over existing image); -->
-          <!--  0x24 = transparent; 'blue-screen' this image using opcolor; -->
-          <!--  0x100 = alpha; alpha-blend this image -->
-          <!--  0x101 = whitealpha; alpha-blend this image, which has been blended with white; -->
-          <!--  0x102 = blackalpha; alpha-blend this image, which has been blended with black. -->
-<!ELEMENT Opcolor (Red,Green,Blue)>
-<!ELEMENT Red (#PCDATA)>
-<!ELEMENT Green (#PCDATA)>
-<!ELEMENT Blue (#PCDATA)>
-<!ELEMENT SoundMediaHeader (Balance)>
-<!ATTLIST SoundMediaHeader BoxType CDATA #FIXED "smhd">
-<!ELEMENT Balance (#PCDATA)>
-          <!-- Fixed Point 8.8, fixes mono track in stereo space. -->
-          <!-- 0.0 = center, -1.0 = full left, 1.0 = full right -->
-<!ELEMENT HintMediaHeader (MaxPDU_Size, AvgPDU_Size, MaxBitRate, AvgBitRate, SlidingAvgBitRate)>
-<!ATTLIST HintMediaHeader BoxType CDATA #FIXED "hmhd">
-<!ELEMENT MaxPDU_Size (#PCDATA)>
-          <!-- Size in bytes of largest PDU in this hint stream. -->
-<!ELEMENT AvgPDU_Size (#PCDATA)>
-           <!-- Average size in bytes of a PDU over the entire presentation. -->
-<!ELEMENT MaxBitRate (#PCDATA)>
-          <!-- Maximum rate in bits per second over any window of 1 second. -->
-<!ELEMENT AvgBitRate (#PCDATA)>
-          <!-- Averate rate in bits per second over the entire presentation. -->
-<!ELEMENT SlidingAvgBit (#PCDATA)>
-          <!-- Maximum rate in bits per second over any window of one minute. -->
-<!ELEMENT DataInfo (DataReference)>
-<!ATTLIST DataInfo BoxType CDATA #FIXED "dinf">
-<!ELEMENT DataReference (DataEntryUrlBox | DataEntryUrnBox )*>
-<!ATTLIST DataReference BoxType CDATA #FIXED "dref">
-<!ATTLIST DataReference URL_Count CDATA #REQUIRED>
-<!ATTLIST DataReference URN_Count CDATA #REQUIRED> <!-- table w. flags, URLs, URNs -->
-<!--  // Data structure does not distinguish between single URL, single URN, or DREF table or URLs & URNs.
-  // We could infer those, but for now just present everything as a DREF table.
--->
-              <!-- No entries here mean that file is self-contained, as required by Simple Profile. -->
-
-<!ELEMENT DataEntryUrlBox (Location)>
-<!ATTLIST DataEntryUrlBox BoxType CDATA #FIXED "url[space]"> <!-- table w. flags, URLs, URNs -->
-            <!-- Only the first 16 bytes of URL location are recorded in mj2_to_metadata data structure. -->
-<!ELEMENT DataEntryUrnBox (Name, Location?)>
-<!ATTLIST DataEntryUrnBox BoxType CDATA #FIXED "urn[space]\">
-            <!-- Only the first 16 bytes each of URN name and optional location are recorded in mj2_to_metadata data structure. -->
-
-<!ELEMENT SampleTable (VisualSampleEntry,TimeToSample,SampleToChunk,SampleSize,ChunkOffset)>  <!-- structure doesn't do non-visual sample entry yet -->
-<!ATTLIST SampleTable BoxType CDATA #FIXED "stbl">  <!-- to add: entry count -->
-            <!-- Next are instances of generic SampleDescription BoxType=\"stsd\" -->
-    <!-- There could be multiple instances of this, but "entry_count" is just a local at read-time.
-       And it's used wrong, too, as count of just visual type, when it's really all 3 types.
-       This is referred to as "smj2" within mj2.c -->
-<!ELEMENT VisualSampleEntry (WidthAsInteger, HeightAsInteger, HorizontalRes, VerticalRes, CompressorName, Depth, JP2Header?, FieldCoding?, MJP2_Profile?, MJP2_Prefix?, MJP2_SubSampling?, MJP2_OriginalFormat?)>
-<!ATTLIST VisualSampleEntry BoxType CDATA #FIXED "mjp2">
-          <!-- If multiple instances of this, only first is shown here. -->
-<!ELEMENT WidthAsInteger (#PCDATA)>
-<!ELEMENT HeightAsInteger (#PCDATA)>
-<!ELEMENT HorizontalRes (AsHex | (AsHex, AsDecimal) | AsDecimal)>
-<!ELEMENT VerticalRes (AsHex | (AsHex, AsDecimal) | AsDecimal)>
-<!-- Typical value for both resolution is 72 (0x00480000) -->
-<!ELEMENT CompressorName (#PCDATA)>
-          <!-- Compressor name for debugging.  Standard restricts max length to 31 bytes. -->
-          <!-- Usually blank or \"Motion JPEG2000\" -->
-<!ELEMENT Depth (#PCDATA)>
-          <!-- Depth is: -->
-          <!--   0x20: alpha channels present (color or grayscale) -->
-          <!--   0x28: grayscale without alpha -->
-          <!--   0x18: color without alpha -->
-
-<!-- TODO somewhere: tk->jp2_struct.numcomps -->
-<!ELEMENT JP2Header (ImageHeader, ColourSpecification)>
-<!ATTLIST JP2Header BoxType CDATA #FIXED "jp2h">
-<!ELEMENT ImageHeader (HEIGHT, WIDTH, NC, BPC, C, UnkC, IPR)>
-<!ATTLIST ImageHeader BoxType CDATA #FIXED "ihdr">
-<!ELEMENT HEIGHT (#PCDATA)>  <!-- If 2 fields/frame, total deinterlaced height -->
-<!ELEMENT WIDTH (#PCDATA)>
-<!ELEMENT NC (#PCDATA)>  <!-- number of components -->
-<!ELEMENT BPC (AsHex | (AsHex,BitsPerPixel,Signed) | (BitsPerPixel,Signed))>
-<!ELEMENT BitsPerPixel (#PCDATA)>
-<!ELEMENT Signed (#PCDATA)>
-<!ELEMENT C (#PCDATA)>  <!-- Compression type.  Only "7" defined -->
-<!ELEMENT UnkC (#PCDATA)>  <!-- Colourspace Unknown. 1 = unknown, 0 = known -->
-<!ELEMENT IPR (#PCDATA)>  <!-- 1 = frame has Intellectual Prop. box; otherwise 0 -->
-<!ELEMENT ColourSpecification (METH, PREC, APPROX, EnumCS)>
-<!ATTLIST ColourSpecification BoxType CDATA #FIXED "colr">
-<!ELEMENT METH (#PCDATA)>  <!-- 1 = EnumCS field; 2 = PROFILE field (not yet generated) -->
-<!ELEMENT PREC (#PCDATA)> <!-- precedence must be 0 so far -->
-<!ELEMENT APPROX (#PCDATA)>  <!-- colourspace approximation must be 0 so far -->
-<!ELEMENT EnumCS (#PCDATA)> <!-- Valid enumerated MJ2 colourspaces: 16 (sRGB), 17 (grey sRGB), 18 (YCC) -->
-
-<!-- Following subboxes are optional -->
-<!ELEMENT FieldCoding (FieldCount, FieldOrder)>
-<!ATTLIST FieldCoding BoxType CDATA #FIXED "fiel">
-<!ELEMENT FieldCount (#PCDATA)>
-            <!-- Must be either 1 or 2 -->
-<!ELEMENT FieldOrder (#PCDATA)>
-            <!-- When FieldCount=2, FieldOrder means: -->
-            <!--   0: Field coding unknown -->
-            <!--   1: Field with topmost line is stored first in sample; fields are in temporal order -->
-            <!--   6: Field with topmost line is stored second in sample; fields are in temporal order -->
-            <!-- Defaults: FieldCount=1, FieldOrder=0 if FieldCoding box not present -->
-            <!-- Current implementation doesn't retain whether box was actually present. -->
-
-<!ELEMENT MJP2_Profile (CompatibleBrand*)>
-<!ATTLIST MJP2_Profile BoxType CDATA #FIXED "jp2p">
-<!ATTLIST MJP2_Profile Count CDATA #REQUIRED>
-
-<!ELEMENT MJP2_Prefix (Data*)>
-<!ATTLIST MJP2_Prefix BoxType CDATA #FIXED "jp2x">
-<!ATTLIST MJP2_Prefix Count CDATA #REQUIRED>
-<!-- We'll probably need better formatting than this  -->
-<!ELEMENT Data (#PCDATA)>    <!-- Multiple. Each entry is single byte -->
-
-<!ELEMENT MJP2_SubSampling (HorizontalSub, VerticalSub, HorizontalOffset, VerticalOffset)>
-<!ATTLIST MJP2_SubSampling BoxType CDATA #FIXED "jsub">
-<!-- These values are all 1 byte -->
-            <!-- Typical subsample value is 2 for 4:2:0 -->
-<!ELEMENT HorizontalSub (#PCDATA)>
-<!ELEMENT VerticalSub (#PCDATA)>
-<!ELEMENT HorizontalOffset (#PCDATA)>
-<!ELEMENT VerticalOffset (#PCDATA)>
-
-<!ELEMENT MJP2_OriginalFormat (OriginalFieldCount, OriginalFieldOrder)>
-<!ATTLIST MJP2_OriginalFormat BoxType CDATA #FIXED "orfo"> <!-- Part III Appx. 2 -->
-<!ELEMENT OriginalFieldCount (#PCDATA)>
-            <!-- In original material before encoding.  Must be either 1 or 2 -->
-<!ELEMENT OriginalFieldOrder (#PCDATA)>
-            <!-- When FieldCount=2, FieldOrder means: -->
-            <!--   0: Field coding unknown -->
-            <!--   11: Topmost line came from the earlier field; -->
-            <!--   16:  Topmost line came form the later field. -->
-            <!-- Defaults: FieldCount=1, FieldOrder=0 if FieldCoding box not present -->
-            <!-- Current implementation doesn't retain whether box was actually present. -->
-
-
-            <!-- mj2_to_metadata's data structure doesn't record Audio and Hint sample data currently. -->
-
-<!-- Within SampleTable: -->
-<!ELEMENT TimeToSample (SampleStatistics, SampleEntries)>
-<!ATTLIST TimeToSample BoxType CDATA #FIXED "stts">  
-<!ELEMENT SampleStatistics (TotalSamples)>  <!-- Not part of standard -->  
-<!ELEMENT TotalSamples (#PCDATA)>
-                <!-- For video, gives the total frames in the track, by summing all entries in the Sample Table -->
-
-<!ELEMENT SampleEntries (Table*)>
-<!ATTLIST SampleEntries EntryCount CDATA #REQUIRED>
-<!ELEMENT Table EMPTY> <!-- Multiple.  Attributes have values -->
-<!ATTLIST Table Entry CDATA #REQUIRED>
-<!ATTLIST Table SampleCount CDATA #REQUIRED>
-<!ATTLIST Table SampleDelta CDATA #REQUIRED>
-
-<!-- Within SampleTable: -->
-<!ELEMENT SampleToChunk (FirstChunk,SamplesPerChunk,SampleDescrIndex)>
-<!ATTLIST SampleToChunk BoxType CDATA #FIXED "stsc">
-<!ATTLIST SampleToChunk Count CDATA #REQUIRED>
-<!ELEMENT FirstChunk (#PCDATA)>
-<!ELEMENT SamplesPerChunk (#PCDATA)>
-<!ELEMENT SampleDescrIndex (#PCDATA)>
-<!ELEMENT SampleSize (Sample_Size,Sample_Count,EntrySize*)>
-<!ATTLIST SampleSize BoxType CDATA #FIXED "stsz">
-<!ELEMENT Sample_Size (#PCDATA)>
-<!ELEMENT Sample_Count (#PCDATA)>
-<!ELEMENT EntrySize (#PCDATA)>  <!-- appears multiply, but only with mj2_to_metadata option -t -->
-<!ATTLIST EntrySize Num CDATA #REQUIRED>
-<!ELEMENT ChunkOffset (EntryCount, Chunk_Offset*)>
-<!ATTLIST ChunkOffset BoxType CDATA #FIXED "stco">
-<!ELEMENT EntryCount (#PCDATA)>
-<!ELEMENT Chunk_Offset (#PCDATA)>  <!-- appears multiply, but only with mj2_to_metadata option -t -->
-<!ATTLIST Chunk_Offset Num CDATA #REQUIRED>
-<!-- </SampleTable> </MediaInfoContainer> </Media> -->
-
-<!-- TO DO: optional UserData 'udat', can contain multiple Copyright 'cprt' -->
-
-
-<!-- Optional, and only for Visual Track: given individual frame -->
-<!ELEMENT JP2_Frame (MainHeader, TilePartHeaders)>
-<!ATTLIST JP2_Frame Num CDATA #REQUIRED>
-<!ELEMENT MainHeader (StartOfCodestream,ImageAndFileSize,CodingStyleDefault,QuantizationDefault,QuantizationComponent*,RegionOfInterest?,ProgressionOrderChange*)>
-<!ELEMENT StartOfCodestream EMPTY>
-<!ATTLIST StartOfCodestream Marker CDATA #FIXED "SOC">
-<!ELEMENT ImageAndFileSize (Xsiz,Ysiz,XOsiz,YOsiz,XTsiz,YTsiz,XTOsiz,YTOsiz,Csiz,Component+)>
-<!ATTLIST ImageAndFileSize Marker CDATA #FIXED "SIZ">
-<!ELEMENT Xsiz (#PCDATA)>
-<!ELEMENT Ysiz (#PCDATA)>  <!-- Xsiz, Ysiz is the size of the reference grid. -->
-<!ELEMENT XOsiz (#PCDATA)>
-<!ELEMENT YOsiz (#PCDATA)>  <!-- XOsiz, YOsiz are offsets from grid origin to image origin. -->
-<!ELEMENT XTsiz (#PCDATA)>
-<!ELEMENT YTsiz (#PCDATA)>  <!-- XTsiz, YTsiz is the size of one tile with respect to the grid. -->
-<!ELEMENT XTOsiz (#PCDATA)>
-<!ELEMENT YTOsiz (#PCDATA)> <!-- XTOsiz, YTOsiz are offsets from grid origin to first tile origin. -->
-<!ELEMENT Csiz (#PCDATA)>  <!-- Csiz is the number of components in the image. -->
-<!-- For image components next -->
-<!ELEMENT Component (Ssiz,XRsiz,YRsiz,WidthOfData,HeightOfData)>
-<!ATTLIST Component Num CDATA #REQUIRED>
-<!ELEMENT Ssiz (AsHex | (AsHex,Signed,PrecisionInBits) | (Signed,PrecisionInBits))>
-<!-- Signed already defined -->
-<!ELEMENT PrecisionInBits (#PCDATA)>  <!--   Bits per pixel (bpp) or pixel depth. -->
-<!ELEMENT XRsiz (#PCDATA)>
-<!ELEMENT YRsiz (#PCDATA)> <!-- XRsiz, YRsiz denote pixel-sample-spacing on the grid, per Part I Annex B. -->
-<!ELEMENT WidthOfData (#PCDATA)>
-<!ELEMENT HeightOfData (#PCDATA)>  <!-- WidthOfData and HeightOfData are calculated values, e.g.: w = roundup((Xsiz - XOsiz)/ XRsiz) -->
-<!-- -->
-<!ELEMENT CodingStyleDefault (Scod,SGcod,SPcod)>
-<!ATTLIST CodingStyleDefault Marker CDATA #FIXED "COD">
-<!ELEMENT Scod (#PCDATA)>
-          <!-- For Scod, specific bits mean (where bit 0 is lowest or rightmost): -->
-          <!-- bit 0: Defines entropy coder precincts -->
-          <!--        0 = (PPx=15, PPy=15); 1 = precincts defined below. -->
-          <!-- bit 1: 1 = SOP marker may be used; 0 = not. -->
-          <!-- bit 2: 1 = EPH marker may be used; 0 = not. -->
-<!ELEMENT SGcod (ProgressionOrder,NumberOfLayers,MultipleComponentTransformation)>
-<!ELEMENT ProgressionOrder (#PCDATA)>
-            <!-- Defined Progression Order Values are: -->
-            <!-- 0 = LRCP; 1 = RLCP; 2 = RPCL; 3 = PCRL; 4 = CPRL -->
-            <!-- where L = "layer", R = "resolution level", C = "component", P = "position". -->
-<!ELEMENT NumberOfLayers (#PCDATA)>
-<!ELEMENT MultipleComponentTransformation (#PCDATA)>
-            <!-- For MCT, 0 = none, 1 = transform first 3 components for efficiency, per Part I Annex G -->
-<!ELEMENT SPcod (NumberOfDecompositionLevels,CodeblockWidth,CodeblockHeight,CodeblockStyle,Transformation)>
-<!ELEMENT NumberOfDecompositionLevels (#PCDATA)>
-<!ELEMENT CodeblockWidth (#PCDATA)>   <!-- CBW and CBH are non-negative, and summed cannot exceed 8 -->
-<!ELEMENT CodeblockHeight (#PCDATA)>  <!-- Codeblock dimension is 2^(value + 2) -->
-<!ELEMENT CodeblockStyle (#PCDATA)>
-            <!-- For CodeblockStyle, bits mean (with value 1=feature on, 0=off): -->
-            <!-- bit 0: Selective arithmetic coding bypass. -->
-            <!-- bit 1: Reset context probabilities on coding pass boundaries. -->
-            <!-- bit 2: Termination on each coding pass. -->
-            <!-- bit 3: Vertically causal context. -->
-            <!-- bit 4: Predictable termination. -->
-            <!-- bit 5: Segmentation symbols are used. -->
-<!ELEMENT Transformation (#PCDATA)> <!-- For Transformation, 0="9-7 irreversible filter", 1="5-3 reversible filter" -->
-        <!-- mj2_to_metadata implementation always reports component[0] as using default COD, -->
-        <!-- and any other component, with main-header style values different from [0], as COC. -->
-<!ELEMENT QuantizationDefault (Sqcd,SPqcd)>
-<!ATTLIST QuantizationDefault Marker CDATA #FIXED "QCD">
-<!ELEMENT Sqcd (AsHex | (AsHex,QuantizationStyle,NumberOfGuardBits) | (QuantizationStyle,NumberOfGuardBits))>
-<!ELEMENT QuantizationStyle (#PCDATA)>  <!-- Default quantization style for all components. -->
-            <!-- Quantization style (in Sqcd's low 5 bits) may be: -->
-            <!--   0 = No quantization. SPqcd size = 8 bits-->
-            <!--   1 = Scalar derived (values signaled for N(L)LL subband only). Use Eq. E.5. SPqcd size = 16. -->
-            <!--   2 = Scalar expounded (values signaled for each subband). SPqcd size = 16. -->
-<!ELEMENT NumberOfGuardBits (#PCDATA)>  <!-- 0-7 guard bits allowed (stored in Sqcd's high 3 bits) -->
-<!ELEMENT SPqcd (ReversibleStepSizeValue | QuantizationStepSizeValues )>  <!-- TO DO: Irreversible choices -->
-<!ELEMENT ReversibleStepSizeValue (DynamicRangeExponent+)>
-            <!-- Current mj2_to_metadata implementation dumps entire internal table, -->
-            <!-- until an exponent with zero value is reached. -->
-            <!-- Exponent epsilon(b) of reversible dynamic range. -->
-            <!-- Hex value is as stored, in high-order 5 bits. -->
-<!ELEMENT DynamicRangeExponent (AsHex | (AsHex, AsDecimal) | AsDecimal)>
-<!ATTLIST DynamicRangeExponent Subband CDATA #REQUIRED>
-<!ELEMENT QuantizationStepSizeValues (QuantizationValues+, CalculatedExponent*)>  <!-- Calculated exponents iff only subband 0 reported -->
-<!ELEMENT QuantizationValues (AsHex | (AsHex,Exponent,Mantissa) | (Exponent,Mantissa))>
-<!ATTLIST QuantizationValues Subband CDATA #REQUIRED>
-<!ELEMENT Exponent (#PCDATA)>
-<!ELEMENT Mantissa (#PCDATA)>
-<!ELEMENT CalculatedExponent (#PCDATA)>
-<!ATTLIST CalculatedExponent Subband CDATA #REQUIRED>
-<!-- /QuantizationDefault -->
-        <!-- mj2_to_metadata implementation always reports component[0] as using default QCD, -->
-        <!-- and any other component, with main-header quantization values different from [0], as QCC. -->
-<!ELEMENT QuantizationComponent (Sqcc,SPqcc)>
-<!ATTLIST QuantizationComponent Marker CDATA #FIXED "QCC">
-<!ATTLIST QuantizationComponent Component CDATA #REQUIRED>
-<!ELEMENT Sqcc (AsHex | (AsHex,QuantizationStyle,NumberOfGuardBits) | (QuantizationStyle,NumberOfGuardBits))>
-<!ELEMENT SPqcc (ReversibleStepSizeValue | QuantizationStepSizeValues )>  <!-- TO DO: Irreversible choices -->
-<!-- /QuantizationComponent -->
-<!-- Don't know if MJ2 files can have regions of interest.  Assume yes -->
-<!ELEMENT RegionOfInterest (Srgn,Crgn,Sprgn)> <!-- Optional in main header, at most 1 per component -->
-<!ATTLIST RegionOfInterest Marker CDATA #FIXED "RGN">
-<!ELEMENT Srgn (#PCDATA)>  <!-- ROI style.  Only style=0 defined: Implicit ROI (max. shift) -->
-<!ELEMENT Crgn (#PCDATA)>  <!-- Zero-based component number. -->
-<!ELEMENT SPrgn (#PCDATA)> <!-- Implicit ROI shift, i.e., binary shifting of ROI coefficients above background. -->
-<!-- </RegionOfInterest> -->
-<!ELEMENT ProgressionOrderChange (Progression+)> <!-- Optional in main header, at most 1 per component (but impl allows more?) -->
-<!ATTLIST ProgressionOrderChange Marker CDATA #REQUIRED>
-<!ELEMENT Progression (RSpoc,CSpoc,LYEpoc,REpoc,CEpoc,Ppoc)>
-<!ATTLIST Progression Num CDATA #REQUIRED>
-<!ELEMENT RSpoc (#PCDATA)> <!-- Resolution level index (inclusive) for progression start. Range: 0 to 33 -->
-<!ELEMENT CSpoc (#PCDATA)> <!-- Component index (inclusive) for progression start. -->
-<!ELEMENT LYEpoc (#PCDATA)> <!-- Layer index (exclusive) for progression end. -->
-<!ELEMENT REpoc (#PCDATA)> <!-- Resolution level index (exclusive) for progression end. Range: RSpoc to 33 -->
-<!ELEMENT CEpoc (#PCDATA)> <!-- Component index (exclusive) for progression end.  Minimum: CSpoc -->
-<!ELEMENT Ppoc (#PCDATA)> <!-- Defined Progression Order Values are: -->
-                          <!-- 0 = LRCP; 1 = RLCP; 2 = RPCL; 3 = PCRL; 4 = CPRL -->
-                          <!-- where L = "layer", R = "resolution level", C = "component", P = "position". -->
-<!-- </Progression>, </ProgressionOrderChange -->
-<!-- /MainHeader -->
-<!ELEMENT TilePartHeaders (TilePartHeader+)>
-<!ATTLIST TilePartHeaders Count CDATA #REQUIRED>
-<!ELEMENT TilePartHeader (StartOfTilePart,CodingStyleDefault,QuantizationDefault,QuantizationComponent*,RegionOfInterest?,ProgressionOrderChange*,StartOfData)>
-<!ATTLIST TilePartHeader Num CDATA #REQUIRED>
-<!ATTLIST TilePartHeader ID CDATA #REQUIRED>
-<!ELEMENT StartOfTilePart EMPTY>
-<!ATTLIST StartOfTilePart Marker CDATA #FIXED "SOT">
-<!-- CodingStyleDefault, QuantizationDefault, QuantizationComponent already defined -->
-        <!-- mj2_to_metadata implementation always reports component[0] as using default QCD, -->
-        <!-- and any other component, with tile-part-header quantization values different from [0], as QCC. -->
-<!ELEMENT StartOfData EMPTY> <!-- always empty for now -->
-<!ATTLIST StartOfData Marker CDATA #FIXED "SOD">
-          <!-- Tile-part bitstream, not shown, follows tile-part header and SOD marker. -->
-<!-- /TilePartHeader, /TilePartHeaders, /JP2_Frame -->
-<!-- </Track> -->
-
-<!-- to come:
-  <MovieExtends mvek> // possibly not in Simple Profile
-  <UserDataBox udat> contains <CopyrightBox cprt>
-  -->
-<!-- /MovieBox -->
-<!-- To come:
-  <mdat>
-  <moof>  // probably not in Simple Profile
-  <free>
-  <skip>
-  -->
-<!-- </MJ2_File> -->
\ No newline at end of file
diff --git a/src/bin/mj2/mj2_to_metadata.h b/src/bin/mj2/mj2_to_metadata.h
deleted file mode 100644 (file)
index f4c3491..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-/* mj2_to_metadata.h */
-/* Dump MJ2, JP2 metadata (partial so far) to xml file */
-/* Contributed to Open JPEG by Glenn Pearson, U.S. National Library of Medicine */
-
-#define BOOL int
-#define FALSE 0
-#define TRUE 1
-
-#include "meta_out.h"
diff --git a/src/bin/mj2/mj2_to_metadata.sln b/src/bin/mj2/mj2_to_metadata.sln
deleted file mode 100644 (file)
index 32b926d..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-\r
-Microsoft Visual Studio Solution File, Format Version 9.00\r
-# Visual Studio 2005\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mj2_to_metadata", "mj2_to_metadata.vcproj", "{69BE42AB-E7CE-4DA1-BBD2-39FEA2C91E0B}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {0B1B7713-35B6-40A7-9BFF-A7D0EB06A8BD} = {0B1B7713-35B6-40A7-9BFF-A7D0EB06A8BD}\r
-       EndProjectSection\r
-EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LibOpenJPEG", "..\LibOpenJPEG.vcproj", "{0B1B7713-35B6-40A7-9BFF-A7D0EB06A8BD}"\r
-EndProject\r
-Global\r
-       GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
-               Debug|Win32 = Debug|Win32\r
-               Release|Win32 = Release|Win32\r
-       EndGlobalSection\r
-       GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
-               {69BE42AB-E7CE-4DA1-BBD2-39FEA2C91E0B}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {69BE42AB-E7CE-4DA1-BBD2-39FEA2C91E0B}.Debug|Win32.Build.0 = Debug|Win32\r
-               {69BE42AB-E7CE-4DA1-BBD2-39FEA2C91E0B}.Release|Win32.ActiveCfg = Release|Win32\r
-               {69BE42AB-E7CE-4DA1-BBD2-39FEA2C91E0B}.Release|Win32.Build.0 = Release|Win32\r
-               {0B1B7713-35B6-40A7-9BFF-A7D0EB06A8BD}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {0B1B7713-35B6-40A7-9BFF-A7D0EB06A8BD}.Debug|Win32.Build.0 = Debug|Win32\r
-               {0B1B7713-35B6-40A7-9BFF-A7D0EB06A8BD}.Release|Win32.ActiveCfg = Release|Win32\r
-               {0B1B7713-35B6-40A7-9BFF-A7D0EB06A8BD}.Release|Win32.Build.0 = Release|Win32\r
-       EndGlobalSection\r
-       GlobalSection(SolutionProperties) = preSolution\r
-               HideSolutionNode = FALSE\r
-       EndGlobalSection\r
-EndGlobal\r
diff --git a/src/bin/mj2/mj2_to_metadata.vcproj b/src/bin/mj2/mj2_to_metadata.vcproj
deleted file mode 100644 (file)
index b280bfe..0000000
+++ /dev/null
@@ -1,349 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>\r
-<VisualStudioProject\r
-       ProjectType="Visual C++"\r
-       Version="8,00"\r
-       Name="mj2_to_metadata"\r
-       ProjectGUID="{69BE42AB-E7CE-4DA1-BBD2-39FEA2C91E0B}"\r
-       >\r
-       <Platforms>\r
-               <Platform\r
-                       Name="Win32"\r
-               />\r
-       </Platforms>\r
-       <ToolFiles>\r
-       </ToolFiles>\r
-       <Configurations>\r
-               <Configuration\r
-                       Name="Debug|Win32"\r
-                       OutputDirectory=".\mj2_to_metadata___Win32_Debug0"\r
-                       IntermediateDirectory=".\mj2_to_metadata___Win32_Debug0"\r
-                       ConfigurationType="1"\r
-                       InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"\r
-                       UseOfMFC="0"\r
-                       ATLMinimizesCRunTimeLibraryUsage="false"\r
-                       CharacterSet="2"\r
-                       >\r
-                       <Tool\r
-                               Name="VCPreBuildEventTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCCustomBuildTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCXMLDataGeneratorTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCWebServiceProxyGeneratorTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCMIDLTool"\r
-                               TypeLibraryName=".\mj2_to_metadata___Win32_Debug0/mj2_to_metadata.tlb"\r
-                               HeaderFileName=""\r
-                       />\r
-                       <Tool\r
-                               Name="VCCLCompilerTool"\r
-                               Optimization="0"\r
-                               AdditionalIncludeDirectories="../libopenjpeg"\r
-                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;OPJ_STATIC;_CRT_SECURE_NO_DEPRECATE"\r
-                               MinimalRebuild="true"\r
-                               BasicRuntimeChecks="3"\r
-                               RuntimeLibrary="1"\r
-                               PrecompiledHeaderFile=".\mj2_to_metadata___Win32_Debug0/mj2_to_metadata.pch"\r
-                               AssemblerListingLocation=".\mj2_to_metadata___Win32_Debug0/"\r
-                               ObjectFile=".\mj2_to_metadata___Win32_Debug0/"\r
-                               ProgramDataBaseFileName=".\mj2_to_metadata___Win32_Debug0/"\r
-                               BrowseInformation="1"\r
-                               WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
-                               DebugInformationFormat="4"\r
-                       />\r
-                       <Tool\r
-                               Name="VCManagedResourceCompilerTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCResourceCompilerTool"\r
-                               PreprocessorDefinitions="_DEBUG"\r
-                               Culture="2057"\r
-                       />\r
-                       <Tool\r
-                               Name="VCPreLinkEventTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCLinkerTool"\r
-                               OutputFile=".\mj2_to_metadata___Win32_Debug0/mj2_to_metadata.exe"\r
-                               LinkIncremental="2"\r
-                               SuppressStartupBanner="true"\r
-                               IgnoreDefaultLibraryNames="LIBCMT"\r
-                               GenerateDebugInformation="true"\r
-                               ProgramDatabaseFile=".\mj2_to_metadata___Win32_Debug0/mj2_to_metadata.pdb"\r
-                               SubSystem="1"\r
-                               TargetMachine="1"\r
-                       />\r
-                       <Tool\r
-                               Name="VCALinkTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCManifestTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCXDCMakeTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile=".\mj2_to_metadata___Win32_Debug0/mj2_to_metadata.bsc"\r
-                       />\r
-                       <Tool\r
-                               Name="VCFxCopTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCAppVerifierTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCWebDeploymentTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCPostBuildEventTool"\r
-                       />\r
-               </Configuration>\r
-               <Configuration\r
-                       Name="Release|Win32"\r
-                       OutputDirectory=".\Release"\r
-                       IntermediateDirectory=".\Release"\r
-                       ConfigurationType="1"\r
-                       InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"\r
-                       UseOfMFC="0"\r
-                       ATLMinimizesCRunTimeLibraryUsage="false"\r
-                       CharacterSet="2"\r
-                       >\r
-                       <Tool\r
-                               Name="VCPreBuildEventTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCCustomBuildTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCXMLDataGeneratorTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCWebServiceProxyGeneratorTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCMIDLTool"\r
-                               TypeLibraryName=".\Release/mj2_to_metadata.tlb"\r
-                               HeaderFileName=""\r
-                       />\r
-                       <Tool\r
-                               Name="VCCLCompilerTool"\r
-                               Optimization="2"\r
-                               InlineFunctionExpansion="1"\r
-                               AdditionalIncludeDirectories="../libopenjpeg"\r
-                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;OPJ_STATIC;_CRT_SECURE_NO_DEPRECATE"\r
-                               StringPooling="true"\r
-                               RuntimeLibrary="0"\r
-                               EnableFunctionLevelLinking="true"\r
-                               PrecompiledHeaderFile=".\Release/mj2_to_metadata.pch"\r
-                               AssemblerListingLocation=".\Release/"\r
-                               ObjectFile=".\Release/"\r
-                               ProgramDataBaseFileName=".\Release/"\r
-                               WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
-                       />\r
-                       <Tool\r
-                               Name="VCManagedResourceCompilerTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCResourceCompilerTool"\r
-                               PreprocessorDefinitions="NDEBUG"\r
-                               Culture="2057"\r
-                       />\r
-                       <Tool\r
-                               Name="VCPreLinkEventTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCLinkerTool"\r
-                               OutputFile=".\Release/mj2_to_metadata.exe"\r
-                               LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
-                               IgnoreDefaultLibraryNames="libcmtd"\r
-                               ProgramDatabaseFile=".\Release/mj2_to_metadata.pdb"\r
-                               SubSystem="1"\r
-                               TargetMachine="1"\r
-                       />\r
-                       <Tool\r
-                               Name="VCALinkTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCManifestTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCXDCMakeTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile=".\Release/mj2_to_metadata.bsc"\r
-                       />\r
-                       <Tool\r
-                               Name="VCFxCopTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCAppVerifierTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCWebDeploymentTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCPostBuildEventTool"\r
-                       />\r
-               </Configuration>\r
-       </Configurations>\r
-       <References>\r
-       </References>\r
-       <Files>\r
-               <Filter\r
-                       Name="MJ2"\r
-                       >\r
-                       <Filter\r
-                               Name="MJ2 Header Files"\r
-                               >\r
-                               <File\r
-                                       RelativePath="compat\opj_getopt.h"\r
-                                       >\r
-                               </File>\r
-                               <File\r
-                                       RelativePath="meta_out.h"\r
-                                       >\r
-                               </File>\r
-                               <File\r
-                                       RelativePath="mj2.h"\r
-                                       >\r
-                               </File>\r
-                               <File\r
-                                       RelativePath="mj2_convert.h"\r
-                                       >\r
-                               </File>\r
-                               <File\r
-                                       RelativePath="mj2_to_metadata.h"\r
-                                       >\r
-                               </File>\r
-                       </Filter>\r
-                       <Filter\r
-                               Name="MJ2 Source Files"\r
-                               >\r
-                               <File\r
-                                       RelativePath="compat\opj_getopt.c"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       AdditionalIncludeDirectories=""\r
-                                                       PreprocessorDefinitions=""\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       AdditionalIncludeDirectories=""\r
-                                                       PreprocessorDefinitions=""\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath="meta_out.c"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       AdditionalIncludeDirectories=""\r
-                                                       PreprocessorDefinitions=""\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       AdditionalIncludeDirectories=""\r
-                                                       PreprocessorDefinitions=""\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath="mj2.c"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       AdditionalIncludeDirectories=""\r
-                                                       PreprocessorDefinitions=""\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       AdditionalIncludeDirectories=""\r
-                                                       PreprocessorDefinitions=""\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath="mj2_convert.c"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       AdditionalIncludeDirectories=""\r
-                                                       PreprocessorDefinitions=""\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       AdditionalIncludeDirectories=""\r
-                                                       PreprocessorDefinitions=""\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath="mj2_to_metadata.c"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       AdditionalIncludeDirectories=""\r
-                                                       PreprocessorDefinitions=""\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       AdditionalIncludeDirectories=""\r
-                                                       PreprocessorDefinitions=""\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                       </Filter>\r
-               </Filter>\r
-       </Files>\r
-       <Globals>\r
-       </Globals>\r
-</VisualStudioProject>\r
diff --git a/src/bin/mj2/mj2_to_metadata_Notes.doc b/src/bin/mj2/mj2_to_metadata_Notes.doc
deleted file mode 100644 (file)
index 05ccec2..0000000
Binary files a/src/bin/mj2/mj2_to_metadata_Notes.doc and /dev/null differ
diff --git a/src/bin/mj2/opj_mj2_compress.c b/src/bin/mj2/opj_mj2_compress.c
deleted file mode 100644 (file)
index 8386ba0..0000000
+++ /dev/null
@@ -1,853 +0,0 @@
-/*
-* Copyright (c) 2003-2004, Francois-Olivier Devaux
-* Copyright (c) 2002-2004,  Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
-* All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions
-* are met:
-* 1. Redistributions of source code must retain the above copyright
-*    notice, this list of conditions and the following disclaimer.
-* 2. Redistributions in binary form must reproduce the above copyright
-*    notice, this list of conditions and the following disclaimer in the
-*    documentation and/or other materials provided with the distribution.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-* ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-* POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "opj_apps_config.h"
-#include "openjpeg.h"
-#include "j2k_lib.h"
-#include "cio.h"
-#include "j2k.h"
-#include "jp2.h"
-#include "mj2.h"
-#include "mj2_convert.h"
-#include "opj_getopt.h"
-
-/**
-Size of memory first allocated for MOOV box
-*/
-#define TEMP_BUF 10000
-
-
-/* -------------------------------------------------------------------------- */
-
-/**
-sample error callback expecting a FILE* client object
-*/
-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
-*/
-static void warning_callback(const char *msg, void *client_data)
-{
-    FILE *stream = (FILE*)client_data;
-    fprintf(stream, "[WARNING] %s", msg);
-}
-
-/* -------------------------------------------------------------------------- */
-
-
-static void help_display()
-{
-    fprintf(stdout, "HELP for frames_to_mj2\n----\n\n");
-    fprintf(stdout, "- the -h option displays this help information on screen\n\n");
-
-
-    fprintf(stdout, "List of parameters for the MJ2 encoder:\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "REMARKS:\n");
-    fprintf(stdout, "---------\n");
-    fprintf(stdout, "\n");
-    fprintf
-    (stdout, "The markers written to the main_header are : SOC SIZ COD QCD COM.\n");
-    fprintf
-    (stdout, "COD and QCD never appear in the tile_header.\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "By default:\n");
-    fprintf(stdout, "------------\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, " * Lossless\n");
-    fprintf(stdout, " * 1 tile\n");
-    fprintf(stdout, " * Size of precinct : 2^15 x 2^15 (means 1 precinct)\n");
-    fprintf(stdout, " * Size of code-block : 64 x 64\n");
-    fprintf(stdout, " * Number of resolutions: 6\n");
-    fprintf(stdout, " * No SOP marker in the codestream\n");
-    fprintf(stdout, " * No EPH marker in the codestream\n");
-    fprintf(stdout, " * No sub-sampling in x or y direction\n");
-    fprintf(stdout, " * No mode switch activated\n");
-    fprintf(stdout, " * Progression order: LRCP\n");
-    fprintf(stdout, " * No index file\n");
-    fprintf(stdout, " * No ROI upshifted\n");
-    fprintf(stdout, " * No offset of the origin of the image\n");
-    fprintf(stdout, " * No offset of the origin of the tiles\n");
-    fprintf(stdout, " * Reversible DWT 5-3\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "Parameters:\n");
-    fprintf(stdout, "------------\n");
-    fprintf(stdout, "\n");
-    fprintf
-    (stdout, "Required Parameters (except with -h):\n");
-    fprintf
-    (stdout, "-i : source file      (-i source.yuv) \n");
-    fprintf
-    (stdout, "-o : destination file (-o dest.mj2) \n");
-    fprintf
-    (stdout, "Optional Parameters:\n");
-    fprintf(stdout, "-h : display the help information \n");
-    fprintf(stdout,
-            "-r : different compression ratios for successive layers (-r 20,10,5)\n");
-    fprintf(stdout,
-            "     - The rate specified for each quality level is the desired \n");
-    fprintf(stdout, "       compression factor.\n");
-    fprintf(stdout, "       Example: -r 20,10,1 means quality 1: compress 20x, \n");
-    fprintf(stdout,
-            "       quality 2: compress 10x and quality 3: compress lossless\n");
-    fprintf(stdout, "       (options -r and -q cannot be used together)\n");
-
-    fprintf(stdout, "-q : different psnr for successive layers (-q 30,40,50) \n");
-    fprintf(stdout, "        (options -r and -q cannot be used together)\n");
-
-    fprintf(stdout, "-n : number of resolutions (-n 3) \n");
-    fprintf(stdout, "-b : size of code block (-b 32,32) \n");
-    fprintf(stdout, "-c : size of precinct (-c 128,128) \n");
-    fprintf(stdout, "-t : size of tile (-t 512,512) \n");
-    fprintf
-    (stdout, "-p : progression order (-p LRCP) [LRCP, RLCP, RPCL, PCRL, CPRL] \n");
-    fprintf
-    (stdout, "-s : subsampling factor (-s 2,2) [-s X,Y] \n");
-    fprintf(stdout, "     Remark: subsampling bigger than 2 can produce error\n");
-    fprintf
-    (stdout, "-S : write SOP marker before each packet \n");
-    fprintf
-    (stdout, "-E : write EPH marker after each header packet \n");
-    fprintf
-    (stdout, "-M : mode switch (-M 3) [1=BYPASS(LAZY) 2=RESET 4=RESTART(TERMALL)\n");
-    fprintf
-    (stdout, "             8=VSC 16=ERTERM(SEGTERM) 32=SEGMARK(SEGSYM)] \n");
-    fprintf
-    (stdout, "             Indicate multiple modes by adding their values. \n");
-    fprintf
-    (stdout, "             Example: RESTART(4) + RESET(2) + SEGMARK(32) = -M 38\n");
-    fprintf
-    (stdout, "-R : c=%%d,U=%%d : quantization indices upshifted \n");
-    fprintf
-    (stdout, "             for component c=%%d [%%d = 0,1,2]\n");
-    fprintf
-    (stdout, "             with a value of U=%%d [0 <= %%d <= 37] (i.e. -ROI:c=0,U=25) \n");
-    fprintf
-    (stdout, "-d : offset of the origin of the image (-d 150,300) \n");
-    fprintf
-    (stdout, "-T : offset of the origin of the tiles (-T 100,75) \n");
-    fprintf(stdout, "-I : use the irreversible DWT 9-7 (-I) \n");
-    fprintf(stdout, "-W : image width, height and the dx and dy subsampling \n");
-    fprintf(stdout, "        of the Cb and Cr components for YUV files \n");
-    fprintf(stdout,
-            "        (default is '352,288,2,2' for CIF format's 352x288 and 4:2:0)\n");
-    fprintf(stdout, "-F : video frame rate (set to 25 by default)\n");
-    fprintf(stdout, "-D : depth, precision in bits [8 .. 16]; default:8\n");
-    fprintf(stdout, "-C : comment\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "IMPORTANT:\n");
-    fprintf(stdout, "-----------\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "The index file has the structure below:\n");
-    fprintf(stdout, "---------------------------------------\n");
-    fprintf(stdout, "\n");
-    fprintf(stdout, "Image_height Image_width\n");
-    fprintf(stdout, "progression order\n");
-    fprintf(stdout, "Tiles_size_X Tiles_size_Y\n");
-    fprintf(stdout, "Components_nb\n");
-    fprintf(stdout, "Layers_nb\n");
-    fprintf(stdout, "decomposition_levels\n");
-    fprintf(stdout, "[Precincts_size_X_res_Nr Precincts_size_Y_res_Nr]...\n");
-    fprintf(stdout, "   [Precincts_size_X_res_0 Precincts_size_Y_res_0]\n");
-    fprintf(stdout, "Main_header_end_position\n");
-    fprintf(stdout, "Codestream_size\n");
-    fprintf(stdout,
-            "Tile_0 start_pos end_Theader end_pos TotalDisto NumPix MaxMSE\n");
-    fprintf(stdout,
-            "Tile_1   ''           ''        ''        ''       ''    ''\n");
-    fprintf(stdout, "...\n");
-    fprintf(stdout,
-            "Tile_Nt   ''           ''        ''        ''       ''    ''\n");
-    fprintf(stdout,
-            "Tpacket_0 Tile layer res. comp. prec. start_pos end_pos disto\n");
-    fprintf(stdout, "...\n");
-    fprintf(stdout,
-            "Tpacket_Np ''   ''    ''   ''    ''       ''       ''     ''\n");
-
-    fprintf(stdout, "MaxDisto\n");
-
-    fprintf(stdout, "TotalDisto\n\n");
-}
-
-static OPJ_PROG_ORDER give_progression(const char progression[5])
-{
-    if (progression[0] == 'L' && progression[1] == 'R'
-            && progression[2] == 'C' && progression[3] == 'P') {
-        return LRCP;
-    } else {
-        if (progression[0] == 'R' && progression[1] == 'L'
-                && progression[2] == 'C' && progression[3] == 'P') {
-            return RLCP;
-        } else {
-            if (progression[0] == 'R' && progression[1] == 'P'
-                    && progression[2] == 'C' && progression[3] == 'L') {
-                return RPCL;
-            } else {
-                if (progression[0] == 'P' && progression[1] == 'C'
-                        && progression[2] == 'R' && progression[3] == 'L') {
-                    return PCRL;
-                } else {
-                    if (progression[0] == 'C' && progression[1] == 'P'
-                            && progression[2] == 'R' && progression[3] == 'L') {
-                        return CPRL;
-                    } else {
-                        return PROG_UNKNOWN;
-                    }
-                }
-            }
-        }
-    }
-}
-
-
-
-
-int main(int argc, char **argv)
-{
-    mj2_cparameters_t mj2_parameters;   /* MJ2 compression parameters */
-    opj_cparameters_t *j2k_parameters;  /* J2K compression parameters */
-    opj_event_mgr_t event_mgr;      /* event manager */
-    opj_cio_t *cio;
-    int value;
-    opj_mj2_t *movie;
-    opj_image_t *img;
-    int i, j;
-    char *s, S1, S2, S3;
-    unsigned char *buf;
-    int x1, y1,  len;
-    long mdat_initpos, offset;
-    FILE *mj2file;
-    int sampleno;
-    opj_cinfo_t* cinfo;
-    opj_bool bSuccess;
-    int numframes;
-    int prec = 8;/* DEFAULT */
-    double total_time = 0;
-
-    memset(&mj2_parameters, 0, sizeof(mj2_cparameters_t));
-    /* default value */
-    /* ------------- */
-    mj2_parameters.w = 352;         /* CIF default value*/
-    mj2_parameters.h = 288;         /* CIF default value*/
-    mj2_parameters.CbCr_subsampling_dx = 2; /* CIF default value*/
-    mj2_parameters.CbCr_subsampling_dy = 2; /* CIF default value*/
-    mj2_parameters.frame_rate = 25;
-    mj2_parameters.prec = 8; /* DEFAULT */
-    mj2_parameters.enumcs = ENUMCS_SYCC; /* FIXME: ENUMCS_YUV420 */
-    mj2_parameters.meth = 1; /* enumerated color space */
-
-    /*
-        configure the event callbacks (not required)
-        setting of each callback is optional
-    */
-    memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
-    event_mgr.error_handler = error_callback;
-    event_mgr.warning_handler = warning_callback;
-    event_mgr.info_handler = NULL;
-
-    /* set J2K encoding parameters to default values */
-    opj_set_default_encoder_parameters(&mj2_parameters.j2k_parameters);
-    j2k_parameters = &mj2_parameters.j2k_parameters;
-
-    /* Create comment for codestream */
-    if (j2k_parameters->cp_comment == NULL) {
-        const char comment[] = "Created by OpenJPEG version ";
-        const size_t clen = strlen(comment);
-        const char *version = opj_version();
-        j2k_parameters->cp_comment = (char*)malloc(clen + strlen(version) + 1);
-        sprintf(j2k_parameters->cp_comment, "%s%s", comment, version);
-    }
-
-    while (1) {
-        int c = opj_getopt(argc, argv,
-                           "i:o:r:q:f:t:n:c:b:p:s:d:P:S:E:M:R:T:C:I:W:F:D:h");
-        if (c == -1) {
-            break;
-        }
-        switch (c) {
-        case 'i': {         /* IN fill */
-            char *infile = opj_optarg;
-            s = opj_optarg;
-            while (*s) {
-                s++;
-            }
-            s--;
-            S3 = *s;
-            s--;
-            S2 = *s;
-            s--;
-            S1 = *s;
-
-            if ((S1 == 'y' && S2 == 'u' && S3 == 'v')
-                    || (S1 == 'Y' && S2 == 'U' && S3 == 'V')) {
-                mj2_parameters.decod_format = YUV_DFMT;
-            } else {
-                fprintf(stderr,
-                        "!! Unrecognized format for infile : %c%c%c [accept only *.yuv] !!\n\n",
-                        S1, S2, S3);
-                return 1;
-            }
-            strncpy(mj2_parameters.infile, infile, sizeof(mj2_parameters.infile) - 1);
-        }
-        break;
-        /* ----------------------------------------------------- */
-        case 'o': {         /* OUT fill */
-            char *outfile = opj_optarg;
-            while (*outfile) {
-                outfile++;
-            }
-            outfile--;
-            S3 = *outfile;
-            outfile--;
-            S2 = *outfile;
-            outfile--;
-            S1 = *outfile;
-
-            outfile = opj_optarg;
-
-            if ((S1 == 'm' && S2 == 'j' && S3 == '2')
-                    || (S1 == 'M' && S2 == 'J' && S3 == '2')) {
-                mj2_parameters.cod_format = MJ2_CFMT;
-            } else {
-                fprintf(stderr,
-                        "Unknown output format image *.%c%c%c [only *.mj2]!! \n",
-                        S1, S2, S3);
-                return 1;
-            }
-            strncpy(mj2_parameters.outfile, outfile, sizeof(mj2_parameters.outfile) - 1);
-        }
-        break;
-        /* ----------------------------------------------------- */
-        case 'r': {         /* rates rates/distorsion */
-            float rate;
-            s = opj_optarg;
-            while (sscanf(s, "%f", &rate) == 1) {
-                j2k_parameters->tcp_rates[j2k_parameters->tcp_numlayers] = rate * 2;
-                j2k_parameters->tcp_numlayers++;
-                while (*s && *s != ',') {
-                    s++;
-                }
-                if (!*s) {
-                    break;
-                }
-                s++;
-            }
-            j2k_parameters->cp_disto_alloc = 1;
-        }
-        break;
-        /* ----------------------------------------------------- */
-        case 'q':           /* add fixed_quality */
-            s = opj_optarg;
-            while (sscanf(s, "%f",
-                          &j2k_parameters->tcp_distoratio[j2k_parameters->tcp_numlayers]) == 1) {
-                j2k_parameters->tcp_numlayers++;
-                while (*s && *s != ',') {
-                    s++;
-                }
-                if (!*s) {
-                    break;
-                }
-                s++;
-            }
-            j2k_parameters->cp_fixed_quality = 1;
-            break;
-        /* dda */
-        /* ----------------------------------------------------- */
-        case 'f': {         /* mod fixed_quality (before : -q) */
-            int *row = NULL, *col = NULL;
-            int numlayers = 0, numresolution = 0, matrix_width = 0;
-
-            s = opj_optarg;
-            sscanf(s, "%d", &numlayers);
-            s++;
-            if (numlayers > 9) {
-                s++;
-            }
-
-            j2k_parameters->tcp_numlayers = numlayers;
-            numresolution = j2k_parameters->numresolution;
-            matrix_width = numresolution * 3;
-            j2k_parameters->cp_matrice = (int *) malloc(numlayers * matrix_width * sizeof(
-                                             int));
-            s = s + 2;
-
-            for (i = 0; i < numlayers; i++) {
-                row = &j2k_parameters->cp_matrice[i * matrix_width];
-                col = row;
-                j2k_parameters->tcp_rates[i] = 1;
-                sscanf(s, "%d,", &col[0]);
-                s += 2;
-                if (col[0] > 9) {
-                    s++;
-                }
-                col[1] = 0;
-                col[2] = 0;
-                for (j = 1; j < numresolution; j++) {
-                    col += 3;
-                    sscanf(s, "%d,%d,%d", &col[0], &col[1], &col[2]);
-                    s += 6;
-                    if (col[0] > 9) {
-                        s++;
-                    }
-                    if (col[1] > 9) {
-                        s++;
-                    }
-                    if (col[2] > 9) {
-                        s++;
-                    }
-                }
-                if (i < numlayers - 1) {
-                    s++;
-                }
-            }
-            j2k_parameters->cp_fixed_alloc = 1;
-        }
-        break;
-        /* ----------------------------------------------------- */
-        case 't':           /* tiles */
-            sscanf(opj_optarg, "%d,%d", &j2k_parameters->cp_tdx, &j2k_parameters->cp_tdy);
-            j2k_parameters->tile_size_on = OPJ_TRUE;
-            break;
-        /* ----------------------------------------------------- */
-        case 'n':           /* resolution */
-            sscanf(opj_optarg, "%d", &j2k_parameters->numresolution);
-            break;
-        /* ----------------------------------------------------- */
-        case 'c': {         /* precinct dimension */
-            char sep;
-            int res_spec = 0;
-
-            char *s = opj_optarg;
-            do {
-                sep = 0;
-                sscanf(s, "[%d,%d]%c", &j2k_parameters->prcw_init[res_spec],
-                       &j2k_parameters->prch_init[res_spec], &sep);
-                j2k_parameters->csty |= 0x01;
-                res_spec++;
-                s = strpbrk(s, "]") + 2;
-            } while (sep == ',');
-            j2k_parameters->res_spec = res_spec;
-        }
-        break;
-
-        /* ----------------------------------------------------- */
-        case 'b': {         /* code-block dimension */
-            int cblockw_init = 0, cblockh_init = 0;
-            sscanf(opj_optarg, "%d,%d", &cblockw_init, &cblockh_init);
-            if (cblockw_init * cblockh_init > 4096 || cblockw_init > 1024
-                    || cblockw_init < 4 || cblockh_init > 1024 || cblockh_init < 4) {
-                fprintf(stderr,
-                        "!! Size of code_block error (option -b) !!\n\nRestriction :\n"
-                        "    * width*height<=4096\n    * 4<=width,height<= 1024\n\n");
-                return 1;
-            }
-            j2k_parameters->cblockw_init = cblockw_init;
-            j2k_parameters->cblockh_init = cblockh_init;
-        }
-        break;
-        /* ----------------------------------------------------- */
-        case 'p': {         /* progression order */
-            char progression[5];
-
-            strncpy(progression, opj_optarg, 5);
-            j2k_parameters->prog_order = give_progression(progression);
-            if (j2k_parameters->prog_order == -1) {
-                fprintf(stderr, "Unrecognized progression order "
-                        "[LRCP, RLCP, RPCL, PCRL, CPRL] !!\n");
-                return 1;
-            }
-        }
-        break;
-        /* ----------------------------------------------------- */
-        case 's': {         /* subsampling factor */
-            if (sscanf(opj_optarg, "%d,%d", &j2k_parameters->subsampling_dx,
-                       &j2k_parameters->subsampling_dy) != 2) {
-                fprintf(stderr, "'-s' sub-sampling argument error !  [-s dx,dy]\n");
-                return 1;
-            }
-        }
-        break;
-        /* ----------------------------------------------------- */
-        case 'd': {         /* coordonnate of the reference grid */
-            if (sscanf(opj_optarg, "%d,%d", &j2k_parameters->image_offset_x0,
-                       &j2k_parameters->image_offset_y0) != 2) {
-                fprintf(stderr, "-d 'coordonnate of the reference grid' argument "
-                        "error !! [-d x0,y0]\n");
-                return 1;
-            }
-        }
-        break;
-        /* ----------------------------------------------------- */
-        case 'h':           /* Display an help description */
-            help_display();
-            return 0;
-            break;
-        /* ----------------------------------------------------- */
-        case 'P': {         /* POC */
-            int numpocs = 0;        /* number of progression order change (POC) default 0 */
-            opj_poc_t *POC = NULL;  /* POC : used in case of Progression order change */
-
-            char *s = opj_optarg;
-            POC = j2k_parameters->POC;
-
-            while (sscanf(s, "T%d=%d,%d,%d,%d,%d,%4s", &POC[numpocs].tile,
-                          &POC[numpocs].resno0, &POC[numpocs].compno0,
-                          &POC[numpocs].layno1, &POC[numpocs].resno1,
-                          &POC[numpocs].compno1, POC[numpocs].progorder) == 7) {
-                POC[numpocs].prg1 = give_progression(POC[numpocs].progorder);
-                numpocs++;
-                while (*s && *s != '/') {
-                    s++;
-                }
-                if (!*s) {
-                    break;
-                }
-                s++;
-            }
-            j2k_parameters->numpocs = numpocs;
-        }
-        break;
-        /* ------------------------------------------------------ */
-        case 'S':           /* SOP marker */
-            j2k_parameters->csty |= 0x02;
-            break;
-        /* ------------------------------------------------------ */
-        case 'E':           /* EPH marker */
-            j2k_parameters->csty |= 0x04;
-            break;
-        /* ------------------------------------------------------ */
-        case 'M':           /* Mode switch pas tous au point !! */
-            if (sscanf(opj_optarg, "%d", &value) == 1) {
-                for (i = 0; i <= 5; i++) {
-                    int cache = value & (1 << i);
-                    if (cache) {
-                        j2k_parameters->mode |= (1 << i);
-                    }
-                }
-            }
-            break;
-        /* ------------------------------------------------------ */
-        case 'R': {         /* ROI */
-            if (sscanf(opj_optarg, "OI:c=%d,U=%d", &j2k_parameters->roi_compno,
-                       &j2k_parameters->roi_shift) != 2) {
-                fprintf(stderr, "ROI error !! [-ROI:c='compno',U='shift']\n");
-                return 1;
-            }
-        }
-        break;
-        /* ------------------------------------------------------ */
-        case 'T': {         /* Tile offset */
-            if (sscanf(opj_optarg, "%d,%d", &j2k_parameters->cp_tx0,
-                       &j2k_parameters->cp_ty0) != 2) {
-                fprintf(stderr, "-T 'tile offset' argument error !! [-T X0,Y0]");
-                return 1;
-            }
-        }
-        break;
-        /* ------------------------------------------------------ */
-        case 'C': {         /* Add a comment */
-            j2k_parameters->cp_comment = (char*)malloc(strlen(opj_optarg) + 1);
-            if (j2k_parameters->cp_comment) {
-                strcpy(j2k_parameters->cp_comment, opj_optarg);
-            }
-        }
-        break;
-        /* ------------------------------------------------------ */
-        case 'I': {         /* reversible or not */
-            j2k_parameters->irreversible = 1;
-        }
-        break;
-        /* ------------------------------------------------------ */
-        case 'W':           /* Width and Height and Cb and Cr subsampling in case of YUV format files */
-            if (sscanf
-                    (opj_optarg, "%d,%d,%d,%d", &mj2_parameters.w, &mj2_parameters.h,
-                     &mj2_parameters.CbCr_subsampling_dx,
-                     &mj2_parameters.CbCr_subsampling_dy) != 4) {
-                fprintf(stderr, "-W argument error");
-                return 1;
-            }
-            break;
-        /* ------------------------------------------------------ */
-        case 'F':           /* Video frame rate */
-            if (sscanf(opj_optarg, "%d", &mj2_parameters.frame_rate) != 1) {
-                fprintf(stderr, "-F argument error");
-                return 1;
-            }
-            break;
-        /* ------------------------------------------------------ */
-        case 'D': /* Depth: the precision */
-            if (sscanf(opj_optarg, "%d", &prec) != 1) {
-                prec = 0;
-            }
-            break;
-
-        default:
-            return 1;
-        }
-    }
-
-    /* Error messages */
-    /* -------------- */
-    if (!mj2_parameters.cod_format || !mj2_parameters.decod_format) {
-        fprintf(stderr,
-                "Usage: %s -i yuv-file -o mj2-file (+ options)\n", argv[0]);
-        return 1;
-    }
-    if (prec < 1 || prec > 16) {
-        fprintf(stderr, "Error: Depth %d must be in the range 8 .. 16\n", prec);
-        return 1;
-    }
-    if ((j2k_parameters->cp_disto_alloc || j2k_parameters->cp_fixed_alloc ||
-            j2k_parameters->cp_fixed_quality)
-            && (!(j2k_parameters->cp_disto_alloc ^ j2k_parameters->cp_fixed_alloc ^
-                  j2k_parameters->cp_fixed_quality))) {
-        fprintf(stderr, "Error: options -r -q and -f cannot be used together !!\n");
-        return 1;
-    }               /* mod fixed_quality */
-
-    /* if no rate entered, lossless by default */
-    if (j2k_parameters->tcp_numlayers == 0) {
-        j2k_parameters->tcp_rates[0] = 0;   /* MOD antonin : losslessbug */
-        j2k_parameters->tcp_numlayers++;
-        j2k_parameters->cp_disto_alloc = 1;
-    }
-
-    if ((j2k_parameters->cp_tx0 > j2k_parameters->image_offset_x0) ||
-            (j2k_parameters->cp_ty0 > j2k_parameters->image_offset_y0)) {
-        fprintf(stderr,
-                "Error: Tile offset dimension is unnappropriate --> TX0(%d)<=IMG_X0(%d) TYO(%d)<=IMG_Y0(%d) \n",
-                j2k_parameters->cp_tx0, j2k_parameters->image_offset_x0, j2k_parameters->cp_ty0,
-                j2k_parameters->image_offset_y0);
-        return 1;
-    }
-
-    for (i = 0; i < j2k_parameters->numpocs; i++) {
-        if (j2k_parameters->POC[i].prg == -1) {
-            fprintf(stderr,
-                    "Unrecognized progression order in option -P (POC n %d) [LRCP, RLCP, RPCL, PCRL, CPRL] !!\n",
-                    i + 1);
-        }
-    }
-
-    if (j2k_parameters->cp_tdx > mj2_parameters.Dim[0] ||
-            j2k_parameters->cp_tdy > mj2_parameters.Dim[1]) {
-        fprintf(stderr,
-                "Error: Tile offset dimension is unnappropriate --> TX0(%d)<=IMG_X0(%d) TYO(%d)<=IMG_Y0(%d) \n",
-                j2k_parameters->cp_tdx, mj2_parameters.Dim[0], j2k_parameters->cp_tdy,
-                mj2_parameters.Dim[1]);
-        return 1;
-    }
-
-    /* to respect profile - 0 */
-    /* ---------------------- */
-
-    x1 = !mj2_parameters.Dim[0] ? (mj2_parameters.w - 1) *
-         j2k_parameters->subsampling_dx
-         + 1 : mj2_parameters.Dim[0] + (mj2_parameters.w - 1) *
-         j2k_parameters->subsampling_dx + 1;
-    y1 = !mj2_parameters.Dim[1] ? (mj2_parameters.h - 1) *
-         j2k_parameters->subsampling_dy
-         + 1 : mj2_parameters.Dim[1] + (mj2_parameters.h - 1) *
-         j2k_parameters->subsampling_dy + 1;
-    mj2_parameters.numcomps = 3; /* YUV files only have 3 components */
-
-    mj2_parameters.prec = prec;
-
-    j2k_parameters->tcp_mct = 0;
-
-    mj2file = fopen(mj2_parameters.outfile, "wb");
-
-    if (!mj2file) {
-        fprintf(stderr, "failed to open %s for writing\n", argv[2]);
-        return 1;
-    }
-
-    /* get a MJ2 decompressor handle */
-    cinfo = mj2_create_compress();
-    movie = (opj_mj2_t*)cinfo->mj2_handle;
-
-    /* catch events using our callbacks and give a local context */
-    opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stderr);
-
-    /* setup encoder parameters */
-    mj2_setup_encoder(movie, &mj2_parameters);
-
-    movie->tk[0].num_samples =
-        yuv_num_frames(&movie->tk[0], mj2_parameters.infile);
-
-    if (movie->tk[0].num_samples == 0) {
-        fclose(mj2file);
-        return 1;
-    }
-
-    /* One sample per chunk*/
-    movie->tk[0].chunk = (mj2_chunk_t*)
-                         malloc(movie->tk[0].num_samples * sizeof(mj2_chunk_t));
-    movie->tk[0].sample = (mj2_sample_t*)
-                          malloc(movie->tk[0].num_samples * sizeof(mj2_sample_t));
-
-    if (mj2_init_stdmovie(movie)) {
-        fprintf(stderr, "Error with movie initialization");
-        return 1;
-    }
-
-    /* Writing JP, FTYP and MDAT boxes */
-    /* Assuming that the JP and FTYP boxes won't be longer than 300 bytes:*/
-    buf = (unsigned char*)
-          malloc(300 * sizeof(unsigned char));
-
-    cio = opj_cio_open((opj_common_ptr)movie->cinfo, buf, 300);
-
-    mj2_write_jp(cio);
-    mj2_write_ftyp(movie, cio);
-
-    mdat_initpos = cio_tell(cio);
-    cio_skip(cio, 4);
-
-    cio_write(cio, MJ2_MDAT, 4);
-
-    fwrite(buf, cio_tell(cio), 1, mj2file);
-
-    offset = cio_tell(cio);
-    opj_cio_close(cio);
-    free(buf);
-
-    for (i = 0; i < movie->num_stk + movie->num_htk + movie->num_vtk; i++) {
-        if (movie->tk[i].track_type != 0) {
-            fprintf(stderr, "Unable to write sound or hint tracks\n");
-        } else {
-            mj2_tk_t *tk;
-            int buflen = 0;
-
-            tk = &movie->tk[i];
-            tk->num_chunks = tk->num_samples;
-            numframes = tk->num_samples;
-            tk->depth = prec;
-
-            fprintf(stderr, "Video Track number %d\n", i);
-
-            img = mj2_image_create(tk, j2k_parameters);
-
-            buflen = 2 * (tk->w * tk->h * 8);
-            buf = (unsigned char *) malloc(buflen * sizeof(unsigned char));
-
-            for (sampleno = 0; sampleno < numframes; sampleno++) {
-                double init_time = opj_clock();
-                double elapsed_time;
-
-                if (yuvtoimage(tk, img, sampleno, j2k_parameters,
-                               mj2_parameters.infile)) {
-                    fprintf(stderr, "Error with frame number %d in YUV file\n", sampleno);
-                    return 1;
-                }
-
-                /* setup the encoder parameters using the current image and user parameters */
-                opj_setup_encoder(cinfo, j2k_parameters, img);
-
-                cio = opj_cio_open((opj_common_ptr)movie->cinfo, buf, buflen);
-
-                cio_skip(cio, 4);
-                cio_write(cio, JP2_JP2C, 4);    /* JP2C*/
-
-                /* encode the image */
-                bSuccess = opj_encode(cinfo, cio, img, NULL);
-
-                if (!bSuccess) {
-                    opj_cio_close(cio);
-                    fprintf(stderr, "failed to encode image\n");
-                    return 1;
-                }
-
-                len = cio_tell(cio) - 8;
-                cio_seek(cio, 0);
-                cio_write(cio, len + 8, 4);
-                opj_cio_close(cio);
-
-                tk->sample[sampleno].sample_size = len + 8;
-                tk->sample[sampleno].offset = offset;
-                tk->chunk[sampleno].offset = offset;    /* There is one sample per chunk */
-                fwrite(buf, 1, len + 8, mj2file);
-                offset += len + 8;
-
-                elapsed_time = opj_clock() - init_time;
-                fprintf(stderr, "Frame number %d/%d encoded in %.2f mseconds\n",
-                        sampleno + 1, numframes, elapsed_time * 1000);
-                total_time += elapsed_time;
-            }  /* for(sampleno */
-
-            free(buf);
-            opj_image_destroy(img);
-        }
-    }/* for(i */
-
-    fseek(mj2file, mdat_initpos, SEEK_SET);
-
-    buf = (unsigned char*) malloc(4 * sizeof(unsigned char));
-
-    /* Init a cio to write box length variable in a little endian way */
-    cio = opj_cio_open(NULL, buf, 4);
-    cio_write(cio, offset - mdat_initpos, 4);
-    fwrite(buf, 4, 1, mj2file);
-    fseek(mj2file, 0, SEEK_END);
-    free(buf);
-
-    /* Writing MOOV box */
-    buf = (unsigned char*)
-          malloc((TEMP_BUF + numframes * 20) * sizeof(unsigned char));
-    cio = opj_cio_open(movie->cinfo, buf, (TEMP_BUF + numframes * 20));
-    mj2_write_moov(movie, cio);
-    fwrite(buf, cio_tell(cio), 1, mj2file);
-    free(buf);
-
-    fprintf(stdout, "Total encoding time: %.2f s for %d frames (%.1f fps)\n",
-            total_time, numframes, (float)numframes / total_time);
-
-    /* Ending program */
-
-    fclose(mj2file);
-    /* free remaining compression structures */
-    mj2_destroy_compress(movie);
-    free(cinfo);
-
-    if (j2k_parameters->cp_comment) {
-        free(j2k_parameters->cp_comment);
-    }
-    if (j2k_parameters->cp_matrice) {
-        free(j2k_parameters->cp_matrice);
-    }
-    opj_cio_close(cio);
-
-    return 0;
-}
diff --git a/src/bin/mj2/opj_mj2_decompress.c b/src/bin/mj2/opj_mj2_decompress.c
deleted file mode 100644 (file)
index 6d1a961..0000000
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
-* Copyright (c) 2003-2004, Francois-Olivier Devaux
-* Copyright (c) 2002-2004,  Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
-* All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions
-* are met:
-* 1. Redistributions of source code must retain the above copyright
-*    notice, this list of conditions and the following disclaimer.
-* 2. Redistributions in binary form must reproduce the above copyright
-*    notice, this list of conditions and the following disclaimer in the
-*    documentation and/or other materials provided with the distribution.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-* ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-* POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "opj_apps_config.h"
-#include "openjpeg.h"
-#include "j2k_lib.h"
-#include "cio.h"
-#include "j2k.h"
-#include "jp2.h"
-#include "mj2.h"
-#include "mj2_convert.h"
-
-#ifdef OPJ_HAVE_LIBLCMS2
-#include <lcms2.h>
-#endif
-#ifdef OPJ_HAVE_LIBLCMS1
-#include <lcms.h>
-#endif
-#include "color.h"
-/* -------------------------------------------------------------------------- */
-
-/**
-sample error callback expecting a FILE* client object
-*/
-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
-*/
-static void warning_callback(const char *msg, void *client_data)
-{
-    FILE *stream = (FILE*)client_data;
-    fprintf(stream, "[WARNING] %s", msg);
-}
-
-/* -------------------------------------------------------------------------- */
-
-
-int main(int argc, char *argv[])
-{
-    mj2_dparameters_t mj2_parameters;           /* decompression parameters */
-    opj_dinfo_t* dinfo;
-    opj_event_mgr_t event_mgr;      /* event manager */
-    opj_cio_t *cio = NULL;
-    unsigned int tnum, snum;
-    opj_mj2_t *movie;
-    mj2_tk_t *track;
-    mj2_sample_t *sample;
-    unsigned char* frame_codestream;
-    FILE *file, *outfile;
-    char outfilename[50];
-    opj_image_t *img = NULL;
-    unsigned int max_codstrm_size = 0;
-    double total_time = 0;
-    unsigned int numframes = 0;
-
-    if (argc != 3) {
-        printf("Usage: %s inputfile.mj2 outputfile.yuv\n", argv[0]);
-        return 1;
-    }
-
-    file = fopen(argv[1], "rb");
-
-    if (!file) {
-        fprintf(stderr, "failed to open %s for reading\n", argv[1]);
-        return 1;
-    }
-
-    /* Checking output file */
-    outfile = fopen(argv[2], "w");
-    if (!outfile) {
-        fprintf(stderr, "failed to open %s for writing\n", argv[2]);
-        fclose(file);
-        return 1;
-    }
-    fclose(outfile);
-
-    /*
-    configure the event callbacks (not required)
-    setting of each callback is optional
-    */
-    memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
-    event_mgr.error_handler = error_callback;
-    event_mgr.warning_handler = warning_callback;
-    event_mgr.info_handler = NULL;
-
-    /* get a MJ2 decompressor handle */
-    dinfo = mj2_create_decompress();
-    movie = (opj_mj2_t*)dinfo->mj2_handle;
-
-    /* catch events using our callbacks and give a local context */
-    opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
-
-    memset(&mj2_parameters, 0, sizeof(mj2_dparameters_t));
-    /* set J2K decoding parameters to default values */
-    opj_set_default_decoder_parameters(&mj2_parameters.j2k_parameters);
-
-    /* setup the decoder decoding parameters using user parameters */
-    mj2_setup_decoder(movie, &mj2_parameters);
-
-    if (mj2_read_struct(file, movie)) { /* Creating the movie structure */
-        return 1;
-    }
-
-    /* Decode first video track */
-    for (tnum = 0;
-            tnum < (unsigned int)(movie->num_htk + movie->num_stk + movie->num_vtk);
-            tnum++) {
-        if (movie->tk[tnum].track_type == 0) {
-            break;
-        }
-    }
-
-    if (movie->tk[tnum].track_type != 0) {
-        printf("Error. Movie does not contain any video track\n");
-        return 1;
-    }
-
-    track = &movie->tk[tnum];
-
-    /* Output info on first video tracl */
-    fprintf(stdout,
-            "The first video track contains %d frames.\nWidth: %d, Height: %d \n\n",
-            track->num_samples, track->w, track->h);
-
-    max_codstrm_size = track->sample[0].sample_size - 8;
-    frame_codestream = (unsigned char*) malloc(max_codstrm_size * sizeof(
-                           unsigned char));
-
-    numframes = track->num_samples;
-
-    for (snum = 0; snum < numframes; snum++) {
-        double init_time = opj_clock();
-        double elapsed_time;
-
-        sample = &track->sample[snum];
-        if (sample->sample_size - 8 > max_codstrm_size) {
-            max_codstrm_size =  sample->sample_size - 8;
-            if ((frame_codestream = (unsigned char*)
-                                    realloc(frame_codestream, max_codstrm_size)) == NULL) {
-                printf("Error reallocation memory\n");
-                free(frame_codestream);
-                return 1;
-            };
-        }
-        fseek(file, sample->offset + 8, SEEK_SET);
-        fread(frame_codestream, sample->sample_size - 8, 1,
-              file); /* Assuming that jp and ftyp markers size do */
-
-        /* open a byte stream */
-        cio = opj_cio_open((opj_common_ptr)dinfo, frame_codestream,
-                           sample->sample_size - 8);
-
-        img = opj_decode(dinfo, cio); /* Decode J2K to image */
-
-#ifdef WANT_SYCC_TO_RGB
-        if (img->color_space == CLRSPC_SYCC) {
-            color_sycc_to_rgb(img);
-        }
-#endif
-
-        if (img->icc_profile_buf) {
-#if defined(OPJ_HAVE_LIBLCMS1) || defined(OPJ_HAVE_LIBLCMS2)
-            color_apply_icc_profile(img);
-#endif
-
-            free(img->icc_profile_buf);
-            img->icc_profile_buf = NULL;
-            img->icc_profile_len = 0;
-        }
-
-        if (((img->numcomps == 3) && (img->comps[0].dx == img->comps[1].dx / 2)
-                && (img->comps[0].dx == img->comps[2].dx / 2) && (img->comps[0].dx == 1))
-                || (img->numcomps == 1)) {
-
-            if (!imagetoyuv(img, argv[2])) {  /* Convert image to YUV */
-                return 1;
-            }
-        } else if ((img->numcomps == 3) &&
-                   (img->comps[0].dx == 1) && (img->comps[1].dx == 1) &&
-                   (img->comps[2].dx == 1)) { /* If YUV 4:4:4 input --> to bmp */
-            fprintf(stdout,
-                    "The frames will be output in a bmp format (output_1.bmp, ...)\n");
-            sprintf(outfilename, "output_%d.bmp", snum);
-            if (imagetobmp(img, outfilename)) { /* Convert image to BMP */
-                return 1;
-            }
-
-        } else {
-            fprintf(stdout,
-                    "Image component dimensions are unknown. Unable to output image\n");
-            fprintf(stdout,
-                    "The frames will be output in a j2k file (output_1.j2k, ...)\n");
-
-            sprintf(outfilename, "output_%d.j2k", snum);
-            outfile = fopen(outfilename, "wb");
-            if (!outfile) {
-                fprintf(stderr, "failed to open %s for writing\n", outfilename);
-                return 1;
-            }
-            fwrite(frame_codestream, sample->sample_size - 8, 1, outfile);
-            fclose(outfile);
-        }
-        /* close the byte stream */
-        opj_cio_close(cio);
-        /* free image data structure */
-        opj_image_destroy(img);
-        elapsed_time = opj_clock() - init_time;
-        fprintf(stderr, "Frame number %d/%d decoded in %.2f mseconds\n", snum + 1,
-                numframes, elapsed_time * 1000);
-        total_time += elapsed_time;
-
-    }
-
-    free(frame_codestream);
-    fclose(file);
-
-    /* free remaining structures */
-    if (dinfo) {
-        mj2_destroy_decompress((opj_mj2_t*)dinfo->mj2_handle);
-    }
-    free(dinfo);
-
-    fprintf(stdout, "%d frame(s) correctly decompressed\n", snum);
-    fprintf(stdout, "Total decoding time: %.2f seconds (%.1f fps)\n", total_time,
-            (float)numframes / total_time);
-
-    return 0;
-}
diff --git a/src/bin/mj2/opj_mj2_extract.c b/src/bin/mj2/opj_mj2_extract.c
deleted file mode 100644 (file)
index 74fbeda..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "openjpeg.h"
-#include "cio.h"
-#include "j2k.h"
-#include "jp2.h"
-#include "mj2.h"
-
-/* -------------------------------------------------------------------------- */
-
-/**
-sample error callback expecting a FILE* client object
-*/
-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)
-{
-    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)
-{
-    FILE *stream = (FILE*)client_data;
-    fprintf(stream, "[INFO] %s", msg);
-}
-
-/* -------------------------------------------------------------------------- */
-
-
-int main(int argc, char *argv[])
-{
-    opj_dinfo_t* dinfo;
-    opj_event_mgr_t event_mgr;      /* event manager */
-    int tnum;
-    unsigned int snum;
-    opj_mj2_t *movie;
-    mj2_tk_t *track;
-    mj2_sample_t *sample;
-    unsigned char* frame_codestream;
-    FILE *file, *outfile;
-    char outfilename[FILENAME_MAX];
-    mj2_dparameters_t parameters;
-
-    if (argc != 3) {
-        printf("Usage: %s mj2filename output_prefix\n", argv[0]);
-        printf("Example: %s foreman.mj2 output/foreman\n", argv[0]);
-        return 1;
-    }
-
-    if (strlen(argv[2]) + 11 > sizeof(outfilename)) {
-        fprintf(stderr, "filename %d too long\n", strlen(argv[2]) + 11);
-        return 1;
-    }
-
-    file = fopen(argv[1], "rb");
-
-    if (!file) {
-        fprintf(stderr, "failed to open %s for reading\n", argv[1]);
-        return 1;
-    }
-
-    /*
-    configure the event callbacks (not required)
-    setting of each callback is optional
-    */
-    memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
-    event_mgr.error_handler = error_callback;
-    event_mgr.warning_handler = warning_callback;
-    event_mgr.info_handler = info_callback;
-
-    /* get a MJ2 decompressor handle */
-    dinfo = mj2_create_decompress();
-
-    /* catch events using our callbacks and give a local context */
-    opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
-
-    /* setup the decoder decoding parameters using user parameters */
-    memset(&parameters, 0, sizeof(mj2_dparameters_t));
-    movie = (opj_mj2_t*) dinfo->mj2_handle;
-    mj2_setup_decoder(movie, &parameters);
-
-    if (mj2_read_struct(file, movie)) { /* Creating the movie structure*/
-        return 1;
-    }
-
-    /* Decode first video track */
-    tnum = 0;
-    while (movie->tk[tnum].track_type != 0) {
-        tnum ++;
-    }
-
-    track = &movie->tk[tnum];
-
-    fprintf(stdout, "Extracting %d frames from file...\n", track->num_samples);
-
-    for (snum = 0; snum < track->num_samples; snum++) {
-        sample = &track->sample[snum];
-        frame_codestream = (unsigned char*) malloc(sample->sample_size -
-                           8); /* Skipping JP2C marker*/
-        fseek(file, sample->offset + 8, SEEK_SET);
-        fread(frame_codestream, sample->sample_size - 8, 1,
-              file); /* Assuming that jp and ftyp markers size do*/
-
-        {
-            int num = snprintf(outfilename, sizeof(outfilename),
-                               "%s_%05d.j2k", argv[2],
-                               snum);
-            if (num >= sizeof(outfilename)) {
-                fprintf(stderr, "maximum length of output prefix exceeded\n");
-                free(frame_codestream);
-                return 1;
-            }
-        }
-
-        outfile = fopen(outfilename, "wb");
-        if (!outfile) {
-            fprintf(stderr, "failed to open %s for writing\n", outfilename);
-            free(frame_codestream);
-            return 1;
-        }
-        fwrite(frame_codestream, sample->sample_size - 8, 1, outfile);
-        fclose(outfile);
-        free(frame_codestream);
-    }
-    fclose(file);
-    fprintf(stdout, "%d frames correctly extracted\n", snum);
-
-    /* free remaining structures */
-    if (dinfo) {
-        mj2_destroy_decompress((opj_mj2_t*)dinfo->mj2_handle);
-    }
-
-    return 0;
-}
diff --git a/src/bin/mj2/opj_mj2_wrap.c b/src/bin/mj2/opj_mj2_wrap.c
deleted file mode 100644 (file)
index 84a066e..0000000
+++ /dev/null
@@ -1,537 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "openjpeg.h"
-#include "cio.h"
-#include "j2k.h"
-#include "jp2.h"
-#include "mj2.h"
-
-static int int_ceildiv(int a, int b)
-{
-    return (a + b - 1) / b;
-}
-
-/**
-Size of memory first allocated for MOOV box
-*/
-#define TEMP_BUF 10000
-
-#define J2K_CODESTREAM_MAGIC "\xff\x4f\xff\x51"
-
-/* -------------------------------------------------------------------------- */
-
-static int test_image(const char *fname, mj2_cparameters_t *cp)
-{
-    FILE *reader;
-    opj_image_t *image;
-    unsigned char *src;
-    opj_dinfo_t *dinfo;
-    opj_cio_t *cio;
-    opj_dparameters_t dparameters;
-    int success;
-    long src_len;
-
-    success = 0;
-
-    if ((reader = fopen(fname, "rb")) == NULL) {
-        return success;
-    }
-
-    fseek(reader, 0, SEEK_END);
-    src_len = ftell(reader);
-    fseek(reader, 0, SEEK_SET);
-    src = (unsigned char*) malloc(src_len);
-    fread(src, 1, src_len, reader);
-    fclose(reader);
-
-    if (memcmp(src, J2K_CODESTREAM_MAGIC, 4) != 0) {
-        free(src);
-        return success;
-    }
-    memset(&dparameters, 0, sizeof(opj_dparameters_t));
-
-    opj_set_default_decoder_parameters(&dparameters);
-
-    dinfo = opj_create_decompress(CODEC_J2K);
-
-    opj_setup_decoder(dinfo, &dparameters);
-
-    cio = opj_cio_open((opj_common_ptr)dinfo, src, src_len);
-
-    image = opj_decode(dinfo, cio);
-
-    free(src);
-    cio->buffer = NULL;
-    opj_cio_close(cio);
-
-    if (image == NULL) {
-        goto fin;
-    }
-
-    cp->numcomps = image->numcomps;
-    cp->w = image->comps[0].w;
-    cp->h = image->comps[0].h;
-    cp->prec = image->comps[0].prec;
-
-    if (image->numcomps > 2) {
-        if ((image->comps[0].dx == 1)
-                && (image->comps[1].dx == 2)
-                && (image->comps[2].dx == 2)
-                && (image->comps[0].dy == 1)
-                && (image->comps[1].dy == 2)
-                && (image->comps[2].dy == 2)) { /* horizontal and vertical*/
-            /*   Y420*/
-            cp->enumcs = ENUMCS_SYCC;
-            cp->CbCr_subsampling_dx = 2;
-            cp->CbCr_subsampling_dy = 2;
-        } else if ((image->comps[0].dx == 1)
-                   && (image->comps[1].dx == 2)
-                   && (image->comps[2].dx == 2)
-                   && (image->comps[0].dy == 1)
-                   && (image->comps[1].dy == 1)
-                   && (image->comps[2].dy == 1)) { /* horizontal only*/
-            /*   Y422*/
-            cp->enumcs = ENUMCS_SYCC;
-            cp->CbCr_subsampling_dx = 2;
-            cp->CbCr_subsampling_dy = 1;
-        } else if ((image->comps[0].dx == 1)
-                   && (image->comps[1].dx == 1)
-                   && (image->comps[2].dx == 1)
-                   && (image->comps[0].dy == 1)
-                   && (image->comps[1].dy == 1)
-                   && (image->comps[2].dy == 1)) {
-            /*   Y444 or RGB */
-
-            if (image->color_space ==  CLRSPC_SRGB) {
-                cp->enumcs = ENUMCS_SRGB;
-
-                /*    cp->CbCr_subsampling_dx = 0; */
-                /*    cp->CbCr_subsampling_dy = 0; */
-            } else {
-                cp->enumcs = ENUMCS_SYCC;
-
-                cp->CbCr_subsampling_dx = 1;
-                cp->CbCr_subsampling_dy = 1;
-            }
-        } else {
-            goto fin;
-        }
-    } else {
-        cp->enumcs = ENUMCS_GRAY;
-        /*  cp->CbCr_subsampling_dx = 0; */
-        /*  cp->CbCr_subsampling_dy = 0; */
-    }
-    if (image->icc_profile_buf) {
-        cp->meth = 2;
-        free(image->icc_profile_buf);
-        image->icc_profile_buf = NULL;
-    } else {
-        cp->meth = 1;
-    }
-
-    success = 1;
-fin:
-    if (dinfo) {
-        opj_destroy_decompress(dinfo);
-    }
-
-    if (image) {
-        opj_image_destroy(image);
-    }
-
-    return success;
-}
-
-/**
-sample error callback expecting a FILE* client object
-*/
-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
-*/
-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
-*/
-static void info_callback(const char *msg, void *client_data)
-{
-    FILE *stream = (FILE*)client_data;
-    fprintf(stream, "[INFO] %s", msg);
-}
-
-/* -------------------------------------------------------------------------- */
-
-
-
-static void read_siz_marker(FILE *file, opj_image_t *image)
-{
-    int len, i;
-    char buf, buf2[2];
-    unsigned char *siz_buffer;
-    opj_cio_t *cio;
-
-    fseek(file, 0, SEEK_SET);
-    do {
-        fread(&buf, 1, 1, file);
-        if (buf == (char)0xff) {
-            fread(&buf, 1, 1, file);
-        }
-    } while (!(buf == (char)0x51));
-
-    fread(buf2, 2, 1, file);  /* Lsiz                */
-    len = ((buf2[0]) << 8) + buf2[1];
-
-    siz_buffer = (unsigned char*) malloc(len * sizeof(unsigned char));
-    fread(siz_buffer, len, 1, file);
-    cio = opj_cio_open(NULL, siz_buffer, len);
-
-    cio_read(cio, 2);         /* Rsiz (capabilities) */
-    image->x1 = cio_read(cio, 4); /* Xsiz                */
-    image->y1 = cio_read(cio, 4); /* Ysiz                */
-    image->x0 = cio_read(cio, 4); /* X0siz               */
-    image->y0 = cio_read(cio, 4); /* Y0siz               */
-    cio_skip(cio, 16);            /* XTsiz, YTsiz, XT0siz, YT0siz        */
-
-    image->numcomps = cio_read(cio, 2);   /* Csiz                */
-    image->comps =
-        (opj_image_comp_t *) malloc(image->numcomps * sizeof(opj_image_comp_t));
-
-    for (i = 0; i < image->numcomps; i++) {
-        int tmp;
-        tmp = cio_read(cio, 1);     /* Ssiz_i          */
-        image->comps[i].prec = (tmp & 0x7f) + 1;
-        image->comps[i].sgnd = tmp >> 7;
-        image->comps[i].dx = cio_read(cio, 1);  /* XRsiz_i         */
-        image->comps[i].dy = cio_read(cio, 1);  /* YRsiz_i         */
-        image->comps[i].resno_decoded = 0;  /* number of resolution decoded */
-        image->comps[i].factor = 0; /* reducing factor by component */
-    }
-    fseek(file, 0, SEEK_SET);
-    opj_cio_close(cio);
-    free(siz_buffer);
-}
-
-static void setparams(opj_mj2_t *movie, opj_image_t *image)
-{
-    int i, depth_0, depth, sign;
-
-    movie->tk[0].w = int_ceildiv(image->x1 - image->x0, image->comps[0].dx);
-    movie->tk[0].h = int_ceildiv(image->y1 - image->y0, image->comps[0].dy);
-    mj2_init_stdmovie(movie);
-
-    movie->tk[0].depth = image->comps[0].prec;
-
-    if (image->numcomps == 3) {
-        if ((image->comps[0].dx == 1)
-                && (image->comps[1].dx == 1)
-                && (image->comps[2].dx == 1)) {
-            movie->tk[0].CbCr_subsampling_dx = 1;
-        } else if ((image->comps[0].dx == 1)
-                   && (image->comps[1].dx == 2)
-                   && (image->comps[2].dx == 2)) {
-            movie->tk[0].CbCr_subsampling_dx = 2;
-        } else {
-            fprintf(stderr, "Image component sizes are incoherent\n");
-        }
-
-        if ((image->comps[0].dy == 1)
-                && (image->comps[1].dy == 1)
-                && (image->comps[2].dy == 1)) {
-            movie->tk[0].CbCr_subsampling_dy = 1;
-        } else if ((image->comps[0].dy == 1)
-                   && (image->comps[1].dy == 2)
-                   && (image->comps[2].dy == 2)) {
-            movie->tk[0].CbCr_subsampling_dy = 2;
-        } else {
-            fprintf(stderr, "Image component sizes are incoherent\n");
-        }
-    }
-
-    movie->tk[0].sample_rate = 25;
-
-    movie->tk[0].jp2_struct.numcomps = image->numcomps;   /* NC */
-
-    /* Init Standard jp2 structure */
-
-    movie->tk[0].jp2_struct.comps =
-        (opj_jp2_comps_t *) malloc(movie->tk[0].jp2_struct.numcomps * sizeof(
-                                       opj_jp2_comps_t));
-    movie->tk[0].jp2_struct.precedence = 0;   /* PRECEDENCE*/
-    movie->tk[0].jp2_struct.approx = 0;   /* APPROX*/
-    movie->tk[0].jp2_struct.brand = JP2_JP2;  /* BR         */
-    movie->tk[0].jp2_struct.minversion = 0;   /* MinV       */
-    movie->tk[0].jp2_struct.numcl = 1;
-    movie->tk[0].jp2_struct.cl = (unsigned int *) malloc(
-                                     movie->tk[0].jp2_struct.numcl * sizeof(int));
-    movie->tk[0].jp2_struct.cl[0] = JP2_JP2;  /* CL0 : JP2  */
-    movie->tk[0].jp2_struct.C = 7;      /* C : Always 7*/
-    movie->tk[0].jp2_struct.UnkC =
-        0;      /* UnkC, colorspace specified in colr box*/
-    movie->tk[0].jp2_struct.IPR = 0;      /* IPR, no intellectual property*/
-    movie->tk[0].jp2_struct.w = int_ceildiv(image->x1 - image->x0,
-                                            image->comps[0].dx);
-    movie->tk[0].jp2_struct.h = int_ceildiv(image->y1 - image->y0,
-                                            image->comps[0].dy);
-
-    depth_0 = image->comps[0].prec - 1;
-    sign = image->comps[0].sgnd;
-    movie->tk[0].jp2_struct.bpc = depth_0 + (sign << 7);
-
-    for (i = 1; i < image->numcomps; i++) {
-        depth = image->comps[i].prec - 1;
-        sign = image->comps[i].sgnd;
-        if (depth_0 != depth) {
-            movie->tk[0].jp2_struct.bpc = 255;
-        }
-    }
-
-    for (i = 0; i < image->numcomps; i++)
-        movie->tk[0].jp2_struct.comps[i].bpcc =
-            image->comps[i].prec - 1 + (image->comps[i].sgnd << 7);
-
-    if ((image->numcomps == 1 || image->numcomps == 3)
-            && (movie->tk[0].jp2_struct.bpc != 255)) {
-        movie->tk[0].jp2_struct.meth = 1;
-    } else {
-        movie->tk[0].jp2_struct.meth = 2;
-    }
-
-    if (image->numcomps == 1) {
-        movie->tk[0].jp2_struct.enumcs = 17;    /* Grayscale */
-    }
-
-    else if ((image->comps[0].dx == 1)
-             && (image->comps[1].dx == 1)
-             && (image->comps[2].dx == 1)
-             && (image->comps[0].dy == 1)
-             && (image->comps[1].dy == 1)
-             && (image->comps[2].dy == 1)) {
-        movie->tk[0].jp2_struct.enumcs = 16;    /* RGB */
-    }
-
-    else if ((image->comps[0].dx == 1)
-             && (image->comps[1].dx == 2)
-             && (image->comps[2].dx == 2)
-             && (image->comps[0].dy == 1)
-             && (image->comps[1].dy == 2)
-             && (image->comps[2].dy == 2)) {
-        movie->tk[0].jp2_struct.enumcs = 18;    /* YUV */
-    }
-
-    else {
-        movie->tk[0].jp2_struct.enumcs = 0;    /* Unknown profile */
-    }
-}
-
-int main(int argc, char *argv[])
-{
-    opj_cinfo_t* cinfo;
-    opj_event_mgr_t event_mgr;      /* event manager */
-    unsigned int snum;
-    opj_mj2_t *movie;
-    mj2_sample_t *sample;
-    unsigned char* frame_codestream;
-    FILE *mj2file, *j2kfile;
-    char *j2kfilename;
-    unsigned char *buf;
-    int offset, mdat_initpos;
-    opj_image_t img;
-    opj_cio_t *cio;
-    mj2_cparameters_t parameters;
-
-    if (argc != 3) {
-        printf("Usage: %s source_location mj2_filename\n", argv[0]);
-        printf("Example: %s input/input output.mj2\n", argv[0]);
-        return 1;
-    }
-
-    mj2file = fopen(argv[2], "wb");
-
-    if (!mj2file) {
-        fprintf(stderr, "failed to open %s for writing\n", argv[2]);
-        return 1;
-    }
-    memset(&img, 0, sizeof(opj_image_t));
-    /*
-    configure the event callbacks (not required)
-    setting of each callback is optional
-    */
-    memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
-    event_mgr.error_handler = error_callback;
-    event_mgr.warning_handler = warning_callback;
-    event_mgr.info_handler = info_callback;
-
-    /* get a MJ2 decompressor handle */
-    cinfo = mj2_create_compress();
-
-    /* catch events using our callbacks and give a local context */
-    opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stderr);
-
-    /* setup the decoder encoding parameters using user parameters */
-    memset(&parameters, 0, sizeof(mj2_cparameters_t));
-    movie = (opj_mj2_t*) cinfo->mj2_handle;
-
-    j2kfilename = (char*)malloc(strlen(argv[1]) + 12);/* max. '%6d' */
-    sprintf(j2kfilename, "%s_00001.j2k", argv[1]);
-
-    if (test_image(j2kfilename, &parameters) == 0) {
-        goto fin;
-    }
-
-    parameters.frame_rate = 25; /* DEFAULT */
-
-    mj2_setup_encoder(movie, &parameters);
-
-
-    /* Writing JP, FTYP and MDAT boxes
-    Assuming that the JP and FTYP boxes won't be longer than 300 bytes */
-
-    buf = (unsigned char*) malloc(300 * sizeof(unsigned char));
-    cio = opj_cio_open(movie->cinfo, buf, 300);
-    mj2_write_jp(cio);
-    mj2_write_ftyp(movie, cio);
-    mdat_initpos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, MJ2_MDAT, 4);
-    fwrite(buf, cio_tell(cio), 1, mj2file);
-    free(buf);
-
-    /* Insert each j2k codestream in a JP2C box */
-    snum = 0;
-    offset = 0;
-    while (1) {
-        mj2_sample_t * new_sample;
-        mj2_chunk_t * new_chunk;
-        sample = &movie->tk[0].sample[snum];
-        sprintf(j2kfilename, "%s_%05d.j2k", argv[1], snum);
-        j2kfile = fopen(j2kfilename, "rb");
-        if (!j2kfile) {
-            if (snum == 0) { /* Could not open a single codestream */
-                fprintf(stderr, "failed to open %s for reading\n", j2kfilename);
-                return 1;
-            } else {        /* Tried to open a inexistent codestream */
-                fprintf(stdout, "%d frames are being added to the MJ2 file\n", snum);
-                break;
-            }
-        }
-
-        /* Calculating offset for samples and chunks */
-        offset += cio_tell(cio);
-        sample->offset = offset;
-        movie->tk[0].chunk[snum].offset =
-            offset;  /* There will be one sample per chunk */
-
-        /* Calculating sample size */
-        fseek(j2kfile, 0, SEEK_END);
-        sample->sample_size = ftell(j2kfile) +
-                              8; /* Sample size is codestream + JP2C box header */
-        fseek(j2kfile, 0, SEEK_SET);
-
-        /* Reading siz marker of j2k image for the first codestream */
-        if (snum == 0) {
-            read_siz_marker(j2kfile, &img);
-        }
-
-        /* Writing JP2C box header */
-        frame_codestream = (unsigned char*) malloc(sample->sample_size + 8);
-        cio = opj_cio_open(movie->cinfo, frame_codestream, sample->sample_size);
-        cio_write(cio, sample->sample_size, 4); /* Sample size */
-        cio_write(cio, JP2_JP2C, 4); /* JP2C */
-
-        /* Writing codestream from J2K file to MJ2 file */
-        fread(frame_codestream + 8, sample->sample_size - 8, 1, j2kfile);
-        fwrite(frame_codestream, sample->sample_size, 1, mj2file);
-        cio_skip(cio, sample->sample_size - 8);
-
-        /* Ending loop */
-        fclose(j2kfile);
-        snum++;
-        new_sample = (mj2_sample_t*)
-                     realloc(movie->tk[0].sample, (snum + 1) * sizeof(mj2_sample_t));
-        new_chunk = (mj2_chunk_t*)
-                    realloc(movie->tk[0].chunk, (snum + 1) * sizeof(mj2_chunk_t));
-        if (new_sample && new_chunk) {
-            movie->tk[0].sample = new_sample;
-            movie->tk[0].chunk = new_chunk;
-        } else {
-            fprintf(stderr, "Failed to allocate enough memory to read %s\n", j2kfilename);
-            return 1;
-        }
-        free(frame_codestream);
-    }
-
-    /* Writing the MDAT box length in header */
-    offset += cio_tell(cio);
-    buf = (unsigned char*) malloc(4 * sizeof(unsigned char));
-    cio = opj_cio_open(movie->cinfo, buf, 4);
-    cio_write(cio, offset - mdat_initpos, 4);
-    fseek(mj2file, (long)mdat_initpos, SEEK_SET);
-    fwrite(buf, 4, 1, mj2file);
-    fseek(mj2file, 0, SEEK_END);
-    free(buf);
-
-    /* Setting movie parameters */
-    movie->tk[0].num_samples = snum;
-    movie->tk[0].num_chunks = snum;
-    setparams(movie, &img);
-
-    /* Writing MOOV box */
-    buf = (unsigned char*) malloc((TEMP_BUF + snum * 20) * sizeof(unsigned char));
-    cio = opj_cio_open(movie->cinfo, buf, (TEMP_BUF + snum * 20));
-    mj2_write_moov(movie, cio);
-    fwrite(buf, cio_tell(cio), 1, mj2file);
-
-    /* Ending program */
-    free(img.comps);
-    opj_cio_close(cio);
-
-fin:
-    fclose(mj2file);
-    mj2_destroy_compress(movie);
-    free(j2kfilename);
-
-    return 0;
-}
diff --git a/src/bin/mj2/readme.txt b/src/bin/mj2/readme.txt
deleted file mode 100644 (file)
index 9419d2a..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-Attention : the motion jpeg 2000 files currently only work with OpenJPEG v0.97 that you can find here : 
-
-http://www.openjpeg.org/openjpeg_v097.tar.gz
\ No newline at end of file
index da8846b65b7023f99587b482f5e206f5095d5851..212d92206eb6b200cba58bac628366686277a9c1 100644 (file)
@@ -2,16 +2,6 @@
 # Part 1 & 2:
 add_subdirectory(openjp2)
 
-# optionals components:
-if(BUILD_JPWL)
-  add_subdirectory(openjpwl)
-endif()
-if(BUILD_MJ2)
-  add_subdirectory(openmj2)
-endif()
 if(BUILD_JPIP)
   add_subdirectory(openjpip)
 endif()
-if(BUILD_JP3D)
-  add_subdirectory(openjp3d)
-endif()
diff --git a/src/lib/openjp3d/CMakeLists.txt b/src/lib/openjp3d/CMakeLists.txt
deleted file mode 100644 (file)
index b0469af..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# openjp3d
-include_regular_expression("^.*$")
-
-include_directories(
-  ${OPENJPEG_BINARY_DIR}/src/lib/openjp2 # opj_config.h
-  )
-
-set(OPENJP3D_LIBRARY_NAME openjp3d)
-# Defines the source code for the library
-set(OPENJP3D_SRCS
-bio.c  cio.c  dwt.c  event.c  jp3d.c  jp3d_lib.c  mct.c  mqc.c  openjp3d.c
-pi.c  raw.c  t1.c  t1_3d.c  t2.c  tcd.c  tgt.c  volume.c
-)
-
-# Build the library
-if(WIN32)
-  if(BUILD_SHARED_LIBS)
-    add_definitions(-DOPJ_EXPORTS)
-  else()
-    add_definitions(-DOPJ_STATIC)
-  endif()
-endif()
-
-# build jp3d lib:
-add_library(${OPENJP3D_LIBRARY_NAME} ${OPENJP3D_SRCS})
-if(UNIX)
-  target_link_libraries(${OPENJP3D_LIBRARY_NAME} m)
-endif()
-set_target_properties(${OPENJP3D_LIBRARY_NAME} PROPERTIES ${OPENJPEG_LIBRARY_PROPERTIES})
-if(NOT ${CMAKE_VERSION} VERSION_LESS "2.8.12")
-  target_compile_options(${OPENJP3D_LIBRARY_NAME} PRIVATE ${OPENJPEG_LIBRARY_COMPILE_OPTIONS})
-endif()
-
-# Install library
-install(TARGETS ${OPENJP3D_LIBRARY_NAME}
-  EXPORT OpenJP3DTargets
-  DESTINATION ${OPENJPEG_INSTALL_LIB_DIR}
-  COMPONENT Libraries
-)
-
-# Install includes files
-install(FILES openjp3d.h
-  DESTINATION ${OPENJPEG_INSTALL_INCLUDE_DIR}
-  COMPONENT Headers
-)
diff --git a/src/lib/openjp3d/bio.c b/src/lib/openjp3d/bio.c
deleted file mode 100644 (file)
index 7e1cf7d..0000000
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "opj_includes.h"
-
-/** @defgroup BIO BIO - Individual bit input-output stream */
-/*@{*/
-
-/** @name Local static functions */
-/*@{*/
-
-/**
-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);
-/**
-Read a bit
-@param bio BIO handle
-@return Returns the read bit
-*/
-static int bio_getbit(opj_bio_t *bio);
-/**
-Write a byte
-@param bio BIO handle
-@return Returns 0 if successful, returns 1 otherwise
-*/
-static int bio_byteout(opj_bio_t *bio);
-/**
-Read a byte
-@param bio BIO handle
-@return Returns 0 if successful, returns 1 otherwise
-*/
-static int bio_bytein(opj_bio_t *bio);
-
-/*@}*/
-
-/*@}*/
-
-
-/*
-==========================================================
-   local functions
-==========================================================
-*/
-
-static int bio_byteout(opj_bio_t *bio)
-{
-    bio->buf = (bio->buf << 8) & 0xffff;
-    bio->ct = bio->buf == 0xff00 ? 7 : 8;
-    if (bio->bp >= bio->end) {
-        return 1;
-    }
-    *bio->bp++ = bio->buf >> 8;
-    return 0;
-}
-
-static int bio_bytein(opj_bio_t *bio)
-{
-    bio->buf = (bio->buf << 8) & 0xffff;
-    bio->ct = bio->buf == 0xff00 ? 7 : 8;
-    if (bio->bp >= bio->end) {
-        return 1;
-    }
-    bio->buf |= *bio->bp++;
-    return 0;
-}
-
-static void bio_putbit(opj_bio_t *bio, int b)
-{
-    if (bio->ct == 0) {
-        bio_byteout(bio);
-    }
-    bio->ct--;
-    bio->buf |= b << bio->ct;
-}
-
-/* MOD antonin */
-static int bio_getbit(opj_bio_t *bio)
-{
-    /* DOM */
-    if (bio->ct == 0) {
-        bio_bytein(bio);
-    }
-    bio->ct--;
-    return (bio->buf >> bio->ct) & 1;
-}
-
-/*
-==========================================================
-   Bit Input/Output interface
-==========================================================
-*/
-
-opj_bio_t* bio_create()
-{
-    opj_bio_t *bio = (opj_bio_t*)opj_malloc(sizeof(opj_bio_t));
-    return bio;
-}
-
-void bio_destroy(opj_bio_t *bio)
-{
-    if (bio) {
-        opj_free(bio);
-    }
-}
-
-int bio_numbytes(opj_bio_t *bio)
-{
-    return (bio->bp - bio->start);
-}
-
-void bio_init_enc(opj_bio_t *bio, unsigned char *bp, int len)
-{
-    bio->start = bp;
-    bio->end = bp + len;
-    bio->bp = bp;
-    bio->buf = 0;
-    bio->ct = 8;
-}
-
-void bio_init_dec(opj_bio_t *bio, unsigned char *bp, int len)
-{
-    bio->start = bp;
-    bio->end = bp + len;
-    bio->bp = bp;
-    bio->buf = 0;
-    bio->ct = 0;
-}
-
-void bio_write(opj_bio_t *bio, int v, int n)
-{
-    int i;
-    for (i = n - 1; i >= 0; i--) {
-        bio_putbit(bio, (v >> i) & 1);
-    }
-}
-
-int bio_read(opj_bio_t *bio, int n)
-{
-    int i, v;
-    v = 0;
-    for (i = n - 1; i >= 0; i--) {
-        v += bio_getbit(bio) << i;
-    }
-    return v;
-}
-
-int bio_flush(opj_bio_t *bio)
-{
-    bio->ct = 0;
-    if (bio_byteout(bio)) {
-        return 1;
-    }
-    if (bio->ct == 7) {
-        bio->ct = 0;
-        if (bio_byteout(bio)) {
-            return 1;
-        }
-    }
-    return 0;
-}
-
-int bio_inalign(opj_bio_t *bio)
-{
-    bio->ct = 0;
-    if ((bio->buf & 0xff) == 0xff) {
-        if (bio_bytein(bio)) {
-            return 1;
-        }
-        bio->ct = 0;
-    }
-    return 0;
-}
diff --git a/src/lib/openjp3d/bio.h b/src/lib/openjp3d/bio.h
deleted file mode 100644 (file)
index 1c26eb3..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __BIO_H
-#define __BIO_H
-/**
-@file bio.h
-@brief Implementation of an individual bit input-output (BIO)
-
-The functions in BIO.C have for goal to realize an individual bit input - output.
-*/
-
-/** @defgroup BIO BIO - Individual bit input-output stream */
-/*@{*/
-
-/**
-Individual bit input-output stream (BIO)
-*/
-typedef struct opj_bio {
-    /** pointer to the start of the buffer */
-    unsigned char *start;
-    /** pointer to the end of the buffer */
-    unsigned char *end;
-    /** pointer to the present position in the buffer */
-    unsigned char *bp;
-    /** temporary place where each byte is read or written */
-    unsigned int buf;
-    /** coder : number of bits free to write. decoder : number of bits read */
-    int ct;
-} opj_bio_t;
-
-/** @name Funciones generales */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-/**
-Create a new BIO handle
-@return Returns a new BIO handle if successful, returns NULL otherwise
-*/
-opj_bio_t* bio_create(void);
-/**
-Destroy a previously created BIO handle
-@param bio BIO handle to destroy
-*/
-void bio_destroy(opj_bio_t *bio);
-/**
-Number of bytes written.
-@param bio BIO handle
-@return Returns the number of bytes written
-*/
-int bio_numbytes(opj_bio_t *bio);
-/**
-Init encoder
-@param bio BIO handle
-@param bp Output buffer
-@param len Output buffer length
-*/
-void bio_init_enc(opj_bio_t *bio, unsigned char *bp, int len);
-/**
-Init decoder
-@param bio BIO handle
-@param bp Input buffer
-@param len Input buffer length
-*/
-void bio_init_dec(opj_bio_t *bio, unsigned char *bp, int len);
-/**
-Write bits
-@param bio BIO handle
-@param v Value of bits
-@param n Number of bits to write
-*/
-void bio_write(opj_bio_t *bio, int v, int n);
-/**
-Read bits
-@param bio BIO handle
-@param n Number of bits to read
-@return Returns the corresponding read number
-*/
-int bio_read(opj_bio_t *bio, int n);
-/**
-Flush bits
-@param bio BIO handle
-@return Returns 1 if successful, returns 0 otherwise
-*/
-int bio_flush(opj_bio_t *bio);
-/**
-Passes the ending bits (coming from flushing)
-@param bio BIO handle
-@return Returns 1 if successful, returns 0 otherwise
-*/
-int bio_inalign(opj_bio_t *bio);
-/**
-Read a bit
-@param bio BIO handle
-@return Returns the read bit
-*/
-/* MOD antonin */
-/*int bio_getbit(opj_bio_t *bio);*/
-/* DOM */
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif /* __BIO_H */
-
diff --git a/src/lib/openjp3d/cio.c b/src/lib/openjp3d/cio.c
deleted file mode 100644 (file)
index 99007d0..0000000
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "opj_includes.h"
-
-/* ----------------------------------------------------------------------- */
-
-opj_cio_t* OPJ_CALLCONV opj_cio_open(opj_common_ptr cinfo,
-                                     unsigned char *buffer, int length)
-{
-    opj_cp_t *cp = NULL;
-    opj_cio_t *cio = (opj_cio_t*)opj_malloc(sizeof(opj_cio_t));
-    if (!cio) {
-        return NULL;
-    }
-    cio->cinfo = cinfo;
-    if (buffer && length) {
-        /* wrap a user buffer containing the encoded image */
-        cio->openmode = OPJ_STREAM_READ;
-        cio->buffer = buffer;
-        cio->length = length;
-    } else if (!buffer && !length && cinfo) {
-        /* allocate a buffer for the encoded image */
-        cio->openmode = OPJ_STREAM_WRITE;
-        switch (cinfo->codec_format) {
-        case CODEC_J3D:
-        case CODEC_J2K:
-            cp = ((opj_j3d_t*)cinfo->j3d_handle)->cp;
-            break;
-        default:
-            opj_free(cio);
-            return NULL;
-        }
-        cio->length = cp->tdx * cp->tdy * cp->tdz * cp->tw * cp->th * cp->tl * 4;
-        cio->buffer = (unsigned char *)opj_malloc(cio->length);
-        if (!cio->buffer) {
-            opj_event_msg(cio->cinfo, EVT_ERROR,
-                          "Error allocating memory for compressed bitstream\n");
-            opj_free(cio);
-            return NULL;
-        }
-    } else {
-        opj_free(cio);
-        return NULL;
-    }
-
-    /* Initialize byte IO */
-    cio->start = cio->buffer;
-    cio->end = cio->buffer + cio->length;
-    cio->bp = cio->buffer;
-
-    return cio;
-}
-
-void OPJ_CALLCONV opj_cio_close(opj_cio_t *cio)
-{
-    if (cio) {
-        if (cio->openmode == OPJ_STREAM_WRITE) {
-            /* destroy the allocated buffer */
-            opj_free(cio->buffer);
-        }
-        /* destroy the cio */
-        opj_free(cio);
-    }
-}
-
-
-/* ----------------------------------------------------------------------- */
-
-/*
- * Get position in byte stream.
- */
-int OPJ_CALLCONV cio_tell(opj_cio_t *cio)
-{
-    return cio->bp - cio->start;
-}
-
-/*
- * Set position in byte stream.
- *
- * pos : position, in number of bytes, from the beginning of the stream
- */
-void OPJ_CALLCONV cio_seek(opj_cio_t *cio, int pos)
-{
-    cio->bp = cio->start + pos;
-}
-
-/*
- * Number of bytes left before the end of the stream.
- */
-int cio_numbytesleft(opj_cio_t *cio)
-{
-    return cio->end - cio->bp;
-}
-
-/*
- * Get pointer to the current position in the stream.
- */
-unsigned char *cio_getbp(opj_cio_t *cio)
-{
-    return cio->bp;
-}
-
-/*
- * Write a byte.
- */
-static bool cio_byteout(opj_cio_t *cio, unsigned char v)
-{
-    if (cio->bp >= cio->end) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "write error\n");
-        return false;
-    }
-    *cio->bp++ = v;
-    return true;
-}
-
-/*
- * Read a byte.
- */
-static unsigned char cio_bytein(opj_cio_t *cio)
-{
-    if (cio->bp >= cio->end) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "read error\n");
-        return 0;
-    }
-    return *cio->bp++;
-}
-
-/*
- * Write some bytes.
- *
- * v : value to write
- * n : number of bytes to write
- */
-unsigned int cio_write(opj_cio_t *cio, unsigned int v, int n)
-{
-    int i;
-    for (i = n - 1; i >= 0; i--) {
-        if (!cio_byteout(cio, (unsigned char)((v >> (i << 3)) & 0xff))) {
-            return 0;
-        }
-    }
-    return n;
-}
-
-/*
- * Read some bytes.
- *
- * n : number of bytes to read
- *
- * return : value of the n bytes read
- */
-unsigned int cio_read(opj_cio_t *cio, int n)
-{
-    int i;
-    unsigned int v;
-    v = 0;
-    for (i = n - 1; i >= 0; i--) {
-        v += cio_bytein(cio) << (i << 3);
-    }
-    return v;
-}
-
-/*
- * Skip some bytes.
- *
- * n : number of bytes to skip
- */
-void cio_skip(opj_cio_t *cio, int n)
-{
-    cio->bp += n;
-}
-
-/*
- * Write some bytes.
- *
- * v : value to write
- * n : number of bytes to write
- */
-int cio_write_int(opj_cio_t *cio, int v, int n)
-{
-    int i;
-    for (i = n - 1; i >= 0; i--) {
-        if (!cio_byteout(cio, (char)((v >> (i << 3)) & 0xff))) {
-            return 0;
-        }
-    }
-    return n;
-}
-
-/*
- * Read some bytes.
- *
- * n : number of bytes to read
- *
- * return : value of the n bytes read
- */
-int cio_read_int(opj_cio_t *cio, int n)
-{
-    int i;
-    int v;
-    v = 0;
-    for (i = n - 1; i >= 0; i--) {
-        v += cio_bytein(cio) << (i << 3);
-    }
-    return v;
-}
-
diff --git a/src/lib/openjp3d/cio.h b/src/lib/openjp3d/cio.h
deleted file mode 100644 (file)
index ff7ae68..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __CIO_H
-#define __CIO_H
-/**
-@file cio.h
-@brief Implementation of a byte input-output process (CIO)
-
-The functions in CIO.C have for goal to realize a byte input / output process.
-*/
-
-/** @defgroup CIO CIO - byte input-output stream */
-/*@{*/
-
-/** @name Funciones generales (see also openjp3d.h) */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-/**
-Number of bytes left before the end of the stream
-@param cio CIO handle
-@return Returns the number of bytes before the end of the stream
-*/
-int cio_numbytesleft(opj_cio_t *cio);
-/**
-Get pointer to the current position in the stream
-@param cio CIO handle
-@return Returns a pointer to the current position
-*/
-unsigned char *cio_getbp(opj_cio_t *cio);
-/**
-Write some bytes
-@param cio CIO handle
-@param v Value to write
-@param n Number of bytes to write
-@return Returns the number of bytes written or 0 if an error occurred
-*/
-unsigned int cio_write(opj_cio_t *cio, unsigned int v, int n);
-/**
-Read some bytes
-@param cio CIO handle
-@param n Number of bytes to read
-@return Returns the value of the n bytes read
-*/
-unsigned int cio_read(opj_cio_t *cio, int n);
-/**
-Skip some bytes
-@param cio CIO handle
-@param n Number of bytes to skip
-*/
-void cio_skip(opj_cio_t *cio, int n);
-/**
-Write some bytes
-@param cio CIO handle
-@param v Signed integer value to write
-@param n Number of bytes to write
-@return Returns the number of bytes written or 0 if an error occurred
-*/
-int cio_write_int(opj_cio_t *cio, int v, int n);
-/**
-Read some bytes
-@param cio CIO handle
-@param n Number of bytes to read
-@return Returns the value of the n bytes read
-*/
-int cio_read_int(opj_cio_t *cio, int n);
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif /* __CIO_H */
-
diff --git a/src/lib/openjp3d/dwt.c b/src/lib/openjp3d/dwt.c
deleted file mode 100644 (file)
index 0867433..0000000
+++ /dev/null
@@ -1,1158 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * Copyrigth (c) 2006, Mónica Díez, LPI-UVA, Spain
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- *  NOTE:
- *  This is a modified version of the openjpeg dwt.c file.
- *  Average speed improvement compared to the original file (measured on
- *  my own machine, a P4 running at 3.0 GHz):
- *  5x3 wavelets about 2 times faster
- *  9x7 wavelets about 3 times faster
- *  for both, encoding and decoding.
- *
- *  The better performance is caused by doing the 1-dimensional DWT
- *  within a temporary buffer where the data can be accessed sequential
- *  for both directions, horizontal and vertical. The 2d vertical DWT was
- *  the major bottleneck in the former version.
- *
- *  I have also removed the "Add Patrick" part because it is not longer
- *  needed.
- *
- *  6/6/2005
- *  -Ive (aka Reiner Wahler)
- *  mail: ive@lilysoft.com
- */
-
-#include "opj_includes.h"
-
-/** @defgroup DWT DWT - Implementation of a discrete wavelet transform */
-/*@{*/
-
-/** @name Local static functions */
-/*@{*/
-/*unsigned int ops;*/
-/**
-Forward lazy transform (horizontal)
-*/
-static void dwt_deinterleave_h(int *a, int *b, int dn, int sn, int cas);
-/**
-Forward lazy transform (vertical)
-*/
-static void dwt_deinterleave_v(int *a, int *b, int dn, int sn, int x, int cas);
-/**
-Forward lazy transform (axial)
-*/
-static void dwt_deinterleave_z(int *a, int *b, int dn, int sn, int xy, int cas);
-/**
-Inverse lazy transform (horizontal)
-*/
-static void dwt_interleave_h(int *a, int *b, int dn, int sn, int cas);
-/**
-Inverse lazy transform (vertical)
-*/
-static void dwt_interleave_v(int *a, int *b, int dn, int sn, int x, int cas);
-/**
-Inverse lazy transform (axial)
-*/
-static void dwt_interleave_z(int *a, int *b, int dn, int sn, int xy, int cas);
-/**
-Forward 5-3 wavelet transform in 1-D
-*/
-static void dwt_encode_53(int *a, int dn, int sn, int cas);
-static void dwt_encode_97(int *a, int dn, int sn, int cas);
-/**
-Inverse 5-3 wavelet transform in 1-D
-*/
-static void dwt_decode_53(int *a, int dn, int sn, int cas);
-static void dwt_decode_97(int *a, int dn, int sn, int cas);
-/**
-Computing of wavelet transform L2 norms for arbitrary transforms
-*/
-static double dwt_calc_wtnorms(int orient, int level[3], int dwtid[3],
-                               opj_wtfilt_t *wtfiltx, opj_wtfilt_t *wtfilty, opj_wtfilt_t *wtfiltz);
-/**
-Encoding of quantification stepsize
-*/
-static void dwt_encode_stepsize(int stepsize, int numbps,
-                                opj_stepsize_t *bandno_stepsize);
-/*@}*/
-
-/*@}*/
-
-#define S(i) a[(i)*2]
-#define D(i) a[(1+(i)*2)]
-#define S_(i) ((i)<0?S(0):((i)>=sn?S(sn-1):S(i)))
-#define D_(i) ((i)<0?D(0):((i)>=dn?D(dn-1):D(i)))
-/* new */
-#define SS_(i) ((i)<0?S(0):((i)>=dn?S(dn-1):S(i)))
-#define DD_(i) ((i)<0?D(0):((i)>=sn?D(sn-1):D(i)))
-
-/* <summary>                                                              */
-/* This table contains the norms of the 5-3 wavelets for different bands. */
-/* </summary>                                                             */
-static double dwt_norm[10][10][10][8];
-static int flagnorm[10][10][10][8];
-
-/*static const double dwt_norms[5][8][10] = {
-    {//ResZ=1
-        {1.000, 1.500, 2.750, 5.375, 10.68, 21.34, 42.67, 85.33, 170.7, 341.3},
-        {1.038, 1.592, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
-        {1.038, 1.592, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
-        {.7186, .9218, 1.586, 3.043, 6.019, 12.01, 24.00, 47.97, 95.93}
-    },{//ResZ=2
-        {1.000, 1.8371, 2.750, 5.375, 10.68, 21.34, 42.67, 85.33, 170.7, 341.3},
-        {1.2717, 1.592, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
-        {1.2717, 1.592, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
-        {.8803, .9218, 1.586, 3.043, 6.019, 12.01, 24.00, 47.97, 95.93},
-        {1.2717},
-        {.8803},
-        {.8803},
-        {.6093},
-    },{ //ResZ=3
-        {1.000, 1.8371, 4.5604, 5.375, 10.68, 21.34, 42.67, 85.33, 170.7, 341.3},
-        {1.2717, 2.6403, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
-        {1.2717, 2.6403, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
-        {.8803, 1.5286, 1.586, 3.043, 6.019, 12.01, 24.00, 47.97, 95.93},
-        {1.2717, 2.6403},
-        {.8803, 1.5286},
-        {.8803, 1.5286},
-        {.6093, 0.8850},
-    },{ //ResZ=4
-        {1.000, 1.8371, 4.5604, 12.4614, 10.68, 21.34, 42.67, 85.33, 170.7, 341.3},
-        {1.2717, 2.6403, 6.7691 , 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
-        {1.2717, 2.6403, 6.7691 , 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
-        {.8803, 1.5286, 3.6770 , 3.043, 6.019, 12.01, 24.00, 47.97, 95.93},
-        {1.2717, 2.6403, 6.7691 },
-        {.8803, 1.5286, 3.6770 },
-        {.8803, 1.5286, 3.6770 },
-        {.6093, 0.8850, 1.9974 },
-    },{ //ResZ=5
-        {1.000, 1.8371, 4.5604, 12.4614, 34.9025, 21.34, 42.67, 85.33, 170.7, 341.3},
-        {1.2717, 2.6403, 6.7691 , 18.6304 , 11.33, 22.64, 45.25, 90.48, 180.9},
-        {1.2717, 2.6403, 6.7691 , 18.6304, 11.33, 22.64, 45.25, 90.48, 180.9},
-        {.8803, 1.5286, 3.6770 , 9.9446, 6.019, 12.01, 24.00, 47.97, 95.93},
-        {1.2717, 2.6403, 6.7691, 18.6304},
-        {.8803, 1.5286, 3.6770, 9.9446 },
-        {.8803, 1.5286, 3.6770, 9.9446 },
-        {.6093, 0.8850, 1.9974, 5.3083 },
-    }
-};*/
-
-/* <summary>                                                              */
-/* This table contains the norms of the 9-7 wavelets for different bands. */
-/* </summary>                                                             */
-/*static const double dwt_norms_real[5][8][10] = {
-    {//ResZ==1
-        {1.000, 1.9659, 4.1224, 8.4167, 16.9356, 33.9249, 67.8772, 135.7680, 271.5430, 543.0894},
-        {1.0113, 1.9968, 4.1834, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196},
-        {1.0113, 1.9968, 4.1834, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196},
-        {0.5202, 0.9672, 2.0793, 4.3005, 8.6867, 17.4188, 34.8608, 69.7332, 139.4722}
-    }, { //ResZ==2
-        {1.000, 2.7564, 4.1224, 8.4167, 16.9356, 33.9249, 67.8772, 135.7680, 271.5430, 543.0894},
-        {1.4179, 1.9968, 4.1834, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196},
-        {1.4179, 1.9968, 4.1834, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196},
-        {0.7294, 0.9672, 2.0793, 4.3005, 8.6867, 17.4188, 34.8608, 69.7332, 139.4722},
-        {1.4179},
-        {0.7294},
-        {0.7294},
-        {0.3752} //HHH
-    },{ //ResZ==3
-        {1.000, 2.7564, 8.3700, 8.4167, 16.9356, 33.9249, 67.8772, 135.7680, 271.5430, 543.0894},
-        {1.4179, 4.0543, 4.1834, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196},
-        {1.4179, 4.0543, 4.1834, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196},
-        {0.7294, 1.9638, 2.0793, 4.3005, 8.6867, 17.4188, 34.8608, 69.7332, 139.4722},
-        {1.4179, 4.0543},
-        {0.7294, 1.9638},
-        {0.7294, 1.9638},
-        {0.3752, 0.9512} //HHH
-    },{ //ResZ==4
-        {1.000, 2.7564, 8.3700, 24.4183, 16.9356, 33.9249, 67.8772, 135.7680, 271.5430, 543.0894},
-        {1.4179, 4.0543, 12.1366, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196},
-        {1.4179, 4.0543, 12.1366, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196},
-        {0.7294, 1.9638, 6.0323, 4.3005, 8.6867, 17.4188, 34.8608, 69.7332, 139.4722},
-        {1.4179, 4.0543, 12.1366},
-        {0.7294, 1.9638, 6.0323},
-        {0.7294, 1.9638, 6.0323},
-        {0.3752, 0.9512, 2.9982} //HHH
-    },{ //ResZ==5
-        {1.000, 2.7564, 8.3700, 24.4183, 69.6947, 33.9249, 67.8772, 135.7680, 271.5430, 543.0894},
-        {1.4179, 4.0543, 12.1366, 35.1203, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196},
-        {1.4179, 4.0543, 12.1366, 35.1203, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196},
-        {0.7294, 1.9638, 6.0323, 17.6977, 8.6867, 17.4188, 34.8608, 69.7332, 139.4722},
-        {1.4179, 4.0543, 12.1366, 35.1203},
-        {0.7294, 1.9638, 6.0323, 17.6977},
-        {0.7294, 1.9638, 6.0323, 17.6977},
-        {0.3752, 0.9512, 2.9982, 8.9182} //HHH
-    }
-};*/
-
-static opj_atk_t atk_info_wt[] = {
-    {0, 1, J3D_ATK_WS, J3D_ATK_IRR, 0, J3D_ATK_WS, 1.230174104, 4, {0}, {0}, {0}, {1, 1, 1, 1}, {-1.586134342059924, -0.052980118572961, 0.882911075530934, 0.443506852043971}}, /* WT 9-7 IRR*/
-    {1, 0, J3D_ATK_WS, J3D_ATK_REV, 0, J3D_ATK_WS, 0, 2, {0}, {1, 2}, {1, 2}, {1, 1}, {-1, 1}}, /* WT 5-3 REV*/
-    {2, 0, J3D_ATK_ARB, J3D_ATK_REV, 0, J3D_ATK_CON, 0, 2, {0, 0}, {0, 1}, {0, 1}, {1, 1}, {{-1}, {1}}}, /* WT 2-2 REV*/
-    {3, 0, J3D_ATK_ARB, J3D_ATK_REV, 1, J3D_ATK_CON, 0, 3, {0, 0, -1}, {0, 1, 2}, {0, 1, 2}, {1, 1, 3}, {{-1}, {1}, {1, 0, -1}}}, /* WT 2-6 REV*/
-    {4, 0, J3D_ATK_ARB, J3D_ATK_REV, 1, J3D_ATK_CON, 0, 3, {0, 0, -2}, {0, 1, 6}, {0, 1, 32}, {1, 1, 5}, {{-1}, {1}, {-3, 22, 0, -22, 3}}}, /* WT 2-10 REV*/
-    {5, 1, J3D_ATK_ARB, J3D_ATK_IRR, 1, J3D_ATK_WS, 1, 7, {0}, {0}, {0}, {1, 1, 2, 1, 2, 1, 3}, {{-1}, {1.58613434206}, {-0.460348209828, 0.460348209828}, {0.25}, {0.374213867768, -0.374213867768}, {-1.33613434206}, {0.29306717103, 0, -0.29306717103}}}, /* WT 6-10 IRR*/
-    {
-        6, 1, J3D_ATK_ARB, J3D_ATK_IRR, 0, J3D_ATK_WS, 1, 11, {0}, {0}, {0}, {1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 5}, {{-1}, {0, 99715069105}, {-1.00573127827, 1.00573127827}, {-0.27040357631}, {2.20509972343, -2.20509972343}, {0.08059995736},
-            {-1.62682532350, 1.62682532350}, {0.52040357631}, {0.60404664250, -0.60404664250}, {-0.82775064841}, {-0.06615812964, 0.29402137720, 0, -0.29402137720, 0.06615812964}
-        }
-    }, /* WT 10-18 IRR*/
-    {7, 1, J3D_ATK_WS, J3D_ATK_IRR, 0, J3D_ATK_WS, 1, 2, {0}, {0}, {0}, {1, 1}, {-0.5, 0.25}},  /* WT 5-3 IRR*/
-    {8, 0, J3D_ATK_WS, J3D_ATK_REV, 0, J3D_ATK_WS, 0, 2, {0}, {4, 4}, {8, 8}, {2, 2}, {{-9, 1}, {5, -1}}} /* WT 13-7 REV*/
-};
-/*
-==========================================================
-   local functions
-==========================================================
-*/
-
-/* <summary>                             */
-/* Forward lazy transform (horizontal).  */
-/* </summary>                            */
-static void dwt_deinterleave_h(int *a, int *b, int dn, int sn, int cas)
-{
-    int i;
-    for (i = 0; i < sn; i++) {
-        b[i] = a[2 * i + cas];
-    }
-    for (i = 0; i < dn; i++) {
-        b[sn + i] = a[(2 * i + 1 - cas)];
-    }
-}
-
-/* <summary>                             */
-/* Forward lazy transform (vertical).    */
-/* </summary>                            */
-static void dwt_deinterleave_v(int *a, int *b, int dn, int sn, int x, int cas)
-{
-    int i;
-    for (i = 0; i < sn; i++) {
-        b[i * x] = a[2 * i + cas];
-    }
-    for (i = 0; i < dn; i++) {
-        b[(sn + i)*x] = a[(2 * i + 1 - cas)];
-    }
-}
-
-/* <summary>                             */
-/* Forward lazy transform (axial).       */
-/* </summary>                            */
-static void dwt_deinterleave_z(int *a, int *b, int dn, int sn, int xy, int cas)
-{
-    int i;
-    for (i = 0; i < sn; i++) {
-        b[i * xy] = a[2 * i + cas];
-    }
-    for (i = 0; i < dn; i++) {
-        b[(sn + i)*xy] = a[(2 * i + 1 - cas)];
-    }
-}
-
-/* <summary>                             */
-/* Inverse lazy transform (horizontal).  */
-/* </summary>                            */
-static void dwt_interleave_h(int *a, int *b, int dn, int sn, int cas)
-{
-    int i;
-    int *ai = NULL;
-    int *bi = NULL;
-    ai = a;
-    bi = b + cas;
-    for (i = 0; i < sn; i++) {
-        *bi = *ai;
-        bi += 2;
-        ai++;
-    }
-    ai = a + sn;
-    bi = b + 1 - cas;
-    for (i = 0; i < dn; i++) {
-        *bi = *ai;
-        bi += 2;
-        ai++;
-    }
-}
-
-/* <summary>                             */
-/* Inverse lazy transform (vertical).    */
-/* </summary>                            */
-static void dwt_interleave_v(int *a, int *b, int dn, int sn, int x, int cas)
-{
-    int i;
-    int *ai = NULL;
-    int *bi = NULL;
-    ai = a;
-    bi = b + cas;
-    for (i = 0; i < sn; i++) {
-        *bi = *ai;
-        bi += 2;
-        ai += x;
-    }
-    ai = a + (sn * x);
-    bi = b + 1 - cas;
-    for (i = 0; i < dn; i++) {
-        *bi = *ai;
-        bi += 2;
-        ai += x;
-    }
-}
-
-/* <summary>                             */
-/* Inverse lazy transform (axial).  */
-/* </summary>                            */
-static void dwt_interleave_z(int *a, int *b, int dn, int sn, int xy, int cas)
-{
-    int i;
-    int *ai = NULL;
-    int *bi = NULL;
-    ai = a;
-    bi = b + cas;
-    for (i = 0; i < sn; i++) {
-        *bi = *ai;
-        bi += 2;
-        ai += xy;
-    }
-    ai = a + (sn * xy);
-    bi = b + 1 - cas;
-    for (i = 0; i < dn; i++) {
-        *bi = *ai;
-        bi += 2;
-        ai += xy;
-    }
-}
-
-
-/* <summary>                            */
-/* Forward 5-3 or 9-7 wavelet transform in 1-D. */
-/* </summary>                           */
-static void dwt_encode_53(int *a, int dn, int sn, int cas)
-{
-    int i;
-
-    if (!cas) {
-        if ((dn > 0) || (sn > 1)) { /* NEW :  CASE ONE ELEMENT */
-            /*for (i = 0; i < dn; i++) D(i) -= (S_(i) + S_(i + 1)) >> 1;*/
-            /*for (i = 0; i < sn; i++) S(i) += (D_(i - 1) + D_(i) + 2) >> 2;*/
-            for (i = 0; i < dn; i++) {
-                D(i) -= (S_(i) + S_(i + 1)) >> 1;
-                /*ops += 2;*/
-            }
-            for (i = 0; i < sn; i++) {
-                S(i) += (D_(i - 1) + D_(i) + 2) >> 2;
-                /*ops += 3;*/
-            }
-        }
-    } else {
-        /*if (!sn && dn == 1)
-            S(0) *= 2;
-        else {
-            for (i = 0; i < dn; i++) S(i) -= (DD_(i) + DD_(i - 1)) >> 1;
-            for (i = 0; i < sn; i++) D(i) += (SS_(i) + SS_(i + 1) + 2) >> 2;
-        }*/
-        if (!sn && dn == 1) {
-            S(0) *= 2;
-            /*ops++;*/
-        } else {
-            for (i = 0; i < dn; i++) {
-                S(i) -= (DD_(i) + DD_(i - 1)) >> 1;
-                /*  ops += 2;*/
-            }
-            for (i = 0; i < sn; i++) {
-                D(i) += (SS_(i) + SS_(i + 1) + 2) >> 2;
-                /*  ops += 3;*/
-            }
-        }
-    }
-}
-static void dwt_encode_97(int *a, int dn, int sn, int cas)
-{
-    int i;
-
-    if (!cas) {
-        if ((dn > 0) || (sn > 1)) { /* NEW :  CASE ONE ELEMENT */
-            for (i = 0; i < dn; i++) {
-                D(i) -= fix_mul(S_(i) + S_(i + 1), 12993);
-            }
-            for (i = 0; i < sn; i++) {
-                S(i) -= fix_mul(D_(i - 1) + D_(i), 434);
-            }
-            for (i = 0; i < dn; i++) {
-                D(i) += fix_mul(S_(i) + S_(i + 1), 7233);
-            }
-            for (i = 0; i < sn; i++) {
-                S(i) += fix_mul(D_(i - 1) + D_(i), 3633);
-            }
-            for (i = 0; i < dn; i++) {
-                D(i) = fix_mul(D(i), 5038);    /*5038 */
-            }
-            for (i = 0; i < sn; i++) {
-                S(i) = fix_mul(S(i), 6659);    /*6660 */
-            }
-        }
-    } else {
-        if ((sn > 0) || (dn > 1)) { /* NEW :  CASE ONE ELEMENT */
-            for (i = 0; i < dn; i++) {
-                S(i) -= fix_mul(DD_(i) + DD_(i - 1), 12993);
-            }
-            for (i = 0; i < sn; i++) {
-                D(i) -= fix_mul(SS_(i) + SS_(i + 1), 434);
-            }
-            for (i = 0; i < dn; i++) {
-                S(i) += fix_mul(DD_(i) + DD_(i - 1), 7233);
-            }
-            for (i = 0; i < sn; i++) {
-                D(i) += fix_mul(SS_(i) + SS_(i + 1), 3633);
-            }
-            for (i = 0; i < dn; i++) {
-                S(i) = fix_mul(S(i), 5038);    /*5038 */
-            }
-            for (i = 0; i < sn; i++) {
-                D(i) = fix_mul(D(i), 6659);    /*6660 */
-            }
-        }
-    }
-}
-/* <summary>                            */
-/* Inverse 5-3 or 9-7 wavelet transform in 1-D. */
-/* </summary>                           */
-static void dwt_decode_53(int *a, int dn, int sn, int cas)
-{
-    int i;
-    if (!cas) {
-        if ((dn > 0) || (sn > 1)) { /* NEW :  CASE ONE ELEMENT */
-            for (i = 0; i < sn; i++) {
-                S(i) -= (D_(i - 1) + D_(i) + 2) >> 2;
-            }
-            for (i = 0; i < dn; i++) {
-                D(i) += (S_(i) + S_(i + 1)) >> 1;
-            }
-        }
-    } else {
-        if (!sn  && dn == 1) {        /* NEW :  CASE ONE ELEMENT */
-            S(0) /= 2;
-        } else {
-            for (i = 0; i < sn; i++) {
-                D(i) -= (SS_(i) + SS_(i + 1) + 2) >> 2;
-            }
-            for (i = 0; i < dn; i++) {
-                S(i) += (DD_(i) + DD_(i - 1)) >> 1;
-            }
-        }
-    }
-}
-static void dwt_decode_97(int *a, int dn, int sn, int cas)
-{
-    int i;
-
-    if (!cas) {
-        if ((dn > 0) || (sn > 1)) { /* NEW :  CASE ONE ELEMENT */
-            for (i = 0; i < sn; i++) {
-                S(i) = fix_mul(S(i), 10078);    /* 10076 */
-            }
-            for (i = 0; i < dn; i++) {
-                D(i) = fix_mul(D(i), 13318);    /* 13320 */
-            }
-            for (i = 0; i < sn; i++) {
-                S(i) -= fix_mul(D_(i - 1) + D_(i), 3633);
-            }
-            for (i = 0; i < dn; i++) {
-                D(i) -= fix_mul(S_(i) + S_(i + 1), 7233);
-            }
-            for (i = 0; i < sn; i++) {
-                S(i) += fix_mul(D_(i - 1) + D_(i), 434);
-            }
-            for (i = 0; i < dn; i++) {
-                D(i) += fix_mul(S_(i) + S_(i + 1), 12994);    /* 12993 */
-            }
-        }
-    } else {
-        if ((sn > 0) || (dn > 1)) { /* NEW :  CASE ONE ELEMENT */
-            for (i = 0; i < sn; i++) {
-                D(i) = fix_mul(D(i), 10078);    /* 10076 */
-            }
-            for (i = 0; i < dn; i++) {
-                S(i) = fix_mul(S(i), 13318);    /* 13320 */
-            }
-            for (i = 0; i < sn; i++) {
-                D(i) -= fix_mul(SS_(i) + SS_(i + 1), 3633);
-            }
-            for (i = 0; i < dn; i++) {
-                S(i) -= fix_mul(DD_(i) + DD_(i - 1), 7233);
-            }
-            for (i = 0; i < sn; i++) {
-                D(i) += fix_mul(SS_(i) + SS_(i + 1), 434);
-            }
-            for (i = 0; i < dn; i++) {
-                S(i) += fix_mul(DD_(i) + DD_(i - 1), 12994);    /* 12993 */
-            }
-        }
-    }
-}
-
-
-/* <summary>                */
-/* Get norm of arbitrary wavelet transform. */
-/* </summary>               */
-static int upandconv(double *nXPS, double *LPS, int lenXPS, int lenLPS)
-{
-    /* Perform the convolution of the vectors. */
-    int i, j;
-    double *tmp = (double *)opj_malloc(2 * lenXPS * sizeof(double));
-    /*Upsample*/
-    memset(tmp, 0, 2 * lenXPS * sizeof(double));
-    for (i = 0; i < lenXPS; i++) {
-        *(tmp + 2 * i) = *(nXPS + i);
-        *(nXPS + i) = 0;
-    }
-    /*Convolution*/
-    for (i = 0; i < 2 * lenXPS; i++) {
-        for (j = 0; j < lenLPS; j++) {
-            *(nXPS + i + j) = *(nXPS + i + j) + *(tmp + i) * *(LPS + j);
-            /*fprintf(stdout,"*(tmp + %d) * *(LPS + %d) = %f * %f \n",i,j,*(tmp + i),*(LPS + j));*/
-        }
-    }
-    free(tmp);
-    return 2 * lenXPS + lenLPS - 1;
-}
-
-static double dwt_calc_wtnorms(int orient, int level[3], int dwtid[3],
-                               opj_wtfilt_t *wtfiltX,  opj_wtfilt_t *wtfiltY,  opj_wtfilt_t *wtfiltZ)
-{
-    int i, lenLPS, lenHPS;
-    double  Lx = 0, Ly = 0, Hx = 0, Hy = 0, Lz = 0, Hz = 0;
-    double *nLPSx, *nHPSx, *nLPSy, *nHPSy, *nLPSz, *nHPSz;
-    int levelx, levely, levelz;
-
-    levelx = (orient == 0) ? level[0] - 1 : level[0];
-    levely = (orient == 0) ? level[1] - 1 : level[1];
-    levelz = (orient == 0) ? level[2] - 1 : level[2];
-
-    /*X axis*/
-    lenLPS = wtfiltX->lenLPS;
-    lenHPS = wtfiltX->lenHPS;
-    for (i = 0; i < levelx; i++) {
-        lenLPS *= 2;
-        lenHPS *= 2;
-        lenLPS += wtfiltX->lenLPS - 1;
-        lenHPS += wtfiltX->lenLPS - 1;
-    }
-    nLPSx = (double *)opj_malloc(lenLPS * sizeof(double));
-    nHPSx = (double *)opj_malloc(lenHPS * sizeof(double));
-
-    memcpy(nLPSx, wtfiltX->LPS, wtfiltX->lenLPS * sizeof(double));
-    memcpy(nHPSx, wtfiltX->HPS, wtfiltX->lenHPS * sizeof(double));
-    lenLPS = wtfiltX->lenLPS;
-    lenHPS = wtfiltX->lenHPS;
-    for (i = 0; i < levelx; i++) {
-        lenLPS = upandconv(nLPSx, wtfiltX->LPS, lenLPS, wtfiltX->lenLPS);
-        lenHPS = upandconv(nHPSx, wtfiltX->LPS, lenHPS, wtfiltX->lenLPS);
-    }
-    for (i = 0; i < lenLPS; i++) {
-        Lx += nLPSx[i] * nLPSx[i];
-    }
-    for (i = 0; i < lenHPS; i++) {
-        Hx += nHPSx[i] * nHPSx[i];
-    }
-    Lx = sqrt(Lx);
-    Hx = sqrt(Hx);
-    free(nLPSx);
-    free(nHPSx);
-
-    /*Y axis*/
-    if (dwtid[0] != dwtid[1] || level[0] != level[1]) {
-        lenLPS = wtfiltY->lenLPS;
-        lenHPS = wtfiltY->lenHPS;
-        for (i = 0; i < levely; i++) {
-            lenLPS *= 2;
-            lenHPS *= 2;
-            lenLPS += wtfiltY->lenLPS - 1;
-            lenHPS += wtfiltY->lenLPS - 1;
-        }
-        nLPSy = (double *)opj_malloc(lenLPS * sizeof(double));
-        nHPSy = (double *)opj_malloc(lenHPS * sizeof(double));
-
-        memcpy(nLPSy, wtfiltY->LPS, wtfiltY->lenLPS * sizeof(double));
-        memcpy(nHPSy, wtfiltY->HPS, wtfiltY->lenHPS * sizeof(double));
-        lenLPS = wtfiltY->lenLPS;
-        lenHPS = wtfiltY->lenHPS;
-        for (i = 0; i < levely; i++) {
-            lenLPS = upandconv(nLPSy, wtfiltY->LPS, lenLPS, wtfiltY->lenLPS);
-            lenHPS = upandconv(nHPSy, wtfiltY->LPS, lenHPS, wtfiltY->lenLPS);
-        }
-        for (i = 0; i < lenLPS; i++) {
-            Ly += nLPSy[i] * nLPSy[i];
-        }
-        for (i = 0; i < lenHPS; i++) {
-            Hy += nHPSy[i] * nHPSy[i];
-        }
-        Ly = sqrt(Ly);
-        Hy = sqrt(Hy);
-        free(nLPSy);
-        free(nHPSy);
-    } else {
-        Ly = Lx;
-        Hy = Hx;
-    }
-    /*Z axis*/
-    if (levelz >= 0) {
-        lenLPS = wtfiltZ->lenLPS;
-        lenHPS = wtfiltZ->lenHPS;
-        for (i = 0; i < levelz; i++) {
-            lenLPS *= 2;
-            lenHPS *= 2;
-            lenLPS += wtfiltZ->lenLPS - 1;
-            lenHPS += wtfiltZ->lenLPS - 1;
-        }
-        nLPSz = (double *)opj_malloc(lenLPS * sizeof(double));
-        nHPSz = (double *)opj_malloc(lenHPS * sizeof(double));
-
-        memcpy(nLPSz, wtfiltZ->LPS, wtfiltZ->lenLPS * sizeof(double));
-        memcpy(nHPSz, wtfiltZ->HPS, wtfiltZ->lenHPS * sizeof(double));
-        lenLPS = wtfiltZ->lenLPS;
-        lenHPS = wtfiltZ->lenHPS;
-        for (i = 0; i < levelz; i++) {
-            lenLPS = upandconv(nLPSz, wtfiltZ->LPS, lenLPS, wtfiltZ->lenLPS);
-            lenHPS = upandconv(nHPSz, wtfiltZ->LPS, lenHPS, wtfiltZ->lenLPS);
-        }
-        for (i = 0; i < lenLPS; i++) {
-            Lz += nLPSz[i] * nLPSz[i];
-        }
-        for (i = 0; i < lenHPS; i++) {
-            Hz += nHPSz[i] * nHPSz[i];
-        }
-        Lz = sqrt(Lz);
-        Hz = sqrt(Hz);
-        free(nLPSz);
-        free(nHPSz);
-    } else {
-        Lz = 1.0;
-        Hz = 1.0;
-    }
-    switch (orient) {
-    case 0:
-        return Lx * Ly * Lz;
-    case 1:
-        return Lx * Hy * Lz;
-    case 2:
-        return Hx * Ly * Lz;
-    case 3:
-        return Hx * Hy * Lz;
-    case 4:
-        return Lx * Ly * Hz;
-    case 5:
-        return Lx * Hy * Hz;
-    case 6:
-        return Hx * Ly * Hz;
-    case 7:
-        return Hx * Hy * Hz;
-    default:
-        return -1;
-    }
-
-}
-static void dwt_getwtfilters(opj_wtfilt_t *wtfilt, int dwtid)
-{
-    if (dwtid == 0) { /*DWT 9-7 */
-        wtfilt->lenLPS = 7;
-        wtfilt->lenHPS = 9;
-        wtfilt->LPS = (double *)opj_malloc(wtfilt->lenLPS * sizeof(double));
-        wtfilt->HPS = (double *)opj_malloc(wtfilt->lenHPS * sizeof(double));
-        wtfilt->LPS[0] = -0.091271763114;
-        wtfilt->HPS[0] = 0.026748757411;
-        wtfilt->LPS[1] = -0.057543526228;
-        wtfilt->HPS[1] = 0.016864118443;
-        wtfilt->LPS[2] = 0.591271763114;
-        wtfilt->HPS[2] = -0.078223266529;
-        wtfilt->LPS[3] = 1.115087052457;
-        wtfilt->HPS[3] = -0.266864118443;
-        wtfilt->LPS[4] = 0.591271763114;
-        wtfilt->HPS[4] = 0.602949018236;
-        wtfilt->LPS[5] = -0.057543526228;
-        wtfilt->HPS[5] = -0.266864118443;
-        wtfilt->LPS[6] = -0.091271763114;
-        wtfilt->HPS[6] = -0.078223266529;
-        wtfilt->HPS[7] = 0.016864118443;
-        wtfilt->HPS[8] = 0.026748757411;
-    } else if (dwtid == 1) { /*DWT 5-3 */
-        wtfilt->lenLPS = 3;
-        wtfilt->lenHPS = 5;
-        wtfilt->LPS = (double *)opj_malloc(wtfilt->lenLPS * sizeof(double));
-        wtfilt->HPS = (double *)opj_malloc(wtfilt->lenHPS * sizeof(double));
-        wtfilt->LPS[0] = 0.5;
-        wtfilt->HPS[0] = -0.125;
-        wtfilt->LPS[1] = 1;
-        wtfilt->HPS[1] = -0.25;
-        wtfilt->LPS[2] = 0.5;
-        wtfilt->HPS[2] = 0.75;
-        wtfilt->HPS[3] = -0.25;
-        wtfilt->HPS[4] = -0.125;
-    } else {
-        fprintf(stdout,
-                "[ERROR] Sorry, this wavelet hasn't been implemented so far ... Try another one :-)\n");
-        exit(1);
-    }
-}
-/* <summary>                            */
-/* Encoding of quantization stepsize for each subband. */
-/* </summary>                           */
-static void dwt_encode_stepsize(int stepsize, int numbps,
-                                opj_stepsize_t *bandno_stepsize)
-{
-    int p, n;
-    p = int_floorlog2(stepsize) - 13;
-    n = 11 - int_floorlog2(stepsize);
-    bandno_stepsize->mant = (n < 0 ? stepsize >> -n : stepsize << n) & 0x7ff;
-    bandno_stepsize->expn = numbps - p;
-    /*if J3D_CCP_QNTSTY_NOQNT --> stepsize = 8192.0 --> p = 0, n = -2 --> mant = 0; expn = (prec+gain)*/
-    /*else --> bandno_stepsize = (1<<(numbps - expn)) + (1<<(numbps - expn - 11)) * Ub*/
-}
-
-/*
-==========================================================
-   DWT interface
-==========================================================
-*/
-/* <summary>                            */
-/* Forward 5-3 wavelet transform in 3-D. */
-/* </summary>                           */
-void dwt_encode(opj_tcd_tilecomp_t * tilec, int dwtid[3])
-{
-    int i, j, k;
-    int x, y, z;
-    int w, h, wh, d;
-    int level, levelx, levely, levelz, diff;
-    int *a = NULL;
-    int *aj = NULL;
-    int *bj = NULL;
-    int *cj = NULL;
-
-    /*ops = 0;*/
-
-    memset(flagnorm, 0, 8000 * sizeof(int));
-    w = tilec->x1 - tilec->x0;
-    h = tilec->y1 - tilec->y0;
-    d = tilec->z1 - tilec->z0;
-    wh = w * h;
-    levelx = tilec->numresolution[0] - 1;
-    levely = tilec->numresolution[1] - 1;
-    levelz = tilec->numresolution[2] - 1;
-    level = int_max(levelx, int_max(levely, levelz));
-    diff = tilec->numresolution[0] - tilec->numresolution[2];
-
-    a = tilec->data;
-
-    for (x = 0, y = 0, z = 0; (x < levelx) && (y < levely); x++, y++, z++) {
-        int rw;         /* width of the resolution level computed                                                           */
-        int rh;         /* heigth of the resolution level computed                                                          */
-        int rd;         /* depth of the resolution level computed                                                          */
-        int rw1;        /* width of the resolution level once lower than computed one                                       */
-        int rh1;        /* height of the resolution level once lower than computed one                                      */
-        int rd1;        /* depth of the resolution level once lower than computed one                                      */
-        int cas_col;    /* 0 = non inversion on horizontal filtering 1 = inversion between low-pass and high-pass filtering */
-        int cas_row;    /* 0 = non inversion on vertical filtering 1 = inversion between low-pass and high-pass filtering   */
-        int cas_axl;    /* 0 = non inversion on axial filtering 1 = inversion between low-pass and high-pass filtering   */
-        int dn, sn;
-
-        rw = tilec->resolutions[level - x].x1 - tilec->resolutions[level - x].x0;
-        rh = tilec->resolutions[level - y].y1 - tilec->resolutions[level - y].y0;
-        rd = tilec->resolutions[level - z].z1 - tilec->resolutions[level - z].z0;
-        rw1 = tilec->resolutions[level - x - 1].x1 - tilec->resolutions[level - x -
-                1].x0;
-        rh1 = tilec->resolutions[level - y - 1].y1 - tilec->resolutions[level - y -
-                1].y0;
-        rd1 = tilec->resolutions[level - z - 1].z1 - tilec->resolutions[level - z -
-                1].z0;
-
-        cas_col = tilec->resolutions[level - x].x0 %
-                  2; /* 0 = non inversion on horizontal filtering 1 = inversion between low-pass and high-pass filtering */
-        cas_row = tilec->resolutions[level - y].y0 %
-                  2; /* 0 = non inversion on vertical filtering 1 = inversion between low-pass and high-pass filtering   */
-        cas_axl = tilec->resolutions[level - z].z0 % 2;
-
-        /*fprintf(stdout," x %d y %d z %d \n",x,y,z);
-        fprintf(stdout," levelx %d levely %d levelz %d \n",levelx,levely,levelz);
-        fprintf(stdout," z1 %d z0 %d\n",tilec->resolutions[level - z].z1,tilec->resolutions[level - z].z0);
-        fprintf(stdout," rw %d rh %d rd %d \n rw1 %d rh1 %d rd1 %d \n",rw,rh,rd,rw1,rh1,rd1);*/
-
-        for (i = 0; i < rd; i++) {
-
-            cj = a + (i * wh);
-
-            /*Horizontal*/
-            sn = rw1;
-            dn = rw - rw1;
-            bj = (int*)opj_malloc(rw * sizeof(int));
-            if (dwtid[0] == 0) {
-                for (j = 0; j < rh; j++) {
-                    aj = cj + j * w;
-                    for (k = 0; k < rw; k++) {
-                        bj[k] = aj[k];
-                    }
-                    dwt_encode_97(bj, dn, sn, cas_row);
-                    dwt_deinterleave_h(bj, aj, dn, sn, cas_row);
-                }
-            } else if (dwtid[0] == 1) {
-                for (j = 0; j < rh; j++) {
-                    aj = cj + j * w;
-                    for (k = 0; k < rw; k++) {
-                        bj[k] = aj[k];
-                    }
-                    dwt_encode_53(bj, dn, sn, cas_row);
-                    dwt_deinterleave_h(bj, aj, dn, sn, cas_row);
-                }
-            }
-            opj_free(bj);
-
-            /*Vertical*/
-            sn = rh1;
-            dn = rh - rh1;
-            bj = (int*)opj_malloc(rh * sizeof(int));
-            if (dwtid[1] == 0) { /*DWT 9-7*/
-                for (j = 0; j < rw; j++) {
-                    aj = cj + j;
-                    for (k = 0; k < rh; k++) {
-                        bj[k] = aj[k * w];
-                    }
-                    dwt_encode_97(bj, dn, sn, cas_col);
-                    dwt_deinterleave_v(bj, aj, dn, sn, w, cas_col);
-                }
-            } else if (dwtid[1] == 1) { /*DWT 5-3*/
-                for (j = 0; j < rw; j++) {
-                    aj = cj + j;
-                    for (k = 0; k < rh; k++) {
-                        bj[k] = aj[k * w];
-                    }
-                    dwt_encode_53(bj, dn, sn, cas_col);
-                    dwt_deinterleave_v(bj, aj, dn, sn, w, cas_col);
-                }
-            }
-            opj_free(bj);
-        }
-
-        if (z < levelz) {
-            /*Axial fprintf(stdout,"Axial DWT Transform %d %d %d\n",z,rd,rd1);*/
-            sn = rd1;
-            dn = rd - rd1;
-            bj = (int*)opj_malloc(rd * sizeof(int));
-            if (dwtid[2] == 0) {
-                for (j = 0; j < (rw * rh); j++) {
-                    aj = a + j;
-                    for (k = 0; k < rd; k++) {
-                        bj[k] = aj[k * wh];
-                    }
-                    dwt_encode_97(bj, dn, sn, cas_axl);
-                    dwt_deinterleave_z(bj, aj, dn, sn, wh, cas_axl);
-                }
-            } else if (dwtid[2] == 1) {
-                for (j = 0; j < (rw * rh); j++) {
-                    aj = a + j;
-                    for (k = 0; k < rd; k++) {
-                        bj[k] = aj[k * wh];
-                    }
-                    dwt_encode_53(bj, dn, sn, cas_axl);
-                    dwt_deinterleave_z(bj, aj, dn, sn, wh, cas_axl);
-                }
-            }
-            opj_free(bj);
-        }
-    }
-
-    /*fprintf(stdout,"[INFO] Ops: %d \n",ops);*/
-}
-
-
-/* <summary>                            */
-/* Inverse 5-3 wavelet transform in 3-D. */
-/* </summary>                           */
-void dwt_decode(opj_tcd_tilecomp_t * tilec, int stops[3], int dwtid[3])
-{
-    int i, j, k;
-    int x, y, z;
-    int w, h, wh, d;
-    int level, levelx, levely, levelz, diff;
-    int *a = NULL;
-    int *aj = NULL;
-    int *bj = NULL;
-    int *cj = NULL;
-
-    a = tilec->data;
-
-    w = tilec->x1 - tilec->x0;
-    h = tilec->y1 - tilec->y0;
-    d = tilec->z1 - tilec->z0;
-    wh = w * h;
-    levelx = tilec->numresolution[0] - 1;
-    levely = tilec->numresolution[1] - 1;
-    levelz = tilec->numresolution[2] - 1;
-    level = int_max(levelx, int_max(levely, levelz));
-    diff = tilec->numresolution[0] - tilec->numresolution[2];
-
-    /* General lifting framework -- DCCS-LIWT */
-    for (x = level - 1, y = level - 1, z = level - 1; (x >= stops[0]) &&
-            (y >= stops[1]); x--, y--, z--) {
-        int rw;         /* width of the resolution level computed                                                           */
-        int rh;         /* heigth of the resolution level computed                                                          */
-        int rd;         /* depth of the resolution level computed                                                          */
-        int rw1;        /* width of the resolution level once lower than computed one                                       */
-        int rh1;        /* height of the resolution level once lower than computed one                                      */
-        int rd1;        /* depth of the resolution level once lower than computed one                                      */
-        int cas_col;    /* 0 = non inversion on horizontal filtering 1 = inversion between low-pass and high-pass filtering */
-        int cas_row;    /* 0 = non inversion on vertical filtering 1 = inversion between low-pass and high-pass filtering   */
-        int cas_axl;    /* 0 = non inversion on axial filtering 1 = inversion between low-pass and high-pass filtering   */
-        int dn, sn;
-
-        rw = tilec->resolutions[level - x].x1 - tilec->resolutions[level - x].x0;
-        rh = tilec->resolutions[level - y].y1 - tilec->resolutions[level - y].y0;
-        rd = tilec->resolutions[level - z].z1 - tilec->resolutions[level - z].z0;
-        rw1 = tilec->resolutions[level - x - 1].x1 - tilec->resolutions[level - x -
-                1].x0;
-        rh1 = tilec->resolutions[level - y - 1].y1 - tilec->resolutions[level - y -
-                1].y0;
-        rd1 = tilec->resolutions[level - z - 1].z1 - tilec->resolutions[level - z -
-                1].z0;
-
-        cas_col = tilec->resolutions[level - x].x0 %
-                  2; /* 0 = non inversion on horizontal filtering 1 = inversion between low-pass and high-pass filtering */
-        cas_row = tilec->resolutions[level - y].y0 %
-                  2; /* 0 = non inversion on vertical filtering 1 = inversion between low-pass and high-pass filtering   */
-        cas_axl = tilec->resolutions[level - z].z0 % 2;
-
-        /*fprintf(stdout," x %d y %d z %d \n",x,y,z);
-        fprintf(stdout," levelx %d levely %d levelz %d \n",levelx,levely,levelz);
-        fprintf(stdout," dwtid[0] %d [1] %d [2] %d \n",dwtid[0],dwtid[1],dwtid[2]);
-        fprintf(stdout," rw %d rh %d rd %d \n rw1 %d rh1 %d rd1 %d \n",rw,rh,rd,rw1,rh1,rd1);
-        fprintf(stdout,"IDWT Transform %d %d %d %d\n",level, z, rd,rd1);*/
-
-        if (z >= stops[2] && rd != rd1) {
-            /*fprintf(stdout,"Axial Transform %d %d %d %d\n",levelz, z, rd,rd1);*/
-            sn = rd1;
-            dn = rd - rd1;
-            bj = (int*)opj_malloc(rd * sizeof(int));
-            if (dwtid[2] == 0) {
-                for (j = 0; j < (rw * rh); j++) {
-                    aj = a + j;
-                    dwt_interleave_z(aj, bj, dn, sn, wh, cas_axl);
-                    dwt_decode_97(bj, dn, sn, cas_axl);
-                    for (k = 0; k < rd; k++) {
-                        aj[k * wh] = bj[k];
-                    }
-                }
-            } else if (dwtid[2] == 1) {
-                for (j = 0; j < (rw * rh); j++) {
-                    aj = a + j;
-                    dwt_interleave_z(aj, bj, dn, sn, wh, cas_axl);
-                    dwt_decode_53(bj, dn, sn, cas_axl);
-                    for (k = 0; k < rd; k++) {
-                        aj[k * wh] = bj[k];
-                    }
-                }
-            }
-            opj_free(bj);
-        }
-
-        for (i = 0; i < rd; i++) {
-            /*Fetch corresponding slice for doing DWT-2D*/
-            cj = tilec->data + (i * wh);
-
-            /*Vertical*/
-            sn = rh1;
-            dn = rh - rh1;
-            bj = (int*)opj_malloc(rh * sizeof(int));
-            if (dwtid[1] == 0) {
-                for (j = 0; j < rw; j++) {
-                    aj = cj + j;
-                    dwt_interleave_v(aj, bj, dn, sn, w, cas_col);
-                    dwt_decode_97(bj, dn, sn, cas_col);
-                    for (k = 0; k < rh; k++) {
-                        aj[k * w] = bj[k];
-                    }
-                }
-            } else if (dwtid[1] == 1) {
-                for (j = 0; j < rw; j++) {
-                    aj = cj + j;
-                    dwt_interleave_v(aj, bj, dn, sn, w, cas_col);
-                    dwt_decode_53(bj, dn, sn, cas_col);
-                    for (k = 0; k < rh; k++) {
-                        aj[k * w] = bj[k];
-                    }
-                }
-            }
-            opj_free(bj);
-
-            /*Horizontal*/
-            sn = rw1;
-            dn = rw - rw1;
-            bj = (int*)opj_malloc(rw * sizeof(int));
-            if (dwtid[0] == 0) {
-                for (j = 0; j < rh; j++) {
-                    aj = cj + j * w;
-                    dwt_interleave_h(aj, bj, dn, sn, cas_row);
-                    dwt_decode_97(bj, dn, sn, cas_row);
-                    for (k = 0; k < rw; k++) {
-                        aj[k] = bj[k];
-                    }
-                }
-            } else if (dwtid[0] == 1) {
-                for (j = 0; j < rh; j++) {
-                    aj = cj + j * w;
-                    dwt_interleave_h(aj, bj, dn, sn, cas_row);
-                    dwt_decode_53(bj, dn, sn, cas_row);
-                    for (k = 0; k < rw; k++) {
-                        aj[k] = bj[k];
-                    }
-                }
-            }
-            opj_free(bj);
-
-        }
-
-    }
-
-}
-
-
-/* <summary>                          */
-/* Get gain of wavelet transform. */
-/* </summary>                         */
-int dwt_getgain(int orient, int reversible)
-{
-    if (reversible == 1) {
-        if (orient == 0) {
-            return 0;
-        } else if (orient == 1 || orient == 2 || orient == 4) {
-            return 1;
-        } else if (orient == 3 || orient == 5 || orient == 6) {
-            return 2;
-        } else {
-            return 3;
-        }
-    }
-    /*else if (reversible == 0){*/
-    return 0;
-}
-
-/* <summary>                */
-/* Get norm of wavelet transform. */
-/* </summary>               */
-double dwt_getnorm(int orient, int level[3], int dwtid[3])
-{
-    int levelx = level[0];
-    int levely = level[1];
-    int levelz = (level[2] < 0) ? 0 : level[2];
-    double norm;
-
-    if (flagnorm[levelx][levely][levelz][orient] == 1) {
-        norm = dwt_norm[levelx][levely][levelz][orient];
-        /*fprintf(stdout,"[INFO] Level: %d %d %d Orient %d Dwt_norm: %f \n",level[0],level[1],level[2],orient,norm);*/
-    } else {
-        opj_wtfilt_t *wtfiltx = (opj_wtfilt_t *) opj_malloc(sizeof(opj_wtfilt_t));
-        opj_wtfilt_t *wtfilty = (opj_wtfilt_t *) opj_malloc(sizeof(opj_wtfilt_t));
-        opj_wtfilt_t *wtfiltz = (opj_wtfilt_t *) opj_malloc(sizeof(opj_wtfilt_t));
-        /*Fetch equivalent filters for each dimension*/
-        dwt_getwtfilters(wtfiltx, dwtid[0]);
-        dwt_getwtfilters(wtfilty, dwtid[1]);
-        dwt_getwtfilters(wtfiltz, dwtid[2]);
-        /*Calculate the corresponding norm */
-        norm = dwt_calc_wtnorms(orient, level, dwtid, wtfiltx, wtfilty, wtfiltz);
-        /*Save norm in array (no recalculation)*/
-        dwt_norm[levelx][levely][levelz][orient] = norm;
-        flagnorm[levelx][levely][levelz][orient] = 1;
-        /*Free reserved space*/
-        opj_free(wtfiltx->LPS);
-        opj_free(wtfilty->LPS);
-        opj_free(wtfiltz->LPS);
-        opj_free(wtfiltx->HPS);
-        opj_free(wtfilty->HPS);
-        opj_free(wtfiltz->HPS);
-        opj_free(wtfiltx);
-        opj_free(wtfilty);
-        opj_free(wtfiltz);
-        /*fprintf(stdout,"[INFO] Dwtid: %d %d %d Level: %d %d %d Orient %d Norm: %f \n",dwtid[0],dwtid[1],dwtid[2],level[0],level[1],level[2],orient,norm);*/
-    }
-    return norm;
-}
-/* <summary>                                */
-/* Calculate explicit stepsizes for DWT.    */
-/* </summary>                               */
-void dwt_calc_explicit_stepsizes(opj_tccp_t * tccp, int prec)
-{
-    int totnumbands, bandno, diff;
-
-    assert(tccp->numresolution[0] >= tccp->numresolution[2]);
-    diff = tccp->numresolution[0] -
-           tccp->numresolution[2];     /*if RESx=RESy != RESz */
-    totnumbands = (7 * tccp->numresolution[0] - 6) - 4 * diff; /* 3-D */
-
-    for (bandno = 0; bandno < totnumbands; bandno++) {
-        double stepsize;
-        int resno, level[3], orient, gain;
-
-        /* Bandno:  0 - LLL     1 - LHL
-                    2 - HLL     3 - HHL
-                    4 - LLH     5 - LHH
-                    6 - HLH     7 - HHH */
-
-        resno = (bandno == 0) ? 0 : ((bandno <= 3 * diff) ? ((bandno - 1) / 3 + 1) : ((
-                                         bandno + 4 * diff - 1) / 7 + 1));
-        orient = (bandno == 0) ? 0 : ((bandno <= 3 * diff) ? ((bandno - 1) % 3 + 1) : ((
-                                          bandno + 4 * diff - 1) % 7 + 1));
-        level[0] = tccp->numresolution[0] - 1 - resno;
-        level[1] = tccp->numresolution[1] - 1 - resno;
-        level[2] = tccp->numresolution[2] - 1 - resno;
-
-        /* Gain:    0 - LLL     1 - LHL
-                    1 - HLL     2 - HHL
-                    1 - LLH     2 - LHH
-                    2 - HLH     3 - HHH     */
-        gain = (tccp->reversible == 0) ? 0 : ((orient == 0) ? 0 :
-                                              (((orient == 1) || (orient == 2) || (orient == 4)) ? 1 :
-                                               (((orient == 3) || (orient == 5) || (orient == 6)) ? 2 : 3)));
-
-        if (tccp->qntsty == J3D_CCP_QNTSTY_NOQNT) {
-            stepsize = 1.0;
-        } else {
-            double norm = dwt_getnorm(orient, level,
-                                      tccp->dwtid); /*Fetch norms if irreversible transform (by the moment only I9.7)*/
-            stepsize = (1 << (gain + 1)) / norm;
-        }
-        /*fprintf(stdout,"[INFO] Bandno: %d Orient: %d Level: %d %d %d Stepsize: %f\n",bandno,orient,level[0],level[1],level[2],stepsize);*/
-        dwt_encode_stepsize((int) floor(stepsize * 8192.0), prec + gain,
-                            &tccp->stepsizes[bandno]);
-    }
-}
-
-
-
diff --git a/src/lib/openjp3d/dwt.h b/src/lib/openjp3d/dwt.h
deleted file mode 100644 (file)
index 0d3eca2..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * Copyrigth (c) 2006, Mónica Díez, LPI-UVA, Spain
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __DWT_H
-#define __DWT_H
-/**
-@file dwt.h
-@brief Implementation of a discrete wavelet transform (DWT)
-
-The functions in DWT.C have for goal to realize forward and inverse discret wavelet
-transform with filter 5-3 (reversible) and filter 9-7 (irreversible). The functions in
-DWT.C are used by some function in TCD.C.
-*/
-
-/** @defgroup DWT DWT - Implementation of a discrete wavelet transform */
-/*@{*/
-
-/**
-DCCS-LIWT properties
-*/
-
-
-typedef struct opj_wtfilt {
-    double *LPS;
-    int lenLPS;
-    double *HPS;
-    int lenHPS;
-} opj_wtfilt_t;
-/** @name Funciones generales */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-/**
-Forward 5-3 wavelet transform in 3-D.
-Apply a reversible DWT transform to a component of an volume.
-@param tilec Tile component information (current tile)
-@param dwtid Number of identification of wavelet kernel(s) used in DWT in each direction
-*/
-void dwt_encode(opj_tcd_tilecomp_t * tilec, int dwtid[3]);
-/**
-Inverse 5-3 wavelet transform in 3-D.
-Apply a reversible inverse DWT transform to a component of an volume.
-@param tilec Tile component information (current tile)
-@param stops Number of decoded resolution levels in each dimension
-@param dwtid Number of identification of wavelet kernel(s) used in DWT in each dimension
-*/
-void dwt_decode(opj_tcd_tilecomp_t * tilec, int stops[3], int dwtid[3]);
-/* ----------------------------------------------------------------------- */
-/**
-Get the gain of a subband for the reversible 3-D DWT.
-@param orient Number that identifies the subband (0->LLL, 1->HLL, 2->LHL, 3->HHL, 4->LLH, 5->HLH, 6->LHH, 7->HHH)
-@param reversible Wavelet transformation type
-@return Returns 0 if orient = 0, returns 1 if orient = 1,2 or 4, returns 2 if orient = 3,5 or 6, returns 3 otherwise
-*/
-int dwt_getgain(int orient, int reversible);
-/**
-Get the norm of a wavelet function of a subband at a specified level for the reversible 5-3 DWT or irreversible 9-7 in 3-D.
-@param orient Band of the wavelet function
-@param level Levels of the wavelet function in X,Y,Z axis
-@param dwtid Wavelet transformation identifier
-@return Returns the norm of the wavelet function
-*/
-double dwt_getnorm(int orient, int level[3], int dwtid[3]);
-/* ----------------------------------------------------------------------- */
-/**
-Calcula el valor del escalón de cuantificación correspondiente a cada subbanda.
-@param tccp Tile component coding parameters
-@param prec Precision of data
-*/
-void dwt_calc_explicit_stepsizes(opj_tccp_t * tccp, int prec);
-/*@}*/
-/*@}*/
-
-#endif /* __DWT_H */
diff --git a/src/lib/openjp3d/event.c b/src/lib/openjp3d/event.c
deleted file mode 100644 (file)
index 7b6a767..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "opj_includes.h"
-
-/* ==========================================================
-//   Utility functions
-// ==========================================================*/
-
-#ifndef _WIN32
-static char*
-i2a(unsigned i, char *a, unsigned r)
-{
-    if (i / r > 0) {
-        a = i2a(i / r, a, r);
-    }
-    *a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i % r];
-    return a + 1;
-}
-
-/**
- Transforms integer i into an ascii string and stores the result in a;
- string is encoded in the base indicated by r.
- @param i Number to be converted
- @param a String result
- @param r Base of value; must be in the range 2 - 36
- @return Returns a
-*/
-static char *
-_itoa(int i, char *a, int r)
-{
-    r = ((r < 2) || (r > 36)) ? 10 : r;
-    if (i < 0) {
-        *a = '-';
-        *i2a(-i, a + 1, r) = 0;
-    } else {
-        *i2a(i, a, r) = 0;
-    }
-    return a;
-}
-
-#endif /* !_WIN32 */
-
-/* ----------------------------------------------------------------------- */
-
-opj_event_mgr_t* OPJ_CALLCONV opj_set_event_mgr(opj_common_ptr cinfo,
-        opj_event_mgr_t *event_mgr, void *context)
-{
-    if (cinfo) {
-        opj_event_mgr_t *previous = cinfo->event_mgr;
-        cinfo->event_mgr = event_mgr;
-        cinfo->client_data = context;
-        return previous;
-    }
-
-    return NULL;
-}
-
-bool opj_event_msg(opj_common_ptr cinfo, int event_type, const char *fmt, ...)
-{
-#define MSG_SIZE 512 /* 512 bytes should be more than enough for a short message */
-    opj_msg_callback msg_handler = NULL;
-
-    opj_event_mgr_t *event_mgr = cinfo->event_mgr;
-    if (event_mgr != NULL) {
-        switch (event_type) {
-        case EVT_ERROR:
-            msg_handler = event_mgr->error_handler;
-            break;
-        case EVT_WARNING:
-            msg_handler = event_mgr->warning_handler;
-            break;
-        case EVT_INFO:
-            msg_handler = event_mgr->info_handler;
-            break;
-        default:
-            break;
-        }
-        if (msg_handler == NULL) {
-            return false;
-        }
-    } else {
-        return false;
-    }
-
-    if ((fmt != NULL) && (event_mgr != NULL)) {
-        va_list arg;
-        int str_length, i, j;
-        char message[MSG_SIZE];
-        memset(message, 0, MSG_SIZE);
-        /* initialize the optional parameter list */
-        va_start(arg, fmt);
-        /* check the length of the format string */
-        str_length = (strlen(fmt) > MSG_SIZE) ? MSG_SIZE : strlen(fmt);
-        /* parse the format string and put the result in 'message' */
-        for (i = 0, j = 0; i < str_length; ++i) {
-            if (fmt[i] == '%') {
-                if (i + 1 < str_length) {
-                    switch (tolower(fmt[i + 1])) {
-                    case '%' :
-                        message[j++] = '%';
-                        break;
-                    case 'o' : { /* octal numbers */
-                        char tmp[16];
-                        _itoa(va_arg(arg, int), tmp, 8);
-                        strcat(message, tmp);
-                        j += strlen(tmp);
-                        ++i;
-                        break;
-                    }
-                    case 'i' : /* decimal numbers */
-                    case 'd' : {
-                        char tmp[16];
-                        _itoa(va_arg(arg, int), tmp, 10);
-                        strcat(message, tmp);
-                        j += strlen(tmp);
-                        ++i;
-                        break;
-                    }
-                    case 'x' : { /* hexadecimal numbers */
-                        char tmp[16];
-                        _itoa(va_arg(arg, int), tmp, 16);
-                        strcat(message, tmp);
-                        j += strlen(tmp);
-                        ++i;
-                        break;
-                    }
-                    case 's' : { /* strings */
-                        char *tmp = va_arg(arg, char*);
-                        strcat(message, tmp);
-                        j += strlen(tmp);
-                        ++i;
-                        break;
-                    }
-                    case 'f' : { /* floats */
-                        char tmp[16];
-                        double value = va_arg(arg, double);
-                        sprintf(tmp, "%f", value);
-                        strcat(message, tmp);
-                        j += strlen(tmp);
-                        ++i;
-                        break;
-                    }
-                    };
-                } else {
-                    message[j++] = fmt[i];
-                }
-            } else {
-                message[j++] = fmt[i];
-            };
-        }
-        /* deinitialize the optional parameter list */
-        va_end(arg);
-
-        /* output the message to the user program */
-        msg_handler(message, cinfo->client_data);
-    }
-
-    return true;
-}
-
diff --git a/src/lib/openjp3d/event.h b/src/lib/openjp3d/event.h
deleted file mode 100644 (file)
index e752358..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef __EVENT_H
-#define __EVENT_H
-/**
-@file event.h
-@brief Implementation of a event callback system
-
-The functions in EVENT.C have for goal to send output messages (errors, warnings, debug) to the user.
-*/
-
-#define EVT_ERROR   1   /**< Error event type */
-#define EVT_WARNING 2   /**< Warning event type */
-#define EVT_INFO    4   /**< Debug event type */
-
-/** @defgroup EVENT EVENT - Implementation of a event callback system */
-/*@{*/
-
-/** @name Funciones generales (see also openjp3d.h) */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-/**
-Write formatted data to a string and send the string to a user callback.
-@param cinfo Codec context info
-@param event_type Event type or callback to use to send the message
-@param fmt Format-control string (plus optional arguments)
-@return Returns true if successful, returns false otherwise
-*/
-bool opj_event_msg(opj_common_ptr cinfo, int event_type, const char *fmt, ...);
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif /* __EVENT_H */
diff --git a/src/lib/openjp3d/fix.h b/src/lib/openjp3d/fix.h
deleted file mode 100644 (file)
index 416fd0f..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef __FIX_H
-#define __FIX_H
-
-#if defined(_MSC_VER) || defined(__BORLANDC__)
-#define int64 __int64
-#else
-#define int64 long long
-#endif
-
-/**
-@file fix.h
-@brief Implementation of operations of specific multiplication (FIX)
-
-The functions in FIX.H have for goal to realize specific multiplication.
-*/
-
-/** @defgroup FIX FIX - Implementation of operations of specific multiplication */
-/*@{*/
-
-/**
-Multiply two fixed-precision rational numbers.
-@param a
-@param b
-@return Returns a * b
-*/
-static  int fix_mul(int a, int b)
-{
-    int64 temp = (int64) a * (int64) b >> 12;
-    return (int)((temp >> 1) + (temp & 1)) ;
-}
-
-/*@}*/
-
-#endif /* __FIX_H */
diff --git a/src/lib/openjp3d/int.h b/src/lib/openjp3d/int.h
deleted file mode 100644 (file)
index fb0480b..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef __INT_H
-#define __INT_H
-/**
-@file int.h
-@brief Implementation of operations on integers (INT)
-
-The functions in INT.H have for goal to realize operations on integers.
-*/
-
-/** @defgroup INT INT - Implementation of operations on integers */
-/*@{*/
-
-/** @name Funciones generales (see also openjp3d.h) */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-/**
-Get the minimum of two integers
-@return Returns a if a < b else b
-*/
-static  int int_min(int a, int b)
-{
-    return a < b ? a : b;
-}
-/**
-Get the maximum of two integers
-@return Returns a if a > b else b
-*/
-static  int int_max(int a, int b)
-{
-    return (a > b) ? a : b;
-}
-/**
-Clamp an integer inside an interval
-@return
-<ul>
-<li>Returns a if (min < a < max)
-<li>Returns max if (a > max)
-<li>Returns min if (a < min)
-</ul>
-*/
-static int int_clamp(int a, int min, int max)
-{
-    if (a < min) {
-        return min;
-    }
-    if (a > max) {
-        return max;
-    }
-    return a;
-}
-/**
-@return Get absolute value of integer
-*/
-static  int int_abs(int a)
-{
-    return a < 0 ? -a : a;
-}
-
-static double dbl_abs(double a)
-{
-    return a < 0 ? -a : a;
-}
-/**
-Divide an integer and round upwards
-@return Returns a divided by b
-*/
-static  int int_ceildiv(int a, int b)
-{
-    return (a + b - 1) / b;
-}
-/**
-Divide an integer by a power of 2 and round upwards
-@return Returns a divided by 2^b
-*/
-static  int int_ceildivpow2(int a, int b)
-{
-    return (a + (1 << b) - 1) >> b;
-}
-/**
-Divide an integer by a power of 2 and round downwards
-@return Returns a divided by 2^b
-*/
-static  int int_floordivpow2(int a, int b)
-{
-    return a >> b;
-}
-/**
-Get logarithm of an integer and round downwards
-@return Returns log2(a)
-*/
-static  int int_floorlog2(int a)
-{
-    int l;
-    for (l = 0; a > 1; l++) {
-        a >>= 1;
-    }
-    return l;
-}
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif
diff --git a/src/lib/openjp3d/jp3d.c b/src/lib/openjp3d/jp3d.c
deleted file mode 100644 (file)
index 410bca5..0000000
+++ /dev/null
@@ -1,2559 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * Copyright (c) 2006, Mónica Díez García, Image Processing Laboratory, University of Valladolid, Spain
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "opj_includes.h"
-
-/** @defgroup J3D J3D - JPEG-2000 PART 10 codestream reader/writer */
-/*@{*/
-
-/** @name Funciones locales */
-/*@{*/
-
-/**
-Write the SOC marker (Start Of Codestream)
-@param j3d J3D handle
-*/
-static void j3d_write_soc(opj_j3d_t *j3d);
-/**
-Read the SOC marker (Start of Codestream)
-@param j3d J3D handle
-*/
-static void j3d_read_soc(opj_j3d_t *j3d);
-/**
-Write the SIZ marker (2D volume and tile size)
-@param j3d J3D handle
-*/
-static void j3d_write_siz(opj_j3d_t *j3d);
-/**
-Read the SIZ marker (2D volume and tile size)
-@param j3d J3D handle
-*/
-static void j3d_read_siz(opj_j3d_t *j3d);
-/**
-Write the NSI marker (3rd volume and tile size)
-@param j3d J3D handle
-*/
-static void j3d_write_nsi(opj_j3d_t *j3d);
-/**
-Read the NSI marker (3rd volume and tile size)
-@param j3d J3D handle
-*/
-static void j3d_read_nsi(opj_j3d_t *j3d);
-/**
-Write the COM marker (comment)
-@param j3d J3D handle
-*/
-static void j3d_write_com(opj_j3d_t *j3d);
-/**
-Read the COM marker (comment)
-@param j3d J3D handle
-*/
-static void j3d_read_com(opj_j3d_t *j3d);
-/**
-Write the value concerning the specified component in the marker COD and COC
-@param j3d J3D handle
-@param compno Number of the component concerned by the information written
-*/
-static void j3d_write_cox(opj_j3d_t *j3d, int compno);
-/**
-Read the value concerning the specified component in the marker COD and COC
-@param j3d J3D handle
-@param compno Number of the component concerned by the information read
-*/
-static void j3d_read_cox(opj_j3d_t *j3d, int compno);
-/**
-Write the COD marker (coding style default)
-@param j3d J3D handle
-*/
-static void j3d_write_cod(opj_j3d_t *j3d);
-/**
-Read the COD marker (coding style default)
-@param j3d J3D handle
-*/
-static void j3d_read_cod(opj_j3d_t *j3d);
-/**
-Write the COC marker (coding style component)
-@param j3d J3D handle
-@param compno Number of the component concerned by the information written
-*/
-static void j3d_write_coc(opj_j3d_t *j3d, int compno);
-/**
-Read the COC marker (coding style component)
-@param j3d J3D handle
-*/
-static void j3d_read_coc(opj_j3d_t *j3d);
-/**
-Write the value concerning the specified component in the marker QCD and QCC
-@param j3d J3D handle
-@param compno Number of the component concerned by the information written
-*/
-static void j3d_write_qcx(opj_j3d_t *j3d, int compno);
-/**
-Read the value concerning the specified component in the marker QCD and QCC
-@param j3d J3D handle
-@param compno Number of the component concern by the information read
-@param len Length of the information in the QCX part of the marker QCD/QCC
-*/
-static void j3d_read_qcx(opj_j3d_t *j3d, int compno, int len);
-/**
-Write the QCD marker (quantization default)
-@param j3d J3D handle
-*/
-static void j3d_write_qcd(opj_j3d_t *j3d);
-/**
-Read the QCD marker (quantization default)
-@param j3d J3D handle
-*/
-static void j3d_read_qcd(opj_j3d_t *j3d);
-/**
-Write the QCC marker (quantization component)
-@param j3d J3D handle
-@param compno Number of the component concerned by the information written
-*/
-static void j3d_write_qcc(opj_j3d_t *j3d, int compno);
-/**
-Read the QCC marker (quantization component)
-@param j3d J3D handle
-*/
-static void j3d_read_qcc(opj_j3d_t *j3d);
-/**
-Write the POC marker (progression order change)
-@param j3d J3D handle
-*/
-static void j3d_write_poc(opj_j3d_t *j3d);
-/**
-Read the POC marker (progression order change)
-@param j3d J3D handle
-*/
-static void j3d_read_poc(opj_j3d_t *j3d);
-/**
-Read the CRG marker (component registration)
-@param j3d J3D handle
-*/
-static void j3d_read_crg(opj_j3d_t *j3d);
-/**
-Read the TLM marker (tile-part lengths)
-@param j3d J3D handle
-*/
-static void j3d_read_tlm(opj_j3d_t *j3d);
-/**
-Read the PLM marker (packet length, main header)
-@param j3d J3D handle
-*/
-static void j3d_read_plm(opj_j3d_t *j3d);
-/**
-Read the PLT marker (packet length, tile-part header)
-@param j3d J3D handle
-*/
-static void j3d_read_plt(opj_j3d_t *j3d);
-/**
-Read the PPM marker (packet packet headers, main header)
-@param j3d J3D handle
-*/
-static void j3d_read_ppm(opj_j3d_t *j3d);
-/**
-Read the PPT marker (packet packet headers, tile-part header)
-@param j3d J3D handle
-*/
-static void j3d_read_ppt(opj_j3d_t *j3d);
-/**
-Write the SOT marker (start of tile-part)
-@param j3d J3D handle
-*/
-static void j3d_write_sot(opj_j3d_t *j3d);
-/**
-Read the SOT marker (start of tile-part)
-@param j3d J3D handle
-*/
-static void j3d_read_sot(opj_j3d_t *j3d);
-/**
-Write the SOD marker (start of data)
-@param j3d J3D handle
-@param tile_coder Pointer to a TCD handle
-*/
-static void j3d_write_sod(opj_j3d_t *j3d, void *tile_coder);
-/**
-Read the SOD marker (start of data)
-@param j3d J3D handle
-*/
-static void j3d_read_sod(opj_j3d_t *j3d);
-/**
-Write the RGN marker (region-of-interest)
-@param j3d J3D handle
-@param compno Number of the component concerned by the information written
-@param tileno Number of the tile concerned by the information written
-*/
-static void j3d_write_rgn(opj_j3d_t *j3d, int compno, int tileno);
-/**
-Read the RGN marker (region-of-interest)
-@param j3d J3D handle
-*/
-static void j3d_read_rgn(opj_j3d_t *j3d);
-/**
-Write the EOC marker (end of codestream)
-@param j3d J3D handle
-*/
-static void j3d_write_eoc(opj_j3d_t *j3d);
-/**
-Read the EOC marker (end of codestream)
-@param j3d J3D handle
-*/
-static void j3d_read_eoc(opj_j3d_t *j3d);
-/**
-Read an unknown marker
-@param j3d J3D handle
-*/
-static void j3d_read_unk(opj_j3d_t *j3d);
-/**
-Write the CAP marker (extended capabilities)
-@param j3d J3D handle
-*/
-static void j3d_write_cap(opj_j3d_t *j3d);
-/**
-Read the CAP marker (extended capabilities)
-@param j3d J3D handle
-*/
-static void j3d_read_cap(opj_j3d_t *j3d);
-/**
-Write the DCO marker (Variable DC offset)
-@param j3d J3D handle
-*/
-static void j3d_write_dco(opj_j3d_t *j3d);
-/**
-Read the DCO marker (Variable DC offset)
-@param j3d J3D handle
-*/
-static void j3d_read_dco(opj_j3d_t *j3d);
-/**
-Write the ATK marker (arbitrary transformation kernel)
-@param j3d J3D handle
-*/
-static void j3d_write_atk(opj_j3d_t *j3d);
-/**
-Read the ATK marker (arbitrary transformation kernel)
-@param j3d J3D handle
-*/
-static void j3d_read_atk(opj_j3d_t *j3d);
-/**
-Write the CBD marker (component bit depth definition)
-@param j3d J3D handle
-*/
-static void j3d_write_cbd(opj_j3d_t *j3d);
-/**
-Read the CBD marker (component bit depth definition)
-@param j3d J3D handle
-*/
-static void j3d_read_cbd(opj_j3d_t *j3d);
-/**
-Write the MCT marker (multiple component transfomation definition)
-@param j3d J3D handle
-*/
-static void j3d_write_mct(opj_j3d_t *j3d);
-/**
-Read the MCT marker (multiple component transfomation definition)
-@param j3d J3D handle
-*/
-static void j3d_read_mct(opj_j3d_t *j3d);
-/**
-Write the MCC marker (multiple component transfomation collection)
-@param j3d J3D handle
-*/
-static void j3d_write_mcc(opj_j3d_t *j3d);
-/**
-Read the MCC marker (multiple component transfomation collection)
-@param j3d J3D handle
-*/
-static void j3d_read_mcc(opj_j3d_t *j3d);
-/**
-Write the MCO marker (multiple component transfomation ordering)
-@param j3d J3D handle
-*/
-static void j3d_write_mco(opj_j3d_t *j3d);
-/**
-Read the MCO marker (multiple component transfomation ordering)
-@param j3d J3D handle
-*/
-static void j3d_read_mco(opj_j3d_t *j3d);
-/**
-Write the NLT marker (non-linearity point transformation)
-@param j3d J3D handle
-*/
-static void j3d_write_nlt(opj_j3d_t *j3d);
-/**
-Read the NLT marker (non-linearity point transformation)
-@param j3d J3D handle
-*/
-static void j3d_read_nlt(opj_j3d_t *j3d);
-/*@}*/
-
-/* ----------------------------------------------------------------------- */
-
-static void j3d_dump_volume(FILE *fd, opj_volume_t * vol)
-{
-    int compno;
-    fprintf(fd, "volume {\n");
-    fprintf(fd, "  x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d\n", vol->x0, vol->y0,
-            vol->z0, vol->x1, vol->y1,  vol->z1);
-    fprintf(fd, "  numcomps=%d\n", vol->numcomps);
-    for (compno = 0; compno < vol->numcomps; compno++) {
-        opj_volume_comp_t *comp = &vol->comps[compno];
-        fprintf(fd, "  comp %d {\n", compno);
-        fprintf(fd, "    dx=%d, dy=%d, dz=%d\n", comp->dx, comp->dy, comp->dz);
-        fprintf(fd, "    prec=%d\n", comp->prec);
-        fprintf(fd, "    sgnd=%d\n", comp->sgnd);
-        fprintf(fd, "  }\n");
-    }
-    fprintf(fd, "}\n");
-}
-
-static void j3d_dump_cp(FILE *fd, opj_volume_t * vol, opj_cp_t * cp)
-{
-    int tileno, compno, layno, bandno, resno, numbands;
-    fprintf(fd, "coding parameters {\n");
-    fprintf(fd, "  tx0=%d, ty0=%d, tz0=%d\n", cp->tx0, cp->ty0, cp->tz0);
-    fprintf(fd, "  tdx=%d, tdy=%d, tdz=%d\n", cp->tdx, cp->tdy, cp->tdz);
-    fprintf(fd, "  tw=%d, th=%d, tl=%d\n", cp->tw, cp->th, cp->tl);
-    fprintf(fd, "  transform format: %d\n", cp->transform_format);
-    fprintf(fd, "  encoding format: %d\n", cp->encoding_format);
-    for (tileno = 0; tileno < cp->tw * cp->th * cp->tl; tileno++) {
-        opj_tcp_t *tcp = &cp->tcps[tileno];
-        fprintf(fd, "  tile %d {\n", tileno);
-        fprintf(fd, "    csty=%x\n", tcp->csty);
-        fprintf(fd, "    prg=%d\n", tcp->prg);
-        fprintf(fd, "    numlayers=%d\n", tcp->numlayers);
-        fprintf(fd, "    mct=%d\n", tcp->mct);
-        fprintf(fd, "    rates=");
-        for (layno = 0; layno < tcp->numlayers; layno++) {
-            fprintf(fd, "%f ", tcp->rates[layno]);
-        }
-        fprintf(fd, "\n");
-        fprintf(fd, "    first=%d\n", tcp->first);
-        for (compno = 0; compno < vol->numcomps; compno++) {
-            opj_tccp_t *tccp = &tcp->tccps[compno];
-            fprintf(fd, "    comp %d {\n", compno);
-            fprintf(fd, "      csty=%x\n", tccp->csty);
-            fprintf(fd, "      numresx=%d, numresy=%d, numresz=%d\n",
-                    tccp->numresolution[0], tccp->numresolution[1], tccp->numresolution[2]);
-            fprintf(fd, "      cblkw=%d, cblkh=%d, cblkl=%d\n", tccp->cblk[0],
-                    tccp->cblk[1], tccp->cblk[2]);
-            fprintf(fd, "      cblksty=%x\n", tccp->cblksty);
-            fprintf(fd, "      qntsty=%d\n", tccp->qntsty);
-            fprintf(fd, "      numgbits=%d\n", tccp->numgbits);
-            fprintf(fd, "      roishift=%d\n", tccp->roishift);
-            fprintf(fd, "      reversible=%d\n", tccp->reversible);
-            fprintf(fd, "      dwtidx=%d dwtidy=%d dwtidz=%d\n", tccp->dwtid[0],
-                    tccp->dwtid[1], tccp->dwtid[2]);
-            if (tccp->atk != NULL) {
-                fprintf(fd, "      atk.index=%d\n", tccp->atk->index);
-                fprintf(fd, "      atk.coeff_typ=%d\n", tccp->atk->coeff_typ);
-                fprintf(fd, "      atk.filt_cat=%d\n", tccp->atk->filt_cat);
-                fprintf(fd, "      atk.exten=%d\n", tccp->atk->exten);
-                fprintf(fd, "      atk.minit=%d\n", tccp->atk->minit);
-                fprintf(fd, "      atk.wt_typ=%d\n", tccp->atk->wt_typ);
-            }
-            fprintf(fd, "      stepsizes of bands=");
-            numbands = (tccp->qntsty == J3D_CCP_QNTSTY_SIQNT) ? 1 :
-                       ((cp->transform_format == TRF_2D_DWT) ? (tccp->numresolution[0] * 3 - 2) :
-                        (tccp->numresolution[0] * 7 - 6) - 4 * (tccp->numresolution[0] -
-                                tccp->numresolution[2]));
-            for (bandno = 0; bandno < numbands; bandno++) {
-                fprintf(fd, "(%d,%d) ", tccp->stepsizes[bandno].mant,
-                        tccp->stepsizes[bandno].expn);
-            }
-            fprintf(fd, "\n");
-
-            if (tccp->csty & J3D_CCP_CSTY_PRT) {
-                fprintf(fd, "      prcw=");
-                for (resno = 0; resno < tccp->numresolution[0]; resno++) {
-                    fprintf(fd, "%d ", tccp->prctsiz[0][resno]);
-                }
-                fprintf(fd, "\n");
-                fprintf(fd, "      prch=");
-                for (resno = 0; resno < tccp->numresolution[0]; resno++) {
-                    fprintf(fd, "%d ", tccp->prctsiz[1][resno]);
-                }
-                fprintf(fd, "\n");
-                fprintf(fd, "      prcl=");
-                for (resno = 0; resno < tccp->numresolution[0]; resno++) {
-                    fprintf(fd, "%d ", tccp->prctsiz[2][resno]);
-                }
-                fprintf(fd, "\n");
-            }
-            fprintf(fd, "    }\n");
-        }
-        fprintf(fd, "  }\n");
-    }
-    fprintf(fd, "}\n");
-}
-
-/* -----------------------------------------------------------------------
-Extended capabilities
-------------------------------------------------------------------------*/
-
-static void j3d_write_cap(opj_j3d_t *j3d)
-{
-    int len, lenp;
-
-    opj_cio_t *cio = j3d->cio;
-    cio_write(cio, J3D_MS_CAP, 2);  /* CAP */
-    lenp = cio_tell(cio);
-    cio_skip(cio, 2);
-    cio_write(cio, J3D_CAP_10, 4);
-    if (J3D_CAP_10) {
-        cio_write(cio, 0x0, 2);
-    }
-    len = cio_tell(cio) - lenp;
-    cio_seek(cio, lenp);
-    cio_write(cio, len, 2);     /* Lsiz */
-    cio_seek(cio, lenp + len);
-
-}
-static void j3d_read_cap(opj_j3d_t *j3d)
-{
-    int len, Cap;
-    opj_cio_t *cio = j3d->cio;
-    /*cio_read(cio, 2);  CAP */
-    len = cio_read(cio, 2);
-    Cap = cio_read(cio, 4);
-    if (Cap) {
-        cio_read(cio, 2);
-    }
-    assert(len == 2 + 4 + 2);
-}
-static void j3d_write_nsi(opj_j3d_t *j3d)
-{
-    int i;
-    int lenp, len;
-    int ndim = 3;
-
-    opj_cio_t *cio = j3d->cio;
-    opj_volume_t *volume = j3d->volume;
-    opj_cp_t *cp = j3d->cp;
-
-    cio_write(cio, J3D_MS_NSI, 2);  /* NSI */
-    lenp = cio_tell(cio);
-    cio_skip(cio, 2);
-    cio_write(cio, ndim, 1);    /* Ndim */
-    cio_write(cio, volume->z1, 4);  /* Zsiz */
-    cio_write(cio, volume->z0, 4);  /* Z0siz */
-    cio_write(cio, cp->tdz, 4);     /* ZTsiz */
-    cio_write(cio, cp->tz0, 4);     /* ZT0siz */
-    for (i = 0; i < volume->numcomps; i++) {
-        cio_write(cio, volume->comps[i].dz, 1); /* ZRsiz_i */
-    }
-    len = cio_tell(cio) - lenp;
-    cio_seek(cio, lenp);
-    cio_write(cio, len, 2);     /* Lsiz */
-    cio_seek(cio, lenp + len);
-}
-
-static void j3d_read_nsi(opj_j3d_t *j3d)
-{
-    int ndim;
-    int len, i;
-
-    opj_cio_t *cio = j3d->cio;
-    opj_volume_t *volume = j3d->volume;
-    opj_cp_t *cp = j3d->cp;
-
-    len = cio_read(cio, 2);         /* Lnsi */
-    ndim = cio_read(cio, 1);            /* Ndim */
-    assert(ndim == 3);
-    volume->z1 = cio_read(cio, 4);  /* Zsiz */
-    volume->z0 = cio_read(cio, 4);  /* Z0siz */
-    cp->tdz = cio_read(cio, 4);     /* ZTsiz */
-    cp->tz0 = cio_read(cio, 4);     /* ZT0siz */
-    for (i = 0; i < volume->numcomps; i++) {
-        volume->comps[i].dz = cio_read(cio, 1); /* ZRsiz_i */
-    }
-
-    /*Initialization of volume*/
-    cp->tw = int_ceildiv(volume->x1 - cp->tx0, cp->tdx);
-    cp->th = int_ceildiv(volume->y1 - cp->ty0, cp->tdy);
-    cp->tl = int_ceildiv(volume->z1 - cp->tz0, cp->tdz);
-    cp->tcps = (opj_tcp_t *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(
-                                            opj_tcp_t));
-    cp->tileno = (int *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(int));
-    cp->tileno_size = 0;
-
-    for (i = 0; i < cp->tw * cp->th * cp->tl ; i++) {
-        cp->tcps[i].POC = 0;
-        cp->tcps[i].numpocs = 0;
-        cp->tcps[i].first = 1;
-    }
-
-    /* Initialization for PPM marker (Packets header)*/
-    cp->ppm = 0;
-    cp->ppm_data = NULL;
-    cp->ppm_data_first = NULL;
-    cp->ppm_previous = 0;
-    cp->ppm_store = 0;
-
-    j3d->default_tcp->tccps = (opj_tccp_t *) opj_malloc(sizeof(
-                                  opj_tccp_t) * volume->numcomps);
-    for (i = 0; i < cp->tw * cp->th * cp->tl ; i++) {
-        cp->tcps[i].tccps = (opj_tccp_t *) opj_malloc(sizeof(opj_tccp_t) *
-                            volume->numcomps);
-    }
-    j3d->tile_data = (unsigned char **) opj_malloc(cp->tw * cp->th * cp->tl *
-                     sizeof(unsigned char *));
-    j3d->tile_len = (int *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(int));
-    j3d->state = J3D_STATE_MH;
-
-}
-static void j3d_write_dco(opj_j3d_t *j3d)
-{
-    int lenp, len, i;
-    int dcotype;
-
-    opj_cio_t *cio = j3d->cio;
-    opj_volume_t *volume = j3d->volume;
-    opj_cp_t *cp = j3d->cp;
-
-    dcotype = 1; /* Offsets are 16bit signed integers Table A21 15444-2 */
-    cio_write(cio, J3D_MS_DCO, 2);  /* DCO */
-    lenp = cio_tell(cio);
-    cio_skip(cio, 2);
-    cio_write(cio, dcotype, 1);
-    if (dcotype == 0) {
-        for (i = 0; i < volume->numcomps; i++) {
-            cio_write(cio, volume->comps[i].dcoffset, 1);    /* SPdco_i */
-        }
-    } else if (dcotype == 1) {
-        for (i = 0; i < volume->numcomps; i++) {
-            cio_write(cio, volume->comps[i].dcoffset, 1);   /* SPdco_i */
-            opj_event_msg(j3d->cinfo, EVT_INFO, "dcotype %d DCO %d \n", dcotype,
-                          volume->comps[i].dcoffset);
-        }
-    }
-    len = cio_tell(cio) - lenp;
-    cio_seek(cio, lenp);
-    cio_write(cio, len, 2);     /* Ldco */
-    cio_seek(cio, lenp + len);
-
-}
-static void j3d_read_dco(opj_j3d_t *j3d)
-{
-    int len, i;
-    int dcotype;
-
-    opj_cio_t *cio = j3d->cio;
-    opj_volume_t *volume = j3d->volume;
-    opj_cp_t *cp = j3d->cp;
-
-    len = cio_read(cio, 2);         /* Lsiz */
-    dcotype = cio_read(cio, 1); /*offset 8bit unsigned / 16bit signed integers*/
-    if (dcotype == 0) {
-        for (i = 0; i < volume->numcomps; i++) {
-            volume->comps[i].dcoffset = cio_read(cio, 1);
-            if (volume->comps[i].dcoffset > 128) {
-                volume->comps[i].dcoffset = volume->comps[i].dcoffset - 256;
-            }
-        }
-    } else if (dcotype == 1) {
-        for (i = 0; i < volume->numcomps; i++) {
-            volume->comps[i].dcoffset = cio_read(cio, 1);
-            if (volume->comps[i].dcoffset > 128) {
-                volume->comps[i].dcoffset = volume->comps[i].dcoffset - 256;
-            }
-        }
-    }
-
-}
-static void j3d_write_atk(opj_j3d_t *j3d)
-{
-    int lenp, len, s, k;
-
-    opj_cio_t *cio = j3d->cio;
-    opj_volume_t *volume = j3d->volume;
-    opj_atk_t *atk = j3d->cp->tcps->tccps->atk;
-
-    cio_write(cio, J3D_MS_ATK, 2);  /* ATK */
-    lenp = cio_tell(cio);
-    cio_skip(cio, 2);
-    cio_write(cio, atk->index + (atk->coeff_typ << 8) + (atk->filt_cat << 11)
-              + (atk->wt_typ << 12) + (atk->minit << 13) + (atk->exten << 14),
-              2);            /* Satk */
-    if (atk->wt_typ == J3D_ATK_IRR) {
-        cio_write(cio, (unsigned int)(atk->Katk * 8192.0), 1 << atk->coeff_typ);
-    }
-    cio_write(cio, atk->Natk, 1);
-    for (s = 0; s < atk->Natk; s++) {
-        if (atk->filt_cat == J3D_ATK_ARB) {
-            cio_write(cio, atk->Oatk[s], 1);
-        }
-        if (atk->wt_typ == J3D_ATK_REV) {
-            cio_write(cio, atk->Eatk[s], 1);
-            cio_write(cio, atk->Batk[s], 1);
-        }
-        cio_write(cio, atk->LCatk[s], 1);
-        for (k = 0; k < atk->LCatk[s]; k++) {
-            cio_write(cio, (unsigned int)(atk->Aatk[s][k] * 8192.0), 1 << atk->coeff_typ);
-        }
-    }
-    len = cio_tell(cio) - lenp;
-    cio_seek(cio, lenp);
-    cio_write(cio, len, 2);     /* Latk */
-    cio_seek(cio, lenp + len);
-}
-static void j3d_read_atk(opj_j3d_t *j3d)
-{
-    int len, i, Satk, k;
-
-    opj_cio_t *cio = j3d->cio;
-    opj_volume_t *volume = j3d->volume;
-    opj_cp_t *cp = j3d->cp;
-    opj_atk_t *atk = cp->tcps->tccps->atk;
-
-    len = cio_read(cio, 2);         /* Latk */
-    Satk = cio_read(cio, 2);
-    atk->index = Satk & 0x00ff;
-    atk->coeff_typ = Satk >> 8 & 0x0007;
-    atk->filt_cat = Satk >> 11 & 0x0001;
-    atk->wt_typ = Satk >> 12  & 0x0001;
-    atk->minit = Satk >> 13 & 0x0001;
-    atk->exten = Satk >> 14 & 0x0001;
-    if (atk->wt_typ == J3D_ATK_IRR) {
-        atk->Katk = ((double) cio_read(cio, 1 << atk->coeff_typ) / 8192.0);
-    }
-    atk->Natk = cio_read(cio, 1);
-    for (i = 0; i < atk->Natk; i++) {
-        if (atk->filt_cat == J3D_ATK_ARB) {
-            atk->Oatk[i] = cio_read(cio, 1);
-        }
-        if (atk->wt_typ == J3D_ATK_REV) {
-            atk->Eatk[i] = cio_read(cio, 1);
-            atk->Batk[i] = cio_read(cio, 1);
-        }
-        atk->LCatk[i] = cio_read(cio, 1);
-        for (k = 0; k < atk->LCatk[i]; k++) {
-            atk->Aatk[i][k] = ((double) cio_read(cio, 1 << atk->coeff_typ) / 8192.0);
-        }
-    }
-}
-static void j3d_write_cbd(opj_j3d_t *j3d)
-{
-}
-static void j3d_read_cbd(opj_j3d_t *j3d)
-{
-}
-static void j3d_write_mct(opj_j3d_t *j3d)
-{
-}
-static void j3d_read_mct(opj_j3d_t *j3d)
-{
-}
-static void j3d_write_mcc(opj_j3d_t *j3d)
-{
-}
-static void j3d_read_mcc(opj_j3d_t *j3d)
-{
-}
-static void j3d_write_mco(opj_j3d_t *j3d)
-{
-}
-static void j3d_read_mco(opj_j3d_t *j3d)
-{
-}
-static void j3d_write_nlt(opj_j3d_t *j3d)
-{
-}
-static void j3d_read_nlt(opj_j3d_t *j3d)
-{
-}
-/* -----------------------------------------------------------------------
-15444-1 codestream syntax
-------------------------------------------------------------------------*/
-static void j3d_write_soc(opj_j3d_t *j3d)
-{
-    opj_cio_t *cio = j3d->cio;
-    cio_write(cio, J3D_MS_SOC, 2);
-}
-
-static void j3d_read_soc(opj_j3d_t *j3d)
-{
-    j3d->state = J3D_STATE_MHSIZ;
-}
-
-static void j3d_write_siz(opj_j3d_t *j3d)
-{
-    int i;
-    int lenp, len;
-    int Rsiz;
-
-    opj_cio_t *cio = j3d->cio;
-    opj_volume_t *volume = j3d->volume;
-    opj_cp_t *cp = j3d->cp;
-
-    cio_write(cio, J3D_MS_SIZ, 2);  /* SIZ */
-    lenp = cio_tell(cio);
-    cio_skip(cio, 2);
-    /*cio_write(cio, 0, 2);*/           /* Rsiz (capabilities of 15444-1 only) */
-    Rsiz = J3D_RSIZ_DCO |
-           J3D_RSIZ_ATK; /** | J3D_RSIZ_MCT | J3D_RSIZ_NONLT (not implemented yet)*/
-    cio_write(cio, Rsiz, 2); /* capabilities of WDv5.2*/
-    cio_write(cio, volume->x1, 4);  /* Xsiz */
-    cio_write(cio, volume->y1, 4);  /* Ysiz */
-    cio_write(cio, volume->x0, 4);  /* X0siz */
-    cio_write(cio, volume->y0, 4);  /* Y0siz */
-    cio_write(cio, cp->tdx, 4);     /* XTsiz */
-    cio_write(cio, cp->tdy, 4);     /* YTsiz */
-    cio_write(cio, cp->tx0, 4);     /* XT0siz */
-    cio_write(cio, cp->ty0, 4);     /* YT0siz */
-    cio_write(cio, volume->numcomps, 2);    /* Csiz */
-    for (i = 0; i < volume->numcomps; i++) {
-        cio_write(cio, volume->comps[i].prec - 1 + (volume->comps[i].sgnd << 7),
-                  1);    /* Ssiz_i */
-        cio_write(cio, volume->comps[i].dx, 1); /* XRsiz_i */
-        cio_write(cio, volume->comps[i].dy, 1); /* YRsiz_i */
-    }
-    len = cio_tell(cio) - lenp;
-    cio_seek(cio, lenp);
-    cio_write(cio, len, 2);     /* Lsiz */
-    cio_seek(cio, lenp + len);
-}
-
-static void j3d_read_siz(opj_j3d_t *j3d)
-{
-    int len, i;
-
-    opj_cio_t *cio = j3d->cio;
-    opj_volume_t *volume = j3d->volume;
-    opj_cp_t *cp = j3d->cp;
-
-    len = cio_read(cio, 2);         /* Lsiz */
-    cp->rsiz = cio_read(cio, 2);    /* Rsiz (capabilities) */
-    volume->x1 = cio_read(cio, 4);  /* Xsiz */
-    volume->y1 = cio_read(cio, 4);  /* Ysiz */
-    volume->x0 = cio_read(cio, 4);  /* X0siz */
-    volume->y0 = cio_read(cio, 4);  /* Y0siz */
-    cp->tdx = cio_read(cio, 4);     /* XTsiz */
-    cp->tdy = cio_read(cio, 4);     /* YTsiz */
-    cp->tx0 = cio_read(cio, 4);     /* XT0siz */
-    cp->ty0 = cio_read(cio, 4);     /* YT0siz */
-
-    volume->numcomps = cio_read(cio, 2);    /* Csiz */
-    volume->comps = (opj_volume_comp_t *) opj_malloc(volume->numcomps * sizeof(
-                        opj_volume_comp_t));
-    for (i = 0; i < volume->numcomps; i++) {
-        int tmp, j;
-        tmp = cio_read(cio, 1);     /* Ssiz_i */
-        volume->comps[i].prec = (tmp & 0x7f) + 1;
-        volume->comps[i].sgnd = tmp >> 7;
-        volume->comps[i].dx = cio_read(cio, 1); /* XRsiz_i */
-        volume->comps[i].dy = cio_read(cio, 1); /* YRsiz_i */
-        for (j = 0; j < 3; j++) {
-            volume->comps[i].resno_decoded[j] = 0;      /* number of resolution decoded */
-            volume->comps[i].factor[j] = 0;     /* reducing factor per component */
-        }
-    }
-
-    if (j3d->cinfo->codec_format == CODEC_J2K) {
-        volume->z1 = 1;
-        volume->z0 = 0;
-        volume->numslices = 1;
-        cp->tdz = 1;
-        cp->tz0 = 0;
-        for (i = 0; i < volume->numcomps; i++) {
-            volume->comps[i].dz = 1;
-        }
-
-        /*Initialization of volume*/
-        cp->tw = int_ceildiv(volume->x1 - cp->tx0, cp->tdx);
-        cp->th = int_ceildiv(volume->y1 - cp->ty0, cp->tdy);
-        cp->tl = int_ceildiv(volume->z1 - cp->tz0, cp->tdz);
-        cp->tcps = (opj_tcp_t *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(
-                                                opj_tcp_t));
-        cp->tileno = (int *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(int));
-        cp->tileno_size = 0;
-
-        for (i = 0; i < cp->tw * cp->th * cp->tl ; i++) {
-            cp->tcps[i].POC = 0;
-            cp->tcps[i].numpocs = 0;
-            cp->tcps[i].first = 1;
-        }
-
-        /* Initialization for PPM marker (Packets header)*/
-        cp->ppm = 0;
-        cp->ppm_data = NULL;
-        cp->ppm_data_first = NULL;
-        cp->ppm_previous = 0;
-        cp->ppm_store = 0;
-
-        j3d->default_tcp->tccps = (opj_tccp_t *) opj_malloc(sizeof(
-                                      opj_tccp_t) * volume->numcomps);
-        for (i = 0; i < cp->tw * cp->th * cp->tl ; i++) {
-            cp->tcps[i].tccps = (opj_tccp_t *) opj_malloc(sizeof(opj_tccp_t) *
-                                volume->numcomps);
-        }
-        j3d->tile_data = (unsigned char **) opj_malloc(cp->tw * cp->th * cp->tl *
-                         sizeof(unsigned char *));
-        j3d->tile_len = (int *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(int));
-        j3d->state = J3D_STATE_MH;
-    }
-}
-
-
-
-static void j3d_write_com(opj_j3d_t *j3d)
-{
-    unsigned int i;
-    int lenp, len;
-
-    opj_cio_t *cio = j3d->cio;
-
-    cio_write(cio, J3D_MS_COM, 2);
-    lenp = cio_tell(cio);
-    cio_skip(cio, 2);
-    cio_write(cio, 1, 2);
-    /*opj_event_msg(j3d->cinfo, EVT_INFO, "TRF %D ENCOD %d\n",j3d->cp->transform_format,j3d->cp->encoding_format);*/
-    if (j3d->cp->comment != NULL) {
-        char *comment = j3d->cp->comment;
-        for (i = 0; i < strlen(comment); i++) {
-            cio_write(cio, comment[i], 1);
-        }
-    }
-    len = cio_tell(cio) - lenp;
-    cio_seek(cio, lenp);
-    cio_write(cio, len, 2);
-    cio_seek(cio, lenp + len);
-}
-
-static void j3d_read_com(opj_j3d_t *j3d)
-{
-    int len;
-    opj_cio_t *cio = j3d->cio;
-
-    len = cio_read(cio, 2);
-    cio_read(cio, 2); // read registration
-
-    /*opj_event_msg(j3d->cinfo, EVT_INFO, "TRF %D ENCOD %d\n",j3d->cp->transform_format,j3d->cp->encoding_format);*/
-
-    cio_skip(cio, len - 4);  /*possible comments*/
-}
-
-static void j3d_write_cox(opj_j3d_t *j3d, int compno)
-{
-    int i;
-    int shift = 2;
-
-    opj_cp_t *cp = j3d->cp;
-    opj_tcp_t *tcp = &cp->tcps[j3d->curtileno];
-    opj_tccp_t *tccp = &tcp->tccps[compno];
-    opj_cio_t *cio = j3d->cio;
-
-    cio_write(cio, tccp->numresolution[0] - 1,
-              1);  /* SPcox (D) No of decomposition levels in x-axis*/
-    if (j3d->cinfo->codec_format == CODEC_J3D) {
-        cio_write(cio, tccp->numresolution[1] - 1,
-                  1);  /* SPcox (E) No of decomposition levels in y-axis*/
-        cio_write(cio, tccp->numresolution[2] - 1,
-                  1);  /* SPcox (F) No of decomposition levels in z-axis*/
-    }
-    if (j3d->cinfo->codec_format == CODEC_J3D) {
-        /* Table A.7 */
-        shift = 0;
-    }
-    /* (cblkw - 2) + (cblkh - 2) + (cblkl - 2) <= 18*/
-    cio_write(cio, tccp->cblk[0] - shift,
-              1);               /* SPcox (G) Cblk width entre 10 y 2 (8 y 0)*/
-    cio_write(cio, tccp->cblk[1] - shift,
-              1);               /* SPcox (H) Cblk height*/
-    if (j3d->cinfo->codec_format == CODEC_J3D) {
-        cio_write(cio, tccp->cblk[2] - shift, 1);           /* SPcox (I) Cblk depth*/
-    }
-    cio_write(cio, tccp->cblksty, 1);               /* SPcox (J) Cblk style*/
-    cio_write(cio, tccp->dwtid[0],
-              1);              /* SPcox (K) WT in x-axis 15444-2 Table A10*/
-    if (j3d->cinfo->codec_format == CODEC_J3D) {
-        cio_write(cio, tccp->dwtid[1],
-                  1);              /* SPcox (L) WT in y-axis 15444-2 Table A10*/
-        cio_write(cio, tccp->dwtid[2],
-                  1);              /* SPcox (M) WT in z-axis 15444-2 Table A10*/
-    }
-
-    if (tccp->csty & J3D_CCP_CSTY_PRT) {
-        for (i = 0; i < tccp->numresolution[0]; i++) {
-            if (i < tccp->numresolution[2]) {
-                cio_write(cio, tccp->prctsiz[0][i] + (tccp->prctsiz[1][i] << 4) +
-                          (tccp->prctsiz[2][i] << 8), 2);    /* SPcox (N_i) Table A9*/
-            } else if (j3d->cinfo->codec_format == CODEC_J3D) {
-                cio_write(cio, tccp->prctsiz[0][i] + (tccp->prctsiz[1][i] << 4),
-                          2);    /* SPcox (N_i) Table A9*/
-            } else {
-                cio_write(cio, tccp->prctsiz[0][i] + (tccp->prctsiz[1][i] << 4), 1);
-            }    /* SPcox (N_i) Table A9*/
-        }
-    }
-}
-
-static void j3d_read_cox(opj_j3d_t *j3d, int compno)
-{
-    int i;
-    int shift = 2;
-
-    opj_cp_t *cp = j3d->cp;
-    opj_tcp_t *tcp = j3d->state == J3D_STATE_TPH ? &cp->tcps[j3d->curtileno] :
-                     j3d->default_tcp;
-    opj_tccp_t *tccp = &tcp->tccps[compno];
-    opj_cio_t *cio = j3d->cio;
-
-    tccp->numresolution[0] = cio_read(cio,
-                                      1) + 1;  /* SPcox (D) No of decomposition levels in x-axis*/
-    if (j3d->cinfo->codec_format == CODEC_J3D) {
-        tccp->numresolution[1] = cio_read(cio,
-                                          1) + 1;  /* SPcox (E) No of decomposition levels in y-axis*/
-        tccp->numresolution[2] = cio_read(cio,
-                                          1) + 1;  /* SPcox (F) No of decomposition levels in z-axis*/
-    } else if (j3d->cinfo->codec_format == CODEC_J2K) {
-        tccp->numresolution[1] = tccp->numresolution[0];
-        tccp->numresolution[2] = 1;
-    }
-    /* check the reduce value */
-    cp->reduce[0] = int_min((tccp->numresolution[0]) - 1, cp->reduce[0]);
-    cp->reduce[1] = int_min((tccp->numresolution[1]) - 1, cp->reduce[1]);
-    cp->reduce[2] = int_min((tccp->numresolution[2]) - 1, cp->reduce[2]);
-
-    if (j3d->cinfo->codec_format == CODEC_J3D) {
-        /* Table A.7 */
-        shift = 0;
-    }
-    tccp->cblk[0] = cio_read(cio, 1) + shift;   /* SPcox (G) */
-    tccp->cblk[1] = cio_read(cio, 1) + shift;   /* SPcox (H) */
-    if (j3d->cinfo->codec_format == CODEC_J3D) {
-        tccp->cblk[2] = cio_read(cio, 1) + shift;    /* SPcox (I) */
-    } else {
-        tccp->cblk[2] = tccp->cblk[0];
-    }
-
-    tccp->cblksty = cio_read(cio, 1);   /* SPcox (J) */
-    tccp->dwtid[0] = cio_read(cio, 1);  /* SPcox (K) */
-    if (j3d->cinfo->codec_format == CODEC_J3D) {
-        tccp->dwtid[1] = cio_read(cio, 1);  /* SPcox (L) */
-        tccp->dwtid[2] = cio_read(cio, 1);  /* SPcox (M) */
-    } else {
-        tccp->dwtid[1] = tccp->dwtid[0];    /* SPcox (L) */
-        tccp->dwtid[2] = tccp->dwtid[0];    /* SPcox (M) */
-    }
-    tccp->reversible = (tccp->dwtid[0] >= 1 && tccp->dwtid[1] >= 1 &&
-                        tccp->dwtid[2] >= 1); /*TODO: only valid for irreversible 9x7 WTs*/
-    if (tccp->csty & J3D_CP_CSTY_PRT) {
-        for (i = 0; i < tccp->numresolution[0]; i++) {
-            int tmp = cio_read(cio, 2); /* SPcox (N_i) */
-            tccp->prctsiz[0][i] = tmp & 0xf;
-            tccp->prctsiz[1][i] = tmp >> 4;
-            tccp->prctsiz[2][i] = tmp >> 8;
-        }
-    }
-}
-
-static void j3d_write_cod(opj_j3d_t *j3d)
-{
-    opj_cp_t *cp = NULL;
-    opj_tcp_t *tcp = NULL;
-    int lenp, len;
-
-    opj_cio_t *cio = j3d->cio;
-
-    cio_write(cio, J3D_MS_COD, 2);  /* COD */
-
-    lenp = cio_tell(cio);
-    cio_skip(cio, 2);
-
-    cp = j3d->cp;
-    tcp = &cp->tcps[j3d->curtileno];
-
-    /* Scod : Table A-4*/
-    cio_write(cio, tcp->csty, 1);       /* Scod : Coding style parameters */
-    /* SGcod : Table A-5*/
-    cio_write(cio, tcp->prg, 1);        /* SGcod (A) : Progression order */
-    cio_write(cio, tcp->numlayers, 2);  /* SGcod (B) : No of layers */
-    cio_write(cio, tcp->mct,
-              1);        /* SGcod (C) : Multiple component transformation usage */
-    /* SPcod : Table A-6*/
-    j3d_write_cox(j3d, 0);
-    len = cio_tell(cio) - lenp;
-    cio_seek(cio, lenp);
-    cio_write(cio, len, 2);     /* Lcod */
-    cio_seek(cio, lenp + len);
-}
-
-static void j3d_read_cod(opj_j3d_t *j3d)
-{
-    int len, i, pos;
-
-    opj_cio_t *cio = j3d->cio;
-    opj_cp_t *cp = j3d->cp;
-    opj_tcp_t *tcp = j3d->state == J3D_STATE_TPH ? &cp->tcps[j3d->curtileno] :
-                     j3d->default_tcp;
-    opj_volume_t *volume = j3d->volume;
-
-    /* Lcod */
-    len = cio_read(cio, 2);
-    /* Scod : Table A-4*/
-    tcp->csty = cio_read(cio, 1);
-    /* SGcod : Table A-5*/
-    tcp->prg = (OPJ_PROG_ORDER)cio_read(cio, 1);
-    tcp->numlayers = cio_read(cio, 2);
-    tcp->mct = cio_read(cio, 1);
-
-    pos = cio_tell(cio);
-    for (i = 0; i < volume->numcomps; i++) {
-        tcp->tccps[i].csty = tcp->csty & J3D_CP_CSTY_PRT;
-        cio_seek(cio, pos);
-        j3d_read_cox(j3d, i);
-    }
-}
-
-static void j3d_write_coc(opj_j3d_t *j3d, int compno)
-{
-    int lenp, len;
-
-    opj_cp_t *cp = j3d->cp;
-    opj_tcp_t *tcp = &cp->tcps[j3d->curtileno];
-    opj_volume_t *volume = j3d->volume;
-    opj_cio_t *cio = j3d->cio;
-
-    cio_write(cio, J3D_MS_COC, 2);  /* COC */
-    lenp = cio_tell(cio);
-    cio_skip(cio, 2);
-    cio_write(cio, compno, volume->numcomps <= 256 ? 1 : 2);    /* Ccoc */
-    cio_write(cio, tcp->tccps[compno].csty, 1);                 /* Scoc */
-
-    j3d_write_cox(j3d, compno);
-
-    len = cio_tell(cio) - lenp;
-    cio_seek(cio, lenp);
-    cio_write(cio, len, 2);         /* Lcoc */
-    cio_seek(cio, lenp + len);
-}
-
-static void j3d_read_coc(opj_j3d_t *j3d)
-{
-    int len, compno;
-
-    opj_cp_t *cp = j3d->cp;
-    opj_tcp_t *tcp = j3d->state == J3D_STATE_TPH ? &cp->tcps[j3d->curtileno] :
-                     j3d->default_tcp;
-    opj_volume_t *volume = j3d->volume;
-    opj_cio_t *cio = j3d->cio;
-
-    len = cio_read(cio, 2);     /* Lcoc */
-    compno = cio_read(cio, volume->numcomps <= 256 ? 1 : 2);    /* Ccoc */
-    tcp->tccps[compno].csty = cio_read(cio, 1); /* Scoc */
-    j3d_read_cox(j3d, compno);
-}
-
-static void j3d_write_qcx(opj_j3d_t *j3d, int compno)
-{
-    int bandno, numbands;
-    int expn, mant;
-
-    opj_cp_t *cp = j3d->cp;
-    opj_tcp_t *tcp = &cp->tcps[j3d->curtileno];
-    opj_tccp_t *tccp = &tcp->tccps[compno];
-    opj_cio_t *cio = j3d->cio;
-
-    cio_write(cio, tccp->qntsty + (tccp->numgbits << 5),
-              1);    /* Sqcx : Table A28 de 15444-1*/
-
-    numbands = 0; // compiler warning
-    if (j3d->cinfo->codec_format == CODEC_J2K) {
-        numbands = tccp->qntsty == J3D_CCP_QNTSTY_SIQNT ? 1 : tccp->numresolution[0] * 3
-                   - 2;
-    } else if (j3d->cinfo->codec_format == CODEC_J3D) {
-        int diff = tccp->numresolution[0] - tccp->numresolution[2];
-        numbands = (tccp->qntsty == J3D_CCP_QNTSTY_SIQNT) ? 1 :
-                   (tccp->numresolution[0] * 7 - 6) - 4 * diff; /* SIQNT vs. SEQNT */
-    }
-
-    for (bandno = 0; bandno < numbands; bandno++) {
-        expn = tccp->stepsizes[bandno].expn;
-        mant = tccp->stepsizes[bandno].mant;
-
-        if (tccp->qntsty == J3D_CCP_QNTSTY_NOQNT) {
-            cio_write(cio, expn << 3, 1);   /* SPqcx_i */
-        } else {
-            cio_write(cio, (expn << 11) + mant, 2); /* SPqcx_i */
-        }
-    }
-}
-
-static void j3d_read_qcx(opj_j3d_t *j3d, int compno, int len)
-{
-    int tmp;
-    int bandno, numbands;
-
-    opj_cp_t *cp = j3d->cp;
-    opj_tcp_t *tcp = j3d->state == J3D_STATE_TPH ? &cp->tcps[j3d->curtileno] :
-                     j3d->default_tcp;
-    opj_tccp_t *tccp = &tcp->tccps[compno];
-    opj_cio_t *cio = j3d->cio;
-
-    tmp = cio_read(cio, 1);     /* Sqcx */
-    tccp->qntsty = tmp & 0x1f;
-    tccp->numgbits = tmp >> 5;
-
-    /*Numbands = 1              si SIQNT
-                 len - 1        si NOQNT
-                 (len - 1) / 2  si SEQNT */
-    numbands = tccp->qntsty == J3D_CCP_QNTSTY_SIQNT ? 1 : ((
-                   tccp->qntsty == J3D_CCP_QNTSTY_NOQNT) ? len - 1 : (len - 1) / 2);
-
-    for (bandno = 0; bandno < numbands; bandno++) {
-        int expn, mant;
-        if (tccp->qntsty == J3D_CCP_QNTSTY_NOQNT) {
-            expn = cio_read(cio, 1) >> 3;   /* SPqcx_i */
-            mant = 0;
-        } else {
-            tmp = cio_read(cio, 2);         /* SPqcx_i */
-            expn = tmp >> 11;
-            mant = tmp & 0x7ff;
-        }
-        tccp->stepsizes[bandno].expn = expn;
-        tccp->stepsizes[bandno].mant = mant;
-    }
-
-    /* Add Antonin : if scalar_derived -> compute other stepsizes */
-    if (tccp->qntsty == J3D_CCP_QNTSTY_SIQNT) {
-        for (bandno = 1; bandno < J3D_MAXBANDS; bandno++) {
-            int numbands = (cp->transform_format == TRF_2D_DWT) ? 3 : 7;
-            tccp->stepsizes[bandno].expn = tccp->stepsizes[0].expn - ((
-                                               bandno - 1) / numbands);
-            tccp->stepsizes[bandno].mant = tccp->stepsizes[0].mant;
-        }
-    }
-    /* ddA */
-}
-
-static void j3d_write_qcd(opj_j3d_t *j3d)
-{
-    int lenp, len;
-
-    opj_cio_t *cio = j3d->cio;
-
-    cio_write(cio, J3D_MS_QCD, 2);  /* QCD */
-    lenp = cio_tell(cio);
-    cio_skip(cio, 2);
-    j3d_write_qcx(j3d, 0);          /* Sqcd*/
-    len = cio_tell(cio) - lenp;
-    cio_seek(cio, lenp);
-    cio_write(cio, len, 2);         /* Lqcd */
-    cio_seek(cio, lenp + len);
-}
-
-static void j3d_read_qcd(opj_j3d_t *j3d)
-{
-    int len, i, pos;
-
-    opj_cio_t *cio = j3d->cio;
-    opj_volume_t *volume = j3d->volume;
-
-    len = cio_read(cio, 2);     /* Lqcd */
-    pos = cio_tell(cio);
-    for (i = 0; i < volume->numcomps; i++) {
-        cio_seek(cio, pos);
-        j3d_read_qcx(j3d, i, len - 2);
-    }
-}
-
-static void j3d_write_qcc(opj_j3d_t *j3d, int compno)
-{
-    int lenp, len;
-
-    opj_cio_t *cio = j3d->cio;
-
-    cio_write(cio, J3D_MS_QCC, 2);  /* QCC */
-    lenp = cio_tell(cio);
-    cio_skip(cio, 2);
-    cio_write(cio, compno, j3d->volume->numcomps <= 256 ? 1 : 2);   /* Cqcc */
-    j3d_write_qcx(j3d, compno);
-    len = cio_tell(cio) - lenp;
-    cio_seek(cio, lenp);
-    cio_write(cio, len, 2);         /* Lqcc */
-    cio_seek(cio, lenp + len);
-}
-
-static void j3d_read_qcc(opj_j3d_t *j3d)
-{
-    int len, compno;
-    int numcomp = j3d->volume->numcomps;
-    opj_cio_t *cio = j3d->cio;
-
-    len = cio_read(cio, 2); /* Lqcc */
-    compno = cio_read(cio, numcomp <= 256 ? 1 : 2); /* Cqcc */
-    j3d_read_qcx(j3d, compno, len - 2 - (numcomp <= 256 ? 1 : 2));
-}
-
-static void j3d_write_poc(opj_j3d_t *j3d)
-{
-    int len, numpchgs, i;
-
-    int numcomps = j3d->volume->numcomps;
-
-    opj_cp_t *cp = j3d->cp;
-    opj_tcp_t *tcp = &cp->tcps[j3d->curtileno];
-    opj_tccp_t *tccp = &tcp->tccps[0];
-    opj_cio_t *cio = j3d->cio;
-
-    numpchgs = tcp->numpocs;
-    cio_write(cio, J3D_MS_POC, 2);  /* POC  */
-    len = 2 + (5 + 2 * (numcomps <= 256 ? 1 : 2)) * numpchgs;
-    cio_write(cio, len, 2);     /* Lpoc */
-    for (i = 0; i < numpchgs; i++) {
-        opj_poc_t *poc = &tcp->pocs[i];
-        cio_write(cio, poc->resno0, 1); /* RSpoc_i */
-        cio_write(cio, poc->compno0, (numcomps <= 256 ? 1 : 2));    /* CSpoc_i */
-        cio_write(cio, poc->layno1, 2); /* LYEpoc_i */
-        poc->layno1 = int_min(poc->layno1, tcp->numlayers);
-        cio_write(cio, poc->resno1, 1); /* REpoc_i */
-        poc->resno1 = int_min(poc->resno1, tccp->numresolution[0]);
-        cio_write(cio, poc->compno1, (numcomps <= 256 ? 1 : 2));    /* CEpoc_i */
-        poc->compno1 = int_min(poc->compno1, numcomps);
-        cio_write(cio, poc->prg, 1);    /* Ppoc_i */
-    }
-}
-
-static void j3d_read_poc(opj_j3d_t *j3d)
-{
-    int len, numpchgs, i, old_poc;
-
-    int numcomps = j3d->volume->numcomps;
-
-    opj_cp_t *cp = j3d->cp;
-    opj_tcp_t *tcp = j3d->state == J3D_STATE_TPH ? &cp->tcps[j3d->curtileno] :
-                     j3d->default_tcp;
-    opj_tccp_t *tccp = &tcp->tccps[0];
-    opj_cio_t *cio = j3d->cio;
-
-    old_poc = tcp->POC ? tcp->numpocs + 1 : 0;
-    tcp->POC = 1;
-    len = cio_read(cio, 2);     /* Lpoc */
-    numpchgs = (len - 2) / (5 + 2 * (numcomps <= 256 ? 1 : 2));
-
-    for (i = old_poc; i < numpchgs + old_poc; i++) {
-        opj_poc_t *poc;
-        poc = &tcp->pocs[i];
-        poc->resno0 = cio_read(cio, 1); /* RSpoc_i */
-        poc->compno0 = cio_read(cio, numcomps <= 256 ? 1 : 2);  /* CSpoc_i */
-        poc->layno1 = int_min(cio_read(cio, 2),
-                              (unsigned int) tcp->numlayers); /* LYEpoc_i */
-        poc->resno1 = int_min(cio_read(cio, 1),
-                              (unsigned int) tccp->numresolution[0]); /* REpoc_i */
-        poc->compno1 = int_min(
-                           cio_read(cio, numcomps <= 256 ? 1 : 2),
-                           (unsigned int) numcomps);   /* CEpoc_i */
-        poc->prg = (OPJ_PROG_ORDER)cio_read(cio, 1);    /* Ppoc_i */
-    }
-
-    tcp->numpocs = numpchgs + old_poc - 1;
-}
-
-static void j3d_read_crg(opj_j3d_t *j3d)
-{
-    int len, i, Xcrg_i, Ycrg_i, Zcrg_i;
-
-    opj_cio_t *cio = j3d->cio;
-    int numcomps = j3d->volume->numcomps;
-
-    len = cio_read(cio, 2);         /* Lcrg */
-    for (i = 0; i < numcomps; i++) {
-        Xcrg_i = cio_read(cio, 2);  /* Xcrg_i */
-        Ycrg_i = cio_read(cio, 2);  /* Ycrg_i */
-        Zcrg_i = cio_read(cio, 2);  /* Zcrg_i */
-    }
-}
-
-static void j3d_read_tlm(opj_j3d_t *j3d)
-{
-    int len, Ztlm, Stlm, ST, SP, tile_tlm, i;
-    long int Ttlm_i, Ptlm_i;
-
-    opj_cio_t *cio = j3d->cio;
-
-    len = cio_read(cio, 2);     /* Ltlm */
-    Ztlm = cio_read(cio, 1);    /* 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 */
-        Ptlm_i = cio_read(cio, SP ? 4 : 2); /* Ptlm_i */
-    }
-}
-
-static void j3d_read_plm(opj_j3d_t *j3d)
-{
-    int len, i, Zplm, Nplm, add, packet_len = 0;
-
-    opj_cio_t *cio = j3d->cio;
-
-    len = cio_read(cio, 2);     /* Lplm */
-    Zplm = cio_read(cio, 1);    /* Zplm */
-    len -= 3;
-    while (len > 0) {
-        Nplm = cio_read(cio, 4);        /* Nplm */
-        len -= 4;
-        for (i = Nplm; i > 0; i--) {
-            add = cio_read(cio, 1);
-            len--;
-            packet_len = (packet_len << 7) + add;   /* Iplm_ij */
-            if ((add & 0x80) == 0) {
-                /* New packet */
-                packet_len = 0;
-            }
-            if (len <= 0) {
-                break;
-            }
-        }
-    }
-}
-
-static void j3d_read_plt(opj_j3d_t *j3d)
-{
-    int len, i, Zplt, packet_len = 0, add;
-
-    opj_cio_t *cio = j3d->cio;
-
-    len = cio_read(cio, 2);     /* Lplt */
-    Zplt = cio_read(cio, 1);    /* Zplt */
-    for (i = len - 3; i > 0; i--) {
-        add = cio_read(cio, 1);
-        packet_len = (packet_len << 7) + add;   /* Iplt_i */
-        if ((add & 0x80) == 0) {
-            /* New packet */
-            packet_len = 0;
-        }
-    }
-}
-
-static void j3d_read_ppm(opj_j3d_t *j3d)
-{
-    int len, Z_ppm, i, j;
-    int N_ppm;
-
-    opj_cp_t *cp = j3d->cp;
-    opj_cio_t *cio = j3d->cio;
-
-    len = cio_read(cio, 2);
-    cp->ppm = 1;
-
-    Z_ppm = cio_read(cio, 1);   /* Z_ppm */
-    len -= 3;
-    while (len > 0) {
-        if (cp->ppm_previous == 0) {
-            N_ppm = cio_read(cio, 4);   /* N_ppm */
-            len -= 4;
-        } else {
-            N_ppm = cp->ppm_previous;
-        }
-        j = cp->ppm_store;
-        if (Z_ppm == 0) {   /* First PPM marker */
-            cp->ppm_data = (unsigned char *) opj_malloc(N_ppm * sizeof(unsigned char));
-            cp->ppm_data_first = cp->ppm_data;
-            cp->ppm_len = N_ppm;
-        } else {            /* NON-first PPM marker */
-            cp->ppm_data = (unsigned char *) opj_realloc(cp->ppm_data,
-                           (N_ppm + cp->ppm_store) * sizeof(unsigned char));
-            cp->ppm_data_first = cp->ppm_data;
-            cp->ppm_len = N_ppm + cp->ppm_store;
-        }
-        for (i = N_ppm; i > 0; i--) {   /* Read packet header */
-            cp->ppm_data[j] = cio_read(cio, 1);
-            j++;
-            len--;
-            if (len == 0) {
-                break;    /* Case of non-finished packet header in present marker but finished in next one */
-            }
-        }
-        cp->ppm_previous = i - 1;
-        cp->ppm_store = j;
-    }
-}
-
-static void j3d_read_ppt(opj_j3d_t *j3d)
-{
-    int len, Z_ppt, i, j = 0;
-
-    opj_cp_t *cp = j3d->cp;
-    opj_tcp_t *tcp = cp->tcps + j3d->curtileno;
-    opj_cio_t *cio = j3d->cio;
-
-    len = cio_read(cio, 2);
-    Z_ppt = cio_read(cio, 1);
-    tcp->ppt = 1;
-    if (Z_ppt == 0) {       /* First PPT marker */
-        tcp->ppt_data = (unsigned char *) opj_malloc((len - 3) * sizeof(unsigned char));
-        tcp->ppt_data_first = tcp->ppt_data;
-        tcp->ppt_store = 0;
-        tcp->ppt_len = len - 3;
-    } else {            /* NON-first PPT marker */
-        tcp->ppt_data = (unsigned char *) opj_realloc(tcp->ppt_data,
-                        (len - 3 + tcp->ppt_store) * sizeof(unsigned char));
-        tcp->ppt_data_first = tcp->ppt_data;
-        tcp->ppt_len = len - 3 + tcp->ppt_store;
-    }
-    j = tcp->ppt_store;
-    for (i = len - 3; i > 0; i--) {
-        tcp->ppt_data[j] = cio_read(cio, 1);
-        j++;
-    }
-    tcp->ppt_store = j;
-}
-
-static void j3d_write_sot(opj_j3d_t *j3d)
-{
-    int lenp, len;
-
-    opj_cio_t *cio = j3d->cio;
-
-    j3d->sot_start = cio_tell(cio);
-    cio_write(cio, J3D_MS_SOT, 2);      /* SOT */
-    lenp = cio_tell(cio);
-    cio_skip(cio, 2);                   /* Lsot (further) */
-    cio_write(cio, j3d->curtileno, 2);  /* Isot */
-    cio_skip(cio, 4);                   /* Psot (further in j3d_write_sod) */
-    cio_write(cio, 0, 1);               /* TPsot */
-    cio_write(cio, 1,
-              1);               /* TNsot (no of tile-parts of this tile in this codestream)*/
-    len = cio_tell(cio) - lenp;
-    cio_seek(cio, lenp);
-    cio_write(cio, len, 2);             /* Lsot */
-    cio_seek(cio, lenp + len);
-}
-
-static void j3d_read_sot(opj_j3d_t *j3d)
-{
-    int len, tileno, totlen, partno, numparts, i;
-    opj_tcp_t *tcp = NULL;
-    char status = 0;
-
-    opj_cp_t *cp = j3d->cp;
-    opj_cio_t *cio = j3d->cio;
-
-    len = cio_read(cio, 2);
-    tileno = cio_read(cio, 2);
-
-    if (cp->tileno_size == 0) {
-        cp->tileno[cp->tileno_size] = tileno;
-        cp->tileno_size++;
-    } else {
-        i = 0;
-        while (i < cp->tileno_size && status == 0) {
-            status = cp->tileno[i] == tileno ? 1 : 0;
-            i++;
-        }
-        if (status == 0) {
-            cp->tileno[cp->tileno_size] = tileno;
-            cp->tileno_size++;
-        }
-    }
-
-    totlen = cio_read(cio, 4);
-    if (!totlen) {
-        totlen = cio_numbytesleft(cio) + 8;
-    }
-
-    partno = cio_read(cio, 1);
-    numparts = cio_read(cio, 1);
-
-    j3d->curtileno = tileno;
-    j3d->eot = cio_getbp(cio) - 12 + totlen;
-    j3d->state = J3D_STATE_TPH;
-    tcp = &cp->tcps[j3d->curtileno];
-
-    if (tcp->first == 1) {
-
-        /* Initialization PPT */
-        opj_tccp_t *tmp = tcp->tccps;
-        memcpy(tcp, j3d->default_tcp, sizeof(opj_tcp_t));
-        tcp->ppt = 0;
-        tcp->ppt_data = NULL;
-        tcp->ppt_data_first = NULL;
-        tcp->tccps = tmp;
-
-        for (i = 0; i < j3d->volume->numcomps; i++) {
-            tcp->tccps[i] = j3d->default_tcp->tccps[i];
-        }
-        cp->tcps[j3d->curtileno].first = 0;
-    }
-}
-
-static void j3d_write_sod(opj_j3d_t *j3d, void *tile_coder)
-{
-    int l, layno;
-    int totlen;
-    opj_tcp_t *tcp = NULL;
-    opj_volume_info_t *volume_info = NULL;
-
-    opj_tcd_t *tcd = (opj_tcd_t*)
-                     tile_coder;    /* cast is needed because of conflicts in header inclusions */
-    opj_cp_t *cp = j3d->cp;
-    opj_cio_t *cio = j3d->cio;
-
-    cio_write(cio, J3D_MS_SOD, 2);
-    if (j3d->curtileno == 0) {
-        j3d->sod_start = cio_tell(cio) + j3d->pos_correction;
-    }
-
-    /* INDEX >> */
-    volume_info = j3d->volume_info;
-    if (volume_info && volume_info->index_on) {
-        volume_info->tile[j3d->curtileno].end_header = cio_tell(
-                    cio) + j3d->pos_correction - 1;
-    }
-    /* << INDEX */
-
-    tcp = &cp->tcps[j3d->curtileno];
-    for (layno = 0; layno < tcp->numlayers; layno++) {
-        tcp->rates[layno] -= tcp->rates[layno] ? (j3d->sod_start /
-                             (cp->th * cp->tw * cp->tl)) : 0;
-    }
-
-    if (volume_info) {
-        volume_info->num = 0;
-    }
-
-    l = tcd_encode_tile(tcd, j3d->curtileno, cio_getbp(cio),
-                        cio_numbytesleft(cio) - 2, volume_info);
-
-    /* Writing Psot in SOT marker */
-    totlen = cio_tell(cio) + l - j3d->sot_start;
-    cio_seek(cio, j3d->sot_start + 6);
-    cio_write(cio, totlen, 4);
-    cio_seek(cio, j3d->sot_start + totlen);
-}
-
-static void j3d_read_sod(opj_j3d_t *j3d)
-{
-    int len, truncate = 0, i;
-    unsigned char *data = NULL, *data_ptr = NULL;
-
-    opj_cio_t *cio = j3d->cio;
-    int curtileno = j3d->curtileno;
-
-    len = int_min(j3d->eot - cio_getbp(cio), cio_numbytesleft(cio) + 1);
-
-    if (len == cio_numbytesleft(cio) + 1) {
-        truncate = 1;       /* Case of a truncate codestream */
-    }
-
-    data = (unsigned char *) opj_malloc((j3d->tile_len[curtileno] + len) * sizeof(
-                                            unsigned char));
-
-    for (i = 0; i < j3d->tile_len[curtileno]; i++) {
-        data[i] = j3d->tile_data[curtileno][i];
-    }
-
-    data_ptr = data + j3d->tile_len[curtileno];
-    for (i = 0; i < len; i++) {
-        data_ptr[i] = cio_read(cio, 1);
-    }
-
-    j3d->tile_len[curtileno] += len;
-    opj_free(j3d->tile_data[curtileno]);
-    j3d->tile_data[curtileno] = data;
-
-    if (!truncate) {
-        j3d->state = J3D_STATE_TPHSOT;
-    } else {
-        j3d->state = J3D_STATE_NEOC;    /* RAJOUTE !! */
-    }
-}
-
-static void j3d_write_rgn(opj_j3d_t *j3d, int compno, int tileno)
-{
-
-    opj_cp_t *cp = j3d->cp;
-    opj_tcp_t *tcp = &cp->tcps[tileno];
-    opj_cio_t *cio = j3d->cio;
-    int numcomps = j3d->volume->numcomps;
-
-    cio_write(cio, J3D_MS_RGN, 2);                      /* RGN  */
-    cio_write(cio, numcomps <= 256 ? 5 : 6, 2);         /* Lrgn */
-    cio_write(cio, compno, numcomps <= 256 ? 1 : 2);    /* Crgn */
-    cio_write(cio, 0, 1);                               /* Srgn */
-    cio_write(cio, tcp->tccps[compno].roishift, 1);     /* SPrgn */
-}
-
-static void j3d_read_rgn(opj_j3d_t *j3d)
-{
-    int len, compno, roisty;
-
-    opj_cp_t *cp = j3d->cp;
-    opj_tcp_t *tcp = j3d->state == J3D_STATE_TPH ? &cp->tcps[j3d->curtileno] :
-                     j3d->default_tcp;
-    opj_cio_t *cio = j3d->cio;
-    int numcomps = j3d->volume->numcomps;
-
-    len = cio_read(cio, 2);                                     /* Lrgn */
-    compno = cio_read(cio, numcomps <= 256 ? 1 : 2);            /* Crgn */
-    roisty = cio_read(cio, 1);                                  /* Srgn */
-    tcp->tccps[compno].roishift = cio_read(cio, 1);             /* SPrgn */
-}
-
-static void j3d_write_eoc(opj_j3d_t *j3d)
-{
-    opj_cio_t *cio = j3d->cio;
-    /* opj_event_msg(j3d->cinfo, "%.8x: EOC\n", cio_tell(cio) + j3d->pos_correction); */
-    cio_write(cio, J3D_MS_EOC, 2);
-}
-
-static void j3d_read_eoc(opj_j3d_t *j3d)
-{
-    int i, tileno;
-
-#ifndef NO_PACKETS_DECODING
-    opj_tcd_t *tcd = tcd_create(j3d->cinfo);
-    tcd_malloc_decode(tcd, j3d->volume, j3d->cp);
-    /*j3d_dump_volume(stdout, tcd->volume);
-    j3d_dump_cp(stdout, tcd->volume, tcd->cp);*/
-    for (i = 0; i < j3d->cp->tileno_size; i++) {
-        tileno = j3d->cp->tileno[i];
-        /*opj_event_msg(j3d->cinfo, EVT_INFO, "tcd_decode_tile \n");*/
-        tcd_decode_tile(tcd, j3d->tile_data[tileno], j3d->tile_len[tileno], tileno);
-        opj_free(j3d->tile_data[tileno]);
-        j3d->tile_data[tileno] = NULL;
-    }
-    tcd_free_decode(tcd);
-    tcd_destroy(tcd);
-#else
-    for (i = 0; i < j3d->cp->tileno_size; i++) {
-        tileno = j3d->cp->tileno[i];
-        opj_free(j3d->tile_data[tileno]);
-        j3d->tile_data[tileno] = NULL;
-    }
-#endif
-
-    j3d->state = J3D_STATE_MT;
-}
-
-static void j3d_read_unk(opj_j3d_t *j3d)
-{
-    opj_event_msg(j3d->cinfo, EVT_WARNING, "Unknown marker\n");
-}
-
-static opj_atk_t atk_info_wt[] = {
-    {0, 1, J3D_ATK_WS, J3D_ATK_IRR, 0, J3D_ATK_WS, 1.230174104, 4, {0}, {0}, {0}, {1, 1, 1, 1}, {-1.586134342059924, -0.052980118572961, 0.882911075530934, 0.443506852043971}}, /* WT 9-7 IRR*/
-    {1, 0, J3D_ATK_WS, J3D_ATK_REV, 0, J3D_ATK_WS, 0, 2, {0}, {1, 2}, {1, 2}, {1, 1}, {-1.0, 1.0}}, /* WT 5-3 REV*/
-    {2, 0, J3D_ATK_ARB, J3D_ATK_REV, 0, J3D_ATK_CON, 0, 2, {0, 0}, {0, 1}, {0, 1}, {1, 1}, {{-1.0}, {1.0}}}, /* WT 2-2 REV*/
-    {3, 0, J3D_ATK_ARB, J3D_ATK_REV, 1, J3D_ATK_CON, 0, 3, {0, 0, -1}, {0, 1, 2}, {0, 1, 2}, {1, 1, 3}, {{-1.0}, {1.0}, {1.0, 0.0, -1.0}}}, /* WT 2-6 REV*/
-    {4, 0, J3D_ATK_ARB, J3D_ATK_REV, 1, J3D_ATK_CON, 0, 3, {0, 0, -2}, {0, 1, 6}, {0, 1, 32}, {1, 1, 5}, {{-1}, {1}, {-3.0, 22.0, 0.0, -22.0, 3.0}}}, /* WT 2-10 REV*/
-    {5, 1, J3D_ATK_ARB, J3D_ATK_IRR, 1, J3D_ATK_WS, 1, 7, {0}, {0}, {0}, {1, 1, 2, 1, 2, 1, 3}, {{-1}, {1.58613434206}, {-0.460348209828, 0.460348209828}, {0.25}, {0.374213867768, -0.374213867768}, {-1.33613434206}, {0.29306717103, 0, -0.29306717103}}}, /* WT 6-10 IRR*/
-    {
-        6, 1, J3D_ATK_ARB, J3D_ATK_IRR, 0, J3D_ATK_WS, 1, 11, {0}, {0}, {0}, {1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 5}, {{-1}, {0, 99715069105}, {-1.00573127827, 1.00573127827}, {-0.27040357631}, {2.20509972343, -2.20509972343}, {0.08059995736},
-            {-1.62682532350, 1.62682532350}, {0.52040357631}, {0.60404664250, -0.60404664250}, {-0.82775064841}, {-0.06615812964, 0.29402137720, 0, -0.29402137720, 0.06615812964}
-        }
-    }, /* WT 10-18 IRR*/
-    {7, 1, J3D_ATK_WS, J3D_ATK_IRR, 0, J3D_ATK_WS, 1, 2, {0}, {0}, {0}, {1, 1}, {-0.5, 0.25}},  /* WT 5-3 IRR*/
-    {8, 0, J3D_ATK_WS, J3D_ATK_REV, 0, J3D_ATK_WS, 0, 2, {0}, {4, 4}, {8, 8}, {2, 2}, {{-9, 1}, {5, -1}}} /* WT 13-7 REV*/
-};
-
-typedef struct opj_dec_mstabent {
-    /** marker value */
-    int id;
-    /** value of the state when the marker can appear */
-    int states;
-    /** action linked to the marker */
-    void (*handler)(opj_j3d_t *j3d);
-} opj_dec_mstabent_t;
-
-opj_dec_mstabent_t j3d_dec_mstab[] = {
-    {J3D_MS_SOC, J3D_STATE_MHSOC, j3d_read_soc},
-    {J3D_MS_SOT, J3D_STATE_MH | J3D_STATE_TPHSOT, j3d_read_sot},
-    {J3D_MS_SOD, J3D_STATE_TPH, j3d_read_sod},
-    {J3D_MS_EOC, J3D_STATE_TPHSOT, j3d_read_eoc},
-    {J3D_MS_CAP, J3D_STATE_MHSIZ, j3d_read_cap},
-    {J3D_MS_SIZ, J3D_STATE_MHSIZ, j3d_read_siz},
-    {J3D_MS_NSI, J3D_STATE_MHSIZ, j3d_read_nsi},
-    {J3D_MS_COD, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_cod},
-    {J3D_MS_COC, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_coc},
-    {J3D_MS_RGN, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_rgn},
-    {J3D_MS_QCD, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_qcd},
-    {J3D_MS_QCC, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_qcc},
-    {J3D_MS_POC, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_poc},
-    {J3D_MS_TLM, J3D_STATE_MH, j3d_read_tlm},
-    {J3D_MS_PLM, J3D_STATE_MH, j3d_read_plm},
-    {J3D_MS_PLT, J3D_STATE_TPH, j3d_read_plt},
-    {J3D_MS_PPM, J3D_STATE_MH, j3d_read_ppm},
-    {J3D_MS_PPT, J3D_STATE_TPH, j3d_read_ppt},
-    {J3D_MS_SOP, 0, 0},
-    {J3D_MS_CRG, J3D_STATE_MH, j3d_read_crg},
-    {J3D_MS_COM, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_com},
-    {J3D_MS_DCO, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_dco},
-    {J3D_MS_ATK, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_atk},
-    {0, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_unk}
-    /*, -->must define the j3d_read functions
-    {J3D_MS_CBD, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_cbd},
-    {J3D_MS_MCT, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_mct},
-    {J3D_MS_MCC, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_mcc},
-    {J3D_MS_MCO, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_mco},
-    {J3D_MS_NLT, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_nlt},
-    {J3D_MS_VMS, J3D_STATE_MH, j3d_read_vms},
-    {J3D_MS_DFS, J3D_STATE_MH, j3d_read_dfs},
-    {J3D_MS_ADS, J3D_STATE_MH, j3d_read_ads},
-    {J3D_MS_QPD, J3D_STATE_MH, j3d_read_qpd},
-    {J3D_MS_QPC, J3D_STATE_TPH, j3d_read_qpc}*/
-};
-
-/**
-Read the lookup table containing all the marker, status and action
-@param id Marker value
-*/
-static opj_dec_mstabent_t *j3d_dec_mstab_lookup(int id)
-{
-    opj_dec_mstabent_t *e;
-    for (e = j3d_dec_mstab; e->id != 0; e++) {
-        if (e->id == id) {
-            break;
-        }
-    }
-    return e;
-}
-
-/* ----------------------------------------------------------------------- */
-/* J3D / JPT decoder interface                                             */
-/* ----------------------------------------------------------------------- */
-
-opj_j3d_t* j3d_create_decompress(opj_common_ptr cinfo)
-{
-    opj_j3d_t *j3d = (opj_j3d_t*)opj_malloc(sizeof(opj_j3d_t));
-    if (j3d) {
-        j3d->cinfo = cinfo;
-        j3d->default_tcp = (opj_tcp_t*)opj_malloc(sizeof(opj_tcp_t));
-        if (!j3d->default_tcp) {
-            opj_free(j3d);
-            return NULL;
-        }
-    }
-    return j3d;
-}
-
-void j3d_destroy_decompress(opj_j3d_t *j3d)
-{
-    int i = 0;
-
-    if (j3d->tile_len != NULL) {
-        opj_free(j3d->tile_len);
-    }
-    if (j3d->tile_data != NULL) {
-        opj_free(j3d->tile_data);
-    }
-    if (j3d->default_tcp != NULL) {
-        opj_tcp_t *default_tcp = j3d->default_tcp;
-        if (default_tcp->ppt_data_first != NULL) {
-            opj_free(default_tcp->ppt_data_first);
-        }
-        if (j3d->default_tcp->tccps != NULL) {
-            opj_free(j3d->default_tcp->tccps);
-        }
-        opj_free(j3d->default_tcp);
-    }
-    if (j3d->cp != NULL) {
-        opj_cp_t *cp = j3d->cp;
-        if (cp->tcps != NULL) {
-            for (i = 0; i < cp->tw * cp->th * cp->tl; i++) {
-                if (cp->tcps[i].ppt_data_first != NULL) {
-                    opj_free(cp->tcps[i].ppt_data_first);
-                }
-                if (cp->tcps[i].tccps != NULL) {
-                    opj_free(cp->tcps[i].tccps);
-                }
-            }
-            opj_free(cp->tcps);
-        }
-        if (cp->ppm_data_first != NULL) {
-            opj_free(cp->ppm_data_first);
-        }
-        if (cp->tileno != NULL) {
-            opj_free(cp->tileno);
-        }
-        if (cp->comment != NULL) {
-            opj_free(cp->comment);
-        }
-
-        opj_free(cp);
-    }
-
-    opj_free(j3d);
-}
-
-void j3d_setup_decoder(opj_j3d_t *j3d, opj_dparameters_t *parameters)
-{
-    if (j3d && parameters) {
-        /* create and initialize the coding parameters structure */
-        opj_cp_t *cp = (opj_cp_t*)opj_malloc(sizeof(opj_cp_t));
-        cp->reduce[0] = parameters->cp_reduce[0];
-        cp->reduce[1] = parameters->cp_reduce[1];
-        cp->reduce[2] = parameters->cp_reduce[2];
-        cp->layer = parameters->cp_layer;
-        cp->bigendian = parameters->bigendian;
-
-        /* MM: Settings of the following two member variables would take
-          place during j3d_read_com. FIXME */
-        cp->encoding_format = ENCOD_3EB;
-        cp->transform_format = TRF_2D_DWT;
-
-        /* keep a link to cp so that we can destroy it later in j3d_destroy_decompress */
-        j3d->cp = cp;
-    }
-}
-
-opj_volume_t* j3d_decode(opj_j3d_t *j3d, opj_cio_t *cio)
-{
-    opj_volume_t *volume = NULL;
-
-    opj_common_ptr cinfo = j3d->cinfo;
-
-    j3d->cio = cio;
-
-    /* create an empty volume */
-    volume = (opj_volume_t*)opj_malloc(sizeof(opj_volume_t));
-    j3d->volume = volume;
-
-    j3d->state = J3D_STATE_MHSOC;
-
-    for (;;) {
-        opj_dec_mstabent_t *e;
-        int id = cio_read(cio, 2);
-        if (id >> 8 != 0xff) {
-            opj_volume_destroy(volume);
-            opj_event_msg(cinfo, EVT_ERROR, "%.8x: expected a marker instead of %x\n",
-                          cio_tell(cio) - 2, id);
-            return 0;
-        }
-        e = j3d_dec_mstab_lookup(id);
-        /*opj_event_msg(cinfo, EVT_INFO, "MARKER %x PREVSTATE %d E->STATE %d\n",e->id,j3d->state,e->states);*/
-        if (!(j3d->state & e->states)) {
-            opj_volume_destroy(volume);
-            opj_event_msg(cinfo, EVT_ERROR, "%.8x: unexpected marker %x\n",
-                          cio_tell(cio) - 2, id);
-            return 0;
-        }
-        if (e->handler) {
-            (*e->handler)(j3d);
-        }
-        /*opj_event_msg(cinfo, EVT_INFO, "POSTSTATE %d\n",j3d->state);*/
-        if (j3d->state == J3D_STATE_MT) {
-            break;
-        }
-        if (j3d->state == J3D_STATE_NEOC) {
-            break;
-        }
-    }
-    if (j3d->state == J3D_STATE_NEOC) {
-        j3d_read_eoc(j3d);
-    }
-
-    if (j3d->state != J3D_STATE_MT) {
-        opj_event_msg(cinfo, EVT_WARNING, "Incomplete bitstream\n");
-    }
-
-    return volume;
-}
-
-/* ----------------------------------------------------------------------- */
-/* J3D encoder interface                                                       */
-/* ----------------------------------------------------------------------- */
-
-opj_j3d_t* j3d_create_compress(opj_common_ptr cinfo)
-{
-    opj_j3d_t *j3d = (opj_j3d_t*)opj_malloc(sizeof(opj_j3d_t));
-    if (j3d) {
-        j3d->cinfo = cinfo;
-    }
-    return j3d;
-}
-
-void j3d_destroy_compress(opj_j3d_t *j3d)
-{
-    int tileno;
-
-    if (!j3d) {
-        return;
-    }
-
-    if (j3d->volume_info != NULL) {
-        opj_volume_info_t *volume_info = j3d->volume_info;
-        if (volume_info->index_on && j3d->cp) {
-            opj_cp_t *cp = j3d->cp;
-            for (tileno = 0; tileno < cp->tw * cp->th; tileno++) {
-                opj_tile_info_t *tile_info = &volume_info->tile[tileno];
-                opj_free(tile_info->thresh);
-                opj_free(tile_info->packet);
-            }
-            opj_free(volume_info->tile);
-        }
-        opj_free(volume_info);
-    }
-    if (j3d->cp != NULL) {
-        opj_cp_t *cp = j3d->cp;
-
-        if (cp->comment) {
-            opj_free(cp->comment);
-        }
-        if (cp->matrice) {
-            opj_free(cp->matrice);
-        }
-        for (tileno = 0; tileno < cp->tw * cp->th; tileno++) {
-            opj_free(cp->tcps[tileno].tccps);
-        }
-        opj_free(cp->tcps);
-        opj_free(cp);
-    }
-
-    opj_free(j3d);
-}
-
-void j3d_setup_encoder(opj_j3d_t *j3d, opj_cparameters_t *parameters,
-                       opj_volume_t *volume)
-{
-    int i, j, tileno, numpocs_tile;
-    opj_cp_t *cp = NULL;
-
-    if (!j3d || !parameters || ! volume) {
-        return;
-    }
-
-    /* create and initialize the coding parameters structure */
-    cp = (opj_cp_t*)opj_malloc(sizeof(opj_cp_t));
-
-    /* keep a link to cp so that we can destroy it later in j3d_destroy_compress */
-    j3d->cp = cp;
-
-    /* set default values for cp */
-    cp->tw = 1;
-    cp->th = 1;
-    cp->tl = 1;
-
-    /* copy user encoding parameters */
-    cp->disto_alloc = parameters->cp_disto_alloc;
-    cp->fixed_alloc = parameters->cp_fixed_alloc;
-    cp->fixed_quality = parameters->cp_fixed_quality;
-
-    /* transform and coding method */
-    cp->transform_format = parameters->transform_format;
-    cp->encoding_format = parameters->encoding_format;
-
-    /* mod fixed_quality */
-    if (parameters->cp_matrice) {
-        size_t array_size = parameters->tcp_numlayers * 3 * parameters->numresolution[0]
-                            * sizeof(int);
-        cp->matrice = (int *) opj_malloc(array_size);
-        memcpy(cp->matrice, parameters->cp_matrice, array_size);
-    }
-
-    /* creation of an index file ? */
-    cp->index_on = parameters->index_on;
-    if (cp->index_on) {
-        j3d->volume_info = (opj_volume_info_t*)opj_malloc(sizeof(opj_volume_info_t));
-    }
-
-    /* tiles */
-    cp->tdx = parameters->cp_tdx;
-    cp->tdy = parameters->cp_tdy;
-    cp->tdz = parameters->cp_tdz;
-    /* tile offset */
-    cp->tx0 = parameters->cp_tx0;
-    cp->ty0 = parameters->cp_ty0;
-    cp->tz0 = parameters->cp_tz0;
-    /* comment string */
-    if (parameters->cp_comment) {
-        cp->comment = (char*)opj_malloc(strlen(parameters->cp_comment) + 1);
-        if (cp->comment) {
-            strcpy(cp->comment, parameters->cp_comment);
-        }
-    }
-
-    /*calculate other encoding parameters*/
-    if (parameters->tile_size_on) {
-        cp->tw = int_ceildiv(volume->x1 - cp->tx0, cp->tdx);
-        cp->th = int_ceildiv(volume->y1 - cp->ty0, cp->tdy);
-        cp->tl = int_ceildiv(volume->z1 - cp->tz0, cp->tdz);
-    } else {
-        cp->tdx = volume->x1 - cp->tx0;
-        cp->tdy = volume->y1 - cp->ty0;
-        cp->tdz = volume->z1 - cp->tz0;
-    }
-
-    /* initialize the multiple tiles */
-    /* ---------------------------- */
-    cp->tcps = (opj_tcp_t *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(
-                                            opj_tcp_t));
-
-    for (tileno = 0; tileno < cp->tw * cp->th * cp->tl; tileno++) {
-        opj_tcp_t *tcp = &cp->tcps[tileno];
-        tcp->numlayers = parameters->tcp_numlayers;
-        for (j = 0; j < tcp->numlayers; j++) {
-            if (cp->fixed_quality) {    /* add fixed_quality */
-                tcp->distoratio[j] = parameters->tcp_distoratio[j];
-            } else {
-                tcp->rates[j] = parameters->tcp_rates[j];
-            }
-        }
-        tcp->csty = parameters->csty;
-        tcp->prg = parameters->prog_order;
-        tcp->mct = volume->numcomps == 3 ? 1 : 0;
-
-        numpocs_tile = 0;
-        tcp->POC = 0;
-        if (parameters->numpocs) {
-            /* initialisation of POC */
-            tcp->POC = 1;
-            for (i = 0; i < parameters->numpocs; i++) {
-                if ((tileno == parameters->POC[i].tile - 1) ||
-                        (parameters->POC[i].tile == -1)) {
-                    opj_poc_t *tcp_poc = &tcp->pocs[numpocs_tile];
-                    tcp_poc->resno0     = parameters->POC[numpocs_tile].resno0;
-                    tcp_poc->compno0    = parameters->POC[numpocs_tile].compno0;
-                    tcp_poc->layno1     = parameters->POC[numpocs_tile].layno1;
-                    tcp_poc->resno1     = parameters->POC[numpocs_tile].resno1;
-                    tcp_poc->compno1    = parameters->POC[numpocs_tile].compno1;
-                    tcp_poc->prg        = parameters->POC[numpocs_tile].prg;
-                    tcp_poc->tile       = parameters->POC[numpocs_tile].tile;
-                    numpocs_tile++;
-                }
-            }
-        }
-        tcp->numpocs = numpocs_tile;
-
-        tcp->tccps = (opj_tccp_t *) opj_malloc(volume->numcomps * sizeof(opj_tccp_t));
-
-        for (i = 0; i < volume->numcomps; i++) {
-            opj_tccp_t *tccp = &tcp->tccps[i];
-            tccp->csty = parameters->csty &
-                         J3D_CCP_CSTY_PRT;   /* 0 => standard precint || 1 => custom-defined precinct  */
-            tccp->numresolution[0] = parameters->numresolution[0];
-            tccp->numresolution[1] = parameters->numresolution[1];
-            tccp->numresolution[2] = parameters->numresolution[2];
-            assert(parameters->cblock_init[0] <= T1_MAXCBLKW);
-            assert(parameters->cblock_init[0] >= T1_MINCBLKW);
-            assert(parameters->cblock_init[1] <= T1_MAXCBLKH);
-            assert(parameters->cblock_init[1] >= T1_MINCBLKH);
-            assert(parameters->cblock_init[2] <= T1_MAXCBLKD);
-            assert(parameters->cblock_init[2] >= T1_MINCBLKD);
-            tccp->cblk[0] = int_floorlog2(parameters->cblock_init[0]);
-            tccp->cblk[1] = int_floorlog2(parameters->cblock_init[1]);
-            tccp->cblk[2] = int_floorlog2(parameters->cblock_init[2]);
-            assert(tccp->cblk[0] + tccp->cblk[1] + tccp->cblk[1] <= T1_MAXWHD);
-            tccp->cblksty = parameters->mode; /*Codeblock style --> Table A.19 (default 0)*/
-
-            /*ATK / transform */
-            tccp->reversible = parameters->irreversible ? 0 :
-                               1; /* 0 => DWT 9-7 || 1 => DWT 5-3  */
-            for (j = 0; j < 3; j++) {
-                tccp->dwtid[j] = parameters->irreversible ? 0 :
-                                 1; /* 0 => DWT 9-7 || 1 => DWT 5-3  */
-            }
-
-            /* Quantification: SEQNT (Scalar Expounded, value for each subband) / NOQNT (no quant)*/
-            tccp->qntsty = parameters->irreversible ? J3D_CCP_QNTSTY_SEQNT :
-                           J3D_CCP_QNTSTY_NOQNT;
-            tccp->numgbits = 2;
-            if (i == parameters->roi_compno) {
-                tccp->roishift = parameters->roi_shift;
-            } else {
-                tccp->roishift = 0;
-            }
-            /* Custom defined precints */
-            if (parameters->csty & J3D_CCP_CSTY_PRT) {
-                int k;
-                for (k = 0; k < 3; k++) {
-                    int p = 0;
-                    for (j = tccp->numresolution[k] - 1; j >= 0; j--) {
-                        if (p < parameters->res_spec) {/* p < number of precinct size specifications */
-                            if (parameters->prct_init[k][p] < 1) {
-                                tccp->prctsiz[k][j] = 1;
-                            } else {
-                                tccp->prctsiz[k][j] = int_floorlog2(parameters->prct_init[k][p]);
-                            }
-                        } else {
-                            int res_spec = parameters->res_spec;
-                            int size_prct = parameters->prct_init[k][res_spec - 1] >> (p - (res_spec - 1));
-                            if (size_prct < 1) {
-                                tccp->prctsiz[k][j] = 1;
-                            } else {
-                                tccp->prctsiz[k][j] = int_floorlog2(size_prct);
-                            }
-                        }
-                    }
-                    p++;
-                }
-            } else {
-                int k;
-                for (k = 0; k < 3; k++) {
-                    for (j = 0; j < tccp->numresolution[k]; j++) {
-                        tccp->prctsiz[k][j] = 15;
-                    }
-                }
-            }
-            /*Calcular stepsize for each subband (if NOQNT -->stepsize = 1.0)*/
-            dwt_calc_explicit_stepsizes(tccp, volume->comps[i].prec);
-        }
-    }
-}
-
-/**
-Create an index file
-@param j3d
-@param cio
-@param volume_info
-@param index Index filename
-@return Returns 1 if successful, returns 0 otherwise
-*/
-static int j3d_create_index(opj_j3d_t *j3d, opj_cio_t *cio,
-                            opj_volume_info_t *volume_info, char *index)
-{
-
-    int tileno, compno, layno, resno, precno, pack_nb, x, y, z;
-    FILE *stream = NULL;
-    double total_disto = 0;
-
-    volume_info->codestream_size = cio_tell(cio) +
-                                   j3d->pos_correction; /* Correction 14/4/03 suite rmq de Patrick */
-
-    stream = fopen(index, "w");
-    if (!stream) {
-        opj_event_msg(j3d->cinfo, EVT_ERROR, "failed to open %s for writing\n", index);
-        return 0;
-    }
-
-    fprintf(stream, "w %d\t h %d\t l %d\n", volume_info->volume_w,
-            volume_info->volume_h, volume_info->volume_l);
-    fprintf(stream, "TRASNFORM\t%d\n", volume_info->transform_format);
-    fprintf(stream, "ENTROPY CODING\t%d\n", volume_info->encoding_format);
-    fprintf(stream, "PROG\t%d\n", volume_info->prog);
-    fprintf(stream, "TILE\tx %d y %d z %d\n", volume_info->tile_x,
-            volume_info->tile_y, volume_info->tile_z);
-    fprintf(stream, "NOTILE\tx %d y %d z %d\n", volume_info->tw, volume_info->th,
-            volume_info->tl);
-    fprintf(stream, "COMPONENTS\t%d\n", volume_info->comp);
-    fprintf(stream, "LAYER\t%d\n", volume_info->layer);
-    fprintf(stream, "RESOLUTIONS\tx %d y %d z %d\n", volume_info->decomposition[0],
-            volume_info->decomposition[1], volume_info->decomposition[2]);
-
-    fprintf(stream, "Precint sizes for each resolution:\n");
-    for (resno = volume_info->decomposition[0]; resno >= 0; resno--) {
-        fprintf(stream, "Resno %d \t [%d,%d,%d] \n", resno,
-                (1 << volume_info->tile[0].prctsiz[0][resno]),
-                (1 << volume_info->tile[0].prctsiz[0][resno]),
-                (1 << volume_info->tile[0].prctsiz[2][resno]));   /* based on tile 0 */
-    }
-    fprintf(stream, "HEADER_END\t%d\n", volume_info->main_head_end);
-    fprintf(stream, "CODESTREAM\t%d\n", volume_info->codestream_size);
-    fprintf(stream,
-            "Num_tile Start_pos End_header End_pos Distotile Nbpix Ratio\n");
-    for (tileno = 0; tileno < (volume_info->tw * volume_info->th * volume_info->tl);
-            tileno++) {
-        fprintf(stream, "%4d\t%9d\t%9d\t%9d\t%9e\t%9d\t%9e\n",
-                volume_info->tile[tileno].num_tile,
-                volume_info->tile[tileno].start_pos,
-                volume_info->tile[tileno].end_header,
-                volume_info->tile[tileno].end_pos,
-                volume_info->tile[tileno].distotile, volume_info->tile[tileno].nbpix,
-                volume_info->tile[tileno].distotile / volume_info->tile[tileno].nbpix);
-    }
-
-    for (tileno = 0; tileno < (volume_info->tw * volume_info->th * volume_info->tl);
-            tileno++) {
-        int start_pos, end_pos;
-        double disto = 0;
-        pack_nb = 0;
-        if (volume_info->prog == LRCP) {    /* LRCP */
-            fprintf(stream,
-                    "pack_nb tileno layno resno compno precno start_pos  end_pos   disto\n");
-            for (layno = 0; layno < volume_info->layer; layno++) {
-                for (resno = 0; resno < volume_info->decomposition[0] + 1; resno++) {
-                    for (compno = 0; compno < volume_info->comp; compno++) {
-                        int prec_max = volume_info->tile[tileno].prctno[0][resno] *
-                                       volume_info->tile[tileno].prctno[1][resno] *
-                                       volume_info->tile[tileno].prctno[2][resno];
-                        for (precno = 0; precno < prec_max; precno++) {
-                            start_pos = volume_info->tile[tileno].packet[pack_nb].start_pos;
-                            end_pos = volume_info->tile[tileno].packet[pack_nb].end_pos;
-                            disto = volume_info->tile[tileno].packet[pack_nb].disto;
-                            fprintf(stream, "%4d %6d %7d %5d %6d %6d %9d %9d %8e\n", pack_nb, tileno, layno,
-                                    resno, compno, precno, start_pos, end_pos, disto);
-                            total_disto += disto;
-                            pack_nb++;
-                        }
-                    }
-                }
-            }
-        } /* LRCP */
-        else if (volume_info->prog == RLCP) {   /* RLCP */
-            /*
-            fprintf(stream, "pack_nb tileno resno layno compno precno start_pos  end_pos   disto");
-            */
-            for (resno = 0; resno < volume_info->decomposition[0] + 1; resno++) {
-                for (layno = 0; layno < volume_info->layer; layno++) {
-                    for (compno = 0; compno < volume_info->comp; compno++) {
-                        int prec_max = volume_info->tile[tileno].prctno[0][resno] *
-                                       volume_info->tile[tileno].prctno[1][resno] *
-                                       volume_info->tile[tileno].prctno[2][resno];
-                        for (precno = 0; precno < prec_max; precno++) {
-                            start_pos = volume_info->tile[tileno].packet[pack_nb].start_pos;
-                            end_pos = volume_info->tile[tileno].packet[pack_nb].end_pos;
-                            disto = volume_info->tile[tileno].packet[pack_nb].disto;
-                            fprintf(stream, "%4d %6d %5d %7d %6d %6d %9d %9d %8e\n",
-                                    pack_nb, tileno, resno, layno, compno, precno, start_pos, end_pos, disto);
-                            total_disto += disto;
-                            pack_nb++;
-                        }
-                    }
-                }
-            }
-        } /* RLCP */
-        else if (volume_info->prog == RPCL) {   /* RPCL */
-            /*
-            fprintf(stream, "\npack_nb tileno resno precno compno layno start_pos  end_pos   disto\n");
-            */
-            for (resno = 0; resno < volume_info->decomposition[0] + 1; resno++) {
-                /* I suppose components have same XRsiz, YRsiz */
-                /*int x0 = volume_info->tile_Ox + tileno - (int)floor( (float)tileno/(float)volume_info->tw ) * volume_info->tw * volume_info->tile_x;*/
-                /*int y0 = volume_info->tile_Ox + (int)floor( (float)tileno/(float)volume_info->tw ) * volume_info->tile_y;*/
-                int x0 = volume_info->tile_Ox + (int)floor((float)tileno /
-                         (float)volume_info->tw) * volume_info->tile_x;
-                int y0 = volume_info->tile_Oy + (int)floor((float)tileno /
-                         (float)volume_info->th) * volume_info->tile_y;
-                int z0 = volume_info->tile_Ox + (int)floor((float)tileno /
-                         (float)volume_info->tl) * volume_info->tile_z;
-                int x1 = x0 + volume_info->tile_x;
-                int y1 = y0 + volume_info->tile_y;
-                int z1 = z0 + volume_info->tile_z;
-                for (z = z0; z < z1; z++) {
-                    for (y = y0; y < y1; y++) {
-                        for (x = x0; x < x1; x++) {
-                            for (compno = 0; compno < volume_info->comp; compno++) {
-                                int prec_max = volume_info->tile[tileno].prctno[0][resno] *
-                                               volume_info->tile[tileno].prctno[1][resno] *
-                                               volume_info->tile[tileno].prctno[2][resno];
-                                for (precno = 0; precno < prec_max; precno++) {
-                                    int pcnx = volume_info->tile[tileno].prctno[0][resno];
-                                    int pcx = (int) pow(2, volume_info->tile[tileno].prctsiz[0][resno] +
-                                                        volume_info->decomposition[0] - resno);
-                                    int pcy = (int) pow(2, volume_info->tile[tileno].prctsiz[1][resno] +
-                                                        volume_info->decomposition[1] - resno);
-                                    int pcz = (int) pow(2, volume_info->tile[tileno].prctsiz[2][resno] +
-                                                        volume_info->decomposition[2] - resno);
-                                    int precno_x = precno - (int) floor((float)precno / (float)pcnx) * pcnx;
-                                    int precno_y = (int) floor((float)precno / (float)pcnx);
-                                    if (precno_y * pcy == y) {
-                                        if (precno_x * pcx == x) {
-                                            for (layno = 0; layno < volume_info->layer; layno++) {
-                                                start_pos = volume_info->tile[tileno].packet[pack_nb].start_pos;
-                                                end_pos = volume_info->tile[tileno].packet[pack_nb].end_pos;
-                                                disto = volume_info->tile[tileno].packet[pack_nb].disto;
-                                                fprintf(stream, "%4d %6d %5d %6d %6d %7d %9d %9d %8e\n",
-                                                        pack_nb, tileno, resno, precno, compno, layno, start_pos, end_pos, disto);
-                                                total_disto += disto;
-                                                pack_nb++;
-                                            }
-                                        }
-                                    }
-                                } /* precno */
-                            } /* compno */
-                        } /* x = x0..x1 */
-                    } /* y = y0..y1 */
-                } /* z = z0..z1 */
-            } /* resno */
-        } /* RPCL */
-        else if (volume_info->prog == PCRL) {   /* PCRL */
-            /* I suppose components have same XRsiz, YRsiz */
-            int x0 = volume_info->tile_Ox + tileno - (int)floor((float)tileno /
-                     (float)volume_info->tw) * volume_info->tw * volume_info->tile_x;
-            int y0 = volume_info->tile_Ox + (int)floor((float)tileno /
-                     (float)volume_info->tw) * volume_info->tile_y;
-            int z0 = volume_info->tile_Oz + (int)floor((float)tileno /
-                     (float)volume_info->tw) * volume_info->tile_z;
-            int x1 = x0 + volume_info->tile_x;
-            int y1 = y0 + volume_info->tile_y;
-            int z1 = z0 + volume_info->tile_z;
-            /*
-            fprintf(stream, "\npack_nb tileno precno compno resno layno start_pos  end_pos   disto\n");
-            */
-            for (z = z0; z < z1; z++) {
-                for (y = y0; y < y1; y++) {
-                    for (x = x0; x < x1; x++) {
-                        for (compno = 0; compno < volume_info->comp; compno++) {
-                            for (resno = 0; resno < volume_info->decomposition[0] + 1; resno++) {
-                                int prec_max = volume_info->tile[tileno].prctno[0][resno] *
-                                               volume_info->tile[tileno].prctno[1][resno];
-                                for (precno = 0; precno < prec_max; precno++) {
-                                    int pcnx = volume_info->tile[tileno].prctno[0][resno];
-                                    int pcx = (int) pow(2, volume_info->tile[tileno].prctsiz[0][resno] +
-                                                        volume_info->decomposition[0] - resno);
-                                    int pcy = (int) pow(2, volume_info->tile[tileno].prctsiz[1][resno] +
-                                                        volume_info->decomposition[1] - resno);
-                                    int pcz = (int) pow(2, volume_info->tile[tileno].prctsiz[2][resno] +
-                                                        volume_info->decomposition[2] - resno);
-                                    int precno_x = precno - (int) floor((float)precno / (float)pcnx) * pcnx;
-                                    int precno_y = (int) floor((float)precno / (float)pcnx);
-                                    int precno_z = (int) floor((float)precno / (float)pcnx);
-                                    if (precno_z * pcz == z) {
-                                        if (precno_y * pcy == y) {
-                                            if (precno_x * pcx == x) {
-                                                for (layno = 0; layno < volume_info->layer; layno++) {
-                                                    start_pos = volume_info->tile[tileno].packet[pack_nb].start_pos;
-                                                    end_pos = volume_info->tile[tileno].packet[pack_nb].end_pos;
-                                                    disto = volume_info->tile[tileno].packet[pack_nb].disto;
-                                                    fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d %9d %8e\n",
-                                                            pack_nb, tileno, precno, compno, resno, layno, start_pos, end_pos, disto);
-                                                    total_disto += disto;
-                                                    pack_nb++;
-                                                }
-                                            }
-                                        }
-                                    }
-                                } /* precno */
-                            } /* resno */
-                        } /* compno */
-                    } /* x = x0..x1 */
-                } /* y = y0..y1 */
-            }
-        } /* PCRL */
-        else {  /* CPRL */
-            /*
-            fprintf(stream, "\npack_nb tileno compno precno resno layno start_pos  end_pos   disto\n");
-            */
-            for (compno = 0; compno < volume_info->comp; compno++) {
-                /* I suppose components have same XRsiz, YRsiz */
-                int x0 = volume_info->tile_Ox + tileno - (int)floor((float)tileno /
-                         (float)volume_info->tw) * volume_info->tw * volume_info->tile_x;
-                int y0 = volume_info->tile_Ox + (int)floor((float)tileno /
-                         (float)volume_info->tw) * volume_info->tile_y;
-                int z0 = volume_info->tile_Oz + (int)floor((float)tileno /
-                         (float)volume_info->tw) * volume_info->tile_z;
-                int x1 = x0 + volume_info->tile_x;
-                int y1 = y0 + volume_info->tile_y;
-                int z1 = z0 + volume_info->tile_z;
-                for (z = z0; z < z1; z++) {
-                    for (y = y0; y < y1; y++) {
-                        for (x = x0; x < x1; x++) {
-                            for (resno = 0; resno < volume_info->decomposition[0] + 1; resno++) {
-                                int prec_max = volume_info->tile[tileno].prctno[0][resno] *
-                                               volume_info->tile[tileno].prctno[1][resno] *
-                                               volume_info->tile[tileno].prctno[2][resno];
-                                for (precno = 0; precno < prec_max; precno++) {
-                                    int pcnx = volume_info->tile[tileno].prctno[0][resno];
-                                    int pcny = volume_info->tile[tileno].prctno[1][resno];
-                                    int pcx = (int) pow(2, volume_info->tile[tileno].prctsiz[0][resno] +
-                                                        volume_info->decomposition[0] - resno);
-                                    int pcy = (int) pow(2, volume_info->tile[tileno].prctsiz[1][resno] +
-                                                        volume_info->decomposition[1] - resno);
-                                    int pcz = (int) pow(2, volume_info->tile[tileno].prctsiz[2][resno] +
-                                                        volume_info->decomposition[2] - resno);
-                                    int precno_x = precno - (int) floor((float)precno / (float)pcnx) * pcnx;
-                                    int precno_y = (int) floor((float)precno / (float)pcnx);
-                                    int precno_z = 0; /*???*/
-                                    if (precno_z * pcz == z) {
-                                        if (precno_y * pcy == y) {
-                                            if (precno_x * pcx == x) {
-                                                for (layno = 0; layno < volume_info->layer; layno++) {
-                                                    start_pos = volume_info->tile[tileno].packet[pack_nb].start_pos;
-                                                    end_pos = volume_info->tile[tileno].packet[pack_nb].end_pos;
-                                                    disto = volume_info->tile[tileno].packet[pack_nb].disto;
-                                                    fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d %9d %8e\n",
-                                                            pack_nb, tileno, compno, precno, resno, layno, start_pos, end_pos, disto);
-                                                    total_disto += disto;
-                                                    pack_nb++;
-                                                }
-                                            }
-                                        }
-                                    }
-                                } /* precno */
-                            } /* resno */
-                        } /* x = x0..x1 */
-                    } /* y = y0..y1 */
-                } /* z = z0..z1 */
-            } /* comno */
-        } /* CPRL */
-    } /* tileno */
-
-    fprintf(stream, "SE_MAX\t%8e\n", volume_info->D_max);   /* SE max */
-    fprintf(stream, "SE_TOTAL\t%.8e\n", total_disto);           /* SE totale */
-
-
-    fclose(stream);
-
-    return 1;
-}
-
-bool j3d_encode(opj_j3d_t *j3d, opj_cio_t *cio, opj_volume_t *volume,
-                char *index)
-{
-    int tileno, compno;
-    opj_volume_info_t *volume_info = NULL;
-    opj_cp_t *cp = NULL;
-    opj_tcd_t *tcd = NULL;  /* TCD component */
-
-    j3d->cio = cio;
-    j3d->volume = volume;
-    cp = j3d->cp;
-
-    /*j3d_dump_volume(stdout, volume);
-    j3d_dump_cp(stdout, volume, cp);*/
-
-    /* INDEX >> */
-    volume_info = j3d->volume_info;
-    if (volume_info && cp->index_on) {
-        volume_info->index_on = cp->index_on;
-        volume_info->tile = (opj_tile_info_t *) opj_malloc(cp->tw * cp->th * cp->tl *
-                            sizeof(opj_tile_info_t));
-        volume_info->volume_w = volume->x1 - volume->x0;
-        volume_info->volume_h = volume->y1 - volume->y0;
-        volume_info->volume_l = volume->z1 - volume->z0;
-        volume_info->prog = (&cp->tcps[0])->prg;
-        volume_info->tw = cp->tw;
-        volume_info->th = cp->th;
-        volume_info->tl = cp->tl;
-        volume_info->tile_x = cp->tdx;  /* new version parser */
-        volume_info->tile_y = cp->tdy;  /* new version parser */
-        volume_info->tile_z = cp->tdz;  /* new version parser */
-        volume_info->tile_Ox = cp->tx0; /* new version parser */
-        volume_info->tile_Oy = cp->ty0; /* new version parser */
-        volume_info->tile_Oz = cp->tz0; /* new version parser */
-        volume_info->transform_format = cp->transform_format;
-        volume_info->encoding_format = cp->encoding_format;
-        volume_info->comp = volume->numcomps;
-        volume_info->layer = (&cp->tcps[0])->numlayers;
-        volume_info->decomposition[0] = (&cp->tcps[0])->tccps->numresolution[0] - 1;
-        volume_info->decomposition[1] = (&cp->tcps[0])->tccps->numresolution[1] - 1;
-        volume_info->decomposition[2] = (&cp->tcps[0])->tccps->numresolution[2] - 1;
-        volume_info->D_max = 0;     /* ADD Marcela */
-    }
-    /* << INDEX */
-
-    j3d_write_soc(j3d);
-    j3d_write_siz(j3d);
-    if (j3d->cinfo->codec_format == CODEC_J3D) {
-        j3d_write_cap(j3d);
-        j3d_write_nsi(j3d);
-    }
-
-    /*if (j3d->cp->transform_format != TRF_2D_DWT || j3d->cp->encoding_format != ENCOD_2EB)*/
-    j3d_write_com(j3d);
-
-    j3d_write_cod(j3d);
-    j3d_write_qcd(j3d);
-    for (compno = 0; compno < volume->numcomps; compno++) {
-        opj_tcp_t *tcp = &cp->tcps[0];
-        if (tcp->tccps[compno].roishift) {
-            j3d_write_rgn(j3d, compno, 0);
-        }
-    }
-    /*Optional 15444-2 markers*/
-    if (j3d->cp->tcps->tccps[0].atk != NULL) {
-        j3d_write_atk(j3d);
-    }
-    if (j3d->volume->comps[0].dcoffset != 0) {
-        j3d_write_dco(j3d);
-    }
-
-    /* INDEX >> */
-    if (volume_info && volume_info->index_on) {
-        volume_info->main_head_end = cio_tell(cio) - 1;
-    }
-    /* << INDEX */
-
-    /* create the tile encoder */
-    tcd = tcd_create(j3d->cinfo);
-
-    /* encode each tile */
-    for (tileno = 0; tileno < cp->tw * cp->th * cp->tl; tileno++) {
-        opj_event_msg(j3d->cinfo, EVT_INFO, "tile number %d / %d\n", tileno + 1,
-                      cp->tw * cp->th * cp->tl);
-
-        j3d->curtileno = tileno;
-
-        /* initialisation before tile encoding  */
-        if (tileno == 0) {
-            tcd_malloc_encode(tcd, volume, cp, j3d->curtileno);
-        } else {
-            tcd_init_encode(tcd, volume, cp, j3d->curtileno);
-        }
-
-        /* INDEX >> */
-        if (volume_info && volume_info->index_on) {
-            volume_info->tile[j3d->curtileno].num_tile = j3d->curtileno;
-            volume_info->tile[j3d->curtileno].start_pos = cio_tell(cio) +
-                    j3d->pos_correction;
-        }
-        /* << INDEX */
-
-        j3d_write_sot(j3d);
-
-        for (compno = 1; compno < volume->numcomps; compno++) {
-            j3d_write_coc(j3d, compno);
-            j3d_write_qcc(j3d, compno);
-        }
-
-        if (cp->tcps[tileno].numpocs) {
-            j3d_write_poc(j3d);
-        }
-        j3d_write_sod(j3d, tcd); /*--> tcd_encode_tile*/
-
-        /* INDEX >> */
-        if (volume_info && volume_info->index_on) {
-            volume_info->tile[j3d->curtileno].end_pos = cio_tell(cio) + j3d->pos_correction
-                    - 1;
-        }
-        /* << INDEX */
-    }
-
-    /* destroy the tile encoder */
-    tcd_free_encode(tcd);
-    tcd_destroy(tcd);
-
-    j3d_write_eoc(j3d);
-
-    /* Creation of the index file */
-    if (volume_info && volume_info->index_on) {
-        if (!j3d_create_index(j3d, cio, volume_info, index)) {
-            opj_event_msg(j3d->cinfo, EVT_ERROR, "failed to create index file %s\n", index);
-            return false;
-        }
-    }
-
-    return true;
-}
-
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
diff --git a/src/lib/openjp3d/jp3d.h b/src/lib/openjp3d/jp3d.h
deleted file mode 100644 (file)
index 2f47ffe..0000000
+++ /dev/null
@@ -1,525 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * Copyright (c) 2006, Mónica Díez García, Image Processing Laboratory, University of Valladolid, Spain
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef __J3D_H
-#define __J3D_H
-/**
-@file jp3d.h
-@brief The JPEG-2000 Codestream Reader/Writer (J3D)
-
-The functions in J3D.C have for goal to read/write the several parts of the codestream: markers and data.
-*/
-
-/** @defgroup J3D J3D - JPEG-2000 PART 10 codestream reader/writer */
-/*@{*/
-
-#define J3D_CP_CSTY_PRT 0x01
-#define J3D_CP_CSTY_SOP 0x02
-#define J3D_CP_CSTY_EPH 0x04
-#define J3D_CCP_CSTY_PRT 0x01
-/** Table A-8 */
-#define J3D_CCP_CBLKSTY_LAZY 0x01    /* Selective arithmetic coding bypass */
-#define J3D_CCP_CBLKSTY_RESET 0x02   /* Reset context probabilities on coding pass boundaries */
-#define J3D_CCP_CBLKSTY_TERMALL 0x04 /* Termination on each coding pass */
-#define J3D_CCP_CBLKSTY_VSC 0x08     /* Vertically causal context, add also hook for switching off and on 3D context models */
-#define J3D_CCP_CBLKSTY_PTERM 0x10   /* Predictable termination */
-#define J3D_CCP_CBLKSTY_SEGSYM 0x20  /* Segmentation symbols are used */
-#define J3D_CCP_CBLKSTY_3DCTXT 0x40  /* 3D context models (3D-EBCOT) vs 2D context models */
-
-#define J3D_CCP_QNTSTY_NOQNT 0  /* Quantization style : no quantization */
-#define J3D_CCP_QNTSTY_SIQNT 1  /* Quantization style : scalar derived (values signalled only in LLL subband) */
-#define J3D_CCP_QNTSTY_SEQNT 2  /* Quantization style : scalar expounded (values signalled for each subband) */
-
-/* ----------------------------------------------------------------------- */
-
-#define J3D_MS_SOC 0xff4f   /**< SOC marker value */
-#define J3D_MS_SOT 0xff90   /**< SOT marker value */
-#define J3D_MS_SOD 0xff93   /**< SOD marker value */
-#define J3D_MS_EOC 0xffd9   /**< EOC marker value */
-#define J3D_MS_CAP 0xff50   /**< CAP marker value */
-#define J3D_MS_SIZ 0xff51   /**< SIZ marker value */
-#define J3D_MS_NSI 0xff54   /**< NSI marker value */
-#define J3D_MS_COD 0xff52   /**< COD marker value */
-#define J3D_MS_COC 0xff53   /**< COC marker value */
-#define J3D_MS_RGN 0xff5e   /**< RGN marker value */
-#define J3D_MS_QCD 0xff5c   /**< QCD marker value */
-#define J3D_MS_QCC 0xff5d   /**< QCC marker value */
-#define J3D_MS_POC 0xff5f   /**< POC marker value */
-#define J3D_MS_TLM 0xff55   /**< TLM marker value */
-#define J3D_MS_PLM 0xff57   /**< PLM marker value */
-#define J3D_MS_PLT 0xff58   /**< PLT marker value */
-#define J3D_MS_PPM 0xff60   /**< PPM marker value */
-#define J3D_MS_PPT 0xff61   /**< PPT marker value */
-#define J3D_MS_SOP 0xff91   /**< SOP marker value */
-#define J3D_MS_EPH 0xff92   /**< EPH marker value */
-#define J3D_MS_CRG 0xff63   /**< CRG marker value */
-#define J3D_MS_COM 0xff64   /**< COM marker value */
-/*15444-2*/
-#define J3D_MS_DCO 0xff70   /**< DCO marker value */
-#define J3D_MS_VMS 0xff71   /**< VMS marker value */
-#define J3D_MS_DFS 0xff72   /**< DFS marker value */
-#define J3D_MS_ADS 0xff73   /**< ADS marker value */
-#define J3D_MS_ATK 0xff79   /**< ATK marker value */
-#define J3D_MS_CBD 0xff78   /**< CBD marker value */
-#define J3D_MS_MCT 0xff74   /**< MCT marker value */
-#define J3D_MS_MCC 0xff75   /**< MCC marker value */
-#define J3D_MS_MCO 0xff77   /**< MCO marker value */
-#define J3D_MS_NLT 0xff76   /**< NLT marker value */
-#define J3D_MS_QPD 0xff5a   /**< QPD marker value */
-#define J3D_MS_QPC 0xff5b   /**< QPC marker value */
-
-/* ----------------------------------------------------------------------- */
-/* Capability RSIZ parameter, extended */
-#define J3D_RSIZ_BASIC 0x0000
-
-#define J3D_RSIZ_DCO   0x8001 /* Required */
-#define J3D_RSIZ_VSQNT 0x8002
-#define J3D_RSIZ_TCQNT 0x8004
-#define J3D_RSIZ_VMASK 0x8008
-#define J3D_RSIZ_SSOVL 0x8010
-#define J3D_RSIZ_ADECS 0x8020
-#define J3D_RSIZ_ATK   0x8040 /*Required*/
-#define J3D_RSIZ_SSYMK 0x8080
-#define J3D_RSIZ_MCT   0x8100 /*Not compatible with DCO*/
-#define J3D_RSIZ_NLT   0x8200 /*Required*/
-#define J3D_RSIZ_ASHAP 0x8400
-#define J3D_RSIZ_PRQNT 0x8800
-
-#define J3D_CAP_10      0x00400000
-/* Arbitrary transformation kernel, 15444-2 */
-#define J3D_ATK_IRR 0
-#define J3D_ATK_REV 1
-#define J3D_ATK_ARB 0
-#define J3D_ATK_WS 1
-#define J3D_ATK_CON 0
-/* ----------------------------------------------------------------------- */
-
-/**
-Values that specify the status of the decoding process when decoding the main header.
-These values may be combined with a | operator.
-*/
-typedef enum J3D_STATUS {
-    /**< a SOC marker is expected */
-    J3D_STATE_MHSOC  = 0x0001,
-    /**< a SIZ marker is expected */
-    J3D_STATE_MHSIZ  = 0x0002,
-    /**< the decoding process is in the main header */
-    J3D_STATE_MH     = 0x0004,
-    /**< the decoding process is in a tile part header and expects a SOT marker */
-    J3D_STATE_TPHSOT = 0x0008,
-    /**< the decoding process is in a tile part header */
-    J3D_STATE_TPH    = 0x0010,
-    /**< the EOC marker has just been read */
-    J3D_STATE_MT     = 0x0020,
-    /**< the decoding process must not expect a EOC marker because the codestream is truncated */
-    J3D_STATE_NEOC   = 0x0040
-} J3D_STATUS;
-
-
-
-/**
-Arbitrary transformation kernel
-*/
-typedef struct opj_atk {
-    /** index of wavelet kernel */
-    int index;
-    /** Numerical type of scaling factor and lifting step parameters */
-    int coeff_typ;
-    /** Wavelet filter category */
-    int filt_cat;
-    /** Wavelet transformation type (REV/IRR) */
-    int wt_typ;
-    /** Initial odd/even subsequence */
-    int minit;
-    /** Boundary extension method (constant CON / whole-sample symmetric WS) */
-    int exten;
-    /** Scaling factor. Only for wt_typ=IRR */
-    double Katk;
-    /** Number of lifting steps */
-    int Natk;
-    /** Offset for lifting step s. Only for filt_cat=ARB */
-    int Oatk[256];
-    /** Base 2 scaling exponent for lifting step s. Only for wt_typ=REV */
-    int Eatk[256];
-    /** Additive residue for lifting step s. Only for wt_typ=REV */
-    int Batk[256];
-    /** Number of lifting coefficients signaled for lifting step s  */
-    int LCatk[256];
-    /** Lifting coefficient k for lifting step s */
-    double Aatk[256][256];
-} opj_atk_t;
-
-
-/**
-Quantization stepsize
-*/
-typedef struct opj_stepsize {
-    /** exponent */
-    int expn;
-    /** mantissa */
-    int mant;
-} opj_stepsize_t;
-
-/**
-Tile-component coding parameters
-*/
-typedef struct opj_tccp {
-    /** coding style */
-    int csty;
-    /** number of resolutions of x, y and z-axis */
-    int numresolution[3];
-    /** code-blocks width height & depth*/
-    int cblk[3];
-    /** code-block coding style */
-    int cblksty;
-    /** 0: no ATK (only 9-7 or 5-3) 1: ATK defined WT*/
-    int atk_wt[3];
-    /** Arbitrary transformation kernel (15444-2)*/
-    opj_atk_t *atk;
-    /** DWT identifier for x, y and z-axis (0:WT9-7 1:WT5-3 >1:WT-atk->index) */
-    int dwtid[3];
-    /** reversible/irreversible wavelet transfomation (0:irrev 1:reversible)*/
-    int reversible;
-    /** quantisation style */
-    int qntsty;
-    /** stepsizes used for quantization */
-    opj_stepsize_t stepsizes[J3D_MAXBANDS];
-    /** number of guard bits. Table A28 de 15444-1*/
-    int numgbits;
-    /** Region Of Interest shift */
-    int roishift;
-    /** precinct width height & depth*/
-    int prctsiz[3][J3D_MAXRLVLS];
-} opj_tccp_t;
-
-/**
-Tile coding parameters : coding/decoding parameters common to all tiles
-(information like COD, COC in main header)
-*/
-typedef struct opj_tcp {
-    /** 1 : first part-tile of a tile */
-    int first;
-    /** coding style */
-    int csty;
-    /** progression order */
-    OPJ_PROG_ORDER prg;
-    /** number of layers */
-    int numlayers;
-    /** multi-component transform identifier */
-    int mct;
-    /** rates of layers */
-    float rates[100];
-    /** number of progression order changes */
-    int numpocs;
-    /** indicates if a POC marker has been used O:NO, 1:YES */
-    int POC;
-    /** progression order changes */
-    opj_poc_t pocs[J3D_MAXRLVLS - 1];
-    /** add fixed_quality */
-    float distoratio[100];
-    /** tile-component coding parameters */
-    opj_tccp_t *tccps;
-    /** packet header store there for futur use in t2_decode_packet */
-    unsigned char *ppt_data;
-    /** pointer remaining on the first byte of the first header if ppt is used */
-    unsigned char *ppt_data_first;
-    /** If ppt == 1 --> there was a PPT marker for the present tile */
-    int ppt;
-    /** used in case of multiple marker PPT (number of info already stored) */
-    int ppt_store;
-    int ppt_len;
-} opj_tcp_t;
-
-/**
-Coding parameters
-*/
-typedef struct opj_cp {
-    /** transform format 0: 2DWT, 1: 2D1P, 2: 3DWT, 3: 3RLS */
-    OPJ_TRANSFORM transform_format;
-    /** entropy coding format 0: 2EB, 1: 3EB, 2: 2GR, 3: 3GR, 4: GRI*/
-    OPJ_ENTROPY_CODING encoding_format;
-    /** allocation by rate/distortion */
-    int disto_alloc;
-    /** allocation by fixed layer */
-    int fixed_alloc;
-    /** add fixed_quality */
-    int fixed_quality;
-    /** Rsiz: capabilities */
-    int rsiz;
-    /** if != 0, then original dimension divided by 2^(reduce); if == 0 or not used, volume is decoded to the full resolution */
-    int reduce[3];
-    /** if != 0, then only the first "layer" layers are decoded; if == 0 or not used, all the quality layers are decoded */
-    int layer;
-    /** 0 = no index || 1 = index */
-    int index_on;
-    /** Big-Endian/Little-endian order */
-    int bigendian;
-    /** XTOsiz */
-    int tx0;
-    /** YTOsiz */
-    int ty0;
-    /** ZTOsiz */
-    int tz0;
-    /** XTsiz */
-    int tdx;
-    /** YTsiz */
-    int tdy;
-    /** ZTsiz */
-    int tdz;
-    /** comment for coding */
-    char *comment;
-    /** number of tiles in width, height and depth */
-    int tw;
-    int th;
-    int tl;
-    /** ID number of the tiles present in the codestream */
-    int *tileno;
-    /** size of the vector tileno */
-    int tileno_size;
-    /** tile coding parameters */
-    opj_tcp_t *tcps;
-    /** fixed layer */
-    int *matrice;
-
-    /** packet header store there for futur use in t2_decode_packet */
-    unsigned char *ppm_data;
-    /** pointer remaining on the first byte of the first header if ppm is used */
-    unsigned char *ppm_data_first;
-    /** if ppm == 1 --> there was a PPM marker for the present tile */
-    int ppm;
-    /** use in case of multiple marker PPM (number of info already store) */
-    int ppm_store;
-    /** use in case of multiple marker PPM (case on non-finished previous info) */
-    int ppm_previous;
-    int ppm_len;
-} opj_cp_t;
-
-/**
-Information concerning a packet inside tile
-*/
-typedef struct opj_packet_info {
-    /** start position */
-    int start_pos;
-    /** end position */
-    int end_pos;
-    /** distorsion introduced */
-    double disto;
-} opj_packet_info_t;
-
-/**
-Index structure : information regarding tiles inside volume
-*/
-typedef struct opj_tile_info {
-    /** value of thresh for each layer by tile cfr. Marcela   */
-    double *thresh;
-    /** number of tile */
-    int num_tile;
-    /** start position */
-    int start_pos;
-    /** end position of the header */
-    int end_header;
-    /** end position */
-    int end_pos;
-    /** precinct number for each resolution level (width, height and depth) */
-    int prctno[3][J3D_MAXRLVLS];
-    /** precinct size (in power of 2), in X for each resolution level */
-    int prctsiz[3][J3D_MAXRLVLS];
-    /** information concerning packets inside tile */
-    opj_packet_info_t *packet;
-
-    /** add fixed_quality */
-    int nbpix;
-    /** add fixed_quality */
-    double distotile;
-} opj_tile_info_t;
-
-/**
-Index structure
-*/
-typedef struct opj_volume_info {
-
-    /** transform format 0: 2DWT, 1: 2D1P, 2: 3DWT, 3: 3RLS */
-    OPJ_TRANSFORM transform_format;
-    /** output file format 0: 2EB, 1: 3EB, 2: 2GR, 3: 3GR, 4: GRI*/
-    OPJ_ENTROPY_CODING encoding_format; /** 0 = no index || 1 = index */
-    int index_on;
-    /** 0 = wt 9-7 || 1 = wt 5-3 || >=2 wt atk defined */
-    int dwtid[3];
-    /** maximum distortion reduction on the whole volume (add for Marcela) */
-    double D_max;
-    /** packet number */
-    int num;
-    /** writing the packet in the index with t2_encode_packets */
-    int index_write;
-    /** volume width, height and depth */
-    int volume_w;
-    int volume_h;
-    int volume_l;
-    /** progression order */
-    OPJ_PROG_ORDER prog;
-    /** tile size in x, y and z */
-    int tile_x;
-    int tile_y;
-    int tile_z;
-    /** tile origin in x, y and z */
-    int tile_Ox;
-    int tile_Oy;
-    int tile_Oz;
-    /** number of tiles in X, Y and Z */
-    int tw;
-    int th;
-    int tl;
-    /** component numbers */
-    int comp;
-    /** number of layer */
-    int layer;
-    /** number of decomposition in X, Y and Z*/
-    int decomposition[3];
-    /** DC offset (15444-2) */
-    int dcoffset;
-    /** main header position */
-    int main_head_end;
-    /** codestream's size */
-    int codestream_size;
-    /** information regarding tiles inside volume */
-    opj_tile_info_t *tile;
-} opj_volume_info_t;
-
-/**
-JPEG-2000 codestream reader/writer
-*/
-typedef struct opj_j3d {
-    /** codec context */
-    opj_common_ptr cinfo;
-    /** locate in which part of the codestream the decoder is (main header, tile header, end) */
-    int state;
-    /** number of the tile currently concern by coding/decoding */
-    int curtileno;
-    /** locate the position of the end of the tile in the codestream, used to detect a truncated codestream (in j3d_read_sod)   */
-    unsigned char *eot;
-    /** locate the start position of the SOT marker of the current coded tile:  */
-    int sot_start;
-    /*  after encoding the tile, a jump (in j3d_write_sod) is done to the SOT marker to store the value of its length. */
-    int sod_start;
-    /** as the J3D-file is written in several parts during encoding, it enables to make the right correction in position return by cio_tell */
-    int pos_correction;
-    /** array used to store the data of each tile */
-    unsigned char **tile_data;
-    /** array used to store the length of each tile */
-    int *tile_len;
-
-    /** decompression only : store decoding parameters common to all tiles */
-    opj_tcp_t *default_tcp;
-    /** pointer to the encoded / decoded volume */
-    opj_volume_t *volume;
-    /** pointer to the coding parameters */
-    opj_cp_t *cp;
-    /** helper used to write the index file */
-    opj_volume_info_t *volume_info;
-    /** pointer to the byte i/o stream */
-    opj_cio_t *cio;
-} opj_j3d_t;
-
-/** @name Funciones generales */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-/**
-Creates a J3D decompression structure
-@param cinfo Codec context info
-@return Returns a handle to a J3D decompressor if successful, returns NULL otherwise
-*/
-opj_j3d_t* j3d_create_decompress(opj_common_ptr cinfo);
-/**
-Destroy a J3D decompressor handle
-@param j3d J3D decompressor handle to destroy
-*/
-void j3d_destroy_decompress(opj_j3d_t *j3d);
-/**
-Setup the decoder decoding parameters using user parameters.
-Decoding parameters are returned in j3d->cp.
-@param j3d J3D decompressor handle
-@param parameters decompression parameters
-*/
-void j3d_setup_decoder(opj_j3d_t *j3d, opj_dparameters_t *parameters);
-/**
-Decode an volume from a JPEG-2000 codestream
-@param j3d J3D decompressor handle
-@param cio Input buffer stream
-@return Returns a decoded volume if successful, returns NULL otherwise
-*/
-opj_volume_t* j3d_decode(opj_j3d_t *j3d, opj_cio_t *cio);
-/**
-Decode an volume form a JPT-stream (JPEG 2000, JPIP)
-@param j3d J3D decompressor handle
-@param cio Input buffer stream
-@return Returns a decoded volume if successful, returns NULL otherwise
-*/
-opj_volume_t* j3d_decode_jpt_stream(opj_j3d_t *j3d, opj_cio_t *cio);
-/**
-Creates a J3D compression structure
-@param cinfo Codec context info
-@return Returns a handle to a J3D compressor if successful, returns NULL otherwise
-*/
-opj_j3d_t* j3d_create_compress(opj_common_ptr cinfo);
-/**
-Destroy a J3D compressor handle
-@param j3d J3D compressor handle to destroy
-*/
-void j3d_destroy_compress(opj_j3d_t *j3d);
-/**
-Setup the encoder parameters using the current volume and using user parameters.
-Coding parameters are returned in j3d->cp.
-@param j3d J3D compressor handle
-@param parameters compression parameters
-@param volume input filled volume
-*/
-void j3d_setup_encoder(opj_j3d_t *j3d, opj_cparameters_t *parameters,
-                       opj_volume_t *volume);
-/**
-Encode an volume into a JPEG-2000 codestream
-@param j3d J3D compressor handle
-@param cio Output buffer stream
-@param volume Volume to encode
-@param index Name of the index file if required, NULL otherwise
-@return Returns true if successful, returns false otherwise
-*/
-bool j3d_encode(opj_j3d_t *j3d, opj_cio_t *cio, opj_volume_t *volume,
-                char *index);
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif /* __J3D_H */
diff --git a/src/lib/openjp3d/jp3d_lib.c b/src/lib/openjp3d/jp3d_lib.c
deleted file mode 100644 (file)
index bccb3fb..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifdef _WIN32
-#include <windows.h>
-#else
-#include <sys/time.h>
-#include <sys/resource.h>
-#include <sys/times.h>
-#endif /* _WIN32 */
-#include "opj_includes.h"
-
-double opj_clock()
-{
-#ifdef _WIN32
-    /* WIN32: use QueryPerformance (very accurate) */
-    LARGE_INTEGER freq, t ;
-    /* freq is the clock speed of the CPU */
-    QueryPerformanceFrequency(&freq) ;
-    /* cout << "freq = " << ((double) freq.QuadPart) << endl; */
-    /* t is the high resolution performance counter (see MSDN) */
-    QueryPerformanceCounter(& t) ;
-    return (t.QuadPart / (double) freq.QuadPart) ;
-#else
-    /* Unix or Linux: use resource usage */
-    struct rusage t;
-    double procTime;
-    /* (1) Get the rusage data structure at this moment (man getrusage) */
-    getrusage(0, &t);
-    /* (2) What is the elapsed time ? - CPU time = User time + System time */
-    /* (2a) Get the seconds */
-    procTime = t.ru_utime.tv_sec + t.ru_stime.tv_sec;
-    /* (2b) More precisely! Get the microseconds part ! */
-    return (procTime + (t.ru_utime.tv_usec + t.ru_stime.tv_usec) * 1e-6) ;
-#endif /* _WIN32 */
-}
-
-void* opj_malloc(size_t size)
-{
-    void *memblock = malloc(size);
-    if (memblock) {
-        memset(memblock, 0, size);
-    }
-    return memblock;
-}
-
-void* opj_realloc(void *memblock, size_t size)
-{
-    return realloc(memblock, size);
-}
-
-void opj_free(void *memblock)
-{
-    free(memblock);
-}
-
-
diff --git a/src/lib/openjp3d/jp3d_lib.h b/src/lib/openjp3d/jp3d_lib.h
deleted file mode 100644 (file)
index 3ca1cca..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef __J3D_LIB_H
-#define __J3D_LIB_H
-/**
-@file jp3d_lib.h
-@brief Internal functions
-
-The functions in JP3D_LIB.C are internal utilities mainly used for memory management.
-*/
-
-/** @defgroup MISC MISC - Miscellaneous internal functions */
-/*@{*/
-
-/** @name Funciones generales */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-
-/**
-Difference in successive opj_clock() calls tells you the elapsed time
-@return Returns time in seconds
-*/
-double opj_clock(void);
-
-/**
-Allocate a memory block with elements initialized to 0
-@param size Bytes to allocate
-@return Returns a void pointer to the allocated space, or NULL if there is insufficient memory available
-*/
-void* opj_malloc(size_t size);
-
-/**
-Reallocate memory blocks.
-@param memblock Pointer to previously allocated memory block
-@param size New size in bytes
-@return Returns a void pointer to the reallocated (and possibly moved) memory block
-*/
-void* opj_realloc(void *memblock, size_t size);
-
-/**
-Deallocates or frees a memory block.
-@param memblock Previously allocated memory block to be freed
-*/
-void opj_free(void *memblock);
-
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif /* __J3D_LIB_H */
-
diff --git a/src/lib/openjp3d/libopenjp3d.pc.cmake.in b/src/lib/openjp3d/libopenjp3d.pc.cmake.in
deleted file mode 100644 (file)
index e9b6c40..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-prefix=@CMAKE_INSTALL_PREFIX@
-bindir=${prefix}/@OPENJPEG_INSTALL_BIN_DIR@
-mandir=${prefix}/@OPENJPEG_INSTALL_MAN_DIR@
-docdir=${prefix}/@OPENJPEG_INSTALL_DOC_DIR@
-libdir=${prefix}/@OPENJPEG_INSTALL_LIB_DIR@
-includedir=${prefix}/@OPENJPEG_INSTALL_INCLUDE_DIR@
-
-Name: openjp3d
-Description: JPEG2000 Extensions for three-dimensional data (Part 10)
-URL: http://www.openjpeg.org/
-Version: @OPENJPEG_VERSION@
-Libs: -L${libdir} -lopenjp3d
-Libs.private: -lm
-Cflags: -I${includedir}
diff --git a/src/lib/openjp3d/mct.c b/src/lib/openjp3d/mct.c
deleted file mode 100644 (file)
index 9acca19..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "opj_includes.h"
-
-/* <summary> */
-/* This table contains the norms of the basis function of the reversible MCT. */
-/* </summary> */
-static const double mct_norms[3] = { 1.732, .8292, .8292 };
-
-/* <summary> */
-/* This table contains the norms of the basis function of the irreversible MCT. */
-/* </summary> */
-static const double mct_norms_real[3] = { 1.732, 1.805, 1.573 };
-
-/* <summary> */
-/* Forward reversible MCT. */
-/* </summary> */
-void mct_encode(int *c0, int *c1, int *c2, int n)
-{
-    int i;
-    for (i = 0; i < n; i++) {
-        int r, g, b, y, u, v;
-        r = c0[i];
-        g = c1[i];
-        b = c2[i];
-        y = (r + (g << 1) + b) >> 2;
-        u = b - g;
-        v = r - g;
-        c0[i] = y;
-        c1[i] = u;
-        c2[i] = v;
-    }
-}
-
-/* <summary> */
-/* Inverse reversible MCT. */
-/* </summary> */
-void mct_decode(int *c0, int *c1, int *c2, int n)
-{
-    int i;
-    for (i = 0; i < n; i++) {
-        int y, u, v, r, g, b;
-        y = c0[i];
-        u = c1[i];
-        v = c2[i];
-        g = y - ((u + v) >> 2);
-        r = v + g;
-        b = u + g;
-        c0[i] = r;
-        c1[i] = g;
-        c2[i] = b;
-    }
-}
-
-/* <summary> */
-/* Get norm of basis function of reversible MCT. */
-/* </summary> */
-double mct_getnorm(int compno)
-{
-    return mct_norms[compno];
-}
-
-/* <summary> */
-/* Forward irreversible MCT. */
-/* </summary> */
-void mct_encode_real(int *c0, int *c1, int *c2, int n)
-{
-    int i;
-    for (i = 0; i < n; i++) {
-        int r, g, b, y, u, v;
-        r = c0[i];
-        g = c1[i];
-        b = c2[i];
-        y = fix_mul(r, 2449) + fix_mul(g, 4809) + fix_mul(b, 934);
-        u = -fix_mul(r, 1382) - fix_mul(g, 2714) + fix_mul(b, 4096);
-        v = fix_mul(r, 4096) - fix_mul(g, 3430) - fix_mul(b, 666);
-        c0[i] = y;
-        c1[i] = u;
-        c2[i] = v;
-    }
-}
-
-/* <summary> */
-/* Inverse irreversible MCT. */
-/* </summary> */
-void mct_decode_real(int *c0, int *c1, int *c2, int n)
-{
-    int i;
-    for (i = 0; i < n; i++) {
-        int y, u, v, r, g, b;
-        y = c0[i];
-        u = c1[i];
-        v = c2[i];
-        r = y + fix_mul(v, 11485);
-        g = y - fix_mul(u, 2819) - fix_mul(v, 5850);
-        b = y + fix_mul(u, 14516);
-        c0[i] = r;
-        c1[i] = g;
-        c2[i] = b;
-    }
-}
-
-/* <summary> */
-/* Get norm of basis function of irreversible MCT. */
-/* </summary> */
-double mct_getnorm_real(int compno)
-{
-    return mct_norms_real[compno];
-}
diff --git a/src/lib/openjp3d/mct.h b/src/lib/openjp3d/mct.h
deleted file mode 100644 (file)
index 24463d4..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __MCT_H
-#define __MCT_H
-/**
-@file mct.h
-@brief Implementation of a multi-component transforms (MCT)
-
-The functions in MCT.C have for goal to realize reversible and irreversible multicomponent
-transform. The functions in MCT.C are used by some function in TCD.C.
-*/
-
-/** @defgroup MCT MCT - Implementation of a multi-component transform */
-/*@{*/
-
-/** @name Funciones generales */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-/**
-Apply a reversible multi-component transform to an image
-@param c0 Samples for red component
-@param c1 Samples for green component
-@param c2 Samples blue component
-@param n Number of samples for each component
-*/
-void mct_encode(int *c0, int *c1, int *c2, int n);
-/**
-Apply a reversible multi-component inverse transform to an image
-@param c0 Samples for luminance component
-@param c1 Samples for red chrominance component
-@param c2 Samples for blue chrominance component
-@param n Number of samples for each component
-*/
-void mct_decode(int *c0, int *c1, int *c2, int n);
-/**
-Get norm of the basis function used for the reversible multi-component transform
-@param compno Number of the component (0->Y, 1->U, 2->V)
-@return
-*/
-double mct_getnorm(int compno);
-
-/**
-Apply an irreversible multi-component transform to an image
-@param c0 Samples for red component
-@param c1 Samples for green component
-@param c2 Samples blue component
-@param n Number of samples for each component
-*/
-void mct_encode_real(int *c0, int *c1, int *c2, int n);
-/**
-Apply an irreversible multi-component inverse transform to an image
-@param c0 Samples for luminance component
-@param c1 Samples for red chrominance component
-@param c2 Samples for blue chrominance component
-@param n Number of samples for each component
-*/
-void mct_decode_real(int *c0, int *c1, int *c2, int n);
-/**
-Get norm of the basis function used for the irreversible multi-component transform
-@param compno Number of the component (0->Y, 1->U, 2->V)
-@return
-*/
-double mct_getnorm_real(int compno);
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif /* __MCT_H */
diff --git a/src/lib/openjp3d/mqc.c b/src/lib/openjp3d/mqc.c
deleted file mode 100644 (file)
index f23c026..0000000
+++ /dev/null
@@ -1,585 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "opj_includes.h"
-
-/** @defgroup MQC MQC - Implementation of an MQ-Coder */
-/*@{*/
-
-/** @name Local static functions */
-/*@{*/
-
-/**
-Output a byte, doing bit-stuffing if necessary.
-After a 0xff byte, the next byte must be smaller than 0x90.
-@param mqc MQC handle
-*/
-static void mqc_byteout(opj_mqc_t *mqc);
-/**
-Renormalize mqc->a and mqc->c while encoding, so that mqc->a stays between 0x8000 and 0x10000
-@param mqc MQC handle
-*/
-static void mqc_renorme(opj_mqc_t *mqc);
-/**
-Encode the most probable symbol
-@param mqc MQC handle
-*/
-static void mqc_codemps(opj_mqc_t *mqc);
-/**
-Encode the most least symbol
-@param mqc MQC handle
-*/
-static void mqc_codelps(opj_mqc_t *mqc);
-/**
-Fill mqc->c with 1's for flushing
-@param mqc MQC handle
-*/
-static void mqc_setbits(opj_mqc_t *mqc);
-/**
-Exchange MPS with LPS
-@param mqc MQC handle
-@return
-*/
-static int mqc_mpsexchange(opj_mqc_t *mqc);
-/**
-Exchange LPS with MPS
-@param mqc MQC handle
-@return
-*/
-static int mqc_lpsexchange(opj_mqc_t *mqc);
-/**
-Input a byte
-@param mqc MQC handle
-*/
-static void mqc_bytein(opj_mqc_t *mqc);
-/**
-Renormalize mqc->a and mqc->c while decoding
-@param mqc MQC handle
-*/
-static void mqc_renormd(opj_mqc_t *mqc);
-
-/*@}*/
-
-/*@}*/
-
-/* <summary> */
-/* This array defines all the possible states for a context. */
-/* </summary> */
-static opj_mqc_state_t mqc_states[47 * 2] = {
-    {0x5601, 0, &mqc_states[2], &mqc_states[3]},
-    {0x5601, 1, &mqc_states[3], &mqc_states[2]},
-    {0x3401, 0, &mqc_states[4], &mqc_states[12]},
-    {0x3401, 1, &mqc_states[5], &mqc_states[13]},
-    {0x1801, 0, &mqc_states[6], &mqc_states[18]},
-    {0x1801, 1, &mqc_states[7], &mqc_states[19]},
-    {0x0ac1, 0, &mqc_states[8], &mqc_states[24]},
-    {0x0ac1, 1, &mqc_states[9], &mqc_states[25]},
-    {0x0521, 0, &mqc_states[10], &mqc_states[58]},
-    {0x0521, 1, &mqc_states[11], &mqc_states[59]},
-    {0x0221, 0, &mqc_states[76], &mqc_states[66]},
-    {0x0221, 1, &mqc_states[77], &mqc_states[67]},
-    {0x5601, 0, &mqc_states[14], &mqc_states[13]},
-    {0x5601, 1, &mqc_states[15], &mqc_states[12]},
-    {0x5401, 0, &mqc_states[16], &mqc_states[28]},
-    {0x5401, 1, &mqc_states[17], &mqc_states[29]},
-    {0x4801, 0, &mqc_states[18], &mqc_states[28]},
-    {0x4801, 1, &mqc_states[19], &mqc_states[29]},
-    {0x3801, 0, &mqc_states[20], &mqc_states[28]},
-    {0x3801, 1, &mqc_states[21], &mqc_states[29]},
-    {0x3001, 0, &mqc_states[22], &mqc_states[34]},
-    {0x3001, 1, &mqc_states[23], &mqc_states[35]},
-    {0x2401, 0, &mqc_states[24], &mqc_states[36]},
-    {0x2401, 1, &mqc_states[25], &mqc_states[37]},
-    {0x1c01, 0, &mqc_states[26], &mqc_states[40]},
-    {0x1c01, 1, &mqc_states[27], &mqc_states[41]},
-    {0x1601, 0, &mqc_states[58], &mqc_states[42]},
-    {0x1601, 1, &mqc_states[59], &mqc_states[43]},
-    {0x5601, 0, &mqc_states[30], &mqc_states[29]},
-    {0x5601, 1, &mqc_states[31], &mqc_states[28]},
-    {0x5401, 0, &mqc_states[32], &mqc_states[28]},
-    {0x5401, 1, &mqc_states[33], &mqc_states[29]},
-    {0x5101, 0, &mqc_states[34], &mqc_states[30]},
-    {0x5101, 1, &mqc_states[35], &mqc_states[31]},
-    {0x4801, 0, &mqc_states[36], &mqc_states[32]},
-    {0x4801, 1, &mqc_states[37], &mqc_states[33]},
-    {0x3801, 0, &mqc_states[38], &mqc_states[34]},
-    {0x3801, 1, &mqc_states[39], &mqc_states[35]},
-    {0x3401, 0, &mqc_states[40], &mqc_states[36]},
-    {0x3401, 1, &mqc_states[41], &mqc_states[37]},
-    {0x3001, 0, &mqc_states[42], &mqc_states[38]},
-    {0x3001, 1, &mqc_states[43], &mqc_states[39]},
-    {0x2801, 0, &mqc_states[44], &mqc_states[38]},
-    {0x2801, 1, &mqc_states[45], &mqc_states[39]},
-    {0x2401, 0, &mqc_states[46], &mqc_states[40]},
-    {0x2401, 1, &mqc_states[47], &mqc_states[41]},
-    {0x2201, 0, &mqc_states[48], &mqc_states[42]},
-    {0x2201, 1, &mqc_states[49], &mqc_states[43]},
-    {0x1c01, 0, &mqc_states[50], &mqc_states[44]},
-    {0x1c01, 1, &mqc_states[51], &mqc_states[45]},
-    {0x1801, 0, &mqc_states[52], &mqc_states[46]},
-    {0x1801, 1, &mqc_states[53], &mqc_states[47]},
-    {0x1601, 0, &mqc_states[54], &mqc_states[48]},
-    {0x1601, 1, &mqc_states[55], &mqc_states[49]},
-    {0x1401, 0, &mqc_states[56], &mqc_states[50]},
-    {0x1401, 1, &mqc_states[57], &mqc_states[51]},
-    {0x1201, 0, &mqc_states[58], &mqc_states[52]},
-    {0x1201, 1, &mqc_states[59], &mqc_states[53]},
-    {0x1101, 0, &mqc_states[60], &mqc_states[54]},
-    {0x1101, 1, &mqc_states[61], &mqc_states[55]},
-    {0x0ac1, 0, &mqc_states[62], &mqc_states[56]},
-    {0x0ac1, 1, &mqc_states[63], &mqc_states[57]},
-    {0x09c1, 0, &mqc_states[64], &mqc_states[58]},
-    {0x09c1, 1, &mqc_states[65], &mqc_states[59]},
-    {0x08a1, 0, &mqc_states[66], &mqc_states[60]},
-    {0x08a1, 1, &mqc_states[67], &mqc_states[61]},
-    {0x0521, 0, &mqc_states[68], &mqc_states[62]},
-    {0x0521, 1, &mqc_states[69], &mqc_states[63]},
-    {0x0441, 0, &mqc_states[70], &mqc_states[64]},
-    {0x0441, 1, &mqc_states[71], &mqc_states[65]},
-    {0x02a1, 0, &mqc_states[72], &mqc_states[66]},
-    {0x02a1, 1, &mqc_states[73], &mqc_states[67]},
-    {0x0221, 0, &mqc_states[74], &mqc_states[68]},
-    {0x0221, 1, &mqc_states[75], &mqc_states[69]},
-    {0x0141, 0, &mqc_states[76], &mqc_states[70]},
-    {0x0141, 1, &mqc_states[77], &mqc_states[71]},
-    {0x0111, 0, &mqc_states[78], &mqc_states[72]},
-    {0x0111, 1, &mqc_states[79], &mqc_states[73]},
-    {0x0085, 0, &mqc_states[80], &mqc_states[74]},
-    {0x0085, 1, &mqc_states[81], &mqc_states[75]},
-    {0x0049, 0, &mqc_states[82], &mqc_states[76]},
-    {0x0049, 1, &mqc_states[83], &mqc_states[77]},
-    {0x0025, 0, &mqc_states[84], &mqc_states[78]},
-    {0x0025, 1, &mqc_states[85], &mqc_states[79]},
-    {0x0015, 0, &mqc_states[86], &mqc_states[80]},
-    {0x0015, 1, &mqc_states[87], &mqc_states[81]},
-    {0x0009, 0, &mqc_states[88], &mqc_states[82]},
-    {0x0009, 1, &mqc_states[89], &mqc_states[83]},
-    {0x0005, 0, &mqc_states[90], &mqc_states[84]},
-    {0x0005, 1, &mqc_states[91], &mqc_states[85]},
-    {0x0001, 0, &mqc_states[90], &mqc_states[86]},
-    {0x0001, 1, &mqc_states[91], &mqc_states[87]},
-    {0x5601, 0, &mqc_states[92], &mqc_states[92]},
-    {0x5601, 1, &mqc_states[93], &mqc_states[93]},
-};
-
-/*
-==========================================================
-   local functions
-==========================================================
-*/
-
-static void mqc_byteout(opj_mqc_t *mqc)
-{
-    if (*mqc->bp == 0xff) {
-        mqc->bp++;
-        *mqc->bp = mqc->c >> 20;
-        mqc->c &= 0xfffff;
-        mqc->ct = 7;
-    } else {
-        if ((mqc->c & 0x8000000) == 0) {    /* ((mqc->c&0x8000000)==0) CHANGE */
-            mqc->bp++;
-            *mqc->bp = mqc->c >> 19;
-            mqc->c &= 0x7ffff;
-            mqc->ct = 8;
-        } else {
-            (*mqc->bp)++;
-            if (*mqc->bp == 0xff) {
-                mqc->c &= 0x7ffffff;
-                mqc->bp++;
-                *mqc->bp = mqc->c >> 20;
-                mqc->c &= 0xfffff;
-                mqc->ct = 7;
-            } else {
-                mqc->bp++;
-                *mqc->bp = mqc->c >> 19;
-                mqc->c &= 0x7ffff;
-                mqc->ct = 8;
-            }
-        }
-    }
-}
-
-static void mqc_renorme(opj_mqc_t *mqc)
-{
-    do {
-        mqc->a <<= 1;
-        mqc->c <<= 1;
-        mqc->ct--;
-        if (mqc->ct == 0) {
-            mqc_byteout(mqc);
-        }
-    } while ((mqc->a & 0x8000) == 0);
-}
-
-static void mqc_codemps(opj_mqc_t *mqc)
-{
-    mqc->a -= (*mqc->curctx)->qeval;
-    if ((mqc->a & 0x8000) == 0) {
-        if (mqc->a < (*mqc->curctx)->qeval) {
-            mqc->a = (*mqc->curctx)->qeval;
-        } else {
-            mqc->c += (*mqc->curctx)->qeval;
-        }
-        *mqc->curctx = (*mqc->curctx)->nmps;
-        mqc_renorme(mqc);
-    } else {
-        mqc->c += (*mqc->curctx)->qeval;
-    }
-}
-
-static void mqc_codelps(opj_mqc_t *mqc)
-{
-    mqc->a -= (*mqc->curctx)->qeval;
-    if (mqc->a < (*mqc->curctx)->qeval) {
-        mqc->c += (*mqc->curctx)->qeval;
-    } else {
-        mqc->a = (*mqc->curctx)->qeval;
-    }
-    *mqc->curctx = (*mqc->curctx)->nlps;
-    mqc_renorme(mqc);
-}
-
-static void mqc_setbits(opj_mqc_t *mqc)
-{
-    unsigned int tempc = mqc->c + mqc->a;
-    mqc->c |= 0xffff;
-    if (mqc->c >= tempc) {
-        mqc->c -= 0x8000;
-    }
-}
-
-static int mqc_mpsexchange(opj_mqc_t *mqc)
-{
-    int d;
-    if (mqc->a < (*mqc->curctx)->qeval) {
-        d = 1 - (*mqc->curctx)->mps;
-        *mqc->curctx = (*mqc->curctx)->nlps;
-    } else {
-        d = (*mqc->curctx)->mps;
-        *mqc->curctx = (*mqc->curctx)->nmps;
-    }
-
-    return d;
-}
-
-static int mqc_lpsexchange(opj_mqc_t *mqc)
-{
-    int d;
-    if (mqc->a < (*mqc->curctx)->qeval) {
-        mqc->a = (*mqc->curctx)->qeval;
-        d = (*mqc->curctx)->mps;
-        *mqc->curctx = (*mqc->curctx)->nmps;
-    } else {
-        mqc->a = (*mqc->curctx)->qeval;
-        d = 1 - (*mqc->curctx)->mps;
-        *mqc->curctx = (*mqc->curctx)->nlps;
-    }
-
-    return d;
-}
-
-static void mqc_bytein(opj_mqc_t *mqc)
-{
-    if (mqc->bp != mqc->end) {
-        unsigned int c;
-        if (mqc->bp + 1 != mqc->end) {
-            c = *(mqc->bp + 1);
-        } else {
-            c = 0xff;
-        }
-        if (*mqc->bp == 0xff) {
-            if (c > 0x8f) {
-                mqc->c += 0xff00;
-                mqc->ct = 8;
-            } else {
-                mqc->bp++;
-                mqc->c += c << 9;
-                mqc->ct = 7;
-            }
-        } else {
-            mqc->bp++;
-            mqc->c += c << 8;
-            mqc->ct = 8;
-        }
-    } else {
-        mqc->c += 0xff00;
-        mqc->ct = 8;
-    }
-}
-
-static void mqc_renormd(opj_mqc_t *mqc)
-{
-    do {
-        if (mqc->ct == 0) {
-            mqc_bytein(mqc);
-        }
-        mqc->a <<= 1;
-        mqc->c <<= 1;
-        mqc->ct--;
-    } while (mqc->a < 0x8000);
-}
-
-/*
-==========================================================
-   MQ-Coder interface
-==========================================================
-*/
-
-opj_mqc_t* mqc_create()
-{
-    opj_mqc_t *mqc = (opj_mqc_t*)opj_malloc(sizeof(opj_mqc_t));
-    return mqc;
-}
-
-void mqc_destroy(opj_mqc_t *mqc)
-{
-    if (mqc) {
-        opj_free(mqc);
-    }
-}
-
-int mqc_numbytes(opj_mqc_t *mqc)
-{
-    return mqc->bp - mqc->start;
-}
-
-void mqc_init_enc(opj_mqc_t *mqc, unsigned char *bp)
-{
-    mqc_setcurctx(mqc, 0);
-    mqc->a = 0x8000;
-    mqc->c = 0;
-    mqc->bp = bp - 1;
-    mqc->ct = 12;
-    if (*mqc->bp == 0xff) {
-        mqc->ct = 13;
-    }
-    mqc->start = bp;
-}
-
-void mqc_setcurctx(opj_mqc_t *mqc, int ctxno)
-{
-    mqc->curctx = &mqc->ctxs[ctxno];
-}
-
-void mqc_encode(opj_mqc_t *mqc, int d)
-{
-    if ((*mqc->curctx)->mps == d) {
-        mqc_codemps(mqc);
-    } else {
-        mqc_codelps(mqc);
-    }
-}
-
-void mqc_flush(opj_mqc_t *mqc)
-{
-    mqc_setbits(mqc);
-    mqc->c <<= mqc->ct;
-    mqc_byteout(mqc);
-    mqc->c <<= mqc->ct;
-    mqc_byteout(mqc);
-
-    if (*mqc->bp != 0xff) {
-        mqc->bp++;
-    }
-}
-
-void mqc_bypass_init_enc(opj_mqc_t *mqc)
-{
-    mqc->c = 0;
-    mqc->ct = 8;
-    /*if (*mqc->bp == 0xff) {
-    mqc->ct = 7;
-     } */
-}
-
-void mqc_bypass_enc(opj_mqc_t *mqc, int d)
-{
-    mqc->ct--;
-    mqc->c = mqc->c + (d << mqc->ct);
-    if (mqc->ct == 0) {
-        mqc->bp++;
-        *mqc->bp = mqc->c;
-        mqc->ct = 8;
-        if (*mqc->bp == 0xff) {
-            mqc->ct = 7;
-        }
-        mqc->c = 0;
-    }
-}
-
-int mqc_bypass_flush_enc(opj_mqc_t *mqc)
-{
-    unsigned char bit_padding;
-
-    bit_padding = 0;
-
-    if (mqc->ct != 0) {
-        while (mqc->ct > 0) {
-            mqc->ct--;
-            mqc->c += bit_padding << mqc->ct;
-            bit_padding = (bit_padding + 1) & 0x01;
-        }
-        mqc->bp++;
-        *mqc->bp = mqc->c;
-        mqc->ct = 8;
-        mqc->c = 0;
-    }
-
-    return 1;
-}
-
-void mqc_reset_enc(opj_mqc_t *mqc)
-{
-    mqc_resetstates(mqc);
-    mqc_setstate(mqc, 18, 0, 46);
-    mqc_setstate(mqc, 0, 0, 3);
-    mqc_setstate(mqc, 1, 0, 4);
-}
-
-void mqc_reset_enc_3(opj_mqc_t *mqc)
-{
-    mqc_resetstates(mqc);
-    mqc_setstate(mqc, T1_3D_CTXNO_UNI, 0, 46);
-    mqc_setstate(mqc, T1_3D_CTXNO_AGG, 0, 3);
-    mqc_setstate(mqc, T1_3D_CTXNO_ZC, 0, 4);
-}
-
-int mqc_restart_enc(opj_mqc_t *mqc)
-{
-    int correction = 1;
-
-    /* <flush part> */
-    int n = 27 - 15 - mqc->ct;
-    mqc->c <<= mqc->ct;
-    while (n > 0) {
-        mqc_byteout(mqc);
-        n -= mqc->ct;
-        mqc->c <<= mqc->ct;
-    }
-    mqc_byteout(mqc);
-
-    return correction;
-}
-
-void mqc_restart_init_enc(opj_mqc_t *mqc)
-{
-    /* <Re-init part> */
-    mqc_setcurctx(mqc, 0);
-    mqc->a = 0x8000;
-    mqc->c = 0;
-    mqc->ct = 12;
-    mqc->bp--;
-    if (*mqc->bp == 0xff) {
-        mqc->ct = 13;
-    }
-}
-
-void mqc_erterm_enc(opj_mqc_t *mqc)
-{
-    int k = 11 - mqc->ct + 1;
-
-    while (k > 0) {
-        mqc->c <<= mqc->ct;
-        mqc->ct = 0;
-        mqc_byteout(mqc);
-        k -= mqc->ct;
-    }
-
-    if (*mqc->bp != 0xff) {
-        mqc_byteout(mqc);
-    }
-}
-
-void mqc_segmark_enc(opj_mqc_t *mqc)
-{
-    int i;
-    mqc_setcurctx(mqc, 18);
-
-    for (i = 1; i < 5; i++) {
-        mqc_encode(mqc, i % 2);
-    }
-}
-
-void mqc_init_dec(opj_mqc_t *mqc, unsigned char *bp, int len)
-{
-    mqc_setcurctx(mqc, 0);
-    mqc->start = bp;
-    mqc->end = bp + len;
-    mqc->bp = bp;
-    if (len == 0) {
-        mqc->c = 0xff << 16;
-    } else {
-        mqc->c = *mqc->bp << 16;
-    }
-    mqc_bytein(mqc);
-    mqc->c <<= 7;
-    mqc->ct -= 7;
-    mqc->a = 0x8000;
-}
-
-int mqc_decode(opj_mqc_t *mqc)
-{
-    int d;
-    mqc->a -= (*mqc->curctx)->qeval;
-    if ((mqc->c >> 16) < (*mqc->curctx)->qeval) {
-        d = mqc_lpsexchange(mqc);
-        mqc_renormd(mqc);
-    } else {
-        mqc->c -= (*mqc->curctx)->qeval << 16;
-        if ((mqc->a & 0x8000) == 0) {
-            d = mqc_mpsexchange(mqc);
-            mqc_renormd(mqc);
-        } else {
-            d = (*mqc->curctx)->mps;
-        }
-    }
-
-    return d;
-}
-
-void mqc_resetstates(opj_mqc_t *mqc)
-{
-    int i;
-    for (i = 0; i < MQC_NUMCTXS; i++) {
-        mqc->ctxs[i] = mqc_states;
-    }
-}
-
-void mqc_setstate(opj_mqc_t *mqc, int ctxno, int msb, int prob)
-{
-    mqc->ctxs[ctxno] = &mqc_states[msb + (prob << 1)];
-}
-
-
diff --git a/src/lib/openjp3d/mqc.h b/src/lib/openjp3d/mqc.h
deleted file mode 100644 (file)
index cff92f6..0000000
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __MQC_H
-#define __MQC_H
-/**
-@file mqc.h
-@brief Implementation of an MQ-Coder (MQC)
-
-The functions in MQC.C have for goal to realize the MQ-coder operations. The functions
-in MQC.C are used by some function in T1.C.
-*/
-
-/** @defgroup MQC MQC - Implementation of an MQ-Coder */
-/*@{*/
-
-/**
-This struct defines the state of a context.
-*/
-typedef struct opj_mqc_state {
-    /** the probability of the Least Probable Symbol (0.75->0x8000, 1.5->0xffff) */
-    unsigned int qeval;
-    /** the Most Probable Symbol (0 or 1) */
-    int mps;
-    /** next state if the next encoded symbol is the MPS */
-    struct opj_mqc_state *nmps;
-    /** next state if the next encoded symbol is the LPS */
-    struct opj_mqc_state *nlps;
-} opj_mqc_state_t;
-
-#define MQC_NUMCTXS 32
-
-/**
-MQ coder
-*/
-typedef struct opj_mqc {
-    unsigned int c;
-    unsigned int a;
-    unsigned int ct;
-    unsigned char *bp;
-    unsigned char *start;
-    unsigned char *end;
-    opj_mqc_state_t *ctxs[MQC_NUMCTXS];
-    opj_mqc_state_t **curctx;
-} opj_mqc_t;
-
-/** @name Exported functions */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-/**
-Create a new MQC handle
-@return Returns a new MQC handle if successful, returns NULL otherwise
-*/
-opj_mqc_t* mqc_create(void);
-/**
-Destroy a previously created MQC handle
-@param mqc MQC handle to destroy
-*/
-void mqc_destroy(opj_mqc_t *mqc);
-/**
-Return the number of bytes written/read since initialisation
-@param mqc MQC handle
-@return Returns the number of bytes already encoded
-*/
-int mqc_numbytes(opj_mqc_t *mqc);
-/**
-Reset the states of all the context of the coder/decoder
-(each context is set to a state where 0 and 1 are more or less equiprobable)
-@param mqc MQC handle
-*/
-void mqc_resetstates(opj_mqc_t *mqc);
-/**
-Set the state of a particular context
-@param mqc MQC handle
-@param ctxno Number that identifies the context
-@param msb The MSB of the new state of the context
-@param prob Number that identifies the probability of the symbols for the new state of the context
-*/
-void mqc_setstate(opj_mqc_t *mqc, int ctxno, int msb, int prob);
-/**
-Initialize the encoder
-@param mqc MQC handle
-@param bp Pointer to the start of the buffer where the bytes will be written
-*/
-void mqc_init_enc(opj_mqc_t *mqc, unsigned char *bp);
-/**
-Set the current context used for coding/decoding
-@param mqc MQC handle
-@param ctxno Number that identifies the context
-*/
-void mqc_setcurctx(opj_mqc_t *mqc, int ctxno);
-/**
-Encode a symbol using the MQ-coder
-@param mqc MQC handle
-@param d The symbol to be encoded (0 or 1)
-*/
-void mqc_encode(opj_mqc_t *mqc, int d);
-/**
-Flush the encoder, so that all remaining data is written
-@param mqc MQC handle
-*/
-void mqc_flush(opj_mqc_t *mqc);
-/**
-BYPASS mode switch, initialization operation.
-JPEG 2000 p 505.
-<h2>Not fully implemented and tested !!</h2>
-@param mqc MQC handle
-*/
-void mqc_bypass_init_enc(opj_mqc_t *mqc);
-/**
-BYPASS mode switch, coding operation.
-JPEG 2000 p 505.
-<h2>Not fully implemented and tested !!</h2>
-@param mqc MQC handle
-@param d The symbol to be encoded (0 or 1)
-*/
-void mqc_bypass_enc(opj_mqc_t *mqc, int d);
-/**
-BYPASS mode switch, flush operation
-<h2>Not fully implemented and tested !!</h2>
-@param mqc MQC handle
-@return Returns 1 (always)
-*/
-int mqc_bypass_flush_enc(opj_mqc_t *mqc);
-/**
-RESET mode switch
-@param mqc MQC handle
-*/
-void mqc_reset_enc(opj_mqc_t *mqc);
-/**
-RESET mode switch
-@param mqc MQC handle
-*/
-void mqc_reset_enc_3(opj_mqc_t *mqc);
-/**
-RESTART mode switch (TERMALL)
-@param mqc MQC handle
-@return Returns 1 (always)
-*/
-int mqc_restart_enc(opj_mqc_t *mqc);
-/**
-RESTART mode switch (TERMALL) reinitialisation
-@param mqc MQC handle
-*/
-void mqc_restart_init_enc(opj_mqc_t *mqc);
-/**
-ERTERM mode switch (PTERM)
-@param mqc MQC handle
-*/
-void mqc_erterm_enc(opj_mqc_t *mqc);
-/**
-SEGMARK mode switch (SEGSYM)
-@param mqc MQC handle
-*/
-void mqc_segmark_enc(opj_mqc_t *mqc);
-/**
-Initialize the decoder
-@param mqc MQC handle
-@param bp Pointer to the start of the buffer from which the bytes will be read
-@param len Length of the input buffer
-*/
-void mqc_init_dec(opj_mqc_t *mqc, unsigned char *bp, int len);
-/**
-Decode a symbol
-@param mqc MQC handle
-@return Returns the decoded symbol (0 or 1)
-*/
-int mqc_decode(opj_mqc_t *mqc);
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif /* __MQC_H */
diff --git a/src/lib/openjp3d/openjp3d.c b/src/lib/openjp3d/openjp3d.c
deleted file mode 100644 (file)
index 3299a99..0000000
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2006, Mónica Díez García, Image Processing Laboratory, University of Valladolid, Spain
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifdef _WIN32
-#include <windows.h>
-#endif /* _WIN32 */
-
-#include "opj_includes.h"
-#include "openjp3d.h"
-#define JP3D_VERSION "1.3.0"
-/* ---------------------------------------------------------------------- */
-#ifdef _WIN32
-#ifndef OPJ_STATIC
-BOOL APIENTRY
-DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
-{
-    switch (ul_reason_for_call) {
-    case DLL_PROCESS_ATTACH :
-        break;
-    case DLL_PROCESS_DETACH :
-        break;
-    case DLL_THREAD_ATTACH :
-    case DLL_THREAD_DETACH :
-        break;
-    }
-
-    return TRUE;
-}
-#endif /* OPJ_STATIC */
-#endif /* _WIN32 */
-
-/* ---------------------------------------------------------------------- */
-
-const char* OPJ_CALLCONV opj_version()
-{
-    return JP3D_VERSION;
-}
-opj_dinfo_t* OPJ_CALLCONV opj_create_decompress(OPJ_CODEC_FORMAT format)
-{
-    opj_dinfo_t *dinfo = (opj_dinfo_t*)opj_malloc(sizeof(opj_dinfo_t));
-    if (!dinfo) {
-        return NULL;
-    }
-    dinfo->is_decompressor = true;
-    switch (format) {
-    case CODEC_J3D:
-    case CODEC_J2K:
-        /* get a J3D decoder handle */
-        dinfo->j3d_handle = (void*)j3d_create_decompress((opj_common_ptr)dinfo);
-        if (!dinfo->j3d_handle) {
-            opj_free(dinfo);
-            return NULL;
-        }
-        break;
-    default:
-        opj_free(dinfo);
-        return NULL;
-    }
-
-    dinfo->codec_format = format;
-
-    return dinfo;
-}
-
-void OPJ_CALLCONV opj_destroy_decompress(opj_dinfo_t *dinfo)
-{
-    if (dinfo) {
-        /* destroy the codec */
-        if (dinfo->codec_format != CODEC_UNKNOWN) {
-            j3d_destroy_decompress((opj_j3d_t*)dinfo->j3d_handle);
-        }
-        /* destroy the decompressor */
-        opj_free(dinfo);
-    }
-}
-
-void OPJ_CALLCONV opj_set_default_decoder_parameters(opj_dparameters_t
-        *parameters)
-{
-    if (parameters) {
-        memset(parameters, 0, sizeof(opj_dparameters_t));
-        /* default decoding parameters */
-        parameters->cp_layer = 0;
-        parameters->cp_reduce[0] = 0;
-        parameters->cp_reduce[1] = 0;
-        parameters->cp_reduce[2] = 0;
-        parameters->bigendian = 0;
-
-        parameters->decod_format = -1;
-        parameters->cod_format = -1;
-    }
-}
-
-void OPJ_CALLCONV opj_setup_decoder(opj_dinfo_t *dinfo,
-                                    opj_dparameters_t *parameters)
-{
-    if (dinfo && parameters) {
-        if (dinfo->codec_format != CODEC_UNKNOWN) {
-            j3d_setup_decoder((opj_j3d_t*)dinfo->j3d_handle, parameters);
-        }
-    }
-}
-
-opj_volume_t* OPJ_CALLCONV opj_decode(opj_dinfo_t *dinfo, opj_cio_t *cio)
-{
-    if (dinfo && cio) {
-        if (dinfo->codec_format != CODEC_UNKNOWN) {
-            return j3d_decode((opj_j3d_t*)dinfo->j3d_handle, cio);
-        }
-    }
-
-    return NULL;
-}
-
-opj_cinfo_t* OPJ_CALLCONV opj_create_compress(OPJ_CODEC_FORMAT format)
-{
-    opj_cinfo_t *cinfo = (opj_cinfo_t*)opj_malloc(sizeof(opj_cinfo_t));
-    if (!cinfo) {
-        return NULL;
-    }
-    cinfo->is_decompressor = false;
-    switch (format) {
-    case CODEC_J3D:
-    case CODEC_J2K:
-        /* get a J3D coder handle */
-        cinfo->j3d_handle = (void*)j3d_create_compress((opj_common_ptr)cinfo);
-        if (!cinfo->j3d_handle) {
-            opj_free(cinfo);
-            return NULL;
-        }
-        break;
-    default:
-        opj_free(cinfo);
-        return NULL;
-    }
-
-    cinfo->codec_format = format;
-
-    return cinfo;
-}
-
-void OPJ_CALLCONV opj_destroy_compress(opj_cinfo_t *cinfo)
-{
-    if (cinfo) {
-        /* destroy the codec */
-        if (cinfo->codec_format != CODEC_UNKNOWN) {
-            j3d_destroy_compress((opj_j3d_t*)cinfo->j3d_handle);
-        }
-        /* destroy the decompressor */
-        opj_free(cinfo);
-    }
-}
-
-void OPJ_CALLCONV opj_set_default_encoder_parameters(opj_cparameters_t
-        *parameters)
-{
-    if (parameters) {
-        memset(parameters, 0, sizeof(opj_cparameters_t));
-        /* default coding parameters */
-        parameters->numresolution[0] = 3;
-        parameters->numresolution[1] = 3;
-        parameters->numresolution[2] = 1;
-        parameters->cblock_init[0] = 64;
-        parameters->cblock_init[1] = 64;
-        parameters->cblock_init[2] = 64;
-        parameters->prog_order = LRCP;
-        parameters->roi_compno = -1;        /* no ROI */
-        parameters->atk_wt[0] = 1;              /* 5-3 WT */
-        parameters->atk_wt[1] = 1;              /* 5-3 WT */
-        parameters->atk_wt[2] = 1;              /* 5-3 WT */
-        parameters->irreversible = 0;
-        parameters->subsampling_dx = 1;
-        parameters->subsampling_dy = 1;
-        parameters->subsampling_dz = 1;
-
-        parameters->decod_format = -1;
-        parameters->cod_format = -1;
-        parameters->encoding_format = ENCOD_2EB;
-        parameters->transform_format = TRF_2D_DWT;
-    }
-}
-
-void OPJ_CALLCONV opj_setup_encoder(opj_cinfo_t *cinfo,
-                                    opj_cparameters_t *parameters, opj_volume_t *volume)
-{
-    if (cinfo && parameters && volume) {
-        if (cinfo->codec_format != CODEC_UNKNOWN) {
-            j3d_setup_encoder((opj_j3d_t*)cinfo->j3d_handle, parameters, volume);
-        }
-    }
-}
-
-bool OPJ_CALLCONV opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio,
-                             opj_volume_t *volume, char *index)
-{
-    if (cinfo && cio && volume) {
-        if (cinfo->codec_format != CODEC_UNKNOWN) {
-            return j3d_encode((opj_j3d_t*)cinfo->j3d_handle, cio, volume, index);
-        }
-    }
-
-    return false;
-}
-
-
diff --git a/src/lib/openjp3d/openjp3d.h b/src/lib/openjp3d/openjp3d.h
deleted file mode 100644 (file)
index b61763e..0000000
+++ /dev/null
@@ -1,736 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * Copyright (c) 2006, Mónica Díez García, Image Processing Laboratory, University of Valladolid, Spain
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef OPENJPEG_H
-#define OPENJPEG_H
-
-/*
-==========================================================
-   Compiler directives
-==========================================================
-*/
-
-#if defined(OPJ_STATIC) || !defined(_WIN32)
-/* http://gcc.gnu.org/wiki/Visibility */
-#if __GNUC__ >= 4
-#define OPJ_API    __attribute__ ((visibility ("default")))
-#define OPJ_LOCAL  __attribute__ ((visibility ("hidden")))
-#else
-#define OPJ_API
-#define OPJ_LOCAL
-#endif
-#define OPJ_CALLCONV
-#else
-#define OPJ_CALLCONV __stdcall
-
-/*
-The following ifdef block is the standard way of creating macros which make exporting
-from a DLL simpler. All files within this DLL are compiled with the OPJ_EXPORTS
-symbol defined on the command line. this symbol should not be defined on any project
-that uses this DLL. This way any other project whose source files include this file see
-OPJ_API functions as being imported from a DLL, whereas this DLL sees symbols
-defined with this macro as being exported.
-*/
-#if defined(OPJ_EXPORTS) || defined(DLL_EXPORT)
-#define OPJ_API __declspec(dllexport)
-#else
-#define OPJ_API __declspec(dllimport)
-#endif /* OPJ_EXPORTS */
-#endif /* !OPJ_STATIC || !WIN32 */
-
-#ifndef __cplusplus
-#if defined(HAVE_STDBOOL_H)
-/*
-The C language implementation does correctly provide the standard header
-file "stdbool.h".
- */
-#include <stdbool.h>
-#else
-/*
-The C language implementation does not provide the standard header file
-"stdbool.h" as required by ISO/IEC 9899:1999.  Try to compensate for this
-braindamage below.
-*/
-#if !defined(bool)
-#define bool    int
-#endif
-#if !defined(true)
-#define true    1
-#endif
-#if !defined(false)
-#define false   0
-#endif
-#endif
-#endif /* __cplusplus */
-
-/*
-==========================================================
-   Useful constant definitions
-==========================================================
-*/
-#ifndef MAX_SLICES
-#define MAX_SLICES 300  /**< Maximum allowed size for slices */
-#endif /* MAX_PATH */
-
-#ifndef MAX_PATH
-#define MAX_PATH 260    /**< Maximum allowed size for filenames */
-#endif /* MAX_PATH */
-
-#define J3D_MAXRLVLS 32                 /**< Number of maximum resolution level authorized */
-#define J3D_MAXBANDS (7*J3D_MAXRLVLS + 1)   /**< Number of maximum sub-band linked to number of resolution level */
-
-#define TINY 1.0E-20
-/*
-==========================================================
-   enum definitions
-==========================================================
-*/
-
-#define J2K_CFMT 0
-#define J3D_CFMT 1
-#define LSE_CFMT 2
-
-#define BIN_DFMT 0
-#define PGX_DFMT 1
-#define IMG_DFMT 2
-/* ----------------------------------------------------------------------- */
-
-/** Progression order */
-typedef enum PROG_ORDER {
-    /**< place-holder */
-    PROG_UNKNOWN = -1,
-    /**< layer-resolution-component-precinct order */
-    LRCP = 0,
-    /**< resolution-layer-component-precinct order */
-    RLCP = 1,
-    /**< resolution-precinct-component-layer order */
-    RPCL = 2,
-    /**< precinct-component-resolution-layer order */
-    PCRL = 3,
-    /**< component-precinct-resolution-layer order */
-    CPRL = 4
-} OPJ_PROG_ORDER;
-
-/**
-Supported volume color spaces
-*/
-typedef enum COLOR_SPACE {
-    /**< place-holder */
-    CLRSPC_UNKNOWN = -1,
-    /**< sRGB */
-    CLRSPC_SRGB = 1,
-    /**< grayscale */
-    CLRSPC_GRAY = 2,
-    /**< YUV */
-    CLRSPC_SYCC = 3
-} OPJ_COLOR_SPACE;
-
-/**
-Supported codec
-*/
-typedef enum CODEC_FORMAT {
-    /**< place-holder */
-    CODEC_UNKNOWN = -1,
-    /**< JPEG-2000 codestream : read/write */
-    CODEC_J2K = 0,
-    /**< JPEG-2000 Part 10 file format : read/write */
-    CODEC_J3D = 1
-} OPJ_CODEC_FORMAT;
-
-/**
-Supported entropy coding algorithms
-*/
-typedef enum ENTROPY_CODING {
-    /**< place-holder */
-    ENCOD_UNKNOWN = -1,
-    /**< 2D EBCOT encoding */
-    ENCOD_2EB = 0,
-    /**< 3D EBCOT encoding */
-    ENCOD_3EB = 1,
-    /**< Golomb-Rice coding with 2D context */
-    ENCOD_2GR = 2,
-    /**< Golomb-Rice coding with 3D context  */
-    ENCOD_3GR = 3
-} OPJ_ENTROPY_CODING;
-
-/**
-Supported transforms
-*/
-typedef enum TRANSFORM {
-    /**< place-holder */
-    TRF_UNKNOWN = -1,
-    /**< 2D DWT, no transform in axial dim */
-    TRF_2D_DWT = 0,
-    /**< 3D DWT */
-    TRF_3D_DWT = 1,
-    /**< 3D prediction*/
-    TRF_3D_RLS = 2,
-    TRF_3D_LSE = 3
-} OPJ_TRANSFORM;
-/*
-==========================================================
-   event manager typedef definitions
-==========================================================
-*/
-
-/**
-Callback function prototype for events
-@param msg Event message
-@param client_data
-*/
-typedef void (*opj_msg_callback)(const char *msg, void *client_data);
-
-/**
-Message handler object
-used for
-<ul>
-<li>Error messages
-<li>Warning messages
-<li>Debugging messages
-</ul>
-*/
-typedef struct opj_event_mgr {
-    /** Error message callback if available, NULL otherwise */
-    opj_msg_callback error_handler;
-    /** Warning message callback if available, NULL otherwise */
-    opj_msg_callback warning_handler;
-    /** Debug message callback if available, NULL otherwise */
-    opj_msg_callback info_handler;
-} opj_event_mgr_t;
-
-
-/*
-==========================================================
-   codec typedef definitions
-==========================================================
-*/
-
-/**
-Progression order changes
-*/
-typedef struct opj_poc {
-    int resno0, compno0;
-    int layno1, resno1, compno1;
-    OPJ_PROG_ORDER prg;
-    int tile;
-    char progorder[4];
-} opj_poc_t;
-
-
-/**
-Compression parameters
-*/
-typedef struct opj_cparameters {
-    /** size of tile: tile_size_on = false (not in argument) or = true (in argument) */
-    bool tile_size_on;
-    /** XTOsiz */
-    int cp_tx0;
-    /** YTOsiz */
-    int cp_ty0;
-    /** ZTOsiz */
-    int cp_tz0;
-
-    /** XTsiz */
-    int cp_tdx;
-    /** YTsiz */
-    int cp_tdy;
-    /** ZTsiz */
-    int cp_tdz;
-
-    /** allocation by rate/distortion */
-    int cp_disto_alloc;
-    /** allocation by fixed layer */
-    int cp_fixed_alloc;
-    /** add fixed_quality */
-    int cp_fixed_quality;
-    /** fixed layer */
-    int *cp_matrice;
-    /** number of layers */
-    int tcp_numlayers;
-    /** rates for successive layers */
-    float tcp_rates[100];
-    /** psnr's for successive layers */
-    float tcp_distoratio[100];
-    /** comment for coding */
-    char *cp_comment;
-    /** csty : coding style */
-    int csty;
-    /** DC offset (DCO) */
-    int dcoffset;
-    /** progression order (default LRCP) */
-    OPJ_PROG_ORDER prog_order;
-    /** progression order changes */
-    opj_poc_t POC[J3D_MAXRLVLS - 1];
-    /** number of progression order changes (POC), default to 0 */
-    int numpocs;
-
-    /** number of resolutions */
-    int numresolution[3];
-    /** initial code block width, height and depth, default to 64 */
-    int cblock_init[3];
-    /** mode switch (1=BYPASS(LAZY) 2=RESET 4=RESTART(TERMALL) 8=VSC 16=ERTERM(SEGTERM) 32=SEGMARK(SEGSYM)) */
-    int mode;
-
-    /** 1 : use the irreversible DWT 9-7, 0 : use lossless compression (default) */
-    int irreversible;
-    /** WT from ATK, default to 0 (false), no of atk used */
-    int atk_wt[3];
-    /** region of interest: affected component in [0..3], -1 means no ROI */
-    int roi_compno;
-    /** region of interest: upshift value */
-    int roi_shift;
-
-    /* number of precinct size specifications */
-    int res_spec;
-    /** initial precinct width */
-    int prct_init[3][J3D_MAXRLVLS];
-
-    /** transform format 0: 0: 2DWT, 1: 2D1P, 2: 3DWT, 3: 3RLS */
-    OPJ_TRANSFORM transform_format;
-    /** output file format 0: 2EB, 1: 3EB, 2: 2GR, 3: 3GR, 4: GRI */
-    OPJ_ENTROPY_CODING encoding_format;
-
-    /**@name command line encoder parameters (not used inside the library) */
-    /*@{*/
-    char infile[MAX_PATH];      /** input file name */
-    char outfile[MAX_PATH];     /** output file name */
-    char imgfile[MAX_PATH];     /** IMG file name for BIN volumes*/
-    int index_on;               /** creation of an index file, default to 0 (false) */
-    char index[MAX_PATH];       /** index file name */
-
-    int volume_offset_x0;       /** subvolume encoding: origin volume offset in x, y and z direction */
-    int volume_offset_y0;
-    int volume_offset_z0;
-
-    int subsampling_dx;         /** subsampling value for dx */
-    int subsampling_dy;
-    int subsampling_dz;
-
-    int decod_format;           /** input file format 0: BIN, 1: PGX */
-    int cod_format;             /** output file format 0: JP3D */
-    /*@}*/
-} opj_cparameters_t;
-
-/**
-Decompression parameters
-*/
-typedef struct opj_dparameters {
-    /** Set the number of highest resolution levels to be discarded. if != 0, then original dimension divided by 2^(reduce); if == 0 or not used, volume is decoded to the full resolution */
-    int cp_reduce[3];
-    /** Set the maximum number of quality layers to decode. if != 0, then only the first "layer" layers are decoded; if == 0 or not used, all the quality layers are decoded    */
-    int cp_layer;
-    int bigendian;
-
-    /**@name command line encoder parameters (not used inside the library) */
-    /*@{*/
-    /** input file name */
-    char infile[MAX_PATH];
-    /** output file name */
-    char outfile[MAX_PATH];
-    /** IMG file name for BIN volumes*/
-    char imgfile[MAX_PATH];
-    /** Original file name for PSNR measures*/
-    char original[MAX_PATH];
-    /** input file format 0: J2K, 1: JP3D */
-    int decod_format;
-    /** input file format 0: BIN, 1: PGM */
-    int cod_format;
-    /** original file format 0: BIN, 1: PGM */
-    int orig_format;
-    /*@}*/
-} opj_dparameters_t;
-
-/** Common fields between JPEG-2000 compression and decompression master structs. */
-#define opj_common_fields \
-    opj_event_mgr_t *event_mgr; /**< pointer to the event manager */\
-    void * client_data;         /**< Available for use by application */\
-    bool is_decompressor;       /**< So common code can tell which is which */\
-    OPJ_CODEC_FORMAT codec_format;      /**< selected codec */\
-    OPJ_ENTROPY_CODING encoding_format; /**< selected entropy coding */\
-    OPJ_TRANSFORM transform_format;     /**< selected transform */\
-    void *j3d_handle            /**< pointer to the J3D codec */
-
-/* Routines that are to be used by both halves of the library are declared
- * to receive a pointer to this structure.  There are no actual instances of
- * opj_common_struct_t, only of opj_cinfo_t and opj_dinfo_t.
- */
-typedef struct opj_common_struct {
-    opj_common_fields;        /* Fields common to both master struct types */
-    /* Additional fields follow in an actual opj_cinfo_t or
-     * opj_dinfo_t.  All three structs must agree on these
-     * initial fields!  (This would be a lot cleaner in C++.)
-     */
-} opj_common_struct_t;
-
-typedef opj_common_struct_t * opj_common_ptr;
-
-/**
-Compression context info
-*/
-typedef struct opj_cinfo {
-    /** Fields shared with opj_dinfo_t */
-    opj_common_fields;
-    /* other specific fields go here */
-} opj_cinfo_t;
-
-/**
-Decompression context info
-*/
-typedef struct opj_dinfo {
-    /** Fields shared with opj_cinfo_t */
-    opj_common_fields;
-    /* other specific fields go here */
-} opj_dinfo_t;
-
-/*
-==========================================================
-   I/O stream typedef definitions
-==========================================================
-*/
-
-/*
- * Stream open flags.
- */
-/** The stream was opened for reading. */
-#define OPJ_STREAM_READ 0x0001
-/** The stream was opened for writing. */
-#define OPJ_STREAM_WRITE 0x0002
-
-/**
-Byte input-output stream (CIO)
-*/
-typedef struct opj_cio {
-    /** codec context */
-    opj_common_ptr cinfo;
-    /** open mode (read/write) either OPJ_STREAM_READ or OPJ_STREAM_WRITE */
-    int openmode;
-    /** pointer to the start of the buffer */
-    unsigned char *buffer;
-    /** buffer size in bytes */
-    int length;
-    /** pointer to the start of the stream */
-    unsigned char *start;
-    /** pointer to the end of the stream */
-    unsigned char *end;
-    /** pointer to the current position */
-    unsigned char *bp;
-} opj_cio_t;
-
-/*
-==========================================================
-   volume typedef definitions
-==========================================================
-*/
-
-/**
-Defines a single volume component
-*/
-typedef struct opj_volume_comp {
-    /** XRsiz: horizontal separation of a sample of ith component with respect to the reference grid */
-    int dx;
-    /** YRsiz: vertical separation of a sample of ith component with respect to the reference grid */
-    int dy;
-    /** ZRsiz: vertical separation of a sample of ith component with respect to the reference grid */
-    int dz;
-    /** data width */
-    int w;
-    /** data height */
-    int h;
-    /** data length : no of slices */
-    int l;
-    /** x component offset compared to the whole volume */
-    int x0;
-    /** y component offset compared to the whole volume */
-    int y0;
-    /** z component offset compared to the whole volume */
-    int z0;
-    /** precision */
-    int prec;
-    /** volume depth in bits */
-    int bpp;
-    /** DC offset (15444-2) */
-    int dcoffset;
-    /** signed (1) / unsigned (0) */
-    int sgnd;
-    /** BE byte order (1) / LE byte order  (0) */
-    int bigendian;
-    /** number of decoded resolution */
-    int resno_decoded[3];
-    /** number of division by 2 of the out volume compared to the original size of volume */
-    int factor[3];
-    /** volume component data */
-    int *data;
-} opj_volume_comp_t;
-
-/**
-Defines volume data and characteristics
-*/
-typedef struct opj_volume {
-    /** XOsiz: horizontal offset from the origin of the reference grid to the left side of the volume area */
-    int x0;
-    /** YOsiz: vertical offset from the origin of the reference grid to the top side of the volume area */
-    int y0;
-    /** ZOsiz: vertical offset from the origin of the reference grid to the top side of the volume area */
-    int z0;
-    /** Xsiz: width of the reference grid */
-    int x1;
-    /** Ysiz: height of the reference grid */
-    int y1;
-    /** Zsiz: length of the reference grid */
-    int z1;
-    /** number of components in the volume */
-    int numcomps;
-    /** number of slices in the volume */
-    int numslices;
-    /** color space: sRGB, Greyscale or YUV */
-    OPJ_COLOR_SPACE color_space;
-    /** volume components */
-    opj_volume_comp_t *comps;
-} opj_volume_t;
-
-/**
-Component parameters structure used by the opj_volume_create function
-*/
-typedef struct opj_volume_comptparm {
-    /** XRsiz: horizontal separation of a sample of ith component with respect to the reference grid */
-    int dx;
-    /** YRsiz: vertical separation of a sample of ith component with respect to the reference grid */
-    int dy;
-    /** ZRsiz: axial separation of a sample of ith component with respect to the reference grid */
-    int dz;
-    /** data width */
-    int w;
-    /** data height */
-    int h;
-    /** data length */
-    int l;
-    /** x component offset compared to the whole volume */
-    int x0;
-    /** y component offset compared to the whole volume */
-    int y0;
-    /** z component offset compared to the whole volume */
-    int z0;
-    /** precision */
-    int prec;
-    /** volume depth in bits */
-    int bpp;
-    /** signed (1) / unsigned (0) */
-    int sgnd;
-    /** DC offset*/
-    int dcoffset;
-    /** BE byte order (1) / LE byte order  (0) */
-    int bigendian;
-} opj_volume_cmptparm_t;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/*
-==========================================================
-   openjpeg version
-==========================================================
-*/
-
-OPJ_API const char * OPJ_CALLCONV opj_version(void);
-
-/*
-==========================================================
-   volume functions definitions
-==========================================================
-*/
-
-/**
-Create an volume
-@param numcmpts number of components
-@param cmptparms components parameters
-@param clrspc volume color space
-@return returns a new volume structure if successful, returns NULL otherwise
-*/
-OPJ_API opj_volume_t* OPJ_CALLCONV opj_volume_create(int numcmpts,
-        opj_volume_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc);
-
-/**
-Deallocate any resources associated with an volume
-@param volume volume to be destroyed
-*/
-OPJ_API void OPJ_CALLCONV opj_volume_destroy(opj_volume_t *volume);
-
-/*
-==========================================================
-   stream functions definitions
-==========================================================
-*/
-
-/**
-Open and allocate a memory stream for read / write.
-On reading, the user must provide a buffer containing encoded data. The buffer will be
-wrapped by the returned CIO handle.
-On writing, buffer parameters must be set to 0: a buffer will be allocated by the library
-to contain encoded data.
-@param cinfo Codec context info
-@param buffer Reading: buffer address. Writing: NULL
-@param length Reading: buffer length. Writing: 0
-@return Returns a CIO handle if successful, returns NULL otherwise
-*/
-OPJ_API opj_cio_t* OPJ_CALLCONV opj_cio_open(opj_common_ptr cinfo,
-        unsigned char *buffer, int length);
-
-/**
-Close and free a CIO handle
-@param cio CIO handle to free
-*/
-OPJ_API void OPJ_CALLCONV opj_cio_close(opj_cio_t *cio);
-
-/**
-Get position in byte stream
-@param cio CIO handle
-@return Returns the position in bytes
-*/
-OPJ_API int OPJ_CALLCONV cio_tell(opj_cio_t *cio);
-/**
-Set position in byte stream
-@param cio CIO handle
-@param pos Position, in number of bytes, from the beginning of the stream
-*/
-OPJ_API void OPJ_CALLCONV cio_seek(opj_cio_t *cio, int pos);
-
-/*
-==========================================================
-   event manager functions definitions
-==========================================================
-*/
-
-OPJ_API opj_event_mgr_t* OPJ_CALLCONV opj_set_event_mgr(opj_common_ptr cinfo,
-        opj_event_mgr_t *event_mgr, void *context);
-
-/*
-==========================================================
-   codec functions definitions
-==========================================================
-*/
-/**
-Creates a J3D decompression structure
-@param format Decoder to select
-@return Returns a handle to a decompressor if successful, returns NULL otherwise
-*/
-OPJ_API opj_dinfo_t* OPJ_CALLCONV opj_create_decompress(
-    OPJ_CODEC_FORMAT format);
-/**
-Destroy a decompressor handle
-@param dinfo decompressor handle to destroy
-*/
-OPJ_API void OPJ_CALLCONV opj_destroy_decompress(opj_dinfo_t *dinfo);
-/**
-Set decoding parameters to default values
-@param parameters Decompression parameters
-*/
-OPJ_API void OPJ_CALLCONV opj_set_default_decoder_parameters(
-    opj_dparameters_t *parameters);
-/**
-Setup the decoder decoding parameters using user parameters.
-Decoding parameters are returned in j3d->cp.
-@param dinfo decompressor handle
-@param parameters decompression parameters
-*/
-OPJ_API void OPJ_CALLCONV opj_setup_decoder(opj_dinfo_t *dinfo,
-        opj_dparameters_t *parameters);
-/**
-Decode an volume from a JPEG-2000 codestream
-@param dinfo decompressor handle
-@param cio Input buffer stream
-@return Returns a decoded volume if successful, returns NULL otherwise
-*/
-OPJ_API opj_volume_t* OPJ_CALLCONV opj_decode(opj_dinfo_t *dinfo,
-        opj_cio_t *cio);
-/**
-Creates a J3D/JP2 compression structure
-@param format Coder to select
-@return Returns a handle to a compressor if successful, returns NULL otherwise
-*/
-OPJ_API opj_cinfo_t* OPJ_CALLCONV opj_create_compress(OPJ_CODEC_FORMAT format);
-/**
-Destroy a compressor handle
-@param cinfo compressor handle to destroy
-*/
-OPJ_API void OPJ_CALLCONV opj_destroy_compress(opj_cinfo_t *cinfo);
-/**
-Set encoding parameters to default values, that means :
-<ul>
-<li>Lossless
-<li>1 tile
-<li>Size of precinct : 2^15 x 2^15 (means 1 precinct)
-<li>Size of code-block : 64 x 64
-<li>Number of resolutions: 6
-<li>No SOP marker in the codestream
-<li>No EPH marker in the codestream
-<li>No sub-sampling in x or y direction
-<li>No mode switch activated
-<li>Progression order: LRCP
-<li>No index file
-<li>No ROI upshifted
-<li>No offset of the origin of the volume
-<li>No offset of the origin of the tiles
-<li>Reversible DWT 5-3
-</ul>
-@param parameters Compression parameters
-*/
-OPJ_API void OPJ_CALLCONV opj_set_default_encoder_parameters(
-    opj_cparameters_t *parameters);
-/**
-Setup the encoder parameters using the current volume and using user parameters.
-@param cinfo compressor handle
-@param parameters compression parameters
-@param volume input filled volume
-*/
-OPJ_API void OPJ_CALLCONV opj_setup_encoder(opj_cinfo_t *cinfo,
-        opj_cparameters_t *parameters, opj_volume_t *volume);
-/**
-Encode an volume into a JPEG-2000 codestream
-@param cinfo compressor handle
-@param cio Output buffer stream
-@param volume Volume to encode
-@param index Name of the index file if required, NULL otherwise
-@return Returns true if successful, returns false otherwise
-*/
-OPJ_API bool OPJ_CALLCONV opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio,
-                                     opj_volume_t *volume, char *index);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* OPENJPEG_H */
diff --git a/src/lib/openjp3d/opj_includes.h b/src/lib/openjp3d/opj_includes.h
deleted file mode 100644 (file)
index f917e2f..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef OPJ_INCLUDES_H
-#define OPJ_INCLUDES_H
-
-/*
- ==========================================================
-   Standard includes used by the library
- ==========================================================
-*/
-#include <memory.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <float.h>
-#include <time.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <ctype.h>
-#include <assert.h>
-/*
- ==========================================================
-   OpenJPEG interface
- ==========================================================
- */
-#include "openjp3d.h"
-
-/*
- ==========================================================
-   OpenJPEG modules
- ==========================================================
-*/
-
-#include "jp3d_lib.h"
-#include "event.h"
-#include "cio.h"
-
-#include "volume.h"
-#include "jp3d.h"
-
-#include "mqc.h"
-#include "raw.h"
-#include "bio.h"
-#include "tgt.h"
-#include "tcd.h"
-#include "t1.h"
-#include "t1_3d.h"
-#include "dwt.h"
-#include "pi.h"
-#include "t2.h"
-#include "mct.h"
-#include "int.h"
-#include "fix.h"
-
-#endif /* OPJ_INCLUDES_H */
diff --git a/src/lib/openjp3d/pi.c b/src/lib/openjp3d/pi.c
deleted file mode 100644 (file)
index a58ebcc..0000000
+++ /dev/null
@@ -1,709 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * Copyright (c) 2006, Mónica Díez, LPI-UVA, Spain
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "opj_includes.h"
-
-/** @defgroup PI PI - Implementation of a packet iterator */
-/*@{*/
-
-/** @name Funciones locales */
-/*@{*/
-
-/**
-Get next packet in layer-resolution-component-precinct order.
-@param pi packet iterator to modify
-@return returns false if pi pointed to the last packet or else returns true
-*/
-static bool pi_next_lrcp(opj_pi_iterator_t * pi);
-/**
-Get next packet in resolution-layer-component-precinct order.
-@param pi packet iterator to modify
-@return returns false if pi pointed to the last packet or else returns true
-*/
-static bool pi_next_rlcp(opj_pi_iterator_t * pi);
-/**
-Get next packet in resolution-precinct-component-layer order.
-@param pi packet iterator to modify
-@return returns false if pi pointed to the last packet or else returns true
-*/
-static bool pi_next_rpcl(opj_pi_iterator_t * pi);
-/**
-Get next packet in precinct-component-resolution-layer order.
-@param pi packet iterator to modify
-@return returns false if pi pointed to the last packet or else returns true
-*/
-static bool pi_next_pcrl(opj_pi_iterator_t * pi);
-/**
-Get next packet in component-precinct-resolution-layer order.
-@param pi packet iterator to modify
-@return returns false if pi pointed to the last packet or else returns true
-*/
-static bool pi_next_cprl(opj_pi_iterator_t * pi);
-
-/*@}*/
-
-/*@}*/
-
-/*
-==========================================================
-   local functions
-==========================================================
-*/
-
-static bool pi_next_lrcp(opj_pi_iterator_t * pi)
-{
-    opj_pi_comp_t *comp = NULL;
-    opj_pi_resolution_t *res = NULL;
-    long index = 0;
-
-    if (!pi->first) {
-        comp = &pi->comps[pi->compno];
-        res = &comp->resolutions[pi->resno];
-        goto LABEL_SKIP;
-    } else {
-        pi->first = 0;
-    }
-
-    for (pi->layno = 0; pi->layno < pi->poc.layno1; pi->layno++) {
-        for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; pi->resno++) {
-            for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
-                comp = &pi->comps[pi->compno];
-                if (pi->resno >= comp->numresolution[0]) {
-                    continue;
-                }
-                res = &comp->resolutions[pi->resno];
-                /*for (pi->precno = 0; pi->precno < (res->prctno[0] * res->prctno[1]); pi->precno++) {*/
-                for (pi->precno = 0;
-                        pi->precno < (res->prctno[0] * res->prctno[1] * res->prctno[2]); pi->precno++) {
-                    index = pi->layno * pi->step_l
-                            + pi->resno * pi->step_r
-                            + pi->compno * pi->step_c
-                            + pi->precno * pi->step_p;
-                    if (!pi->include[index]) {
-                        pi->include[index] = 1;
-                        return true;
-                    }
-LABEL_SKIP:
-                    ;
-
-                }
-            }
-        }
-    }
-
-    return false;
-}
-
-static bool pi_next_rlcp(opj_pi_iterator_t * pi)
-{
-    opj_pi_comp_t *comp = NULL;
-    opj_pi_resolution_t *res = NULL;
-    long index = 0;
-
-    if (!pi->first) {
-        comp = &pi->comps[pi->compno];
-        res = &comp->resolutions[pi->resno];
-        goto LABEL_SKIP;
-    } else {
-        pi->first = 0;
-    }
-
-    for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; pi->resno++) {
-        for (pi->layno = 0; pi->layno < pi->poc.layno1; pi->layno++) {
-            for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
-                comp = &pi->comps[pi->compno];
-                if (pi->resno >= comp->numresolution[0]) {
-                    continue;
-                }
-                res = &comp->resolutions[pi->resno];
-                /*for (pi->precno = 0; pi->precno < (res->prctno[0] * res->prctno[1]); pi->precno++) {*/
-                for (pi->precno = 0;
-                        pi->precno < (res->prctno[0] * res->prctno[1] * res->prctno[2]); pi->precno++) {
-                    index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno *
-                            pi->step_c + pi->precno * pi->step_p;
-                    if (!pi->include[index]) {
-                        pi->include[index] = 1;
-                        return true;
-                    }
-LABEL_SKIP:
-                    ;
-                }
-            }
-        }
-    }
-
-    return false;
-}
-
-static bool pi_next_rpcl(opj_pi_iterator_t * pi)
-{
-    opj_pi_comp_t *comp = NULL;
-    opj_pi_resolution_t *res = NULL;
-    long index = 0;
-
-    if (!pi->first) {
-        goto LABEL_SKIP;
-    } else {
-        int compno, resno;
-        pi->first = 0;
-        pi->dx = 0;
-        pi->dy = 0;
-        for (compno = 0; compno < pi->numcomps; compno++) {
-            comp = &pi->comps[compno];
-            for (resno = 0; resno < comp->numresolution[0]; resno++) {
-                int dx, dy, dz;
-                res = &comp->resolutions[resno];
-                dx = comp->dx * (1 << (res->pdx + comp->numresolution[0] - 1 - resno));
-                dy = comp->dy * (1 << (res->pdy + comp->numresolution[1] - 1 - resno));
-                dz = comp->dz * (1 << (res->pdz + comp->numresolution[2] - 1 - resno));
-                pi->dx = !pi->dx ? dx : int_min(pi->dx, dx);
-                pi->dy = !pi->dy ? dy : int_min(pi->dy, dy);
-                pi->dz = !pi->dz ? dz : int_min(pi->dz, dz);
-            }
-        }
-    }
-
-    for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; pi->resno++) {
-        for (pi->z = pi->tz0; pi->z < pi->tz1; pi->z += pi->dz - (pi->z % pi->dz)) {
-            for (pi->y = pi->ty0; pi->y < pi->ty1; pi->y += pi->dy - (pi->y % pi->dy)) {
-                for (pi->x = pi->tx0; pi->x < pi->tx1; pi->x += pi->dx - (pi->x % pi->dx)) {
-                    for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
-                        int levelnox, levelnoy, levelnoz;
-                        int trx0, try0, trz0;
-                        int trx1, try1, trz1;
-                        int rpx, rpy, rpz;
-                        int prci, prcj, prck;
-                        comp = &pi->comps[pi->compno];
-                        if (pi->resno >= comp->numresolution[0]) {
-                            continue;
-                        }
-                        res = &comp->resolutions[pi->resno];
-                        levelnox = comp->numresolution[0] - 1 - pi->resno;
-                        levelnoy = comp->numresolution[1] - 1 - pi->resno;
-                        levelnoz = comp->numresolution[2] - 1 - pi->resno;
-                        trx0 = int_ceildiv(pi->tx0, comp->dx << levelnox);
-                        try0 = int_ceildiv(pi->ty0, comp->dy << levelnoy);
-                        trz0 = int_ceildiv(pi->tz0, comp->dz << levelnoz);
-                        trx1 = int_ceildiv(pi->tx1, comp->dx << levelnox);
-                        try1 = int_ceildiv(pi->ty1, comp->dy << levelnoy);
-                        trz1 = int_ceildiv(pi->tz1, comp->dz << levelnoz);
-                        rpx = res->pdx + levelnox;
-                        rpy = res->pdy + levelnoy;
-                        rpz = res->pdz + levelnoz;
-
-                        /* To avoid divisions by zero / undefined behaviour on shift */
-                        if (rpx >= 31 || ((comp->dx << rpx) >> rpx) != comp->dx ||
-                                rpy >= 31 || ((comp->dy << rpy) >> rpy) != comp->dy ||
-                                rpz >= 31 || ((comp->dz << rpz) >> rpz) != comp->dz) {
-                            continue;
-                        }
-
-                        if ((!(pi->x % (comp->dx << rpx) == 0) || (pi->x == pi->tx0 &&
-                                (trx0 << levelnox) % (1 << rpx)))) {
-                            continue;
-                        }
-                        if ((!(pi->y % (comp->dy << rpy) == 0) || (pi->y == pi->ty0 &&
-                                (try0 << levelnoy) % (1 << rpx)))) {
-                            continue;
-                        }
-                        if ((!(pi->z % (comp->dz << rpz) == 0) || (pi->z == pi->tz0 &&
-                                (trz0 << levelnoz) % (1 << rpx)))) {
-                            continue;
-                        }
-                        if ((res->prctno[0] == 0) || (res->prctno[1] == 0) || (res->prctno[2] == 0)) {
-                            continue;
-                        }
-
-                        if ((trx0 == trx1) || (try0 == try1) || (trz0 == trz1)) {
-                            continue;
-                        }
-
-                        prci = int_floordivpow2(int_ceildiv(pi->x, comp->dx << levelnox), res->pdx)
-                               - int_floordivpow2(trx0, res->pdx);
-                        prcj = int_floordivpow2(int_ceildiv(pi->y, comp->dy << levelnoy), res->pdy)
-                               - int_floordivpow2(try0, res->pdy);
-                        prck = int_floordivpow2(int_ceildiv(pi->z, comp->dz << levelnoz), res->pdz)
-                               - int_floordivpow2(trz0, res->pdz);
-                        pi->precno = prci + prcj * res->prctno[0] + prck * res->prctno[0] *
-                                     res->prctno[1];
-                        for (pi->layno = 0; pi->layno < pi->poc.layno1; pi->layno++) {
-                            index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno *
-                                    pi->step_c + pi->precno * pi->step_p;
-                            if (!pi->include[index]) {
-                                pi->include[index] = 1;
-                                return true;
-                            }
-LABEL_SKIP:
-                            ;
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    return false;
-}
-
-static bool pi_next_pcrl(opj_pi_iterator_t * pi)
-{
-    opj_pi_comp_t *comp = NULL;
-    opj_pi_resolution_t *res = NULL;
-    long index = 0;
-
-    if (!pi->first) {
-        comp = &pi->comps[pi->compno];
-        goto LABEL_SKIP;
-    } else {
-        int compno, resno;
-        pi->first = 0;
-        pi->dx = 0;
-        pi->dy = 0;
-        pi->dz = 0;
-        for (compno = 0; compno < pi->numcomps; compno++) {
-            comp = &pi->comps[compno];
-            for (resno = 0; resno < comp->numresolution[0]; resno++) {
-                int dx, dy, dz;
-                res = &comp->resolutions[resno];
-                dx = comp->dx * (1 << (res->pdx + comp->numresolution[0] - 1 - resno));
-                dy = comp->dy * (1 << (res->pdy + comp->numresolution[1] - 1 - resno));
-                dz = comp->dz * (1 << (res->pdy + comp->numresolution[2] - 1 - resno));
-                pi->dx = !pi->dx ? dx : int_min(pi->dx, dx);
-                pi->dy = !pi->dy ? dy : int_min(pi->dy, dy);
-                pi->dz = !pi->dz ? dz : int_min(pi->dz, dz);
-            }
-        }
-    }
-
-    for (pi->z = pi->tz0; pi->z < pi->tz1; pi->z += pi->dz - (pi->z % pi->dz)) {
-        for (pi->y = pi->ty0; pi->y < pi->ty1; pi->y += pi->dy - (pi->y % pi->dy)) {
-            for (pi->x = pi->tx0; pi->x < pi->tx1; pi->x += pi->dx - (pi->x % pi->dx)) {
-                for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
-                    comp = &pi->comps[pi->compno];
-                    for (pi->resno = pi->poc.resno0;
-                            pi->resno < int_min(pi->poc.resno1, comp->numresolution[0]); pi->resno++) {
-                        int levelnox, levelnoy, levelnoz;
-                        int trx0, try0, trz0;
-                        int trx1, try1, trz1;
-                        int rpx, rpy, rpz;
-                        int prci, prcj, prck;
-                        comp = &pi->comps[pi->compno];
-                        if (pi->resno >= comp->numresolution[0]) {
-                            continue;
-                        }
-                        res = &comp->resolutions[pi->resno];
-                        levelnox = comp->numresolution[0] - 1 - pi->resno;
-                        levelnoy = comp->numresolution[1] - 1 - pi->resno;
-                        levelnoz = comp->numresolution[2] - 1 - pi->resno;
-                        trx0 = int_ceildiv(pi->tx0, comp->dx << levelnox);
-                        try0 = int_ceildiv(pi->ty0, comp->dy << levelnoy);
-                        trz0 = int_ceildiv(pi->tz0, comp->dz << levelnoz);
-                        trx1 = int_ceildiv(pi->tx1, comp->dx << levelnox);
-                        try1 = int_ceildiv(pi->ty1, comp->dy << levelnoy);
-                        trz1 = int_ceildiv(pi->tz1, comp->dz << levelnoz);
-                        rpx = res->pdx + levelnox;
-                        rpy = res->pdy + levelnoy;
-                        rpz = res->pdz + levelnoz;
-
-                        /* To avoid divisions by zero / undefined behaviour on shift */
-                        if (rpx >= 31 || ((comp->dx << rpx) >> rpx) != comp->dx ||
-                                rpy >= 31 || ((comp->dy << rpy) >> rpy) != comp->dy ||
-                                rpz >= 31 || ((comp->dz << rpz) >> rpz) != comp->dz) {
-                            continue;
-                        }
-
-                        if ((!(pi->x % (comp->dx << rpx) == 0) || (pi->x == pi->tx0 &&
-                                (trx0 << levelnox) % (1 << rpx)))) {
-                            continue;
-                        }
-                        if ((!(pi->y % (comp->dy << rpy) == 0) || (pi->y == pi->ty0 &&
-                                (try0 << levelnoy) % (1 << rpx)))) {
-                            continue;
-                        }
-                        if ((!(pi->z % (comp->dz << rpz) == 0) || (pi->z == pi->tz0 &&
-                                (trz0 << levelnoz) % (1 << rpx)))) {
-                            continue;
-                        }
-                        if ((res->prctno[0] == 0) || (res->prctno[1] == 0) || (res->prctno[2] == 0)) {
-                            continue;
-                        }
-
-                        if ((trx0 == trx1) || (try0 == try1) || (trz0 == trz1)) {
-                            continue;
-                        }
-
-                        prci = int_floordivpow2(int_ceildiv(pi->x, comp->dx << levelnox), res->pdx)
-                               - int_floordivpow2(trx0, res->pdx);
-                        prcj = int_floordivpow2(int_ceildiv(pi->y, comp->dy << levelnoy), res->pdy)
-                               - int_floordivpow2(try0, res->pdy);
-                        prck = int_floordivpow2(int_ceildiv(pi->z, comp->dz << levelnoz), res->pdz)
-                               - int_floordivpow2(trz0, res->pdz);
-                        pi->precno = prci + prcj * res->prctno[0] + prck * res->prctno[0] *
-                                     res->prctno[1];
-                        for (pi->layno = 0; pi->layno < pi->poc.layno1; pi->layno++) {
-                            index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno *
-                                    pi->step_c + pi->precno * pi->step_p;
-                            if (!pi->include[index]) {
-                                pi->include[index] = 1;
-                                return true;
-                            }
-LABEL_SKIP:
-                            ;
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    return false;
-}
-
-static bool pi_next_cprl(opj_pi_iterator_t * pi)
-{
-    opj_pi_comp_t *comp = NULL;
-    opj_pi_resolution_t *res = NULL;
-    long index = 0;
-
-    if (!pi->first) {
-        comp = &pi->comps[pi->compno];
-        goto LABEL_SKIP;
-    } else {
-        pi->first = 0;
-    }
-
-    for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
-        int resno;
-        comp = &pi->comps[pi->compno];
-        pi->dx = 0;
-        pi->dy = 0;
-        pi->dz = 0;
-        for (resno = 0; resno < comp->numresolution[0]; resno++) {
-            int dx, dy, dz;
-            res = &comp->resolutions[resno];
-            dx = comp->dx * (1 << (res->pdx + comp->numresolution[0] - 1 - resno));
-            dy = comp->dy * (1 << (res->pdy + comp->numresolution[1] - 1 - resno));
-            dz = comp->dz * (1 << (res->pdz + comp->numresolution[2] - 1 - resno));
-            pi->dx = !pi->dx ? dx : int_min(pi->dx, dx);
-            pi->dy = !pi->dy ? dy : int_min(pi->dy, dy);
-            pi->dz = !pi->dz ? dz : int_min(pi->dz, dz);
-        }
-        for (pi->z = pi->tz0; pi->z < pi->tz1; pi->z += pi->dz - (pi->z % pi->dz)) {
-            for (pi->y = pi->ty0; pi->y < pi->ty1; pi->y += pi->dy - (pi->y % pi->dy)) {
-                for (pi->x = pi->tx0; pi->x < pi->tx1; pi->x += pi->dx - (pi->x % pi->dx)) {
-                    for (pi->resno = pi->poc.resno0;
-                            pi->resno < int_min(pi->poc.resno1, comp->numresolution[0]); pi->resno++) {
-                        int levelnox, levelnoy, levelnoz;
-                        int trx0, try0, trz0;
-                        int trx1, try1, trz1;
-                        int rpx, rpy, rpz;
-                        int prci, prcj, prck;
-                        comp = &pi->comps[pi->compno];
-                        if (pi->resno >= comp->numresolution[0]) {
-                            continue;
-                        }
-                        res = &comp->resolutions[pi->resno];
-                        levelnox = comp->numresolution[0] - 1 - pi->resno;
-                        levelnoy = comp->numresolution[1] - 1 - pi->resno;
-                        levelnoz = comp->numresolution[2] - 1 - pi->resno;
-                        trx0 = int_ceildiv(pi->tx0, comp->dx << levelnox);
-                        try0 = int_ceildiv(pi->ty0, comp->dy << levelnoy);
-                        trz0 = int_ceildiv(pi->tz0, comp->dz << levelnoz);
-                        trx1 = int_ceildiv(pi->tx1, comp->dx << levelnox);
-                        try1 = int_ceildiv(pi->ty1, comp->dy << levelnoy);
-                        trz1 = int_ceildiv(pi->tz1, comp->dz << levelnoz);
-                        rpx = res->pdx + levelnox;
-                        rpy = res->pdy + levelnoy;
-                        rpz = res->pdz + levelnoz;
-
-                        /* To avoid divisions by zero / undefined behaviour on shift */
-                        if (rpx >= 31 || ((comp->dx << rpx) >> rpx) != comp->dx ||
-                                rpy >= 31 || ((comp->dy << rpy) >> rpy) != comp->dy ||
-                                rpz >= 31 || ((comp->dz << rpz) >> rpz) != comp->dz) {
-                            continue;
-                        }
-
-                        if ((!(pi->x % (comp->dx << rpx) == 0) || (pi->x == pi->tx0 &&
-                                (trx0 << levelnox) % (1 << rpx)))) {
-                            continue;
-                        }
-                        if ((!(pi->y % (comp->dy << rpy) == 0) || (pi->y == pi->ty0 &&
-                                (try0 << levelnoy) % (1 << rpx)))) {
-                            continue;
-                        }
-                        if ((!(pi->z % (comp->dz << rpz) == 0) || (pi->z == pi->tz0 &&
-                                (trz0 << levelnoz) % (1 << rpx)))) {
-                            continue;
-                        }
-                        if ((res->prctno[0] == 0) || (res->prctno[1] == 0) || (res->prctno[2] == 0)) {
-                            continue;
-                        }
-
-                        if ((trx0 == trx1) || (try0 == try1) || (trz0 == trz1)) {
-                            continue;
-                        }
-
-                        prci = int_floordivpow2(int_ceildiv(pi->x, comp->dx << levelnox), res->pdx)
-                               - int_floordivpow2(trx0, res->pdx);
-                        prcj = int_floordivpow2(int_ceildiv(pi->y, comp->dy << levelnoy), res->pdy)
-                               - int_floordivpow2(try0, res->pdy);
-                        prck = int_floordivpow2(int_ceildiv(pi->z, comp->dz << levelnoz), res->pdz)
-                               - int_floordivpow2(trz0, res->pdz);
-                        pi->precno = prci + prcj * res->prctno[0] + prck * res->prctno[0] *
-                                     res->prctno[1];
-                        for (pi->layno = 0; pi->layno < pi->poc.layno1; pi->layno++) {
-                            index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno *
-                                    pi->step_c + pi->precno * pi->step_p;
-                            if (!pi->include[index]) {
-                                pi->include[index] = 1;
-                                return true;
-                            }
-LABEL_SKIP:
-                            ;
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    return false;
-}
-
-/*
-==========================================================
-   Packet iterator interface
-==========================================================
-*/
-
-opj_pi_iterator_t *pi_create(opj_volume_t *volume, opj_cp_t *cp, int tileno)
-{
-    int p, q, r;
-    int compno, resno, pino;
-    opj_pi_iterator_t *pi = NULL;
-    opj_tcp_t *tcp = NULL;
-    opj_tccp_t *tccp = NULL;
-    size_t array_size;
-
-    tcp = &cp->tcps[tileno];
-
-    array_size = (tcp->numpocs + 1) * sizeof(opj_pi_iterator_t);
-    pi = (opj_pi_iterator_t *) opj_malloc(array_size);
-    if (!pi) {
-        fprintf(stdout, "[ERROR] Malloc of opj_pi_iterator failed \n");
-        return NULL;
-    }
-
-    for (pino = 0; pino < tcp->numpocs + 1; pino++) {   /* change */
-        int maxres = 0;
-        int maxprec = 0;
-        p = tileno % cp->tw;
-        q = tileno / cp->tw;
-        r = tileno / (cp->tw * cp->th);
-
-        pi[pino].tx0 = int_max(cp->tx0 + p * cp->tdx, volume->x0);
-        pi[pino].ty0 = int_max(cp->ty0 + q * cp->tdy, volume->y0);
-        pi[pino].tz0 = int_max(cp->tz0 + r * cp->tdz, volume->z0);
-        pi[pino].tx1 = int_min(cp->tx0 + (p + 1) * cp->tdx, volume->x1);
-        pi[pino].ty1 = int_min(cp->ty0 + (q + 1) * cp->tdy, volume->y1);
-        pi[pino].tz1 = int_min(cp->tz0 + (r + 1) * cp->tdz, volume->z1);
-        pi[pino].numcomps = volume->numcomps;
-
-        array_size = volume->numcomps * sizeof(opj_pi_comp_t);
-        pi[pino].comps = (opj_pi_comp_t *) opj_malloc(array_size);
-        if (!pi[pino].comps) {
-            fprintf(stdout, "[ERROR] Malloc of opj_pi_comp failed \n");
-            pi_destroy(pi, cp, tileno);
-            return NULL;
-        }
-        memset(pi[pino].comps, 0, array_size);
-
-        for (compno = 0; compno < pi->numcomps; compno++) {
-            int tcx0, tcx1, tcy0, tcy1, tcz0, tcz1;
-            int i;
-            opj_pi_comp_t *comp = &pi[pino].comps[compno];
-            tccp = &tcp->tccps[compno];
-
-            comp->dx = volume->comps[compno].dx;
-            comp->dy = volume->comps[compno].dy;
-            comp->dz = volume->comps[compno].dz;
-            for (i = 0; i < 3; i++) {
-                comp->numresolution[i] = tccp->numresolution[i];
-                if (comp->numresolution[i] > maxres) {
-                    maxres = comp->numresolution[i];
-                }
-            }
-            array_size = comp->numresolution[0] * sizeof(opj_pi_resolution_t);
-            comp->resolutions = (opj_pi_resolution_t *) opj_malloc(array_size);
-            if (!comp->resolutions) {
-                fprintf(stdout, "[ERROR] Malloc of opj_pi_resolution failed \n");
-                pi_destroy(pi, cp, tileno);
-                return NULL;
-            }
-
-            tcx0 = int_ceildiv(pi->tx0, comp->dx);
-            tcy0 = int_ceildiv(pi->ty0, comp->dy);
-            tcz0 = int_ceildiv(pi->tz0, comp->dz);
-            tcx1 = int_ceildiv(pi->tx1, comp->dx);
-            tcy1 = int_ceildiv(pi->ty1, comp->dy);
-            tcz1 = int_ceildiv(pi->tz1, comp->dz);
-
-            for (resno = 0; resno < comp->numresolution[0]; resno++) {
-                int levelnox, levelnoy, levelnoz, diff;
-                int rx0, ry0, rz0, rx1, ry1, rz1;
-                int px0, py0, pz0, px1, py1, pz1;
-                opj_pi_resolution_t *res = &comp->resolutions[resno];
-                if (tccp->csty & J3D_CCP_CSTY_PRT) {
-                    res->pdx = tccp->prctsiz[0][resno];
-                    res->pdy = tccp->prctsiz[1][resno];
-                    res->pdz = tccp->prctsiz[2][resno];
-                } else {
-                    res->pdx = 15;
-                    res->pdy = 15;
-                    res->pdz = 15;
-                }
-                levelnox = comp->numresolution[0] - 1 - resno;
-                levelnoy = comp->numresolution[1] - 1 - resno;
-                levelnoz = comp->numresolution[2] - 1 - resno;
-                if (levelnoz < 0) {
-                    levelnoz = 0;
-                }
-                diff = comp->numresolution[0] - comp->numresolution[2];
-
-                rx0 = int_ceildivpow2(tcx0, levelnox);
-                ry0 = int_ceildivpow2(tcy0, levelnoy);
-                rz0 = int_ceildivpow2(tcz0, levelnoz);
-                rx1 = int_ceildivpow2(tcx1, levelnox);
-                ry1 = int_ceildivpow2(tcy1, levelnoy);
-                rz1 = int_ceildivpow2(tcz1, levelnoz);
-                px0 = int_floordivpow2(rx0, res->pdx) << res->pdx;
-                py0 = int_floordivpow2(ry0, res->pdy) << res->pdy;
-                pz0 = int_floordivpow2(rz0, res->pdz) << res->pdz;
-                px1 = int_ceildivpow2(rx1, res->pdx) << res->pdx;
-                py1 = int_ceildivpow2(ry1, res->pdy) << res->pdy;
-                pz1 = int_ceildivpow2(rz1, res->pdz) << res->pdz;
-                res->prctno[0] = (rx0 == rx1) ? 0 : ((px1 - px0) >> res->pdx);
-                res->prctno[1] = (ry0 == ry1) ? 0 : ((py1 - py0) >> res->pdy);
-                res->prctno[2] = (rz0 == rz1) ? 0 : ((pz1 - pz0) >> res->pdz);
-
-                if (res->prctno[0]*res->prctno[1]*res->prctno[2] > maxprec) {
-                    maxprec = res->prctno[0] * res->prctno[1] * res->prctno[2];
-                }
-            }
-        }
-
-        tccp = &tcp->tccps[0];
-        pi[pino].step_p = 1;
-        pi[pino].step_c = maxprec * pi[pino].step_p;
-        pi[pino].step_r = volume->numcomps * pi[pino].step_c;
-        pi[pino].step_l = maxres * pi[pino].step_r;
-
-        if (pino == 0) {
-            array_size = volume->numcomps * maxres * tcp->numlayers * maxprec * sizeof(
-                             short int);
-            pi[pino].include = (short int *) opj_malloc(array_size);
-            if (!pi[pino].include) {
-                fprintf(stdout, "[ERROR] Malloc of pi[pino].include failed \n");
-                pi_destroy(pi, cp, tileno);
-                return NULL;
-            }
-        } else {
-            pi[pino].include = pi[pino - 1].include;
-        }
-
-        if (tcp->POC == 0) {
-            pi[pino].first = 1;
-            pi[pino].poc.resno0 = 0;
-            pi[pino].poc.compno0 = 0;
-            pi[pino].poc.layno1 = tcp->numlayers;
-            pi[pino].poc.resno1 = maxres;
-            pi[pino].poc.compno1 = volume->numcomps;
-            pi[pino].poc.prg = tcp->prg;
-        } else {
-            pi[pino].first = 1;
-            pi[pino].poc.resno0 = tcp->pocs[pino].resno0;
-            pi[pino].poc.compno0 = tcp->pocs[pino].compno0;
-            pi[pino].poc.layno1 = tcp->pocs[pino].layno1;
-            pi[pino].poc.resno1 = tcp->pocs[pino].resno1;
-            pi[pino].poc.compno1 = tcp->pocs[pino].compno1;
-            pi[pino].poc.prg = tcp->pocs[pino].prg;
-        }
-    }
-
-    return pi;
-}
-
-void pi_destroy(opj_pi_iterator_t *pi, opj_cp_t *cp, int tileno)
-{
-    int compno, pino;
-    opj_tcp_t *tcp = &cp->tcps[tileno];
-    if (pi) {
-        for (pino = 0; pino < tcp->numpocs + 1; pino++) {
-            if (pi[pino].comps) {
-                for (compno = 0; compno < pi->numcomps; compno++) {
-                    opj_pi_comp_t *comp = &pi[pino].comps[compno];
-                    if (comp->resolutions) {
-                        opj_free(comp->resolutions);
-                    }
-                }
-                opj_free(pi[pino].comps);
-            }
-        }
-        if (pi->include) {
-            opj_free(pi->include);
-        }
-        opj_free(pi);
-    }
-}
-
-bool pi_next(opj_pi_iterator_t * pi)
-{
-    switch (pi->poc.prg) {
-    case LRCP:
-        return pi_next_lrcp(pi);
-    case RLCP:
-        return pi_next_rlcp(pi);
-    case RPCL:
-        return pi_next_rpcl(pi);
-    case PCRL:
-        return pi_next_pcrl(pi);
-    case CPRL:
-        return pi_next_cprl(pi);
-    }
-
-    return false;
-}
-
diff --git a/src/lib/openjp3d/pi.h b/src/lib/openjp3d/pi.h
deleted file mode 100644 (file)
index 6e6118d..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * Copyright (c) 2006, Mónica Díez García, Image Processing Laboratory, University of Valladolid, Spain
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __PI_H
-#define __PI_H
-/**
-@file pi.h
-@brief Implementation of a packet iterator (PI)
-
-The functions in PI.C have for goal to realize a packet iterator that permits to get the next
-packet following the progression order and change of it. The functions in PI.C are used
-by some function in T2.C.
-*/
-
-/** @defgroup PI PI - Implementation of a packet iterator */
-/*@{*/
-
-/**
-Packet iterator : resolution level information
-*/
-typedef struct opj_pi_resolution {
-    /** Size of precints in horizontal axis */
-    int pdx;
-    /** Size of precints in vertical axis */
-    int pdy;
-    /** Size of precints in axial axis */
-    int pdz;
-    /** Number of precints in each axis */
-    int prctno[3];
-} opj_pi_resolution_t;
-
-/**
-Packet iterator : component information
-*/
-typedef struct opj_pi_comp {
-    /** Size in horizontal axis */
-    int dx;
-    /** Size in vertical axis */
-    int dy;
-    /** Size in axial axis */
-    int dz;
-    /** Number of resolution levels */
-    int numresolution[3];
-    /** Packet iterator : resolution level information */
-    opj_pi_resolution_t *resolutions;
-} opj_pi_comp_t;
-
-/**
-Packet iterator
-*/
-typedef struct opj_pi_iterator {
-    /** precise if the packet has been already used (useful for progression order change) */
-    short int *include;
-    /** layer step used to localize the packet in the include vector */
-    int step_l;
-    /** resolution step used to localize the packet in the include vector */
-    int step_r;
-    /** component step used to localize the packet in the include vector */
-    int step_c;
-    /** precinct step used to localize the packet in the include vector */
-    int step_p;
-    /** component that identify the packet */
-    int compno;
-    /** resolution that identify the packet */
-    int resno;
-    /** precinct that identify the packet */
-    int precno;
-    /** layer that identify the packet */
-    int layno;
-    /** 0 if the first packet */
-    int first;
-    /** progression order change information */
-    opj_poc_t poc;
-    /** Packet iterator : component information */
-    opj_pi_comp_t *comps;
-
-    int numcomps;
-    int tx0, ty0, tz0;
-    int tx1, ty1, tz1;
-    int x, y, z;
-    int dx, dy, dz;
-} opj_pi_iterator_t;
-
-/** @name Funciones generales */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-/**
-Create a packet iterator
-@param volume Raw volume for which the packets will be listed
-@param cp Coding parameters
-@param tileno Number that identifies the tile for which to list the packets
-@return Returns a packet iterator that points to the first packet of the tile
-@see pi_destroy
-*/
-opj_pi_iterator_t *pi_create(opj_volume_t * volume, opj_cp_t * cp, int tileno);
-
-/**
-Destroy a packet iterator
-@param pi Previously created packet iterator
-@param cp Coding parameters
-@param tileno Number that identifies the tile for which the packets were listed
-@see pi_create
-*/
-void pi_destroy(opj_pi_iterator_t *pi, opj_cp_t *cp, int tileno);
-
-/**
-Modify the packet iterator to point to the next packet
-@param pi Packet iterator to modify
-@return Returns false if pi pointed to the last packet or else returns true
-*/
-bool pi_next(opj_pi_iterator_t * pi);
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif /* __PI_H */
diff --git a/src/lib/openjp3d/raw.c b/src/lib/openjp3d/raw.c
deleted file mode 100644 (file)
index ab0c2d2..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "opj_includes.h"
-
-/*
-==========================================================
-   local functions
-==========================================================
-*/
-
-
-/*
-==========================================================
-   RAW encoding interface
-==========================================================
-*/
-
-opj_raw_t* raw_create()
-{
-    opj_raw_t *raw = (opj_raw_t*)opj_malloc(sizeof(opj_raw_t));
-    return raw;
-}
-
-void raw_destroy(opj_raw_t *raw)
-{
-    if (raw) {
-        opj_free(raw);
-    }
-}
-
-int raw_numbytes(opj_raw_t *raw)
-{
-    return raw->bp - raw->start;
-}
-
-void raw_init_dec(opj_raw_t *raw, unsigned char *bp, int len)
-{
-    raw->start = bp;
-    raw->lenmax = len;
-    raw->len = 0;
-    raw->c = 0;
-    raw->ct = 0;
-}
-
-int raw_decode(opj_raw_t *raw)
-{
-    int d;
-    if (raw->ct == 0) {
-        raw->ct = 8;
-        if (raw->len == raw->lenmax) {
-            raw->c = 0xff;
-        } else {
-            if (raw->c == 0xff) {
-                raw->ct = 7;
-            }
-            raw->c = *(raw->start + raw->len);
-            raw->len++;
-        }
-    }
-    raw->ct--;
-    d = (raw->c >> raw->ct) & 0x01;
-
-    return d;
-}
-
diff --git a/src/lib/openjp3d/raw.h b/src/lib/openjp3d/raw.h
deleted file mode 100644 (file)
index a9d7080..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __RAW_H
-#define __RAW_H
-/**
-@file raw.h
-@brief Implementation of operations for raw encoding (RAW)
-
-The functions in RAW.C have for goal to realize the operation of raw encoding linked
-with the corresponding mode switch.
-*/
-
-/** @defgroup RAW RAW - Implementation of operations for raw encoding */
-/*@{*/
-
-/**
-RAW encoding operations
-*/
-typedef struct opj_raw {
-    /** Temporary buffer where bits are coded or decoded */
-    unsigned char c;
-    /** Number of bits already read or free to write */
-    unsigned int ct;
-    /** Maximum length to decode */
-    unsigned int lenmax;
-    /** Length decoded */
-    unsigned int len;
-    /** Pointer to the current position in the buffer */
-    unsigned char *bp;
-    /** Pointer to the start of the buffer */
-    unsigned char *start;
-    /** Pointer to the end of the buffer */
-    unsigned char *end;
-} opj_raw_t;
-
-/** @name Funciones generales */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-/**
-Create a new RAW handle
-@return Returns a new RAW handle if successful, returns NULL otherwise
-*/
-opj_raw_t* raw_create(void);
-/**
-Destroy a previously created RAW handle
-@param raw RAW handle to destroy
-*/
-void raw_destroy(opj_raw_t *raw);
-/**
-Return the number of bytes written/read since initialisation
-@param raw RAW handle to destroy
-@return Returns the number of bytes already encoded
-*/
-int raw_numbytes(opj_raw_t *raw);
-/**
-Initialize the decoder
-@param raw RAW handle
-@param bp Pointer to the start of the buffer from which the bytes will be read
-@param len Length of the input buffer
-*/
-void raw_init_dec(opj_raw_t *raw, unsigned char *bp, int len);
-/**
-Decode a symbol using raw-decoder. Cfr p.506 TAUBMAN
-@param raw RAW handle
-@return Returns the decoded symbol (0 or 1)
-*/
-int raw_decode(opj_raw_t *raw);
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif /* __RAW_H */
diff --git a/src/lib/openjp3d/t1.c b/src/lib/openjp3d/t1.c
deleted file mode 100644 (file)
index a10ba5e..0000000
+++ /dev/null
@@ -1,1294 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "opj_includes.h"
-
-/** @defgroup T1 T1 - Implementation of the tier-1 coding */
-/*@{*/
-
-/** @name Local static functions */
-/*@{*/
-
-static int t1_getctxno_zc(opj_t1_t *t1, int f, int orient);
-static int t1_getctxno_sc(opj_t1_t *t1, int f);
-static int t1_getctxno_mag(opj_t1_t *t1, int f);
-static int t1_getspb(opj_t1_t *t1, int f);
-static int t1_getnmsedec_sig(opj_t1_t *t1, int x, int bitpos);
-static int t1_getnmsedec_ref(opj_t1_t *t1, int x, int bitpos);
-static void t1_updateflags(int *fp, int s);
-/**
-Encode significant pass
-*/
-static void t1_enc_sigpass_step(opj_t1_t *t1, int *fp, int *dp, int orient,
-                                int bpno, int one, int *nmsedec, char type, int vsc);
-/**
-Decode significant pass
-*/
-static void t1_dec_sigpass_step(opj_t1_t *t1, int *fp, int *dp, int orient,
-                                int oneplushalf, char type, int vsc);
-/**
-Encode significant pass
-*/
-static void t1_enc_sigpass(opj_t1_t *t1, int w, int h, int l, int bpno,
-                           int orient, int *nmsedec, char type, int cblksty);
-/**
-Decode significant pass
-*/
-static void t1_dec_sigpass(opj_t1_t *t1, int w, int h, int l, int bpno,
-                           int orient, char type, int cblksty);
-/**
-Encode refinement pass
-*/
-static void t1_enc_refpass_step(opj_t1_t *t1, int *fp, int *dp, int bpno,
-                                int one, int *nmsedec, char type, int vsc);
-/**
-Decode refinement pass
-*/
-static void t1_dec_refpass_step(opj_t1_t *t1, int *fp, int *dp, int poshalf,
-                                int neghalf, char type, int vsc);
-/**
-Encode refinement pass
-*/
-static void t1_enc_refpass(opj_t1_t *t1, int w, int h, int l, int bpno,
-                           int *nmsedec, char type, int cblksty);
-/**
-Decode refinement pass
-*/
-static void t1_dec_refpass(opj_t1_t *t1, int w, int h, int l, int bpno,
-                           char type, int cblksty);
-/**
-Encode clean-up pass
-*/
-static void t1_enc_clnpass_step(opj_t1_t *t1, int *fp, int *dp, int orient,
-                                int bpno, int one, int *nmsedec, int partial, int vsc);
-/**
-Decode clean-up pass
-*/
-static void t1_dec_clnpass_step(opj_t1_t *t1, int *fp, int *dp, int orient,
-                                int oneplushalf, int partial, int vsc);
-/**
-Encode clean-up pass
-*/
-static void t1_enc_clnpass(opj_t1_t *t1, int w, int h, int l, int bpno,
-                           int orient, int *nmsedec, int cblksty);
-/**
-Decode clean-up pass
-*/
-static void t1_dec_clnpass(opj_t1_t *t1, int w, int h, int l, int bpno,
-                           int orient, int cblksty);
-/**
-Encode 1 code-block
-@param t1 T1 handle
-@param cblk Code-block coding parameters
-@param orient
-@param compno Component number
-@param level
-@param dwtid
-@param stepsize
-@param cblksty Code-block style
-@param numcomps
-@param tile
-*/
-static void t1_encode_cblk(opj_t1_t *t1, opj_tcd_cblk_t * cblk, int orient,
-                           int compno, int level[3], int dwtid[3], double stepsize, int cblksty,
-                           int numcomps, opj_tcd_tile_t * tile);
-/**
-Decode 1 code-block
-@param t1 T1 handle
-@param cblk Code-block coding parameters
-@param orient
-@param roishift Region of interest shifting value
-@param cblksty Code-block style
-*/
-static void t1_decode_cblk(opj_t1_t *t1, opj_tcd_cblk_t * cblk, int orient,
-                           int roishift, int cblksty);
-
-static int t1_init_ctxno_zc(int f, int orient);
-static int t1_init_ctxno_sc(int f);
-static int t1_init_ctxno_mag(int f);
-static int t1_init_spb(int f);
-/**
-Initialize the look-up tables of the Tier-1 coder/decoder
-@param t1 T1 handle
-*/
-static void t1_init_luts(opj_t1_t *t1);
-
-/*@}*/
-
-/*@}*/
-
-/* ----------------------------------------------------------------------- */
-
-static int t1_getctxno_zc(opj_t1_t *t1, int f, int orient)
-{
-    return t1->lut_ctxno_zc[(orient << 8) | (f & T1_SIG_OTH)];
-}
-
-static int t1_getctxno_sc(opj_t1_t *t1, int f)
-{
-    return t1->lut_ctxno_sc[(f & (T1_SIG_PRIM | T1_SGN)) >> 4];
-}
-
-static int t1_getctxno_mag(opj_t1_t *t1, int f)
-{
-    return t1->lut_ctxno_mag[(f & T1_SIG_OTH) | (((f & T1_REFINE) != 0) << 11)];
-}
-
-static int t1_getspb(opj_t1_t *t1, int f)
-{
-    return t1->lut_spb[(f & (T1_SIG_PRIM | T1_SGN)) >> 4];
-}
-
-static int t1_getnmsedec_sig(opj_t1_t *t1, int x, int bitpos)
-{
-    if (bitpos > T1_NMSEDEC_FRACBITS) {
-        return t1->lut_nmsedec_sig[(x >> (bitpos - T1_NMSEDEC_FRACBITS)) & ((
-                                                                             1 << T1_NMSEDEC_BITS) - 1)];
-    }
-
-    return t1->lut_nmsedec_sig0[x & ((1 << T1_NMSEDEC_BITS) - 1)];
-}
-
-static int t1_getnmsedec_ref(opj_t1_t *t1, int x, int bitpos)
-{
-    if (bitpos > T1_NMSEDEC_FRACBITS) {
-        return t1->lut_nmsedec_ref[(x >> (bitpos - T1_NMSEDEC_FRACBITS)) & ((
-                                                                             1 << T1_NMSEDEC_BITS) - 1)];
-    }
-
-    return t1->lut_nmsedec_ref0[x & ((1 << T1_NMSEDEC_BITS) - 1)];
-}
-
-static void t1_updateflags(int *fp, int s)
-{
-    int *np = fp - (T1_MAXCBLKW + 2);
-    int *sp = fp + (T1_MAXCBLKW + 2);
-    np[-1] |= T1_SIG_SE;
-    np[1] |= T1_SIG_SW;
-    sp[-1] |= T1_SIG_NE;
-    sp[1] |= T1_SIG_NW;
-    *np |= T1_SIG_S;
-    *sp |= T1_SIG_N;
-    fp[-1] |= T1_SIG_E;
-    fp[1] |= T1_SIG_W;
-    if (s) {
-        *np |= T1_SGN_S;
-        *sp |= T1_SGN_N;
-        fp[-1] |= T1_SGN_E;
-        fp[1] |= T1_SGN_W;
-    }
-}
-
-static void t1_enc_sigpass_step(opj_t1_t *t1, int *fp, int *dp, int orient,
-                                int bpno, int one, int *nmsedec, char type, int vsc)
-{
-    int v, flag;
-
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    flag = vsc ? ((*fp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*fp);
-    if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) {
-        v = int_abs(*dp) & one ? 1 : 0;
-        if (type == T1_TYPE_RAW) {  /* BYPASS/LAZY MODE */
-            mqc_setcurctx(mqc, t1_getctxno_zc(t1, flag, orient));   /* ESSAI */
-            mqc_bypass_enc(mqc, v);
-        } else {
-            mqc_setcurctx(mqc, t1_getctxno_zc(t1, flag, orient));
-            mqc_encode(mqc, v);
-        }
-        if (v) {
-            v = *dp < 0 ? 1 : 0;
-            *nmsedec += t1_getnmsedec_sig(t1, int_abs(*dp), bpno + T1_NMSEDEC_FRACBITS);
-            if (type == T1_TYPE_RAW) {  /* BYPASS/LAZY MODE */
-                mqc_setcurctx(mqc, t1_getctxno_sc(t1, flag));   /* ESSAI */
-                mqc_bypass_enc(mqc, v);
-            } else {
-                mqc_setcurctx(mqc, t1_getctxno_sc(t1, flag));
-                mqc_encode(mqc, v ^ t1_getspb(t1, flag));
-            }
-            t1_updateflags(fp, v);
-            *fp |= T1_SIG;
-        }
-        *fp |= T1_VISIT;
-    }
-}
-
-static void t1_dec_sigpass_step(opj_t1_t *t1, int *fp, int *dp, int orient,
-                                int oneplushalf, char type, int vsc)
-{
-    int v, flag;
-
-    opj_raw_t *raw = t1->raw;   /* RAW component */
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    flag = vsc ? ((*fp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*fp);
-    if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) {
-        if (type == T1_TYPE_RAW) {
-            if (raw_decode(raw)) {
-                v = raw_decode(raw);    /* ESSAI */
-                *dp = v ? -oneplushalf : oneplushalf;
-                t1_updateflags(fp, v);
-                *fp |= T1_SIG;
-            }
-        } else {
-            mqc_setcurctx(mqc, t1_getctxno_zc(t1, flag, orient));
-            if (mqc_decode(mqc)) {
-                mqc_setcurctx(mqc, t1_getctxno_sc(t1, flag));
-                v = mqc_decode(mqc) ^ t1_getspb(t1, flag);
-                *dp = v ? -oneplushalf : oneplushalf;
-                t1_updateflags(fp, v);
-                *fp |= T1_SIG;
-            }
-        }
-        *fp |= T1_VISIT;
-    }
-}               /* VSC and  BYPASS by Antonin */
-
-static void t1_enc_sigpass(opj_t1_t *t1, int w, int h, int l, int bpno,
-                           int orient, int *nmsedec, char type, int cblksty)
-{
-    int i, j, k, m, one, vsc;
-    *nmsedec = 0;
-    one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
-    for (m = 0; m < l; m++) {
-        for (k = 0; k < h; k += 4) {
-            for (i = 0; i < w; i++) {
-                for (j = k; j < k + 4 && j < h; j++) {
-                    vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
-                    t1_enc_sigpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->data[m][j][i],
-                                        orient, bpno, one, nmsedec, type, vsc);
-                }
-            }
-        }
-    }
-}
-
-static void t1_dec_sigpass(opj_t1_t *t1, int w, int h, int l, int bpno,
-                           int orient, char type, int cblksty)
-{
-    int i, j, k, m, one, half, oneplushalf, vsc;
-    one = 1 << bpno;
-    half = one >> 1;
-    oneplushalf = one | half;
-    for (m = 0; m < l; m++) {
-        for (k = 0; k < h; k += 4) {
-            for (i = 0; i < w; i++) {
-                for (j = k; j < k + 4 && j < h; j++) {
-                    vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
-                    t1_dec_sigpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->data[m][j][i],
-                                        orient, oneplushalf, type, vsc);
-                }
-            }
-        }
-    }
-}               /* VSC and  BYPASS by Antonin */
-
-static void t1_enc_refpass_step(opj_t1_t *t1, int *fp, int *dp, int bpno,
-                                int one, int *nmsedec, char type, int vsc)
-{
-    int v, flag;
-
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    flag = vsc ? ((*fp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*fp);
-    if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) {
-        *nmsedec += t1_getnmsedec_ref(t1, int_abs(*dp), bpno + T1_NMSEDEC_FRACBITS);
-        v = int_abs(*dp) & one ? 1 : 0;
-        if (type == T1_TYPE_RAW) {  /* BYPASS/LAZY MODE */
-            mqc_setcurctx(mqc, t1_getctxno_mag(t1, flag));  /* ESSAI */
-            mqc_bypass_enc(mqc, v);
-        } else {
-            mqc_setcurctx(mqc, t1_getctxno_mag(t1, flag));
-            mqc_encode(mqc, v);
-        }
-        *fp |= T1_REFINE;
-    }
-}
-
-static void t1_dec_refpass_step(opj_t1_t *t1, int *fp, int *dp, int poshalf,
-                                int neghalf, char type, int vsc)
-{
-    int v, t, flag;
-
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-    opj_raw_t *raw = t1->raw;   /* RAW component */
-
-    flag = vsc ? ((*fp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*fp);
-    if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) {
-        if (type == T1_TYPE_RAW) {
-            mqc_setcurctx(mqc, t1_getctxno_mag(t1, flag));  /* ESSAI */
-            v = raw_decode(raw);
-        } else {
-            mqc_setcurctx(mqc, t1_getctxno_mag(t1, flag));
-            v = mqc_decode(mqc);
-        }
-        t = v ? poshalf : neghalf;
-        *dp += *dp < 0 ? -t : t;
-        *fp |= T1_REFINE;
-    }
-}               /* VSC and  BYPASS by Antonin  */
-
-static void t1_enc_refpass(opj_t1_t *t1, int w, int h, int l, int bpno,
-                           int *nmsedec, char type, int cblksty)
-{
-    int i, j, k, m, one, vsc;
-    *nmsedec = 0;
-    one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
-    for (m = 0; m < l; m++) {
-        for (k = 0; k < h; k += 4) {
-            for (i = 0; i < w; i++) {
-                for (j = k; j < k + 4 && j < h; j++) {
-                    vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
-                    t1_enc_refpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->data[m][j][i],
-                                        bpno, one, nmsedec, type, vsc);
-                }
-            }
-        }
-    }
-}
-
-static void t1_dec_refpass(opj_t1_t *t1, int w, int h, int l, int bpno,
-                           char type, int cblksty)
-{
-    int i, j, k, m, one, poshalf, neghalf;
-    int vsc;
-    one = 1 << bpno;
-    poshalf = one >> 1;
-    neghalf = bpno > 0 ? -poshalf : -1;
-    for (m = 0; m < l; m++) {
-        for (k = 0; k < h; k += 4) {
-            for (i = 0; i < w; i++) {
-                for (j = k; j < k + 4 && j < h; j++) {
-                    vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
-                    t1_dec_refpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->data[m][j][i],
-                                        poshalf, neghalf, type, vsc);
-                }
-            }
-        }
-    }
-}               /* VSC and  BYPASS by Antonin */
-
-static void t1_enc_clnpass_step(opj_t1_t *t1, int *fp, int *dp, int orient,
-                                int bpno, int one, int *nmsedec, int partial, int vsc)
-{
-    int v, flag;
-
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    flag = vsc ? ((*fp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*fp);
-    if (partial) {
-        goto LABEL_PARTIAL;
-    }
-    if (!(*fp & (T1_SIG | T1_VISIT))) {
-        mqc_setcurctx(mqc, t1_getctxno_zc(t1, flag, orient));
-        v = int_abs(*dp) & one ? 1 : 0;
-        mqc_encode(mqc, v);
-        if (v) {
-LABEL_PARTIAL:
-            *nmsedec += t1_getnmsedec_sig(t1, int_abs(*dp), bpno + T1_NMSEDEC_FRACBITS);
-            mqc_setcurctx(mqc, t1_getctxno_sc(t1, flag));
-            v = *dp < 0 ? 1 : 0;
-            mqc_encode(mqc, v ^ t1_getspb(t1, flag));
-            t1_updateflags(fp, v);
-            *fp |= T1_SIG;
-        }
-    }
-    *fp &= ~T1_VISIT;
-}
-
-static void t1_dec_clnpass_step(opj_t1_t *t1, int *fp, int *dp, int orient,
-                                int oneplushalf, int partial, int vsc)
-{
-    int v, flag;
-
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    flag = vsc ? ((*fp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*fp);
-    if (partial) {
-        goto LABEL_PARTIAL;
-    }
-    if (!(flag & (T1_SIG | T1_VISIT))) {
-        mqc_setcurctx(mqc, t1_getctxno_zc(t1, flag, orient));
-        if (mqc_decode(mqc)) {
-LABEL_PARTIAL:
-            mqc_setcurctx(mqc, t1_getctxno_sc(t1, flag));
-            v = mqc_decode(mqc) ^ t1_getspb(t1, flag);
-            *dp = v ? -oneplushalf : oneplushalf;
-            t1_updateflags(fp, v);
-            *fp |= T1_SIG;
-        }
-    }
-    *fp &= ~T1_VISIT;
-}               /* VSC and  BYPASS by Antonin */
-
-static void t1_enc_clnpass(opj_t1_t *t1, int w, int h, int l, int bpno,
-                           int orient, int *nmsedec, int cblksty)
-{
-    int i, j, k, m, one, agg, runlen, vsc;
-
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    *nmsedec = 0;
-    one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
-    for (m = 0; m < l; m++) {
-        for (k = 0; k < h; k += 4) {
-            for (i = 0; i < w; i++) {
-                if (k + 3 < h) {
-                    if (cblksty & J3D_CCP_CBLKSTY_VSC) {
-                        agg = !(t1->flags[1 + m][1 + k][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                || t1->flags[1 + m][1 + k + 1][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                || t1->flags[1 + m][1 + k + 2][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                || (t1->flags[1 + m][1 + k + 3][1 + i]
-                                    & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) & (T1_SIG | T1_VISIT |
-                                            T1_SIG_OTH));
-                    } else {
-                        agg = !(t1->flags[1 + m][1 + k][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                || t1->flags[1 + m][1 + k + 1][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                || t1->flags[1 + m][1 + k + 2][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                || t1->flags[1 + m][1 + k + 3][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH));
-                    }
-                } else {
-                    agg = 0;
-                }
-                if (agg) {
-                    for (runlen = 0; runlen < 4; runlen++) {
-                        if (int_abs(t1->data[m][k + runlen][i]) & one) {
-                            break;
-                        }
-                    }
-                    mqc_setcurctx(mqc, T1_CTXNO_AGG);
-                    mqc_encode(mqc, runlen != 4);
-                    if (runlen == 4) {
-                        continue;
-                    }
-                    mqc_setcurctx(mqc, T1_CTXNO_UNI);
-                    mqc_encode(mqc, runlen >> 1);
-                    mqc_encode(mqc, runlen & 1);
-                } else {
-                    runlen = 0;
-                }
-                for (j = k + runlen; j < k + 4 && j < h; j++) {
-                    vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
-                    t1_enc_clnpass_step(t1, &(t1->flags[1 + m][1 + j][1 + i]), &(t1->data[m][j][i]),
-                                        orient, bpno, one, nmsedec, agg && (j == k + runlen), vsc);
-                }
-            }
-        }
-    }
-}
-
-static void t1_dec_clnpass(opj_t1_t *t1, int w, int h, int l, int bpno,
-                           int orient, int cblksty)
-{
-    int i, j, k, m, one, half, oneplushalf, agg, runlen, vsc;
-    int segsym = cblksty & J3D_CCP_CBLKSTY_SEGSYM;
-
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    one = 1 << bpno;
-    half = one >> 1;
-    oneplushalf = one | half;
-    for (m = 0; m < l; m++) {
-        for (k = 0; k < h; k += 4) {
-            for (i = 0; i < w; i++) {
-                if (k + 3 < h) {
-                    if (cblksty & J3D_CCP_CBLKSTY_VSC) {
-                        agg = !(t1->flags[1 + m][1 + k][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                || t1->flags[1 + m][1 + k + 1][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                || t1->flags[1 + m][1 + k + 2][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                || (t1->flags[1 + m][1 + k + 3][1 + i]
-                                    & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) & (T1_SIG | T1_VISIT |
-                                            T1_SIG_OTH));
-                    } else {
-                        agg = !(t1->flags[1 + m][1 + k][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                || t1->flags[1 + m][1 + k + 1][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                || t1->flags[1 + m][1 + k + 2][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                || t1->flags[1 + m][1 + k + 3][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH));
-                    }
-                } else {
-                    agg = 0;
-                }
-                if (agg) {
-                    mqc_setcurctx(mqc, T1_CTXNO_AGG);
-                    if (!mqc_decode(mqc)) {
-                        continue;
-                    }
-                    mqc_setcurctx(mqc, T1_CTXNO_UNI);
-                    runlen = mqc_decode(mqc);
-                    runlen = (runlen << 1) | mqc_decode(mqc);
-                } else {
-                    runlen = 0;
-                }
-                for (j = k + runlen; j < k + 4 && j < h; j++) {
-                    vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
-                    t1_dec_clnpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->data[m][j][i],
-                                        orient, oneplushalf, agg && (j == k + runlen), vsc);
-                }
-            }
-        }
-    }
-    if (segsym) {
-        int v = 0;
-        mqc_setcurctx(mqc, T1_CTXNO_UNI);
-        v = mqc_decode(mqc);
-        v = (v << 1) | mqc_decode(mqc);
-        v = (v << 1) | mqc_decode(mqc);
-        v = (v << 1) | mqc_decode(mqc);
-        /*
-        if (v!=0xa) {
-            opj_event_msg(t1->cinfo, EVT_WARNING, "Bad segmentation symbol %x\n", v);
-        }
-        */
-    }
-}               /* VSC and  BYPASS by Antonin */
-
-
-static void t1_encode_cblk(opj_t1_t *t1, opj_tcd_cblk_t * cblk, int orient,
-                           int compno, int level[3], int dwtid[3], double stepsize, int cblksty,
-                           int numcomps, opj_tcd_tile_t * tile)
-{
-    int i, j, k;
-    int w, h, l;
-    int passno;
-    int bpno, passtype;
-    int max;
-    int nmsedec = 0;
-    double cumwmsedec = 0;
-    char type = T1_TYPE_MQ;
-
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    w = cblk->x1 - cblk->x0;
-    h = cblk->y1 - cblk->y0;
-    l = cblk->z1 - cblk->z0;
-
-    max = 0;
-    for (k = 0; k < l; k++) {
-        for (j = 0; j < h; j++) {
-            for (i = 0; i < w; i++) {
-                max = int_max(max, int_abs(t1->data[k][j][i]));
-            }
-        }
-    }
-    for (k = 0; k <= l; k++) {
-        for (j = 0; j <= h; j++) {
-            for (i = 0; i <= w; i++) {
-                t1->flags[k][j][i] = 0;
-            }
-        }
-    }
-
-    cblk->numbps = max ? (int_floorlog2(max) + 1) - T1_NMSEDEC_FRACBITS : 0;
-
-    bpno = cblk->numbps - 1;
-    passtype = 2;
-
-    mqc_reset_enc(mqc);
-    mqc_init_enc(mqc, cblk->data);
-
-    for (passno = 0; bpno >= 0; passno++) {
-        opj_tcd_pass_t *pass = &cblk->passes[passno];
-        int correction = 3;
-        double tmpwmsedec;
-        type = ((bpno < (cblk->numbps - 4)) && (passtype < 2) &&
-                (cblksty & J3D_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
-        /*fprintf(stdout,"passno %d passtype %d w %d h %d l %d bpno %d orient %d type %d cblksty %d\n",passno,passtype,w,h,l,bpno,orient,type,cblksty);*/
-
-        switch (passtype) {
-        case 0:
-            t1_enc_sigpass(t1, w, h, l, bpno, orient, &nmsedec, type, cblksty);
-            break;
-        case 1:
-            t1_enc_refpass(t1, w, h, l, bpno, &nmsedec, type, cblksty);
-            break;
-        case 2:
-            /*fprintf(stdout,"w %d h %d l %d bpno %d orient %d \n",w,h,l,bpno,orient);*/
-            t1_enc_clnpass(t1, w, h, l, bpno, orient, &nmsedec, cblksty);
-            /* code switch SEGMARK (i.e. SEGSYM) */
-            if (cblksty & J3D_CCP_CBLKSTY_SEGSYM) {
-                mqc_segmark_enc(mqc);
-            }
-            break;
-        }
-
-        /* fixed_quality */
-        tmpwmsedec = t1_getwmsedec(nmsedec, compno, level, orient, bpno, stepsize,
-                                   numcomps, dwtid);
-        cumwmsedec += tmpwmsedec;
-        tile->distotile += tmpwmsedec;
-
-        /* Code switch "RESTART" (i.e. TERMALL) */
-        if ((cblksty & J3D_CCP_CBLKSTY_TERMALL) && !((passtype == 2) &&
-                (bpno - 1 < 0))) {
-            if (type == T1_TYPE_RAW) {
-                mqc_flush(mqc);
-                correction = 1;
-                /* correction = mqc_bypass_flush_enc(); */
-            } else {            /* correction = mqc_restart_enc(); */
-                mqc_flush(mqc);
-                correction = 1;
-            }
-            pass->term = 1;
-        } else {
-            if (((bpno < (cblk->numbps - 4) && (passtype > 0))
-                    || ((bpno == (cblk->numbps - 4)) && (passtype == 2))) &&
-                    (cblksty & J3D_CCP_CBLKSTY_LAZY)) {
-                if (type == T1_TYPE_RAW) {
-                    mqc_flush(mqc);
-                    correction = 1;
-                    /* correction = mqc_bypass_flush_enc(); */
-                } else {        /* correction = mqc_restart_enc(); */
-                    mqc_flush(mqc);
-                    correction = 1;
-                }
-                pass->term = 1;
-            } else {
-                pass->term = 0;
-            }
-        }
-
-        if (++passtype == 3) {
-            passtype = 0;
-            bpno--;
-        }
-
-        if (pass->term && bpno > 0) {
-            type = ((bpno < (cblk->numbps - 4)) && (passtype < 2) &&
-                    (cblksty & J3D_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
-            if (type == T1_TYPE_RAW) {
-                mqc_bypass_init_enc(mqc);
-            } else {
-                mqc_restart_init_enc(mqc);
-            }
-        }
-
-        pass->distortiondec = cumwmsedec;
-        pass->rate = mqc_numbytes(mqc) + correction;    /* FIXME */
-        pass->len = pass->rate - (passno == 0 ? 0 : cblk->passes[passno - 1].rate);
-
-        /* Code-switch "RESET" */
-        if (cblksty & J3D_CCP_CBLKSTY_RESET) {
-            mqc_reset_enc(mqc);
-        }
-    }
-
-    /* Code switch "ERTERM" (i.e. PTERM) */
-    if (cblksty & J3D_CCP_CBLKSTY_PTERM) {
-        mqc_erterm_enc(mqc);
-    } else /* Default coding */ if (!(cblksty & J3D_CCP_CBLKSTY_LAZY)) {
-        mqc_flush(mqc);
-    }
-
-    cblk->totalpasses = passno;
-}
-
-static void t1_decode_cblk(opj_t1_t *t1, opj_tcd_cblk_t * cblk, int orient,
-                           int roishift, int cblksty)
-{
-    int i, j, k, w, h, l;
-    int bpno, passtype;
-    int segno, passno;
-    char type = T1_TYPE_MQ; /* BYPASS mode */
-
-    opj_raw_t *raw = t1->raw;   /* RAW component */
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    w = cblk->x1 - cblk->x0;
-    h = cblk->y1 - cblk->y0;
-    l = cblk->z1 - cblk->z0;
-
-    for (k = 0; k < l; k++) {
-        for (j = 0; j < h; j++) {
-            for (i = 0; i < w; i++) {
-                t1->data[k][j][i] = 0;
-            }
-        }
-    }
-
-    for (k = 0; k <= l; k++) {
-        for (j = 0; j <= h; j++) {
-            for (i = 0; i <= w; i++) {
-                t1->flags[k][j][i] = 0;
-            }
-        }
-    }
-
-    bpno = roishift + cblk->numbps - 1;
-    passtype = 2;
-
-    mqc_reset_enc(mqc);
-
-    for (segno = 0; segno < cblk->numsegs; segno++) {
-        opj_tcd_seg_t *seg = &cblk->segs[segno];
-
-        /* BYPASS mode */
-        type = ((bpno <= (cblk->numbps - 1) - 4) && (passtype < 2) &&
-                (cblksty & J3D_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
-        if (type == T1_TYPE_RAW) {
-            raw_init_dec(raw, seg->data, seg->len);
-        } else {
-            mqc_init_dec(mqc, seg->data, seg->len);
-        }
-
-        for (passno = 0; passno < seg->numpasses; passno++) {
-            switch (passtype) {
-            case 0:
-                t1_dec_sigpass(t1, w, h, l, bpno + 1, orient, type, cblksty);
-                break;
-            case 1:
-                t1_dec_refpass(t1, w, h, l, bpno + 1, type, cblksty);
-                break;
-            case 2:
-                t1_dec_clnpass(t1, w, h, l, bpno + 1, orient, cblksty);
-                break;
-            }
-
-            if ((cblksty & J3D_CCP_CBLKSTY_RESET) && type == T1_TYPE_MQ) {
-                mqc_reset_enc(mqc);
-            }
-            if (++passtype == 3) {
-                passtype = 0;
-                bpno--;
-            }
-        }
-    }
-}
-
-static int t1_init_ctxno_zc(int f, int orient)
-{
-    int h, v, d, n, t, hv;
-    n = 0;
-    h = ((f & T1_SIG_W) != 0) + ((f & T1_SIG_E) != 0);
-    v = ((f & T1_SIG_N) != 0) + ((f & T1_SIG_S) != 0);
-    d = ((f & T1_SIG_NW) != 0) + ((f & T1_SIG_NE) != 0) + ((
-                f & T1_SIG_SE) != 0) + ((f & T1_SIG_SW) != 0);
-
-    switch (orient) {
-    case 2:
-        t = h;
-        h = v;
-        v = t;
-    case 0:
-    case 1:
-        if (!h) {
-            if (!v) {
-                if (!d) {
-                    n = 0;
-                } else if (d == 1) {
-                    n = 1;
-                } else {
-                    n = 2;
-                }
-            } else if (v == 1) {
-                n = 3;
-            } else {
-                n = 4;
-            }
-        } else if (h == 1) {
-            if (!v) {
-                if (!d) {
-                    n = 5;
-                } else {
-                    n = 6;
-                }
-            } else {
-                n = 7;
-            }
-        } else {
-            n = 8;
-        }
-        break;
-    case 3:
-        hv = h + v;
-        if (!d) {
-            if (!hv) {
-                n = 0;
-            } else if (hv == 1) {
-                n = 1;
-            } else {
-                n = 2;
-            }
-        } else if (d == 1) {
-            if (!hv) {
-                n = 3;
-            } else if (hv == 1) {
-                n = 4;
-            } else {
-                n = 5;
-            }
-        } else if (d == 2) {
-            if (!hv) {
-                n = 6;
-            } else {
-                n = 7;
-            }
-        } else {
-            n = 8;
-        }
-        break;
-    }
-
-    return (T1_CTXNO_ZC + n);
-}
-
-static int t1_init_ctxno_sc(int f)
-{
-    int hc, vc, n;
-    n = 0;
-
-    hc = int_min(((f & (T1_SIG_E | T1_SGN_E)) ==
-                  T1_SIG_E) + ((f & (T1_SIG_W | T1_SGN_W)) == T1_SIG_W),
-                 1) - int_min(((f & (T1_SIG_E | T1_SGN_E)) ==
-                               (T1_SIG_E | T1_SGN_E)) +
-                              ((f & (T1_SIG_W | T1_SGN_W)) ==
-                               (T1_SIG_W | T1_SGN_W)), 1);
-
-    vc = int_min(((f & (T1_SIG_N | T1_SGN_N)) ==
-                  T1_SIG_N) + ((f & (T1_SIG_S | T1_SGN_S)) == T1_SIG_S),
-                 1) - int_min(((f & (T1_SIG_N | T1_SGN_N)) ==
-                               (T1_SIG_N | T1_SGN_N)) +
-                              ((f & (T1_SIG_S | T1_SGN_S)) ==
-                               (T1_SIG_S | T1_SGN_S)), 1);
-
-    if (hc < 0) {
-        hc = -hc;
-        vc = -vc;
-    }
-    if (!hc) {
-        if (vc == -1) {
-            n = 1;
-        } else if (!vc) {
-            n = 0;
-        } else {
-            n = 1;
-        }
-    } else if (hc == 1) {
-        if (vc == -1) {
-            n = 2;
-        } else if (!vc) {
-            n = 3;
-        } else {
-            n = 4;
-        }
-    }
-
-    return (T1_CTXNO_SC + n);
-}
-
-static int t1_init_ctxno_mag(int f)
-{
-    int n;
-    if (!(f & T1_REFINE)) {
-        n = (f & (T1_SIG_OTH)) ? 1 : 0;
-    } else {
-        n = 2;
-    }
-
-    return (T1_CTXNO_MAG + n);
-}
-
-static int t1_init_spb(int f)
-{
-    int hc, vc, n;
-
-    hc = int_min(((f & (T1_SIG_E | T1_SGN_E)) ==
-                  T1_SIG_E) + ((f & (T1_SIG_W | T1_SGN_W)) == T1_SIG_W),
-                 1) - int_min(((f & (T1_SIG_E | T1_SGN_E)) ==
-                               (T1_SIG_E | T1_SGN_E)) +
-                              ((f & (T1_SIG_W | T1_SGN_W)) ==
-                               (T1_SIG_W | T1_SGN_W)), 1);
-
-    vc = int_min(((f & (T1_SIG_N | T1_SGN_N)) ==
-                  T1_SIG_N) + ((f & (T1_SIG_S | T1_SGN_S)) == T1_SIG_S),
-                 1) - int_min(((f & (T1_SIG_N | T1_SGN_N)) ==
-                               (T1_SIG_N | T1_SGN_N)) +
-                              ((f & (T1_SIG_S | T1_SGN_S)) ==
-                               (T1_SIG_S | T1_SGN_S)), 1);
-
-    if (!hc && !vc) {
-        n = 0;
-    } else {
-        n = (!(hc > 0 || (!hc && vc > 0)));
-    }
-
-    return n;
-}
-
-static void t1_init_luts(opj_t1_t *t1)
-{
-    int i, j;
-    double u, v, t;
-    for (j = 0; j < 4; j++) {
-        for (i = 0; i < 256; ++i) {
-            t1->lut_ctxno_zc[(j << 8) | i] = t1_init_ctxno_zc(i, j);
-        }
-    }
-    for (i = 0; i < 256; i++) {
-        t1->lut_ctxno_sc[i] = t1_init_ctxno_sc(i << 4);
-    }
-    for (j = 0; j < 2; j++) {
-        for (i = 0; i < 2048; ++i) {
-            t1->lut_ctxno_mag[(j << 11) + i] = t1_init_ctxno_mag((j ? T1_REFINE : 0) | i);
-        }
-    }
-    for (i = 0; i < 256; ++i) {
-        t1->lut_spb[i] = t1_init_spb(i << 4);
-    }
-    /* FIXME FIXME FIXME */
-    /* fprintf(stdout,"nmsedec luts:\n"); */
-    for (i = 0; i < (1 << T1_NMSEDEC_BITS); i++) {
-        t = i / pow(2, T1_NMSEDEC_FRACBITS);
-        u = t;
-        v = t - 1.5;
-        t1->lut_nmsedec_sig[i] =
-            int_max(0,
-                    (int)(floor((u * u - v * v) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2,
-                            T1_NMSEDEC_FRACBITS) * 8192.0));
-        t1->lut_nmsedec_sig0[i] =
-            int_max(0,
-                    (int)(floor((u * u) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2,
-                            T1_NMSEDEC_FRACBITS) * 8192.0));
-        u = t - 1.0;
-        if (i & (1 << (T1_NMSEDEC_BITS - 1))) {
-            v = t - 1.5;
-        } else {
-            v = t - 0.5;
-        }
-        t1->lut_nmsedec_ref[i] =
-            int_max(0,
-                    (int)(floor((u * u - v * v) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2,
-                            T1_NMSEDEC_FRACBITS) * 8192.0));
-        t1->lut_nmsedec_ref0[i] =
-            int_max(0,
-                    (int)(floor((u * u) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2,
-                            T1_NMSEDEC_FRACBITS) * 8192.0));
-    }
-}
-
-/* ----------------------------------------------------------------------- */
-
-opj_t1_t* t1_create(opj_common_ptr cinfo)
-{
-    opj_t1_t *t1 = (opj_t1_t*)opj_malloc(sizeof(opj_t1_t));
-    if (t1) {
-        t1->cinfo = cinfo;
-        /* create MQC and RAW handles */
-        t1->mqc = mqc_create();
-        t1->raw = raw_create();
-        /* initialize the look-up tables of the Tier-1 coder/decoder */
-        t1_init_luts(t1);
-    }
-    return t1;
-}
-
-void t1_destroy(opj_t1_t *t1)
-{
-    if (t1) {
-        /* destroy MQC and RAW handles */
-        mqc_destroy(t1->mqc);
-        raw_destroy(t1->raw);
-        /*opj_free(t1->data);*/
-        /*opj_free(t1->flags);*/
-        opj_free(t1);
-    }
-}
-
-void t1_encode_cblks(opj_t1_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp)
-{
-    int compno, resno, bandno, precno, cblkno;
-    int x, y, z, i, j, k, orient;
-    int n = 0;
-    int level[3];
-    FILE *fid = NULL;
-    /*  char filename[10];*/
-    tile->distotile = 0;        /* fixed_quality */
-
-    for (compno = 0; compno < tile->numcomps; compno++) {
-        opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-
-        for (resno = 0; resno < tilec->numresolution[0]; resno++) {
-            opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-
-            /* Weighted first order entropy
-            sprintf(filename,"res%d.txt",resno);
-            if ((fid = fopen(filename,"w")) == 0){
-                fprintf(stdout,"Error while opening %s\n", filename);
-                exit(1);
-            }
-            */
-            for (bandno = 0; bandno < res->numbands; bandno++) {
-                opj_tcd_band_t *band = &res->bands[bandno];
-                for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2];
-                        precno++) {
-                    opj_tcd_precinct_t *prc = &band->precincts[precno];
-
-                    for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2];
-                            cblkno++) {
-                        opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
-
-                        /*fprintf(stdout,"Precno %d Cblkno %d \n",precno,cblkno);*/
-                        if (band->bandno == 0) {
-                            x = cblk->x0 - band->x0;
-                            y = cblk->y0 - band->y0;
-                            z = cblk->z0 - band->z0;
-                        } else if (band->bandno == 1) {
-                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                            y = cblk->y0 - band->y0;
-                            z = cblk->z0 - band->z0;
-                        } else if (band->bandno == 2) {
-                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                            x = cblk->x0 - band->x0;
-                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                            z = cblk->z0 - band->z0;
-                        } else if (band->bandno == 3) {
-                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                            z = cblk->z0 - band->z0;
-                        } else if (band->bandno == 4) {
-                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                            x = cblk->x0 - band->x0;
-                            y = cblk->y0 - band->y0;
-                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                        } else if (band->bandno == 5) {
-                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                            y = cblk->y0 - band->y0;
-                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                        } else if (band->bandno == 6) {
-                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                            x = cblk->x0 - band->x0;
-                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                        } else if (band->bandno == 7) {
-                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                        }
-
-                        if (tcp->tccps[compno].reversible == 1) {
-                            for (k = 0; k < cblk->z1 - cblk->z0; k++) {
-                                for (j = 0; j < cblk->y1 - cblk->y0; j++) {
-                                    for (i = 0; i < cblk->x1 - cblk->x0; i++) {
-                                        t1->data[k][j][i] =
-                                            tilec->data[(x + i) + (y + j) * (tilec->x1 - tilec->x0) + (z + k) *
-                                                                (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] << T1_NMSEDEC_FRACBITS;
-                                        /*fprintf(fid," %d",t1->data[k][j][i]);*/
-                                    }
-                                }
-                            }
-                        } else if (tcp->tccps[compno].reversible == 0) {
-                            for (k = 0; k < cblk->z1 - cblk->z0; k++) {
-                                for (j = 0; j < cblk->y1 - cblk->y0; j++) {
-                                    for (i = 0; i < cblk->x1 - cblk->x0; i++) {
-                                        t1->data[k][j][i] = fix_mul(
-                                                                tilec->data[(x + i) + (y + j) * (tilec->x1 - tilec->x0) + (z + k) *
-                                                                                    (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)],
-                                                                8192 * 8192 / ((int) floor(band->stepsize * 8192))) >> (13 -
-                                                                        T1_NMSEDEC_FRACBITS);
-                                    }
-                                }
-                            }
-                        }
-
-                        orient = band->bandno;  /* FIXME */
-                        if (orient == 2) {
-                            orient = 1;
-                        } else if (orient == 1) {
-                            orient = 2;
-                        }
-                        for (i = 0; i < 3; i++) {
-                            level[i] = tilec->numresolution[i] - 1 - resno;
-                        }
-                        /*fprintf(stdout,"t1_encode_cblk(t1, cblk, %d, %d, %d %d %d, %d, %f, %d, %d, tile);\n", orient, compno, level[0], level[1], level[2], tcp->tccps[compno].reversible, band->stepsize, tcp->tccps[compno].cblksty, tile->numcomps);*/
-                        t1_encode_cblk(t1, cblk, orient, compno, level, tcp->tccps[compno].dwtid,
-                                       band->stepsize, tcp->tccps[compno].cblksty, tile->numcomps, tile);
-
-                    } /* cblkno */
-                } /* precno */
-                /*fprintf(fid,"\n");*/
-            } /* bandno */
-            /*fclose(fid);*/
-        } /* resno  */
-    } /* compno  */
-}
-
-void t1_decode_cblks(opj_t1_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp)
-{
-    int compno, resno, bandno, precno, cblkno;
-
-    for (compno = 0; compno < tile->numcomps; compno++) {
-        opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-
-        for (resno = 0; resno < tilec->numresolution[0]; resno++) {
-            opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-
-            for (bandno = 0; bandno < res->numbands; bandno++) {
-                opj_tcd_band_t *band = &res->bands[bandno];
-
-                for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2];
-                        precno++) {
-                    opj_tcd_precinct_t *prc = &band->precincts[precno];
-
-                    for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2];
-                            cblkno++) {
-                        int x, y, k, i, j, z, orient;
-                        opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
-
-                        orient = band->bandno;  /* FIXME */
-                        if (orient == 2) {
-                            orient = 1;
-                        } else if (orient == 1) {
-                            orient = 2;
-                        }
-
-                        t1_decode_cblk(t1, cblk, orient, tcp->tccps[compno].roishift,
-                                       tcp->tccps[compno].cblksty);
-
-                        if (band->bandno == 0) {
-                            x = cblk->x0 - band->x0;
-                            y = cblk->y0 - band->y0;
-                            z = cblk->z0 - band->z0;
-                        } else if (band->bandno == 1) {
-                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                            y = cblk->y0 - band->y0;
-                            z = cblk->z0 - band->z0;
-                        } else if (band->bandno == 2) {
-                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                            x = cblk->x0 - band->x0;
-                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                            z = cblk->z0 - band->z0;
-                        } else if (band->bandno == 3) {
-                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                            z = cblk->z0 - band->z0;
-                        } else if (band->bandno == 4) {
-                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                            x = cblk->x0 - band->x0;
-                            y = cblk->y0 - band->y0;
-                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                        } else if (band->bandno == 5) {
-                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                            y = cblk->y0 - band->y0;
-                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                        } else if (band->bandno == 6) {
-                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                            x = cblk->x0 - band->x0;
-                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                        } else if (band->bandno == 7) {
-                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                        }
-
-                        if (tcp->tccps[compno].roishift) {
-                            int thresh, val, mag;
-                            thresh = 1 << tcp->tccps[compno].roishift;
-                            for (k = 0; k < cblk->z1 - cblk->z0; k++) {
-                                for (j = 0; j < cblk->y1 - cblk->y0; j++) {
-                                    for (i = 0; i < cblk->x1 - cblk->x0; i++) {
-                                        val = t1->data[k][j][i];
-                                        mag = int_abs(val);
-                                        if (mag >= thresh) {
-                                            mag >>= tcp->tccps[compno].roishift;
-                                            t1->data[k][j][i] = val < 0 ? -mag : mag;
-                                        }
-                                    }
-                                }
-                            }
-                        }
-
-                        if (tcp->tccps[compno].reversible == 1) {
-                            for (k = 0; k < cblk->z1 - cblk->z0; k++) {
-                                for (j = 0; j < cblk->y1 - cblk->y0; j++) {
-                                    for (i = 0; i < cblk->x1 - cblk->x0; i++) {
-                                        int tmp = t1->data[k][j][i];
-                                        tilec->data[x + i + (y + j) * (tilec->x1 - tilec->x0) + (z + k) *
-                                                      (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] = tmp / 2;
-                                    }
-                                }
-                            }
-                        } else {        /* if (tcp->tccps[compno].reversible == 0) */
-                            for (k = 0; k < cblk->z1 - cblk->z0; k++) {
-                                for (j = 0; j < cblk->y1 - cblk->y0; j++) {
-                                    for (i = 0; i < cblk->x1 - cblk->x0; i++) {
-                                        double tmp = (double)(t1->data[k][j][i] * band->stepsize * 4096.0);
-                                        if (t1->data[k][j][i] >> 1 == 0) {
-                                            tilec->data[x + i + (y + j) * (tilec->x1 - tilec->x0) + (z + k) *
-                                                          (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] = 0;
-                                        } else {
-                                            int tmp2 = ((int)(floor(fabs(tmp)))) + ((int) floor(fabs(tmp * 2)) % 2);
-                                            tilec->data[x + i + (y + j) * (tilec->x1 - tilec->x0) + (z + k) *
-                                                          (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] = ((tmp < 0) ? -tmp2 : tmp2);
-                                        }
-                                    }
-                                }
-                            }
-                        }
-                    } /* cblkno */
-                } /* precno */
-            } /* bandno */
-        } /* resno */
-    } /* compno */
-}
-
-
-/** mod fixed_quality */
-double t1_getwmsedec(int nmsedec, int compno, int level[3], int orient,
-                     int bpno, double stepsize, int numcomps, int dwtid[3])
-{
-    double w1, w2, wmsedec;
-
-    if (dwtid[0] == 1 || dwtid[1] == 1 || dwtid[2] == 1) {
-        w1 = (numcomps > 1) ? mct_getnorm_real(compno) : 1;
-    } else {
-        w1 = (numcomps > 1) ? mct_getnorm(compno) : 1;
-    }
-    w2 = dwt_getnorm(orient, level, dwtid);
-
-    /*fprintf(stdout,"nmsedec %d level %d %d %d orient %d bpno %d stepsize %f \n",nmsedec ,level[0],level[1],level[2],orient,bpno,stepsize);*/
-    wmsedec = w1 * w2 * stepsize * (1 << bpno);
-    wmsedec *= wmsedec * nmsedec / 8192.0;
-
-    return wmsedec;
-}
-/** mod fixed_quality */
diff --git a/src/lib/openjp3d/t1.h b/src/lib/openjp3d/t1.h
deleted file mode 100644 (file)
index a027382..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef __T1_H
-#define __T1_H
-/**
-@file t1.h
-@brief Implementation of the tier-1 coding (coding of code-block coefficients) (T1)
-
-The functions in T1.C have for goal to realize the tier-1 coding operation. The functions
-in T1.C are used by some function in TCD.C.
-*/
-
-/** @defgroup T1 T1 - Implementation of the tier-1 coding */
-/*@{*/
-
-/* ----------------------------------------------------------------------- */
-#define T1_NMSEDEC_BITS 7
-
-#define T1_MAXCBLKW 256 /*< Maximum size of code-block (width) */
-#define T1_MAXCBLKH 256 /*< Maximum size of code-block (height) */
-#define T1_MAXCBLKD 256 /*< Maximum size of code-block (depth) */
-#define T1_MINCBLKW 4       /*< Minimum size of code-block (width) */
-#define T1_MINCBLKH 4       /*< Minimum size of code-block (height) */
-#define T1_MINCBLKD 4       /*< Minimum size of code-block (depth) */
-#define T1_MAXWHD 18
-#define T1_CBLKW 256
-#define T1_CBLKH 256
-#define T1_CBLKD 256
-
-#define T1_SIG_NE 0x0001    /*< Context orientation : North-East direction */
-#define T1_SIG_SE 0x0002    /*< Context orientation : South-East direction */
-#define T1_SIG_SW 0x0004    /*< Context orientation : South-West direction */
-#define T1_SIG_NW 0x0008    /*< Context orientation : North-West direction */
-#define T1_SIG_N 0x0010     /*< Context orientation : North direction */
-#define T1_SIG_E 0x0020     /*< Context orientation : East direction */
-#define T1_SIG_S 0x0040     /*< Context orientation : South direction */
-#define T1_SIG_W 0x0080     /*< Context orientation : West direction */
-#define T1_SIG_OTH (T1_SIG_N|T1_SIG_NE|T1_SIG_E|T1_SIG_SE|T1_SIG_S|T1_SIG_SW|T1_SIG_W|T1_SIG_NW)
-#define T1_SIG_PRIM (T1_SIG_N|T1_SIG_E|T1_SIG_S|T1_SIG_W)
-
-#define T1_SGN_N 0x0100
-#define T1_SGN_E 0x0200
-#define T1_SGN_S 0x0400
-#define T1_SGN_W 0x0800
-#define T1_SGN (T1_SGN_N|T1_SGN_E|T1_SGN_S|T1_SGN_W)
-
-#define T1_SIG 0x1000
-#define T1_REFINE 0x2000
-#define T1_VISIT 0x4000
-
-#define T1_NUMCTXS_AGG 1
-#define T1_NUMCTXS_ZC 9
-#define T1_NUMCTXS_MAG 3
-#define T1_NUMCTXS_SC 5
-#define T1_NUMCTXS_UNI 1
-
-#define T1_CTXNO_AGG 0
-#define T1_CTXNO_ZC (T1_CTXNO_AGG+T1_NUMCTXS_AGG)
-#define T1_CTXNO_MAG (T1_CTXNO_ZC+T1_NUMCTXS_ZC)
-#define T1_CTXNO_SC (T1_CTXNO_MAG+T1_NUMCTXS_MAG)
-#define T1_CTXNO_UNI (T1_CTXNO_SC+T1_NUMCTXS_SC)
-#define T1_NUMCTXS (T1_CTXNO_UNI+T1_NUMCTXS_UNI)
-
-#define T1_NMSEDEC_FRACBITS (T1_NMSEDEC_BITS-1)
-
-#define T1_TYPE_MQ 0    /*< Normal coding using entropy coder */
-#define T1_TYPE_RAW 1   /*< No encoding the information is store under raw format in codestream (mode switch RAW)*/
-
-/* ----------------------------------------------------------------------- */
-
-/**
-Tier-1 coding (coding of code-block coefficients)
-*/
-typedef struct opj_t1 {
-    /** codec context */
-    opj_common_ptr cinfo;
-
-    /** MQC component */
-    opj_mqc_t *mqc;
-    /** RAW component */
-    opj_raw_t *raw;
-    /** LUTs for context-based coding */
-    int lut_ctxno_zc[1024];
-    int lut_ctxno_sc[256];
-    int lut_ctxno_mag[4096];
-    int lut_spb[256];
-    /** LUTs for decoding normalised MSE */
-    int lut_nmsedec_sig[1 << T1_NMSEDEC_BITS];
-    int lut_nmsedec_sig0[1 << T1_NMSEDEC_BITS];
-    int lut_nmsedec_ref[1 << T1_NMSEDEC_BITS];
-    int lut_nmsedec_ref0[1 << T1_NMSEDEC_BITS];
-    /** Codeblock data */
-    int data[T1_CBLKD][T1_CBLKH][T1_CBLKW];/*int ***data;*/
-    /** Context information for each voxel in codeblock */
-    int flags[T1_CBLKD + 2][T1_CBLKH + 2][T1_CBLKH + 2];/*int ***flags;*/
-} opj_t1_t;
-
-/** @name Exported functions */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-/**
-Create a new T1 handle
-and initialize the look-up tables of the Tier-1 coder/decoder
-@return Returns a new T1 handle if successful, returns NULL otherwise
-@see t1_init_luts
-*/
-opj_t1_t* t1_create(opj_common_ptr cinfo);
-/**
-Destroy a previously created T1 handle
-@param t1 T1 handle to destroy
-*/
-void t1_destroy(opj_t1_t *t1);
-/**
-Encode the code-blocks of a tile
-@param t1 T1 handle
-@param tile The tile to encode
-@param tcp Tile coding parameters
-*/
-void t1_encode_cblks(opj_t1_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp);
-/**
-Decode the code-blocks of a tile
-@param t1 T1 handle
-@param tile The tile to decode
-@param tcp Tile coding parameters
-*/
-void t1_decode_cblks(opj_t1_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp);
-/**
-Get weigths of MSE decoding
-@param nmsedec The normalized MSE reduction
-@param compno
-@param level
-@param orient
-@param bpno
-@param stepsize
-@param numcomps
-@param dwtid
-returns MSE associated to decoding pass
-*/
-double t1_getwmsedec(int nmsedec, int compno, int level[3], int orient,
-                     int bpno, double stepsize, int numcomps, int dwtid[3]);
-
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif /* __T1_H */
diff --git a/src/lib/openjp3d/t1_3d.c b/src/lib/openjp3d/t1_3d.c
deleted file mode 100644 (file)
index ce7e8db..0000000
+++ /dev/null
@@ -1,1366 +0,0 @@
-/*
- * Copyrigth (c) 2006, Mónica Díez, LPI-UVA, Spain
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "opj_includes.h"
-
-/** @defgroup T1_3D T1_3D - Implementation of the tier-1 coding */
-/*@{*/
-
-/** @name Local static functions */
-/*@{*/
-
-static int t1_3d_getctxno_zc(unsigned int f, int orient);
-static int t1_3d_getctxno_sc(unsigned int f);
-static int t1_3d_getctxno_mag(unsigned int f, int fsvr);
-static int t1_3d_getspb(unsigned int f);
-static int t1_3d_getnmsedec_sig(opj_t1_3d_t *t1, int x, int bitpos);
-static int t1_3d_getnmsedec_ref(opj_t1_3d_t *t1, int x, int bitpos);
-static void t1_3d_updateflags(unsigned int *fp, int s);
-/**
-Encode significant pass
-*/
-static void t1_3d_enc_sigpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr,
-                                   int *dp, int orient, int bpno, int one, int *nmsedec, char type, int vsc);
-/**
-Decode significant pass
-*/
-static void t1_3d_dec_sigpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr,
-                                   int *dp, int orient, int oneplushalf, char type, int vsc);
-/**
-Encode significant pass
-*/
-static void t1_3d_enc_sigpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno,
-                              int orient, int *nmsedec, char type, int cblksty);
-/**
-Decode significant pass
-*/
-static void t1_3d_dec_sigpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno,
-                              int orient, char type, int cblksty);
-/**
-Encode refinement pass
-*/
-static void t1_3d_enc_refpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr,
-                                   int *dp, int bpno, int one, int *nmsedec, char type, int vsc);
-/**
-Decode refinement pass
-*/
-static void t1_3d_dec_refpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr,
-                                   int *dp, int poshalf, int neghalf, char type, int vsc);
-/**
-Encode refinement pass
-*/
-static void t1_3d_enc_refpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno,
-                              int *nmsedec, char type, int cblksty);
-/**
-Decode refinement pass
-*/
-static void t1_3d_dec_refpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno,
-                              char type, int cblksty);
-/**
-Encode clean-up pass
-*/
-static void t1_3d_enc_clnpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr,
-                                   int *dp, int orient, int bpno, int one, int *nmsedec, int partial, int vsc);
-/**
-Decode clean-up pass
-*/
-static void t1_3d_dec_clnpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr,
-                                   int *dp, int orient, int oneplushalf, int partial, int vsc);
-/**
-Encode clean-up pass
-*/
-static void t1_3d_enc_clnpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno,
-                              int orient, int *nmsedec, int cblksty);
-/**
-Decode clean-up pass
-*/
-static void t1_3d_dec_clnpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno,
-                              int orient, int cblksty);
-/**
-Encode 1 code-block
-@param t1 T1 handle
-@param cblk Code-block coding parameters
-@param orient
-@param compno Component number
-@param level[3]
-@param dwtid[3]
-@param stepsize
-@param cblksty Code-block style
-@param numcomps
-@param tile
-*/
-static void t1_3d_encode_cblk(opj_t1_3d_t *t1, opj_tcd_cblk_t * cblk,
-                              int orient, int compno,  int level[3], int dwtid[3], double stepsize,
-                              int cblksty, int numcomps, opj_tcd_tile_t * tile);
-/**
-Decode 1 code-block
-@param t1 T1 handle
-@param cblk Code-block coding parameters
-@param orient
-@param roishift Region of interest shifting value
-@param cblksty Code-block style
-*/
-static void t1_3d_decode_cblk(opj_t1_3d_t *t1, opj_tcd_cblk_t * cblk,
-                              int orient, int roishift, int cblksty);
-static int t1_3d_init_ctxno_zc(unsigned int f, int orient);
-static int t1_3d_init_ctxno_sc(unsigned int f);
-static int t1_3d_init_ctxno_mag(unsigned int f, int f2);
-static int t1_3d_init_spb(unsigned int f);
-/**
-Initialize the look-up tables of the Tier-1 coder/decoder
-@param t1 T1 handle
-*/
-static void t1_3d_init_luts(opj_t1_3d_t *t1);
-
-/*@}*/
-
-/*@}*/
-
-/* ----------------------------------------------------------------------- */
-
-static int t1_3d_getctxno_zc(unsigned int f, int orient)
-{
-    return t1_3d_init_ctxno_zc((f & T1_3D_SIG_OTH), orient);
-}
-
-static int t1_3d_getctxno_sc(unsigned int f)
-{
-    return t1_3d_init_ctxno_sc((f & T1_3D_SIG_PRIM) | ((f >> 16) & T1_3D_SGN));
-    /*return t1->lut_ctxno_sc[((f & T1_3D_SIG_PRIM) | ((f >> 16) & T1_3D_SGN)) >> 4];*/
-}
-
-static int t1_3d_getctxno_mag(unsigned int f, int fsvr)
-{
-    return t1_3d_init_ctxno_mag((f & T1_3D_SIG_OTH), fsvr);
-}
-
-static int t1_3d_getspb(unsigned int f)
-{
-    return t1_3d_init_spb((f & T1_3D_SIG_PRIM) | ((f >> 16) & T1_3D_SGN));
-    /*return t1->lut_spb[((f & T1_3D_SIG_PRIM) | ((f >> 16) & T1_3D_SGN)) >> 4];*/
-}
-
-static int t1_3d_getnmsedec_sig(opj_t1_3d_t *t1, int x, int bitpos)
-{
-    if (bitpos > T1_NMSEDEC_FRACBITS) {
-        return t1->lut_nmsedec_sig[(x >> (bitpos - T1_NMSEDEC_FRACBITS)) & ((
-                                                                             1 << T1_NMSEDEC_BITS) - 1)];
-    }
-
-    return t1->lut_nmsedec_sig0[x & ((1 << T1_NMSEDEC_BITS) - 1)];
-}
-
-static int t1_3d_getnmsedec_ref(opj_t1_3d_t *t1, int x, int bitpos)
-{
-    if (bitpos > T1_NMSEDEC_FRACBITS) {
-        return t1->lut_nmsedec_ref[(x >> (bitpos - T1_NMSEDEC_FRACBITS)) & ((
-                                                                             1 << T1_NMSEDEC_BITS) - 1)];
-    }
-
-    return t1->lut_nmsedec_ref0[x & ((1 << T1_NMSEDEC_BITS) - 1)];
-}
-
-static void t1_3d_updateflags(unsigned int *fp, int s)
-{
-    unsigned int *np = fp - (T1_MAXCBLKW + 2);
-    unsigned int *sp = fp + (T1_MAXCBLKW + 2);
-
-    unsigned int *bwp = fp + ((T1_MAXCBLKW + 2) * (T1_MAXCBLKH + 2));
-    unsigned int *bnp = bwp - (T1_MAXCBLKW + 2);
-    unsigned int *bsp = bwp + (T1_MAXCBLKW + 2);
-
-    unsigned int *fwp = fp - ((T1_MAXCBLKW + 2) * (T1_MAXCBLKH + 2));
-    unsigned int *fnp = fwp - (T1_MAXCBLKW + 2);
-    unsigned int *fsp = fwp + (T1_MAXCBLKW + 2);
-
-    np[-1] |= T1_3D_SIG_SE;
-    np[1] |= T1_3D_SIG_SW;
-    sp[-1] |= T1_3D_SIG_NE;
-    sp[1] |= T1_3D_SIG_NW;
-    *np |= T1_3D_SIG_S;
-    *sp |= T1_3D_SIG_N;
-    fp[-1] |= T1_3D_SIG_E;
-    fp[1] |= T1_3D_SIG_W;
-
-    *fwp |= T1_3D_SIG_FC;
-    *bwp |= T1_3D_SIG_BC;
-
-    fnp[-1] |= T1_3D_SIG_FSE;
-    fnp[1] |= T1_3D_SIG_FSW;
-    fsp[-1] |= T1_3D_SIG_FNE;
-    fsp[1] |= T1_3D_SIG_FNW;
-    *fnp |= T1_3D_SIG_FS;
-    *fsp |= T1_3D_SIG_FN;
-    fwp[-1] |= T1_3D_SIG_FE;
-    fwp[1] |= T1_3D_SIG_FW;
-
-    bnp[-1] |= T1_3D_SIG_BSE;
-    bnp[1] |= T1_3D_SIG_BSW;
-    bsp[-1] |= T1_3D_SIG_BNE;
-    bsp[1] |= T1_3D_SIG_BNW;
-    *bnp |= T1_3D_SIG_BS;
-    *bsp |= T1_3D_SIG_BN;
-    bwp[-1] |= T1_3D_SIG_BE;
-    bwp[1] |= T1_3D_SIG_BW;
-
-    if (s) {
-        *np |= (T1_3D_SGN_S << 16);
-        *sp |= (T1_3D_SGN_N << 16);
-        fp[-1] |= (T1_3D_SGN_E << 16);
-        fp[1] |= (T1_3D_SGN_W << 16);
-        *fwp |= (T1_3D_SGN_F << 16);
-        *bwp |= (T1_3D_SGN_B << 16);
-    }
-}
-
-static void t1_3d_enc_sigpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr,
-                                   int *dp, int orient, int bpno, int one, int *nmsedec, char type, int vsc)
-{
-    int v, flagsvr;
-    unsigned int flag;
-
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    flag = vsc ? ((*fp) & (~(T1_3D_SIG_S | T1_3D_SIG_SE | T1_3D_SIG_SW |
-                             (T1_3D_SGN_S << 16)))) : (*fp);
-    flagsvr = (*fsvr);
-    if ((flag & T1_3D_SIG_OTH) && !(flagsvr & (T1_3D_SIG | T1_3D_VISIT))) {
-        v = int_abs(*dp) & one ? 1 : 0;
-        if (type == T1_TYPE_RAW) {  /* BYPASS/LAZY MODE */
-            mqc_setcurctx(mqc, t1_3d_getctxno_zc(flag, orient));    /* ESSAI */
-            mqc_bypass_enc(mqc, v);
-        } else {
-            mqc_setcurctx(mqc, t1_3d_getctxno_zc(flag, orient));
-            mqc_encode(mqc, v);
-        }
-        if (v) {
-            v = *dp < 0 ? 1 : 0;
-            *nmsedec += t1_3d_getnmsedec_sig(t1, int_abs(*dp), bpno + T1_NMSEDEC_FRACBITS);
-            if (type == T1_TYPE_RAW) {  /* BYPASS/LAZY MODE */
-                mqc_setcurctx(mqc, t1_3d_getctxno_sc(flag));    /* ESSAI */
-                mqc_bypass_enc(mqc, v);
-            } else {
-                mqc_setcurctx(mqc, t1_3d_getctxno_sc(flag));
-                mqc_encode(mqc, v ^ t1_3d_getspb(flag));
-            }
-            t1_3d_updateflags(fp, v);
-            *fsvr |= T1_3D_SIG;
-        }
-        *fsvr |= T1_3D_VISIT;
-    }
-}
-
-static void t1_3d_dec_sigpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr,
-                                   int *dp, int orient, int oneplushalf, char type, int vsc)
-{
-    int v, flagsvr;
-    unsigned int flag;
-
-    opj_raw_t *raw = t1->raw;   /* RAW component */
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    flag = vsc ? ((*fp) & (~(T1_3D_SIG_S | T1_3D_SIG_SE | T1_3D_SIG_SW |
-                             (T1_3D_SGN_S << 16)))) : (*fp);
-    flagsvr = (*fsvr);
-    if ((flag & T1_3D_SIG_OTH) && !(flagsvr & (T1_3D_SIG | T1_3D_VISIT))) {
-        if (type == T1_TYPE_RAW) {
-            if (raw_decode(raw)) {
-                v = raw_decode(raw);    /* ESSAI */
-                *dp = v ? -oneplushalf : oneplushalf;
-                t1_3d_updateflags(fp, v);
-                *fsvr |= T1_3D_SIG;
-            }
-        } else {
-            mqc_setcurctx(mqc, t1_3d_getctxno_zc(flag, orient));
-            if (mqc_decode(mqc)) {
-                mqc_setcurctx(mqc, t1_3d_getctxno_sc(flag));
-                v = mqc_decode(mqc) ^ t1_3d_getspb(flag);
-                *dp = v ? -oneplushalf : oneplushalf;
-                t1_3d_updateflags(fp, v);
-                *fsvr |= T1_3D_SIG;
-            }
-        }
-        *fsvr |= T1_3D_VISIT;
-    }
-}               /* VSC and  BYPASS by Antonin */
-
-static void t1_3d_enc_sigpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno,
-                              int orient, int *nmsedec, char type, int cblksty)
-{
-    int i, j, k, m, one, vsc;
-    *nmsedec = 0;
-    one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
-    for (m = 0; m < l; m++) {
-        for (k = 0; k < h; k += 4) {
-            for (i = 0; i < w; i++) {
-                for (j = k; j < k + 4 && j < h; j++) {
-                    vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
-                    t1_3d_enc_sigpass_step(t1, &t1->flags[1 + m][1 + j][1 + i],
-                                           &t1->flagSVR[1 + m][1 + j][1 + i], &t1->data[m][j][i], orient, bpno, one,
-                                           nmsedec, type, vsc);
-                }
-            }
-        }
-    }
-}
-
-static void t1_3d_dec_sigpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno,
-                              int orient, char type, int cblksty)
-{
-    int i, j, k, m, one, half, oneplushalf, vsc;
-    one = 1 << bpno;
-    half = one >> 1;
-    oneplushalf = one | half;
-    for (m = 0; m < l; m++) {
-        for (k = 0; k < h; k += 4) {
-            for (i = 0; i < w; i++) {
-                for (j = k; j < k + 4 && j < h; j++) {
-                    vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
-                    t1_3d_dec_sigpass_step(t1, &t1->flags[1 + m][1 + j][1 + i],
-                                           &t1->flagSVR[1 + m][1 + j][1 + i], &t1->data[m][j][i], orient, oneplushalf,
-                                           type, vsc);
-                }
-            }
-        }
-    }
-}               /* VSC and  BYPASS by Antonin */
-
-static void t1_3d_enc_refpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr,
-                                   int *dp, int bpno, int one, int *nmsedec, char type, int vsc)
-{
-    int v, flagsvr;
-    unsigned int flag;
-
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    flag = vsc ? ((*fp) & (~(T1_3D_SIG_S | T1_3D_SIG_SE | T1_3D_SIG_SW |
-                             (T1_3D_SGN_S << 16)))) : (*fp);
-    flagsvr = (*fsvr);
-    if ((flagsvr & (T1_3D_SIG | T1_3D_VISIT)) == T1_3D_SIG) {
-        *nmsedec += t1_3d_getnmsedec_ref(t1, int_abs(*dp), bpno + T1_NMSEDEC_FRACBITS);
-        v = int_abs(*dp) & one ? 1 : 0;
-        if (type == T1_TYPE_RAW) {  /* BYPASS/LAZY MODE */
-            mqc_setcurctx(mqc, t1_3d_getctxno_mag(flag, flagsvr));  /* ESSAI */
-            mqc_bypass_enc(mqc, v);
-        } else {
-            mqc_setcurctx(mqc, t1_3d_getctxno_mag(flag, flagsvr));
-            mqc_encode(mqc, v);
-        }
-        *fsvr |= T1_3D_REFINE;
-    }
-}
-
-static void t1_3d_dec_refpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr,
-                                   int *dp, int poshalf, int neghalf, char type, int vsc)
-{
-    int v, t, flagsvr;
-    unsigned int flag;
-
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-    opj_raw_t *raw = t1->raw;   /* RAW component */
-
-    flag = vsc ? ((*fp) & (~(T1_3D_SIG_S | T1_3D_SIG_SE | T1_3D_SIG_SW |
-                             (T1_3D_SGN_S << 16)))) : (*fp);
-    flagsvr = (*fsvr);
-    if ((flagsvr & (T1_3D_SIG | T1_3D_VISIT)) == T1_3D_SIG) {
-        if (type == T1_TYPE_RAW) {
-            mqc_setcurctx(mqc, t1_3d_getctxno_mag(flag, flagsvr));  /* ESSAI */
-            v = raw_decode(raw);
-        } else {
-            mqc_setcurctx(mqc, t1_3d_getctxno_mag(flag, flagsvr));
-            v = mqc_decode(mqc);
-        }
-        t = v ? poshalf : neghalf;
-        *dp += *dp < 0 ? -t : t;
-        *fsvr |= T1_3D_REFINE;
-    }
-}               /* VSC and  BYPASS by Antonin  */
-
-static void t1_3d_enc_refpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno,
-                              int *nmsedec, char type, int cblksty)
-{
-    int i, j, k, m, one, vsc;
-    *nmsedec = 0;
-    one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
-    for (m = 0; m < l; m++) {
-        for (k = 0; k < h; k += 4) {
-            for (i = 0; i < w; i++) {
-                for (j = k; j < k + 4 && j < h; j++) {
-                    vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
-                    t1_3d_enc_refpass_step(t1, &t1->flags[1 + m][1 + j][1 + i],
-                                           &t1->flagSVR[1 + m][1 + j][1 + i], &t1->data[m][j][i], bpno, one, nmsedec, type,
-                                           vsc);
-                }
-            }
-        }
-    }
-}
-
-static void t1_3d_dec_refpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno,
-                              char type, int cblksty)
-{
-    int i, j, k, m, one, poshalf, neghalf;
-    int vsc;
-    one = 1 << bpno;
-    poshalf = one >> 1;
-    neghalf = bpno > 0 ? -poshalf : -1;
-    for (m = 0; m < l; m++) {
-        for (k = 0; k < h; k += 4) {
-            for (i = 0; i < w; i++) {
-                for (j = k; j < k + 4 && j < h; j++) {
-                    vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
-                    t1_3d_dec_refpass_step(t1, &t1->flags[1 + m][1 + j][1 + i],
-                                           &t1->flagSVR[1 + m][1 + j][1 + i], &t1->data[m][j][i], poshalf, neghalf, type,
-                                           vsc);
-                }
-            }
-        }
-    }
-}               /* VSC and  BYPASS by Antonin */
-
-static void t1_3d_enc_clnpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr,
-                                   int *dp, int orient, int bpno, int one, int *nmsedec, int partial, int vsc)
-{
-    int v, flagsvr;
-    unsigned int flag;
-
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    flag = vsc ? ((*fp) & (~(T1_3D_SIG_S | T1_3D_SIG_SE | T1_3D_SIG_SW |
-                             (T1_3D_SGN_S << 16)))) : (*fp);
-    flagsvr = (*fsvr);
-    if (partial) {
-        goto LABEL_PARTIAL;
-    }
-    if (!(*fsvr & (T1_3D_SIG | T1_3D_VISIT))) {
-        mqc_setcurctx(mqc, t1_3d_getctxno_zc(flag, orient));
-        v = int_abs(*dp) & one ? 1 : 0;
-        mqc_encode(mqc, v);
-        if (v) {
-LABEL_PARTIAL:
-            *nmsedec += t1_3d_getnmsedec_sig(t1, int_abs(*dp), bpno + T1_NMSEDEC_FRACBITS);
-            mqc_setcurctx(mqc, t1_3d_getctxno_sc(flag));
-            v = *dp < 0 ? 1 : 0;
-            mqc_encode(mqc, v ^ t1_3d_getspb(flag));
-            t1_3d_updateflags(fp, v);
-            *fsvr |= T1_3D_SIG;
-        }
-    }
-    *fsvr &= ~T1_3D_VISIT;
-}
-
-static void t1_3d_dec_clnpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr,
-                                   int *dp, int orient, int oneplushalf, int partial, int vsc)
-{
-    int v, flagsvr;
-    unsigned int flag;
-
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    flag = vsc ? ((*fp) & (~(T1_3D_SIG_S | T1_3D_SIG_SE | T1_3D_SIG_SW |
-                             (T1_3D_SGN_S << 16)))) : (*fp);
-    flagsvr = (*fsvr);
-    if (partial) {
-        goto LABEL_PARTIAL;
-    }
-    if (!(flagsvr & (T1_3D_SIG | T1_3D_VISIT))) {
-        mqc_setcurctx(mqc, t1_3d_getctxno_zc(flag, orient));
-        if (mqc_decode(mqc)) {
-LABEL_PARTIAL:
-            mqc_setcurctx(mqc, t1_3d_getctxno_sc(flag));
-            v = mqc_decode(mqc) ^ t1_3d_getspb(flag);
-            *dp = v ? -oneplushalf : oneplushalf;
-            t1_3d_updateflags(fp, v);
-            *fsvr |= T1_3D_SIG;
-        }
-    }
-    *fsvr &= ~T1_3D_VISIT;
-}               /* VSC and  BYPASS by Antonin */
-
-static void t1_3d_enc_clnpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno,
-                              int orient, int *nmsedec, int cblksty)
-{
-    int i, j, k, m, one, agg, runlen, vsc;
-
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    *nmsedec = 0;
-    one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
-    for (m = 0; m < l; m++) {
-        for (k = 0; k < h; k += 4) {
-            for (i = 0; i < w; i++) {
-                if (k + 3 < h) {
-                    if (cblksty & J3D_CCP_CBLKSTY_VSC) {
-                        agg = !(((t1->flagSVR[1 + m][1 + k][1 + i] | (T1_3D_SIG | T1_3D_VISIT)) &
-                                 (t1->flags[1 + m][1 + k][1 + i] & T1_3D_SIG_OTH))
-                                || ((t1->flagSVR[1 + m][1 + k + 1][1 + i] | (T1_3D_SIG | T1_3D_VISIT)) &
-                                    (t1->flags[1 + m][1 + k + 1][1 + i] & T1_3D_SIG_OTH))
-                                || ((t1->flagSVR[1 + m][1 + k + 2][1 + i] | (T1_3D_SIG | T1_3D_VISIT)) &
-                                    (t1->flags[1 + m][1 + k + 2][1 + i] & T1_3D_SIG_OTH))
-                                || ((t1->flagSVR[1 + m][1 + k + 3][1 + i] | (T1_3D_SIG | T1_3D_VISIT)) & ((
-                                            t1->flags[1 + m][1 + k + 3][1 + i] & (~(T1_3D_SIG_S | T1_3D_SIG_SE |
-                                                    T1_3D_SIG_SW | (T1_3D_SGN_S << 16)))) & (T1_3D_SIG_OTH)))
-                               );
-                    } else {
-                        agg = !(
-                                  ((t1->flagSVR[1 + m][1 + k][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) |
-                                   (t1->flags[1 + m][1 + k][1 + i] & T1_3D_SIG_OTH))
-                                  || ((t1->flagSVR[1 + m][1 + k + 1][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) |
-                                      (t1->flags[1 + m][1 + k + 1][1 + i] & T1_3D_SIG_OTH))
-                                  || ((t1->flagSVR[1 + m][1 + k + 2][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) |
-                                      (t1->flags[1 + m][1 + k + 2][1 + i] & T1_3D_SIG_OTH))
-                                  || ((t1->flagSVR[1 + m][1 + k + 3][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) |
-                                      (t1->flags[1 + m][1 + k + 3][1 + i] & T1_3D_SIG_OTH))
-                              );
-                    }
-                } else {
-                    agg = 0;
-                }
-                if (agg) {
-                    for (runlen = 0; runlen < 4; runlen++) {
-                        if (int_abs(t1->data[m][k + runlen][i]) & one) {
-                            break;
-                        }
-                    }
-                    mqc_setcurctx(mqc, T1_CTXNO_AGG);
-                    mqc_encode(mqc, runlen != 4);
-                    if (runlen == 4) {
-                        continue;
-                    }
-                    mqc_setcurctx(mqc, T1_CTXNO_UNI);
-                    mqc_encode(mqc, runlen >> 1);
-                    mqc_encode(mqc, runlen & 1);
-                } else {
-                    runlen = 0;
-                }
-                for (j = k + runlen; j < k + 4 && j < h; j++) {
-                    vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
-                    t1_3d_enc_clnpass_step(t1, &t1->flags[1 + m][1 + j][1 + i],
-                                           &t1->flagSVR[1 + m][1 + j][1 + i], &t1->data[m][j][i], orient, bpno, one,
-                                           nmsedec, agg && (j == k + runlen), vsc);
-                }
-            }
-        }
-    }
-}
-
-static void t1_3d_dec_clnpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno,
-                              int orient, int cblksty)
-{
-    int i, j, k, m, one, half, oneplushalf, agg, runlen, vsc;
-    int segsym = cblksty & J3D_CCP_CBLKSTY_SEGSYM;
-
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    one = 1 << bpno;
-    half = one >> 1;
-    oneplushalf = one | half;
-    for (m = 0; m < l; m++) {
-        for (k = 0; k < h; k += 4) {
-            for (i = 0; i < w; i++) {
-                if (k + 3 < h) {
-                    if (cblksty & J3D_CCP_CBLKSTY_VSC) {
-                        agg = !(
-                                  ((t1->flagSVR[1 + m][1 + k][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) |
-                                   (t1->flags[1 + m][1 + k][1 + i] & T1_3D_SIG_OTH))
-                                  || ((t1->flagSVR[1 + m][1 + k + 1][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) |
-                                      (t1->flags[1 + m][1 + k + 1][1 + i] & T1_3D_SIG_OTH))
-                                  || ((t1->flagSVR[1 + m][1 + k + 2][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) |
-                                      (t1->flags[1 + m][1 + k + 2][1 + i] & T1_3D_SIG_OTH))
-                                  || ((t1->flagSVR[1 + m][1 + k + 3][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) | ((
-                                              t1->flags[1 + m][1 + k + 3][1 + i] & (~(T1_3D_SIG_S | T1_3D_SIG_SE |
-                                                      T1_3D_SIG_SW | (T1_3D_SGN_S << 16)))) & (T1_3D_SIG_OTH)))
-                              );
-                    } else {
-                        agg = !(
-                                  ((t1->flagSVR[1 + m][1 + k][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) |
-                                   (t1->flags[1 + m][1 + k][1 + i] & T1_3D_SIG_OTH))
-                                  || ((t1->flagSVR[1 + m][1 + k + 1][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) |
-                                      (t1->flags[1 + m][1 + k + 1][1 + i] & T1_3D_SIG_OTH))
-                                  || ((t1->flagSVR[1 + m][1 + k + 2][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) |
-                                      (t1->flags[1 + m][1 + k + 2][1 + i] & T1_3D_SIG_OTH))
-                                  || ((t1->flagSVR[1 + m][1 + k + 3][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) |
-                                      (t1->flags[1 + m][1 + k + 3][1 + i] & T1_3D_SIG_OTH))
-                              );
-                    }
-                } else {
-                    agg = 0;
-                }
-                if (agg) {
-                    mqc_setcurctx(mqc, T1_CTXNO_AGG);
-                    if (!mqc_decode(mqc)) {
-                        continue;
-                    }
-                    mqc_setcurctx(mqc, T1_CTXNO_UNI);
-                    runlen = mqc_decode(mqc);
-                    runlen = (runlen << 1) | mqc_decode(mqc);
-                } else {
-                    runlen = 0;
-                }
-                for (j = k + runlen; j < k + 4 && j < h; j++) {
-                    vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
-                    t1_3d_dec_clnpass_step(t1, &t1->flags[1 + m][1 + j][1 + i],
-                                           &t1->flagSVR[1 + m][1 + j][1 + i], &t1->data[m][j][i], orient, oneplushalf,
-                                           agg && (j == k + runlen), vsc);
-                }
-            }
-        }
-    }
-    if (segsym) {
-        int v = 0;
-        mqc_setcurctx(mqc, T1_CTXNO_UNI);
-        v = mqc_decode(mqc);
-        v = (v << 1) | mqc_decode(mqc);
-        v = (v << 1) | mqc_decode(mqc);
-        v = (v << 1) | mqc_decode(mqc);
-        /*
-        if (v!=0xa) {
-            opj_event_msg(t1->cinfo, EVT_WARNING, "Bad segmentation symbol %x\n", v);
-        }
-        */
-    }
-}               /* VSC and  BYPASS by Antonin */
-
-
-static void t1_3d_encode_cblk(opj_t1_3d_t *t1, opj_tcd_cblk_t * cblk,
-                              int orient, int compno, int level[3], int dwtid[3], double stepsize,
-                              int cblksty, int numcomps, opj_tcd_tile_t * tile)
-{
-    int i, j, k;
-    int w, h, l;
-    int passno;
-    int bpno, passtype;
-    int max;
-    int nmsedec = 0;
-    double cumwmsedec = 0;
-    char type = T1_TYPE_MQ;
-
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    w = cblk->x1 - cblk->x0;
-    h = cblk->y1 - cblk->y0;
-    l = cblk->z1 - cblk->z0;
-
-    max = 0;
-    for (k = 0; k < l; k++) {
-        for (j = 0; j < h; j++) {
-            for (i = 0; i < w; i++) {
-                max = int_max(max, int_abs(t1->data[k][j][i]));
-            }
-        }
-    }
-    for (k = 0; k <= l; k++) {
-        for (j = 0; j <= h; j++) {
-            for (i = 0; i <= w; i++) {
-                t1->flags[k][j][i] = 0;
-                t1->flagSVR[k][j][i] = 0;
-            }
-        }
-    }
-
-    cblk->numbps = max ? (int_floorlog2(max) + 1) - T1_NMSEDEC_FRACBITS : 0;
-
-    bpno = cblk->numbps - 1;
-    passtype = 2;
-
-    mqc_reset_enc(mqc);
-    mqc_init_enc(mqc, cblk->data);
-
-    for (passno = 0; bpno >= 0; passno++) {
-        opj_tcd_pass_t *pass = &cblk->passes[passno];
-        int correction = 3;
-        double tmpwmsedec;
-        type = ((bpno < (cblk->numbps - 4)) && (passtype < 2) &&
-                (cblksty & J3D_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
-
-        switch (passtype) {
-        case 0:
-            t1_3d_enc_sigpass(t1, w, h, l, bpno, orient, &nmsedec, type, cblksty);
-            break;
-        case 1:
-            t1_3d_enc_refpass(t1, w, h, l, bpno, &nmsedec, type, cblksty);
-            break;
-        case 2:
-            t1_3d_enc_clnpass(t1, w, h, l, bpno, orient, &nmsedec, cblksty);
-            /* code switch SEGMARK (i.e. SEGSYM) */
-            if (cblksty & J3D_CCP_CBLKSTY_SEGSYM) {
-                mqc_segmark_enc(mqc);
-            }
-            break;
-        }
-
-        /* fixed_quality */
-        tmpwmsedec = t1_getwmsedec(nmsedec, compno, level, orient, bpno, stepsize,
-                                   numcomps, dwtid);
-        cumwmsedec += tmpwmsedec;
-        tile->distotile += tmpwmsedec;
-
-        /* Code switch "RESTART" (i.e. TERMALL) */
-        if ((cblksty & J3D_CCP_CBLKSTY_TERMALL) && !((passtype == 2) &&
-                (bpno - 1 < 0))) {
-            if (type == T1_TYPE_RAW) {
-                mqc_flush(mqc);
-                correction = 1;
-                /* correction = mqc_bypass_flush_enc(); */
-            } else {            /* correction = mqc_restart_enc(); */
-                mqc_flush(mqc);
-                correction = 1;
-            }
-            pass->term = 1;
-        } else {
-            if (((bpno < (cblk->numbps - 4) && (passtype > 0))
-                    || ((bpno == (cblk->numbps - 4)) && (passtype == 2))) &&
-                    (cblksty & J3D_CCP_CBLKSTY_LAZY)) {
-                if (type == T1_TYPE_RAW) {
-                    mqc_flush(mqc);
-                    correction = 1;
-                } else {
-                    mqc_flush(mqc);
-                    correction = 1;
-                }
-                pass->term = 1;
-            } else {
-                pass->term = 0;
-            }
-        }
-
-        if (++passtype == 3) {
-            passtype = 0;
-            bpno--;
-        }
-
-        if (pass->term && bpno > 0) {
-            type = ((bpno < (cblk->numbps - 4)) && (passtype < 2) &&
-                    (cblksty & J3D_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
-            if (type == T1_TYPE_RAW) {
-                mqc_bypass_init_enc(mqc);
-            } else {
-                mqc_restart_init_enc(mqc);
-            }
-        }
-
-        pass->distortiondec = cumwmsedec;
-        pass->rate = mqc_numbytes(mqc) + correction;    /* FIXME */
-        pass->len = pass->rate - (passno == 0 ? 0 : cblk->passes[passno - 1].rate);
-
-        /* Code-switch "RESET" */
-        if (cblksty & J3D_CCP_CBLKSTY_RESET) {
-            mqc_reset_enc(mqc);
-        }
-    }
-
-    /* Code switch "ERTERM" (i.e. PTERM) */
-    if (cblksty & J3D_CCP_CBLKSTY_PTERM) {
-        mqc_erterm_enc(mqc);
-    } else /* Default coding */ if (!(cblksty & J3D_CCP_CBLKSTY_LAZY)) {
-        mqc_flush(mqc);
-    }
-
-    cblk->totalpasses = passno;
-}
-
-static void t1_3d_decode_cblk(opj_t1_3d_t *t1, opj_tcd_cblk_t * cblk,
-                              int orient, int roishift, int cblksty)
-{
-    int i, j, k;
-    int w, h, l;
-    int bpno, passtype;
-    int segno, passno;
-    char type = T1_TYPE_MQ; /* BYPASS mode */
-    opj_raw_t *raw = t1->raw;   /* RAW component */
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    w = cblk->x1 - cblk->x0;
-    h = cblk->y1 - cblk->y0;
-    l = cblk->z1 - cblk->z0;
-
-    for (k = 0; k < l; k++) {
-        for (j = 0; j < h; j++) {
-            for (i = 0; i < w; i++) {
-                t1->data[k][j][i] = 0;
-            }
-        }
-    }
-
-    for (k = 0; k <= l; k++) {
-        for (j = 0; j <= h; j++) {
-            for (i = 0; i <= w; i++) {
-                t1->flags[k][j][i] = 0;
-                t1->flagSVR[k][j][i] = 0;
-            }
-        }
-    }
-
-
-    bpno = roishift + cblk->numbps - 1;
-    passtype = 2;
-
-    mqc_reset_enc(mqc);
-
-    for (segno = 0; segno < cblk->numsegs; segno++) {
-        opj_tcd_seg_t *seg = &cblk->segs[segno];
-
-        /* BYPASS mode */
-        type = ((bpno <= (cblk->numbps - 1) - 4) && (passtype < 2) &&
-                (cblksty & J3D_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
-        if (type == T1_TYPE_RAW) {
-            raw_init_dec(raw, seg->data, seg->len);
-        } else {
-            mqc_init_dec(mqc, seg->data, seg->len);
-        }
-
-        for (passno = 0; passno < seg->numpasses; passno++) {
-            switch (passtype) {
-            case 0:
-                t1_3d_dec_sigpass(t1, w, h, l, bpno + 1, orient, type, cblksty);
-                break;
-            case 1:
-                t1_3d_dec_refpass(t1, w, h, l, bpno + 1, type, cblksty);
-                break;
-            case 2:
-                t1_3d_dec_clnpass(t1, w, h, l, bpno + 1, orient, cblksty);
-                break;
-            }
-
-            if ((cblksty & J3D_CCP_CBLKSTY_RESET) && type == T1_TYPE_MQ) {
-                mqc_reset_enc(mqc);
-            }
-            if (++passtype == 3) {
-                passtype = 0;
-                bpno--;
-            }
-
-        }
-    }
-}
-
-static int t1_3d_init_ctxno_zc(unsigned int f, int orient)
-{
-    unsigned int h, v, c;
-    unsigned int d2xy, d2xz, d2yz, d3;
-    int n;
-    unsigned int hvc, hc, d2, d2xy2yz, d2xy2xz;
-    n = 0;
-    h = ((f & T1_3D_SIG_W) != 0) + ((f & T1_3D_SIG_E) != 0);
-    v = ((f & T1_3D_SIG_N) != 0) + ((f & T1_3D_SIG_S) != 0);
-    c = ((f & T1_3D_SIG_FC) != 0) + ((f & T1_3D_SIG_BC) != 0);
-    d2xy = ((f & T1_3D_SIG_NW) != 0) + ((f & T1_3D_SIG_NE) != 0) + ((
-                f & T1_3D_SIG_SE) != 0) + ((f & T1_3D_SIG_SW) != 0);
-    d2xz = ((f & T1_3D_SIG_FW) != 0) + ((f & T1_3D_SIG_BW) != 0) + ((
-                f & T1_3D_SIG_FE) != 0) + ((f & T1_3D_SIG_BE) != 0);
-    d2yz = ((f & T1_3D_SIG_FN) != 0) + ((f & T1_3D_SIG_FS) != 0) + ((
-                f & T1_3D_SIG_BN) != 0) + ((f & T1_3D_SIG_BS) != 0);
-    d3 = ((f & T1_3D_SIG_FNW) != 0) + ((f & T1_3D_SIG_FNE) != 0) + ((
-                f & T1_3D_SIG_FSE) != 0) + ((f & T1_3D_SIG_FSW) != 0)
-         + ((f & T1_3D_SIG_BNW) != 0) + ((f & T1_3D_SIG_BNE) != 0) + ((
-                     f & T1_3D_SIG_BSE) != 0) + ((f & T1_3D_SIG_BSW) != 0);
-
-    switch (orient) {
-    case 0: /*LLL*/
-    case 7: /*HHH*/
-        hvc = h + v + c;
-        d2 = d2xy + d2xz + d2yz;
-        if (!hvc) {
-            if (!d2) {
-                n = (!d3) ? 0 : 1;
-            } else if (d2 == 1) {
-                n = (!d3) ? 2 : 3;
-            } else {
-                n = (!d3) ? 4 : 5;
-            }
-        } else if (hvc == 1) {
-            if (!d2) {
-                n = (!d3) ? 6 : 7;
-            } else if (d2 == 1) {
-                n = (!d3) ? 8 : 9;
-            } else {
-                n = 10;
-            }
-        } else if (hvc == 2) {
-            if (!d2) {
-                n = (!d3) ? 11 : 12;
-            } else {
-                n = 13;
-            }
-        } else if (hvc == 3) {
-            n = 14;
-        } else {
-            n = 15;
-        }
-        break;
-    /*LHL, HLL, LLH*/
-    case 1:
-    case 2:
-    case 4:
-        hc = h + c;
-        d2xy2yz = d2xy + d2yz;
-        if (!hc) {
-            if (!v) {
-                if (!d2xy) {
-                    n = (!d2xy2yz) ? ((!d3) ? 0 : 1) : ((!d3) ? 2 : 3);
-                } else if (d2xy == 1) {
-                    n = (!d2xy2yz) ? ((!d3) ? 4 : 5) : 6;
-                } else { /*>=2*/
-                    n = 7;
-                }
-            } else {
-                n = (v == 1) ? 8 : 9; /* =1 or =2*/
-            }
-        } else if (hc == 1) {
-            n = (!v) ? ((!d2xy) ? ((!d2xy2yz) ? ((!d3) ? 10 : 11) : (12)) : (13)) : (14);
-        } else { /*if (hc >= 2)*/
-            n = 15;
-        }
-        break;
-    /*HLH, HHL, LHH*/
-    case 3:
-    case 5:
-    case 6:
-        hc = h + c;
-        d2xy2xz = d2xy + d2xz;
-        if (!v) {
-            if (!d2xz) {
-                if (!hc && !d2xy2xz) {
-                    n = (!d3) ? 0 : 1;
-                } else if (hc == 1) {
-                    n = (!d2xy2xz) ?  2 : 3;
-                } else { /*if >= 2*/
-                    n = 4;
-                }
-            } else if (d2xz >= 1 && !hc) {
-                n = 5;
-            } else if (hc >= 1) {
-                n = (d2xz == 1) ? 6 : 7;
-            }
-        } else if (v == 1) {
-            if (!d2xz) {
-                n = (!hc) ? 8 : 9;
-            } else if (d2xz == 1) {
-                n = (!hc) ? 10 : 11;
-            } else if (d2xz == 2) {
-                n = (!hc) ? 12 : 13;
-            } else { /* if (d2xz >= 3) {*/
-                n = 14;
-            }
-        } else if (v == 2) {
-            n = 15;
-        }
-        break;
-    }
-
-    return (T1_3D_CTXNO_ZC + n);
-}
-
-static int t1_3d_init_ctxno_sc(unsigned int f)
-{
-    int hc, vc, cc;
-    int n = 0;
-
-    hc = int_min(((f & (T1_3D_SIG_E | T1_3D_SGN_E)) == T1_3D_SIG_E)
-                 + ((f & (T1_3D_SIG_W | T1_3D_SGN_W)) == T1_3D_SIG_W), 1)
-         - int_min(((f & (T1_3D_SIG_E | T1_3D_SGN_E)) == (T1_3D_SIG_E | T1_3D_SGN_E))
-                   + ((f & (T1_3D_SIG_W | T1_3D_SGN_W)) == (T1_3D_SIG_W | T1_3D_SGN_W)), 1);
-
-    vc = int_min(((f & (T1_3D_SIG_N | T1_3D_SGN_N)) == T1_3D_SIG_N)
-                 + ((f & (T1_3D_SIG_S | T1_3D_SGN_S)) == T1_3D_SIG_S), 1)
-         - int_min(((f & (T1_3D_SIG_N | T1_3D_SGN_N)) == (T1_3D_SIG_N | T1_3D_SGN_N))
-                   + ((f & (T1_3D_SIG_S | T1_3D_SGN_S)) == (T1_3D_SIG_S | T1_3D_SGN_S)), 1);
-
-    cc = int_min(((f & (T1_3D_SIG_FC | T1_3D_SGN_F)) == T1_3D_SIG_FC)
-                 + ((f & (T1_3D_SIG_BC | T1_3D_SGN_B)) == T1_3D_SIG_BC), 1)
-         - int_min(((f & (T1_3D_SIG_FC | T1_3D_SGN_F)) == (T1_3D_SIG_FC | T1_3D_SGN_F))
-                   + ((f & (T1_3D_SIG_BC | T1_3D_SGN_B)) == (T1_3D_SIG_BC | T1_3D_SGN_B)), 1);
-    if (hc < 0) {
-        hc = -hc;
-        vc = -vc;
-        cc = -cc;
-    }
-
-    if (!hc) {
-        if (!vc) {
-            n = (!cc) ? 0 : 1;
-        } else if (vc == -1) {
-            n = (!cc) ? 1 : ((cc > 0) ? 2 : 4);
-        } else if (vc == 1) {
-            n = (!cc) ? 1 : ((cc < 0) ? 2 : 4);
-        }
-    } else if (hc == 1) {
-        if (!vc) {
-            n = (!cc) ? 1 : ((cc < 0) ? 2 : 4);
-        } else if (vc == 1) {
-            n = (!cc) ? 4 : ((cc > 0) ? 5 : 3);
-        } else if (vc == -1) {
-            n = (!cc) ? 2 : 3;
-        }
-    } else if (hc == -1) {
-        if (!vc) {
-            n = (!cc) ? 1 : ((cc > 0) ? 2 : 4);
-        } else if (vc == 1) {
-            n = (!cc) ? 2 : 3;
-        } else if (vc == -1) {
-            n = (!cc) ? 4 : ((cc < 0) ? 5 : 3);
-        }
-    }
-
-    return (T1_3D_CTXNO_SC + n);
-}
-
-static int t1_3d_init_ctxno_mag(unsigned int f, int f2)
-{
-    int n;
-    if (!(f2 &
-            T1_3D_REFINE)) { /*First refinement for this coefficient (no previous refinement)*/
-        n = (f & (T1_3D_SIG_PRIM)) ? 1 : 0;
-    } else {
-        n = 2;
-    }
-
-    return (T1_3D_CTXNO_MAG + n);
-}
-
-static int t1_3d_init_spb(unsigned int f)
-{
-    int hc, vc, cc;
-    int n = 0;
-
-    hc = int_min(((f & (T1_3D_SIG_E | T1_3D_SGN_E)) == T1_3D_SIG_E)
-                 + ((f & (T1_3D_SIG_W | T1_3D_SGN_W)) == T1_3D_SIG_W), 1)
-         - int_min(((f & (T1_3D_SIG_E | T1_3D_SGN_E)) == (T1_3D_SIG_E | T1_3D_SGN_E))
-                   + ((f & (T1_3D_SIG_W | T1_3D_SGN_W)) == (T1_3D_SIG_W | T1_3D_SGN_W)), 1);
-
-    vc = int_min(((f & (T1_3D_SIG_N | T1_3D_SGN_N)) == T1_3D_SIG_N)
-                 + ((f & (T1_3D_SIG_S | T1_3D_SGN_S)) == T1_3D_SIG_S), 1)
-         - int_min(((f & (T1_3D_SIG_N | T1_3D_SGN_N)) == (T1_3D_SIG_N | T1_3D_SGN_N))
-                   + ((f & (T1_3D_SIG_S | T1_3D_SGN_S)) == (T1_3D_SIG_S | T1_3D_SGN_S)), 1);
-
-    cc = int_min(((f & (T1_3D_SIG_FC | T1_3D_SGN_F)) == T1_3D_SIG_FC)
-                 + ((f & (T1_3D_SIG_BC | T1_3D_SGN_B)) == T1_3D_SIG_BC), 1)
-         - int_min(((f & (T1_3D_SIG_FC | T1_3D_SGN_F)) == (T1_3D_SIG_FC | T1_3D_SGN_F))
-                   + ((f & (T1_3D_SIG_BC | T1_3D_SGN_B)) == (T1_3D_SIG_BC | T1_3D_SGN_B)), 1);
-
-    n = ((hc + vc + cc) < 0);
-
-    return n;
-}
-
-static void t1_3d_init_luts(opj_t1_3d_t *t1)
-{
-    int i;
-    double u, v, t;
-    /*for (j = 0; j < 4; j++) {
-        for (i = 0; i < 256; ++i) {
-            t1->lut_ctxno_zc[(j << 8) | i] = t1_3d_init_ctxno_zc(i, j);
-        }
-    }
-    for (i = 0; i < 4096; i++) {
-        t1->lut_ctxno_sc[i] = t1_3d_init_ctxno_sc(i << 4);
-    }
-    for (j = 0; j < 2; j++) {
-        for (i = 0; i < 2048; ++i) {
-            t1->lut_ctxno_mag[(j << 11) + i] = t1_3d_init_ctxno_mag((j ? T1_3D_REFINE : 0) | i);
-        }
-    }
-    for (i = 0; i < 4096; ++i) {
-        t1->lut_spb[i] = t1_3d_init_spb(i << 4);
-    }*/
-    /* FIXME FIXME FIXME */
-    for (i = 0; i < (1 << T1_NMSEDEC_BITS); i++) {
-        t = i / pow(2, T1_NMSEDEC_FRACBITS);
-        u = t;
-        v = t - 1.5;
-        t1->lut_nmsedec_sig[i] =
-            int_max(0,
-                    (int)(floor((u * u - v * v) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2,
-                            T1_NMSEDEC_FRACBITS) * 8192.0));
-        t1->lut_nmsedec_sig0[i] =
-            int_max(0,
-                    (int)(floor((u * u) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2,
-                            T1_NMSEDEC_FRACBITS) * 8192.0));
-        u = t - 1.0;
-        if (i & (1 << (T1_NMSEDEC_BITS - 1))) {
-            v = t - 1.5;
-        } else {
-            v = t - 0.5;
-        }
-        t1->lut_nmsedec_ref[i] =
-            int_max(0,
-                    (int)(floor((u * u - v * v) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2,
-                            T1_NMSEDEC_FRACBITS) * 8192.0));
-        t1->lut_nmsedec_ref0[i] =
-            int_max(0,
-                    (int)(floor((u * u) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2,
-                            T1_NMSEDEC_FRACBITS) * 8192.0));
-    }
-}
-
-/* ----------------------------------------------------------------------- */
-
-opj_t1_3d_t* t1_3d_create(opj_common_ptr cinfo)
-{
-    opj_t1_3d_t *t1 = (opj_t1_3d_t*)opj_malloc(sizeof(opj_t1_3d_t));
-    if (t1) {
-        t1->cinfo = cinfo;
-        /* create MQC and RAW handles */
-        t1->mqc = mqc_create();
-        t1->raw = raw_create();
-        /* initialize the look-up tables of the Tier-1 coder/decoder */
-        t1_3d_init_luts(t1);
-    }
-    return t1;
-}
-
-void t1_3d_destroy(opj_t1_3d_t *t1)
-{
-    if (t1) {
-        /* destroy MQC and RAW handles */
-        mqc_destroy(t1->mqc);
-        raw_destroy(t1->raw);
-        opj_free(t1);
-    }
-}
-
-void t1_3d_encode_cblks(opj_t1_3d_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp)
-{
-    int compno, resno, bandno, precno, cblkno;
-    int x, y, z, i, j, k, orient;
-    int level[3];
-    tile->distotile = 0;        /* fixed_quality */
-
-    for (compno = 0; compno < tile->numcomps; compno++) {
-        opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-
-        for (resno = 0; resno < tilec->numresolution[0]; resno++) {
-            opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-
-            for (bandno = 0; bandno < res->numbands; bandno++) {
-                opj_tcd_band_t *band = &res->bands[bandno];
-
-                for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2];
-                        precno++) {
-                    opj_tcd_precinct_t *prc = &band->precincts[precno];
-
-                    for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2];
-                            cblkno++) {
-                        opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
-
-                        if (band->bandno == 0) {
-                            x = cblk->x0 - band->x0;
-                            y = cblk->y0 - band->y0;
-                            z = cblk->z0 - band->z0;
-                        } else if (band->bandno == 1) {
-                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                            y = cblk->y0 - band->y0;
-                            z = cblk->z0 - band->z0;
-                        } else if (band->bandno == 2) {
-                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                            x = cblk->x0 - band->x0;
-                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                            z = cblk->z0 - band->z0;
-                        } else if (band->bandno == 3) {
-                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                            z = cblk->z0 - band->z0;
-                        } else if (band->bandno == 4) {
-                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                            x = cblk->x0 - band->x0;
-                            y = cblk->y0 - band->y0;
-                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                        } else if (band->bandno == 5) {
-                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                            y = cblk->y0 - band->y0;
-                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                        } else if (band->bandno == 6) {
-                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                            x = cblk->x0 - band->x0;
-                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                        } else if (band->bandno == 7) {
-                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                        }
-
-                        if (tcp->tccps[compno].reversible == 1) {
-                            for (k = 0; k < cblk->z1 - cblk->z0; k++) {
-                                for (j = 0; j < cblk->y1 - cblk->y0; j++) {
-                                    for (i = 0; i < cblk->x1 - cblk->x0; i++) {
-                                        t1->data[k][j][i] =
-                                            tilec->data[(x + i) + (y + j) * (tilec->x1 - tilec->x0) + (z + k) *
-                                                                (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] << T1_NMSEDEC_FRACBITS;
-                                    }
-                                }
-                            }
-                        } else if (tcp->tccps[compno].reversible == 0) {
-                            for (k = 0; k < cblk->z1 - cblk->z0; k++) {
-                                for (j = 0; j < cblk->y1 - cblk->y0; j++) {
-                                    for (i = 0; i < cblk->x1 - cblk->x0; i++) {
-                                        t1->data[k][j][i] = fix_mul(
-                                                                tilec->data[(x + i) + (y + j) * (tilec->x1 - tilec->x0) + (z + k) *
-                                                                                    (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)],
-                                                                8192 * 8192 / ((int) floor(band->stepsize * 8192))) >> (13 -
-                                                                        T1_NMSEDEC_FRACBITS);
-                                    }
-                                }
-                            }
-                        }
-                        orient = band->bandno;  /* FIXME */
-                        for (i = 0; i < 3; i++) {
-                            level[i] = tilec->numresolution[i] - 1 - resno;
-                        }
-
-                        t1_3d_encode_cblk(t1, cblk, orient, compno, level, tcp->tccps[compno].dwtid,
-                                          band->stepsize, tcp->tccps[compno].cblksty, tile->numcomps, tile);
-
-                    } /* cblkno */
-                } /* precno */
-            } /* bandno */
-        } /* resno  */
-    } /* compno  */
-}
-
-void t1_3d_decode_cblks(opj_t1_3d_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp)
-{
-    int compno, resno, bandno, precno, cblkno;
-
-    for (compno = 0; compno < tile->numcomps; compno++) {
-        opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-
-        for (resno = 0; resno < tilec->numresolution[0]; resno++) {
-            opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-
-            for (bandno = 0; bandno < res->numbands; bandno++) {
-                opj_tcd_band_t *band = &res->bands[bandno];
-
-                for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2];
-                        precno++) {
-                    opj_tcd_precinct_t *prc = &band->precincts[precno];
-
-                    for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2];
-                            cblkno++) {
-                        int x, y, z, i, j, k, orient;
-                        opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
-
-                        orient = band->bandno;  /* FIXME */
-
-                        /*fprintf(stdout,"[INFO] t1_3d_decode_cblk(t1, cblk, orient(%d), tcp->tccps[compno].roishift (%d), tcp->tccps[compno].cblksty (%d));\n",orient,tcp->tccps[compno].roishift, tcp->tccps[compno].cblksty);*/
-                        t1_3d_decode_cblk(t1, cblk, orient, tcp->tccps[compno].roishift,
-                                          tcp->tccps[compno].cblksty);
-
-                        if (band->bandno == 0) {
-                            x = cblk->x0 - band->x0;
-                            y = cblk->y0 - band->y0;
-                            z = cblk->z0 - band->z0;
-                        } else if (band->bandno == 1) {
-                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                            y = cblk->y0 - band->y0;
-                            z = cblk->z0 - band->z0;
-                        } else if (band->bandno == 2) {
-                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                            x = cblk->x0 - band->x0;
-                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                            z = cblk->z0 - band->z0;
-                        } else if (band->bandno == 3) {
-                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                            z = cblk->z0 - band->z0;
-                        } else if (band->bandno == 4) {
-                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                            x = cblk->x0 - band->x0;
-                            y = cblk->y0 - band->y0;
-                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                        } else if (band->bandno == 5) {
-                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                            y = cblk->y0 - band->y0;
-                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                        } else if (band->bandno == 6) {
-                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                            x = cblk->x0 - band->x0;
-                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                        } else if (band->bandno == 7) {
-                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                        }
-
-                        if (tcp->tccps[compno].roishift) {
-                            int thresh, val, mag;
-                            thresh = 1 << tcp->tccps[compno].roishift;
-                            for (k = 0; k < cblk->z1 - cblk->z0; k++) {
-                                for (j = 0; j < cblk->y1 - cblk->y0; j++) {
-                                    for (i = 0; i < cblk->x1 - cblk->x0; i++) {
-                                        val = t1->data[k][j][i];
-                                        mag = int_abs(val);
-                                        if (mag >= thresh) {
-                                            mag >>= tcp->tccps[compno].roishift;
-                                            t1->data[k][j][i] = val < 0 ? -mag : mag;
-                                        }
-                                    }
-                                }
-                            }
-                        }
-
-                        if (tcp->tccps[compno].reversible == 1) {
-                            for (k = 0; k < cblk->z1 - cblk->z0; k++) {
-                                for (j = 0; j < cblk->y1 - cblk->y0; j++) {
-                                    for (i = 0; i < cblk->x1 - cblk->x0; i++) {
-                                        int tmp = t1->data[k][j][i];
-                                        tilec->data[x + i + (y + j) * (tilec->x1 - tilec->x0) + (z + k) *
-                                                      (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] = tmp / 2;
-                                    }
-                                }
-                            }
-                        } else {        /* if (tcp->tccps[compno].reversible == 0) */
-                            for (k = 0; k < cblk->z1 - cblk->z0; k++) {
-                                for (j = 0; j < cblk->y1 - cblk->y0; j++) {
-                                    for (i = 0; i < cblk->x1 - cblk->x0; i++) {
-                                        double tmp = (double)(t1->data[k][j][i] * band->stepsize * 4096.0);
-                                        if (t1->data[k][j][i] >> 1 == 0) {
-                                            tilec->data[x + i + (y + j) * (tilec->x1 - tilec->x0) + (z + k) *
-                                                          (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] = 0;
-                                        } else {
-                                            int tmp2 = ((int)(floor(fabs(tmp)))) + ((int) floor(fabs(tmp * 2)) % 2);
-                                            tilec->data[x + i + (y + j) * (tilec->x1 - tilec->x0) + (z + k) *
-                                                          (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] = ((tmp < 0) ? -tmp2 : tmp2);
-                                        }
-                                    }
-                                }
-                            }
-                        }
-                    } /* cblkno */
-                } /* precno */
-            } /* bandno */
-        } /* resno */
-    } /* compno */
-}
diff --git a/src/lib/openjp3d/t1_3d.h b/src/lib/openjp3d/t1_3d.h
deleted file mode 100644 (file)
index 4d0ad89..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyrigth (c) 2006, Mónica Díez, LPI-UVA, Spain
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef __T1_3D_H
-#define __T1_3D_H
-/**
-@file t1_3d.h
-@brief Implementation of the tier-1 coding (coding of code-block coefficients) (T1)
-
-The functions in T1_3D.C have for goal to realize the tier-1 coding operation of 3D-EBCOT.
-The functions in T1_3D.C are used by some function in TCD.C.
-*/
-
-/** @defgroup T1_3D T1_3D - Implementation of the tier-1 coding */
-/*@{*/
-
-/* ----------------------------------------------------------------------- */
-
-/* Neighbourhood of 3D EBCOT (Significance context)*/
-#define T1_3D_SIG_NE  0x00000001    /*< Context orientation : North-East direction */
-#define T1_3D_SIG_SE  0x00000002    /*< Context orientation : South-East direction */
-#define T1_3D_SIG_SW  0x00000004    /*< Context orientation : South-West direction */
-#define T1_3D_SIG_NW  0x00000008    /* Context orientation : North-West direction */
-#define T1_3D_SIG_N   0x00000010    /*< Context orientation : North direction */
-#define T1_3D_SIG_E   0x00000020    /*< Context orientation : East direction */
-#define T1_3D_SIG_S   0x00000040    /*< Context orientation : South direction */
-#define T1_3D_SIG_W   0x00000080    /*< Context orientation : West direction */
-#define T1_3D_SIG_FC  0x00000100    /*< Context orientation : Forward Central direction */
-#define T1_3D_SIG_BC  0x00000200    /*< Context orientation : Backward Central direction */
-#define T1_3D_SIG_FNE 0x00000400    /*< Context orientation : Forward North-East direction */
-#define T1_3D_SIG_FSE 0x00000800    /*< Context orientation : Forward South-East direction */
-#define T1_3D_SIG_FSW 0x00001000    /*< Context orientation : Forward South-West direction */
-#define T1_3D_SIG_FNW 0x00002000    /*< Context orientation : Forward North-West direction */
-#define T1_3D_SIG_FN  0x00004000    /*< Context orientation : Forward North direction */
-#define T1_3D_SIG_FE  0x00008000    /*< Context orientation : Forward East direction */
-#define T1_3D_SIG_FS  0x00010000    /*< Context orientation : Forward South direction */
-#define T1_3D_SIG_FW  0x00020000    /*< Context orientation : Forward West direction */
-#define T1_3D_SIG_BNE 0x00040000    /*< Context orientation : Backward North-East direction */
-#define T1_3D_SIG_BSE 0x00080000    /*< Context orientation : Backward South-East direction */
-#define T1_3D_SIG_BSW 0x00100000    /*< Context orientation : Backward South-West direction */
-#define T1_3D_SIG_BNW 0x00200000    /*< Context orientation : Backward North-West direction */
-#define T1_3D_SIG_BN  0x00400000    /*< Context orientation : Backward North direction */
-#define T1_3D_SIG_BE  0x00800000    /*< Context orientation : Backward East direction */
-#define T1_3D_SIG_BS  0x01000000    /*< Context orientation : Backward South direction */
-#define T1_3D_SIG_BW  0x02000000    /*< Context orientation : Backward West direction */
-#define T1_3D_SIG_COTH  (T1_3D_SIG_N|T1_3D_SIG_NE|T1_3D_SIG_E|T1_3D_SIG_SE|T1_3D_SIG_S|T1_3D_SIG_SW|T1_3D_SIG_W|T1_3D_SIG_NW)
-#define T1_3D_SIG_BOTH  (T1_3D_SIG_BN|T1_3D_SIG_BNE|T1_3D_SIG_BE|T1_3D_SIG_BSE|T1_3D_SIG_BS|T1_3D_SIG_BSW|T1_3D_SIG_BW|T1_3D_SIG_BNW|T1_3D_SIG_BC)
-#define T1_3D_SIG_FOTH  (T1_3D_SIG_FN|T1_3D_SIG_FNE|T1_3D_SIG_FE|T1_3D_SIG_FSE|T1_3D_SIG_FS|T1_3D_SIG_FSW|T1_3D_SIG_FW|T1_3D_SIG_FNW|T1_3D_SIG_FC)
-#define T1_3D_SIG_OTH   (T1_3D_SIG_FOTH|T1_3D_SIG_BOTH|T1_3D_SIG_COTH)
-#define T1_3D_SIG_PRIM  (T1_3D_SIG_N|T1_3D_SIG_E|T1_3D_SIG_S|T1_3D_SIG_W|T1_3D_SIG_FC|T1_3D_SIG_BC)
-
-#define T1_3D_SGN_N     0x0400
-#define T1_3D_SGN_E     0x0800
-#define T1_3D_SGN_S     0x1000
-#define T1_3D_SGN_W     0x2000
-#define T1_3D_SGN_F     0x4000
-#define T1_3D_SGN_B     0x8000
-#define T1_3D_SGN       (T1_3D_SGN_N|T1_3D_SGN_E|T1_3D_SGN_S|T1_3D_SGN_W|T1_3D_SGN_F|T1_3D_SGN_B)
-
-#define T1_3D_SIG       0x0001  /*Significance state*/
-#define T1_3D_REFINE    0x0002  /*Delayed significance*/
-#define T1_3D_VISIT     0x0004  /*First-pass membership*/
-
-#define T1_3D_NUMCTXS_AGG   1
-#define T1_3D_NUMCTXS_ZC    16
-#define T1_3D_NUMCTXS_MAG   3
-#define T1_3D_NUMCTXS_SC    6
-#define T1_3D_NUMCTXS_UNI   1
-
-#define T1_3D_CTXNO_AGG 0
-#define T1_3D_CTXNO_ZC  (T1_3D_CTXNO_AGG+T1_3D_NUMCTXS_AGG) /*1*/
-#define T1_3D_CTXNO_MAG (T1_3D_CTXNO_ZC+T1_3D_NUMCTXS_ZC)   /*17*/
-#define T1_3D_CTXNO_SC  (T1_3D_CTXNO_MAG+T1_3D_NUMCTXS_MAG) /*20*/
-#define T1_3D_CTXNO_UNI (T1_3D_CTXNO_SC+T1_3D_NUMCTXS_SC)   /*26*/
-#define T1_3D_NUMCTXS   (T1_3D_CTXNO_UNI+T1_3D_NUMCTXS_UNI) /*27*/
-
-
-/* ----------------------------------------------------------------------- */
-
-/**
-Tier-1 coding (coding of code-block coefficients)
-*/
-typedef struct opj_t1_3d {
-    /** Codec context */
-    opj_common_ptr cinfo;
-    /** MQC component */
-    opj_mqc_t *mqc;
-    /** RAW component */
-    opj_raw_t *raw;
-    /** LUTs for decoding normalised MSE */
-    int lut_nmsedec_sig[1 << T1_NMSEDEC_BITS];
-    int lut_nmsedec_sig0[1 << T1_NMSEDEC_BITS];
-    int lut_nmsedec_ref[1 << T1_NMSEDEC_BITS];
-    int lut_nmsedec_ref0[1 << T1_NMSEDEC_BITS];
-    /** Codeblock data */
-    int data[T1_CBLKD][T1_CBLKH][T1_CBLKW];
-    /** Context information for each voxel in codeblock */
-    unsigned int flags[T1_CBLKD + 2][T1_CBLKH + 2][T1_CBLKH + 2];
-    /** Voxel information (significance/visited/refined) */
-    int flagSVR[T1_CBLKD + 2][T1_CBLKH + 2][T1_CBLKH + 2];
-} opj_t1_3d_t;
-
-/** @name Exported functions */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-/**
-Create a new T1_3D handle
-and initialize the look-up tables of the Tier-1 coder/decoder
-@return Returns a new T1 handle if successful, returns NULL otherwise
-@see t1_init_luts
-*/
-opj_t1_3d_t* t1_3d_create(opj_common_ptr cinfo);
-/**
-Destroy a previously created T1_3D handle
-@param t1 T1_3D handle to destroy
-*/
-void t1_3d_destroy(opj_t1_3d_t *t1);
-/**
-Encode the code-blocks of a tile
-@param t1 T1_3D handle
-@param tile The tile to encode
-@param tcp Tile coding parameters
-*/
-void t1_3d_encode_cblks(opj_t1_3d_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp);
-/**
-Decode the code-blocks of a tile
-@param t1 T1_3D handle
-@param tile The tile to decode
-@param tcp Tile coding parameters
-*/
-void t1_3d_decode_cblks(opj_t1_3d_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp);
-/**
-Get weigths of MSE decoding
-@param nmsedec The normalized MSE reduction
-@param compno
-@param level
-@param orient
-@param bpno
-@param reversible
-@param stepsize
-@param numcomps
-@param dwtid
-returns MSE associated to decoding pass
-double t1_3d_getwmsedec(int nmsedec, int compno, int levelxy, int levelz, int orient, int bpno, int reversible, double stepsize, int numcomps, int dwtid);
-*/
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif /* __T1_H */
diff --git a/src/lib/openjp3d/t2.c b/src/lib/openjp3d/t2.c
deleted file mode 100644 (file)
index 9856d1d..0000000
+++ /dev/null
@@ -1,731 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "opj_includes.h"
-
-/** @defgroup T2 T2 - Implementation of a tier-2 coding */
-/*@{*/
-
-/** @name Local static functions */
-/*@{*/
-
-static void t2_putcommacode(opj_bio_t *bio, int n);
-static int t2_getcommacode(opj_bio_t *bio);
-/**
-Variable length code for signalling delta Zil (truncation point)
-@param bio Bit Input/Output component
-@param n delta Zil
-*/
-static void t2_putnumpasses(opj_bio_t *bio, int n);
-static int t2_getnumpasses(opj_bio_t *bio);
-/**
-Encode a packet of a tile to a destination buffer
-@param tile Tile for which to write the packets
-@param tcp Tile coding parameters
-@param pi Packet identity
-@param dest Destination buffer
-@param len Length of the destination buffer
-@param volume_info Structure to create an index file
-@param tileno Number of the tile encoded
-@param cp Coding parameters
-@return Number of bytes encoded from the packet
-*/
-static int t2_encode_packet(opj_tcd_tile_t *tile, opj_tcp_t *tcp,
-                            opj_pi_iterator_t *pi, unsigned char *dest, int len,
-                            opj_volume_info_t *volume_info, int tileno, opj_cp_t *cp);
-/**
-Initialize the segment decoder
-@param seg Segment instance
-@param cblksty Codeblock style
-@param first Is first segment
-*/
-static void t2_init_seg(opj_tcd_seg_t *seg, int cblksty, int first);
-/**
-Decode a packet of a tile from a source buffer
-@param t2 T2 handle
-@param src Source buffer
-@param len Length of the source buffer
-@param tile Tile for which to write the packets
-@param tcp Tile coding parameters
-@param pi Packet identity
-@return Number of bytes decoded from the packet
-*/
-int t2_decode_packet(opj_t2_t* t2, unsigned char *src, int len,
-                     opj_tcd_tile_t *tile, opj_tcp_t *tcp, opj_pi_iterator_t *pi);
-
-/*@}*/
-
-/*@}*/
-
-/* ----------------------------------------------------------------------- */
-
-/* #define RESTART 0x04 */
-static void t2_putcommacode(opj_bio_t *bio, int n)
-{
-    while (--n >= 0) {
-        bio_write(bio, 1, 1);
-    }
-    bio_write(bio, 0, 1);
-}
-
-static int t2_getcommacode(opj_bio_t *bio)
-{
-    int n;
-    for (n = 0; bio_read(bio, 1); n++) {
-        ;
-    }
-    return n;
-}
-
-static void t2_putnumpasses(opj_bio_t *bio, int n)
-{
-    if (n == 1) {
-        bio_write(bio, 0, 1);
-    } else if (n == 2) {
-        bio_write(bio, 2, 2);
-    } else if (n <= 5) {
-        bio_write(bio, 0xc | (n - 3), 4);
-    } else if (n <= 36) {
-        bio_write(bio, 0x1e0 | (n - 6), 9);
-    } else if (n <= 164) {
-        bio_write(bio, 0xff80 | (n - 37), 16);
-    }
-}
-
-static int t2_getnumpasses(opj_bio_t *bio)
-{
-    int n;
-    if (!bio_read(bio, 1)) {
-        return 1;
-    }
-    if (!bio_read(bio, 1)) {
-        return 2;
-    }
-    if ((n = bio_read(bio, 2)) != 3) {
-        return (3 + n);
-    }
-    if ((n = bio_read(bio, 5)) != 31) {
-        return (6 + n);
-    }
-    return (37 + bio_read(bio, 7));
-}
-
-static int t2_encode_packet(opj_tcd_tile_t * tile, opj_tcp_t * tcp,
-                            opj_pi_iterator_t *pi, unsigned char *dest, int len,
-                            opj_volume_info_t * volume_info, int tileno, opj_cp_t *cp)
-{
-    int bandno, cblkno;
-    unsigned char *sop = 0, *eph = 0;
-    unsigned char *c = dest;
-
-    int compno = pi->compno;    /* component value */
-    int resno  = pi->resno;     /* resolution level value */
-    int precno = pi->precno;    /* precinct value */
-    int layno  = pi->layno;     /* quality layer value */
-
-    opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-    opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-
-    opj_bio_t *bio = NULL;  /* BIO component */
-
-    /* <SOP 0xff91> */
-    if ((tcp->csty & J3D_CP_CSTY_SOP)) {
-        sop = (unsigned char *) opj_malloc(6 * sizeof(unsigned char));
-        sop[0] = 255;
-        sop[1] = 145;
-        sop[2] = 0;
-        sop[3] = 4;
-        sop[4] = (volume_info) ? (volume_info->num % 65536) / 256 : (0 % 65536) / 256 ;
-        sop[5] = (volume_info) ? (volume_info->num % 65536) % 256 : (0 % 65536) % 256 ;
-        memcpy(c, sop, 6);
-        opj_free(sop);
-        c += 6;
-    }
-    /* </SOP> */
-
-    if (!layno) {
-        for (bandno = 0; bandno < res->numbands; bandno++) {
-            opj_tcd_band_t *band = &res->bands[bandno];
-            opj_tcd_precinct_t *prc = &band->precincts[precno];
-            tgt_reset(prc->incltree);
-            tgt_reset(prc->imsbtree);
-            for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2];
-                    cblkno++) {
-                opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
-                cblk->numpasses = 0;
-                tgt_setvalue(prc->imsbtree, cblkno, band->numbps - cblk->numbps);
-            }
-        }
-    }
-
-    bio = bio_create();
-    bio_init_enc(bio, c, len);
-    bio_write(bio, 1, 1);       /* Empty header bit */
-
-    /* Writing Packet header */
-    for (bandno = 0; bandno < res->numbands; bandno++) {
-        opj_tcd_band_t *band = &res->bands[bandno];
-        opj_tcd_precinct_t *prc = &band->precincts[precno];
-        for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2];
-                cblkno++) {
-            opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
-            opj_tcd_layer_t *layer = &cblk->layers[layno];
-            if (!cblk->numpasses && layer->numpasses) {
-                tgt_setvalue(prc->incltree, cblkno, layno);
-            }
-        }
-
-        for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2];
-                cblkno++) {
-            opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
-            opj_tcd_layer_t *layer = &cblk->layers[layno];
-            int increment = 0;
-            int nump = 0;
-            int len = 0, passno;
-            /* cblk inclusion bits */
-            if (!cblk->numpasses) {
-                tgt_encode(bio, prc->incltree, cblkno, layno + 1);
-            } else {
-                bio_write(bio, layer->numpasses != 0, 1);
-            }
-            /* if cblk not included, go to the next cblk  */
-            if (!layer->numpasses) {
-                continue;
-            }
-            /* if first instance of cblk --> zero bit-planes information */
-            if (!cblk->numpasses) {
-                cblk->numlenbits = 3;
-                tgt_encode(bio, prc->imsbtree, cblkno, 999);
-            }
-            /* number of coding passes included */
-            t2_putnumpasses(bio, layer->numpasses);
-
-            /* computation of the increase of the length indicator and insertion in the header     */
-            for (passno = cblk->numpasses; passno < cblk->numpasses + layer->numpasses;
-                    passno++) {
-                opj_tcd_pass_t *pass = &cblk->passes[passno];
-                nump++;
-                len += pass->len;
-                if (pass->term || passno == (cblk->numpasses + layer->numpasses) - 1) {
-                    increment = int_max(increment,
-                                        int_floorlog2(len) + 1 - (cblk->numlenbits + int_floorlog2(nump)));
-                    len = 0;
-                    nump = 0;
-                }
-            }
-            t2_putcommacode(bio, increment);
-
-            /* computation of the new Length indicator */
-            cblk->numlenbits += increment;
-
-            /* insertion of the codeword segment length */
-            for (passno = cblk->numpasses; passno < cblk->numpasses + layer->numpasses;
-                    passno++) {
-                opj_tcd_pass_t *pass = &cblk->passes[passno];
-                nump++;
-                len += pass->len;
-                if (pass->term || passno == (cblk->numpasses + layer->numpasses) - 1) {
-                    bio_write(bio, len, cblk->numlenbits + int_floorlog2(nump));
-                    len = 0;
-                    nump = 0;
-                }
-            }
-
-        }
-    }
-
-
-    if (bio_flush(bio)) {
-        bio_destroy(bio);
-        return -999;        /* modified to eliminate longjmp !! */
-    }
-
-    c += bio_numbytes(bio);
-
-    bio_destroy(bio);
-
-    /* <EPH 0xff92> */
-    if (tcp->csty & J3D_CP_CSTY_EPH) {
-        eph = (unsigned char *) opj_malloc(2 * sizeof(unsigned char));
-        eph[0] = 255;
-        eph[1] = 146;
-        memcpy(c, eph, 2);
-        opj_free(eph);
-        c += 2;
-    }
-    /* </EPH> */
-
-    /* Writing the packet body */
-
-    for (bandno = 0; bandno < res->numbands; bandno++) {
-        opj_tcd_band_t *band = &res->bands[bandno];
-        opj_tcd_precinct_t *prc = &band->precincts[precno];
-        for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2];
-                cblkno++) {
-            opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
-            opj_tcd_layer_t *layer = &cblk->layers[layno];
-            if (!layer->numpasses) {
-                continue;
-            }
-            if (c + layer->len > dest + len) {
-                return -999;
-            }
-
-            memcpy(c, layer->data, layer->len);
-            cblk->numpasses += layer->numpasses;
-            c += layer->len;
-            /* ADD for index Cfr. Marcela --> delta disto by packet */
-            if (volume_info && volume_info->index_write && volume_info->index_on) {
-                opj_tile_info_t *info_TL = &volume_info->tile[tileno];
-                opj_packet_info_t *info_PK = &info_TL->packet[volume_info->num];
-                info_PK->disto += layer->disto;
-                if (volume_info->D_max < info_PK->disto) {
-                    volume_info->D_max = info_PK->disto;
-                }
-            }
-            /* </ADD> */
-        }
-    }
-
-    return (c - dest);
-}
-
-static void t2_init_seg(opj_tcd_seg_t * seg, int cblksty, int first)
-{
-    seg->numpasses = 0;
-    seg->len = 0;
-    if (cblksty & J3D_CCP_CBLKSTY_TERMALL) {
-        seg->maxpasses = 1;
-    } else if (cblksty & J3D_CCP_CBLKSTY_LAZY) {
-        if (first) {
-            seg->maxpasses = 10;
-        } else {
-            seg->maxpasses = (((seg - 1)->maxpasses == 1) ||
-                              ((seg - 1)->maxpasses == 10)) ? 2 : 1;
-        }
-    } else {
-        seg->maxpasses = 109;
-    }
-}
-
-int t2_decode_packet(opj_t2_t* t2, unsigned char *src, int len,
-                     opj_tcd_tile_t *tile, opj_tcp_t *tcp, opj_pi_iterator_t *pi)
-{
-    int bandno, cblkno;
-    unsigned char *c = src;
-
-    opj_cp_t *cp = t2->cp;
-
-    int compno = pi->compno;    /* component value */
-    int resno  = pi->resno;     /* resolution level value */
-    int precno = pi->precno;    /* precinct value */
-    int layno  = pi->layno;     /* quality layer value */
-
-    opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-    opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-
-    unsigned char *hd = NULL;
-    int present;
-
-    opj_bio_t *bio = NULL;  /* BIO component */
-
-    if (layno == 0) {
-        for (bandno = 0; bandno < res->numbands; bandno++) {
-            opj_tcd_band_t *band = &res->bands[bandno];
-            opj_tcd_precinct_t *prc = &band->precincts[precno];
-
-            if ((band->x1 - band->x0 == 0) || (band->y1 - band->y0 == 0) ||
-                    (band->z1 - band->z0 == 0)) {
-                continue;
-            }
-
-            tgt_reset(prc->incltree);
-            tgt_reset(prc->imsbtree);
-            for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2];
-                    cblkno++) {
-                opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
-                cblk->numsegs = 0;
-            }
-        }
-    }
-
-    /* SOP markers */
-
-    if (tcp->csty & J3D_CP_CSTY_SOP) {
-        if ((*c) != 0xff || (*(c + 1) != 0x91)) {
-            opj_event_msg(t2->cinfo, EVT_WARNING, "Expected SOP marker\n");
-        } else {
-            c += 6;
-        }
-
-        /** TODO : check the Nsop value */
-    }
-
-    /*
-    When the marker PPT/PPM is used the packet header are store in PPT/PPM marker
-    This part deal with this caracteristic
-    step 1: Read packet header in the saved structure
-    step 2: Return to codestream for decoding
-    */
-
-    bio = bio_create();
-
-    if (cp->ppm == 1) {     /* PPM */
-        hd = cp->ppm_data;
-        bio_init_dec(bio, hd, cp->ppm_len);
-    } else if (tcp->ppt == 1) { /* PPT */
-        hd = tcp->ppt_data;
-        bio_init_dec(bio, hd, tcp->ppt_len);
-    } else {            /* Normal Case */
-        hd = c;
-        bio_init_dec(bio, hd, src + len - hd);
-    }
-
-    present = bio_read(bio, 1);
-
-    if (!present) {
-        bio_inalign(bio);
-        hd += bio_numbytes(bio);
-        bio_destroy(bio);
-
-        /* EPH markers */
-
-        if (tcp->csty & J3D_CP_CSTY_EPH) {
-            if ((*hd) != 0xff || (*(hd + 1) != 0x92)) {
-                printf("Error : expected EPH marker\n");
-            } else {
-                hd += 2;
-            }
-        }
-
-        if (cp->ppm == 1) {     /* PPM case */
-            cp->ppm_len += cp->ppm_data - hd;
-            cp->ppm_data = hd;
-            return (c - src);
-        }
-        if (tcp->ppt == 1) {    /* PPT case */
-            tcp->ppt_len += tcp->ppt_data - hd;
-            tcp->ppt_data = hd;
-            return (c - src);
-        }
-
-        return (hd - src);
-    }
-
-    for (bandno = 0; bandno < res->numbands; bandno++) {
-        opj_tcd_band_t *band = &res->bands[bandno];
-        opj_tcd_precinct_t *prc = &band->precincts[precno];
-
-        if ((band->x1 - band->x0 == 0) || (band->y1 - band->y0 == 0) ||
-                (band->z1 - band->z0 == 0)) {
-            continue;
-        }
-
-        for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2];
-                cblkno++) {
-            int included, increment, n;
-            opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
-            opj_tcd_seg_t *seg = NULL;
-            /* if cblk not yet included before --> inclusion tagtree */
-            if (!cblk->numsegs) {
-                included = tgt_decode(bio, prc->incltree, cblkno, layno + 1);
-                /* else one bit */
-            } else {
-                included = bio_read(bio, 1);
-            }
-            /* if cblk not included */
-            if (!included) {
-                cblk->numnewpasses = 0;
-                continue;
-            }
-            /* if cblk not yet included --> zero-bitplane tagtree */
-            if (!cblk->numsegs) {
-                int i, numimsbs;
-                for (i = 0; !tgt_decode(bio, prc->imsbtree, cblkno, i); i++);
-                numimsbs = i - 1;
-                cblk->numbps = band->numbps - numimsbs;
-                cblk->numlenbits = 3;
-            }
-            /* number of coding passes */
-            cblk->numnewpasses = t2_getnumpasses(bio);
-            increment = t2_getcommacode(bio);
-            /* length indicator increment */
-            cblk->numlenbits += increment;
-            if (!cblk->numsegs) {
-                seg = &cblk->segs[0];
-                t2_init_seg(seg, tcp->tccps[compno].cblksty, 1);
-            } else {
-                seg = &cblk->segs[cblk->numsegs - 1];
-                if (seg->numpasses == seg->maxpasses) {
-                    t2_init_seg(++seg, tcp->tccps[compno].cblksty, 0);
-                }
-            }
-            n = cblk->numnewpasses;
-
-            do {
-                seg->numnewpasses = int_min(seg->maxpasses - seg->numpasses, n);
-                seg->newlen = bio_read(bio,
-                                       cblk->numlenbits + int_floorlog2(seg->numnewpasses));
-                n -= seg->numnewpasses;
-                if (n > 0) {
-                    t2_init_seg(++seg, tcp->tccps[compno].cblksty, 0);
-                }
-            } while (n > 0);
-        }
-    }
-
-    if (bio_inalign(bio)) {
-        bio_destroy(bio);
-        return -999;
-    }
-
-    hd += bio_numbytes(bio);
-    bio_destroy(bio);
-
-    /* EPH markers */
-    if (tcp->csty & J3D_CP_CSTY_EPH) {
-        if ((*hd) != 0xff || (*(hd + 1) != 0x92)) {
-            opj_event_msg(t2->cinfo, EVT_ERROR, "Expected EPH marker\n");
-            return -999;
-        } else {
-            hd += 2;
-        }
-    }
-
-    if (cp->ppm == 1) {
-        cp->ppm_len += cp->ppm_data - hd;
-        cp->ppm_data = hd;
-    } else if (tcp->ppt == 1) {
-        tcp->ppt_len += tcp->ppt_data - hd;
-        tcp->ppt_data = hd;
-    } else {
-        c = hd;
-    }
-
-    for (bandno = 0; bandno < res->numbands; bandno++) {
-        opj_tcd_band_t *band = &res->bands[bandno];
-        opj_tcd_precinct_t *prc = &band->precincts[precno];
-
-        if ((band->x1 - band->x0 == 0) || (band->y1 - band->y0 == 0) ||
-                (band->z1 - band->z0 == 0)) {
-            continue;
-        }
-
-        for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2];
-                cblkno++) {
-            opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
-            opj_tcd_seg_t *seg = NULL;
-            if (!cblk->numnewpasses) {
-                continue;
-            }
-            if (!cblk->numsegs) {
-                seg = &cblk->segs[0];
-                cblk->numsegs++;
-                cblk->len = 0;
-            } else {
-                seg = &cblk->segs[cblk->numsegs - 1];
-                if (seg->numpasses == seg->maxpasses) {
-                    seg++;
-                    cblk->numsegs++;
-                }
-            }
-
-            do {
-                if (c + seg->newlen > src + len) {
-                    return -999;
-                }
-
-                memcpy(cblk->data + cblk->len, c, seg->newlen);
-                if (seg->numpasses == 0) {
-                    seg->data = cblk->data + cblk->len;
-                }
-                c += seg->newlen;
-                cblk->len += seg->newlen;
-                seg->len += seg->newlen;
-                seg->numpasses += seg->numnewpasses;
-                cblk->numnewpasses -= seg->numnewpasses;
-                if (cblk->numnewpasses > 0) {
-                    seg++;
-                    cblk->numsegs++;
-                }
-            } while (cblk->numnewpasses > 0);
-        }
-    }
-
-    return (c - src);
-}
-
-/* ----------------------------------------------------------------------- */
-
-int t2_encode_packets(opj_t2_t* t2, int tileno, opj_tcd_tile_t *tile,
-                      int maxlayers, unsigned char *dest, int len, opj_volume_info_t *volume_info)
-{
-    unsigned char *c = dest;
-    int e = 0;
-    opj_pi_iterator_t *pi = NULL;
-    int pino;
-
-    opj_volume_t *volume = t2->volume;
-    opj_cp_t *cp = t2->cp;
-
-    /* create a packet iterator */
-    pi = pi_create(volume, cp, tileno);
-    if (!pi) {
-        fprintf(stdout, "[ERROR] Failed to create a pi structure\n");
-        return -999;
-    }
-
-    if (volume_info) {
-        volume_info->num = 0;
-    }
-
-    for (pino = 0; pino <= cp->tcps[tileno].numpocs; pino++) {
-        while (pi_next(&pi[pino])) {
-            if (pi[pino].layno < maxlayers) {
-                e = t2_encode_packet(tile, &cp->tcps[tileno], &pi[pino], c, dest + len - c,
-                                     volume_info, tileno, cp);
-                /*opj_event_msg(t2->cinfo, EVT_INFO, "  t2_encode_packet: %d bytes coded\n",e);*/
-                if (e == -999) {
-                    break;
-                } else {
-                    c += e;
-                }
-
-                /* INDEX >> */
-                if (volume_info && volume_info->index_on) {
-                    if (volume_info->index_write) {
-                        opj_tile_info_t *info_TL = &volume_info->tile[tileno];
-                        opj_packet_info_t *info_PK = &info_TL->packet[volume_info->num];
-                        if (!volume_info->num) {
-                            info_PK->start_pos = info_TL->end_header + 1;
-                        } else {
-                            info_PK->start_pos = info_TL->packet[volume_info->num - 1].end_pos + 1;
-                        }
-                        info_PK->end_pos = info_PK->start_pos + e - 1;
-                    }
-
-                    volume_info->num++;
-                }
-                /* << INDEX */
-            }
-        }
-    }
-
-    /* don't forget to release pi */
-    pi_destroy(pi, cp, tileno);
-
-    if (e == -999) {
-        return e;
-    }
-
-    return (c - dest);
-}
-
-int t2_decode_packets(opj_t2_t *t2, unsigned char *src, int len, int tileno,
-                      opj_tcd_tile_t *tile)
-{
-    unsigned char *c = src;
-    opj_pi_iterator_t *pi;
-    int pino, e = 0;
-    int n = 0, i;
-
-    opj_volume_t *volume = t2->volume;
-    opj_cp_t *cp = t2->cp;
-
-    /* create a packet iterator */
-    pi = pi_create(volume, cp, tileno);
-    if (!pi) {
-        /* TODO: throw an error */
-        return -999;
-    }
-
-    for (pino = 0; pino <= cp->tcps[tileno].numpocs; pino++) {
-        while (pi_next(&pi[pino])) {
-            if ((cp->layer == 0) || (cp->layer >= ((pi[pino].layno) + 1))) {
-                e = t2_decode_packet(t2, c, src + len - c, tile, &cp->tcps[tileno], &pi[pino]);
-            } else {
-                e = 0;
-            }
-
-            /* progression in resolution */
-            for (i = 0; i < 3; i++) {
-                volume->comps[pi[pino].compno].resno_decoded[i] = (e > 0) ? int_max(
-                            pi[pino].resno, volume->comps[pi[pino].compno].resno_decoded[i]) :
-                        volume->comps[pi[pino].compno].resno_decoded[i];
-            }
-            n++;
-
-            if (e == -999) {        /* ADD */
-                break;
-            } else {
-                opj_event_msg(t2->cinfo, EVT_INFO, "  t2_decode_packet: %d bytes decoded\n", e);
-                c += e;
-            }
-        }
-    }
-
-    /* don't forget to release pi */
-    pi_destroy(pi, cp, tileno);
-
-    if (e == -999) {
-        return e;
-    }
-
-    return (c - src);
-}
-
-/* ----------------------------------------------------------------------- */
-
-opj_t2_t* t2_create(opj_common_ptr cinfo, opj_volume_t *volume, opj_cp_t *cp)
-{
-    /* create the tcd structure */
-    opj_t2_t *t2 = (opj_t2_t*)opj_malloc(sizeof(opj_t2_t));
-    if (!t2) {
-        return NULL;
-    }
-    t2->cinfo = cinfo;
-    t2->volume = volume;
-    t2->cp = cp;
-
-    return t2;
-}
-
-void t2_destroy(opj_t2_t *t2)
-{
-    if (t2) {
-        opj_free(t2);
-    }
-}
-
diff --git a/src/lib/openjp3d/t2.h b/src/lib/openjp3d/t2.h
deleted file mode 100644 (file)
index 36733f9..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * Copyright (c) 2006, Mónica Díez García, Image Processing Laboratory, University of Valladolid, Spain
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef __T2_H
-#define __T2_H
-/**
-@file t2.h
-@brief Implementation of a tier-2 coding (packetization of code-block data) (T2)
-
-*/
-
-/** @defgroup T2 T2 - Implementation of a tier-2 coding */
-/*@{*/
-
-/**
-Tier-2 coding
-*/
-typedef struct opj_t2 {
-    /** Codec context */
-    opj_common_ptr cinfo;
-    /** Encoding: pointer to the src volume. Decoding: pointer to the dst volume. */
-    opj_volume_t *volume;
-    /** Pointer to the volume coding parameters */
-    opj_cp_t *cp;
-} opj_t2_t;
-
-/** @name Funciones generales */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-
-/**
-Encode the packets of a tile to a destination buffer
-@param t2 T2 handle
-@param tileno number of the tile encoded
-@param tile the tile for which to write the packets
-@param maxlayers maximum number of layers
-@param dest the destination buffer
-@param len the length of the destination buffer
-@param volume_info structure to create an index file
-@return Number of bytes written from packets
-*/
-int t2_encode_packets(opj_t2_t* t2, int tileno, opj_tcd_tile_t *tile,
-                      int maxlayers, unsigned char *dest, int len, opj_volume_info_t *volume_info);
-
-/**
-Decode the packets of a tile from a source buffer
-@param t2 T2 handle
-@param src the source buffer
-@param len length of the source buffer
-@param tileno number that identifies the tile for which to decode the packets
-@param tile tile for which to decode the packets
-@return Number of bytes read from packets
- */
-int t2_decode_packets(opj_t2_t *t2, unsigned char *src, int len, int tileno,
-                      opj_tcd_tile_t *tile);
-
-/**
-Create a T2 handle
-@param cinfo Codec context info
-@param volume Source or destination volume
-@param cp Volume coding parameters
-@return Returns a new T2 handle if successful, returns NULL otherwise
-*/
-opj_t2_t* t2_create(opj_common_ptr cinfo, opj_volume_t *volume, opj_cp_t *cp);
-/**
-Destroy a T2 handle
-@param t2 T2 handle to destroy
-*/
-void t2_destroy(opj_t2_t *t2);
-
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif /* __T2_H */
diff --git a/src/lib/openjp3d/tcd.c b/src/lib/openjp3d/tcd.c
deleted file mode 100644 (file)
index 714a056..0000000
+++ /dev/null
@@ -1,1948 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * Copyright (c) 2006, Mónica Díez, LPI-UVA, Spain
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "opj_includes.h"
-
-void tcd_dump(FILE *fd, opj_tcd_t *tcd, opj_tcd_volume_t * vol)
-{
-    int tileno, compno, resno, bandno, precno, cblkno;
-
-    fprintf(fd, "volume {\n");
-    fprintf(fd, "  tw=%d, th=%d, tl=%d, x0=%d x1=%d y0=%d y1=%d z0=%d z1=%d\n",
-            vol->tw, vol->th, vol->tl, tcd->volume->x0, tcd->volume->x1, tcd->volume->y0,
-            tcd->volume->y1, tcd->volume->z0, tcd->volume->z1);
-
-    for (tileno = 0; tileno < vol->th * vol->tw * vol->tl; tileno++) {
-        opj_tcd_tile_t *tile = &tcd->tcd_volume->tiles[tileno];
-        fprintf(fd, "  tile {\n");
-        fprintf(fd, "    x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d, numcomps=%d\n",
-                tile->x0, tile->y0, tile->z0, tile->x1, tile->y1, tile->z1, tile->numcomps);
-        for (compno = 0; compno < tile->numcomps; compno++) {
-            opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-            fprintf(fd, "    tilecomp %d {\n", compno);
-            fprintf(fd,
-                    "     x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d, numresx=%d, numresy=%d, numresz=%d\n",
-                    tilec->x0, tilec->y0, tilec->z0, tilec->x1, tilec->y1, tilec->z1,
-                    tilec->numresolution[0], tilec->numresolution[1], tilec->numresolution[2]);
-            for (resno = 0; resno < tilec->numresolution[0]; resno++) {
-                opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-                fprintf(fd, "     res %d{\n", resno);
-                fprintf(fd,
-                        "      x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d, pw=%d, ph=%d, pl=%d, numbands=%d\n",
-                        res->x0, res->y0, res->z0, res->x1, res->y1, res->z1, res->prctno[0],
-                        res->prctno[1], res->prctno[2], res->numbands);
-                for (bandno = 0; bandno < res->numbands; bandno++) {
-                    opj_tcd_band_t *band = &res->bands[bandno];
-                    fprintf(fd, "       band %d{\n", bandno);
-                    fprintf(fd,
-                            "           x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d, stepsize=%f, numbps=%d\n",
-                            band->x0, band->y0, band->z0, band->x1, band->y1, band->z1, band->stepsize,
-                            band->numbps);
-                    for (precno = 0; precno < (res->prctno[0] * res->prctno[1] * res->prctno[2]);
-                            precno++) {
-                        opj_tcd_precinct_t *prec = &band->precincts[precno];
-                        fprintf(fd, "            prec %d{\n", precno);
-                        fprintf(fd,
-                                "                 x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d, cw=%d, ch=%d, cl=%d,\n",
-                                prec->x0, prec->y0, prec->z0, prec->x1, prec->y1, prec->z1, prec->cblkno[0],
-                                prec->cblkno[1], prec->cblkno[2]);
-                        for (cblkno = 0; cblkno < (prec->cblkno[0] * prec->cblkno[1] * prec->cblkno[2]);
-                                cblkno++) {
-                            opj_tcd_cblk_t *cblk = &prec->cblks[cblkno];
-                            fprintf(fd, "                  cblk %d{\n", cblkno);
-                            fprintf(fd, "                   x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d\n", cblk->x0,
-                                    cblk->y0, cblk->z0, cblk->x1, cblk->y1, cblk->z1);
-                            fprintf(fd, "            }\n");
-                        }
-                        fprintf(fd, "          }\n");
-                    }
-                    fprintf(fd, "        }\n");
-                }
-                fprintf(fd, "      }\n");
-            }
-            fprintf(fd, "    }\n");
-        }
-        fprintf(fd, "  }\n");
-    }
-    fprintf(fd, "}\n");
-}
-
-static void tilec_dump(FILE *fd, opj_tcd_tilecomp_t *tilec)
-{
-
-    int i = 0, k;
-    int datalen;
-    int *a;
-
-    fprintf(fd, "    tilecomp{\n");
-    fprintf(fd,
-            "     x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d, numresx=%d, numresy=%d, numresz=%d\n",
-            tilec->x0, tilec->y0, tilec->z0, tilec->x1, tilec->y1, tilec->z1,
-            tilec->numresolution[0], tilec->numresolution[1], tilec->numresolution[2]);
-    fprintf(fd, "     data {\n");
-    datalen = (tilec->z1 - tilec->z0) * (tilec->y1 - tilec->y0) *
-              (tilec->x1 - tilec->x0);
-    a = tilec->data;
-    for (k = 0; k < datalen; k++) {
-        if (!(k % tilec->x1)) {
-            fprintf(fd, "\n");
-        }
-        if (!(k % (tilec->y1 * tilec->x1))) {
-            fprintf(fd, "Slice %d\n", i++);
-        }
-        fprintf(fd, " %d", a[k]);
-
-
-    }
-    fprintf(fd, "     }\n");
-    /*i=0;
-    fprintf(fd, "Slice %d\n");
-    if (tilec->prediction->prederr) {
-        fprintf(fd, "     prederror {\n");
-        a = tilec->prediction->prederr;
-        for (k = 0; k < datalen; k++) {
-            fprintf(fd," %d",*(a++));
-            if (!(k % (tilec->y1 - tilec->y0) * (tilec->x1 - tilec->x0))){
-                fprintf(fd, "\n");fprintf(fd, "Slice %d\n",i++);
-            }
-            if (!(k % (tilec->x1 - tilec->x0))){
-                fprintf(fd, "\n");
-            }
-        }
-    }
-    fprintf(fd, "     }\n");*/
-    fprintf(fd, "}\n");
-}
-
-/* ----------------------------------------------------------------------- */
-
-/**
-Create a new TCD handle
-*/
-opj_tcd_t* tcd_create(opj_common_ptr cinfo)
-{
-    /* create the tcd structure */
-    opj_tcd_t *tcd = (opj_tcd_t*)opj_malloc(sizeof(opj_tcd_t));
-    if (!tcd) {
-        return NULL;
-    }
-    tcd->cinfo = cinfo;
-    tcd->tcd_volume = (opj_tcd_volume_t*)opj_malloc(sizeof(opj_tcd_volume_t));
-    if (!tcd->tcd_volume) {
-        opj_free(tcd);
-        return NULL;
-    }
-
-    return tcd;
-}
-
-/**
-Destroy a previously created TCD handle
-*/
-void tcd_destroy(opj_tcd_t *tcd)
-{
-    if (tcd) {
-        opj_free(tcd->tcd_volume);
-        opj_free(tcd);
-    }
-}
-
-/* ----------------------------------------------------------------------- */
-void tcd_malloc_encode(opj_tcd_t *tcd, opj_volume_t * volume, opj_cp_t * cp,
-                       int curtileno)
-{
-    int compno, resno, bandno, precno, cblkno, i, j;/*, k;*/
-
-    opj_tcd_tile_t      *tile = NULL;       /* pointer to tcd->tile */
-    opj_tcd_tilecomp_t  *tilec = NULL;      /* pointer to tcd->tilec */
-    opj_tcd_resolution_t    *res = NULL;        /* pointer to tcd->res */
-    opj_tcd_band_t      *band = NULL;       /* pointer to tcd->band */
-    opj_tcd_precinct_t  *prc = NULL;        /* pointer to tcd->prc */
-    opj_tcd_cblk_t      *cblk = NULL;       /* pointer to tcd->cblk */
-    opj_tcp_t       *tcp = &cp->tcps[curtileno];
-    int p, q, r;
-
-    tcd->volume = volume;
-    tcd->cp = cp;
-    tcd->tcd_volume->tw = cp->tw;
-    tcd->tcd_volume->th = cp->th;
-    tcd->tcd_volume->tl = cp->tl;
-    tcd->tcd_volume->tiles = (opj_tcd_tile_t *) opj_malloc(sizeof(opj_tcd_tile_t));
-    tcd->tile = tcd->tcd_volume->tiles;
-    tile = tcd->tile;
-
-
-    /* p61 ISO/IEC IS15444-1 : 2002 */
-    /* curtileno --> raster scanned index of tiles */
-    /* p,q,r --> matricial index of tiles */
-    p = curtileno % cp->tw;
-    q = curtileno / cp->tw;
-    r = curtileno / (cp->tw * cp->th); /* extension to 3-D */
-
-    /* 4 borders of the tile rescale on the volume if necessary (B.3)*/
-    tile->x0 = int_max(cp->tx0 + p * cp->tdx, volume->x0);
-    tile->y0 = int_max(cp->ty0 + q * cp->tdy, volume->y0);
-    tile->z0 = int_max(cp->tz0 + r * cp->tdz, volume->z0);
-    tile->x1 = int_min(cp->tx0 + (p + 1) * cp->tdx, volume->x1);
-    tile->y1 = int_min(cp->ty0 + (q + 1) * cp->tdy, volume->y1);
-    tile->z1 = int_min(cp->tz0 + (r + 1) * cp->tdz, volume->z1);
-    tile->numcomps = volume->numcomps;
-
-    /* Modification of the RATE >> */
-    for (j = 0; j < tcp->numlayers; j++) {
-        if (tcp->rates[j] <= 1) {
-            tcp->rates[j] = 0;
-        } else {
-            float num = (float)tile->numcomps * (tile->x1 - tile->x0) *
-                        (tile->y1 - tile->y0) * (tile->z1 - tile->z0) * volume->comps[0].prec;
-            float den = 8.0f * volume->comps[0].dx * volume->comps[0].dy *
-                        volume->comps[0].dz;
-            den = tcp->rates[j] * den;
-            tcp->rates[j] = (num + den - 1) / den;
-        }
-        /*tcp->rates[j] = tcp->rates[j] ? int_ceildiv(
-            tile->numcomps * (tile->x1 - tile->x0) * (tile->y1 - tile->y0) * (tile->z1 - tile->z0) * volume->comps[0].prec,
-            (tcp->rates[j] * 8 * volume->comps[0].dx * volume->comps[0].dy * volume->comps[0].dz)) : 0;*/
-        if (tcp->rates[j]) {
-            if (j && tcp->rates[j] < tcp->rates[j - 1] + 10) {
-                tcp->rates[j] = tcp->rates[j - 1] + 20;
-            } else if (!j && tcp->rates[j] < 30) {
-                tcp->rates[j] = 30;
-            }
-        }
-    }
-    /* << Modification of the RATE */
-
-    tile->comps = (opj_tcd_tilecomp_t *) opj_malloc(volume->numcomps * sizeof(
-                      opj_tcd_tilecomp_t));
-    for (compno = 0; compno < tile->numcomps; compno++) {
-        opj_tccp_t *tccp = &tcp->tccps[compno];
-        int res_max;
-        int prevnumbands = 0;
-
-        /* opj_tcd_tilecomp_t *tilec=&tile->comps[compno]; */
-        tcd->tilec = &tile->comps[compno];
-        tilec = tcd->tilec;
-
-        /* border of each tile component (global) (B.3) */
-        tilec->x0 = int_ceildiv(tile->x0, volume->comps[compno].dx);
-        tilec->y0 = int_ceildiv(tile->y0, volume->comps[compno].dy);
-        tilec->z0 = int_ceildiv(tile->z0, volume->comps[compno].dz);
-        tilec->x1 = int_ceildiv(tile->x1, volume->comps[compno].dx);
-        tilec->y1 = int_ceildiv(tile->y1, volume->comps[compno].dy);
-        tilec->z1 = int_ceildiv(tile->z1, volume->comps[compno].dz);
-
-        tilec->data = (int *) opj_malloc((tilec->x1 - tilec->x0) *
-                                         (tilec->y1 - tilec->y0) * (tilec->z1 - tilec->z0) * sizeof(int));
-
-        res_max = 0;
-        for (i = 0; i < 3; i++) {
-            tilec->numresolution[i] = tccp->numresolution[i];
-            /*Greater of 3 resolutions contains all information*/
-            res_max = (tilec->numresolution[i] > res_max) ? tilec->numresolution[i] :
-                      res_max;
-        }
-
-
-        tilec->resolutions = (opj_tcd_resolution_t *) opj_malloc(res_max * sizeof(
-                                 opj_tcd_resolution_t));
-        for (resno = 0; resno < res_max; resno++) {
-
-            int pdx, pdy, pdz;
-            int tlprcxstart, tlprcystart, tlprczstart;
-            int brprcxend, brprcyend, brprczend;
-            int tlcbgxstart, tlcbgystart, tlcbgzstart;
-            int brcbgxend, brcbgyend, brcbgzend;
-            int cbgwidthexpn, cbgheightexpn, cbglengthexpn;
-            int cblkwidthexpn, cblkheightexpn, cblklengthexpn;
-
-            int diff = tccp->numresolution[0] - tccp->numresolution[2];
-            int levelnox = tilec->numresolution[0] - 1 - resno;
-            int levelnoy = tilec->numresolution[1] - 1 - resno;
-            int levelnoz = tilec->numresolution[2] - 1 - ((resno <= diff) ? 0 :
-                           (resno - diff));
-            if (levelnoz < 0) {
-                levelnoz = 0;
-            }
-
-            /* opj_tcd_resolution_t *res=&tilec->resolutions[resno]; */
-            tcd->res = &tilec->resolutions[resno];
-            res = tcd->res;
-
-            /* border for each resolution level (global) (B.14)*/
-            res->x0 = int_ceildivpow2(tilec->x0, levelnox);
-            res->y0 = int_ceildivpow2(tilec->y0, levelnoy);
-            res->z0 = int_ceildivpow2(tilec->z0, levelnoz);
-            res->x1 = int_ceildivpow2(tilec->x1, levelnox);
-            res->y1 = int_ceildivpow2(tilec->y1, levelnoy);
-            res->z1 = int_ceildivpow2(tilec->z1, levelnoz);
-            /*if (res->z1 < 0)fprintf(stdout,"Res: %d       %d/%d --> %d\n",resno,tilec->z1, levelnoz, int_ceildivpow2(tilec->z1, levelnoz));*/
-
-            res->numbands = (resno == 0) ? 1 : (resno <= diff) ? 3 : 7; /* --> 3D */
-
-            /* p. 30, table A-13, ISO/IEC IS154444-1 : 2002 */
-            if (tccp->csty & J3D_CCP_CSTY_PRT) {
-                pdx = tccp->prctsiz[0][resno];
-                pdy = tccp->prctsiz[1][resno];
-                pdz = tccp->prctsiz[2][resno];
-            } else {
-                pdx = 15;
-                pdy = 15;
-                pdz = 15;
-            }
-
-            /* p. 66, B.16, ISO/IEC IS15444-1 : 2002  */
-            tlprcxstart = int_floordivpow2(res->x0, pdx) << pdx;
-            tlprcystart = int_floordivpow2(res->y0, pdy) << pdy;
-            tlprczstart = int_floordivpow2(res->z0, pdz) << pdz;
-            brprcxend = int_ceildivpow2(res->x1, pdx) << pdx;
-            brprcyend = int_ceildivpow2(res->y1, pdy) << pdy;
-            brprczend = int_ceildivpow2(res->z1, pdz) << pdz;
-
-            res->prctno[0] = (brprcxend - tlprcxstart) >> pdx;
-            res->prctno[1] = (brprcyend - tlprcystart) >> pdy;
-            res->prctno[2] = (brprczend - tlprczstart) >> pdz;
-            if (res->prctno[2] == 0) {
-                res->prctno[2] = 1;
-            }
-
-            /* p. 67, B.17 & B.18, ISO/IEC IS15444-1 : 2002  */
-            if (resno == 0) {
-                tlcbgxstart = tlprcxstart;
-                tlcbgystart = tlprcystart;
-                tlcbgzstart = tlprczstart;
-                brcbgxend = brprcxend;
-                brcbgyend = brprcyend;
-                brcbgzend = brprczend;
-                cbgwidthexpn = pdx;
-                cbgheightexpn = pdy;
-                cbglengthexpn = pdz;
-            } else {
-                tlcbgxstart = int_ceildivpow2(tlprcxstart, 1);
-                tlcbgystart = int_ceildivpow2(tlprcystart, 1);
-                tlcbgzstart = int_ceildivpow2(tlprczstart, 1);
-                brcbgxend = int_ceildivpow2(brprcxend, 1);
-                brcbgyend = int_ceildivpow2(brprcyend, 1);
-                brcbgzend = int_ceildivpow2(brprczend, 1);
-                cbgwidthexpn = pdx - 1;
-                cbgheightexpn = pdy - 1;
-                cbglengthexpn = pdz - 1;
-            }
-
-            cblkwidthexpn = int_min(tccp->cblk[0], cbgwidthexpn); /*6*/
-            cblkheightexpn = int_min(tccp->cblk[1], cbgheightexpn); /*6*/
-            cblklengthexpn = int_min(tccp->cblk[2], cbglengthexpn); /*6*/
-
-            res->bands = (opj_tcd_band_t *) opj_malloc(res->numbands * sizeof(
-                             opj_tcd_band_t));
-            for (bandno = 0; bandno < res->numbands; bandno++) {
-                int x0b, y0b, z0b, i;
-                int gain, numbps;
-                opj_stepsize_t *ss = NULL;
-
-                tcd->band = &res->bands[bandno];
-                band = tcd->band;
-
-                band->bandno = (resno == 0) ? 0 : bandno + 1;
-                /* Bandno:  0 - LLL     2 - LHL
-                            1 - HLL     3 - HHL
-                            4 - LLH     6 - LHH
-                            5 - HLH     7 - HHH     */
-                x0b = (band->bandno == 1) || (band->bandno == 3) || (band->bandno == 5) ||
-                      (band->bandno == 7) ? 1 : 0;
-                y0b = (band->bandno == 2) || (band->bandno == 3) || (band->bandno == 6) ||
-                      (band->bandno == 7) ? 1 : 0;
-                z0b = (band->bandno == 4) || (band->bandno == 5) || (band->bandno == 6) ||
-                      (band->bandno == 7) ? 1 : 0;
-
-                /* p. 65, B.15, ISO/IEC IS15444-1 : 2002  */
-                if (band->bandno == 0) {
-                    /* band border (global) */
-                    band->x0 = int_ceildivpow2(tilec->x0, levelnox);
-                    band->y0 = int_ceildivpow2(tilec->y0, levelnoy);
-                    band->z0 = int_ceildivpow2(tilec->z0, levelnoz);
-                    band->x1 = int_ceildivpow2(tilec->x1, levelnox);
-                    band->y1 = int_ceildivpow2(tilec->y1, levelnoy);
-                    band->z1 = int_ceildivpow2(tilec->z1, levelnoz);
-                } else {
-                    band->x0 = int_ceildivpow2(tilec->x0 - (1 << levelnox) * x0b, levelnox + 1);
-                    band->y0 = int_ceildivpow2(tilec->y0 - (1 << levelnoy) * y0b, levelnoy + 1);
-                    band->z0 = int_ceildivpow2(tilec->z0 - (1 << levelnoz) * z0b,
-                                               (resno <= diff) ? levelnoz : levelnoz + 1);
-                    band->x1 = int_ceildivpow2(tilec->x1 - (1 << levelnox) * x0b, levelnox + 1);
-                    band->y1 = int_ceildivpow2(tilec->y1 - (1 << levelnoy) * y0b, levelnoy + 1);
-                    band->z1 = int_ceildivpow2(tilec->z1 - (1 << levelnoz) * z0b,
-                                               (resno <= diff) ? levelnoz : levelnoz + 1);
-                }
-
-                ss = &tccp->stepsizes[(resno == 0) ? 0 : (prevnumbands + bandno + 1)];
-                if (bandno == (res->numbands - 1)) {
-                    prevnumbands += (resno == 0) ? 0 : res->numbands;
-                }
-                gain = dwt_getgain(band->bandno, tccp->reversible);
-                numbps = volume->comps[compno].prec + gain;
-                band->stepsize = (float)((1.0 + ss->mant / 2048.0) * pow(2.0,
-                                         numbps - ss->expn));
-                band->numbps = ss->expn + tccp->numgbits - 1;   /* WHY -1 ? */
-
-                band->precincts = (opj_tcd_precinct_t *) opj_malloc((res->prctno[0] *
-                                  res->prctno[1] * res->prctno[2]) * sizeof(opj_tcd_precinct_t));
-
-                for (i = 0; i < (res->prctno[0] * res->prctno[1] * res->prctno[2]); i++) {
-                    band->precincts[i].imsbtree = NULL;
-                    band->precincts[i].incltree = NULL;
-                }
-
-                for (precno = 0; precno < (res->prctno[0] * res->prctno[1] * res->prctno[2]);
-                        precno++) {
-                    int tlcblkxstart, tlcblkystart, tlcblkzstart, brcblkxend, brcblkyend,
-                        brcblkzend;
-                    int cbgxstart, cbgystart, cbgzstart, cbgxend, cbgyend, cbgzend;
-
-                    cbgxstart = tlcbgxstart + (precno % res->prctno[0]) * (1 << cbgwidthexpn);
-                    cbgystart = tlcbgystart + ((precno % (res->prctno[0] * res->prctno[1])) /
-                                               res->prctno[0]) * (1 << cbgheightexpn);
-                    cbgzstart = tlcbgzstart + (precno / (res->prctno[0] * res->prctno[1])) *
-                                (1 << cbglengthexpn);
-                    cbgxend = cbgxstart + (1 << cbgwidthexpn);
-                    cbgyend = cbgystart + (1 << cbgheightexpn);
-                    cbgzend = cbgzstart + (1 << cbglengthexpn);
-
-                    tcd->prc = &band->precincts[precno];
-                    prc = tcd->prc;
-
-                    /* precinct size (global) */
-                    prc->x0 = int_max(cbgxstart, band->x0);
-                    prc->y0 = int_max(cbgystart, band->y0);
-                    prc->z0 = int_max(cbgzstart, band->z0);
-                    prc->x1 = int_min(cbgxend, band->x1);
-                    prc->y1 = int_min(cbgyend, band->y1);
-                    prc->z1 = int_min(cbgzend, band->z1);
-
-                    tlcblkxstart = int_floordivpow2(prc->x0, cblkwidthexpn) << cblkwidthexpn;
-                    tlcblkystart = int_floordivpow2(prc->y0, cblkheightexpn) << cblkheightexpn;
-                    tlcblkzstart = int_floordivpow2(prc->z0, cblklengthexpn) << cblklengthexpn;
-                    brcblkxend = int_ceildivpow2(prc->x1, cblkwidthexpn) << cblkwidthexpn;
-                    brcblkyend = int_ceildivpow2(prc->y1, cblkheightexpn) << cblkheightexpn;
-                    brcblkzend = int_ceildivpow2(prc->z1, cblklengthexpn) << cblklengthexpn;
-                    prc->cblkno[0] = (brcblkxend - tlcblkxstart) >> cblkwidthexpn;
-                    prc->cblkno[1] = (brcblkyend - tlcblkystart) >> cblkheightexpn;
-                    prc->cblkno[2] = (brcblkzend - tlcblkzstart) >> cblklengthexpn;
-                    prc->cblkno[2] = (prc->cblkno[2] == 0) ? 1 : prc->cblkno[2];
-
-                    prc->cblks = (opj_tcd_cblk_t *) opj_malloc((prc->cblkno[0] * prc->cblkno[1] *
-                                 prc->cblkno[2]) * sizeof(opj_tcd_cblk_t));
-                    prc->incltree = tgt_create(prc->cblkno[0], prc->cblkno[1], prc->cblkno[2]);
-                    prc->imsbtree = tgt_create(prc->cblkno[0], prc->cblkno[1], prc->cblkno[2]);
-                    /*tgt_tree_dump(stdout,prc->incltree);*/
-                    for (cblkno = 0; cblkno < (prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]);
-                            cblkno++) {
-                        int cblkxstart = tlcblkxstart + (cblkno % prc->cblkno[0]) *
-                                         (1 << cblkwidthexpn);
-                        int cblkystart = tlcblkystart + ((cblkno % (prc->cblkno[0] * prc->cblkno[1])) /
-                                                         prc->cblkno[0]) * (1 << cblkheightexpn);
-                        int cblkzstart = tlcblkzstart + (cblkno / (prc->cblkno[0] * prc->cblkno[1])) *
-                                         (1 << cblklengthexpn);
-                        int cblkxend = cblkxstart + (1 << cblkwidthexpn);
-                        int cblkyend = cblkystart + (1 << cblkheightexpn);
-                        int cblkzend = cblkzstart + (1 << cblklengthexpn);
-                        int prec = ((tilec->bpp > 16) ? 3 : ((tilec->bpp > 8) ? 2 : 1));
-
-                        tcd->cblk = &prc->cblks[cblkno];
-                        cblk = tcd->cblk;
-
-                        /* code-block size (global) */
-                        cblk->x0 = int_max(cblkxstart, prc->x0);
-                        cblk->y0 = int_max(cblkystart, prc->y0);
-                        cblk->z0 = int_max(cblkzstart, prc->z0);
-                        cblk->x1 = int_min(cblkxend, prc->x1);
-                        cblk->y1 = int_min(cblkyend, prc->y1);
-                        cblk->z1 = int_min(cblkzend, prc->z1);
-                    }
-                }
-            }
-        }
-    }
-    /*tcd_dump(stdout, tcd, tcd->tcd_volume);*/
-
-}
-void tcd_init_encode(opj_tcd_t *tcd, opj_volume_t * volume, opj_cp_t * cp,
-                     int curtileno)
-{
-    int compno, resno, bandno, precno, cblkno;
-    int j, p, q, r;
-
-    opj_tcd_tile_t      *tile = NULL;       /* pointer to tcd->tile */
-    opj_tcd_tilecomp_t  *tilec = NULL;      /* pointer to tcd->tilec */
-    opj_tcd_resolution_t    *res = NULL;    /* pointer to tcd->res */
-    opj_tcd_band_t      *band = NULL;       /* pointer to tcd->band */
-    opj_tcd_precinct_t  *prc = NULL;        /* pointer to tcd->prc */
-    opj_tcd_cblk_t      *cblk = NULL;       /* pointer to tcd->cblk */
-    opj_tcp_t *tcp = &cp->tcps[curtileno];
-
-    tcd->tile = tcd->tcd_volume->tiles;
-    tile = tcd->tile;
-
-    /* p61 ISO/IEC IS15444-1 : 2002 */
-    /* curtileno --> raster scanned index of tiles */
-    /* p,q,r --> matricial index of tiles */
-    p = curtileno % cp->tw;
-    q = curtileno / cp->tw;
-    r = curtileno / (cp->tw * cp->th); /* extension to 3-D */
-
-    /* 4 borders of the tile rescale on the volume if necessary (B.3)*/
-    tile->x0 = int_max(cp->tx0 + p * cp->tdx, volume->x0);
-    tile->y0 = int_max(cp->ty0 + q * cp->tdy, volume->y0);
-    tile->z0 = int_max(cp->tz0 + r * cp->tdz, volume->z0);
-    tile->x1 = int_min(cp->tx0 + (p + 1) * cp->tdx, volume->x1);
-    tile->y1 = int_min(cp->ty0 + (q + 1) * cp->tdy, volume->y1);
-    tile->z1 = int_min(cp->tz0 + (r + 1) * cp->tdz, volume->z1);
-    tile->numcomps = volume->numcomps;
-
-    /* Modification of the RATE >> */
-    for (j = 0; j < tcp->numlayers; j++) {
-        if (tcp->rates[j] <= 1) {
-            tcp->rates[j] = 0;
-        } else {
-            float num = (float)tile->numcomps * (tile->x1 - tile->x0) *
-                        (tile->y1 - tile->y0) * (tile->z1 - tile->z0) * volume->comps[0].prec;
-            float den = 8.0f * volume->comps[0].dx * volume->comps[0].dy *
-                        volume->comps[0].dz;
-            den = tcp->rates[j] * den;
-            tcp->rates[j] = (num + den - 1) / den;
-        }
-        /*tcp->rates[j] = tcp->rates[j] ? int_ceildiv(
-            tile->numcomps * (tile->x1 - tile->x0) * (tile->y1 - tile->y0) * (tile->z1 - tile->z0) * volume->comps[0].prec,
-            (tcp->rates[j] * 8 * volume->comps[0].dx * volume->comps[0].dy * volume->comps[0].dz)) : 0;*/
-        if (tcp->rates[j]) {
-            if (j && tcp->rates[j] < tcp->rates[j - 1] + 10) {
-                tcp->rates[j] = tcp->rates[j - 1] + 20;
-            } else if (!j && tcp->rates[j] < 30) {
-                tcp->rates[j] = 30;
-            }
-        }
-    }
-    /* << Modification of the RATE */
-
-    for (compno = 0; compno < tile->numcomps; compno++) {
-        opj_tccp_t *tccp = &tcp->tccps[compno];
-        int res_max, i;
-        int prevnumbands = 0;
-
-        /* opj_tcd_tilecomp_t *tilec=&tile->comps[compno]; */
-        tcd->tilec = &tile->comps[compno];
-        tilec = tcd->tilec;
-
-        /* border of each tile component (global) (B.3) */
-        tilec->x0 = int_ceildiv(tile->x0, volume->comps[compno].dx);
-        tilec->y0 = int_ceildiv(tile->y0, volume->comps[compno].dy);
-        tilec->z0 = int_ceildiv(tile->z0, volume->comps[compno].dz);
-        tilec->x1 = int_ceildiv(tile->x1, volume->comps[compno].dx);
-        tilec->y1 = int_ceildiv(tile->y1, volume->comps[compno].dy);
-        tilec->z1 = int_ceildiv(tile->z1, volume->comps[compno].dz);
-
-        tilec->data = (int *) opj_malloc((tilec->x1 - tilec->x0) *
-                                         (tilec->y1 - tilec->y0) * (tilec->z1 - tilec->z0) * sizeof(int));
-
-        res_max = 0;
-        for (i = 0; i < 3; i++) {
-            tilec->numresolution[i] = tccp->numresolution[i];
-            /*Greater of 3 resolutions contains all information*/
-            res_max = (tilec->numresolution[i] > res_max) ? tilec->numresolution[i] :
-                      res_max;
-        }
-
-        tilec->resolutions = (opj_tcd_resolution_t *) opj_malloc(res_max * sizeof(
-                                 opj_tcd_resolution_t));
-        for (resno = 0; resno < res_max; resno++) {
-            int pdx, pdy, pdz;
-            int tlprcxstart, tlprcystart, tlprczstart, brprcxend, brprcyend, brprczend;
-            int tlcbgxstart, tlcbgystart, tlcbgzstart, brcbgxend, brcbgyend, brcbgzend;
-            int cbgwidthexpn, cbgheightexpn, cbglengthexpn;
-            int cblkwidthexpn, cblkheightexpn, cblklengthexpn;
-
-            int levelnox = tilec->numresolution[0] - 1 - resno;
-            int levelnoy = tilec->numresolution[1] - 1 - resno;
-            int diff = tccp->numresolution[0] - tccp->numresolution[2];
-            int levelnoz = tilec->numresolution[2] - 1 - ((resno <= diff) ? 0 :
-                           (resno - diff));
-            if (levelnoz < 0) {
-                levelnoz = 0;
-            }
-
-            tcd->res = &tilec->resolutions[resno];
-            res = tcd->res;
-
-            /* border for each resolution level (global) (B.14)*/
-            res->x0 = int_ceildivpow2(tilec->x0, levelnox);
-            res->y0 = int_ceildivpow2(tilec->y0, levelnoy);
-            res->z0 = int_ceildivpow2(tilec->z0, levelnoz);
-            res->x1 = int_ceildivpow2(tilec->x1, levelnox);
-            res->y1 = int_ceildivpow2(tilec->y1, levelnoy);
-            res->z1 = int_ceildivpow2(tilec->z1, levelnoz);
-
-            /* res->numbands = resno == 0 ? 1 : 3; *//* --> 2D */
-
-            res->numbands = (resno == 0) ? 1 : (resno <= diff) ? 3 : 7; /* --> 3D */
-
-            /* p. 30, table A-13, ISO/IEC IS154444-1 : 2002 */
-            if (tccp->csty & J3D_CCP_CSTY_PRT) {
-                pdx = tccp->prctsiz[0][resno];
-                pdy = tccp->prctsiz[1][resno];
-                pdz = tccp->prctsiz[2][resno];
-            } else {
-                pdx = 15;
-                pdy = 15;
-                pdz = 15;
-            }
-            /* p. 66, B.16, ISO/IEC IS15444-1 : 2002  */
-            tlprcxstart = int_floordivpow2(res->x0, pdx) << pdx;
-            tlprcystart = int_floordivpow2(res->y0, pdy) << pdy;
-            tlprczstart = int_floordivpow2(res->z0, pdz) << pdz;
-            brprcxend = int_ceildivpow2(res->x1, pdx) << pdx;
-            brprcyend = int_ceildivpow2(res->y1, pdy) << pdy;
-            brprczend = int_ceildivpow2(res->z1, pdz) << pdz;
-
-            res->prctno[0] = (brprcxend - tlprcxstart) >> pdx;
-            res->prctno[1] = (brprcyend - tlprcystart) >> pdy;
-            res->prctno[2] = (brprczend - tlprczstart) >> pdz;
-            if (res->prctno[2] == 0) {
-                res->prctno[2] = 1;
-            }
-
-            /* p. 67, B.17 & B.18, ISO/IEC IS15444-1 : 2002  */
-            if (resno == 0) {
-                tlcbgxstart = tlprcxstart;
-                tlcbgystart = tlprcystart;
-                tlcbgzstart = tlprczstart;
-                brcbgxend = brprcxend;
-                brcbgyend = brprcyend;
-                brcbgzend = brprczend;
-                cbgwidthexpn = pdx;
-                cbgheightexpn = pdy;
-                cbglengthexpn = pdz;
-            } else {
-                tlcbgxstart = int_ceildivpow2(tlprcxstart, 1);
-                tlcbgystart = int_ceildivpow2(tlprcystart, 1);
-                tlcbgzstart = int_ceildivpow2(tlprczstart, 1);
-                brcbgxend = int_ceildivpow2(brprcxend, 1);
-                brcbgyend = int_ceildivpow2(brprcyend, 1);
-                brcbgzend = int_ceildivpow2(brprczend, 1);
-                cbgwidthexpn = pdx - 1;
-                cbgheightexpn = pdy - 1;
-                cbglengthexpn = pdz - 1;
-            }
-
-            cblkwidthexpn = int_min(tccp->cblk[0], cbgwidthexpn);
-            cblkheightexpn = int_min(tccp->cblk[1], cbgheightexpn);
-            cblklengthexpn = int_min(tccp->cblk[2], cbglengthexpn);
-
-            res->bands = (opj_tcd_band_t *) opj_malloc(res->numbands * sizeof(
-                             opj_tcd_band_t));
-            for (bandno = 0; bandno < res->numbands; bandno++) {
-                int x0b, y0b, z0b;
-                int gain, numbps;
-                opj_stepsize_t *ss = NULL;
-
-                tcd->band = &res->bands[bandno];
-                band = tcd->band;
-
-                band->bandno = resno == 0 ? 0 : bandno + 1;
-                /* Bandno:  0 - LLL     2 - LHL
-                            1 - HLL     3 - HHL
-                            4 - LLH     6 - LHH
-                            5 - HLH     7 - HHH     */
-                x0b = (band->bandno == 1) || (band->bandno == 3) || (band->bandno == 5) ||
-                      (band->bandno == 7) ? 1 : 0;
-                y0b = (band->bandno == 2) || (band->bandno == 3) || (band->bandno == 6) ||
-                      (band->bandno == 7) ? 1 : 0;
-                z0b = (band->bandno == 4) || (band->bandno == 5) || (band->bandno == 6) ||
-                      (band->bandno == 7) ? 1 : 0;
-
-                /* p. 65, B.15, ISO/IEC IS15444-1 : 2002  */
-                if (band->bandno == 0) {
-                    /* band border (global) */
-                    band->x0 = int_ceildivpow2(tilec->x0, levelnox);
-                    band->y0 = int_ceildivpow2(tilec->y0, levelnoy);
-                    band->z0 = int_ceildivpow2(tilec->z0, levelnoz);
-                    band->x1 = int_ceildivpow2(tilec->x1, levelnox);
-                    band->y1 = int_ceildivpow2(tilec->y1, levelnoy);
-                    band->z1 = int_ceildivpow2(tilec->z1, levelnoz);
-                } else {
-                    band->x0 = int_ceildivpow2(tilec->x0 - (1 << levelnox) * x0b, levelnox + 1);
-                    band->y0 = int_ceildivpow2(tilec->y0 - (1 << levelnoy) * y0b, levelnoy + 1);
-                    band->z0 = int_ceildivpow2(tilec->z0 - (1 << levelnoz) * z0b,
-                                               (resno <= diff) ? levelnoz : levelnoz + 1);
-                    band->x1 = int_ceildivpow2(tilec->x1 - (1 << levelnox) * x0b, levelnox + 1);
-                    band->y1 = int_ceildivpow2(tilec->y1 - (1 << levelnoy) * y0b, levelnoy + 1);
-                    band->z1 = int_ceildivpow2(tilec->z1 - (1 << levelnoz) * z0b,
-                                               (resno <= diff) ? levelnoz : levelnoz + 1);
-                }
-
-                ss = &tccp->stepsizes[(resno == 0) ? 0 : (prevnumbands + bandno + 1)];
-                if (bandno == (res->numbands - 1)) {
-                    prevnumbands += (resno == 0) ? 0 : res->numbands;
-                }
-                gain = dwt_getgain(band->bandno, tccp->reversible);
-                numbps = volume->comps[compno].prec + gain;
-
-                band->stepsize = (float)((1.0 + ss->mant / 2048.0) * pow(2.0,
-                                         numbps - ss->expn));
-                band->numbps = ss->expn + tccp->numgbits - 1;   /* WHY -1 ? */
-
-                for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2];
-                        precno++) {
-                    int tlcblkxstart, tlcblkystart, tlcblkzstart, brcblkxend, brcblkyend,
-                        brcblkzend;
-
-                    int cbgxstart = tlcbgxstart + (precno % res->prctno[0]) * (1 << cbgwidthexpn);
-                    int cbgystart = tlcbgystart + ((precno / (res->prctno[0] * res->prctno[1])) /
-                                                   res->prctno[0]) * (1 << cbgheightexpn);
-                    int cbgzstart = tlcbgzstart + (precno / (res->prctno[0] * res->prctno[1])) *
-                                    (1 << cbglengthexpn);
-                    int cbgxend = cbgxstart + (1 << cbgwidthexpn);
-                    int cbgyend = cbgystart + (1 << cbgheightexpn);
-                    int cbgzend = cbgzstart + (1 << cbglengthexpn);
-
-                    /* opj_tcd_precinct_t *prc=&band->precincts[precno]; */
-                    tcd->prc = &band->precincts[precno];
-                    prc = tcd->prc;
-
-                    /* precinct size (global) */
-                    prc->x0 = int_max(cbgxstart, band->x0);
-                    prc->y0 = int_max(cbgystart, band->y0);
-                    prc->z0 = int_max(cbgzstart, band->z0);
-                    prc->x1 = int_min(cbgxend, band->x1);
-                    prc->y1 = int_min(cbgyend, band->y1);
-                    prc->z1 = int_min(cbgzend, band->z1);
-
-                    tlcblkxstart = int_floordivpow2(prc->x0, cblkwidthexpn) << cblkwidthexpn;
-                    tlcblkystart = int_floordivpow2(prc->y0, cblkheightexpn) << cblkheightexpn;
-                    tlcblkzstart = int_floordivpow2(prc->z0, cblklengthexpn) << cblklengthexpn;
-                    brcblkxend = int_ceildivpow2(prc->x1, cblkwidthexpn) << cblkwidthexpn;
-                    brcblkyend = int_ceildivpow2(prc->y1, cblkheightexpn) << cblkheightexpn;
-                    brcblkzend = int_ceildivpow2(prc->z1, cblklengthexpn) << cblklengthexpn;
-                    prc->cblkno[0] = (brcblkxend - tlcblkxstart) >> cblkwidthexpn;
-                    prc->cblkno[1] = (brcblkyend - tlcblkystart) >> cblkheightexpn;
-                    prc->cblkno[2] = (brcblkzend - tlcblkzstart) >> cblklengthexpn;
-                    prc->cblkno[2] = (prc->cblkno[2] == 0) ? 1 : prc->cblkno[2];
-
-                    opj_free(prc->cblks);
-                    prc->cblks = (opj_tcd_cblk_t *) opj_malloc((prc->cblkno[0] * prc->cblkno[1] *
-                                 prc->cblkno[2]) * sizeof(opj_tcd_cblk_t));
-                    prc->incltree = tgt_create(prc->cblkno[0], prc->cblkno[1], prc->cblkno[2]);
-                    prc->imsbtree = tgt_create(prc->cblkno[0], prc->cblkno[1], prc->cblkno[2]);
-
-                    for (cblkno = 0; cblkno < (prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]);
-                            cblkno++) {
-                        int cblkxstart = tlcblkxstart + (cblkno % prc->cblkno[0]) *
-                                         (1 << cblkwidthexpn);
-                        int cblkystart = tlcblkystart + ((cblkno % (prc->cblkno[0] * prc->cblkno[1])) /
-                                                         prc->cblkno[0]) * (1 << cblkheightexpn);
-                        int cblkzstart = tlcblkzstart + (cblkno / (prc->cblkno[0] * prc->cblkno[1])) *
-                                         (1 << cblklengthexpn);
-                        int cblkxend = cblkxstart + (1 << cblkwidthexpn);
-                        int cblkyend = cblkystart + (1 << cblkheightexpn);
-                        int cblkzend = cblkzstart + (1 << cblklengthexpn);
-                        int prec = ((tilec->bpp > 16) ? 3 : ((tilec->bpp > 8) ? 2 : 1));
-
-                        tcd->cblk = &prc->cblks[cblkno];
-                        cblk = tcd->cblk;
-
-                        /* code-block size (global) */
-                        cblk->x0 = int_max(cblkxstart, prc->x0);
-                        cblk->y0 = int_max(cblkystart, prc->y0);
-                        cblk->z0 = int_max(cblkzstart, prc->z0);
-                        cblk->x1 = int_min(cblkxend, prc->x1);
-                        cblk->y1 = int_min(cblkyend, prc->y1);
-                        cblk->z1 = int_min(cblkzend, prc->z1);
-                    }
-                } /* precno */
-            } /* bandno */
-        } /* resno */
-    } /* compno */
-    /*tcd_dump(stdout, tcd, tcd->tcd_volume);*/
-}
-
-
-void tcd_free_encode(opj_tcd_t *tcd)
-{
-    int tileno, compno, resno, bandno, precno;
-
-    opj_tcd_tile_t *tile = NULL;        /* pointer to tcd->tile     */
-    /*  opj_tcd_slice_t *slice = NULL; */       /* pointer to tcd->slice */
-    opj_tcd_tilecomp_t *tilec = NULL;   /* pointer to tcd->tilec    */
-    opj_tcd_resolution_t *res = NULL;   /* pointer to tcd->res      */
-    opj_tcd_band_t *band = NULL;        /* pointer to tcd->band     */
-    opj_tcd_precinct_t *prc = NULL;     /* pointer to tcd->prc      */
-
-    for (tileno = 0; tileno < 1; tileno++) {
-        tcd->tile = tcd->tcd_volume->tiles;
-        tile = tcd->tile;
-
-        for (compno = 0; compno < tile->numcomps; compno++) {
-            tcd->tilec = &tile->comps[compno];
-            tilec = tcd->tilec;
-
-            for (resno = 0; resno < tilec->numresolution[0]; resno++) {
-                tcd->res = &tilec->resolutions[resno];
-                res = tcd->res;
-
-                for (bandno = 0; bandno < res->numbands; bandno++) {
-                    tcd->band = &res->bands[bandno];
-                    band = tcd->band;
-
-                    for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2];
-                            precno++) {
-                        tcd->prc = &band->precincts[precno];
-                        prc = tcd->prc;
-
-                        if (prc->incltree != NULL) {
-                            tgt_destroy(prc->incltree);
-                            prc->incltree = NULL;
-                        }
-                        if (prc->imsbtree != NULL) {
-                            tgt_destroy(prc->imsbtree);
-                            prc->imsbtree = NULL;
-                        }
-                        opj_free(prc->cblks);
-                        prc->cblks = NULL;
-                    } /* for (precno */
-                    opj_free(band->precincts);
-                    band->precincts = NULL;
-                } /* for (bandno */
-            } /* for (resno */
-            opj_free(tilec->resolutions);
-            tilec->resolutions = NULL;
-        } /* for (compno */
-        opj_free(tile->comps);
-        tile->comps = NULL;
-    } /* for (tileno */
-    opj_free(tcd->tcd_volume->tiles);
-    tcd->tcd_volume->tiles = NULL;
-}
-
-/* ----------------------------------------------------------------------- */
-void tcd_malloc_decode(opj_tcd_t *tcd, opj_volume_t * volume, opj_cp_t * cp)
-{
-    int tileno, compno, resno, bandno, precno, cblkno, res_max,
-        i, j, p, q, r;
-    unsigned int x0 = 0, y0 = 0, z0 = 0,
-                 x1 = 0, y1 = 0, z1 = 0,
-                 w, h, l;
-
-    tcd->volume = volume;
-    tcd->cp = cp;
-    tcd->tcd_volume->tw = cp->tw;
-    tcd->tcd_volume->th = cp->th;
-    tcd->tcd_volume->tl = cp->tl;
-    tcd->tcd_volume->tiles = (opj_tcd_tile_t *) opj_malloc(cp->tw * cp->th * cp->tl
-                             * sizeof(opj_tcd_tile_t));
-
-    for (i = 0; i < cp->tileno_size; i++) {
-        opj_tcp_t *tcp = &(cp->tcps[cp->tileno[i]]);
-        opj_tcd_tile_t *tile = &(tcd->tcd_volume->tiles[cp->tileno[i]]);
-
-        /* p61 ISO/IEC IS15444-1 : 2002 */
-        /* curtileno --> raster scanned index of tiles */
-        /* p,q,r --> matricial index of tiles */
-        tileno = cp->tileno[i];
-        p = tileno % cp->tw;
-        q = tileno / cp->tw;
-        r = tileno / (cp->tw * cp->th); /* extension to 3-D */
-
-        /* 4 borders of the tile rescale on the volume if necessary (B.3)*/
-        tile->x0 = int_max(cp->tx0 + p * cp->tdx, volume->x0);
-        tile->y0 = int_max(cp->ty0 + q * cp->tdy, volume->y0);
-        tile->z0 = int_max(cp->tz0 + r * cp->tdz, volume->z0);
-        tile->x1 = int_min(cp->tx0 + (p + 1) * cp->tdx, volume->x1);
-        tile->y1 = int_min(cp->ty0 + (q + 1) * cp->tdy, volume->y1);
-        tile->z1 = int_min(cp->tz0 + (r + 1) * cp->tdz, volume->z1);
-        tile->numcomps = volume->numcomps;
-
-        tile->comps = (opj_tcd_tilecomp_t *) opj_malloc(volume->numcomps * sizeof(
-                          opj_tcd_tilecomp_t));
-        for (compno = 0; compno < tile->numcomps; compno++) {
-            opj_tccp_t *tccp = &tcp->tccps[compno];
-            opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-            int prevnumbands = 0;
-
-            /* border of each tile component (global) */
-            tilec->x0 = int_ceildiv(tile->x0, volume->comps[compno].dx);
-            tilec->y0 = int_ceildiv(tile->y0, volume->comps[compno].dy);
-            tilec->z0 = int_ceildiv(tile->z0, volume->comps[compno].dz);
-            tilec->x1 = int_ceildiv(tile->x1, volume->comps[compno].dx);
-            tilec->y1 = int_ceildiv(tile->y1, volume->comps[compno].dy);
-            tilec->z1 = int_ceildiv(tile->z1, volume->comps[compno].dz);
-
-            tilec->data = (int *) opj_malloc((tilec->x1 - tilec->x0) *
-                                             (tilec->y1 - tilec->y0) * (tilec->z1 - tilec->z0) * sizeof(int));
-
-            res_max = 0;
-            for (i = 0; i < 3; i++) {
-                tilec->numresolution[i] = tccp->numresolution[i];
-                /*Greater of 3 resolutions contains all information*/
-                res_max = (tilec->numresolution[i] > res_max) ? tilec->numresolution[i] :
-                          res_max;
-            }
-
-            tilec->resolutions = (opj_tcd_resolution_t *) opj_malloc(res_max * sizeof(
-                                     opj_tcd_resolution_t));
-
-            for (resno = 0; resno < res_max; resno++) {
-                opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-                int pdx, pdy, pdz;
-                int tlprcxstart, tlprcystart, tlprczstart, brprcxend, brprcyend, brprczend;
-                int tlcbgxstart, tlcbgystart, tlcbgzstart, brcbgxend, brcbgyend, brcbgzend;
-                int cbgwidthexpn, cbgheightexpn, cbglengthexpn;
-                int cblkwidthexpn, cblkheightexpn, cblklengthexpn;
-                int levelnox = tilec->numresolution[0] - 1 - resno;
-                int levelnoy = tilec->numresolution[1] - 1 - resno;
-                int diff = tccp->numresolution[0] - tccp->numresolution[2];
-                int levelnoz = tilec->numresolution[2] - 1 - ((resno <= diff) ? 0 :
-                               (resno - diff));
-                if (levelnoz < 0) {
-                    levelnoz = 0;
-                }
-
-                /* border for each resolution level (global) */
-                res->x0 = int_ceildivpow2(tilec->x0, levelnox);
-                res->y0 = int_ceildivpow2(tilec->y0, levelnoy);
-                res->z0 = int_ceildivpow2(tilec->z0, levelnoz);
-                res->x1 = int_ceildivpow2(tilec->x1, levelnox);
-                res->y1 = int_ceildivpow2(tilec->y1, levelnoy);
-                res->z1 = int_ceildivpow2(tilec->z1, levelnoz);
-                res->numbands = (resno == 0) ? 1 : (resno <= diff) ? 3 : 7; /* --> 3D */
-
-                /* p. 30, table A-13, ISO/IEC IS154444-1 : 2002 */
-                if (tccp->csty & J3D_CCP_CSTY_PRT) {
-                    pdx = tccp->prctsiz[0][resno];
-                    pdy = tccp->prctsiz[1][resno];
-                    pdz = tccp->prctsiz[2][resno];
-                } else {
-                    pdx = 15;
-                    pdy = 15;
-                    pdz = 15;
-                }
-
-                /* p. 66, B.16, ISO/IEC IS15444-1 : 2002  */
-                tlprcxstart = int_floordivpow2(res->x0, pdx) << pdx;
-                tlprcystart = int_floordivpow2(res->y0, pdy) << pdy;
-                tlprczstart = int_floordivpow2(res->z0, pdz) << pdz;
-                brprcxend = int_ceildivpow2(res->x1, pdx) << pdx;
-                brprcyend = int_ceildivpow2(res->y1, pdy) << pdy;
-                brprczend = int_ceildivpow2(res->z1, pdz) << pdz;
-
-                res->prctno[0] = (brprcxend - tlprcxstart) >> pdx;
-                res->prctno[1] = (brprcyend - tlprcystart) >> pdy;
-                res->prctno[2] = (brprczend - tlprczstart) >> pdz;
-
-                /* p. 67, B.17 & B.18, ISO/IEC IS15444-1 : 2002  */
-                if (resno == 0) {
-                    tlcbgxstart = tlprcxstart;/*0*/
-                    tlcbgystart = tlprcystart;
-                    tlcbgzstart = tlprczstart;
-                    brcbgxend = brprcxend;/*1*/
-                    brcbgyend = brprcyend;
-                    brcbgzend = brprczend;
-                    cbgwidthexpn = pdx; /*15*/
-                    cbgheightexpn = pdy;
-                    cbglengthexpn = pdz;
-                } else {
-                    tlcbgxstart = int_ceildivpow2(tlprcxstart, 1);
-                    tlcbgystart = int_ceildivpow2(tlprcystart, 1);
-                    tlcbgzstart = int_ceildivpow2(tlprczstart, 1);
-                    brcbgxend = int_ceildivpow2(brprcxend, 1);
-                    brcbgyend = int_ceildivpow2(brprcyend, 1);
-                    brcbgzend = int_ceildivpow2(brprczend, 1);
-                    cbgwidthexpn = pdx - 1;
-                    cbgheightexpn = pdy - 1;
-                    cbglengthexpn = pdz - 1;
-                }
-
-                cblkwidthexpn = int_min(tccp->cblk[0], cbgwidthexpn); /*6*/
-                cblkheightexpn = int_min(tccp->cblk[1], cbgheightexpn); /*6*/
-                cblklengthexpn = int_min(tccp->cblk[2], cbglengthexpn); /*6*/
-
-                res->bands = (opj_tcd_band_t *) opj_malloc(res->numbands * sizeof(
-                                 opj_tcd_band_t));
-                for (bandno = 0; bandno < res->numbands; bandno++) {
-                    int x0b, y0b, z0b;
-                    int gain, numbps;
-                    opj_stepsize_t *ss = NULL;
-
-                    opj_tcd_band_t *band = &res->bands[bandno];
-                    band->bandno = resno == 0 ? 0 : bandno + 1;
-                    /* Bandno:  0 - LLL     2 - LHL
-                                1 - HLL     3 - HHL
-                                4 - LLH     6 - LHH
-                                5 - HLH     7 - HHH     */
-                    x0b = (band->bandno == 1) || (band->bandno == 3) || (band->bandno == 5) ||
-                          (band->bandno == 7) ? 1 : 0;
-                    y0b = (band->bandno == 2) || (band->bandno == 3) || (band->bandno == 6) ||
-                          (band->bandno == 7) ? 1 : 0;
-                    z0b = (band->bandno == 4) || (band->bandno == 5) || (band->bandno == 6) ||
-                          (band->bandno == 7) ? 1 : 0;
-
-                    /* p. 65, B.15, ISO/IEC IS15444-1 : 2002  */
-                    if (band->bandno == 0) {
-                        /* band border (global) */
-                        band->x0 = int_ceildivpow2(tilec->x0, levelnox);
-                        band->y0 = int_ceildivpow2(tilec->y0, levelnoy);
-                        band->z0 = int_ceildivpow2(tilec->z0, levelnoz);
-                        band->x1 = int_ceildivpow2(tilec->x1, levelnox);
-                        band->y1 = int_ceildivpow2(tilec->y1, levelnoy);
-                        band->z1 = int_ceildivpow2(tilec->z1, levelnoz);
-                    } else {
-                        band->x0 = int_ceildivpow2(tilec->x0 - (1 << levelnox) * x0b, levelnox + 1);
-                        band->y0 = int_ceildivpow2(tilec->y0 - (1 << levelnoy) * y0b, levelnoy + 1);
-                        band->z0 = int_ceildivpow2(tilec->z0 - (1 << levelnoz) * z0b,
-                                                   (resno <= diff) ? levelnoz : levelnoz + 1);
-                        band->x1 = int_ceildivpow2(tilec->x1 - (1 << levelnox) * x0b, levelnox + 1);
-                        band->y1 = int_ceildivpow2(tilec->y1 - (1 << levelnoy) * y0b, levelnoy + 1);
-                        band->z1 = int_ceildivpow2(tilec->z1 - (1 << levelnoz) * z0b,
-                                                   (resno <= diff) ? levelnoz : levelnoz + 1);
-                    }
-
-                    ss = &tccp->stepsizes[(resno == 0) ? 0 : (prevnumbands + bandno + 1)];
-                    if (bandno == (res->numbands - 1)) {
-                        prevnumbands += (resno == 0) ? 0 : res->numbands;
-                    }
-                    gain = dwt_getgain(band->bandno, tccp->reversible);
-                    numbps = volume->comps[compno].prec + gain;
-
-                    band->stepsize = (float)((1.0 + ss->mant / 2048.0) * pow(2.0,
-                                             numbps - ss->expn));
-                    band->numbps = ss->expn + tccp->numgbits - 1;   /* WHY -1 ? */
-
-                    band->precincts = (opj_tcd_precinct_t *) opj_malloc(res->prctno[0] *
-                                      res->prctno[1] * res->prctno[2] * sizeof(opj_tcd_precinct_t));
-
-                    for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2];
-                            precno++) {
-                        int tlcblkxstart, tlcblkystart, tlcblkzstart, brcblkxend, brcblkyend,
-                            brcblkzend;
-
-                        int cbgxstart = tlcbgxstart + (precno % res->prctno[0]) * (1 << cbgwidthexpn);
-                        int cbgystart = tlcbgystart + (precno / res->prctno[0]) * (1 << cbgheightexpn);
-                        int cbgzstart = tlcbgzstart + (precno / (res->prctno[0] * res->prctno[1])) *
-                                        (1 << cbglengthexpn);
-                        int cbgxend = cbgxstart + (1 << cbgwidthexpn);
-                        int cbgyend = cbgystart + (1 << cbgheightexpn);
-                        int cbgzend = cbgzstart + (1 << cbglengthexpn);
-
-                        opj_tcd_precinct_t *prc = &band->precincts[precno];
-                        /* precinct size (global) */
-                        prc->x0 = int_max(cbgxstart, band->x0);
-                        prc->y0 = int_max(cbgystart, band->y0);
-                        prc->z0 = int_max(cbgzstart, band->z0);
-                        prc->x1 = int_min(cbgxend, band->x1);
-                        prc->y1 = int_min(cbgyend, band->y1);
-                        prc->z1 = int_min(cbgzend, band->z1);
-
-                        tlcblkxstart = int_floordivpow2(prc->x0, cblkwidthexpn) << cblkwidthexpn;
-                        tlcblkystart = int_floordivpow2(prc->y0, cblkheightexpn) << cblkheightexpn;
-                        tlcblkzstart = int_floordivpow2(prc->z0, cblklengthexpn) << cblklengthexpn;
-                        brcblkxend = int_ceildivpow2(prc->x1, cblkwidthexpn) << cblkwidthexpn;
-                        brcblkyend = int_ceildivpow2(prc->y1, cblkheightexpn) << cblkheightexpn;
-                        brcblkzend = int_ceildivpow2(prc->z1, cblklengthexpn) << cblklengthexpn;
-                        prc->cblkno[0] = (brcblkxend - tlcblkxstart) >> cblkwidthexpn;
-                        prc->cblkno[1] = (brcblkyend - tlcblkystart) >> cblkheightexpn;
-                        prc->cblkno[2] = (brcblkzend - tlcblkzstart) >> cblklengthexpn;
-                        prc->cblkno[2] = (prc->cblkno[2] == 0) ? 1 : prc->cblkno[2];
-
-                        prc->cblks = (opj_tcd_cblk_t *) opj_malloc((prc->cblkno[0] * prc->cblkno[1] *
-                                     prc->cblkno[2]) * sizeof(opj_tcd_cblk_t));
-                        prc->incltree = tgt_create(prc->cblkno[0], prc->cblkno[1], prc->cblkno[2]);
-                        prc->imsbtree = tgt_create(prc->cblkno[0], prc->cblkno[1], prc->cblkno[2]);
-
-                        for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2];
-                                cblkno++) {
-                            int cblkxstart = tlcblkxstart + (cblkno % prc->cblkno[0]) *
-                                             (1 << cblkwidthexpn);
-                            int cblkystart = tlcblkystart + ((cblkno % (prc->cblkno[0] * prc->cblkno[1])) /
-                                                             prc->cblkno[0]) * (1 << cblkheightexpn);
-                            int cblkzstart = tlcblkzstart + (cblkno / (prc->cblkno[0] * prc->cblkno[1])) *
-                                             (1 << cblklengthexpn);
-                            int cblkxend = cblkxstart + (1 << cblkwidthexpn);
-                            int cblkyend = cblkystart + (1 << cblkheightexpn);
-                            int cblkzend = cblkzstart + (1 << cblklengthexpn);
-                            int prec = ((tilec->bpp > 16) ? 3 : ((tilec->bpp > 8) ? 2 : 1));
-                            /* code-block size (global) */
-                            opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
-
-                            /* code-block size (global) */
-                            cblk->x0 = int_max(cblkxstart, prc->x0);
-                            cblk->y0 = int_max(cblkystart, prc->y0);
-                            cblk->z0 = int_max(cblkzstart, prc->z0);
-                            cblk->x1 = int_min(cblkxend, prc->x1);
-                            cblk->y1 = int_min(cblkyend, prc->y1);
-                            cblk->z1 = int_min(cblkzend, prc->z1);
-                        }
-                    } /* precno */
-                } /* bandno */
-            } /* resno */
-        } /* compno */
-    } /* i = 0..cp->tileno_size */
-
-    /*tcd_dump(stdout, tcd, tcd->tcd_volume);*/
-
-    /*
-    Allocate place to store the decoded data = final volume
-    Place limited by the tile really present in the codestream
-    */
-
-    for (i = 0; i < volume->numcomps; i++) {
-        for (j = 0; j < cp->tileno_size; j++) {
-            tileno = cp->tileno[j];
-            x0 = (j == 0) ? tcd->tcd_volume->tiles[tileno].comps[i].x0 : int_min(x0,
-                    (unsigned int) tcd->tcd_volume->tiles[tileno].comps[i].x0);
-            y0 = (j == 0) ? tcd->tcd_volume->tiles[tileno].comps[i].y0 : int_min(y0,
-                    (unsigned int) tcd->tcd_volume->tiles[tileno].comps[i].y0);
-            z0 = (j == 0) ? tcd->tcd_volume->tiles[tileno].comps[i].z0 : int_min(z0,
-                    (unsigned int) tcd->tcd_volume->tiles[tileno].comps[i].z0);
-            x1 = (j == 0) ? tcd->tcd_volume->tiles[tileno].comps[i].x1 : int_max(x1,
-                    (unsigned int) tcd->tcd_volume->tiles[tileno].comps[i].x1);
-            y1 = (j == 0) ? tcd->tcd_volume->tiles[tileno].comps[i].y1 : int_max(y1,
-                    (unsigned int) tcd->tcd_volume->tiles[tileno].comps[i].y1);
-            z1 = (j == 0) ? tcd->tcd_volume->tiles[tileno].comps[i].z1 : int_max(z1,
-                    (unsigned int) tcd->tcd_volume->tiles[tileno].comps[i].z1);
-        }
-
-        w = x1 - x0;
-        h = y1 - y0;
-        l = z1 - z0;
-
-        volume->comps[i].data = (int *) opj_malloc(w * h * l * sizeof(int));
-        volume->comps[i].w = w;
-        volume->comps[i].h = h;
-        volume->comps[i].l = l;
-        volume->comps[i].x0 = x0;
-        volume->comps[i].y0 = y0;
-        volume->comps[i].z0 = z0;
-        volume->comps[i].bigendian = cp->bigendian;
-    }
-}
-
-void tcd_free_decode(opj_tcd_t *tcd)
-{
-    int tileno, compno, resno, bandno, precno;
-
-    opj_tcd_volume_t *tcd_volume = tcd->tcd_volume;
-
-    for (tileno = 0; tileno < tcd_volume->tw * tcd_volume->th * tcd_volume->tl;
-            tileno++) {
-        opj_tcd_tile_t *tile = &tcd_volume->tiles[tileno];
-        for (compno = 0; compno < tile->numcomps; compno++) {
-            opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-            for (resno = 0; resno < tilec->numresolution[0]; resno++) {
-                opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-                for (bandno = 0; bandno < res->numbands; bandno++) {
-                    opj_tcd_band_t *band = &res->bands[bandno];
-                    for (precno = 0; precno < res->prctno[1] * res->prctno[0] * res->prctno[2];
-                            precno++) {
-                        opj_tcd_precinct_t *prec = &band->precincts[precno];
-                        if (prec->cblks != NULL) {
-                            opj_free(prec->cblks);
-                        }
-                        if (prec->imsbtree != NULL) {
-                            tgt_destroy(prec->imsbtree);
-                        }
-                        if (prec->incltree != NULL) {
-                            tgt_destroy(prec->incltree);
-                        }
-                        /*for (treeno = 0; treeno < prec->numtrees; treeno++){
-                            if (prec->imsbtree[treeno] != NULL) tgt_destroy(prec->imsbtree[treeno]);
-                            if (prec->incltree[treeno] != NULL) tgt_destroy(prec->incltree[treeno]);
-                        }*/
-                    }
-                    if (band->precincts != NULL) {
-                        opj_free(band->precincts);
-                    }
-                }
-            }
-            if (tilec->resolutions != NULL) {
-                opj_free(tilec->resolutions);
-            }
-        }
-        if (tile->comps != NULL) {
-            opj_free(tile->comps);
-        }
-    }
-
-    if (tcd_volume->tiles != NULL) {
-        opj_free(tcd_volume->tiles);
-    }
-}
-
-
-
-/* ----------------------------------------------------------------------- */
-void tcd_makelayer_fixed(opj_tcd_t *tcd, int layno, int final)
-{
-    int compno, resno, bandno, precno, cblkno;
-    int value;          /*, matrice[tcd_tcp->numlayers][tcd_tile->comps[0].numresolution[0]][3]; */
-    int matrice[10][10][3];
-    int i, j, k;
-
-    opj_cp_t *cp = tcd->cp;
-    opj_tcd_tile_t *tcd_tile = tcd->tcd_tile;
-    opj_tcp_t *tcd_tcp = tcd->tcp;
-
-    /*matrice=(int*)opj_malloc(tcd_tcp->numlayers*tcd_tile->comps[0].numresolution[0]*3*sizeof(int)); */
-
-    for (compno = 0; compno < tcd_tile->numcomps; compno++) {
-        opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno];
-        for (i = 0; i < tcd_tcp->numlayers; i++) {
-            for (j = 0; j < tilec->numresolution[0]; j++) {
-                for (k = 0; k < 3; k++) {
-                    matrice[i][j][k] =
-                        (int)(cp->matrice[i * tilec->numresolution[0] * 3 + j * 3 + k]
-                              * (float)(tcd->volume->comps[compno].prec / 16.0));
-                }
-            }
-        }
-
-        for (resno = 0; resno < tilec->numresolution[0]; resno++) {
-            opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-            for (bandno = 0; bandno < res->numbands; bandno++) {
-                opj_tcd_band_t *band = &res->bands[bandno];
-                for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2];
-                        precno++) {
-                    opj_tcd_precinct_t *prc = &band->precincts[precno];
-                    for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2];
-                            cblkno++) {
-                        opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
-                        opj_tcd_layer_t *layer = &cblk->layers[layno];
-                        int n;
-                        int imsb = tcd->volume->comps[compno].prec -
-                                   cblk->numbps;  /* number of bit-plan equal to zero */
-                        /* Correction of the matrix of coefficient to include the IMSB information */
-                        if (layno == 0) {
-                            value = matrice[layno][resno][bandno];
-                            if (imsb >= value) {
-                                value = 0;
-                            } else {
-                                value -= imsb;
-                            }
-                        } else {
-                            value = matrice[layno][resno][bandno] - matrice[layno - 1][resno][bandno];
-                            if (imsb >= matrice[layno - 1][resno][bandno]) {
-                                value -= (imsb - matrice[layno - 1][resno][bandno]);
-                                if (value < 0) {
-                                    value = 0;
-                                }
-                            }
-                        }
-
-                        if (layno == 0) {
-                            cblk->numpassesinlayers = 0;
-                        }
-
-                        n = cblk->numpassesinlayers;
-                        if (cblk->numpassesinlayers == 0) {
-                            if (value != 0) {
-                                n = 3 * value - 2 + cblk->numpassesinlayers;
-                            } else {
-                                n = cblk->numpassesinlayers;
-                            }
-                        } else {
-                            n = 3 * value + cblk->numpassesinlayers;
-                        }
-
-                        layer->numpasses = n - cblk->numpassesinlayers;
-
-                        if (!layer->numpasses) {
-                            continue;
-                        }
-
-                        if (cblk->numpassesinlayers == 0) {
-                            layer->len = cblk->passes[n - 1].rate;
-                            layer->data = cblk->data;
-                        } else {
-                            layer->len = cblk->passes[n - 1].rate - cblk->passes[cblk->numpassesinlayers -
-                                         1].rate;
-                            layer->data = cblk->data + cblk->passes[cblk->numpassesinlayers - 1].rate;
-                        }
-                        if (final) {
-                            cblk->numpassesinlayers = n;
-                        }
-                    }
-                }
-            }
-        }
-    }
-}
-
-void tcd_rateallocate_fixed(opj_tcd_t *tcd)
-{
-    int layno;
-    for (layno = 0; layno < tcd->tcp->numlayers; layno++) {
-        tcd_makelayer_fixed(tcd, layno, 1);
-    }
-}
-
-void tcd_makelayer(opj_tcd_t *tcd, int layno, double thresh, int final)
-{
-    int compno, resno, bandno, precno, cblkno, passno;
-
-    opj_tcd_tile_t *tcd_tile = tcd->tcd_tile;
-
-    tcd_tile->distolayer[layno] = 0;    /* fixed_quality */
-
-    for (compno = 0; compno < tcd_tile->numcomps; compno++) {
-        opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno];
-        for (resno = 0; resno < tilec->numresolution[0]; resno++) {
-            opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-            for (bandno = 0; bandno < res->numbands; bandno++) {
-                opj_tcd_band_t *band = &res->bands[bandno];
-                for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2];
-                        precno++) {
-                    opj_tcd_precinct_t *prc = &band->precincts[precno];
-                    for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2];
-                            cblkno++) {
-                        opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
-                        opj_tcd_layer_t *layer = &cblk->layers[layno];
-
-                        int n;
-                        if (layno == 0) {
-                            cblk->numpassesinlayers = 0;
-                        }
-                        n = cblk->numpassesinlayers;
-                        for (passno = cblk->numpassesinlayers; passno < cblk->totalpasses; passno++) {
-                            int dr;
-                            double dd;
-                            opj_tcd_pass_t *pass = &cblk->passes[passno];
-                            if (n == 0) {
-                                dr = pass->rate;
-                                dd = pass->distortiondec;
-                            } else {
-                                dr = pass->rate - cblk->passes[n - 1].rate;
-                                dd = pass->distortiondec - cblk->passes[n - 1].distortiondec;
-                            }
-                            if (!dr) {
-                                if (dd) {
-                                    n = passno + 1;
-                                }
-                                continue;
-                            }
-                            if (dd / dr >= thresh) {
-                                n = passno + 1;
-                            }
-                        }
-                        layer->numpasses = n - cblk->numpassesinlayers;
-
-                        if (!layer->numpasses) {
-                            layer->disto = 0;
-                            continue;
-                        }
-                        if (cblk->numpassesinlayers == 0) {
-                            layer->len = cblk->passes[n - 1].rate;
-                            layer->data = cblk->data;
-                            layer->disto = cblk->passes[n - 1].distortiondec;
-                        } else {
-                            layer->len = cblk->passes[n - 1].rate - cblk->passes[cblk->numpassesinlayers -
-                                         1].rate;
-                            layer->data = cblk->data + cblk->passes[cblk->numpassesinlayers - 1].rate;
-                            layer->disto = cblk->passes[n - 1].distortiondec -
-                                           cblk->passes[cblk->numpassesinlayers - 1].distortiondec;
-                        }
-
-                        tcd_tile->distolayer[layno] += layer->disto;    /* fixed_quality */
-
-                        if (final) {
-                            cblk->numpassesinlayers = n;
-                        }
-
-                        /*  fprintf(stdout,"MakeLayer : %d %f %d %d \n",layer->len, layer->disto, layer->numpasses, n);*/
-                    }
-                }
-            }
-        }
-    }
-}
-
-bool tcd_rateallocate(opj_tcd_t *tcd, unsigned char *dest, int len,
-                      opj_volume_info_t * volume_info)
-{
-    int compno, resno, bandno, precno, cblkno, passno, layno;
-    double min, max;
-    double cumdisto[100];   /* fixed_quality */
-    const double K = 1;     /* 1.1; // fixed_quality */
-    double maxSE = 0;
-
-    opj_cp_t *cp = tcd->cp;
-    opj_tcd_tile_t *tcd_tile = tcd->tcd_tile;
-    opj_tcp_t *tcd_tcp = tcd->tcp;
-
-    min = DBL_MAX;
-    max = 0;
-
-    tcd_tile->nbpix = 0;        /* fixed_quality */
-
-    for (compno = 0; compno < tcd_tile->numcomps; compno++) {
-        opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno];
-        tilec->nbpix = 0;
-        for (resno = 0; resno < tilec->numresolution[0]; resno++) {
-            opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-            for (bandno = 0; bandno < res->numbands; bandno++) {
-                opj_tcd_band_t *band = &res->bands[bandno];
-                for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2];
-                        precno++) {
-                    opj_tcd_precinct_t *prc = &band->precincts[precno];
-                    for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2];
-                            cblkno++) {
-                        opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
-                        for (passno = 0; passno < cblk->totalpasses; passno++) {
-                            opj_tcd_pass_t *pass = &cblk->passes[passno];
-                            int dr;
-                            double dd, rdslope;
-                            if (passno == 0) {
-                                dr = pass->rate;
-                                dd = pass->distortiondec;
-                            } else {
-                                dr = pass->rate - cblk->passes[passno - 1].rate;
-                                dd = pass->distortiondec - cblk->passes[passno - 1].distortiondec;
-                            }
-                            if (dr == 0) {
-                                continue;
-                            }
-                            rdslope = dd / dr;
-                            if (rdslope < min) {
-                                min = rdslope;
-                            }
-                            if (rdslope > max) {
-                                max = rdslope;
-                            }
-
-                        } /* passno */
-
-                        /* fixed_quality */
-                        tcd_tile->nbpix += ((cblk->x1 - cblk->x0) * (cblk->y1 - cblk->y0) *
-                                            (cblk->z1 - cblk->z0));
-                        tilec->nbpix += ((cblk->x1 - cblk->x0) * (cblk->y1 - cblk->y0) *
-                                         (cblk->z1 - cblk->z0));
-                    } /* cbklno */
-                } /* precno */
-            } /* bandno */
-        } /* resno */
-
-        maxSE += (((double)(1 << tcd->volume->comps[compno].prec) - 1.0)
-                  * ((double)(1 << tcd->volume->comps[compno].prec) - 1.0))
-                 * ((double)(tilec->nbpix));
-    } /* compno */
-
-    /* add antonin index */
-    if (volume_info && volume_info->index_on) {
-        opj_tile_info_t *info_TL = &volume_info->tile[tcd->tcd_tileno];
-        info_TL->nbpix = tcd_tile->nbpix;
-        info_TL->distotile = tcd_tile->distotile;
-        info_TL->thresh = (double *) opj_malloc(tcd_tcp->numlayers * sizeof(double));
-    }
-    /* dda */
-
-    for (layno = 0; layno < tcd_tcp->numlayers; layno++) {
-        double lo = min;
-        double hi = max;
-        int success = 0;
-        int maxlen = tcd_tcp->rates[layno] ? int_min(((int) tcd_tcp->rates[layno]),
-                     len) : len;
-        double goodthresh;
-        double distotarget;     /* fixed_quality */
-        int i = 0;
-
-        /* fixed_quality */
-        distotarget = tcd_tile->distotile - ((K * maxSE) / pow((float)10,
-                                             tcd_tcp->distoratio[layno] / 10));
-
-        if ((tcd_tcp->rates[layno]) || (cp->disto_alloc == 0)) {
-            opj_t2_t *t2 = t2_create(tcd->cinfo, tcd->volume, cp);
-            int oldl = 0, oldoldl = 0;
-            for (i = 0; i < 128; i++) {
-                double thresh = (lo + hi) / 2;
-                int l = 0;
-                double distoachieved = 0;   /* fixed_quality -q */
-
-                tcd_makelayer(tcd, layno, thresh, 0);
-
-                if (cp->fixed_quality) {    /* fixed_quality -q */
-                    distoachieved = (layno == 0) ? tcd_tile->distolayer[0] : cumdisto[layno - 1] +
-                                    tcd_tile->distolayer[layno];
-                    if (distoachieved < distotarget) {
-                        hi = thresh;
-                        continue;
-                    }
-                    lo = thresh;
-                } else {        /* disto_alloc -r, fixed_alloc -f */
-                    l = t2_encode_packets(t2, tcd->tcd_tileno, tcd_tile, layno + 1, dest, maxlen,
-                                          volume_info);
-                    /*fprintf(stdout, "layno %d i %d len=%d max=%d \n",layno,i,l,maxlen);*/
-                    if (l == -999) {
-                        lo = thresh;
-                        continue;
-                    } else if (l == oldl && oldl == oldoldl && tcd_tile->distolayer[layno] > 0.0 &&
-                               i > 32) {
-                        break;
-                    }
-                    hi = thresh;
-                    oldoldl = oldl;
-                    oldl = l;
-                }
-                success = 1;
-                goodthresh = thresh;
-            }
-            t2_destroy(t2);
-        } else {
-            success = 1;
-            goodthresh = min;
-        }
-        if (!success) {
-            return false;
-        }
-
-        if (volume_info && volume_info->index_on) { /* Threshold for Marcela Index */
-            volume_info->tile[tcd->tcd_tileno].thresh[layno] = goodthresh;
-        }
-        tcd_makelayer(tcd, layno, goodthresh, 1);
-
-        /* fixed_quality */
-        cumdisto[layno] = (layno == 0) ? tcd_tile->distolayer[0] : cumdisto[layno - 1] +
-                          tcd_tile->distolayer[layno];
-    }
-
-    return true;
-}
-
-/* ----------------------------------------------------------------------- */
-int tcd_encode_tile(opj_tcd_t *tcd, int tileno, unsigned char *dest, int len,
-                    opj_volume_info_t * volume_info)
-{
-    int compno;
-    int l = 0, i, npck = 0;
-    double encoding_time;
-
-    opj_tcd_tile_t  *tile = NULL;
-    opj_tcp_t       *tcd_tcp = NULL;
-    opj_cp_t        *cp = NULL;
-
-    opj_tcp_t       *tcp = &tcd->cp->tcps[0];
-    opj_tccp_t      *tccp = &tcp->tccps[0];
-    opj_volume_t    *volume = tcd->volume;
-    opj_t2_t        *t2 = NULL;     /* T2 component */
-
-    tcd->tcd_tileno = tileno;           /* current encoded/decoded tile */
-
-    tcd->tcd_tile = tcd->tcd_volume->tiles; /* tile information */
-    tile = tcd->tcd_tile;
-
-    tcd->tcp = &tcd->cp->tcps[tileno];  /* coding/decoding params of tileno */
-    tcd_tcp = tcd->tcp;
-
-    cp = tcd->cp;       /* coding parameters */
-
-    /* INDEX >> */
-    if (volume_info && volume_info->index_on) {
-        opj_tcd_tilecomp_t *tilec_idx = &tile->comps[0];    /* based on component 0 */
-        for (i = 0; i < tilec_idx->numresolution[0]; i++) {
-            opj_tcd_resolution_t *res_idx = &tilec_idx->resolutions[i];
-
-            volume_info->tile[tileno].prctno[0][i] = res_idx->prctno[0];
-            volume_info->tile[tileno].prctno[1][i] = res_idx->prctno[1];
-            volume_info->tile[tileno].prctno[2][i] = res_idx->prctno[2];
-
-            npck += res_idx->prctno[0] * res_idx->prctno[1] * res_idx->prctno[2];
-
-            volume_info->tile[tileno].prctsiz[0][i] = tccp->prctsiz[0][i];
-            volume_info->tile[tileno].prctsiz[1][i] = tccp->prctsiz[1][i];
-            volume_info->tile[tileno].prctsiz[2][i] = tccp->prctsiz[2][i];
-        }
-        volume_info->tile[tileno].packet = (opj_packet_info_t *) opj_malloc(
-                                               volume_info->comp * volume_info->layer * npck * sizeof(opj_packet_info_t));
-    }
-    /* << INDEX */
-
-    /*---------------TILE-------------------*/
-    encoding_time = opj_clock();    /* time needed to encode a tile */
-
-    for (compno = 0; compno < tile->numcomps; compno++) {
-        int x, y, z;
-        opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-
-        int adjust;
-        int offset_x = int_ceildiv(volume->x0,
-                                   volume->comps[compno].dx); /*ceil(x0 / subsampling_dx)*/
-        int offset_y = int_ceildiv(volume->y0, volume->comps[compno].dy);
-        int offset_z = int_ceildiv(volume->z0, volume->comps[compno].dz);
-
-        int tw = tilec->x1 - tilec->x0;
-        int w = int_ceildiv(volume->x1 - volume->x0, volume->comps[compno].dx);
-        int th = tilec->y1 - tilec->y0;
-        int h = int_ceildiv(volume->y1 - volume->y0, volume->comps[compno].dy);
-        int tl = tilec->z1 - tilec->z0;
-        int l = int_ceildiv(volume->z1 - volume->z0, volume->comps[compno].dz);
-
-
-
-        /* extract tile data from volume.comps[0].data to tile.comps[0].data */
-        /*fprintf(stdout,"[INFO] Extract tile data\n");*/
-        if (tcd->cp->transform_format == TRF_3D_RLS ||
-                tcd->cp->transform_format == TRF_3D_LSE) {
-            adjust = 0;
-        } else {
-            adjust = volume->comps[compno].sgnd ? 0 : 1 << (volume->comps[compno].prec -
-                     1); /*sign=='+' --> 2^(prec-1)*/
-            if (volume->comps[compno].dcoffset != 0) {
-                adjust += volume->comps[compno].dcoffset;
-                fprintf(stdout, "[INFO] DC Offset applied: DCO = %d -> adjust = %d\n",
-                        volume->comps[compno].dcoffset, adjust);
-            }
-        }
-
-        if (tcd_tcp->tccps[compno].reversible ==
-                1) { /*IF perfect reconstruction (DWT.5-3)*/
-            for (z = tilec->z0; z < tilec->z1; z++) {
-                for (y = tilec->y0; y < tilec->y1; y++) {
-                    /* start of the src tile scanline */
-                    int *data = &volume->comps[compno].data[(tilec->x0 - offset_x) +
-                                                            (y - offset_y) * w + (z - offset_z) * w * h];
-                    /* start of the dst tile scanline */
-                    int *tile_data = &tilec->data[(y - tilec->y0) * tw + (z - tilec->z0) * tw * th];
-                    for (x = tilec->x0; x < tilec->x1; x++) {
-                        *tile_data++ = *data++ - adjust;
-                    }
-                }
-            }
-        } else if (tcd_tcp->tccps[compno].reversible == 0) { /*IF not (DWT.9-7)*/
-            for (z = tilec->z0; z < tilec->z1; z++) {
-                for (y = tilec->y0; y < tilec->y1; y++) {
-                    /* start of the src tile scanline */
-                    int *data = &volume->comps[compno].data[(tilec->x0 - offset_x) +
-                                                            (y - offset_y) * w + (z - offset_z) * w * h];
-                    /* start of the dst tile scanline */
-                    int *tile_data = &tilec->data[(y - tilec->y0) * tw + (z - tilec->z0) * tw * th];
-                    for (x = tilec->x0; x < tilec->x1; x++) {
-                        *tile_data++ = (*data++ - adjust) << 13;
-                    }
-                }
-            }
-        }
-
-    }
-
-    /*----------------MCT-------------------*/
-    if (tcd_tcp->mct) {
-        int samples = (tile->comps[0].x1 - tile->comps[0].x0) *
-                      (tile->comps[0].y1 - tile->comps[0].y0) * (tile->comps[0].z1 -
-                              tile->comps[0].z0);
-        fprintf(stdout, "[INFO] Tcd_encode_tile: mct\n");
-        if (tcd_tcp->tccps[0].reversible == 0) {
-            mct_encode_real(tile->comps[0].data, tile->comps[1].data, tile->comps[2].data,
-                            samples);
-        } else {
-            mct_encode(tile->comps[0].data, tile->comps[1].data, tile->comps[2].data,
-                       samples);
-        }
-    }
-    /*----------------TRANSFORM---------------------------------*/
-    fprintf(stdout, "[INFO] Tcd_encode_tile: Transform\n");
-    for (compno = 0; compno < tile->numcomps; compno++) {
-        opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-        dwt_encode(tilec, tcd_tcp->tccps[compno].dwtid);
-    }
-
-    /*-------------------ENTROPY CODING-----------------------------*/
-    fprintf(stdout, "[INFO] Tcd_encode_tile: Entropy coding\n");
-    if ((cp->encoding_format == ENCOD_2EB) || (cp->encoding_format == ENCOD_3EB)) {
-        if (cp->encoding_format == ENCOD_2EB) {
-            opj_t1_t *t1 = NULL;
-            t1 = t1_create(tcd->cinfo);
-            t1_encode_cblks(t1, tile, tcd_tcp);
-            t1_destroy(t1);
-        } else if (cp->encoding_format == ENCOD_3EB) {
-            opj_t1_3d_t *t1 = NULL;
-            t1 = t1_3d_create(tcd->cinfo);
-            t1_3d_encode_cblks(t1, tile, tcd_tcp);
-            t1_3d_destroy(t1);
-        }
-        /*-----------RATE-ALLOCATE------------------*/
-        /* INDEX */
-        if (volume_info) {
-            volume_info->index_write = 0;
-        }
-        if (cp->disto_alloc || cp->fixed_quality) {
-            fprintf(stdout, "[INFO] Tcd_encode_tile: Rate-allocate\n");
-            tcd_rateallocate(tcd, dest, len,
-                             volume_info);          /* Normal Rate/distortion allocation */
-        } else {/* fixed_alloc */
-            fprintf(stdout, "[INFO] Tcd_encode_tile: Rate-allocate fixed\n");
-            tcd_rateallocate_fixed(
-                tcd);                            /* Fixed layer allocation */
-        }
-
-        /*--------------TIER2------------------*/
-        /* INDEX */
-        if (volume_info) {
-            volume_info->index_write = 1;
-        }
-        fprintf(stdout, "[INFO] Tcd_encode_tile: Tier - 2\n");
-        t2 = t2_create(tcd->cinfo, volume, cp);
-        l = t2_encode_packets(t2, tileno, tile, tcd_tcp->numlayers, dest, len,
-                              volume_info);
-        t2_destroy(t2);
-    } else if ((cp->encoding_format == ENCOD_2GR) ||
-               (cp->encoding_format == ENCOD_3GR)) {
-        /*if(volume_info) {
-            volume_info->index_write = 1;
-        }
-        gr = golomb_create(tcd->cinfo, volume, cp);
-        l = golomb_encode(gr, tileno, tile, dest, len, volume_info);
-        golomb_destroy(gr);*/
-    }
-
-
-    /*---------------CLEAN-------------------*/
-    fprintf(stdout, "[INFO] Tcd_encode_tile: %d bytes coded\n", l);
-    encoding_time = opj_clock() - encoding_time;
-    opj_event_msg(tcd->cinfo, EVT_INFO, "- tile encoded in %f s\n", encoding_time);
-
-    /* cleaning memory */
-    for (compno = 0; compno < tile->numcomps; compno++) {
-        tcd->tilec = &tile->comps[compno];
-        opj_free(tcd->tilec->data);
-    }
-
-    if (l == -999) {
-        fprintf(stdout, "[ERROR] Unable to perform T2 tier. Return -999.\n");
-        return 0;
-    }
-
-    return l;
-}
-
-
-bool tcd_decode_tile(opj_tcd_t *tcd, unsigned char *src, int len, int tileno)
-{
-    int l, i;
-    int compno, eof = 0;
-    double tile_time, t1_time, dwt_time;
-
-    opj_tcd_tile_t *tile = NULL;
-    opj_t2_t *t2 = NULL;        /* T2 component */
-
-    tcd->tcd_tileno = tileno;
-    tcd->tcd_tile = &(tcd->tcd_volume->tiles[tileno]);
-    tcd->tcp = &(tcd->cp->tcps[tileno]);
-    tile = tcd->tcd_tile;
-
-    tile_time = opj_clock();    /* time needed to decode a tile */
-    opj_event_msg(tcd->cinfo, EVT_INFO, "tile %d / %d\n", tileno + 1,
-                  tcd->cp->tw * tcd->cp->th * tcd->cp->tl);
-
-    if ((tcd->cp->encoding_format == ENCOD_2EB) ||
-            (tcd->cp->encoding_format == ENCOD_3EB)) {
-        /*--------------TIER2------------------*/
-        t2 = t2_create(tcd->cinfo, tcd->volume, tcd->cp);
-        l = t2_decode_packets(t2, src, len, tileno, tile);
-        t2_destroy(t2);
-        opj_event_msg(tcd->cinfo, EVT_INFO, "Tcd_decode_tile: %d bytes decoded\n", l);
-
-        if (l == -999) {
-            eof = 1;
-            opj_event_msg(tcd->cinfo, EVT_ERROR, "Tcd_decode_tile: incomplete bitstream\n");
-        }
-
-        /*------------------TIER1-----------------*/
-        opj_event_msg(tcd->cinfo, EVT_INFO, "Tcd_decode_tile: Entropy decoding %d \n",
-                      tcd->cp->encoding_format);
-        t1_time = opj_clock();  /* time needed to decode a tile */
-        if (tcd->cp->encoding_format == ENCOD_2EB) {
-            opj_t1_t *t1 = NULL;        /* T1 component */
-            t1 = t1_create(tcd->cinfo);
-            t1_decode_cblks(t1, tile, tcd->tcp);
-            t1_destroy(t1);
-        } else if (tcd->cp->encoding_format == ENCOD_3EB) {
-            opj_t1_3d_t *t1 = NULL;     /* T1 component */
-            t1 = t1_3d_create(tcd->cinfo);
-            t1_3d_decode_cblks(t1, tile, tcd->tcp);
-            t1_3d_destroy(t1);
-        }
-
-        t1_time = opj_clock() - t1_time;
-#ifdef VERBOSE
-        opj_event_msg(tcd->cinfo, EVT_INFO, "- tier-1 took %f s\n", t1_time);
-#endif
-    } else if ((tcd->cp->encoding_format == ENCOD_2GR) ||
-               (tcd->cp->encoding_format == ENCOD_3GR)) {
-        opj_event_msg(tcd->cinfo, EVT_INFO,
-                      "Tcd_decode_tile: Entropy decoding -- Does nothing :-D\n");
-        /*
-        gr = golomb_create(tcd->cinfo, tcd->volume, tcd->cp);
-        l = golomb_decode(gr, tileno, tile, src, len);
-        golomb_destroy(gr);
-        if (l == -999) {
-            eof = 1;
-            opj_event_msg(tcd->cinfo, EVT_ERROR, "Tcd_decode_tile: incomplete bitstream\n");
-        }
-        */
-    }
-
-    /*----------------DWT---------------------*/
-    fprintf(stdout, "[INFO] Tcd_decode_tile: Inverse DWT\n");
-    dwt_time = opj_clock(); /* time needed to decode a tile */
-    for (compno = 0; compno < tile->numcomps; compno++) {
-        opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-        int stops[3], dwtid[3];
-
-        for (i = 0; i < 3; i++) {
-            if (tcd->cp->reduce[i] != 0) {
-                tcd->volume->comps[compno].resno_decoded[i] =
-                    tile->comps[compno].numresolution[i] - tcd->cp->reduce[i] - 1;
-            }
-            stops[i] = tilec->numresolution[i] - 1 -
-                       tcd->volume->comps[compno].resno_decoded[i];
-            if (stops[i] < 0) {
-                stops[i] = 0;
-            }
-            dwtid[i] = tcd->cp->tcps->tccps[compno].dwtid[i];
-        }
-
-        dwt_decode(tilec, stops, dwtid);
-
-        for (i = 0; i < 3; i++) {
-            if (tile->comps[compno].numresolution[i] > 0) {
-                tcd->volume->comps[compno].factor[i] = tile->comps[compno].numresolution[i] -
-                                                       (tcd->volume->comps[compno].resno_decoded[i] + 1);
-                if ((tcd->volume->comps[compno].factor[i]) < 0) {
-                    tcd->volume->comps[compno].factor[i] = 0;
-                }
-            }
-        }
-    }
-    dwt_time = opj_clock() - dwt_time;
-#ifdef VERBOSE
-    opj_event_msg(tcd->cinfo, EVT_INFO, "- dwt took %f s\n", dwt_time);
-#endif
-
-    /*----------------MCT-------------------*/
-
-    if (tcd->tcp->mct) {
-        if (tcd->tcp->tccps[0].reversible == 1) {
-            mct_decode(tile->comps[0].data, tile->comps[1].data, tile->comps[2].data,
-                       (tile->comps[0].x1 - tile->comps[0].x0) * (tile->comps[0].y1 -
-                               tile->comps[0].y0) * (tile->comps[0].z1 - tile->comps[0].z0));
-        } else {
-            mct_decode_real(tile->comps[0].data, tile->comps[1].data, tile->comps[2].data,
-                            (tile->comps[0].x1 - tile->comps[0].x0) * (tile->comps[0].y1 -
-                                    tile->comps[0].y0) * (tile->comps[0].z1 - tile->comps[0].z0));
-        }
-    }
-
-    /*---------------TILE-------------------*/
-
-    for (compno = 0; compno < tile->numcomps; compno++) {
-        opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-        opj_tcd_resolution_t *res =
-            &tilec->resolutions[tcd->volume->comps[compno].resno_decoded[0]];
-        int adjust;
-        int minval = tcd->volume->comps[compno].sgnd ? -(1 <<
-                     (tcd->volume->comps[compno].prec - 1)) : 0;
-        int maxval = tcd->volume->comps[compno].sgnd ? (1 <<
-                     (tcd->volume->comps[compno].prec - 1)) - 1 : (1 <<
-                             tcd->volume->comps[compno].prec) - 1;
-
-        int tw = tilec->x1 - tilec->x0;
-        int w = tcd->volume->comps[compno].w;
-        int th = tilec->y1 - tilec->y0;
-        int h = tcd->volume->comps[compno].h;
-
-        int i, j, k;
-        int offset_x = int_ceildivpow2(tcd->volume->comps[compno].x0,
-                                       tcd->volume->comps[compno].factor[0]);
-        int offset_y = int_ceildivpow2(tcd->volume->comps[compno].y0,
-                                       tcd->volume->comps[compno].factor[1]);
-        int offset_z = int_ceildivpow2(tcd->volume->comps[compno].z0,
-                                       tcd->volume->comps[compno].factor[2]);
-
-        if (tcd->cp->transform_format == TRF_3D_RLS ||
-                tcd->cp->transform_format == TRF_3D_LSE) {
-            adjust = 0;
-        } else {
-            adjust = tcd->volume->comps[compno].sgnd ? 0 : 1 <<
-                     (tcd->volume->comps[compno].prec - 1); /*sign=='+' --> 2^(prec-1)*/
-            if (tcd->volume->comps[compno].dcoffset != 0) {
-                adjust += tcd->volume->comps[compno].dcoffset;
-                fprintf(stdout, "[INFO] DC Offset applied: DCO = %d -> adjust = %d\n",
-                        tcd->volume->comps[compno].dcoffset, adjust);
-            }
-        }
-
-        for (k = res->z0; k < res->z1; k++) {
-            for (j = res->y0; j < res->y1; j++) {
-                for (i = res->x0; i < res->x1; i++) {
-                    int v;
-                    float tmp = (float)((tilec->data[i - res->x0 + (j - res->y0) * tw +
-                                                       (k - res->z0) * tw * th]) / 8192.0);
-
-                    if (tcd->tcp->tccps[compno].reversible == 1) {
-                        v = tilec->data[i - res->x0 + (j - res->y0) * tw + (k - res->z0) * tw * th];
-                    } else {
-                        int tmp2 = ((int)(floor(fabs(tmp)))) + ((int) floor(fabs(tmp * 2)) % 2);
-                        v = ((tmp < 0) ? -tmp2 : tmp2);
-                    }
-                    v += adjust;
-
-                    tcd->volume->comps[compno].data[(i - offset_x) + (j - offset_y) * w +
-                                                    (k - offset_z) * w * h] = int_clamp(v, minval, maxval);
-                }
-            }
-        }
-    }
-
-    tile_time = opj_clock() - tile_time;    /* time needed to decode a tile */
-    opj_event_msg(tcd->cinfo, EVT_INFO, "- tile decoded in %f s\n", tile_time);
-
-    for (compno = 0; compno < tile->numcomps; compno++) {
-        opj_free(tcd->tcd_volume->tiles[tileno].comps[compno].data);
-        tcd->tcd_volume->tiles[tileno].comps[compno].data = NULL;
-    }
-
-    if (eof) {
-        return false;
-    }
-
-    return true;
-}
-
diff --git a/src/lib/openjp3d/tcd.h b/src/lib/openjp3d/tcd.h
deleted file mode 100644 (file)
index bac5cd0..0000000
+++ /dev/null
@@ -1,343 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * Copyright (c) 2006, Mónica Díez García, Image Processing Laboratory, University of Valladolid, Spain
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef __TCD_H
-#define __TCD_H
-/**
-@file tcd.h
-@brief Implementation of a tile coder/decoder (TCD)
-
-The functions in TCD.C have for goal to encode or decode each tile independently from
-each other. The functions in TCD.C are used by some function in JP3D.C.
-*/
-
-/** @defgroup TCD TCD - Implementation of a tile coder/decoder */
-/*@{*/
-
-/**
-Tile coder/decoder: segment instance
-*/
-typedef struct opj_tcd_seg {
-    /** Number of passes in the segment */
-    int numpasses;
-    /** Length of information */
-    int len;
-    /** Data */
-    unsigned char *data;
-    /** Number of passes possible for the segment */
-    int maxpasses;
-    /** Number of passes added to the segment */
-    int numnewpasses;
-    /** New length after inclusion of segments */
-    int newlen;
-} opj_tcd_seg_t;
-
-/**
-Tile coder/decoder: pass instance
-*/
-typedef struct opj_tcd_pass {
-    /** Rate obtained in the pass*/
-    int rate;
-    /** Distorsion obtained in the pass*/
-    double distortiondec;
-    int term;
-    /** Length of information */
-    int len;
-} opj_tcd_pass_t;
-
-/**
-Tile coder/decoder: layer instance
-*/
-typedef struct opj_tcd_layer {
-    /** Number of passes in the layer */
-    int numpasses;
-    /** Length of information */
-    int len;
-    /** Distortion within layer */
-    double disto;             /* add for index (Cfr. Marcela) */
-    unsigned char *data;      /* data */
-} opj_tcd_layer_t;
-
-/**
-Tile coder/decoder: codeblock instance
-*/
-typedef struct opj_tcd_cblk {
-    /** Dimension of the code-blocks : left upper corner (x0, y0, z0) */
-    int x0, y0, z0;
-    /** Dimension of the code-blocks : right low corner (x1,y1,z1) */
-    int x1, y1, z1;
-    /** Number of bits per simbol in codeblock */
-    int numbps;
-    int numlenbits;
-    int len;                      /* length */
-    /** Number of pass already done for the code-blocks */
-    int numpasses;
-    /** number of pass added to the code-blocks */
-    int numnewpasses;
-    /** Number of segments */
-    int numsegs;
-    /** Segments information */
-    opj_tcd_seg_t segs[100];
-    /** Number of passes in the layer */
-    int numpassesinlayers;
-    /** Layer information */
-    opj_tcd_layer_t layers[100];
-    /** Total number of passes */
-    int totalpasses;
-    /** Information about the passes */
-    opj_tcd_pass_t passes[100];
-    /* Data */
-    unsigned char data[524288];
-    /*unsigned char *data;*/
-} opj_tcd_cblk_t;
-
-/**
-Tile coder/decoder: precint instance
-*/
-typedef struct opj_tcd_precinct {
-    /** Dimension of the precint : left upper corner (x0, y0, z0) */
-    int x0, y0, z0;
-    /** Dimension of the precint : right low corner (x1,y1,z1) */
-    int x1, y1, z1;
-    /** Number of codeblocks in precinct in width and height and length*/
-    int cblkno[3];
-    /** Information about the codeblocks */
-    opj_tcd_cblk_t *cblks;
-    /** Inclusion tree */
-    opj_tgt_tree_t *incltree;
-    /** Missing MSBs tree */
-    opj_tgt_tree_t *imsbtree;
-} opj_tcd_precinct_t;
-
-/**
-Tile coder/decoder: subband instance
-*/
-typedef struct opj_tcd_band {
-    /** Dimension of the subband : left upper corner (x0, y0, z0) */
-    int x0, y0, z0;
-    /** Dimension of the subband : right low corner (x1,y1,z1) */
-    int x1, y1, z1;
-    /** Information about the precints */
-    opj_tcd_precinct_t *precincts;    /* precinct information */
-    /** Number of bits per symbol in band */
-    int numbps;
-    /** Quantization stepsize associated */
-    float stepsize;
-    /** Band orientation (O->LLL,...,7->HHH) */
-    int bandno;
-} opj_tcd_band_t;
-
-/**
-Tile coder/decoder: resolution instance
-*/
-typedef struct opj_tcd_resolution {
-    /** Dimension of the resolution level : left upper corner (x0, y0, z0) */
-    int x0, y0, z0;
-    /** Dimension of the resolution level : right low corner (x1,y1,z1) */
-    int x1, y1, z1;
-    /** Number of precints in each dimension for the resolution level */
-    int prctno[3];
-    /** Number of subbands for the resolution level */
-    int numbands;
-    /** Subband information */
-    opj_tcd_band_t *bands;
-} opj_tcd_resolution_t;
-
-/**
-Tile coder/decoder: component instance
-*/
-typedef struct opj_tcd_tilecomp {
-    /** Dimension of the component : left upper corner (x0, y0, z0) */
-    int x0, y0, z0;
-    /** Dimension of the component : right low corner (x1,y1,z1) */
-    int x1, y1, z1;
-    /** Number of resolutions level if DWT transform*/
-    int numresolution[3];
-    /** Resolution information */
-    opj_tcd_resolution_t *resolutions;
-    /** Data of the component */
-    int *data;
-    /** Fixed_quality related */
-    int nbpix;
-    /** Number of bits per voxel in component */
-    int bpp;
-} opj_tcd_tilecomp_t;
-
-/**
-Tile coder/decoder: tile instance
-*/
-typedef struct opj_tcd_tile {
-    /** Dimension of the tile : left upper corner (x0, y0, z0) */
-    int x0, y0, z0;
-    /** Dimension of the tile : right low corner (x1,y1,z1) */
-    int x1, y1, z1;
-    /** Number of components in tile */
-    int numcomps;
-    /** Components information */
-    opj_tcd_tilecomp_t *comps;
-    /** Fixed_quality related : no of bytes of data*/
-    int nbpix;
-    /** Fixed_quality related : distortion achieved in tile */
-    double distotile;
-    /** Fixed_quality related : distortion achieved in each layer */
-    double distolayer[100];
-} opj_tcd_tile_t;
-
-/**
-Tile coder/decoder: volume instance
-*/
-typedef struct opj_tcd_volume {
-    /** Number of tiles in width and height and length */
-    int tw, th, tl;
-    /** Tiles information */
-    opj_tcd_tile_t *tiles;
-} opj_tcd_volume_t;
-
-/**
-Tile coder/decoder
-*/
-typedef struct opj_tcd {
-    /** Codec context */
-    opj_common_ptr cinfo;
-    /** Volume information */
-    opj_volume_t *volume;
-    /** Coding parameters */
-    opj_cp_t *cp;
-    /** Coding/decoding parameters common to all tiles */
-    opj_tcp_t *tcp;
-    /** Info on each volume tile */
-    opj_tcd_volume_t *tcd_volume;
-    /** Pointer to the current encoded/decoded tile */
-    opj_tcd_tile_t *tcd_tile;
-    /** Current encoded/decoded tile */
-    int tcd_tileno;
-
-    /**@name working variables */
-    /*@{*/
-    opj_tcd_tile_t *tile;
-    opj_tcd_tilecomp_t *tilec;
-    opj_tcd_resolution_t *res;
-    opj_tcd_band_t *band;
-    opj_tcd_precinct_t *prc;
-    opj_tcd_cblk_t *cblk;
-    /*@}*/
-} opj_tcd_t;
-
-/** @name Funciones generales */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-
-/**
-Dump the content of a tcd structure
-*/
-void tcd_dump(FILE *fd, opj_tcd_t *tcd, opj_tcd_volume_t *img);
-/**
-Create a new TCD handle
-@param cinfo Codec context info
-@return Returns a new TCD handle if successful returns NULL otherwise
-*/
-opj_tcd_t* tcd_create(opj_common_ptr cinfo);
-/**
-Destroy a previously created TCD handle
-@param tcd TCD handle to destroy
-*/
-void tcd_destroy(opj_tcd_t *tcd);
-/**
-Initialize the tile coder (allocate the memory)
-@param tcd TCD handle
-@param volume Raw volume
-@param cp Coding parameters
-@param curtileno Number that identifies the tile that will be encoded
-*/
-void tcd_malloc_encode(opj_tcd_t *tcd, opj_volume_t * volume, opj_cp_t * cp,
-                       int curtileno);
-/**
-Initialize the tile coder (reuses the memory allocated by tcd_malloc_encode)(for 3D-DWT)
-@param tcd TCD handle
-@param volume Raw volume
-@param cp Coding parameters
-@param curtileno Number that identifies the tile that will be encoded
-*/
-void tcd_init_encode(opj_tcd_t *tcd, opj_volume_t * volume, opj_cp_t * cp,
-                     int curtileno);
-/**
-Free the memory allocated for encoding
-@param tcd TCD handle
-*/
-void tcd_free_encode(opj_tcd_t *tcd);
-/**
-Initialize the tile decoder
-@param tcd TCD handle
-@param volume Raw volume
-@param cp Coding parameters
-*/
-void tcd_malloc_decode(opj_tcd_t *tcd, opj_volume_t * volume, opj_cp_t * cp);
-
-void tcd_makelayer_fixed(opj_tcd_t *tcd, int layno, int final);
-void tcd_rateallocate_fixed(opj_tcd_t *tcd);
-void tcd_makelayer(opj_tcd_t *tcd, int layno, double thresh, int final);
-bool tcd_rateallocate(opj_tcd_t *tcd, unsigned char *dest, int len,
-                      opj_volume_info_t * volume_info);
-/**
-Encode a tile from the raw volume into a buffer
-@param tcd TCD handle
-@param tileno Number that identifies one of the tiles to be encoded
-@param dest Destination buffer
-@param len Length of destination buffer
-@param volume_info Creation of index file
-@return
-*/
-int tcd_encode_tile(opj_tcd_t *tcd, int tileno, unsigned char *dest, int len,
-                    opj_volume_info_t * volume_info);
-/**
-Decode a tile from a buffer into a raw volume
-@param tcd TCD handle
-@param src Source buffer
-@param len Length of source buffer
-@param tileno Number that identifies one of the tiles to be decoded
-*/
-bool tcd_decode_tile(opj_tcd_t *tcd, unsigned char *src, int len, int tileno);
-/**
-Free the memory allocated for decoding
-@param tcd TCD handle
-*/
-void tcd_free_decode(opj_tcd_t *tcd);
-
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif /* __TCD_H */
diff --git a/src/lib/openjp3d/tgt.c b/src/lib/openjp3d/tgt.c
deleted file mode 100644 (file)
index fc1222d..0000000
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "opj_includes.h"
-
-/*
-==========================================================
-   Tag-tree coder interface
-==========================================================
-*/
-void tgt_tree_dump(FILE *fd, opj_tgt_tree_t * tree)
-{
-    int nodesno;
-
-    fprintf(fd, "TGT_TREE {\n");
-    fprintf(fd, "  numnodes: %d \n", tree->numnodes);
-    fprintf(fd, "  numleafsh: %d, numleafsv: %d, numleafsz: %d,\n", tree->numleafsh,
-            tree->numleafsv, tree->numleafsz);
-
-    for (nodesno = 0; nodesno < tree->numnodes; nodesno++) {
-        fprintf(fd, "tgt_node %d {\n", nodesno);
-        fprintf(fd, "  value: %d \n", tree->nodes[nodesno].value);
-        fprintf(fd, "  low: %d \n", tree->nodes[nodesno].low);
-        fprintf(fd, "  known: %d \n", tree->nodes[nodesno].known);
-        if (tree->nodes[nodesno].parent) {
-            fprintf(fd, "  parent.value: %d \n", tree->nodes[nodesno].parent->value);
-            fprintf(fd, "  parent.low: %d \n", tree->nodes[nodesno].parent->low);
-            fprintf(fd, "  parent.known: %d \n", tree->nodes[nodesno].parent->known);
-        }
-        fprintf(fd, "}\n");
-
-    }
-    fprintf(fd, "}\n");
-
-}
-
-
-opj_tgt_tree_t *tgt_create(int numleafsh, int numleafsv, int numleafsz)
-{
-
-    int nplh[32];
-    int nplv[32];
-    int nplz[32];
-    opj_tgt_node_t *node = NULL;
-    opj_tgt_node_t *parentnode = NULL;
-    opj_tgt_node_t *parentnode0 = NULL;
-    opj_tgt_node_t *parentnode1 = NULL;
-    opj_tgt_tree_t *tree = NULL;
-    int i, j, k, p, p0;
-    int numlvls;
-    int n, z = 0;
-
-    tree = (opj_tgt_tree_t *) opj_malloc(sizeof(opj_tgt_tree_t));
-    if (!tree) {
-        return NULL;
-    }
-    tree->numleafsh = numleafsh;
-    tree->numleafsv = numleafsv;
-    tree->numleafsz = numleafsz;
-
-    numlvls = 0;
-    nplh[0] = numleafsh;
-    nplv[0] = numleafsv;
-    nplz[0] = numleafsz;
-    tree->numnodes = 0;
-    do {
-        n = nplh[numlvls] * nplv[numlvls] * nplz[numlvls];
-        nplh[numlvls + 1] = (nplh[numlvls] + 1) / 2;
-        nplv[numlvls + 1] = (nplv[numlvls] + 1) / 2;
-        nplz[numlvls + 1] = (nplz[numlvls] + 1) / 2;
-        tree->numnodes += n;
-        ++numlvls;
-    } while (n > 1);
-
-    if (tree->numnodes == 0) {
-        opj_free(tree);
-        return NULL;
-    }
-
-    tree->nodes = (opj_tgt_node_t *) opj_malloc(tree->numnodes * sizeof(
-                      opj_tgt_node_t));
-    if (!tree->nodes) {
-        opj_free(tree);
-        return NULL;
-    }
-
-    node = tree->nodes;
-    parentnode = &tree->nodes[tree->numleafsh * tree->numleafsv * tree->numleafsz];
-    parentnode0 = parentnode;
-    parentnode1 = parentnode;
-    /*fprintf(stdout,"\nH %d V %d Z %d numlvls %d nodes %d\n",tree->numleafsh,tree->numleafsv,tree->numleafsz,numlvls,tree->numnodes);*/
-    for (i = 0; i < numlvls - 1; ++i) {
-        for (z = 0; z < nplz[i]; ++z) {
-            for (j = 0; j < nplv[i]; ++j) {
-                k = nplh[i];
-                while (--k >= 0) {
-                    node->parent =
-                        parentnode;      /*fprintf(stdout,"node[%d].parent = node[%d]\n",n,p);*/
-                    ++node;
-                    if (--k >= 0) {
-                        node->parent =
-                            parentnode;  /*fprintf(stdout,"node[%d].parent = node[%d]\n",n,p);*/
-                        ++node;
-                    }
-                    ++parentnode;
-                }
-                if ((j & 1) || j == nplv[i] - 1) {
-                    parentnode0 = parentnode;
-                } else {
-                    parentnode = parentnode0;
-                }
-            }
-            if ((z & 1) || z == nplz[i] - 1) {
-                parentnode1 = parentnode;
-            } else {
-                parentnode0 = parentnode1;
-                parentnode = parentnode1;
-            }
-        }
-    }
-    node->parent = 0;
-
-
-    tgt_reset(tree);
-
-    return tree;
-}
-
-void tgt_destroy(opj_tgt_tree_t *tree)
-{
-    opj_free(tree->nodes);
-    opj_free(tree);
-}
-
-void tgt_reset(opj_tgt_tree_t *tree)
-{
-    int i;
-
-    if (NULL == tree) {
-        return;
-    }
-
-    for (i = 0; i < tree->numnodes; i++) {
-        tree->nodes[i].value = 999;
-        tree->nodes[i].low = 0;
-        tree->nodes[i].known = 0;
-    }
-}
-
-void tgt_setvalue(opj_tgt_tree_t *tree, int leafno, int value)
-{
-    opj_tgt_node_t *node;
-    node = &tree->nodes[leafno];
-    while (node && node->value > value) {
-        node->value = value;
-        node = node->parent;
-    }
-}
-
-void tgt_encode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno,
-                int threshold)
-{
-    opj_tgt_node_t *stk[31];
-    opj_tgt_node_t **stkptr;
-    opj_tgt_node_t *node;
-    int low;
-
-    stkptr = stk;
-    node = &tree->nodes[leafno];
-    while (node->parent) {
-        *stkptr++ = node;
-        node = node->parent;
-    }
-
-    low = 0;
-    for (;;) {
-        if (low > node->low) {
-            node->low = low;
-        } else {
-            low = node->low;
-        }
-
-        while (low < threshold) {
-            if (low >= node->value) {
-                if (!node->known) {
-                    bio_write(bio, 1, 1);
-                    node->known = 1;
-                }
-                break;
-            }
-            bio_write(bio, 0, 1);
-            ++low;
-        }
-
-        node->low = low;
-        if (stkptr == stk) {
-            break;
-        }
-        node = *--stkptr;
-    }
-}
-
-int tgt_decode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno, int threshold)
-{
-    opj_tgt_node_t *stk[31];
-    opj_tgt_node_t **stkptr;
-    opj_tgt_node_t *node;
-    int low;
-
-    stkptr = stk;
-    node = &tree->nodes[leafno];
-    while (node->parent) {
-        *stkptr++ = node;
-        node = node->parent;
-    }
-
-    low = 0;
-    for (;;) {
-        if (low > node->low) {
-            node->low = low;
-        } else {
-            low = node->low;
-        }
-        while (low < threshold && low < node->value) {
-            if (bio_read(bio, 1)) {
-                node->value = low;
-            } else {
-                ++low;
-            }
-        }
-        node->low = low;
-        if (stkptr == stk) {
-            break;
-        }
-        node = *--stkptr;
-    }
-
-    return (node->value < threshold) ? 1 : 0;
-}
diff --git a/src/lib/openjp3d/tgt.h b/src/lib/openjp3d/tgt.h
deleted file mode 100644 (file)
index ae93719..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __TGT_H
-#define __TGT_H
-/**
-@file tgt.h
-@brief Implementation of a tag-tree coder (TGT)
-
-The functions in TGT.C have for goal to realize a tag-tree coder. The functions in TGT.C
-are used by some function in T2.C.
-*/
-
-/** @defgroup TGT TGT - Implementation of a tag-tree coder */
-/*@{*/
-
-/**
-Tag node
-*/
-typedef struct opj_tgt_node {
-    /** Node parent reference */
-    struct opj_tgt_node *parent;
-    /**  */
-    int value;
-    /**  */
-    int low;
-    /**  */
-    int known;
-} opj_tgt_node_t;
-
-/**
-Tag tree
-*/
-typedef struct opj_tgt_tree {
-    /** Number of leaves from horizontal axis */
-    int numleafsh;
-    /** Number of leaves from vertical axis */
-    int numleafsv;
-    /** Number of leaves from axial axis */
-    int numleafsz;
-    /** Number of nodes */
-    int numnodes;
-    /** Reference to each node instance */
-    opj_tgt_node_t *nodes;
-} opj_tgt_tree_t;
-
-/** @name Funciones generales */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-/**
-Create a tag-tree
-@param numleafsh Width of the array of leafs of the tree
-@param numleafsv Height of the array of leafs of the tree
-@param numleafsz Depth of the array of leafs of the tree
-@return Returns a new tag-tree if successful, returns NULL otherwise
-*/
-opj_tgt_tree_t *tgt_create(int numleafsh, int numleafsv, int numleafsz);
-/**
-Destroy a tag-tree, liberating memory
-@param tree Tag-tree to destroy
-*/
-void tgt_destroy(opj_tgt_tree_t *tree);
-/**
-Reset a tag-tree (set all leaves to 0)
-@param tree Tag-tree to reset
-*/
-void tgt_reset(opj_tgt_tree_t *tree);
-/**
-Set the value of a leaf of a tag-tree
-@param tree Tag-tree to modify
-@param leafno Number that identifies the leaf to modify
-@param value New value of the leaf
-*/
-void tgt_setvalue(opj_tgt_tree_t *tree, int leafno, int value);
-/**
-Encode the value of a leaf of the tag-tree up to a given threshold
-@param bio Pointer to a BIO handle
-@param tree Tag-tree to modify
-@param leafno Number that identifies the leaf to encode
-@param threshold Threshold to use when encoding value of the leaf
-*/
-void tgt_encode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno,
-                int threshold);
-/**
-Decode the value of a leaf of the tag-tree up to a given threshold
-@param bio Pointer to a BIO handle
-@param tree Tag-tree to decode
-@param leafno Number that identifies the leaf to decode
-@param threshold Threshold to use when decoding value of the leaf
-@return Returns 1 if the node's value < threshold, returns 0 otherwise
-*/
-int tgt_decode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno, int threshold);
-
-/*@}*/
-/* ----------------------------------------------------------------------- */
-void tgt_tree_dump(FILE *fd, opj_tgt_tree_t * tree);
-/*@}*/
-
-#endif /* __TGT_H */
diff --git a/src/lib/openjp3d/volume.c b/src/lib/openjp3d/volume.c
deleted file mode 100644 (file)
index 7cd327e..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "opj_includes.h"
-#include "volume.h"
-#include "openjp3d.h"
-
-opj_volume_t* OPJ_CALLCONV opj_volume_create(int numcmpts,
-        opj_volume_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc)
-{
-    int compno;
-    opj_volume_t *volume = NULL;
-
-    volume = (opj_volume_t*)opj_malloc(sizeof(opj_volume_t));
-    if (volume) {
-        volume->color_space = clrspc;
-        volume->numcomps = numcmpts;
-        /* allocate memory for the per-component information */
-        volume->comps = (opj_volume_comp_t*)opj_malloc(volume->numcomps * sizeof(
-                            opj_volume_comp_t));
-        if (!volume->comps) {
-            opj_volume_destroy(volume);
-            return NULL;
-        }
-        /* create the individual volume components */
-        for (compno = 0; compno < numcmpts; compno++) {
-            opj_volume_comp_t *comp = &volume->comps[compno];
-            comp->dx = cmptparms[compno].dx;
-            comp->dy = cmptparms[compno].dy;
-            comp->dz = cmptparms[compno].dz;
-            comp->w = cmptparms[compno].w;
-            comp->h = cmptparms[compno].h;
-            comp->l = cmptparms[compno].l;
-            comp->x0 = cmptparms[compno].x0;
-            comp->y0 = cmptparms[compno].y0;
-            comp->z0 = cmptparms[compno].z0;
-            comp->prec = cmptparms[compno].prec;
-            comp->bpp = cmptparms[compno].bpp;
-            comp->sgnd = cmptparms[compno].sgnd;
-            comp->bigendian = cmptparms[compno].bigendian;
-            comp->dcoffset = cmptparms[compno].dcoffset;
-            comp->data = (int*)opj_malloc(comp->w * comp->h * comp->l * sizeof(int));
-            if (!comp->data) {
-                fprintf(stdout, "Unable to malloc comp->data (%d x %d x %d x bytes)", comp->w,
-                        comp->h, comp->l);
-                opj_volume_destroy(volume);
-                return NULL;
-            }
-            /*fprintf(stdout,"%d %d %d %d %d %d %d %d %d", comp->w,comp->h, comp->l, comp->dx, comp->dy, comp->dz, comp->prec, comp->bpp, comp->sgnd);*/
-        }
-    }
-
-    return volume;
-}
-
-void OPJ_CALLCONV opj_volume_destroy(opj_volume_t *volume)
-{
-    int i;
-    if (volume) {
-        if (volume->comps) {
-            /* volume components */
-            for (i = 0; i < volume->numcomps; i++) {
-                opj_volume_comp_t *volume_comp = &volume->comps[i];
-                if (volume_comp->data) {
-                    opj_free(volume_comp->data);
-                }
-            }
-            opj_free(volume->comps);
-        }
-        opj_free(volume);
-    }
-}
-
diff --git a/src/lib/openjp3d/volume.h b/src/lib/openjp3d/volume.h
deleted file mode 100644 (file)
index ae7fdc2..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2006, Mónica Díez García, Image Processing Laboratory, University of Valladolid, Spain
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef __VOLUME_H
-#define __VOLUME_H
-/**
-@file volume.h
-@brief Implementation of operations on volumes (VOLUME)
-
-The functions in VOLUME.C have for goal to realize operations on volumes.
-*/
-
-/** @defgroup VOLUME VOLUME - Implementation of operations on volumes */
-/*@{*/
-
-
-/*@}*/
-
-#endif /* __VOLUME_H */
-
diff --git a/src/lib/openjpwl/CMakeLists.txt b/src/lib/openjpwl/CMakeLists.txt
deleted file mode 100644 (file)
index 1b33adb..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-# Makefile for the main JPWL OpenJPEG codecs: JPWL_ j2k_to_image and JPWL_image_to_j2k
-
-add_definitions(-DUSE_JPWL)
-
-set(OPENJPEG_SRCS
-  ${OPENJPEG_SOURCE_DIR}/src/lib/openmj2/bio.c
-  ${OPENJPEG_SOURCE_DIR}/src/lib/openmj2/cio.c
-  ${OPENJPEG_SOURCE_DIR}/src/lib/openmj2/dwt.c
-  ${OPENJPEG_SOURCE_DIR}/src/lib/openmj2/event.c
-  ${OPENJPEG_SOURCE_DIR}/src/lib/openmj2/image.c
-  ${OPENJPEG_SOURCE_DIR}/src/lib/openmj2/j2k.c
-  ${OPENJPEG_SOURCE_DIR}/src/lib/openmj2/jp2.c
-  ${OPENJPEG_SOURCE_DIR}/src/lib/openmj2/jpt.c
-  ${OPENJPEG_SOURCE_DIR}/src/lib/openmj2/mct.c
-  ${OPENJPEG_SOURCE_DIR}/src/lib/openmj2/mqc.c
-  ${OPENJPEG_SOURCE_DIR}/src/lib/openmj2/openjpeg.c
-  ${OPENJPEG_SOURCE_DIR}/src/lib/openmj2/j2k_lib.c
-  ${OPENJPEG_SOURCE_DIR}/src/lib/openmj2/pi.c
-  ${OPENJPEG_SOURCE_DIR}/src/lib/openmj2/raw.c
-  ${OPENJPEG_SOURCE_DIR}/src/lib/openmj2/t1.c
-  ${OPENJPEG_SOURCE_DIR}/src/lib/openmj2/t2.c
-  ${OPENJPEG_SOURCE_DIR}/src/lib/openmj2/tcd.c
-  ${OPENJPEG_SOURCE_DIR}/src/lib/openmj2/tgt.c
-)
-
-set(JPWL_SRCS crc.c jpwl.c jpwl_lib.c rs.c)
-if(APPLE)
-  set_source_files_properties(
-    rs.c
-    PROPERTIES
-    COMPILE_FLAGS -fno-common)
-endif()
-
-include_directories(
-  ${OPENJPEG_BINARY_DIR}/src/lib/openjp2 # opj_config.h
-  ${OPENJPEG_SOURCE_DIR}/src/lib/openmj2
-  ${OPENJPEG_SOURCE_DIR}/src/lib/openjpwl
-  )
-
-# Build the library
-if(WIN32)
-  if(BUILD_SHARED_LIBS)
-    add_definitions(-DOPJ_EXPORTS)
-  else()
-    add_definitions(-DOPJ_STATIC)
-  endif()
-endif()
-add_library(openjpwl ${JPWL_SRCS} ${OPENJPEG_SRCS})
-if(UNIX)
-  target_link_libraries(openjpwl m)
-endif()
-set_target_properties(openjpwl
-  PROPERTIES ${OPENJPEG_LIBRARY_PROPERTIES})
-if(NOT ${CMAKE_VERSION} VERSION_LESS "2.8.12")
-  target_compile_options(openjpwl PRIVATE ${OPENJPEG_LIBRARY_COMPILE_OPTIONS})
-endif()
-
-# Install library
-install(TARGETS openjpwl
-  EXPORT OpenJPEGTargets
-  RUNTIME DESTINATION ${OPENJPEG_INSTALL_BIN_DIR} COMPONENT Applications
-  LIBRARY DESTINATION ${OPENJPEG_INSTALL_LIB_DIR} COMPONENT Libraries
-  ARCHIVE DESTINATION ${OPENJPEG_INSTALL_LIB_DIR} COMPONENT Libraries
-)
diff --git a/src/lib/openjpwl/README.txt b/src/lib/openjpwl/README.txt
deleted file mode 100644 (file)
index e289e9e..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-===============================================================================
-       JPEG2000 Part 11 (ISO/IEC 15444-11 JPWL) Software
-
-
-
-               Version 20061213
-===============================================================================
-
-
-
-
-
-1. Scope
-=============
-
-This document describes the installation and use of the JPWL module in the framework of OpenJPEG library.
-
-This implementation has been developed from OpenJPEG implementation of JPEG2000 standard, and for this reason it is written in C language.
-
-If you find some bugs or if you have problems using the encoder/decoder, please send an e-mail to jpwl@diei.unipg.it
-
-
-2. Installing the code
-==========================
-
-The JPWL code is integrated with the standard OpenJPEG library and codecs: it is activated by setting the macro USE_JPWL to defined in the preprocessor configuration options of your preferred C compiler.
-
-2.1. Compiling the source code in Windows
--------------------------------------------
-
-The "jpwl" directory is already populated with a couple of Visual C++ 6.0 workspaces
-
- * JPWL_image_to_j2k.dsw - Creates the encoder with JPWL functionalities
- * JPWL_j2k_to_image.dsw - Creates the decoder with JPWL functionalities
-
-2.2. Compiling the source code in Unix-like systems
------------------------------------------------------
-
-Under linux, enter the jpwl directory and type "make clean" and "make".
-
-
-3. Running the JPWL software
-=========================
-
-The options available at the command line are exactly the same of the base OpenJPEG codecs. In addition, there is a "-W" switch that activates JPWL functionalities.
-
-3.1. JPWL Encoder
--------------------
-
--W           : adoption of JPWL (Part 11) capabilities (-W params)
-               The parameters can be written and repeated in any order:
-               [h<tile><=type>,s<tile><=method>,a=<addr>,z=<size>,g=<range>,...
-                ...,p<tile:pack><=type>]
-
-                 h selects the header error protection (EPB): 'type' can be
-                   [0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS]
-                   if 'tile' is absent, it applies to main and tile headers
-                   if 'tile' is present, it applies from that tile
-                     onwards, up to the next h<tile> spec, or to the last tile
-                     in the codestream (max. 16 specs)
-
-                 p selects the packet error protection (EEP/UEP with EPBs)
-                  to be applied to raw data: 'type' can be
-                   [0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS]
-                   if 'tile:pack' is absent, it starts from tile 0, packet 0
-                   if 'tile:pack' is present, it applies from that tile
-                     and that packet onwards, up to the next packet spec
-                     or to the last packet in the last tile in the codestream
-                     (max. 16 specs)
-
-                 s enables sensitivity data insertion (ESD): 'method' can be
-                   [-1=NO ESD 0=RELATIVE ERROR 1=MSE 2=MSE REDUCTION 3=PSNR
-                    4=PSNR INCREMENT 5=MAXERR 6=TSE 7=RESERVED]
-                   if 'tile' is absent, it applies to main header only
-                   if 'tile' is present, it applies from that tile
-                     onwards, up to the next s<tile> spec, or to the last tile
-                     in the codestream (max. 16 specs)
-
-                 g determines the addressing mode: <range> can be
-                   [0=PACKET 1=BYTE RANGE 2=PACKET RANGE]
-
-                 a determines the size of data addressing: <addr> can be
-                   2/4 bytes (small/large codestreams). If not set, auto-mode
-
-                 z determines the size of sensitivity values: <size> can be
-                   1/2 bytes, for the transformed pseudo-floating point value
-
-                 ex.:
- h,h0=64,h3=16,h5=32,p0=78,p0:24=56,p1,p3:0=0,p3:20=32,s=0,s0=6,s3=-1,a=0,g=1,z=1
-                 means
-                   predefined EPB in MH, rs(64,32) from TPH 0 to TPH 2,
-                   CRC-16 in TPH 3 and TPH 4, CRC-32 in remaining TPHs,
-                   UEP rs(78,32) for packets 0 to 23 of tile 0,
-                   UEP rs(56,32) for packets 24 to the last of tile 0,
-                   UEP rs default for packets of tile 1,
-                   no UEP for packets 0 to 19 of tile 3,
-                   UEP CRC-32 for packets 20 of tile 3 to last tile,
-                   relative sensitivity ESD for MH,
-                   TSE ESD from TPH 0 to TPH 2, byte range with automatic
-                   size of addresses and 1 byte for each sensitivity value
-
-                 ex.:
-                       h,s,p
-                 means
-                   default protection to headers (MH and TPHs) as well as
-                   data packets, one ESD in MH
-
-                 N.B.: use the following recommendations when specifying
-                       the JPWL parameters list
-                   - when you use UEP, always pair the 'p' option with 'h'
-
-3.2. JPWL Decoder
--------------------
-
-  -W <options>
-    Activates the JPWL correction capability, if the codestream complies.
-    Options can be a comma separated list of <param=val> tokens:
-    c, c=numcomps
-       numcomps is the number of expected components in the codestream
-       (search of first EPB rely upon this, default is 3)
-
-
-4. Known bugs and limitations
-===============================
-
-4.1. Bugs
------------
-
-* It is not possible to save a JPWL encoded codestream using the wrapped file format (i.e. JP2): only raw file format (i.e. J2K) is working
-
-4.2. Limitations
-------------------
-
-* When specifying an UEP protection, you need to activate even TPH protection for those tiles where there is a protection of the packets
-* RED insertion is not currently implemented at the decoder
-* JPWL at entropy coding level is not implemented
diff --git a/src/lib/openjpwl/crc.c b/src/lib/openjpwl/crc.c
deleted file mode 100644 (file)
index 96924a3..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * Copyright (c) 2005-2006, Dept. of Electronic and Information Engineering, Universita' degli Studi di Perugia, Italy
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifdef USE_JPWL
-
-#include "crc.h"
-
-/**
-@file crc.c
-@brief Functions used to compute the 16- and 32-bit CRC of byte arrays
-
-*/
-
-/** file: CRC16.CPP
- *
- * CRC - Cyclic Redundancy Check (16-bit)
- *
- * A CRC-checksum is used to be sure, the data hasn't changed or is false.
- * To create a CRC-checksum, initialise a check-variable (unsigned short),
- * and set this to zero. Than call for every byte in the file (e.g.) the
- * procedure updateCRC16 with this check-variable as the first parameter,
- * and the byte as the second. At the end, the check-variable contains the
- * CRC-checksum.
- *
- * implemented by Michael Neumann, 14.06.1998
- *
- */
-const unsigned short CRC16_table[256] = {
-    0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
-    0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
-    0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
-    0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
-    0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,
-    0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
-    0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,
-    0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
-    0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,
-    0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
-    0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
-    0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
-    0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,
-    0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
-    0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,
-    0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
-    0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
-    0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
-    0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
-    0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
-    0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
-    0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
-    0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,
-    0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,
-    0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,
-    0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,
-    0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
-    0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,
-    0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
-    0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
-    0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
-    0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0
-};
-
-void updateCRC16(unsigned short *crc, unsigned char data)
-{
-    *crc = CRC16_table[(*crc >> 8) & 0xFF] ^ (*crc << 8) ^ data;
-}
-
-
-/** file: CRC32.CPP
- *
- * CRC - Cyclic Redundancy Check (32-bit)
- *
- * A CRC-checksum is used to be sure, the data hasn't changed or is false.
- * To create a CRC-checksum, initialise a check-variable (unsigned long),
- * and set this to zero. Than call for every byte in the file (e.g.) the
- * procedure updateCRC32 with this check-variable as the first parameter,
- * and the byte as the second. At the end, the check-variable contains the
- * CRC-checksum.
- *
- * implemented by Michael Neumann, 14.06.1998
- *
- */
-const unsigned long CRC32_table[256] = {
-    0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
-    0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
-    0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
-    0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
-    0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
-    0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
-    0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,
-    0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
-    0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
-    0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
-    0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,
-    0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
-    0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,
-    0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
-    0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
-    0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
-    0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
-    0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
-    0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,
-    0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
-    0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
-    0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
-    0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,
-    0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
-    0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
-    0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
-    0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,
-    0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
-    0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,
-    0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
-    0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,
-    0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
-    0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,
-    0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
-    0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
-    0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
-    0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,
-    0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
-    0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,
-    0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
-    0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,
-    0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
-    0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
-};
-
-void updateCRC32(unsigned long *crc, unsigned char data)
-{
-    *crc = CRC32_table[(unsigned char) * crc ^ data] ^ ((*crc >> 8) & 0x00FFFFFF);
-}
-
-#endif /* USE_JPWL */
diff --git a/src/lib/openjpwl/crc.h b/src/lib/openjpwl/crc.h
deleted file mode 100644 (file)
index ea39982..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * Copyright (c) 2005-2006, Dept. of Electronic and Information Engineering, Universita' degli Studi di Perugia, Italy
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifdef USE_JPWL
-
-/**
-@file crc.h
-@brief Functions used to compute the 16- and 32-bit CRC of byte arrays
-
-*/
-
-#ifndef __CRC16_HEADER__
-#define __CRC16_HEADER__
-
-/** file: CRC16.HPP
- *
- * CRC - Cyclic Redundancy Check (16-bit)
- *
- * A CRC-checksum is used to be sure, the data hasn't changed or is false.
- * To create a CRC-checksum, initialise a check-variable (unsigned short),
- * and set this to zero. Than call for every byte in the file (e.g.) the
- * procedure updateCRC16 with this check-variable as the first parameter,
- * and the byte as the second. At the end, the check-variable contains the
- * CRC-checksum.
- *
- * implemented by Michael Neumann, 14.06.1998
- *
- */
-void updateCRC16(unsigned short *, unsigned char);
-
-#endif /* __CRC16_HEADER__ */
-
-
-#ifndef __CRC32_HEADER__
-#define __CRC32_HEADER__
-
-/** file: CRC32.HPP
- *
- * CRC - Cyclic Redundancy Check (32-bit)
- *
- * A CRC-checksum is used to be sure, the data hasn't changed or is false.
- * To create a CRC-checksum, initialise a check-variable (unsigned short),
- * and set this to zero. Than call for every byte in the file (e.g.) the
- * procedure updateCRC32 with this check-variable as the first parameter,
- * and the byte as the second. At the end, the check-variable contains the
- * CRC-checksum.
- *
- * implemented by Michael Neumann, 14.06.1998
- *
- */
-void updateCRC32(unsigned long *, unsigned char);
-
-#endif /* __CRC32_HEADER__ */
-
-
-#endif /* USE_JPWL */
diff --git a/src/lib/openjpwl/jpwl.c b/src/lib/openjpwl/jpwl.c
deleted file mode 100644 (file)
index 3cd74ad..0000000
+++ /dev/null
@@ -1,1458 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * Copyright (c) 2005-2006, Dept. of Electronic and Information Engineering, Universita' degli Studi di Perugia, Italy
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "opj_includes.h"
-
-#ifdef USE_JPWL
-
-/** @defgroup JPWL JPWL - JPEG-2000 Part11 (JPWL) codestream manager */
-/*@{*/
-
-/** @name Local static variables */
-/*@{*/
-
-/** number of JPWL prepared markers */
-static int jwmarker_num;
-/** properties of JPWL markers to insert */
-static jpwl_marker_t jwmarker[JPWL_MAX_NO_MARKERS];
-
-/*@}*/
-
-/*@}*/
-
-/** @name Local static functions */
-/*@{*/
-
-/** create an EPC marker segment
-@param j2k J2K compressor handle
-@param esd_on true if ESD is activated
-@param red_on true if RED is activated
-@param epb_on true if EPB is activated
-@param info_on true if informative techniques are activated
-@return returns the freshly created EPC
-*/
-jpwl_epc_ms_t *jpwl_epc_create(opj_j2k_t *j2k, opj_bool esd_on, opj_bool red_on,
-                               opj_bool epb_on, opj_bool info_on);
-
-/*@}*/
-
-/** create an EPC marker segment
-@param j2k J2K compressor handle
-@param comps considered component (-1=average, 0/1/2/...=component no.)
-@param addrm addressing mode (0=packet, 1=byte range, 2=packet range, 3=reserved)
-@param ad_size size of addresses (2/4 bytes)
-@param senst sensitivity type
-@param se_size sensitivity values size (1/2 bytes)
-@param tileno tile where this ESD lies (-1 means MH)
-@param svalnum number of sensitivity values (if 0, they will be automatically filled)
-@param sensval pointer to an array of sensitivity values (if NULL, they will be automatically filled)
-@return returns the freshly created ESD
-*/
-jpwl_esd_ms_t *jpwl_esd_create(opj_j2k_t *j2k, int comps,
-                               unsigned char addrm, unsigned char ad_size,
-                               unsigned char senst, int se_size, int tileno,
-                               unsigned long int svalnum, void *sensval);
-
-/** this function is used to compare two JPWL markers based on
-their relevant wishlist position
-@param arg1 pointer to first marker
-@param arg2 pointer to second marker
-@return 1 if arg1>arg2, 0 if arg1=arg2, -1 if arg1<arg2
-*/
-int jpwl_markcomp(const void *arg1, const void *arg2);
-
-/** write an EPB MS to a buffer
-@param j2k J2K compressor handle
-@param epbmark pointer to the EPB MS
-@param buf pointer to the memory buffer
-*/
-void jpwl_epb_write(opj_j2k_t *j2k, jpwl_epb_ms_t *epbmark, unsigned char *buf);
-
-/** write an EPC MS to a buffer
-@param j2k J2K compressor handle
-@param epcmark pointer to the EPC MS
-@param buf pointer to the memory buffer
-*/
-void jpwl_epc_write(opj_j2k_t *j2k, jpwl_epc_ms_t *epcmark, unsigned char *buf);
-
-/**
- * write an ESD MS to a buffer
-@param j2k J2K compressor handle
-@param esd pointer to the ESD MS
-@param buf pointer to the memory buffer
-*/
-void jpwl_esd_write(opj_j2k_t *j2k, jpwl_esd_ms_t *esdmark, unsigned char *buf);
-
-/*-----------------------------------------------------------------*/
-
-void jpwl_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image)
-{
-
-    int mm;
-
-    /* let's reset some settings */
-
-    /* clear the existing markers */
-    for (mm = 0; mm < jwmarker_num; mm++) {
-
-        switch (jwmarker[mm].id) {
-
-        case J2K_MS_EPB:
-            opj_free(jwmarker[mm].m.epbmark);
-            break;
-
-        case J2K_MS_EPC:
-            opj_free(jwmarker[mm].m.epcmark);
-            break;
-
-        case J2K_MS_ESD:
-            opj_free(jwmarker[mm].m.esdmark);
-            break;
-
-        case J2K_MS_RED:
-            opj_free(jwmarker[mm].m.redmark);
-            break;
-
-        default:
-            break;
-        }
-    }
-
-    /* clear the marker structure array */
-    memset(jwmarker, 0, sizeof(jpwl_marker_t) * JPWL_MAX_NO_MARKERS);
-
-    /* no more markers in the list */
-    jwmarker_num = 0;
-
-    /* let's begin creating a marker list, according to user wishes */
-    jpwl_prepare_marks(j2k, cio, image);
-
-    /* now we dump the JPWL markers on the codestream */
-    jpwl_dump_marks(j2k, cio, image);
-
-    /* do not know exactly what is this for,
-    but it gets called during index creation */
-    j2k->pos_correction = 0;
-
-}
-
-opj_bool j2k_add_marker(opj_codestream_info_t *cstr_info,
-                        unsigned short int type, int pos, int len)
-{
-
-    if (!cstr_info) {
-        return OPJ_FALSE;
-    }
-
-    /* expand the list? */
-    if ((cstr_info->marknum + 1) > cstr_info->maxmarknum) {
-        opj_marker_info_t* new_marker;
-        cstr_info->maxmarknum += 100;
-        new_marker = (opj_marker_info_t*)opj_realloc(cstr_info->marker,
-                     cstr_info->maxmarknum * sizeof(opj_marker_info_t));
-        if (! new_marker) {
-            opj_free(cstr_info->marker);
-            cstr_info->marker = 0;
-            cstr_info->marknum = 0;
-            cstr_info->maxmarknum = 0;
-            /* opj_event_msg_v2(p_manager, EVT_ERROR, "Not enough memory to add a marker\n"); */
-            /* TODO_test_add_marker_result;*/
-            return OPJ_FALSE;
-        }
-        cstr_info->marker = new_marker;
-    }
-
-    /* add the marker */
-    cstr_info->marker[cstr_info->marknum].type = type;
-    cstr_info->marker[cstr_info->marknum].pos = pos;
-    cstr_info->marker[cstr_info->marknum].len = len;
-    cstr_info->marknum++;
-    return OPJ_TRUE;
-
-}
-
-void jpwl_prepare_marks(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image)
-{
-
-    unsigned short int socsiz_len = 0;
-    int ciopos = cio_tell(cio), soc_pos = j2k->cstr_info->main_head_start;
-    unsigned char *socp = NULL;
-
-    int tileno, acc_tpno, tpno, tilespec, hprot, sens, pprot, packspec, lastileno,
-        packno;
-
-    jpwl_epb_ms_t *epb_mark;
-    jpwl_epc_ms_t *epc_mark;
-    jpwl_esd_ms_t *esd_mark;
-    (void)image;
-
-    /* find (SOC + SIZ) length */
-    /* I assume SIZ is always the first marker after SOC */
-    cio_seek(cio, soc_pos + 4);
-    socsiz_len = (unsigned short int) cio_read(cio,
-                 2) + 4; /* add the 2 marks length itself */
-    cio_seek(cio, soc_pos + 0);
-    socp = cio_getbp(cio); /* pointer to SOC */
-
-    /*
-     EPC MS for Main Header: if we are here it's required
-    */
-    /* create the EPC */
-    if ((epc_mark = jpwl_epc_create(
-                        j2k,
-                        j2k->cp->esd_on, /* is ESD present? */
-                        j2k->cp->red_on, /* is RED present? */
-                        j2k->cp->epb_on, /* is EPB present? */
-                        OPJ_FALSE /* are informative techniques present? */
-                    ))) {
-
-        /* Add this marker to the 'insertanda' list */
-        if (epc_mark) {
-            jwmarker[jwmarker_num].id = J2K_MS_EPC; /* its type */
-            jwmarker[jwmarker_num].m.epcmark = epc_mark; /* the EPC */
-            jwmarker[jwmarker_num].pos = soc_pos + socsiz_len; /* after SIZ */
-            jwmarker[jwmarker_num].dpos = (double) jwmarker[jwmarker_num].pos +
-                                          0.1; /* not so first */
-            jwmarker[jwmarker_num].len = epc_mark->Lepc; /* its length */
-            jwmarker[jwmarker_num].len_ready = OPJ_TRUE; /* ready */
-            jwmarker[jwmarker_num].pos_ready = OPJ_TRUE; /* ready */
-            jwmarker[jwmarker_num].parms_ready = OPJ_FALSE; /* not ready */
-            jwmarker[jwmarker_num].data_ready = OPJ_TRUE; /* ready */
-            jwmarker_num++;
-        };
-
-        opj_event_msg(j2k->cinfo, EVT_INFO,
-                      "MH  EPC : setting %s%s%s\n",
-                      j2k->cp->esd_on ? "ESD, " : "",
-                      j2k->cp->red_on ? "RED, " : "",
-                      j2k->cp->epb_on ? "EPB, " : ""
-                     );
-
-    } else {
-        /* ooops, problems */
-        opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not create MH EPC\n");
-    };
-
-    /*
-     ESD MS for Main Header
-    */
-    /* first of all, must MH have an ESD MS? */
-    if (j2k->cp->esd_on && (j2k->cp->sens_MH >= 0)) {
-
-        /* Create the ESD */
-        if ((esd_mark = jpwl_esd_create(
-                            j2k, /* this encoder handle */
-                            -1, /* we are averaging over all components */
-                            (unsigned char) j2k->cp->sens_range, /* range method */
-                            (unsigned char) j2k->cp->sens_addr, /* sensitivity addressing */
-                            (unsigned char) j2k->cp->sens_MH, /* sensitivity method */
-                            j2k->cp->sens_size, /* sensitivity size */
-                            -1, /* this ESD is in main header */
-                            0 /*j2k->cstr_info->num*/, /* number of packets in codestream */
-                            NULL /*sensval*/ /* pointer to sensitivity data of packets */
-                        ))) {
-
-            /* Add this marker to the 'insertanda' list */
-            if (jwmarker_num < JPWL_MAX_NO_MARKERS) {
-                jwmarker[jwmarker_num].id = J2K_MS_ESD; /* its type */
-                jwmarker[jwmarker_num].m.esdmark = esd_mark; /* the EPB */
-                jwmarker[jwmarker_num].pos = soc_pos +
-                                             socsiz_len; /* we choose to place it after SIZ */
-                jwmarker[jwmarker_num].dpos = (double) jwmarker[jwmarker_num].pos +
-                                              0.2; /* not first at all! */
-                jwmarker[jwmarker_num].len = esd_mark->Lesd; /* its length */
-                jwmarker[jwmarker_num].len_ready = OPJ_TRUE; /* not ready, yet */
-                jwmarker[jwmarker_num].pos_ready = OPJ_TRUE; /* ready */
-                jwmarker[jwmarker_num].parms_ready = OPJ_TRUE; /* not ready */
-                jwmarker[jwmarker_num].data_ready = OPJ_FALSE; /* not ready */
-                jwmarker_num++;
-            }
-
-            opj_event_msg(j2k->cinfo, EVT_INFO,
-                          "MH  ESDs: method %d\n",
-                          j2k->cp->sens_MH
-                         );
-
-        } else {
-            /* ooops, problems */
-            opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not create MH ESD\n");
-        };
-
-    }
-
-    /*
-     ESD MSs for Tile Part Headers
-    */
-    /* cycle through tiles */
-    sens = -1; /* default spec: no ESD */
-    tilespec = 0; /* first tile spec */
-    acc_tpno = 0;
-    for (tileno = 0; tileno < j2k->cstr_info->tw * j2k->cstr_info->th; tileno++) {
-
-        opj_event_msg(j2k->cinfo, EVT_INFO,
-                      "Tile %d has %d tile part(s)\n",
-                      tileno, j2k->cstr_info->tile[tileno].num_tps
-                     );
-
-        /* for every tile part in the tile */
-        for (tpno = 0; tpno < j2k->cstr_info->tile[tileno].num_tps;
-                tpno++, acc_tpno++) {
-
-            int sot_len, Psot, Psotp, mm;
-            unsigned long sot_pos, post_sod_pos;
-
-            unsigned long int left_THmarks_len;
-
-            /******* sot_pos = j2k->cstr_info->tile[tileno].start_pos; */
-            sot_pos = j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pos;
-            cio_seek(cio, sot_pos + 2);
-            sot_len = cio_read(cio, 2); /* SOT Len */
-            cio_skip(cio, 2);
-            Psotp = cio_tell(cio);
-            Psot = cio_read(cio, 4); /* tile length */
-
-            /******* post_sod_pos = j2k->cstr_info->tile[tileno].end_header + 1; */
-            post_sod_pos = j2k->cstr_info->tile[tileno].tp[tpno].tp_end_header + 1;
-            left_THmarks_len = post_sod_pos - sot_pos;
-
-            /* add all the lengths of the markers which are len-ready and stay within SOT and SOD */
-            for (mm = 0; mm < jwmarker_num; mm++) {
-                if ((jwmarker[mm].pos >= sot_pos) && (jwmarker[mm].pos < post_sod_pos)) {
-                    if (jwmarker[mm].len_ready) {
-                        left_THmarks_len += jwmarker[mm].len + 2;
-                    } else {
-                        opj_event_msg(j2k->cinfo, EVT_ERROR,
-                                      "MS %x in %f is not len-ready: could not set up TH EPB\n",
-                                      jwmarker[mm].id, jwmarker[mm].dpos);
-                        exit(1);
-                    }
-                }
-            }
-
-            /******* if ((tilespec < JPWL_MAX_NO_TILESPECS) && (j2k->cp->sens_TPH_tileno[tilespec] == tileno)) */
-            if ((tilespec < JPWL_MAX_NO_TILESPECS) &&
-                    (j2k->cp->sens_TPH_tileno[tilespec] == acc_tpno))
-                /* we got a specification from this tile onwards */
-            {
-                sens = j2k->cp->sens_TPH[tilespec++];
-            }
-
-            /* must this TPH have an ESD MS? */
-            if (j2k->cp->esd_on && (sens >= 0)) {
-
-                /* Create the ESD */
-                if ((esd_mark = jpwl_esd_create(
-                                    j2k, /* this encoder handle */
-                                    -1, /* we are averaging over all components */
-                                    (unsigned char) j2k->cp->sens_range, /* range method */
-                                    (unsigned char) j2k->cp->sens_addr, /* sensitivity addressing size */
-                                    (unsigned char) sens, /* sensitivity method */
-                                    j2k->cp->sens_size, /* sensitivity value size */
-                                    tileno, /* this ESD is in a tile */
-                                    0, /* number of packets in codestream */
-                                    NULL /* pointer to sensitivity data of packets */
-                                ))) {
-
-                    /* Add this marker to the 'insertanda' list */
-                    if (jwmarker_num < JPWL_MAX_NO_MARKERS) {
-                        jwmarker[jwmarker_num].id = J2K_MS_ESD; /* its type */
-                        jwmarker[jwmarker_num].m.esdmark = esd_mark; /* the EPB */
-                        /****** jwmarker[jwmarker_num].pos = j2k->cstr_info->tile[tileno].start_pos + sot_len + 2; */ /* after SOT */
-                        jwmarker[jwmarker_num].pos = j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pos
-                                                     + sot_len + 2; /* after SOT */
-                        jwmarker[jwmarker_num].dpos = (double) jwmarker[jwmarker_num].pos +
-                                                      0.2; /* not first at all! */
-                        jwmarker[jwmarker_num].len = esd_mark->Lesd; /* its length */
-                        jwmarker[jwmarker_num].len_ready = OPJ_TRUE; /* ready, yet */
-                        jwmarker[jwmarker_num].pos_ready = OPJ_TRUE; /* ready */
-                        jwmarker[jwmarker_num].parms_ready = OPJ_TRUE; /* not ready */
-                        jwmarker[jwmarker_num].data_ready = OPJ_FALSE; /* ready */
-                        jwmarker_num++;
-                    }
-
-                    /* update Psot of the tile  */
-                    cio_seek(cio, Psotp);
-                    cio_write(cio, Psot + esd_mark->Lesd + 2, 4);
-
-                    opj_event_msg(j2k->cinfo, EVT_INFO,
-                                  /******* "TPH ESDs: tile %02d, method %d\n", */
-                                  "TPH ESDs: tile %02d, part %02d, method %d\n",
-                                  /******* tileno, */
-                                  tileno, tpno,
-                                  sens
-                                 );
-
-                } else {
-                    /* ooops, problems */
-                    /***** opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not create TPH ESD #%d\n", tileno); */
-                    opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not create TPH ESD #%d,%d\n",
-                                  tileno, tpno);
-                };
-
-            }
-
-        }
-
-    };
-
-    /*
-     EPB MS for Main Header
-    */
-    /* first of all, must MH have an EPB MS? */
-    if (j2k->cp->epb_on && (j2k->cp->hprot_MH > 0)) {
-
-        int mm;
-
-        /* position of SOT */
-        unsigned int sot_pos = j2k->cstr_info->main_head_end + 1;
-
-        /* how much space is there between end of SIZ and beginning of SOT? */
-        int left_MHmarks_len = sot_pos - socsiz_len;
-
-        /* add all the lengths of the markers which are len-ready and stay within SOC and SOT */
-        for (mm = 0; mm < jwmarker_num; mm++) {
-            if (jwmarker[mm].pos < sot_pos) {  /* jwmarker[mm].pos >=0 since ulong */
-                if (jwmarker[mm].len_ready) {
-                    left_MHmarks_len += jwmarker[mm].len + 2;
-                } else {
-                    opj_event_msg(j2k->cinfo, EVT_ERROR,
-                                  "MS %x in %f is not len-ready: could not set up MH EPB\n",
-                                  jwmarker[mm].id, jwmarker[mm].dpos);
-                    exit(1);
-                }
-            }
-        }
-
-        /* Create the EPB */
-        if ((epb_mark = jpwl_epb_create(
-                            j2k, /* this encoder handle */
-                            OPJ_TRUE, /* is it the latest? */
-                            OPJ_TRUE, /* is it packed? not for now */
-                            -1, /* we are in main header */
-                            0, /* its index is 0 (first) */
-                            j2k->cp->hprot_MH, /* protection type parameters of data */
-                            socsiz_len, /* pre-data: only SOC+SIZ */
-                            left_MHmarks_len /* post-data: from SOC to SOT, and all JPWL markers within */
-                        ))) {
-
-            /* Add this marker to the 'insertanda' list */
-            if (jwmarker_num < JPWL_MAX_NO_MARKERS) {
-                jwmarker[jwmarker_num].id = J2K_MS_EPB; /* its type */
-                jwmarker[jwmarker_num].m.epbmark = epb_mark; /* the EPB */
-                jwmarker[jwmarker_num].pos = soc_pos + socsiz_len; /* after SIZ */
-                jwmarker[jwmarker_num].dpos = (double)
-                                              jwmarker[jwmarker_num].pos; /* first first first! */
-                jwmarker[jwmarker_num].len = epb_mark->Lepb; /* its length */
-                jwmarker[jwmarker_num].len_ready = OPJ_TRUE; /* ready */
-                jwmarker[jwmarker_num].pos_ready = OPJ_TRUE; /* ready */
-                jwmarker[jwmarker_num].parms_ready = OPJ_TRUE; /* ready */
-                jwmarker[jwmarker_num].data_ready = OPJ_FALSE; /* not ready */
-                jwmarker_num++;
-            }
-
-            opj_event_msg(j2k->cinfo, EVT_INFO,
-                          "MH  EPB : prot. %d\n",
-                          j2k->cp->hprot_MH
-                         );
-
-        } else {
-            /* ooops, problems */
-            opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not create MH EPB\n");
-        };
-    }
-
-    /*
-     EPB MSs for Tile Parts
-    */
-    /* cycle through TPHs */
-    hprot = j2k->cp->hprot_MH; /* default spec */
-    tilespec = 0; /* first tile spec */
-    lastileno = 0;
-    packspec = 0;
-    pprot = -1;
-    acc_tpno = 0;
-    for (tileno = 0; tileno < j2k->cstr_info->tw * j2k->cstr_info->th; tileno++) {
-
-        opj_event_msg(j2k->cinfo, EVT_INFO,
-                      "Tile %d has %d tile part(s)\n",
-                      tileno, j2k->cstr_info->tile[tileno].num_tps
-                     );
-
-        /* for every tile part in the tile */
-        for (tpno = 0; tpno < j2k->cstr_info->tile[tileno].num_tps;
-                tpno++, acc_tpno++) {
-
-            int sot_len, Psot, Psotp, mm, epb_index = 0, prot_len = 0;
-            unsigned long sot_pos, post_sod_pos;
-            unsigned long int left_THmarks_len/*, epbs_len = 0*/;
-            int startpack = 0, stoppack = j2k->cstr_info->packno;
-            int first_tp_pack, last_tp_pack;
-            jpwl_epb_ms_t *tph_epb = NULL;
-
-            /****** sot_pos = j2k->cstr_info->tile[tileno].start_pos; */
-            sot_pos = j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pos;
-            cio_seek(cio, sot_pos + 2);
-            sot_len = cio_read(cio, 2); /* SOT Len */
-            cio_skip(cio, 2);
-            Psotp = cio_tell(cio);
-            Psot = cio_read(cio, 4); /* tile length */
-
-            /* a-priori length of the data dwelling between SOT and SOD */
-            /****** post_sod_pos = j2k->cstr_info->tile[tileno].end_header + 1; */
-            post_sod_pos = j2k->cstr_info->tile[tileno].tp[tpno].tp_end_header + 1;
-            left_THmarks_len = post_sod_pos - (sot_pos + sot_len + 2);
-
-            /* add all the lengths of the JPWL markers which are len-ready and stay within SOT and SOD */
-            for (mm = 0; mm < jwmarker_num; mm++) {
-                if ((jwmarker[mm].pos >= sot_pos) && (jwmarker[mm].pos < post_sod_pos)) {
-                    if (jwmarker[mm].len_ready) {
-                        left_THmarks_len += jwmarker[mm].len + 2;
-                    } else {
-                        opj_event_msg(j2k->cinfo, EVT_ERROR,
-                                      "MS %x in %f is not len-ready: could not set up TH EPB\n",
-                                      jwmarker[mm].id, jwmarker[mm].dpos);
-                        exit(1);
-                    }
-                }
-            }
-
-            /****** if ((tilespec < JPWL_MAX_NO_TILESPECS) && (j2k->cp->hprot_TPH_tileno[tilespec] == tileno)) */
-            if ((tilespec < JPWL_MAX_NO_TILESPECS) &&
-                    (j2k->cp->hprot_TPH_tileno[tilespec] == acc_tpno))
-                /* we got a specification from this tile part onwards */
-            {
-                hprot = j2k->cp->hprot_TPH[tilespec++];
-            }
-
-            /* must this TPH have an EPB MS? */
-            if (j2k->cp->epb_on && (hprot > 0)) {
-
-                /* Create the EPB */
-                if ((epb_mark = jpwl_epb_create(
-                                    j2k, /* this encoder handle */
-                                    OPJ_FALSE, /* is it the latest? in TPH, no for now (if huge data size in TPH, we'd need more) */
-                                    OPJ_TRUE, /* is it packed? yes for now */
-                                    tileno, /* we are in TPH */
-                                    epb_index++, /* its index is 0 (first) */
-                                    hprot, /* protection type parameters of following data */
-                                    sot_len + 2, /* pre-data length: only SOT */
-                                    left_THmarks_len /* post-data length: from SOT end to SOD inclusive */
-                                ))) {
-
-                    /* Add this marker to the 'insertanda' list */
-                    if (jwmarker_num < JPWL_MAX_NO_MARKERS) {
-                        jwmarker[jwmarker_num].id = J2K_MS_EPB; /* its type */
-                        jwmarker[jwmarker_num].m.epbmark = epb_mark; /* the EPB */
-                        /****** jwmarker[jwmarker_num].pos = j2k->cstr_info->tile[tileno].start_pos + sot_len + 2; */ /* after SOT */
-                        jwmarker[jwmarker_num].pos = j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pos
-                                                     + sot_len + 2; /* after SOT */
-                        jwmarker[jwmarker_num].dpos = (double)
-                                                      jwmarker[jwmarker_num].pos; /* first first first! */
-                        jwmarker[jwmarker_num].len = epb_mark->Lepb; /* its length */
-                        jwmarker[jwmarker_num].len_ready = OPJ_TRUE; /* ready */
-                        jwmarker[jwmarker_num].pos_ready = OPJ_TRUE; /* ready */
-                        jwmarker[jwmarker_num].parms_ready = OPJ_TRUE; /* ready */
-                        jwmarker[jwmarker_num].data_ready = OPJ_FALSE; /* not ready */
-                        jwmarker_num++;
-                    }
-
-                    /* update Psot of the tile  */
-                    Psot += epb_mark->Lepb + 2;
-
-                    opj_event_msg(j2k->cinfo, EVT_INFO,
-                                  /***** "TPH EPB : tile %02d, prot. %d\n", */
-                                  "TPH EPB : tile %02d, part %02d, prot. %d\n",
-                                  /***** tileno, */
-                                  tileno, tpno,
-                                  hprot
-                                 );
-
-                    /* save this TPH EPB address */
-                    tph_epb = epb_mark;
-
-                } else {
-                    /* ooops, problems */
-                    /****** opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not create TPH EPB #%d\n", tileno); */
-                    opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not create TPH EPB in #%d,d\n",
-                                  tileno, tpno);
-                };
-
-            }
-
-            startpack = 0;
-            /* EPB MSs for UEP packet data protection in Tile Parts */
-            /****** for (packno = 0; packno < j2k->cstr_info->num; packno++) { */
-            /*first_tp_pack = (tpno > 0) ? (first_tp_pack + j2k->cstr_info->tile[tileno].tp[tpno - 1].tp_numpacks) : 0;*/
-            first_tp_pack = j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pack;
-            last_tp_pack = first_tp_pack + j2k->cstr_info->tile[tileno].tp[tpno].tp_numpacks
-                           - 1;
-            for (packno = 0; packno < j2k->cstr_info->tile[tileno].tp[tpno].tp_numpacks;
-                    packno++) {
-
-                /******** if ((packspec < JPWL_MAX_NO_PACKSPECS) &&
-                        (j2k->cp->pprot_tileno[packspec] == tileno) && (j2k->cp->pprot_packno[packspec] == packno)) { */
-                if ((packspec < JPWL_MAX_NO_PACKSPECS) &&
-                        (j2k->cp->pprot_tileno[packspec] == acc_tpno) &&
-                        (j2k->cp->pprot_packno[packspec] == packno)) {
-
-                    /* we got a specification from this tile and packet onwards */
-                    /* print the previous spec */
-                    if (packno > 0) {
-                        stoppack = packno - 1;
-                        opj_event_msg(j2k->cinfo, EVT_INFO,
-                                      /***** "UEP EPBs: tile %02d, packs. %02d-%02d (B %d-%d), prot. %d\n", */
-                                      "UEP EPBs: tile %02d, part %02d, packs. %02d-%02d (B %d-%d), prot. %d\n",
-                                      /***** tileno, */
-                                      tileno, tpno,
-                                      startpack,
-                                      stoppack,
-                                      /***** j2k->cstr_info->tile[tileno].packet[startpack].start_pos, */
-                                      j2k->cstr_info->tile[tileno].packet[first_tp_pack + startpack].start_pos,
-                                      /***** j2k->cstr_info->tile[tileno].packet[stoppack].end_pos, */
-                                      j2k->cstr_info->tile[tileno].packet[first_tp_pack + stoppack].end_pos,
-                                      pprot);
-
-                        /***** prot_len = j2k->cstr_info->tile[tileno].packet[stoppack].end_pos + 1 -
-                                j2k->cstr_info->tile[tileno].packet[startpack].start_pos; */
-                        prot_len = j2k->cstr_info->tile[tileno].packet[first_tp_pack + stoppack].end_pos
-                                   + 1 -
-                                   j2k->cstr_info->tile[tileno].packet[first_tp_pack + startpack].start_pos;
-
-                        /*
-                          particular case: if this is the last header and the last packet,
-                          then it is better to protect even the EOC marker
-                        */
-                        /****** if ((tileno == ((j2k->cstr_info->tw * j2k->cstr_info->th) - 1)) &&
-                                (stoppack == (j2k->cstr_info->num - 1))) */
-                        if ((tileno == ((j2k->cstr_info->tw * j2k->cstr_info->th) - 1)) &&
-                                (tpno == (j2k->cstr_info->tile[tileno].num_tps - 1)) &&
-                                (stoppack == last_tp_pack))
-                            /* add the EOC len */
-                        {
-                            prot_len += 2;
-                        }
-
-                        /* let's add the EPBs */
-                        Psot += jpwl_epbs_add(
-                                    j2k, /* J2K handle */
-                                    jwmarker, /* pointer to JPWL markers list */
-                                    &jwmarker_num, /* pointer to the number of current markers */
-                                    OPJ_FALSE, /* latest */
-                                    OPJ_TRUE, /* packed */
-                                    OPJ_FALSE, /* inside MH */
-                                    &epb_index, /* pointer to EPB index */
-                                    pprot, /* protection type */
-                                    /****** (double) (j2k->cstr_info->tile[tileno].start_pos + sot_len + 2) + 0.0001, */ /* position */
-                                    (double)(j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pos + sot_len + 2) +
-                                    0.0001, /* position */
-                                    tileno, /* number of tile */
-                                    0, /* length of pre-data */
-                                    prot_len /*4000*/ /* length of post-data */
-                                );
-                    }
-
-                    startpack = packno;
-                    pprot = j2k->cp->pprot[packspec++];
-                }
-
-                /*printf("Tile %02d, pack %02d ==> %d\n", tileno, packno, pprot);*/
-
-            }
-
-            /* we are at the end: print the remaining spec */
-            stoppack = packno - 1;
-            if (pprot >= 0) {
-
-                opj_event_msg(j2k->cinfo, EVT_INFO,
-                              /**** "UEP EPBs: tile %02d, packs. %02d-%02d (B %d-%d), prot. %d\n", */
-                              "UEP EPBs: tile %02d, part %02d, packs. %02d-%02d (B %d-%d), prot. %d\n",
-                              /**** tileno, */
-                              tileno, tpno,
-                              startpack,
-                              stoppack,
-                              /***** j2k->image_info->tile[tileno].packet[startpack].start_pos,
-                              j2k->image_info->tile[tileno].packet[stoppack].end_pos, */
-                              j2k->cstr_info->tile[tileno].packet[first_tp_pack + startpack].start_pos,
-                              j2k->cstr_info->tile[tileno].packet[first_tp_pack + stoppack].end_pos,
-                              pprot);
-
-                /***** prot_len = j2k->cstr_info->tile[tileno].packet[stoppack].end_pos + 1 -
-                        j2k->cstr_info->tile[tileno].packet[startpack].start_pos; */
-                prot_len = j2k->cstr_info->tile[tileno].packet[first_tp_pack + stoppack].end_pos
-                           + 1 -
-                           j2k->cstr_info->tile[tileno].packet[first_tp_pack + startpack].start_pos;
-
-                /*
-                  particular case: if this is the last header and the last packet,
-                  then it is better to protect even the EOC marker
-                */
-                /***** if ((tileno == ((j2k->cstr_info->tw * j2k->cstr_info->th) - 1)) &&
-                        (stoppack == (j2k->cstr_info->num - 1))) */
-                if ((tileno == ((j2k->cstr_info->tw * j2k->cstr_info->th) - 1)) &&
-                        (tpno == (j2k->cstr_info->tile[tileno].num_tps - 1)) &&
-                        (stoppack == last_tp_pack))
-                    /* add the EOC len */
-                {
-                    prot_len += 2;
-                }
-
-                /* let's add the EPBs */
-                Psot += jpwl_epbs_add(
-                            j2k, /* J2K handle */
-                            jwmarker, /* pointer to JPWL markers list */
-                            &jwmarker_num, /* pointer to the number of current markers */
-                            OPJ_TRUE, /* latest */
-                            OPJ_TRUE, /* packed */
-                            OPJ_FALSE, /* inside MH */
-                            &epb_index, /* pointer to EPB index */
-                            pprot, /* protection type */
-                            /***** (double) (j2k->cstr_info->tile[tileno].start_pos + sot_len + 2) + 0.0001,*/ /* position */
-                            (double)(j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pos + sot_len + 2) +
-                            0.0001, /* position */
-                            tileno, /* number of tile */
-                            0, /* length of pre-data */
-                            prot_len /*4000*/ /* length of post-data */
-                        );
-            }
-
-            /* we can now check if the TPH EPB was really the last one */
-            if (tph_epb && (epb_index == 1)) {
-                /* set the TPH EPB to be the last one in current header */
-                tph_epb->Depb |= (unsigned char)((OPJ_TRUE & 0x0001) << 6);
-                tph_epb = NULL;
-            }
-
-            /* write back Psot */
-            cio_seek(cio, Psotp);
-            cio_write(cio, Psot, 4);
-
-        }
-
-    };
-
-    /* reset the position */
-    cio_seek(cio, ciopos);
-
-}
-
-void jpwl_dump_marks(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image)
-{
-
-    int mm;
-    unsigned long int old_size = j2k->cstr_info->codestream_size;
-    unsigned long int new_size = old_size;
-    int /*ciopos = cio_tell(cio),*/ soc_pos = j2k->cstr_info->main_head_start;
-    unsigned char *jpwl_buf, *orig_buf;
-    unsigned long int orig_pos;
-    double epbcoding_time = 0.0, esdcoding_time = 0.0;
-    (void)image;
-
-    /* Order JPWL markers according to their wishlist position */
-    qsort((void *) jwmarker, (size_t) jwmarker_num, sizeof(jpwl_marker_t),
-          jpwl_markcomp);
-
-    /* compute markers total size */
-    for (mm = 0; mm < jwmarker_num; mm++) {
-        /*printf("%x, %d, %.10f, %d long\n", jwmarker[mm].id, jwmarker[mm].pos,
-                jwmarker[mm].dpos, jwmarker[mm].len);*/
-        new_size += jwmarker[mm].len + 2;
-    }
-
-    /* allocate a new buffer of proper size */
-    if (!(jpwl_buf = (unsigned char *) opj_malloc((size_t)(new_size + soc_pos) *
-                     sizeof(unsigned char)))) {
-        opj_event_msg(j2k->cinfo, EVT_ERROR,
-                      "Could not allocate room for JPWL codestream buffer\n");
-        exit(1);
-    };
-
-    /* copy the jp2 part, if any */
-    orig_buf = jpwl_buf;
-    memcpy(jpwl_buf, cio->buffer, soc_pos);
-    jpwl_buf += soc_pos;
-
-    /* cycle through markers */
-    orig_pos = soc_pos + 0; /* start from the beginning */
-    cio_seek(cio, soc_pos + 0); /* rewind the original */
-    for (mm = 0; mm < jwmarker_num; mm++) {
-
-        /*
-        need to copy a piece of the original codestream
-        if there is such
-        */
-        memcpy(jpwl_buf, cio_getbp(cio), jwmarker[mm].pos - orig_pos);
-        jpwl_buf += jwmarker[mm].pos - orig_pos;
-        orig_pos = jwmarker[mm].pos;
-        cio_seek(cio, orig_pos);
-
-        /*
-        then write down the marker
-        */
-        switch (jwmarker[mm].id) {
-
-        case J2K_MS_EPB:
-            jpwl_epb_write(j2k, jwmarker[mm].m.epbmark, jpwl_buf);
-            break;
-
-        case J2K_MS_EPC:
-            jpwl_epc_write(j2k, jwmarker[mm].m.epcmark, jpwl_buf);
-            break;
-
-        case J2K_MS_ESD:
-            jpwl_esd_write(j2k, jwmarker[mm].m.esdmark, jpwl_buf);
-            break;
-
-        case J2K_MS_RED:
-            memset(jpwl_buf, 0, jwmarker[mm].len + 2); /* placeholder */
-            break;
-
-        default:
-            break;
-        };
-
-        /* we update the markers struct */
-        if (j2k->cstr_info) {
-            j2k->cstr_info->marker[j2k->cstr_info->marknum - 1].pos =
-                (jpwl_buf - orig_buf);
-        }
-
-        /* we set the marker dpos to the new position in the JPWL codestream */
-        jwmarker[mm].dpos = (double)(jpwl_buf - orig_buf);
-
-        /* advance JPWL buffer position */
-        jpwl_buf += jwmarker[mm].len + 2;
-
-    }
-
-    /* finish remaining original codestream */
-    memcpy(jpwl_buf, cio_getbp(cio), old_size - (orig_pos - soc_pos));
-    jpwl_buf += old_size - (orig_pos - soc_pos);
-    cio_seek(cio, soc_pos + old_size);
-
-    /*
-    update info file based on added markers
-    */
-    if (!jpwl_update_info(j2k, jwmarker, jwmarker_num)) {
-        opj_event_msg(j2k->cinfo, EVT_ERROR,
-                      "Could not update OPJ cstr_info structure\n");
-    }
-
-    /* now we need to repass some markers and fill their data fields */
-
-    /* first of all, DL and Pcrc in EPCs */
-    for (mm = 0; mm < jwmarker_num; mm++) {
-
-        /* find the EPCs */
-        if (jwmarker[mm].id == J2K_MS_EPC) {
-
-            int epc_pos = (int) jwmarker[mm].dpos, pp;
-            unsigned short int mycrc = 0x0000;
-
-            /* fix and fill the DL field */
-            jwmarker[mm].m.epcmark->DL = new_size;
-            orig_buf[epc_pos + 6] = (unsigned char)(jwmarker[mm].m.epcmark->DL >> 24);
-            orig_buf[epc_pos + 7] = (unsigned char)(jwmarker[mm].m.epcmark->DL >> 16);
-            orig_buf[epc_pos + 8] = (unsigned char)(jwmarker[mm].m.epcmark->DL >> 8);
-            orig_buf[epc_pos + 9] = (unsigned char)(jwmarker[mm].m.epcmark->DL >> 0);
-
-            /* compute the CRC field (excluding itself) */
-            for (pp = 0; pp < 4; pp++) {
-                jpwl_updateCRC16(&mycrc, orig_buf[epc_pos + pp]);
-            }
-            for (pp = 6; pp < (jwmarker[mm].len + 2); pp++) {
-                jpwl_updateCRC16(&mycrc, orig_buf[epc_pos + pp]);
-            }
-
-            /* fix and fill the CRC */
-            jwmarker[mm].m.epcmark->Pcrc = mycrc;
-            orig_buf[epc_pos + 4] = (unsigned char)(jwmarker[mm].m.epcmark->Pcrc >> 8);
-            orig_buf[epc_pos + 5] = (unsigned char)(jwmarker[mm].m.epcmark->Pcrc >> 0);
-
-        }
-    }
-
-    /* then, sensitivity data in ESDs */
-    esdcoding_time = opj_clock();
-    for (mm = 0; mm < jwmarker_num; mm++) {
-
-        /* find the ESDs */
-        if (jwmarker[mm].id == J2K_MS_ESD) {
-
-            /* remember that they are now in a new position (dpos) */
-            int esd_pos = (int) jwmarker[mm].dpos;
-
-            jpwl_esd_fill(j2k, jwmarker[mm].m.esdmark, &orig_buf[esd_pos]);
-
-        }
-
-    }
-    esdcoding_time = opj_clock() - esdcoding_time;
-    if (j2k->cp->esd_on) {
-        opj_event_msg(j2k->cinfo, EVT_INFO, "ESDs sensitivities computed in %f s\n",
-                      esdcoding_time);
-    }
-
-    /* finally, RS or CRC parity in EPBs */
-    epbcoding_time = opj_clock();
-    for (mm = 0; mm < jwmarker_num; mm++) {
-
-        /* find the EPBs */
-        if (jwmarker[mm].id == J2K_MS_EPB) {
-
-            /* remember that they are now in a new position (dpos) */
-            int nn, accum_len;
-
-            /* let's see how many EPBs are following this one, included itself */
-            /* for this to work, we suppose that the markers are correctly ordered */
-            /* and, overall, that they are in packed mode inside headers */
-            accum_len = 0;
-            for (nn = mm; (nn < jwmarker_num) && (jwmarker[nn].id == J2K_MS_EPB) &&
-                    (jwmarker[nn].pos == jwmarker[mm].pos); nn++) {
-                accum_len += jwmarker[nn].m.epbmark->Lepb + 2;
-            }
-
-            /* fill the current (first) EPB with post-data starting from the computed position */
-            jpwl_epb_fill(j2k, jwmarker[mm].m.epbmark, &orig_buf[(int) jwmarker[mm].dpos],
-                          &orig_buf[(int) jwmarker[mm].dpos + accum_len]);
-
-            /* fill the remaining EPBs in the header with post-data starting from the last position */
-            for (nn = mm + 1; (nn < jwmarker_num) && (jwmarker[nn].id == J2K_MS_EPB) &&
-                    (jwmarker[nn].pos == jwmarker[mm].pos); nn++) {
-                jpwl_epb_fill(j2k, jwmarker[nn].m.epbmark, &orig_buf[(int) jwmarker[nn].dpos],
-                              NULL);
-            }
-
-            /* skip all the processed EPBs */
-            mm = nn - 1;
-        }
-
-    }
-    epbcoding_time = opj_clock() - epbcoding_time;
-    if (j2k->cp->epb_on) {
-        opj_event_msg(j2k->cinfo, EVT_INFO, "EPBs redundancy computed in %f s\n",
-                      epbcoding_time);
-    }
-
-    /* free original cio buffer and set it to the JPWL one */
-    opj_free(cio->buffer);
-    cio->cinfo = cio->cinfo; /* no change */
-    cio->openmode = cio->openmode; /* no change */
-    cio->buffer = orig_buf;
-    cio->length = new_size + soc_pos;
-    cio->start = cio->buffer;
-    cio->end = cio->buffer + cio->length;
-    cio->bp = cio->buffer;
-    cio_seek(cio, soc_pos + new_size);
-
-}
-
-
-void j2k_read_epc(opj_j2k_t *j2k)
-{
-    unsigned long int DL, Lepcp, Pcrcp, l;
-    unsigned short int Lepc, Pcrc = 0x0000;
-    unsigned char Pepc;
-    opj_cio_t *cio = j2k->cio;
-    const char *ans1;
-
-    /* Simply read the EPC parameters */
-    Lepcp = cio_tell(cio);
-    Lepc = cio_read(cio, 2);
-    Pcrcp = cio_tell(cio);
-    cio_skip(cio, 2); /* Pcrc */
-    DL = cio_read(cio, 4);
-    Pepc = cio_read(cio, 1);
-
-    /* compute Pcrc */
-    cio_seek(cio, Lepcp - 2);
-
-    /* Marker */
-    jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1));
-    jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1));
-
-    /* Length */
-    jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1));
-    jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1));
-
-    /* skip Pcrc */
-    cio_skip(cio, 2);
-
-    /* read all remaining */
-    for (l = 4; l < Lepc; l++) {
-        jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1));
-    }
-
-    /* check Pcrc with the result */
-    cio_seek(cio, Pcrcp);
-    ans1 = (Pcrc == (unsigned short int) cio_read(cio, 2)) ? "crc-ok" : "crc-ko";
-
-    /* now we write them to screen */
-    opj_event_msg(j2k->cinfo, EVT_INFO,
-                  "EPC(%u,%d): %s, DL=%d%s %s %s\n",
-                  Lepcp - 2,
-                  Lepc,
-                  ans1,
-                  DL, /* data length this EPC is referring to */
-                  (Pepc & 0x10) ? ", esd" : "", /* ESD is present */
-                  (Pepc & 0x20) ? ", red" : "", /* RED is present */
-                  (Pepc & 0x40) ? ", epb" : ""); /* EPB is present */
-
-    cio_seek(cio, Lepcp + Lepc);
-}
-
-#if 0
-void j2k_write_epc(opj_j2k_t *j2k)
-{
-
-    unsigned long int DL, Lepcp, Pcrcp, l;
-    unsigned short int Lepc, Pcrc;
-    unsigned char Pepc;
-
-    opj_cio_t *cio = j2k->cio;
-
-    cio_write(cio, J2K_MS_EPC, 2);  /* EPC */
-    Lepcp = cio_tell(cio);
-    cio_skip(cio, 2);
-
-    /* CRC-16 word of the EPC */
-    Pcrc = 0x0000; /* initialize */
-    Pcrcp = cio_tell(cio);
-    cio_write(cio, Pcrc, 2); /* Pcrc placeholder*/
-
-    /* data length of the EPC protection domain */
-    DL = 0x00000000; /* we leave this set to 0, as if the information is not available */
-    cio_write(cio, DL, 4);   /* DL */
-
-    /* jpwl capabilities */
-    Pepc = 0x00;
-    cio_write(cio, Pepc, 1); /* Pepc */
-
-    /* ID section */
-    /* no ID's, as of now */
-
-    Lepc = (unsigned short)(cio_tell(cio) - Lepcp);
-    cio_seek(cio, Lepcp);
-    cio_write(cio, Lepc, 2); /* Lepc */
-
-    /* compute Pcrc */
-    cio_seek(cio, Lepcp - 2);
-
-    /* Marker */
-    jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1));
-    jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1));
-
-    /* Length */
-    jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1));
-    jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1));
-
-    /* skip Pcrc */
-    cio_skip(cio, 2);
-
-    /* read all remaining */
-    for (l = 4; l < Lepc; l++) {
-        jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1));
-    }
-
-    /* fill Pcrc with the result */
-    cio_seek(cio, Pcrcp);
-    cio_write(cio, Pcrc, 2);
-
-    cio_seek(cio, Lepcp + Lepc);
-
-    /* marker struct update */
-    j2k_add_marker(j2k->cstr_info, J2K_MS_EPC, Lepcp - 2, Lepc + 2);
-
-}
-#endif
-
-void j2k_read_epb(opj_j2k_t *j2k)
-{
-    unsigned long int LDPepb, Pepb;
-    unsigned short int Lepb;
-    unsigned char Depb;
-    char str1[25] = "";
-    opj_bool status;
-    static opj_bool first_in_tph = OPJ_TRUE;
-    int type, pre_len, post_len;
-    static unsigned char *redund = NULL;
-
-    opj_cio_t *cio = j2k->cio;
-
-    /* B/W = 45, RGB = 51 */
-    /*           SIZ   SIZ_FIELDS     SIZ_COMPS               FOLLOWING_MARKER */
-    int skipnum = 2  +     38     + 3 * j2k->cp->exp_comps  +         2;
-
-    if (j2k->cp->correct) {
-
-        /* go back to EPB marker value */
-        cio_seek(cio, cio_tell(cio) - 2);
-
-        /* we need to understand where we are */
-        if (j2k->state == J2K_STATE_MH) {
-            /* we are in MH */
-            type = 0; /* MH */
-            pre_len = skipnum; /* SOC+SIZ */
-            post_len = -1; /* auto */
-
-        } else if ((j2k->state == J2K_STATE_TPH) && first_in_tph) {
-            /* we are in TPH */
-            type = 1; /* TPH */
-            pre_len = 12; /* SOC+SIZ */
-            first_in_tph = OPJ_FALSE;
-            post_len = -1; /* auto */
-
-        } else {
-            /* we are elsewhere */
-            type = 2; /* other */
-            pre_len = 0; /* nada */
-            post_len = -1; /* auto */
-
-        }
-
-        /* call EPB corrector */
-        /*printf("before %x, ", redund);*/
-        status = jpwl_epb_correct(j2k,      /* J2K decompressor handle */
-                                  cio->bp,  /* pointer to EPB in codestream buffer */
-                                  type,     /* EPB type: MH */
-                                  pre_len,  /* length of pre-data */
-                                  post_len, /* length of post-data: -1 means auto */
-                                  NULL,     /* do everything auto */
-                                  &redund
-                                 );
-        /*printf("after %x\n", redund);*/
-
-        /* Read the (possibly corrected) EPB parameters */
-        cio_skip(cio, 2);
-        Lepb = cio_read(cio, 2);
-        Depb = cio_read(cio, 1);
-        LDPepb = cio_read(cio, 4);
-        Pepb = cio_read(cio, 4);
-
-        if (!status) {
-
-            opj_event_msg(j2k->cinfo, EVT_ERROR,
-                          "JPWL correction could not be performed\n");
-
-            /* advance to EPB endpoint */
-            cio_skip(cio, Lepb + 2);
-
-            return;
-        }
-
-        /* last in current header? */
-        if (Depb & 0x40) {
-            redund = NULL; /* reset the pointer to L4 buffer */
-            first_in_tph = OPJ_TRUE;
-        }
-
-        /* advance to EPB endpoint */
-        cio_skip(cio, Lepb - 11);
-
-    } else {
-
-        /* Simply read the EPB parameters */
-        Lepb = cio_read(cio, 2);
-        Depb = cio_read(cio, 1);
-        LDPepb = cio_read(cio, 4);
-        Pepb = cio_read(cio, 4);
-
-        /* What does Pepb tells us about the protection method? */
-        if (((Pepb & 0xF0000000) >> 28) == 0) {
-            sprintf(str1, "pred");    /* predefined */
-        } else if (((Pepb & 0xF0000000) >> 28) == 1) {
-            sprintf(str1, "crc-%lu", 16 * ((Pepb & 0x00000001) + 1));    /* CRC mode */
-        } else if (((Pepb & 0xF0000000) >> 28) == 2) {
-            sprintf(str1, "rs(%lu,32)", (Pepb & 0x0000FF00) >> 8);    /* RS mode */
-        } else if (Pepb == 0xFFFFFFFF) {
-            sprintf(str1, "nometh");    /* RS mode */
-        } else {
-            sprintf(str1, "unknown");    /* unknown */
-        }
-
-        /* Now we write them to screen */
-        opj_event_msg(j2k->cinfo, EVT_INFO,
-                      "EPB(%d): (%sl, %sp, %u), %lu, %s\n",
-                      cio_tell(cio) - 13,
-                      (Depb & 0x40) ? "" : "n", /* latest EPB or not? */
-                      (Depb & 0x80) ? "" : "n", /* packed or unpacked EPB? */
-                      (Depb & 0x3F), /* EPB index value */
-                      LDPepb, /*length of the data protected by the EPB */
-                      str1); /* protection method */
-
-        cio_skip(cio, Lepb - 11);
-    }
-}
-
-void j2k_write_epb(opj_j2k_t *j2k)
-{
-    unsigned long int LDPepb, Pepb, Lepbp;
-    unsigned short int Lepb;
-    unsigned char Depb;
-
-    opj_cio_t *cio = j2k->cio;
-
-    cio_write(cio, J2K_MS_EPB, 2);  /* EPB */
-    Lepbp = cio_tell(cio);
-    cio_skip(cio, 2);
-
-    /* EPB style */
-    Depb = 0x00; /* test */
-    cio_write(cio, Depb, 1);   /* Depb */
-
-    /* length of the data to be protected by this EPB */
-    LDPepb = 0x00000000; /* test */
-    cio_write(cio, LDPepb, 4);   /* LDPepb */
-
-    /* next error correction tool */
-    Pepb = 0x00000000; /* test */
-    cio_write(cio, Pepb, 4);   /* Pepb */
-
-    /* EPB data */
-    /* no data, as of now */
-
-    Lepb = (unsigned short)(cio_tell(cio) - Lepbp);
-    cio_seek(cio, Lepbp);
-    cio_write(cio, Lepb, 2);                /* Lepb */
-
-    cio_seek(cio, Lepbp + Lepb);
-
-    /* marker struct update */
-    j2k_add_marker(j2k->cstr_info, J2K_MS_EPB, Lepbp - 2, Lepb + 2);
-}
-
-void j2k_read_esd(opj_j2k_t *j2k)
-{
-    unsigned short int Lesd, Cesd;
-    unsigned char Pesd;
-
-    int cesdsize = (j2k->image->numcomps >= 257) ? 2 : 1;
-
-    char str1[4][4] = {"p", "br", "pr", "res"};
-    char str2[8][8] = {"res", "mse", "mse-r", "psnr", "psnr-i", "maxerr", "tse", "res"};
-
-    opj_cio_t *cio = j2k->cio;
-
-    /* Simply read the ESD parameters */
-    Lesd = cio_read(cio, 2);
-    Cesd = cio_read(cio, cesdsize);
-    Pesd = cio_read(cio, 1);
-
-    /* Now we write them to screen */
-    opj_event_msg(j2k->cinfo, EVT_INFO,
-                  "ESD(%d): c%d, %s, %s, %s, %s, %s\n",
-                  cio_tell(cio) - (5 + cesdsize),
-                  Cesd, /* component number for this ESD */
-                  str1[(Pesd & (unsigned char) 0xC0) >> 6], /* addressing mode */
-                  str2[(Pesd & (unsigned char) 0x38) >> 3], /* sensitivity type */
-                  ((Pesd & (unsigned char) 0x04) >> 2) ? "2Bs" : "1Bs",
-                  ((Pesd & (unsigned char) 0x02) >> 1) ? "4Ba" : "2Ba",
-                  (Pesd & (unsigned char) 0x01) ? "avgc" : "");
-
-    cio_skip(cio, Lesd - (3 + cesdsize));
-}
-
-void j2k_read_red(opj_j2k_t *j2k)
-{
-    unsigned short int Lred;
-    unsigned char Pred;
-    char str1[4][4] = {"p", "br", "pr", "res"};
-
-    opj_cio_t *cio = j2k->cio;
-
-    /* Simply read the RED parameters */
-    Lred = cio_read(cio, 2);
-    Pred = cio_read(cio, 1);
-
-    /* Now we write them to screen */
-    opj_event_msg(j2k->cinfo, EVT_INFO,
-                  "RED(%d): %s, %dc, %s, %s\n",
-                  cio_tell(cio) - 5,
-                  str1[(Pred & (unsigned char) 0xC0) >> 6], /* addressing mode */
-                  (Pred & (unsigned char) 0x38) >> 3, /* corruption level */
-                  ((Pred & (unsigned char) 0x02) >> 1) ? "4Ba" : "2Ba", /* address range */
-                  (Pred & (unsigned char) 0x01) ? "errs" : "free"); /* error free? */
-
-    cio_skip(cio, Lred - 3);
-}
-
-opj_bool jpwl_check_tile(opj_j2k_t *j2k, opj_tcd_t *tcd, int tileno)
-{
-
-#ifdef oerhgierhgvhreit4u
-    /*
-       we navigate through the tile and find possible invalid parameters:
-    this saves a lot of crashes!!!!!
-     */
-    int compno, resno, precno, /*layno,*/ bandno, blockno;
-    int numprecincts, numblocks;
-
-    /* this is the selected tile */
-    opj_tcd_tile_t *tile = &(tcd->tcd_image->tiles[tileno]);
-
-    /* will keep the component */
-    opj_tcd_tilecomp_t *comp = NULL;
-
-    /* will keep the resolution */
-    opj_tcd_resolution_t *res;
-
-    /* will keep the subband */
-    opj_tcd_band_t *band;
-
-    /* will keep the precinct */
-    opj_tcd_precinct_t *prec;
-
-    /* will keep the codeblock */
-    opj_tcd_cblk_t *block;
-
-    /* check all tile components */
-    for (compno = 0; compno < tile->numcomps; compno++) {
-        comp = &(tile->comps[compno]);
-
-        /* check all component resolutions */
-        for (resno = 0; resno < comp->numresolutions; resno++) {
-            res = &(comp->resolutions[resno]);
-            numprecincts = res->pw * res->ph;
-
-            /* check all the subbands */
-            for (bandno = 0; bandno < res->numbands; bandno++) {
-                band = &(res->bands[bandno]);
-
-                /* check all the precincts */
-                for (precno = 0; precno < numprecincts; precno++) {
-                    prec = &(band->precincts[precno]);
-                    numblocks = prec->ch * prec->cw;
-
-                    /* check all the codeblocks */
-                    for (blockno = 0; blockno < numblocks; blockno++) {
-                        block = &(prec->cblks[blockno]);
-
-                        /* x-origin is invalid */
-                        if ((block->x0 < prec->x0) || (block->x0 > prec->x1)) {
-                            opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
-                                          "JPWL: wrong x-cord of block origin %d => x-prec is (%d, %d)\n",
-                                          block->x0, prec->x0, prec->x1);
-                            if (!JPWL_ASSUME) {
-                                return OPJ_FALSE;
-                            }
-                        };
-                    }
-                }
-            }
-        }
-    }
-
-#else
-    (void)j2k;
-    (void)tcd;
-    (void)tileno;
-#endif
-
-    return OPJ_TRUE;
-}
-
-/*@}*/
-
-#endif /* USE_JPWL */
-
-
-#ifdef USE_JPSEC
-
-/** @defgroup JPSEC JPSEC - JPEG-2000 Part 8 (JPSEC) codestream manager */
-/*@{*/
-
-
-/** @name Local static functions */
-/*@{*/
-
-void j2k_read_sec(opj_j2k_t *j2k)
-{
-    unsigned short int Lsec;
-
-    opj_cio_t *cio = j2k->cio;
-
-    /* Simply read the SEC length */
-    Lsec = cio_read(cio, 2);
-
-    /* Now we write them to screen */
-    opj_event_msg(j2k->cinfo, EVT_INFO,
-                  "SEC(%d)\n",
-                  cio_tell(cio) - 2
-                 );
-
-    cio_skip(cio, Lsec - 2);
-}
-
-void j2k_write_sec(opj_j2k_t *j2k)
-{
-    unsigned short int Lsec = 24;
-    int i;
-
-    opj_cio_t *cio = j2k->cio;
-
-    cio_write(cio, J2K_MS_SEC, 2);  /* SEC */
-    cio_write(cio, Lsec, 2);
-
-    /* write dummy data */
-    for (i = 0; i < Lsec - 2; i++) {
-        cio_write(cio, 0, 1);
-    }
-}
-
-void j2k_read_insec(opj_j2k_t *j2k)
-{
-    unsigned short int Linsec;
-
-    opj_cio_t *cio = j2k->cio;
-
-    /* Simply read the INSEC length */
-    Linsec = cio_read(cio, 2);
-
-    /* Now we write them to screen */
-    opj_event_msg(j2k->cinfo, EVT_INFO,
-                  "INSEC(%d)\n",
-                  cio_tell(cio) - 2
-                 );
-
-    cio_skip(cio, Linsec - 2);
-}
-
-
-/*@}*/
-
-/*@}*/
-
-#endif /* USE_JPSEC */
-
diff --git a/src/lib/openjpwl/jpwl.h b/src/lib/openjpwl/jpwl.h
deleted file mode 100644 (file)
index ed8a57e..0000000
+++ /dev/null
@@ -1,438 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * Copyright (c) 2005-2006, Dept. of Electronic and Information Engineering, Universita' degli Studi di Perugia, Italy
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef __JPWL_H
-#define __JPWL_H
-
-#ifdef USE_JPWL
-
-#include "crc.h"
-#include "rs.h"
-
-/**
-@file jpwl.h
-@brief The JPEG-2000 Part11 (JPWL) marker segments manager
-
-The functions in JPWL.C have for goal to read/write the markers added by JPWL.
-*/
-
-/** @defgroup JPWL JPWL - JPEG-2000 Part11 (JPWL) codestream manager */
-/*@{*/
-
-/**
-Assume a basic codestream structure, so you can resort better from uncorrected errors
-*/
-#define JPWL_ASSUME OPJ_TRUE
-
-/**
-EPB (Error Protection Block) Marker segment
-*/
-typedef struct jpwl_epb_ms {
-    /**@name Private fields set by epb_create */
-    /*@{*/
-    /** is the latest in header? */
-    opj_bool latest;
-    /** is it in packed mode? */
-    opj_bool packed;
-    /** TH where this marker has been placed (-1 means MH) */
-    int tileno;
-    /** index in current header (0-63) */
-    unsigned char index;
-    /** error protection method [-1=absent 0=none 1=predefined 16=CRC-16 32=CRC-32 37-128=RS] */
-    int hprot;
-    /** message word length of pre-data */
-    int k_pre;
-    /** code word length of pre-data */
-    int n_pre;
-    /** length of pre-data */
-    int pre_len;
-    /** message word length of post-data */
-    int k_post;
-    /** code word length of post-data */
-    int n_post;
-    /** length of post-data */
-    int post_len;
-    /*@}*/
-    /**@name Marker segment fields */
-    /*@{*/
-    /** two bytes for the length of EPB MS, exluding the marker itself (11 to 65535 bytes) */
-    unsigned short int Lepb;
-    /** single byte for the style */
-    unsigned char Depb;
-    /** four bytes, from 0 to 2^31-1 */
-    unsigned long int LDPepb;
-    /** four bytes, next error management method */
-    unsigned long int Pepb;
-    /** EPB data, variable size */
-    unsigned char *data;
-    /*@}*/
-}   jpwl_epb_ms_t;
-
-/**
-EPC (Error Protection Capability) Marker segment
-*/
-typedef struct jpwl_epc_ms {
-    /** is ESD active? */
-    opj_bool esd_on;
-    /** is RED active? */
-    opj_bool red_on;
-    /** is EPB active? */
-    opj_bool epb_on;
-    /** are informative techniques active? */
-    opj_bool info_on;
-    /**@name Marker segment fields */
-    /*@{*/
-    /** two bytes for the length of EPC MS, exluding the marker itself (9 to 65535 bytes) */
-    unsigned short int Lepc;
-    /** two bytes, CRC for the EPC, excluding Pcrc itself */
-    unsigned short int Pcrc;
-    /** four bytes, the codestream length from SOC to EOC */
-    unsigned long int DL;
-    /** one byte, signals JPWL techniques adoption */
-    unsigned char Pepc;
-    /** EPC data, variable length */
-    unsigned char *data;
-    /*@}*/
-}   jpwl_epc_ms_t;
-
-/**
-ESD (Error Sensitivity Descriptor) Marker segment
-*/
-typedef struct jpwl_esd_ms {
-    /** codestream addressing mode [0=packet, 1=byte range, 2=packet range, 3=reserved] */
-    unsigned char addrm;
-    /** size of codestream addresses [2/4 bytes] */
-    unsigned char ad_size;
-    /** type of sensitivity
-    [0=relative error, 1=MSE, 2=MSE reduction, 3=PSNR, 4=PSNR increment,
-    5=MAXERR (absolute peak error), 6=TSE (total squared error), 7=reserved */
-    unsigned char senst;
-    /** size of sensitivity data (1/2 bytes) */
-    unsigned char se_size;
-    /**@name Marker segment fields */
-    /*@{*/
-    /** two bytes for the length of ESD MS, exluding the marker itself (4 to 65535 bytes) */
-    unsigned short int Lesd;
-    /** two bytes, component of error sensitivity */
-    unsigned short int Cesd;
-    /** one byte, signals JPWL techniques adoption */
-    unsigned char Pesd;
-    /** ESD data, variable length */
-    unsigned char *data;
-    /*@}*/
-    /**@name Fields set by esd_create (only internal use) */
-    /*@{*/
-    /** number of components in the image */
-    int numcomps;
-    /** tile where this marker has been placed (-1 means MH) */
-    int tileno;
-    /** number of sensitivity values */
-    unsigned long int svalnum;
-    /** size of a single sensitivity pair (address+value) */
-    size_t sensval_size;
-    /*@}*/
-}   jpwl_esd_ms_t;
-
-/**
-RED (Residual Error Descriptor) Marker segment
-*/
-typedef struct jpwl_red_ms {
-    /** two bytes for the length of RED MS, exluding the marker itself (3 to 65535 bytes) */
-    unsigned short int Lred;
-    /** one byte, signals JPWL techniques adoption */
-    unsigned char Pred;
-    /** RED data, variable length */
-    unsigned char *data;
-}   jpwl_red_ms_t;
-
-/**
-Structure used to store JPWL markers temporary position and readyness
-*/
-typedef struct jpwl_marker {
-    /** marker value (J2K_MS_EPC, etc.) */
-    int id;
-    /** union keeping the pointer to the real marker struct */
-    union jpwl_marks {
-        /** pointer to EPB marker */
-        jpwl_epb_ms_t *epbmark;
-        /** pointer to EPC marker */
-        jpwl_epc_ms_t *epcmark;
-        /** pointer to ESD marker */
-        jpwl_esd_ms_t *esdmark;
-        /** pointer to RED marker */
-        jpwl_red_ms_t *redmark;
-    } m;
-    /** position where the marker should go, in the pre-JPWL codestream */
-    unsigned long int pos;
-    /** same as before, only written as a double, so we can sort it better */
-    double dpos;
-    /** length of the marker segment (marker excluded) */
-    unsigned short int len;
-    /** the marker length is ready or not? */
-    opj_bool len_ready;
-    /** the marker position is ready or not? */
-    opj_bool pos_ready;
-    /** the marker parameters are ready or not? */
-    opj_bool parms_ready;
-    /** are the written data ready or not */
-    opj_bool data_ready;
-}   jpwl_marker_t;
-
-/**
-Encode according to JPWL specs
-@param j2k J2K handle
-@param cio codestream handle
-@param image image handle
-*/
-void jpwl_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image);
-
-/**
-Prepare the list of JPWL markers, after the Part 1 codestream
-has been finalized (index struct is full)
-@param j2k J2K handle
-@param cio codestream handle
-@param image image handle
-*/
-void jpwl_prepare_marks(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image);
-
-/**
-Dump the list of JPWL markers, after it has been prepared
-@param j2k J2K handle
-@param cio codestream handle
-@param image image handle
-*/
-void jpwl_dump_marks(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image);
-
-/**
-Read the EPC marker (Error Protection Capability)
-@param j2k J2K handle
-*/
-void j2k_read_epc(opj_j2k_t *j2k);
-
-/**
-Write the EPC marker (Error Protection Capability), BUT the DL field is always set to 0
-(this simplifies the management of EPBs and it is openly stated in the standard
-as a possible value, mening that the information is not available) and the informative techniques
-are not yet implemented
-@param j2k J2K handle
-*/
-#if 0
-void j2k_write_epc(opj_j2k_t *j2k);
-#endif
-
-/**
-Read the EPB marker (Error Protection Block)
-@param j2k J2K handle
-*/
-void j2k_read_epb(opj_j2k_t *j2k);
-
-/**
-Write the EPB marker (Error Protection Block)
-@param j2k J2K handle
-*/
-void j2k_write_epb(opj_j2k_t *j2k);
-
-/**
-Read the ESD marker (Error Sensitivity Descriptor)
-@param j2k J2K handle
-*/
-void j2k_read_esd(opj_j2k_t *j2k);
-
-/**
-Read the RED marker (Residual Error Descriptor)
-@param j2k J2K handle
-*/
-void j2k_read_red(opj_j2k_t *j2k);
-
-/** create an EPB marker segment
-@param j2k J2K compressor handle
-@param latest it is the latest EPB in the header
-@param packed EPB is in packed style
-@param tileno tile number where the marker has been placed (-1 means MH)
-@param idx current EPB running index
-@param hprot applied protection type (-1/0,1,16,32,37-128)
-@param pre_len length of pre-protected data
-@param post_len length of post-protected data
-@return returns the freshly created EPB
-*/
-jpwl_epb_ms_t *jpwl_epb_create(opj_j2k_t *j2k, opj_bool latest, opj_bool packed,
-                               int tileno, int idx, int hprot,
-                               unsigned long int pre_len, unsigned long int post_len);
-
-/** add a number of EPB marker segments
-@param j2k J2K compressor handle
-@param jwmarker pointer to the JPWL markers list
-@param jwmarker_num pointer to the number of JPWL markers (gets updated)
-@param latest it is the latest group of EPBs in the header
-@param packed EPBs are in packed style
-@param insideMH it is in the MH
-@param idx pointer to the starting EPB running index (gets updated)
-@param hprot applied protection type (-1/0,1,16,32,37-128)
-@param place_pos place in original codestream where EPBs should go
-@param tileno tile number of these EPBs
-@param pre_len length of pre-protected data
-@param post_len length of post-protected data
-@return returns the length of all added markers
-*/
-int jpwl_epbs_add(opj_j2k_t *j2k, jpwl_marker_t *jwmarker, int *jwmarker_num,
-                  opj_bool latest, opj_bool packed, opj_bool insideMH, int *idx, int hprot,
-                  double place_pos, int tileno,
-                  unsigned long int pre_len, unsigned long int post_len);
-
-/** add a number of ESD marker segments
-@param j2k J2K compressor handle
-@param jwmarker pointer to the JPWL markers list
-@param jwmarker_num pointer to the number of JPWL markers (gets updated)
-@param comps considered component (-1=average, 0/1/2/...=component no.)
-@param addrm addressing mode (0=packet, 1=byte range, 2=packet range, 3=reserved)
-@param ad_size size of addresses (2/4 bytes)
-@param senst sensitivity type
-@param se_size sensitivity values size (1/2 bytes)
-@param place_pos place in original codestream where EPBs should go
-@param tileno tile number of these EPBs
-@return returns the length of all added markers
-*/
-int jpwl_esds_add(opj_j2k_t *j2k, jpwl_marker_t *jwmarker, int *jwmarker_num,
-                  int comps, unsigned char addrm, unsigned char ad_size,
-                  unsigned char senst, unsigned char se_size,
-                  double place_pos, int tileno);
-
-/** updates the information structure by modifying the positions and lengths
-@param j2k J2K compressor handle
-@param jwmarker pointer to JPWL markers list
-@param jwmarker_num number of JPWL markers
-@return returns true in case of success
-*/
-opj_bool jpwl_update_info(opj_j2k_t *j2k, jpwl_marker_t *jwmarker,
-                          int jwmarker_num);
-
-
-opj_bool jpwl_esd_fill(opj_j2k_t *j2k, jpwl_esd_ms_t *esdmark,
-                       unsigned char *buf);
-
-opj_bool jpwl_epb_fill(opj_j2k_t *j2k, jpwl_epb_ms_t *epbmark,
-                       unsigned char *buf, unsigned char *post_buf);
-
-opj_bool j2k_add_marker(opj_codestream_info_t *cstr_info,
-                        unsigned short int type, int pos, int len);
-
-/** corrects the data in the JPWL codestream
-@param j2k J2K compressor handle
-@return true if correction is performed correctly
-*/
-opj_bool jpwl_correct(opj_j2k_t *j2k);
-
-/** corrects the data protected by an EPB
-@param j2k J2K compressor handle
-@param buffer pointer to the EPB position
-@param type type of EPB: 0=MH, 1=TPH, 2=other, 3=auto
-@param pre_len length of pre-data
-@param post_len length of post_data
-@param conn is a pointer to the length of all connected (packed) EPBs
-@param L4_bufp is a pointer to the buffer pointer of redundancy data
-@return returns true if correction could be successfully performed
-*/
-opj_bool jpwl_epb_correct(opj_j2k_t *j2k, unsigned char *buffer, int type,
-                          int pre_len, int post_len, int *conn,
-                          unsigned char **L4_bufp);
-
-/** check that a tile and its children have valid data
-@param j2k J2K decompressor handle
-@param tcd Tile decompressor handle
-@param tileno number of the tile to check
-*/
-opj_bool jpwl_check_tile(opj_j2k_t *j2k, opj_tcd_t *tcd, int tileno);
-
-/** Macro functions for CRC computation */
-
-/**
-Computes the CRC-16, as stated in JPWL specs
-@param CRC two bytes containing the CRC value (must be initialized with 0x0000)
-@param DATA byte for which the CRC is computed; call this on every byte of the sequence
-and get the CRC at the end
-*/
-#define jpwl_updateCRC16(CRC, DATA) updateCRC16(CRC, DATA)
-
-/**
-Computes the CRC-32, as stated in JPWL specs
-@param CRC four bytes containing the CRC value (must be initialized with 0x00000000)
-@param DATA byte for which the CRC is computed; call this on every byte of the sequence
-and get the CRC at the end
-*/
-#define jpwl_updateCRC32(CRC, DATA) updateCRC32(CRC, DATA)
-
-/**
-Computes the minimum between two integers
-@param a first integer to compare
-@param b second integer to compare
-@return returns the minimum integer between a and b
-*/
-#ifndef min
-#define min(a,b)    (((a) < (b)) ? (a) : (b))
-#endif /* min */
-
-/*@}*/
-
-#endif /* USE_JPWL */
-
-#ifdef USE_JPSEC
-
-/** @defgroup JPSEC JPSEC - JPEG-2000 Part 8 (JPSEC) codestream manager */
-/*@{*/
-
-/**
-Read the SEC marker (SEcured Codestream)
-@param j2k J2K handle
-*/
-void j2k_read_sec(opj_j2k_t *j2k);
-
-/**
-Write the SEC marker (SEcured Codestream)
-@param j2k J2K handle
-*/
-void j2k_write_sec(opj_j2k_t *j2k);
-
-/**
-Read the INSEC marker (SEcured Codestream)
-@param j2k J2K handle
-*/
-void j2k_read_insec(opj_j2k_t *j2k);
-
-/*@}*/
-
-#endif /* USE_JPSEC */
-
-#endif /* __JPWL_H */
-
diff --git a/src/lib/openjpwl/jpwl_lib.c b/src/lib/openjpwl/jpwl_lib.c
deleted file mode 100644 (file)
index 66416a1..0000000
+++ /dev/null
@@ -1,1944 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * Copyright (c) 2005-2006, Dept. of Electronic and Information Engineering, Universita' degli Studi di Perugia, Italy
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifdef USE_JPWL
-
-#include "opj_includes.h"
-#include <limits.h>
-
-/** Minimum and maximum values for the double->pfp conversion */
-#define MIN_V1 0.0
-#define MAX_V1 17293822569102704640.0
-#define MIN_V2 0.000030517578125
-#define MAX_V2 131040.0
-
-/** conversion between a double precision floating point
-number and the corresponding pseudo-floating point used
-to represent sensitivity values
-@param V the double precision value
-@param bytes the number of bytes of the representation
-@return the pseudo-floating point value (cast accordingly)
-*/
-unsigned short int jpwl_double_to_pfp(double V, int bytes);
-
-/** conversion between a pseudo-floating point used
-to represent sensitivity values and the corresponding
-double precision floating point number
-@param em the pseudo-floating point value (cast accordingly)
-@param bytes the number of bytes of the representation
-@return the double precision value
-*/
-double jpwl_pfp_to_double(unsigned short int em, int bytes);
-
-/*-------------------------------------------------------------*/
-
-int jpwl_markcomp(const void *arg1, const void *arg2)
-{
-    /* Compare the two markers' positions */
-    double diff = (((jpwl_marker_t *) arg1)->dpos - ((jpwl_marker_t *) arg2)->dpos);
-
-    if (diff == 0.0) {
-        return (0);
-    } else if (diff < 0) {
-        return (-1);
-    } else {
-        return (+1);
-    }
-}
-
-int jpwl_epbs_add(opj_j2k_t *j2k, jpwl_marker_t *jwmarker, int *jwmarker_num,
-                  opj_bool latest, opj_bool packed, opj_bool insideMH, int *idx, int hprot,
-                  double place_pos, int tileno,
-                  unsigned long int pre_len, unsigned long int post_len)
-{
-
-    jpwl_epb_ms_t *epb_mark = NULL;
-
-    int k_pre, k_post, n_pre, n_post;
-
-    unsigned long int L1, L2, dL4, max_postlen, epbs_len = 0;
-
-    /* We find RS(n,k) for EPB parms and pre-data, if any */
-    if (insideMH && (*idx == 0)) {
-        /* First EPB in MH */
-        k_pre = 64;
-        n_pre = 160;
-    } else if (!insideMH && (*idx == 0)) {
-        /* First EPB in TH */
-        k_pre = 25;
-        n_pre = 80;
-    } else {
-        /* Following EPBs in MH or TH */
-        k_pre = 13;
-        n_pre = 40;
-    };
-
-    /* Find lengths, Figs. B3 and B4 */
-    /* size of pre data: pre_buf(pre_len) + EPB(2) + Lepb(2) + Depb(1) + LDPepb(4) + Pepb(4) */
-    L1 = pre_len + 13;
-
-    /* size of pre-data redundancy */
-    /*   (redundancy per codeword)       *     (number of codewords, rounded up)   */
-    L2 = (n_pre - k_pre) * (unsigned long int) ceil((double) L1 / (double) k_pre);
-
-    /* Find protection type for post data and its associated redundancy field length*/
-    if ((hprot == 16) || (hprot == 32)) {
-        /* there is a CRC for post-data */
-        k_post = post_len;
-        n_post = post_len + (hprot >> 3);
-        /*L3 = hprot >> 3;*/ /* 2 (CRC-16) or 4 (CRC-32) bytes */
-
-    } else if ((hprot >= 37) && (hprot <= 128)) {
-        /* there is a RS for post-data */
-        k_post = 32;
-        n_post = hprot;
-
-    } else {
-        /* Use predefined codes */
-        n_post = n_pre;
-        k_post = k_pre;
-    };
-
-    /* Create the EPB(s) */
-    while (post_len > 0) {
-
-        /* maximum postlen in order to respect EPB size
-        (we use JPWL_MAXIMUM_EPB_ROOM instead of 65535 for keeping room for EPB parms)*/
-        /*      (message word size)    *            (number of containable parity words)  */
-        max_postlen = k_post * (unsigned long int) floor((double)
-                      JPWL_MAXIMUM_EPB_ROOM / (double)(n_post - k_post));
-
-        /* maximum postlen in order to respect EPB size */
-        if (*idx == 0)
-            /* (we use (JPWL_MAXIMUM_EPB_ROOM - L2) instead of 65535 for keeping room for EPB parms + pre-data) */
-            /*      (message word size)    *                   (number of containable parity words)  */
-        {
-            max_postlen = k_post * (unsigned long int) floor((double)(
-                              JPWL_MAXIMUM_EPB_ROOM - L2) / (double)(n_post - k_post));
-        }
-
-        else
-            /* (we use JPWL_MAXIMUM_EPB_ROOM instead of 65535 for keeping room for EPB parms) */
-            /*      (message word size)    *            (number of containable parity words)  */
-        {
-            max_postlen = k_post * (unsigned long int) floor((double)
-                          JPWL_MAXIMUM_EPB_ROOM / (double)(n_post - k_post));
-        }
-
-        /* null protection case */
-        /* the max post length can be as large as the LDPepb field can host */
-        if (hprot == 0) {
-            max_postlen = INT_MAX;
-        }
-
-        /* length to use */
-        dL4 = min(max_postlen, post_len);
-
-        if ((epb_mark = jpwl_epb_create(
-                            j2k, /* this encoder handle */
-                            latest ? (dL4 < max_postlen) : OPJ_FALSE, /* is it the latest? */
-                            packed, /* is it packed? */
-                            tileno, /* we are in TPH */
-                            *idx, /* its index */
-                            hprot, /* protection type parameters of following data */
-                            0, /* pre-data: nothing for now */
-                            dL4 /* post-data: the stub computed previously */
-                        ))) {
-
-            /* Add this marker to the 'insertanda' list */
-            if (*jwmarker_num < JPWL_MAX_NO_MARKERS) {
-                jwmarker[*jwmarker_num].id = J2K_MS_EPB; /* its type */
-                jwmarker[*jwmarker_num].m.epbmark = epb_mark; /* the EPB */
-                jwmarker[*jwmarker_num].pos = (int) place_pos; /* after SOT */
-                jwmarker[*jwmarker_num].dpos = place_pos + 0.0000001 * (double)(
-                                                   *idx); /* not very first! */
-                jwmarker[*jwmarker_num].len = epb_mark->Lepb; /* its length */
-                jwmarker[*jwmarker_num].len_ready = OPJ_TRUE; /* ready */
-                jwmarker[*jwmarker_num].pos_ready = OPJ_TRUE; /* ready */
-                jwmarker[*jwmarker_num].parms_ready = OPJ_TRUE; /* ready */
-                jwmarker[*jwmarker_num].data_ready = OPJ_FALSE; /* not ready */
-                (*jwmarker_num)++;
-            }
-
-            /* increment epb index */
-            (*idx)++;
-
-            /* decrease postlen */
-            post_len -= dL4;
-
-            /* increase the total length of EPBs */
-            epbs_len += epb_mark->Lepb + 2;
-
-        } else {
-            /* ooops, problems */
-            opj_event_msg(j2k->cinfo, EVT_ERROR,
-                          "Could not create TPH EPB for UEP in tile %d\n", tileno);
-        };
-    }
-
-    return epbs_len;
-}
-
-
-jpwl_epb_ms_t *jpwl_epb_create(opj_j2k_t *j2k, opj_bool latest, opj_bool packed,
-                               int tileno, int idx, int hprot,
-                               unsigned long int pre_len, unsigned long int post_len)
-{
-
-    jpwl_epb_ms_t *epb = NULL;
-    /*unsigned short int data_len = 0;*/
-    unsigned short int L2, L3;
-    unsigned long int L1, L4;
-    /*unsigned char *predata_in = NULL;*/
-
-    opj_bool insideMH = (tileno == -1);
-
-    /* Alloc space */
-    if (!(epb = (jpwl_epb_ms_t *) opj_malloc((size_t) 1 * sizeof(jpwl_epb_ms_t)))) {
-        opj_event_msg(j2k->cinfo, EVT_ERROR,
-                      "Could not allocate room for one EPB MS\n");
-        return NULL;
-    };
-
-    /* We set RS(n,k) for EPB parms and pre-data, if any */
-    if (insideMH && (idx == 0)) {
-        /* First EPB in MH */
-        epb->k_pre = 64;
-        epb->n_pre = 160;
-    } else if (!insideMH && (idx == 0)) {
-        /* First EPB in TH */
-        epb->k_pre = 25;
-        epb->n_pre = 80;
-    } else {
-        /* Following EPBs in MH or TH */
-        epb->k_pre = 13;
-        epb->n_pre = 40;
-    };
-
-    /* Find lengths, Figs. B3 and B4 */
-    /* size of pre data: pre_buf(pre_len) + EPB(2) + Lepb(2) + Depb(1) + LDPepb(4) + Pepb(4) */
-    L1 = pre_len + 13;
-    epb->pre_len = pre_len;
-
-    /* size of pre-data redundancy */
-    /*   (redundancy per codeword)       *               (number of codewords, rounded up)   */
-    L2 = (epb->n_pre - epb->k_pre) * (unsigned short int) ceil((double) L1 /
-            (double) epb->k_pre);
-
-    /* length of post-data */
-    L4 = post_len;
-    epb->post_len = post_len;
-
-    /* Find protection type for post data and its associated redundancy field length*/
-    if ((hprot == 16) || (hprot == 32)) {
-        /* there is a CRC for post-data */
-        epb->Pepb = 0x10000000 | ((unsigned long int) hprot >>
-                                  5); /* 0=CRC-16, 1=CRC-32 */
-        epb->k_post = post_len;
-        epb->n_post = post_len + (hprot >> 3);
-        /*L3 = hprot >> 3;*/ /* 2 (CRC-16) or 4 (CRC-32) bytes */
-
-    } else if ((hprot >= 37) && (hprot <= 128)) {
-        /* there is a RS for post-data */
-        epb->Pepb = 0x20000020 | (((unsigned long int) hprot & 0x000000FF) << 8);
-        epb->k_post = 32;
-        epb->n_post = hprot;
-
-    } else if (hprot == 1) {
-        /* Use predefined codes */
-        epb->Pepb = (unsigned long int) 0x00000000;
-        epb->n_post = epb->n_pre;
-        epb->k_post = epb->k_pre;
-
-    } else if (hprot == 0) {
-        /* Placeholder EPB: only protects its parameters, no protection method */
-        epb->Pepb = (unsigned long int) 0xFFFFFFFF;
-        epb->n_post = 1;
-        epb->k_post = 1;
-
-    } else {
-        opj_event_msg(j2k->cinfo, EVT_ERROR,
-                      "Invalid protection value for EPB h = %d\n", hprot);
-        return NULL;
-    }
-
-    epb->hprot = hprot;
-
-    /*   (redundancy per codeword)          *                (number of codewords, rounded up) */
-    L3 = (epb->n_post - epb->k_post) * (unsigned short int) ceil((double) L4 /
-            (double) epb->k_post);
-
-    /* private fields */
-    epb->tileno = tileno;
-
-    /* Fill some fields of the EPB */
-
-    /* total length of the EPB MS (less the EPB marker itself): */
-    /* Lepb(2) + Depb(1) + LDPepb(4) + Pepb(4) + pre_redundancy + post-redundancy */
-    epb->Lepb = 11 + L2 + L3;
-
-    /* EPB style */
-    epb->Depb = ((packed & 0x0001) << 7) | ((latest & 0x0001) << 6) |
-                (idx & 0x003F);
-
-    /* length of data protected by EPB: */
-    epb->LDPepb = L1 + L4;
-
-    return epb;
-}
-
-void jpwl_epb_write(opj_j2k_t *j2k, jpwl_epb_ms_t *epb, unsigned char *buf)
-{
-
-    /* Marker */
-    *(buf++) = (unsigned char)(J2K_MS_EPB >> 8);
-    *(buf++) = (unsigned char)(J2K_MS_EPB >> 0);
-
-    /* Lepb */
-    *(buf++) = (unsigned char)(epb->Lepb >> 8);
-    *(buf++) = (unsigned char)(epb->Lepb >> 0);
-
-    /* Depb */
-    *(buf++) = (unsigned char)(epb->Depb >> 0);
-
-    /* LDPepb */
-    *(buf++) = (unsigned char)(epb->LDPepb >> 24);
-    *(buf++) = (unsigned char)(epb->LDPepb >> 16);
-    *(buf++) = (unsigned char)(epb->LDPepb >> 8);
-    *(buf++) = (unsigned char)(epb->LDPepb >> 0);
-
-    /* Pepb */
-    *(buf++) = (unsigned char)(epb->Pepb >> 24);
-    *(buf++) = (unsigned char)(epb->Pepb >> 16);
-    *(buf++) = (unsigned char)(epb->Pepb >> 8);
-    *(buf++) = (unsigned char)(epb->Pepb >> 0);
-
-    /* Data */
-    /*memcpy(buf, epb->data, (size_t) epb->Lepb - 11);*/
-    memset(buf, 0, (size_t) epb->Lepb - 11);
-
-    /* update markers struct */
-    j2k_add_marker(j2k->cstr_info, J2K_MS_EPB, -1, epb->Lepb + 2);
-
-}
-
-
-jpwl_epc_ms_t *jpwl_epc_create(opj_j2k_t *j2k, opj_bool esd_on, opj_bool red_on,
-                               opj_bool epb_on, opj_bool info_on)
-{
-
-    jpwl_epc_ms_t *epc = NULL;
-
-    /* Alloc space */
-    if (!(epc = (jpwl_epc_ms_t *) opj_malloc((size_t) 1 * sizeof(jpwl_epc_ms_t)))) {
-        opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not allocate room for EPC MS\n");
-        return NULL;
-    };
-
-    /* Set the EPC parameters */
-    epc->esd_on = esd_on;
-    epc->epb_on = epb_on;
-    epc->red_on = red_on;
-    epc->info_on = info_on;
-
-    /* Fill the EPC fields with default values */
-    epc->Lepc = 9;
-    epc->Pcrc = 0x0000;
-    epc->DL = 0x00000000;
-    epc->Pepc = ((j2k->cp->esd_on & 0x0001) << 4) | ((j2k->cp->red_on & 0x0001) <<
-                5) |
-                ((j2k->cp->epb_on & 0x0001) << 6) | ((j2k->cp->info_on & 0x0001) << 7);
-
-    return (epc);
-}
-
-opj_bool jpwl_epb_fill(opj_j2k_t *j2k, jpwl_epb_ms_t *epb, unsigned char *buf,
-                       unsigned char *post_buf)
-{
-
-    unsigned long int L1, L2, L3, L4;
-    int remaining;
-    unsigned long int P, NN_P;
-
-    /* Operating buffer */
-    static unsigned char codeword[NN], *parityword;
-
-    unsigned char *L1_buf, *L2_buf;
-    /* these ones are static, since we need to keep memory of
-     the exact place from one call to the other */
-    static unsigned char *L3_buf, *L4_buf;
-
-    /* some consistency check */
-    if (!buf) {
-        opj_event_msg(j2k->cinfo, EVT_ERROR, "There is no operating buffer for EPBs\n");
-        return OPJ_FALSE;
-    }
-
-    if (!post_buf && !L4_buf) {
-        opj_event_msg(j2k->cinfo, EVT_ERROR,
-                      "There is no operating buffer for EPBs data\n");
-        return OPJ_FALSE;
-    }
-
-    /*
-     * Compute parity bytes on pre-data, ALWAYS present (at least only for EPB parms)
-     */
-
-    /* Initialize RS structures */
-    P = epb->n_pre - epb->k_pre;
-    NN_P = NN - P;
-    memset(codeword, 0, NN);
-    parityword = codeword + NN_P;
-    init_rs(NN_P);
-
-    /* pre-data begins pre_len bytes before of EPB buf */
-    L1_buf = buf - epb->pre_len;
-    L1 = epb->pre_len + 13;
-
-    /* redundancy for pre-data begins immediately after EPB parms */
-    L2_buf = buf + 13;
-    L2 = (epb->n_pre - epb->k_pre) * (unsigned short int) ceil((double) L1 /
-            (double) epb->k_pre);
-
-    /* post-data
-       the position of L4 buffer can be:
-         1) passed as a parameter: in that case use it
-         2) null: in that case use the previous (static) one
-    */
-    if (post_buf) {
-        L4_buf = post_buf;
-    }
-    L4 = epb->post_len;
-
-    /* post-data redundancy begins immediately after pre-data redundancy */
-    L3_buf = L2_buf + L2;
-    L3 = (epb->n_post - epb->k_post) * (unsigned short int) ceil((double) L4 /
-            (double) epb->k_post);
-
-    /* let's check whether EPB length is sufficient to contain all these data */
-    if (epb->Lepb < (11 + L2 + L3)) {
-        opj_event_msg(j2k->cinfo, EVT_ERROR,
-                      "There is no room in EPB data field for writing redundancy data\n");
-    }
-    /*printf("Env. %d, nec. %d (%d + %d)\n", epb->Lepb - 11, L2 + L3, L2, L3);*/
-
-    /* Compute redundancy of pre-data message words */
-    remaining = L1;
-    while (remaining) {
-
-        /* copy message data into codeword buffer */
-        if (remaining < epb->k_pre) {
-            /* the last message word is zero-padded */
-            memset(codeword, 0, NN);
-            memcpy(codeword, L1_buf, remaining);
-            L1_buf += remaining;
-            remaining = 0;
-
-        } else {
-            memcpy(codeword, L1_buf, epb->k_pre);
-            L1_buf += epb->k_pre;
-            remaining -= epb->k_pre;
-
-        }
-
-        /* Encode the buffer and obtain parity bytes */
-        if (encode_rs(codeword, parityword))
-            opj_event_msg(j2k->cinfo, EVT_WARNING,
-                          "Possible encoding error in codeword @ position #%d\n",
-                          (L1_buf - buf) / epb->k_pre);
-
-        /* copy parity bytes only in redundancy buffer */
-        memcpy(L2_buf, parityword, P);
-
-        /* advance parity buffer */
-        L2_buf += P;
-    }
-
-    /*
-     * Compute parity bytes on post-data, may be absent if there are no data
-     */
-    /*printf("Hprot is %d (tileno=%d, k_pre=%d, n_pre=%d, k_post=%d, n_post=%d, pre_len=%d, post_len=%d)\n",
-        epb->hprot, epb->tileno, epb->k_pre, epb->n_pre, epb->k_post, epb->n_post, epb->pre_len,
-        epb->post_len);*/
-    if (epb->hprot < 0) {
-
-        /* there should be no EPB */
-
-    } else if (epb->hprot == 0) {
-
-        /* no protection for the data */
-        /* advance anyway */
-        L4_buf += epb->post_len;
-
-    } else if (epb->hprot == 16) {
-
-        /* CRC-16 */
-        unsigned short int mycrc = 0x0000;
-
-        /* compute the CRC field (excluding itself) */
-        remaining = L4;
-        while (remaining--) {
-            jpwl_updateCRC16(&mycrc, *(L4_buf++));
-        }
-
-        /* write the CRC field */
-        *(L3_buf++) = (unsigned char)(mycrc >> 8);
-        *(L3_buf++) = (unsigned char)(mycrc >> 0);
-
-    } else if (epb->hprot == 32) {
-
-        /* CRC-32 */
-        unsigned long int mycrc = 0x00000000;
-
-        /* compute the CRC field (excluding itself) */
-        remaining = L4;
-        while (remaining--) {
-            jpwl_updateCRC32(&mycrc, *(L4_buf++));
-        }
-
-        /* write the CRC field */
-        *(L3_buf++) = (unsigned char)(mycrc >> 24);
-        *(L3_buf++) = (unsigned char)(mycrc >> 16);
-        *(L3_buf++) = (unsigned char)(mycrc >> 8);
-        *(L3_buf++) = (unsigned char)(mycrc >> 0);
-
-    } else {
-
-        /* RS */
-
-        /* Initialize RS structures */
-        P = epb->n_post - epb->k_post;
-        NN_P = NN - P;
-        memset(codeword, 0, NN);
-        parityword = codeword + NN_P;
-        init_rs(NN_P);
-
-        /* Compute redundancy of post-data message words */
-        remaining = L4;
-        while (remaining) {
-
-            /* copy message data into codeword buffer */
-            if (remaining < epb->k_post) {
-                /* the last message word is zero-padded */
-                memset(codeword, 0, NN);
-                memcpy(codeword, L4_buf, remaining);
-                L4_buf += remaining;
-                remaining = 0;
-
-            } else {
-                memcpy(codeword, L4_buf, epb->k_post);
-                L4_buf += epb->k_post;
-                remaining -= epb->k_post;
-
-            }
-
-            /* Encode the buffer and obtain parity bytes */
-            if (encode_rs(codeword, parityword))
-                opj_event_msg(j2k->cinfo, EVT_WARNING,
-                              "Possible encoding error in codeword @ position #%d\n",
-                              (L4_buf - buf) / epb->k_post);
-
-            /* copy parity bytes only in redundancy buffer */
-            memcpy(L3_buf, parityword, P);
-
-            /* advance parity buffer */
-            L3_buf += P;
-        }
-
-    }
-
-    return OPJ_TRUE;
-}
-
-
-opj_bool jpwl_correct(opj_j2k_t *j2k)
-{
-
-    opj_cio_t *cio = j2k->cio;
-    opj_bool status;
-    static opj_bool mh_done = OPJ_FALSE;
-    int mark_pos, id, len, skips, sot_pos;
-    unsigned long int Psot = 0;
-
-    /* go back to marker position */
-    mark_pos = cio_tell(cio) - 2;
-    cio_seek(cio, mark_pos);
-
-    if ((j2k->state == J2K_STATE_MHSOC) && !mh_done) {
-
-        int mark_val = 0, skipnum = 0;
-
-        /*
-          COLOR IMAGE
-          first thing to do, if we are here, is to look whether
-          51 (skipnum) positions ahead there is an EPB, in case of MH
-        */
-        /*
-          B/W IMAGE
-          first thing to do, if we are here, is to look whether
-          45 (skipnum) positions ahead there is an EPB, in case of MH
-        */
-        /*       SIZ   SIZ_FIELDS     SIZ_COMPS               FOLLOWING_MARKER */
-        skipnum = 2  +     38     + 3 * j2k->cp->exp_comps  +         2;
-        if ((cio->bp + skipnum) < cio->end) {
-
-            cio_skip(cio, skipnum);
-
-            /* check that you are not going beyond the end of codestream */
-
-            /* call EPB corrector */
-            status = jpwl_epb_correct(j2k,     /* J2K decompressor handle */
-                                      cio->bp, /* pointer to EPB in codestream buffer */
-                                      0,       /* EPB type: MH */
-                                      skipnum,      /* length of pre-data */
-                                      -1,      /* length of post-data: -1 means auto */
-                                      NULL,
-                                      NULL
-                                     );
-
-            /* read the marker value */
-            mark_val = (*(cio->bp) << 8) | *(cio->bp + 1);
-
-            if (status && (mark_val == J2K_MS_EPB)) {
-                /* we found it! */
-                mh_done = OPJ_TRUE;
-                return OPJ_TRUE;
-            }
-
-            /* Disable correction in case of missing or bad head EPB */
-            /* We can't do better! */
-            /* PATCHED: 2008-01-25 */
-            /* MOVED UP: 2008-02-01 */
-            if (!status) {
-                j2k->cp->correct = OPJ_FALSE;
-                opj_event_msg(j2k->cinfo, EVT_WARNING,
-                              "Couldn't find the MH EPB: disabling JPWL\n");
-            }
-
-        }
-
-    }
-
-    if (OPJ_TRUE /*(j2k->state == J2K_STATE_TPHSOT) || (j2k->state == J2K_STATE_TPH)*/) {
-        /* else, look if 12 positions ahead there is an EPB, in case of TPH */
-        cio_seek(cio, mark_pos);
-        if ((cio->bp + 12) < cio->end) {
-
-            cio_skip(cio, 12);
-
-            /* call EPB corrector */
-            status = jpwl_epb_correct(j2k,     /* J2K decompressor handle */
-                                      cio->bp, /* pointer to EPB in codestream buffer */
-                                      1,       /* EPB type: TPH */
-                                      12,      /* length of pre-data */
-                                      -1,      /* length of post-data: -1 means auto */
-                                      NULL,
-                                      NULL
-                                     );
-            if (status)
-                /* we found it! */
-            {
-                return OPJ_TRUE;
-            }
-        }
-    }
-
-    return OPJ_FALSE;
-
-    /* for now, don't use this code */
-
-    /* else, look if here is an EPB, in case of other */
-    if (mark_pos > 64) {
-        /* it cannot stay before the first MH EPB */
-        cio_seek(cio, mark_pos);
-        cio_skip(cio, 0);
-
-        /* call EPB corrector */
-        status = jpwl_epb_correct(j2k,     /* J2K decompressor handle */
-                                  cio->bp, /* pointer to EPB in codestream buffer */
-                                  2,       /* EPB type: TPH */
-                                  0,       /* length of pre-data */
-                                  -1,      /* length of post-data: -1 means auto */
-                                  NULL,
-                                  NULL
-                                 );
-        if (status)
-            /* we found it! */
-        {
-            return OPJ_TRUE;
-        }
-    }
-
-    /* nope, no EPBs probably, or they are so damaged that we can give up */
-    return OPJ_FALSE;
-
-    return OPJ_TRUE;
-
-    /* AN ATTEMPT OF PARSER */
-    /* NOT USED ACTUALLY    */
-
-    /* go to the beginning of the file */
-    cio_seek(cio, 0);
-
-    /* let's begin */
-    j2k->state = J2K_STATE_MHSOC;
-
-    /* cycle all over the markers */
-    while (cio_tell(cio) < cio->length) {
-
-        /* read the marker */
-        mark_pos = cio_tell(cio);
-        id = cio_read(cio, 2);
-
-        /* details */
-        printf("Marker@%d: %X\n", cio_tell(cio) - 2, id);
-
-        /* do an action in response to the read marker */
-        switch (id) {
-
-        /* short markers */
-
-        /* SOC */
-        case J2K_MS_SOC:
-            j2k->state = J2K_STATE_MHSIZ;
-            len = 0;
-            skips = 0;
-            break;
-
-        /* EOC */
-        case J2K_MS_EOC:
-            j2k->state = J2K_STATE_MT;
-            len = 0;
-            skips = 0;
-            break;
-
-        /* particular case of SOD */
-        case J2K_MS_SOD:
-            len = Psot - (mark_pos - sot_pos) - 2;
-            skips = len;
-            break;
-
-        /* long markers */
-
-        /* SOT */
-        case J2K_MS_SOT:
-            j2k->state = J2K_STATE_TPH;
-            sot_pos = mark_pos; /* position of SOT */
-            len = cio_read(cio, 2); /* read the length field */
-            cio_skip(cio, 2); /* this field is unnecessary */
-            Psot = cio_read(cio, 4); /* tile length */
-            skips = len - 8;
-            break;
-
-        /* remaining */
-        case J2K_MS_SIZ:
-            j2k->state = J2K_STATE_MH;
-            /* read the length field */
-            len = cio_read(cio, 2);
-            skips = len - 2;
-            break;
-
-        /* remaining */
-        default:
-            /* read the length field */
-            len = cio_read(cio, 2);
-            skips = len - 2;
-            break;
-
-        }
-
-        /* skip to marker's end */
-        cio_skip(cio, skips);
-
-    }
-
-
-}
-
-opj_bool jpwl_epb_correct(opj_j2k_t *j2k, unsigned char *buffer, int type,
-                          int pre_len, int post_len, int *conn,
-                          unsigned char **L4_bufp)
-{
-
-    /* Operating buffer */
-    unsigned char codeword[NN], *parityword;
-
-    unsigned long int P, NN_P;
-    unsigned long int L1, L4;
-    int remaining, n_pre, k_pre, n_post, k_post;
-
-    int status, tt;
-
-    int orig_pos = cio_tell(j2k->cio);
-
-    unsigned char *L1_buf, *L2_buf;
-    unsigned char *L3_buf, *L4_buf;
-
-    unsigned long int LDPepb, Pepb;
-    unsigned short int Lepb;
-    unsigned char Depb;
-    char str1[25] = "";
-    int myconn, errnum = 0;
-    opj_bool errflag = OPJ_FALSE;
-
-    opj_cio_t *cio = j2k->cio;
-
-    /* check for common errors */
-    if (!buffer) {
-        opj_event_msg(j2k->cinfo, EVT_ERROR, "The EPB pointer is a NULL buffer\n");
-        return OPJ_FALSE;
-    }
-
-    /* set bignesses */
-    L1 = pre_len + 13;
-
-    /* pre-data correction */
-    switch (type) {
-
-    case 0:
-        /* MH EPB */
-        k_pre = 64;
-        n_pre = 160;
-        break;
-
-    case 1:
-        /* TPH EPB */
-        k_pre = 25;
-        n_pre = 80;
-        break;
-
-    case 2:
-        /* other EPBs */
-        k_pre = 13;
-        n_pre = 40;
-        break;
-
-    case 3:
-        /* automatic setup */
-        opj_event_msg(j2k->cinfo, EVT_ERROR, "Auto. setup not yet implemented\n");
-        return OPJ_FALSE;
-        break;
-
-    default:
-        /* unknown type */
-        opj_event_msg(j2k->cinfo, EVT_ERROR, "Unknown expected EPB type\n");
-        return OPJ_FALSE;
-        break;
-
-    }
-
-    /* Initialize RS structures */
-    P = n_pre - k_pre;
-    NN_P = NN - P;
-    tt = (int) floor((float) P / 2.0F); /* correction capability of the code */
-    memset(codeword, 0, NN);
-    parityword = codeword + NN_P;
-    init_rs(NN_P);
-
-    /* Correct pre-data message words */
-    L1_buf = buffer - pre_len;
-    L2_buf = buffer + 13;
-    remaining = L1;
-    while (remaining) {
-
-        /* always zero-pad codewords */
-        /* (this is required, since after decoding the zeros in the long codeword
-            could change, and keep unchanged in subsequent calls) */
-        memset(codeword, 0, NN);
-
-        /* copy codeword buffer into message bytes */
-        if (remaining < k_pre) {
-            memcpy(codeword, L1_buf, remaining);
-        } else {
-            memcpy(codeword, L1_buf, k_pre);
-        }
-
-        /* copy redundancy buffer in parity bytes */
-        memcpy(parityword, L2_buf, P);
-
-        /* Decode the buffer and possibly obtain corrected bytes */
-        status = eras_dec_rs(codeword, NULL, 0);
-        if (status == -1) {
-            /*if (conn == NULL)
-                opj_event_msg(j2k->cinfo, EVT_WARNING,
-                    "Possible decoding error in codeword @ position #%d\n", (L1_buf - buffer) / k_pre);*/
-            errflag = OPJ_TRUE;
-            /* we can try to safely get out from the function:
-              if we are here, either this is not an EPB or the first codeword
-              is too damaged to be helpful */
-            /*return OPJ_FALSE;*/
-
-        } else if (status == 0) {
-            /*if (conn == NULL)
-                opj_event_msg(j2k->cinfo, EVT_INFO, "codeword is correctly decoded\n");*/
-
-        } else if (status <= tt) {
-            /* it has corrected 0 <= errs <= tt */
-            /*if (conn == NULL)
-                opj_event_msg(j2k->cinfo, EVT_WARNING, "%d errors corrected in codeword\n", status);*/
-            errnum += status;
-
-        } else {
-            /*if (conn == NULL)
-                opj_event_msg(j2k->cinfo, EVT_WARNING, "EPB correction capability exceeded\n");
-            return OPJ_FALSE;*/
-            errflag = OPJ_TRUE;
-        }
-
-
-        /* advance parity buffer */
-        if ((status >= 0) && (status <= tt))
-            /* copy back corrected parity only if all is OK */
-        {
-            memcpy(L2_buf, parityword, P);
-        }
-        L2_buf += P;
-
-        /* advance message buffer */
-        if (remaining < k_pre) {
-            if ((status >= 0) && (status <= tt))
-                /* copy back corrected data only if all is OK */
-            {
-                memcpy(L1_buf, codeword, remaining);
-            }
-            L1_buf += remaining;
-            remaining = 0;
-
-        } else {
-            if ((status >= 0) && (status <= tt))
-                /* copy back corrected data only if all is OK */
-            {
-                memcpy(L1_buf, codeword, k_pre);
-            }
-            L1_buf += k_pre;
-            remaining -= k_pre;
-
-        }
-    }
-
-    /* print summary */
-    if (!conn) {
-
-        /*if (errnum)
-            opj_event_msg(j2k->cinfo, EVT_INFO, "+ %d symbol errors corrected (Ps=%.1e)\n", errnum,
-                (float) errnum / ((float) n_pre * (float) L1 / (float) k_pre));*/
-        if (errflag) {
-            /*opj_event_msg(j2k->cinfo, EVT_INFO, "+ there were unrecoverable errors\n");*/
-            return OPJ_FALSE;
-        }
-
-    }
-
-    /* presumably, now, EPB parameters are correct */
-    /* let's get them */
-
-    /* Simply read the EPB parameters */
-    if (conn) {
-        cio->bp = buffer;
-    }
-    cio_skip(cio, 2); /* the marker */
-    Lepb = cio_read(cio, 2);
-    Depb = cio_read(cio, 1);
-    LDPepb = cio_read(cio, 4);
-    Pepb = cio_read(cio, 4);
-
-    /* What does Pepb tells us about the protection method? */
-    if (((Pepb & 0xF0000000) >> 28) == 0) {
-        sprintf(str1, "pred");    /* predefined */
-    } else if (((Pepb & 0xF0000000) >> 28) == 1) {
-        sprintf(str1, "crc-%lu", 16 * ((Pepb & 0x00000001) + 1));    /* CRC mode */
-    } else if (((Pepb & 0xF0000000) >> 28) == 2) {
-        sprintf(str1, "rs(%lu,32)", (Pepb & 0x0000FF00) >> 8);    /* RS mode */
-    } else if (Pepb == 0xFFFFFFFF) {
-        sprintf(str1, "nometh");    /* RS mode */
-    } else {
-        sprintf(str1, "unknown");    /* unknown */
-    }
-
-    /* Now we write them to screen */
-    if (!conn && post_len)
-        opj_event_msg(j2k->cinfo, EVT_INFO,
-                      "EPB(%d): (%sl, %sp, %u), %lu, %s\n",
-                      cio_tell(cio) - 13,
-                      (Depb & 0x40) ? "" : "n", /* latest EPB or not? */
-                      (Depb & 0x80) ? "" : "n", /* packed or unpacked EPB? */
-                      (Depb & 0x3F), /* EPB index value */
-                      LDPepb, /*length of the data protected by the EPB */
-                      str1); /* protection method */
-
-
-    /* well, we need to investigate how long is the connected length of packed EPBs */
-    myconn = Lepb + 2;
-    if ((Depb & 0x40) == 0) /* not latest in header */
-        jpwl_epb_correct(j2k,      /* J2K decompressor handle */
-                         buffer + Lepb + 2,   /* pointer to next EPB in codestream buffer */
-                         2,     /* EPB type: should be of other type */
-                         0,  /* only EPB fields */
-                         0, /* do not look after */
-                         &myconn,
-                         NULL
-                        );
-    if (conn) {
-        *conn += myconn;
-    }
-
-    /*if (!conn)
-        printf("connected = %d\n", myconn);*/
-
-    /*cio_seek(j2k->cio, orig_pos);
-    return OPJ_TRUE;*/
-
-    /* post-data
-       the position of L4 buffer is at the end of currently connected EPBs
-    */
-    if (!(L4_bufp)) {
-        L4_buf = buffer + myconn;
-    } else if (!(*L4_bufp)) {
-        L4_buf = buffer + myconn;
-    } else {
-        L4_buf = *L4_bufp;
-    }
-    if (post_len == -1) {
-        L4 = LDPepb - pre_len - 13;
-    } else if (post_len == 0) {
-        L4 = 0;
-    } else {
-        L4 = post_len;
-    }
-
-    L3_buf = L2_buf;
-
-    /* Do a further check here on the read parameters */
-    if (L4 > (unsigned long) cio_numbytesleft(j2k->cio))
-        /* overflow */
-    {
-        return OPJ_FALSE;
-    }
-
-    /* we are ready for decoding the remaining data */
-    if (((Pepb & 0xF0000000) >> 28) == 1) {
-        /* CRC here */
-        if ((16 * ((Pepb & 0x00000001) + 1)) == 16) {
-
-            /* CRC-16 */
-            unsigned short int mycrc = 0x0000, filecrc = 0x0000;
-
-            /* compute the CRC field */
-            remaining = L4;
-            while (remaining--) {
-                jpwl_updateCRC16(&mycrc, *(L4_buf++));
-            }
-
-            /* read the CRC field */
-            filecrc = *(L3_buf++) << 8;
-            filecrc |= *(L3_buf++);
-
-            /* check the CRC field */
-            if (mycrc == filecrc) {
-                if (conn == NULL) {
-                    opj_event_msg(j2k->cinfo, EVT_INFO, "- CRC is OK\n");
-                }
-            } else {
-                if (conn == NULL) {
-                    opj_event_msg(j2k->cinfo, EVT_WARNING, "- CRC is KO (r=%d, c=%d)\n", filecrc,
-                                  mycrc);
-                }
-                errflag = OPJ_TRUE;
-            }
-        }
-
-        if ((16 * ((Pepb & 0x00000001) + 1)) == 32) {
-
-            /* CRC-32 */
-            unsigned long int mycrc = 0x00000000, filecrc = 0x00000000;
-
-            /* compute the CRC field */
-            remaining = L4;
-            while (remaining--) {
-                jpwl_updateCRC32(&mycrc, *(L4_buf++));
-            }
-
-            /* read the CRC field */
-            filecrc = *(L3_buf++) << 24;
-            filecrc |= *(L3_buf++) << 16;
-            filecrc |= *(L3_buf++) << 8;
-            filecrc |= *(L3_buf++);
-
-            /* check the CRC field */
-            if (mycrc == filecrc) {
-                if (conn == NULL) {
-                    opj_event_msg(j2k->cinfo, EVT_INFO, "- CRC is OK\n");
-                }
-            } else {
-                if (conn == NULL) {
-                    opj_event_msg(j2k->cinfo, EVT_WARNING, "- CRC is KO (r=%d, c=%d)\n", filecrc,
-                                  mycrc);
-                }
-                errflag = OPJ_TRUE;
-            }
-        }
-
-    } else if (Pepb == 0xFFFFFFFF) {
-        /* no method */
-
-        /* advance without doing anything */
-        remaining = L4;
-        while (remaining--) {
-            L4_buf++;
-        }
-
-    } else if ((((Pepb & 0xF0000000) >> 28) == 2) ||
-               (((Pepb & 0xF0000000) >> 28) == 0)) {
-        /* RS coding here */
-
-        if (((Pepb & 0xF0000000) >> 28) == 0) {
-
-            k_post = k_pre;
-            n_post = n_pre;
-
-        } else {
-
-            k_post = 32;
-            n_post = (Pepb & 0x0000FF00) >> 8;
-        }
-
-        /* Initialize RS structures */
-        P = n_post - k_post;
-        NN_P = NN - P;
-        tt = (int) floor((float) P / 2.0F); /* again, correction capability */
-        memset(codeword, 0, NN);
-        parityword = codeword + NN_P;
-        init_rs(NN_P);
-
-        /* Correct post-data message words */
-        /*L4_buf = buffer + Lepb + 2;*/
-        L3_buf = L2_buf;
-        remaining = L4;
-        while (remaining) {
-
-            /* always zero-pad codewords */
-            /* (this is required, since after decoding the zeros in the long codeword
-                could change, and keep unchanged in subsequent calls) */
-            memset(codeword, 0, NN);
-
-            /* copy codeword buffer into message bytes */
-            if (remaining < k_post) {
-                memcpy(codeword, L4_buf, remaining);
-            } else {
-                memcpy(codeword, L4_buf, k_post);
-            }
-
-            /* copy redundancy buffer in parity bytes */
-            memcpy(parityword, L3_buf, P);
-
-            /* Decode the buffer and possibly obtain corrected bytes */
-            status = eras_dec_rs(codeword, NULL, 0);
-            if (status == -1) {
-                /*if (conn == NULL)
-                    opj_event_msg(j2k->cinfo, EVT_WARNING,
-                        "Possible decoding error in codeword @ position #%d\n", (L4_buf - (buffer + Lepb + 2)) / k_post);*/
-                errflag = OPJ_TRUE;
-
-            } else if (status == 0) {
-                /*if (conn == NULL)
-                    opj_event_msg(j2k->cinfo, EVT_INFO, "codeword is correctly decoded\n");*/
-
-            } else if (status <= tt) {
-                /*if (conn == NULL)
-                    opj_event_msg(j2k->cinfo, EVT_WARNING, "%d errors corrected in codeword\n", status);*/
-                errnum += status;
-
-            } else {
-                /*if (conn == NULL)
-                    opj_event_msg(j2k->cinfo, EVT_WARNING, "EPB correction capability exceeded\n");
-                return OPJ_FALSE;*/
-                errflag = OPJ_TRUE;
-            }
-
-
-            /* advance parity buffer */
-            if ((status >= 0) && (status <= tt))
-                /* copy back corrected data only if all is OK */
-            {
-                memcpy(L3_buf, parityword, P);
-            }
-            L3_buf += P;
-
-            /* advance message buffer */
-            if (remaining < k_post) {
-                if ((status >= 0) && (status <= tt))
-                    /* copy back corrected data only if all is OK */
-                {
-                    memcpy(L4_buf, codeword, remaining);
-                }
-                L4_buf += remaining;
-                remaining = 0;
-
-            } else {
-                if ((status >= 0) && (status <= tt))
-                    /* copy back corrected data only if all is OK */
-                {
-                    memcpy(L4_buf, codeword, k_post);
-                }
-                L4_buf += k_post;
-                remaining -= k_post;
-
-            }
-        }
-    }
-
-    /* give back the L4_buf address */
-    if (L4_bufp) {
-        *L4_bufp = L4_buf;
-    }
-
-    /* print summary */
-    if (!conn) {
-
-        if (errnum)
-            opj_event_msg(j2k->cinfo, EVT_INFO, "- %d symbol errors corrected (Ps=%.1e)\n",
-                          errnum,
-                          (float) errnum / (float) LDPepb);
-        if (errflag) {
-            opj_event_msg(j2k->cinfo, EVT_INFO, "- there were unrecoverable errors\n");
-        }
-
-    }
-
-    cio_seek(j2k->cio, orig_pos);
-
-    return OPJ_TRUE;
-}
-
-void jpwl_epc_write(opj_j2k_t *j2k, jpwl_epc_ms_t *epc, unsigned char *buf)
-{
-
-    /* Marker */
-    *(buf++) = (unsigned char)(J2K_MS_EPC >> 8);
-    *(buf++) = (unsigned char)(J2K_MS_EPC >> 0);
-
-    /* Lepc */
-    *(buf++) = (unsigned char)(epc->Lepc >> 8);
-    *(buf++) = (unsigned char)(epc->Lepc >> 0);
-
-    /* Pcrc */
-    *(buf++) = (unsigned char)(epc->Pcrc >> 8);
-    *(buf++) = (unsigned char)(epc->Pcrc >> 0);
-
-    /* DL */
-    *(buf++) = (unsigned char)(epc->DL >> 24);
-    *(buf++) = (unsigned char)(epc->DL >> 16);
-    *(buf++) = (unsigned char)(epc->DL >> 8);
-    *(buf++) = (unsigned char)(epc->DL >> 0);
-
-    /* Pepc */
-    *(buf++) = (unsigned char)(epc->Pepc >> 0);
-
-    /* Data */
-    /*memcpy(buf, epc->data, (size_t) epc->Lepc - 9);*/
-    memset(buf, 0, (size_t) epc->Lepc - 9);
-
-    /* update markers struct */
-    j2k_add_marker(j2k->cstr_info, J2K_MS_EPC, -1, epc->Lepc + 2);
-
-}
-
-int jpwl_esds_add(opj_j2k_t *j2k, jpwl_marker_t *jwmarker, int *jwmarker_num,
-                  int comps, unsigned char addrm, unsigned char ad_size,
-                  unsigned char senst, unsigned char se_size,
-                  double place_pos, int tileno)
-{
-
-    return 0;
-}
-
-jpwl_esd_ms_t *jpwl_esd_create(opj_j2k_t *j2k, int comp,
-                               unsigned char addrm, unsigned char ad_size,
-                               unsigned char senst, int se_size, int tileno,
-                               unsigned long int svalnum, void *sensval)
-{
-
-    jpwl_esd_ms_t *esd = NULL;
-
-    /* Alloc space */
-    if (!(esd = (jpwl_esd_ms_t *) opj_malloc((size_t) 1 * sizeof(jpwl_esd_ms_t)))) {
-        opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not allocate room for ESD MS\n");
-        return NULL;
-    };
-
-    /* if relative sensitivity, activate byte range mode */
-    if (senst == 0) {
-        addrm = 1;
-    }
-
-    /* size of sensval's ... */
-    if ((ad_size != 0) && (ad_size != 2) && (ad_size != 4)) {
-        opj_event_msg(j2k->cinfo, EVT_ERROR,
-                      "Address size %d for ESD MS is forbidden\n", ad_size);
-        return NULL;
-    }
-    if ((se_size != 1) && (se_size != 2)) {
-        opj_event_msg(j2k->cinfo, EVT_ERROR,
-                      "Sensitivity size %d for ESD MS is forbidden\n", se_size);
-        return NULL;
-    }
-
-    /* ... depends on the addressing mode */
-    switch (addrm) {
-
-    /* packet mode */
-    case (0):
-        ad_size = 0; /* as per the standard */
-        esd->sensval_size = (unsigned int)se_size;
-        break;
-
-    /* byte range */
-    case (1):
-        /* auto sense address size */
-        if (ad_size == 0)
-            /* if there are more than 66% of (2^16 - 1) bytes, switch to 4 bytes
-             (we keep space for possible EPBs being inserted) */
-        {
-            ad_size = (j2k->cstr_info->codestream_size > (1 * 65535 / 3)) ? 4 : 2;
-        }
-        esd->sensval_size = ad_size + ad_size + se_size;
-        break;
-
-    /* packet range */
-    case (2):
-        /* auto sense address size */
-        if (ad_size == 0)
-            /* if there are more than 2^16 - 1 packets, switch to 4 bytes */
-        {
-            ad_size = (j2k->cstr_info->packno > 65535) ? 4 : 2;
-        }
-        esd->sensval_size = ad_size + ad_size + se_size;
-        break;
-
-    case (3):
-        opj_event_msg(j2k->cinfo, EVT_ERROR,
-                      "Address mode %d for ESD MS is unimplemented\n", addrm);
-        return NULL;
-
-    default:
-        opj_event_msg(j2k->cinfo, EVT_ERROR,
-                      "Address mode %d for ESD MS is forbidden\n", addrm);
-        return NULL;
-    }
-
-    /* set or unset sensitivity values */
-    if (svalnum <= 0) {
-
-        switch (senst) {
-
-        /* just based on the portions of a codestream */
-        case (0):
-            /* MH + no. of THs + no. of packets */
-            svalnum = 1 + (j2k->cstr_info->tw * j2k->cstr_info->th) *
-                      (1 + j2k->cstr_info->packno);
-            break;
-
-        /* all the ones that are based on the packets */
-        default:
-            if (tileno < 0)
-                /* MH: all the packets and all the tiles info is written */
-            {
-                svalnum = j2k->cstr_info->tw * j2k->cstr_info->th * j2k->cstr_info->packno;
-            } else
-                /* TPH: only that tile info is written */
-            {
-                svalnum = j2k->cstr_info->packno;
-            }
-            break;
-
-        }
-    }
-
-    /* fill private fields */
-    esd->senst = senst;
-    esd->ad_size = ad_size;
-    esd->se_size = se_size;
-    esd->addrm = addrm;
-    esd->svalnum = svalnum;
-    esd->numcomps = j2k->image->numcomps;
-    esd->tileno = tileno;
-
-    /* Set the ESD parameters */
-    /* length, excluding data field */
-    if (esd->numcomps < 257) {
-        esd->Lesd = 4 + (unsigned short int)(esd->svalnum * esd->sensval_size);
-    } else {
-        esd->Lesd = 5 + (unsigned short int)(esd->svalnum * esd->sensval_size);
-    }
-
-    /* component data field */
-    if (comp >= 0) {
-        esd->Cesd = comp;
-    } else
-        /* we are averaging */
-    {
-        esd->Cesd = 0;
-    }
-
-    /* Pesd field */
-    esd->Pesd = 0x00;
-    esd->Pesd |= (esd->addrm & 0x03) << 6; /* addressing mode */
-    esd->Pesd |= (esd->senst & 0x07) << 3; /* sensitivity type */
-    esd->Pesd |= ((esd->se_size >> 1) & 0x01) << 2; /* sensitivity size */
-    esd->Pesd |= ((esd->ad_size >> 2) & 0x01) << 1; /* addressing size */
-    esd->Pesd |= (comp < 0) ? 0x01 : 0x00; /* averaging components */
-
-    /* if pointer to sensval is NULL, we can fill data field by ourselves */
-    if (!sensval) {
-
-        /* old code moved to jpwl_esd_fill() */
-        esd->data = NULL;
-
-    } else {
-        /* we set the data field as the sensitivity values pointer passed to the function */
-        esd->data = (unsigned char *) sensval;
-    }
-
-    return (esd);
-}
-
-opj_bool jpwl_esd_fill(opj_j2k_t *j2k, jpwl_esd_ms_t *esd, unsigned char *buf)
-{
-
-    int i;
-    unsigned long int vv;
-    unsigned long int addr1 = 0L, addr2 = 0L;
-    double dvalue = 0.0, Omax2, tmp, TSE = 0.0, MSE, oldMSE = 0.0, PSNR,
-           oldPSNR = 0.0;
-    unsigned short int pfpvalue;
-    unsigned long int addrmask = 0x00000000;
-    opj_bool doneMH = OPJ_FALSE, doneTPH = OPJ_FALSE;
-
-    /* sensitivity values in image info are as follows:
-        - for each tile, distotile is the starting distortion for that tile, sum of all components
-        - for each packet in a tile, disto is the distortion reduction caused by that packet to that tile
-        - the TSE for a single tile should be given by   distotile - sum(disto)  , for all components
-        - the MSE for a single tile is given by     TSE / nbpix    , for all components
-        - the PSNR for a single tile is given by   10*log10( Omax^2 / MSE)    , for all components
-          (Omax is given by    2^bpp - 1    for unsigned images and by    2^(bpp - 1) - 1    for signed images
-    */
-
-    /* browse all components and find Omax */
-    Omax2 = 0.0;
-    for (i = 0; i < j2k->image->numcomps; i++) {
-        tmp = pow(2.0, (double)(j2k->image->comps[i].sgnd ?
-                                (j2k->image->comps[i].bpp - 1) : (j2k->image->comps[i].bpp))) - 1;
-        if (tmp > Omax2) {
-            Omax2 = tmp;
-        }
-    }
-    Omax2 = Omax2 * Omax2;
-
-    /* if pointer of esd->data is not null, simply write down all the values byte by byte */
-    if (esd->data) {
-        for (i = 0; i < (int) esd->svalnum; i++) {
-            *(buf++) = esd->data[i];
-        }
-        return OPJ_TRUE;
-    }
-
-    /* addressing mask */
-    if (esd->ad_size == 2) {
-        addrmask = 0x0000FFFF;    /* two bytes */
-    } else {
-        addrmask = 0xFFFFFFFF;    /* four bytes */
-    }
-
-    /* set on precise point where sensitivity starts */
-    if (esd->numcomps < 257) {
-        buf += 6;
-    } else {
-        buf += 7;
-    }
-
-    /* let's fill the data fields */
-    for (vv = (esd->tileno < 0) ? 0 : (j2k->cstr_info->packno * esd->tileno);
-            vv < esd->svalnum; vv++) {
-
-        int thistile = vv / j2k->cstr_info->packno,
-            thispacket = vv % j2k->cstr_info->packno;
-
-        /* skip for the hack some lines below */
-        if (thistile == j2k->cstr_info->tw * j2k->cstr_info->th) {
-            break;
-        }
-
-        /* starting tile distortion */
-        if (thispacket == 0) {
-            TSE = j2k->cstr_info->tile[thistile].distotile;
-            oldMSE = TSE / j2k->cstr_info->tile[thistile].numpix;
-            oldPSNR = 10.0 * log10(Omax2 / oldMSE);
-        }
-
-        /* TSE */
-        TSE -= j2k->cstr_info->tile[thistile].packet[thispacket].disto;
-
-        /* MSE */
-        MSE = TSE / j2k->cstr_info->tile[thistile].numpix;
-
-        /* PSNR */
-        PSNR = 10.0 * log10(Omax2 / MSE);
-
-        /* fill the address range */
-        switch (esd->addrm) {
-
-        /* packet mode */
-        case (0):
-            /* nothing, there is none */
-            break;
-
-        /* byte range */
-        case (1):
-            /* start address of packet */
-            addr1 = (j2k->cstr_info->tile[thistile].packet[thispacket].start_pos) &
-                    addrmask;
-            /* end address of packet */
-            addr2 = (j2k->cstr_info->tile[thistile].packet[thispacket].end_pos) & addrmask;
-            break;
-
-        /* packet range */
-        case (2):
-            /* not implemented here */
-            opj_event_msg(j2k->cinfo, EVT_WARNING,
-                          "Addressing mode packet_range is not implemented\n");
-            break;
-
-        /* unknown addressing method */
-        default:
-            /* not implemented here */
-            opj_event_msg(j2k->cinfo, EVT_WARNING, "Unknown addressing mode\n");
-            break;
-
-        }
-
-        /* hack for writing relative sensitivity of MH and TPHs */
-        if ((esd->senst == 0) && (thispacket == 0)) {
-
-            /* possible MH */
-            if ((thistile == 0) && !doneMH) {
-                /* we have to manage MH addresses */
-                addr1 = 0; /* start of MH */
-                addr2 = j2k->cstr_info->main_head_end; /* end of MH */
-                /* set special dvalue for this MH */
-                dvalue = -10.0;
-                doneMH = OPJ_TRUE; /* don't come here anymore */
-                vv--; /* wrap back loop counter */
-
-            } else if (!doneTPH) {
-                /* we have to manage TPH addresses */
-                addr1 = j2k->cstr_info->tile[thistile].start_pos;
-                addr2 = j2k->cstr_info->tile[thistile].end_header;
-                /* set special dvalue for this TPH */
-                dvalue = -1.0;
-                doneTPH = OPJ_TRUE; /* don't come here till the next tile */
-                vv--; /* wrap back loop counter */
-            }
-
-        } else {
-            doneTPH = OPJ_FALSE;    /* reset TPH counter */
-        }
-
-        /* write the addresses to the buffer */
-        switch (esd->ad_size) {
-
-        case (0):
-            /* do nothing */
-            break;
-
-        case (2):
-            /* two bytes */
-            *(buf++) = (unsigned char)(addr1 >> 8);
-            *(buf++) = (unsigned char)(addr1 >> 0);
-            *(buf++) = (unsigned char)(addr2 >> 8);
-            *(buf++) = (unsigned char)(addr2 >> 0);
-            break;
-
-        case (4):
-            /* four bytes */
-            *(buf++) = (unsigned char)(addr1 >> 24);
-            *(buf++) = (unsigned char)(addr1 >> 16);
-            *(buf++) = (unsigned char)(addr1 >> 8);
-            *(buf++) = (unsigned char)(addr1 >> 0);
-            *(buf++) = (unsigned char)(addr2 >> 24);
-            *(buf++) = (unsigned char)(addr2 >> 16);
-            *(buf++) = (unsigned char)(addr2 >> 8);
-            *(buf++) = (unsigned char)(addr2 >> 0);
-            break;
-
-        default:
-            /* do nothing */
-            break;
-        }
-
-
-        /* let's fill the value field */
-        switch (esd->senst) {
-
-        /* relative sensitivity */
-        case (0):
-            /* we just write down the packet ordering */
-            if (dvalue == -10)
-                /* MH */
-            {
-                dvalue = MAX_V1 + 1000.0;    /* this will cause pfpvalue set to 0xFFFF */
-            } else if (dvalue == -1)
-                /* TPH */
-            {
-                dvalue = MAX_V1 + 1000.0;    /* this will cause pfpvalue set to 0xFFFF */
-            } else
-                /* packet: first is most important, and then in decreasing order
-                down to the last, which counts for 1 */
-            {
-                dvalue = jpwl_pfp_to_double((unsigned short)(j2k->cstr_info->packno -
-                                            thispacket), esd->se_size);
-            }
-            break;
-
-        /* MSE */
-        case (1):
-            /* !!! WRONG: let's put here disto field of packets !!! */
-            dvalue = MSE;
-            break;
-
-        /* MSE reduction */
-        case (2):
-            dvalue = oldMSE - MSE;
-            oldMSE = MSE;
-            break;
-
-        /* PSNR */
-        case (3):
-            dvalue = PSNR;
-            break;
-
-        /* PSNR increase */
-        case (4):
-            dvalue = PSNR - oldPSNR;
-            oldPSNR = PSNR;
-            break;
-
-        /* MAXERR */
-        case (5):
-            dvalue = 0.0;
-            opj_event_msg(j2k->cinfo, EVT_WARNING,
-                          "MAXERR sensitivity mode is not implemented\n");
-            break;
-
-        /* TSE */
-        case (6):
-            dvalue = TSE;
-            break;
-
-        /* reserved */
-        case (7):
-            dvalue = 0.0;
-            opj_event_msg(j2k->cinfo, EVT_WARNING,
-                          "Reserved sensitivity mode is not implemented\n");
-            break;
-
-        default:
-            dvalue = 0.0;
-            break;
-        }
-
-        /* compute the pseudo-floating point value */
-        pfpvalue = jpwl_double_to_pfp(dvalue, esd->se_size);
-
-        /* write the pfp value to the buffer */
-        switch (esd->se_size) {
-
-        case (1):
-            /* one byte */
-            *(buf++) = (unsigned char)(pfpvalue >> 0);
-            break;
-
-        case (2):
-            /* two bytes */
-            *(buf++) = (unsigned char)(pfpvalue >> 8);
-            *(buf++) = (unsigned char)(pfpvalue >> 0);
-            break;
-        }
-
-    }
-
-    return OPJ_TRUE;
-}
-
-opj_bool jpwl_esd_write(opj_j2k_t *j2k, jpwl_esd_ms_t *esd, unsigned char *buf)
-{
-
-    /* Marker */
-    *(buf++) = (unsigned char)(J2K_MS_ESD >> 8);
-    *(buf++) = (unsigned char)(J2K_MS_ESD >> 0);
-
-    /* Lesd */
-    *(buf++) = (unsigned char)(esd->Lesd >> 8);
-    *(buf++) = (unsigned char)(esd->Lesd >> 0);
-
-    /* Cesd */
-    if (esd->numcomps >= 257) {
-        *(buf++) = (unsigned char)(esd->Cesd >> 8);
-    }
-    *(buf++) = (unsigned char)(esd->Cesd >> 0);
-
-    /* Pesd */
-    *(buf++) = (unsigned char)(esd->Pesd >> 0);
-
-    /* Data */
-    if (esd->numcomps < 257) {
-        memset(buf, 0xAA, (size_t) esd->Lesd - 4);
-    }
-    /*memcpy(buf, esd->data, (size_t) esd->Lesd - 4);*/
-    else {
-        memset(buf, 0xAA, (size_t) esd->Lesd - 5);
-    }
-    /*memcpy(buf, esd->data, (size_t) esd->Lesd - 5);*/
-
-    /* update markers struct */
-    j2k_add_marker(j2k->cstr_info, J2K_MS_ESD, -1, esd->Lesd + 2);
-
-    return OPJ_TRUE;
-}
-
-unsigned short int jpwl_double_to_pfp(double V, int bytes)
-{
-
-    unsigned short int em, e, m;
-
-    switch (bytes) {
-
-    case (1):
-
-        if (V < MIN_V1) {
-            e = 0x0000;
-            m = 0x0000;
-        } else if (V > MAX_V1) {
-            e = 0x000F;
-            m = 0x000F;
-        } else {
-            e = (unsigned short int)(floor(log(V) * 1.44269504088896) / 4.0);
-            m = (unsigned short int)(0.5 + (V / (pow(2.0, (double)(4 * e)))));
-        }
-        em = ((e & 0x000F) << 4) + (m & 0x000F);
-        break;
-
-    case (2):
-
-        if (V < MIN_V2) {
-            e = 0x0000;
-            m = 0x0000;
-        } else if (V > MAX_V2) {
-            e = 0x001F;
-            m = 0x07FF;
-        } else {
-            e = (unsigned short int) floor(log(V) * 1.44269504088896) + 15;
-            m = (unsigned short int)(0.5 + 2048.0 * ((V / (pow(2.0,
-                                     (double) e - 15.0))) - 1.0));
-        }
-        em = ((e & 0x001F) << 11) + (m & 0x07FF);
-        break;
-
-    default:
-
-        em = 0x0000;
-        break;
-    };
-
-    return em;
-}
-
-double jpwl_pfp_to_double(unsigned short int em, int bytes)
-{
-
-    double V;
-
-    switch (bytes) {
-
-    case 1:
-        V = (double)(em & 0x0F) * pow(2.0, (double)(em & 0xF0));
-        break;
-
-    case 2:
-
-        V = pow(2.0, (double)((em & 0xF800) >> 11) - 15.0) * (1.0 + (double)(
-                    em & 0x07FF) / 2048.0);
-        break;
-
-    default:
-        V = 0.0;
-        break;
-
-    }
-
-    return V;
-
-}
-
-opj_bool jpwl_update_info(opj_j2k_t *j2k, jpwl_marker_t *jwmarker,
-                          int jwmarker_num)
-{
-
-    int mm;
-    unsigned long int addlen;
-
-    opj_codestream_info_t *info = j2k->cstr_info;
-    int tileno, tpno, packno, numtiles = info->th * info->tw,
-                              numpacks = info->packno;
-
-    if (!j2k || !jwmarker) {
-        opj_event_msg(j2k->cinfo, EVT_ERROR,
-                      "J2K handle or JPWL markers list badly allocated\n");
-        return OPJ_FALSE;
-    }
-
-    /* main_head_end: how many markers are there before? */
-    addlen = 0;
-    for (mm = 0; mm < jwmarker_num; mm++)
-        if (jwmarker[mm].pos < (unsigned long int) info->main_head_end) {
-            addlen += jwmarker[mm].len + 2;
-        }
-    info->main_head_end += addlen;
-
-    /* codestream_size: always increment with all markers */
-    addlen = 0;
-    for (mm = 0; mm < jwmarker_num; mm++) {
-        addlen += jwmarker[mm].len + 2;
-    }
-    info->codestream_size += addlen;
-
-    /* navigate through all the tiles */
-    for (tileno = 0; tileno < numtiles; tileno++) {
-
-        /* start_pos: increment with markers before SOT */
-        addlen = 0;
-        for (mm = 0; mm < jwmarker_num; mm++)
-            if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].start_pos) {
-                addlen += jwmarker[mm].len + 2;
-            }
-        info->tile[tileno].start_pos += addlen;
-
-        /* end_header: increment with markers before of it */
-        addlen = 0;
-        for (mm = 0; mm < jwmarker_num; mm++)
-            if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].end_header) {
-                addlen += jwmarker[mm].len + 2;
-            }
-        info->tile[tileno].end_header += addlen;
-
-        /* end_pos: increment with markers before the end of this tile */
-        /* code is disabled, since according to JPWL no markers can be beyond TPH */
-        addlen = 0;
-        for (mm = 0; mm < jwmarker_num; mm++)
-            if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].end_pos) {
-                addlen += jwmarker[mm].len + 2;
-            }
-        info->tile[tileno].end_pos += addlen;
-
-        /* navigate through all the tile parts */
-        for (tpno = 0; tpno < info->tile[tileno].num_tps; tpno++) {
-
-            /* start_pos: increment with markers before SOT */
-            addlen = 0;
-            for (mm = 0; mm < jwmarker_num; mm++)
-                if (jwmarker[mm].pos < (unsigned long int)
-                        info->tile[tileno].tp[tpno].tp_start_pos) {
-                    addlen += jwmarker[mm].len + 2;
-                }
-            info->tile[tileno].tp[tpno].tp_start_pos += addlen;
-
-            /* end_header: increment with markers before of it */
-            addlen = 0;
-            for (mm = 0; mm < jwmarker_num; mm++)
-                if (jwmarker[mm].pos < (unsigned long int)
-                        info->tile[tileno].tp[tpno].tp_end_header) {
-                    addlen += jwmarker[mm].len + 2;
-                }
-            info->tile[tileno].tp[tpno].tp_end_header += addlen;
-
-            /* end_pos: increment with markers before the end of this tile part */
-            addlen = 0;
-            for (mm = 0; mm < jwmarker_num; mm++)
-                if (jwmarker[mm].pos < (unsigned long int)
-                        info->tile[tileno].tp[tpno].tp_end_pos) {
-                    addlen += jwmarker[mm].len + 2;
-                }
-            info->tile[tileno].tp[tpno].tp_end_pos += addlen;
-
-        }
-
-        /* navigate through all the packets in this tile */
-        for (packno = 0; packno < numpacks; packno++) {
-
-            /* start_pos: increment with markers before the packet */
-            /* disabled for the same reason as before */
-            addlen = 0;
-            for (mm = 0; mm < jwmarker_num; mm++)
-                if (jwmarker[mm].pos <= (unsigned long int)
-                        info->tile[tileno].packet[packno].start_pos) {
-                    addlen += jwmarker[mm].len + 2;
-                }
-            info->tile[tileno].packet[packno].start_pos += addlen;
-
-            /* end_ph_pos: increment with markers before the packet */
-            /* disabled for the same reason as before */
-            /*addlen = 0;
-            for (mm = 0; mm < jwmarker_num; mm++)
-                if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].packet[packno].end_ph_pos)
-                    addlen += jwmarker[mm].len + 2;*/
-            info->tile[tileno].packet[packno].end_ph_pos += addlen;
-
-            /* end_pos: increment if marker is before the end of packet */
-            /* disabled for the same reason as before */
-            /*addlen = 0;
-            for (mm = 0; mm < jwmarker_num; mm++)
-                if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].packet[packno].end_pos)
-                    addlen += jwmarker[mm].len + 2;*/
-            info->tile[tileno].packet[packno].end_pos += addlen;
-
-        }
-    }
-
-    /* reorder the markers list */
-
-    return OPJ_TRUE;
-}
-
-#endif /* USE_JPWL */
diff --git a/src/lib/openjpwl/libopenjpwl.pc.cmake.in b/src/lib/openjpwl/libopenjpwl.pc.cmake.in
deleted file mode 100644 (file)
index b124419..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-prefix=@CMAKE_INSTALL_PREFIX@
-bindir=${prefix}/@OPENJPEG_INSTALL_BIN_DIR@
-mandir=${prefix}/@OPENJPEG_INSTALL_MAN_DIR@
-docdir=${prefix}/@OPENJPEG_INSTALL_DOC_DIR@
-libdir=${prefix}/@OPENJPEG_INSTALL_LIB_DIR@
-includedir=${prefix}/@OPENJPEG_INSTALL_INCLUDE_DIR@
-
-Name: openjpwl
-Description: JPEG2000 Wireless library (Part 11)
-URL: http://www.openjpeg.org/
-Version: @OPENJPEG_VERSION@
-Requires: libopenjp2
-Libs: -L${libdir} -lopenjpwl
-Libs.private: -lm
-Cflags: -I${includedir}
diff --git a/src/lib/openjpwl/rs.c b/src/lib/openjpwl/rs.c
deleted file mode 100644 (file)
index 793fd33..0000000
+++ /dev/null
@@ -1,625 +0,0 @@
-/*
-* The copyright in this software is being made available under the 2-clauses
-* BSD License, included below. This software may be subject to other third
-* party and contributor rights, including patent rights, and no such rights
-* are granted under this license.
-*
-* Copyright (c) 2001-2003, David Janssens
-* Copyright (c) 2002-2003, Yannick Verschueren
-* Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
-* Copyright (c) 2005, Herve Drolon, FreeImage Team
-* Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
-* Copyright (c) 2005-2006, Dept. of Electronic and Information Engineering, Universita' degli Studi di Perugia, Italy
-* All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions
-* are met:
-* 1. Redistributions of source code must retain the above copyright
-*    notice, this list of conditions and the following disclaimer.
-* 2. Redistributions in binary form must reproduce the above copyright
-*    notice, this list of conditions and the following disclaimer in the
-*    documentation and/or other materials provided with the distribution.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-* ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-* POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifdef USE_JPWL
-
-/**
-@file rs.c
-@brief Functions used to compute the Reed-Solomon parity and check of byte arrays
-
-*/
-
-/**
- * Reed-Solomon coding and decoding
- * Phil Karn (karn@ka9q.ampr.org) September 1996
- *
- * This file is derived from the program "new_rs_erasures.c" by Robert
- * Morelos-Zaragoza (robert@spectra.eng.hawaii.edu) and Hari Thirumoorthy
- * (harit@spectra.eng.hawaii.edu), Aug 1995
- *
- * I've made changes to improve performance, clean up the code and make it
- * easier to follow. Data is now passed to the encoding and decoding functions
- * through arguments rather than in global arrays. The decode function returns
- * the number of corrected symbols, or -1 if the word is uncorrectable.
- *
- * This code supports a symbol size from 2 bits up to 16 bits,
- * implying a block size of 3 2-bit symbols (6 bits) up to 65535
- * 16-bit symbols (1,048,560 bits). The code parameters are set in rs.h.
- *
- * Note that if symbols larger than 8 bits are used, the type of each
- * data array element switches from unsigned char to unsigned int. The
- * caller must ensure that elements larger than the symbol range are
- * not passed to the encoder or decoder.
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include "rs.h"
-
-/* This defines the type used to store an element of the Galois Field
- * used by the code. Make sure this is something larger than a char if
- * if anything larger than GF(256) is used.
- *
- * Note: unsigned char will work up to GF(256) but int seems to run
- * faster on the Pentium.
- */
-typedef int gf;
-
-/* KK = number of information symbols */
-static int  KK;
-
-/* Primitive polynomials - see Lin & Costello, Appendix A,
- * and  Lee & Messerschmitt, p. 453.
- */
-#if(MM == 2)/* Admittedly silly */
-int Pp[MM + 1] = { 1, 1, 1 };
-
-#elif(MM == 3)
-/* 1 + x + x^3 */
-int Pp[MM + 1] = { 1, 1, 0, 1 };
-
-#elif(MM == 4)
-/* 1 + x + x^4 */
-int Pp[MM + 1] = { 1, 1, 0, 0, 1 };
-
-#elif(MM == 5)
-/* 1 + x^2 + x^5 */
-int Pp[MM + 1] = { 1, 0, 1, 0, 0, 1 };
-
-#elif(MM == 6)
-/* 1 + x + x^6 */
-int Pp[MM + 1] = { 1, 1, 0, 0, 0, 0, 1 };
-
-#elif(MM == 7)
-/* 1 + x^3 + x^7 */
-int Pp[MM + 1] = { 1, 0, 0, 1, 0, 0, 0, 1 };
-
-#elif(MM == 8)
-/* 1+x^2+x^3+x^4+x^8 */
-int Pp[MM + 1] = { 1, 0, 1, 1, 1, 0, 0, 0, 1 };
-
-#elif(MM == 9)
-/* 1+x^4+x^9 */
-int Pp[MM + 1] = { 1, 0, 0, 0, 1, 0, 0, 0, 0, 1 };
-
-#elif(MM == 10)
-/* 1+x^3+x^10 */
-int Pp[MM + 1] = { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1 };
-
-#elif(MM == 11)
-/* 1+x^2+x^11 */
-int Pp[MM + 1] = { 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 };
-
-#elif(MM == 12)
-/* 1+x+x^4+x^6+x^12 */
-int Pp[MM + 1] = { 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1 };
-
-#elif(MM == 13)
-/* 1+x+x^3+x^4+x^13 */
-int Pp[MM + 1] = { 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 };
-
-#elif(MM == 14)
-/* 1+x+x^6+x^10+x^14 */
-int Pp[MM + 1] = { 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1 };
-
-#elif(MM == 15)
-/* 1+x+x^15 */
-int Pp[MM + 1] = { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 };
-
-#elif(MM == 16)
-/* 1+x+x^3+x^12+x^16 */
-int Pp[MM + 1] = { 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1 };
-
-#else
-#error "MM must be in range 2-16"
-#endif
-
-/* Alpha exponent for the first root of the generator polynomial */
-#define B0  0  /* Different from the default 1 */
-
-/* index->polynomial form conversion table */
-gf Alpha_to[NN + 1];
-
-/* Polynomial->index form conversion table */
-gf Index_of[NN + 1];
-
-/* No legal value in index form represents zero, so
- * we need a special value for this purpose
- */
-#define A0  (NN)
-
-/* Generator polynomial g(x)
- * Degree of g(x) = 2*TT
- * has roots @**B0, @**(B0+1), ... ,@^(B0+2*TT-1)
- */
-/*gf Gg[NN - KK + 1];*/
-gf      Gg[NN - 1];
-
-/* Compute x % NN, where NN is 2**MM - 1,
- * without a slow divide
- */
-static /*inline*/ gf
-modnn(int x)
-{
-    while (x >= NN) {
-        x -= NN;
-        x = (x >> MM) + (x & NN);
-    }
-    return x;
-}
-
-/*#define   min(a,b)    ((a) < (b) ? (a) : (b))*/
-
-#define CLEAR(a,n) {\
-    int ci;\
-    for(ci=(n)-1;ci >=0;ci--)\
-        (a)[ci] = 0;\
-    }
-
-#define COPY(a,b,n) {\
-    int ci;\
-    for(ci=(n)-1;ci >=0;ci--)\
-        (a)[ci] = (b)[ci];\
-    }
-#define COPYDOWN(a,b,n) {\
-    int ci;\
-    for(ci=(n)-1;ci >=0;ci--)\
-        (a)[ci] = (b)[ci];\
-    }
-
-void init_rs(int k)
-{
-    KK = k;
-    if (KK >= NN) {
-        printf("KK must be less than 2**MM - 1\n");
-        exit(1);
-    }
-
-    generate_gf();
-    gen_poly();
-}
-
-/* generate GF(2**m) from the irreducible polynomial p(X) in p[0]..p[m]
-   lookup tables:  index->polynomial form   alpha_to[] contains j=alpha**i;
-                   polynomial form -> index form  index_of[j=alpha**i] = i
-   alpha=2 is the primitive element of GF(2**m)
-   HARI's COMMENT: (4/13/94) alpha_to[] can be used as follows:
-        Let @ represent the primitive element commonly called "alpha" that
-   is the root of the primitive polynomial p(x). Then in GF(2^m), for any
-   0 <= i <= 2^m-2,
-        @^i = a(0) + a(1) @ + a(2) @^2 + ... + a(m-1) @^(m-1)
-   where the binary vector (a(0),a(1),a(2),...,a(m-1)) is the representation
-   of the integer "alpha_to[i]" with a(0) being the LSB and a(m-1) the MSB. Thus for
-   example the polynomial representation of @^5 would be given by the binary
-   representation of the integer "alpha_to[5]".
-                   Similarly, index_of[] can be used as follows:
-        As above, let @ represent the primitive element of GF(2^m) that is
-   the root of the primitive polynomial p(x). In order to find the power
-   of @ (alpha) that has the polynomial representation
-        a(0) + a(1) @ + a(2) @^2 + ... + a(m-1) @^(m-1)
-   we consider the integer "i" whose binary representation with a(0) being LSB
-   and a(m-1) MSB is (a(0),a(1),...,a(m-1)) and locate the entry
-   "index_of[i]". Now, @^index_of[i] is that element whose polynomial
-    representation is (a(0),a(1),a(2),...,a(m-1)).
-   NOTE:
-        The element alpha_to[2^m-1] = 0 always signifying that the
-   representation of "@^infinity" = 0 is (0,0,0,...,0).
-        Similarly, the element index_of[0] = A0 always signifying
-   that the power of alpha which has the polynomial representation
-   (0,0,...,0) is "infinity".
-
-*/
-
-void
-generate_gf(void)
-{
-    register int i, mask;
-
-    mask = 1;
-    Alpha_to[MM] = 0;
-    for (i = 0; i < MM; i++) {
-        Alpha_to[i] = mask;
-        Index_of[Alpha_to[i]] = i;
-        /* If Pp[i] == 1 then, term @^i occurs in poly-repr of @^MM */
-        if (Pp[i] != 0) {
-            Alpha_to[MM] ^= mask;    /* Bit-wise EXOR operation */
-        }
-        mask <<= 1; /* single left-shift */
-    }
-    Index_of[Alpha_to[MM]] = MM;
-    /*
-     * Have obtained poly-repr of @^MM. Poly-repr of @^(i+1) is given by
-     * poly-repr of @^i shifted left one-bit and accounting for any @^MM
-     * term that may occur when poly-repr of @^i is shifted.
-     */
-    mask >>= 1;
-    for (i = MM + 1; i < NN; i++) {
-        if (Alpha_to[i - 1] >= mask) {
-            Alpha_to[i] = Alpha_to[MM] ^ ((Alpha_to[i - 1] ^ mask) << 1);
-        } else {
-            Alpha_to[i] = Alpha_to[i - 1] << 1;
-        }
-        Index_of[Alpha_to[i]] = i;
-    }
-    Index_of[0] = A0;
-    Alpha_to[NN] = 0;
-}
-
-
-/*
- * Obtain the generator polynomial of the TT-error correcting, length
- * NN=(2**MM -1) Reed Solomon code from the product of (X+@**(B0+i)), i = 0,
- * ... ,(2*TT-1)
- *
- * Examples:
- *
- * If B0 = 1, TT = 1. deg(g(x)) = 2*TT = 2.
- * g(x) = (x+@) (x+@**2)
- *
- * If B0 = 0, TT = 2. deg(g(x)) = 2*TT = 4.
- * g(x) = (x+1) (x+@) (x+@**2) (x+@**3)
- */
-void
-gen_poly(void)
-{
-    register int i, j;
-
-    Gg[0] = Alpha_to[B0];
-    Gg[1] = 1;      /* g(x) = (X+@**B0) initially */
-    for (i = 2; i <= NN - KK; i++) {
-        Gg[i] = 1;
-        /*
-         * Below multiply (Gg[0]+Gg[1]*x + ... +Gg[i]x^i) by
-         * (@**(B0+i-1) + x)
-         */
-        for (j = i - 1; j > 0; j--)
-            if (Gg[j] != 0) {
-                Gg[j] = Gg[j - 1] ^ Alpha_to[modnn((Index_of[Gg[j]]) + B0 + i - 1)];
-            } else {
-                Gg[j] = Gg[j - 1];
-            }
-        /* Gg[0] can never be zero */
-        Gg[0] = Alpha_to[modnn((Index_of[Gg[0]]) + B0 + i - 1)];
-    }
-    /* convert Gg[] to index form for quicker encoding */
-    for (i = 0; i <= NN - KK; i++) {
-        Gg[i] = Index_of[Gg[i]];
-    }
-}
-
-
-/*
- * take the string of symbols in data[i], i=0..(k-1) and encode
- * systematically to produce NN-KK parity symbols in bb[0]..bb[NN-KK-1] data[]
- * is input and bb[] is output in polynomial form. Encoding is done by using
- * a feedback shift register with appropriate connections specified by the
- * elements of Gg[], which was generated above. Codeword is   c(X) =
- * data(X)*X**(NN-KK)+ b(X)
- */
-int
-encode_rs(dtype *data, dtype *bb)
-{
-    register int i, j;
-    gf feedback;
-
-    CLEAR(bb, NN - KK);
-    for (i = KK - 1; i >= 0; i--) {
-#if (MM != 8)
-        if (data[i] > NN) {
-            return -1;    /* Illegal symbol */
-        }
-#endif
-        feedback = Index_of[data[i] ^ bb[NN - KK - 1]];
-        if (feedback != A0) {   /* feedback term is non-zero */
-            for (j = NN - KK - 1; j > 0; j--)
-                if (Gg[j] != A0) {
-                    bb[j] = bb[j - 1] ^ Alpha_to[modnn(Gg[j] + feedback)];
-                } else {
-                    bb[j] = bb[j - 1];
-                }
-            bb[0] = Alpha_to[modnn(Gg[0] + feedback)];
-        } else {
-            /* feedback term is zero. encoder becomes a
-                     * single-byte shifter */
-            for (j = NN - KK - 1; j > 0; j--) {
-                bb[j] = bb[j - 1];
-            }
-            bb[0] = 0;
-        }
-    }
-    return 0;
-}
-
-/*
- * Performs ERRORS+ERASURES decoding of RS codes. If decoding is successful,
- * writes the codeword into data[] itself. Otherwise data[] is unaltered.
- *
- * Return number of symbols corrected, or -1 if codeword is illegal
- * or uncorrectable.
- *
- * First "no_eras" erasures are declared by the calling program. Then, the
- * maximum # of errors correctable is t_after_eras = floor((NN-KK-no_eras)/2).
- * If the number of channel errors is not greater than "t_after_eras" the
- * transmitted codeword will be recovered. Details of algorithm can be found
- * in R. Blahut's "Theory ... of Error-Correcting Codes".
- */
-int
-eras_dec_rs(dtype *data, int *eras_pos, int no_eras)
-{
-    int deg_lambda, el, deg_omega;
-    int i, j, r;
-    gf u, q, tmp, num1, num2, den, discr_r;
-    gf recd[NN];
-    /* Err+Eras Locator poly and syndrome poly */
-    /*gf lambda[NN-KK + 1], s[NN-KK + 1];
-    gf b[NN-KK + 1], t[NN-KK + 1], omega[NN-KK + 1];
-    gf root[NN-KK], reg[NN-KK + 1], loc[NN-KK];*/
-    gf lambda[NN + 1], s[NN + 1];
-    gf b[NN + 1], t[NN + 1], omega[NN + 1];
-    gf root[NN], reg[NN + 1], loc[NN];
-    int syn_error, count;
-
-    /* data[] is in polynomial form, copy and convert to index form */
-    for (i = NN - 1; i >= 0; i--) {
-#if (MM != 8)
-        if (data[i] > NN) {
-            return -1;    /* Illegal symbol */
-        }
-#endif
-        recd[i] = Index_of[data[i]];
-    }
-    /* first form the syndromes; i.e., evaluate recd(x) at roots of g(x)
-     * namely @**(B0+i), i = 0, ... ,(NN-KK-1)
-     */
-    syn_error = 0;
-    for (i = 1; i <= NN - KK; i++) {
-        tmp = 0;
-        for (j = 0; j < NN; j++)
-            if (recd[j] != A0) { /* recd[j] in index form */
-                tmp ^= Alpha_to[modnn(recd[j] + (B0 + i - 1) * j)];
-            }
-        syn_error |= tmp;   /* set flag if non-zero syndrome =>
-                     * error */
-        /* store syndrome in index form  */
-        s[i] = Index_of[tmp];
-    }
-    if (!syn_error) {
-        /*
-         * if syndrome is zero, data[] is a codeword and there are no
-         * errors to correct. So return data[] unmodified
-         */
-        return 0;
-    }
-    CLEAR(&lambda[1], NN - KK);
-    lambda[0] = 1;
-    if (no_eras > 0) {
-        /* Init lambda to be the erasure locator polynomial */
-        lambda[1] = Alpha_to[eras_pos[0]];
-        for (i = 1; i < no_eras; i++) {
-            u = eras_pos[i];
-            for (j = i + 1; j > 0; j--) {
-                tmp = Index_of[lambda[j - 1]];
-                if (tmp != A0) {
-                    lambda[j] ^= Alpha_to[modnn(u + tmp)];
-                }
-            }
-        }
-#ifdef ERASURE_DEBUG
-        /* find roots of the erasure location polynomial */
-        for (i = 1; i <= no_eras; i++) {
-            reg[i] = Index_of[lambda[i]];
-        }
-        count = 0;
-        for (i = 1; i <= NN; i++) {
-            q = 1;
-            for (j = 1; j <= no_eras; j++)
-                if (reg[j] != A0) {
-                    reg[j] = modnn(reg[j] + j);
-                    q ^= Alpha_to[reg[j]];
-                }
-            if (!q) {
-                /* store root and error location
-                 * number indices
-                 */
-                root[count] = i;
-                loc[count] = NN - i;
-                count++;
-            }
-        }
-        if (count != no_eras) {
-            printf("\n lambda(x) is WRONG\n");
-            return -1;
-        }
-#ifndef NO_PRINT
-        printf("\n Erasure positions as determined by roots of Eras Loc Poly:\n");
-        for (i = 0; i < count; i++) {
-            printf("%d ", loc[i]);
-        }
-        printf("\n");
-#endif
-#endif
-    }
-    for (i = 0; i < NN - KK + 1; i++) {
-        b[i] = Index_of[lambda[i]];
-    }
-
-    /*
-     * Begin Berlekamp-Massey algorithm to determine error+erasure
-     * locator polynomial
-     */
-    r = no_eras;
-    el = no_eras;
-    while (++r <= NN - KK) { /* r is the step number */
-        /* Compute discrepancy at the r-th step in poly-form */
-        discr_r = 0;
-        for (i = 0; i < r; i++) {
-            if ((lambda[i] != 0) && (s[r - i] != A0)) {
-                discr_r ^= Alpha_to[modnn(Index_of[lambda[i]] + s[r - i])];
-            }
-        }
-        discr_r = Index_of[discr_r];    /* Index form */
-        if (discr_r == A0) {
-            /* 2 lines below: B(x) <-- x*B(x) */
-            COPYDOWN(&b[1], b, NN - KK);
-            b[0] = A0;
-        } else {
-            /* 7 lines below: T(x) <-- lambda(x) - discr_r*x*b(x) */
-            t[0] = lambda[0];
-            for (i = 0 ; i < NN - KK; i++) {
-                if (b[i] != A0) {
-                    t[i + 1] = lambda[i + 1] ^ Alpha_to[modnn(discr_r + b[i])];
-                } else {
-                    t[i + 1] = lambda[i + 1];
-                }
-            }
-            if (2 * el <= r + no_eras - 1) {
-                el = r + no_eras - el;
-                /*
-                 * 2 lines below: B(x) <-- inv(discr_r) *
-                 * lambda(x)
-                 */
-                for (i = 0; i <= NN - KK; i++) {
-                    b[i] = (lambda[i] == 0) ? A0 : modnn(Index_of[lambda[i]] - discr_r + NN);
-                }
-            } else {
-                /* 2 lines below: B(x) <-- x*B(x) */
-                COPYDOWN(&b[1], b, NN - KK);
-                b[0] = A0;
-            }
-            COPY(lambda, t, NN - KK + 1);
-        }
-    }
-
-    /* Convert lambda to index form and compute deg(lambda(x)) */
-    deg_lambda = 0;
-    for (i = 0; i < NN - KK + 1; i++) {
-        lambda[i] = Index_of[lambda[i]];
-        if (lambda[i] != A0) {
-            deg_lambda = i;
-        }
-    }
-    /*
-     * Find roots of the error+erasure locator polynomial. By Chien
-     * Search
-     */
-    COPY(&reg[1], &lambda[1], NN - KK);
-    count = 0;      /* Number of roots of lambda(x) */
-    for (i = 1; i <= NN; i++) {
-        q = 1;
-        for (j = deg_lambda; j > 0; j--)
-            if (reg[j] != A0) {
-                reg[j] = modnn(reg[j] + j);
-                q ^= Alpha_to[reg[j]];
-            }
-        if (!q) {
-            /* store root (index-form) and error location number */
-            root[count] = i;
-            loc[count] = NN - i;
-            count++;
-        }
-    }
-
-#ifdef DEBUG
-    printf("\n Final error positions:\t");
-    for (i = 0; i < count; i++) {
-        printf("%d ", loc[i]);
-    }
-    printf("\n");
-#endif
-    if (deg_lambda != count) {
-        /*
-         * deg(lambda) unequal to number of roots => uncorrectable
-         * error detected
-         */
-        return -1;
-    }
-    /*
-     * Compute err+eras evaluator poly omega(x) = s(x)*lambda(x) (modulo
-     * x**(NN-KK)). in index form. Also find deg(omega).
-     */
-    deg_omega = 0;
-    for (i = 0; i < NN - KK; i++) {
-        tmp = 0;
-        j = (deg_lambda < i) ? deg_lambda : i;
-        for (; j >= 0; j--) {
-            if ((s[i + 1 - j] != A0) && (lambda[j] != A0)) {
-                tmp ^= Alpha_to[modnn(s[i + 1 - j] + lambda[j])];
-            }
-        }
-        if (tmp != 0) {
-            deg_omega = i;
-        }
-        omega[i] = Index_of[tmp];
-    }
-    omega[NN - KK] = A0;
-
-    /*
-     * Compute error values in poly-form. num1 = omega(inv(X(l))), num2 =
-     * inv(X(l))**(B0-1) and den = lambda_pr(inv(X(l))) all in poly-form
-     */
-    for (j = count - 1; j >= 0; j--) {
-        num1 = 0;
-        for (i = deg_omega; i >= 0; i--) {
-            if (omega[i] != A0) {
-                num1  ^= Alpha_to[modnn(omega[i] + i * root[j])];
-            }
-        }
-        num2 = Alpha_to[modnn(root[j] * (B0 - 1) + NN)];
-        den = 0;
-
-        /* lambda[i+1] for i even is the formal derivative lambda_pr of lambda[i] */
-        for (i = min(deg_lambda, NN - KK - 1) & ~1; i >= 0; i -= 2) {
-            if (lambda[i + 1] != A0) {
-                den ^= Alpha_to[modnn(lambda[i + 1] + i * root[j])];
-            }
-        }
-        if (den == 0) {
-#ifdef DEBUG
-            printf("\n ERROR: denominator = 0\n");
-#endif
-            return -1;
-        }
-        /* Apply error to data */
-        if (num1 != 0) {
-            data[loc[j]] ^= Alpha_to[modnn(Index_of[num1] + Index_of[num2] + NN -
-                                           Index_of[den])];
-        }
-    }
-    return count;
-}
-
-
-#endif /* USE_JPWL */
diff --git a/src/lib/openjpwl/rs.h b/src/lib/openjpwl/rs.h
deleted file mode 100644 (file)
index 009437c..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * Copyright (c) 2005-2006, Dept. of Electronic and Information Engineering, Universita' degli Studi di Perugia, Italy
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifdef USE_JPWL
-
-/**
-@file rs.h
-@brief Functions used to compute Reed-Solomon parity and check of byte arrays
-
-*/
-
-#ifndef __RS_HEADER__
-#define __RS_HEADER__
-
-/** Global definitions for Reed-Solomon encoder/decoder
- * Phil Karn KA9Q, September 1996
- *
- * The parameters MM and KK specify the Reed-Solomon code parameters.
- *
- * Set MM to be the size of each code symbol in bits. The Reed-Solomon
- * block size will then be NN = 2**M - 1 symbols. Supported values are
- * defined in rs.c.
- *
- * Set KK to be the number of data symbols in each block, which must be
- * less than the block size. The code will then be able to correct up
- * to NN-KK erasures or (NN-KK)/2 errors, or combinations thereof with
- * each error counting as two erasures.
- */
-#define MM  8       /* RS code over GF(2**MM) - change to suit */
-
-/* KK defined in rs.c */
-
-#define NN ((1 << MM) - 1)
-
-#if (MM <= 8)
-typedef unsigned char dtype;
-#else
-typedef unsigned int dtype;
-#endif
-
-/** Initialization function */
-void init_rs(int);
-
-/** These two functions *must* be called in this order (e.g.,
- * by init_rs()) before any encoding/decoding
- */
-void generate_gf(void); /* Generate Galois Field */
-void gen_poly(void);    /* Generate generator polynomial */
-
-/** Reed-Solomon encoding
- * data[] is the input block, parity symbols are placed in bb[]
- * bb[] may lie past the end of the data, e.g., for (255,223):
- *  encode_rs(&data[0],&data[223]);
- */
-int encode_rs(dtype data[], dtype bb[]);
-
-/** Reed-Solomon erasures-and-errors decoding
- * The received block goes into data[], and a list of zero-origin
- * erasure positions, if any, goes in eras_pos[] with a count in no_eras.
- *
- * The decoder corrects the symbols in place, if possible and returns
- * the number of corrected symbols. If the codeword is illegal or
- * uncorrectible, the data array is unchanged and -1 is returned
- */
-int eras_dec_rs(dtype data[], int eras_pos[], int no_eras);
-
-/**
-Computes the minimum between two integers
-@param a first integer to compare
-@param b second integer to compare
-@return returns the minimum integer between a and b
-*/
-#ifndef min
-#define min(a,b)    (((a) < (b)) ? (a) : (b))
-#endif /* min */
-
-#endif /* __RS_HEADER__ */
-
-
-#endif /* USE_JPWL */
diff --git a/src/lib/openmj2/CMakeLists.txt b/src/lib/openmj2/CMakeLists.txt
deleted file mode 100644 (file)
index 25294b2..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-# openmj2:
-set(OPENMJ2_LIBRARY_NAME openmj2)
-
-include_directories(
-  ${OPENJPEG_BINARY_DIR}/src/lib/openjp2 # opj_config.h
-  )
-
-set(OPENMJ2_SRCS
-  mj2.c
-  mj2_convert.c
-# FIXME: legacy
-  j2k_lib.c
-  cio.c
-  jp2.c
-  j2k.c
-  tcd.c
-  mct.c
-  t1.c
-  t2.c
-  pi.c
-  bio.c
-  mqc.c
-  tgt.c
-  dwt.c
-  event.c
-  image.c
-  jpt.c
-  raw.c
-  openjpeg.c
-)
-
-# Build the library
-if(WIN32)
-  if(BUILD_SHARED_LIBS)
-    add_definitions(-DOPJ_EXPORTS)
-  else()
-    add_definitions(-DOPJ_STATIC)
-  endif()
-endif()
-
-# build mj2 lib:
-add_library(${OPENMJ2_LIBRARY_NAME} ${OPENMJ2_SRCS})
-# FIXME: We are using an openjpeg 1.5 copy:
-#target_link_libraries(${OPENMJ2_LIBRARY_NAME} openjp2)
-if(UNIX)
-  target_link_libraries(${OPENMJ2_LIBRARY_NAME} m)
-endif()
-set_target_properties(${OPENMJ2_LIBRARY_NAME} PROPERTIES ${OPENJPEG_LIBRARY_PROPERTIES})
-if(NOT ${CMAKE_VERSION} VERSION_LESS "2.8.12")
-  target_compile_options(${OPENMJ2_LIBRARY_NAME} PRIVATE ${OPENJPEG_LIBRARY_COMPILE_OPTIONS})
-endif()
-
-# Install library
-install(TARGETS ${OPENMJ2_LIBRARY_NAME}
-  EXPORT OpenMJ2Targets
-  DESTINATION ${OPENJPEG_INSTALL_LIB_DIR}
-  COMPONENT Libraries
-)
-
-# Install includes files
-#install(FILES mj2.h
-#  DESTINATION ${OPENJPEG_INSTALL_INCLUDE_DIR}/${subdir}
-#  COMPONENT Headers
-#)
diff --git a/src/lib/openmj2/bio.c b/src/lib/openmj2/bio.c
deleted file mode 100644 (file)
index 91596d8..0000000
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "opj_includes.h"
-
-/** @defgroup BIO BIO - Individual bit input-output stream */
-/*@{*/
-
-/** @name Local static functions */
-/*@{*/
-
-/**
-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);
-/**
-Read a bit
-@param bio BIO handle
-@return Returns the read bit
-*/
-static int bio_getbit(opj_bio_t *bio);
-/**
-Write a byte
-@param bio BIO handle
-@return Returns 0 if successful, returns 1 otherwise
-*/
-static int bio_byteout(opj_bio_t *bio);
-/**
-Read a byte
-@param bio BIO handle
-@return Returns 0 if successful, returns 1 otherwise
-*/
-static int bio_bytein(opj_bio_t *bio);
-
-/*@}*/
-
-/*@}*/
-
-/*
-==========================================================
-   local functions
-==========================================================
-*/
-
-static int bio_byteout(opj_bio_t *bio)
-{
-    bio->buf = (bio->buf << 8) & 0xffff;
-    bio->ct = bio->buf == 0xff00 ? 7 : 8;
-    if (bio->bp >= bio->end) {
-        return 1;
-    }
-    *bio->bp++ = bio->buf >> 8;
-    return 0;
-}
-
-static int bio_bytein(opj_bio_t *bio)
-{
-    bio->buf = (bio->buf << 8) & 0xffff;
-    bio->ct = bio->buf == 0xff00 ? 7 : 8;
-    if (bio->bp >= bio->end) {
-        return 1;
-    }
-    bio->buf |= *bio->bp++;
-    return 0;
-}
-
-static void bio_putbit(opj_bio_t *bio, int b)
-{
-    if (bio->ct == 0) {
-        bio_byteout(bio);
-    }
-    bio->ct--;
-    bio->buf |= b << bio->ct;
-}
-
-static int bio_getbit(opj_bio_t *bio)
-{
-    if (bio->ct == 0) {
-        bio_bytein(bio);
-    }
-    bio->ct--;
-    return (bio->buf >> bio->ct) & 1;
-}
-
-/*
-==========================================================
-   Bit Input/Output interface
-==========================================================
-*/
-
-opj_bio_t* bio_create(void)
-{
-    opj_bio_t *bio = (opj_bio_t*)opj_malloc(sizeof(opj_bio_t));
-    return bio;
-}
-
-void bio_destroy(opj_bio_t *bio)
-{
-    if (bio) {
-        opj_free(bio);
-    }
-}
-
-int bio_numbytes(opj_bio_t *bio)
-{
-    return (bio->bp - bio->start);
-}
-
-void bio_init_enc(opj_bio_t *bio, unsigned char *bp, int len)
-{
-    bio->start = bp;
-    bio->end = bp + len;
-    bio->bp = bp;
-    bio->buf = 0;
-    bio->ct = 8;
-}
-
-void bio_init_dec(opj_bio_t *bio, unsigned char *bp, int len)
-{
-    bio->start = bp;
-    bio->end = bp + len;
-    bio->bp = bp;
-    bio->buf = 0;
-    bio->ct = 0;
-}
-
-void bio_write(opj_bio_t *bio, int v, int n)
-{
-    int i;
-    for (i = n - 1; i >= 0; i--) {
-        bio_putbit(bio, (v >> i) & 1);
-    }
-}
-
-int bio_read(opj_bio_t *bio, int n)
-{
-    int i, v;
-    v = 0;
-    for (i = n - 1; i >= 0; i--) {
-        v += bio_getbit(bio) << i;
-    }
-    return v;
-}
-
-int bio_flush(opj_bio_t *bio)
-{
-    bio->ct = 0;
-    if (bio_byteout(bio)) {
-        return 1;
-    }
-    if (bio->ct == 7) {
-        bio->ct = 0;
-        if (bio_byteout(bio)) {
-            return 1;
-        }
-    }
-    return 0;
-}
-
-int bio_inalign(opj_bio_t *bio)
-{
-    bio->ct = 0;
-    if ((bio->buf & 0xff) == 0xff) {
-        if (bio_bytein(bio)) {
-            return 1;
-        }
-        bio->ct = 0;
-    }
-    return 0;
-}
diff --git a/src/lib/openmj2/bio.h b/src/lib/openmj2/bio.h
deleted file mode 100644 (file)
index 48de33b..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __BIO_H
-#define __BIO_H
-/**
-@file bio.h
-@brief Implementation of an individual bit input-output (BIO)
-
-The functions in BIO.C have for goal to realize an individual bit input - output.
-*/
-
-/** @defgroup BIO BIO - Individual bit input-output stream */
-/*@{*/
-
-/**
-Individual bit input-output stream (BIO)
-*/
-typedef struct opj_bio {
-    /** pointer to the start of the buffer */
-    unsigned char *start;
-    /** pointer to the end of the buffer */
-    unsigned char *end;
-    /** pointer to the present position in the buffer */
-    unsigned char *bp;
-    /** temporary place where each byte is read or written */
-    unsigned int buf;
-    /** coder : number of bits free to write. decoder : number of bits read */
-    int ct;
-} opj_bio_t;
-
-/** @name Exported functions */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-/**
-Create a new BIO handle
-@return Returns a new BIO handle if successful, returns NULL otherwise
-*/
-opj_bio_t* bio_create(void);
-/**
-Destroy a previously created BIO handle
-@param bio BIO handle to destroy
-*/
-void bio_destroy(opj_bio_t *bio);
-/**
-Number of bytes written.
-@param bio BIO handle
-@return Returns the number of bytes written
-*/
-int bio_numbytes(opj_bio_t *bio);
-/**
-Init encoder
-@param bio BIO handle
-@param bp Output buffer
-@param len Output buffer length
-*/
-void bio_init_enc(opj_bio_t *bio, unsigned char *bp, int len);
-/**
-Init decoder
-@param bio BIO handle
-@param bp Input buffer
-@param len Input buffer length
-*/
-void bio_init_dec(opj_bio_t *bio, unsigned char *bp, int len);
-/**
-Write bits
-@param bio BIO handle
-@param v Value of bits
-@param n Number of bits to write
-*/
-void bio_write(opj_bio_t *bio, int v, int n);
-/**
-Read bits
-@param bio BIO handle
-@param n Number of bits to read
-@return Returns the corresponding read number
-*/
-int bio_read(opj_bio_t *bio, int n);
-/**
-Flush bits
-@param bio BIO handle
-@return Returns 1 if successful, returns 0 otherwise
-*/
-int bio_flush(opj_bio_t *bio);
-/**
-Passes the ending bits (coming from flushing)
-@param bio BIO handle
-@return Returns 1 if successful, returns 0 otherwise
-*/
-int bio_inalign(opj_bio_t *bio);
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif /* __BIO_H */
-
diff --git a/src/lib/openmj2/cio.c b/src/lib/openmj2/cio.c
deleted file mode 100644 (file)
index 433d3aa..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "opj_includes.h"
-
-/* ----------------------------------------------------------------------- */
-
-opj_cio_t* OPJ_CALLCONV opj_cio_open(opj_common_ptr cinfo,
-                                     unsigned char *buffer, int length)
-{
-    opj_cp_t *cp = NULL;
-    opj_cio_t *cio = (opj_cio_t*)opj_malloc(sizeof(opj_cio_t));
-    if (!cio) {
-        return NULL;
-    }
-    cio->cinfo = cinfo;
-    if (buffer && length) {
-        /* wrap a user buffer containing the encoded image */
-        cio->openmode = OPJ_STREAM_READ;
-        cio->buffer = buffer;
-        cio->length = length;
-    } else if (!buffer && !length && cinfo) {
-        /* allocate a buffer for the encoded image */
-        cio->openmode = OPJ_STREAM_WRITE;
-        switch (cinfo->codec_format) {
-        case CODEC_J2K:
-            cp = ((opj_j2k_t*)cinfo->j2k_handle)->cp;
-            break;
-        case CODEC_JP2:
-            cp = ((opj_jp2_t*)cinfo->jp2_handle)->j2k->cp;
-            break;
-        default:
-            opj_free(cio);
-            return NULL;
-        }
-        cio->length = (unsigned int)(0.1625 * cp->img_size +
-                                     2000);  /* 0.1625 = 1.3/8 and 2000 bytes as a minimum for headers */
-        cio->buffer = (unsigned char *)opj_malloc(cio->length);
-        if (!cio->buffer) {
-            opj_event_msg(cio->cinfo, EVT_ERROR,
-                          "Error allocating memory for compressed bitstream\n");
-            opj_free(cio);
-            return NULL;
-        }
-    } else {
-        opj_free(cio);
-        return NULL;
-    }
-
-    /* Initialize byte IO */
-    cio->start = cio->buffer;
-    cio->end = cio->buffer + cio->length;
-    cio->bp = cio->buffer;
-
-    return cio;
-}
-
-void OPJ_CALLCONV opj_cio_close(opj_cio_t *cio)
-{
-    if (cio) {
-        if (cio->openmode == OPJ_STREAM_WRITE) {
-            /* destroy the allocated buffer */
-            opj_free(cio->buffer);
-        }
-        /* destroy the cio */
-        opj_free(cio);
-    }
-}
-
-
-/* ----------------------------------------------------------------------- */
-
-/*
- * Get position in byte stream.
- */
-int OPJ_CALLCONV cio_tell(opj_cio_t *cio)
-{
-    return cio->bp - cio->start;
-}
-
-/*
- * Set position in byte stream.
- *
- * pos : position, in number of bytes, from the beginning of the stream
- */
-void OPJ_CALLCONV cio_seek(opj_cio_t *cio, int pos)
-{
-    cio->bp = cio->start + pos;
-}
-
-/*
- * Number of bytes left before the end of the stream.
- */
-int cio_numbytesleft(opj_cio_t *cio)
-{
-    return cio->end - cio->bp;
-}
-
-/*
- * Get pointer to the current position in the stream.
- */
-unsigned char *cio_getbp(opj_cio_t *cio)
-{
-    return cio->bp;
-}
-
-/*
- * Write a byte.
- */
-opj_bool cio_byteout(opj_cio_t *cio, unsigned char v)
-{
-    if (cio->bp >= cio->end) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "write error\n");
-        return OPJ_FALSE;
-    }
-    *cio->bp++ = v;
-    return OPJ_TRUE;
-}
-
-/*
- * Read a byte.
- */
-unsigned char cio_bytein(opj_cio_t *cio)
-{
-    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;
-    }
-    return *cio->bp++;
-}
-
-/*
- * Write some bytes.
- *
- * v : value to write
- * n : number of bytes to write
- */
-unsigned int OPJ_CALLCONV cio_write(opj_cio_t *cio, unsigned int64 v, int n)
-{
-    int i;
-    for (i = n - 1; i >= 0; i--) {
-        if (!cio_byteout(cio, (unsigned char)((v >> (i << 3)) & 0xff))) {
-            return 0;
-        }
-    }
-    return n;
-}
-
-/*
- * Read some bytes.
- *
- * n : number of bytes to read
- *
- * return : value of the n bytes read
- */
-unsigned int OPJ_CALLCONV cio_read(opj_cio_t *cio, int n)
-{
-    int i;
-    unsigned int v;
-    v = 0;
-    for (i = n - 1; i >= 0; i--) {
-        v += cio_bytein(cio) << (i << 3);
-    }
-    return v;
-}
-
-/*
- * Skip some bytes.
- *
- * n : number of bytes to skip
- */
-void OPJ_CALLCONV cio_skip(opj_cio_t *cio, int n)
-{
-    cio->bp += n;
-}
-
-
-
diff --git a/src/lib/openmj2/cio.h b/src/lib/openmj2/cio.h
deleted file mode 100644 (file)
index fd0e716..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __CIO_H
-#define __CIO_H
-
-#if defined(_MSC_VER) || defined(__BORLANDC__)
-#define int64 __int64
-#else
-#define int64 long long
-#endif
-
-/**
-@file cio.h
-@brief Implementation of a byte input-output process (CIO)
-
-The functions in CIO.C have for goal to realize a byte input / output process.
-*/
-
-/** @defgroup CIO CIO - byte input-output stream */
-/*@{*/
-
-/** @name Exported functions (see also openjpeg.h) */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-/**
-Number of bytes left before the end of the stream
-@param cio CIO handle
-@return Returns the number of bytes before the end of the stream
-*/
-int cio_numbytesleft(opj_cio_t *cio);
-/**
-Get pointer to the current position in the stream
-@param cio CIO handle
-@return Returns a pointer to the current position
-*/
-unsigned char *cio_getbp(opj_cio_t *cio);
-/**
-Write some bytes
-@param cio CIO handle
-@param v Value to write
-@param n Number of bytes to write
-@return Returns the number of bytes written or 0 if an error occurred
-*/
-OPJ_API unsigned int OPJ_CALLCONV cio_write(opj_cio_t *cio, unsigned int64 v,
-        int n);
-/**
-Read some bytes
-@param cio CIO handle
-@param n Number of bytes to read
-@return Returns the value of the n bytes read
-*/
-OPJ_API unsigned int OPJ_CALLCONV cio_read(opj_cio_t *cio, int n);
-/**
-Skip some bytes
-@param cio CIO handle
-@param n Number of bytes to skip
-*/
-OPJ_API void OPJ_CALLCONV cio_skip(opj_cio_t *cio, int n);
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif /* __CIO_H */
-
diff --git a/src/lib/openmj2/dwt.c b/src/lib/openmj2/dwt.c
deleted file mode 100644 (file)
index 8c7ed13..0000000
+++ /dev/null
@@ -1,965 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2007, Jonathan Ballard <dzonatas@dzonux.net>
- * Copyright (c) 2007, Callum Lerwick <seg@haxxed.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifdef __SSE__
-#include <xmmintrin.h>
-#endif
-
-#include "opj_includes.h"
-
-/** @defgroup DWT DWT - Implementation of a discrete wavelet transform */
-/*@{*/
-
-#define WS(i) v->mem[(i)*2]
-#define WD(i) v->mem[(1+(i)*2)]
-
-/** @name Local data structures */
-/*@{*/
-
-typedef struct dwt_local {
-    int* mem;
-    int dn;
-    int sn;
-    int cas;
-} dwt_t;
-
-typedef union {
-    float   f[4];
-} v4;
-
-typedef struct v4dwt_local {
-    v4* wavelet ;
-    int     dn ;
-    int     sn ;
-    int     cas ;
-} v4dwt_t ;
-
-static const float dwt_alpha =  1.586134342f; /*  12994 */
-static const float dwt_beta  =  0.052980118f; /*    434 */
-static const float dwt_gamma = -0.882911075f; /*  -7233 */
-static const float dwt_delta = -0.443506852f; /*  -3633 */
-
-static const float K      = 1.230174105f; /*  10078 */
-/* FIXME: What is this constant? */
-static const float c13318 = 1.625732422f;
-
-/*@}*/
-
-/**
-Virtual function type for wavelet transform in 1-D
-*/
-typedef void (*DWT1DFN)(dwt_t* v);
-
-/** @name Local static functions */
-/*@{*/
-
-/**
-Forward lazy transform (horizontal)
-*/
-static void dwt_deinterleave_h(int *a, int *b, int dn, int sn, int cas);
-/**
-Forward lazy transform (vertical)
-*/
-static void dwt_deinterleave_v(int *a, int *b, int dn, int sn, int x, int cas);
-/**
-Inverse lazy transform (horizontal)
-*/
-static void dwt_interleave_h(dwt_t* h, int *a);
-/**
-Inverse lazy transform (vertical)
-*/
-static void dwt_interleave_v(dwt_t* v, int *a, int x);
-/**
-Forward 5-3 wavelet transform in 1-D
-*/
-static void dwt_encode_1(int *a, int dn, int sn, int cas);
-/**
-Inverse 5-3 wavelet transform in 1-D
-*/
-static void dwt_decode_1(dwt_t *v);
-/**
-Forward 9-7 wavelet transform in 1-D
-*/
-static void dwt_encode_1_real(int *a, int dn, int sn, int cas);
-/**
-Explicit calculation of the Quantization Stepsizes
-*/
-static void dwt_encode_stepsize(int stepsize, int numbps,
-                                opj_stepsize_t *bandno_stepsize);
-/**
-Inverse wavelet transform in 2-D.
-*/
-static void dwt_decode_tile(opj_tcd_tilecomp_t* tilec, int i, DWT1DFN fn);
-
-/*@}*/
-
-/*@}*/
-
-#define S(i) a[(i)*2]
-#define D(i) a[(1+(i)*2)]
-#define S_(i) ((i)<0?S(0):((i)>=sn?S(sn-1):S(i)))
-#define D_(i) ((i)<0?D(0):((i)>=dn?D(dn-1):D(i)))
-/* new */
-#define SS_(i) ((i)<0?S(0):((i)>=dn?S(dn-1):S(i)))
-#define DD_(i) ((i)<0?D(0):((i)>=sn?D(sn-1):D(i)))
-
-/* <summary>                                                              */
-/* This table contains the norms of the 5-3 wavelets for different bands. */
-/* </summary>                                                             */
-static const double dwt_norms[4][10] = {
-    {1.000, 1.500, 2.750, 5.375, 10.68, 21.34, 42.67, 85.33, 170.7, 341.3},
-    {1.038, 1.592, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
-    {1.038, 1.592, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
-    {.7186, .9218, 1.586, 3.043, 6.019, 12.01, 24.00, 47.97, 95.93}
-};
-
-/* <summary>                                                              */
-/* This table contains the norms of the 9-7 wavelets for different bands. */
-/* </summary>                                                             */
-static const double dwt_norms_real[4][10] = {
-    {1.000, 1.965, 4.177, 8.403, 16.90, 33.84, 67.69, 135.3, 270.6, 540.9},
-    {2.022, 3.989, 8.355, 17.04, 34.27, 68.63, 137.3, 274.6, 549.0},
-    {2.022, 3.989, 8.355, 17.04, 34.27, 68.63, 137.3, 274.6, 549.0},
-    {2.080, 3.865, 8.307, 17.18, 34.71, 69.59, 139.3, 278.6, 557.2}
-};
-
-/*
-==========================================================
-   local functions
-==========================================================
-*/
-
-/* <summary>                             */
-/* Forward lazy transform (horizontal).  */
-/* </summary>                            */
-static void dwt_deinterleave_h(int *a, int *b, int dn, int sn, int cas)
-{
-    int i;
-    for (i = 0; i < sn; i++) {
-        b[i] = a[2 * i + cas];
-    }
-    for (i = 0; i < dn; i++) {
-        b[sn + i] = a[(2 * i + 1 - cas)];
-    }
-}
-
-/* <summary>                             */
-/* Forward lazy transform (vertical).    */
-/* </summary>                            */
-static void dwt_deinterleave_v(int *a, int *b, int dn, int sn, int x, int cas)
-{
-    int i;
-    for (i = 0; i < sn; i++) {
-        b[i * x] = a[2 * i + cas];
-    }
-    for (i = 0; i < dn; i++) {
-        b[(sn + i)*x] = a[(2 * i + 1 - cas)];
-    }
-}
-
-/* <summary>                             */
-/* Inverse lazy transform (horizontal).  */
-/* </summary>                            */
-static void dwt_interleave_h(dwt_t* h, int *a)
-{
-    int *ai = a;
-    int *bi = h->mem + h->cas;
-    int  i  = h->sn;
-    while (i--) {
-        *bi = *(ai++);
-        bi += 2;
-    }
-    ai  = a + h->sn;
-    bi  = h->mem + 1 - h->cas;
-    i   = h->dn ;
-    while (i--) {
-        *bi = *(ai++);
-        bi += 2;
-    }
-}
-
-/* <summary>                             */
-/* Inverse lazy transform (vertical).    */
-/* </summary>                            */
-static void dwt_interleave_v(dwt_t* v, int *a, int x)
-{
-    int *ai = a;
-    int *bi = v->mem + v->cas;
-    int  i = v->sn;
-    while (i--) {
-        *bi = *ai;
-        bi += 2;
-        ai += x;
-    }
-    ai = a + (v->sn * x);
-    bi = v->mem + 1 - v->cas;
-    i = v->dn ;
-    while (i--) {
-        *bi = *ai;
-        bi += 2;
-        ai += x;
-    }
-}
-
-
-/* <summary>                            */
-/* Forward 5-3 wavelet transform in 1-D. */
-/* </summary>                           */
-static void dwt_encode_1(int *a, int dn, int sn, int cas)
-{
-    int i;
-
-    if (!cas) {
-        if ((dn > 0) || (sn > 1)) { /* NEW :  CASE ONE ELEMENT */
-            for (i = 0; i < dn; i++) {
-                D(i) -= (S_(i) + S_(i + 1)) >> 1;
-            }
-            for (i = 0; i < sn; i++) {
-                S(i) += (D_(i - 1) + D_(i) + 2) >> 2;
-            }
-        }
-    } else {
-        if (!sn && dn == 1) {       /* NEW :  CASE ONE ELEMENT */
-            S(0) *= 2;
-        } else {
-            for (i = 0; i < dn; i++) {
-                S(i) -= (DD_(i) + DD_(i - 1)) >> 1;
-            }
-            for (i = 0; i < sn; i++) {
-                D(i) += (SS_(i) + SS_(i + 1) + 2) >> 2;
-            }
-        }
-    }
-}
-
-/* <summary>                            */
-/* Inverse 5-3 wavelet transform in 1-D. */
-/* </summary>                           */
-static void dwt_decode_1_(int *a, int dn, int sn, int cas)
-{
-    int i;
-
-    if (!cas) {
-        if ((dn > 0) || (sn > 1)) { /* NEW :  CASE ONE ELEMENT */
-            for (i = 0; i < sn; i++) {
-                S(i) -= (D_(i - 1) + D_(i) + 2) >> 2;
-            }
-            for (i = 0; i < dn; i++) {
-                D(i) += (S_(i) + S_(i + 1)) >> 1;
-            }
-        }
-    } else {
-        if (!sn  && dn == 1) {        /* NEW :  CASE ONE ELEMENT */
-            S(0) /= 2;
-        } else {
-            for (i = 0; i < sn; i++) {
-                D(i) -= (SS_(i) + SS_(i + 1) + 2) >> 2;
-            }
-            for (i = 0; i < dn; i++) {
-                S(i) += (DD_(i) + DD_(i - 1)) >> 1;
-            }
-        }
-    }
-}
-
-/* <summary>                            */
-/* Inverse 5-3 wavelet transform in 1-D. */
-/* </summary>                           */
-static void dwt_decode_1(dwt_t *v)
-{
-    dwt_decode_1_(v->mem, v->dn, v->sn, v->cas);
-}
-
-/* <summary>                             */
-/* Forward 9-7 wavelet transform in 1-D. */
-/* </summary>                            */
-static void dwt_encode_1_real(int *a, int dn, int sn, int cas)
-{
-    int i;
-    if (!cas) {
-        if ((dn > 0) || (sn > 1)) { /* NEW :  CASE ONE ELEMENT */
-            for (i = 0; i < dn; i++) {
-                D(i) -= fix_mul(S_(i) + S_(i + 1), 12993);
-            }
-            for (i = 0; i < sn; i++) {
-                S(i) -= fix_mul(D_(i - 1) + D_(i), 434);
-            }
-            for (i = 0; i < dn; i++) {
-                D(i) += fix_mul(S_(i) + S_(i + 1), 7233);
-            }
-            for (i = 0; i < sn; i++) {
-                S(i) += fix_mul(D_(i - 1) + D_(i), 3633);
-            }
-            for (i = 0; i < dn; i++) {
-                D(i) = fix_mul(D(i), 5038);    /*5038 */
-            }
-            for (i = 0; i < sn; i++) {
-                S(i) = fix_mul(S(i), 6659);    /*6660 */
-            }
-        }
-    } else {
-        if ((sn > 0) || (dn > 1)) { /* NEW :  CASE ONE ELEMENT */
-            for (i = 0; i < dn; i++) {
-                S(i) -= fix_mul(DD_(i) + DD_(i - 1), 12993);
-            }
-            for (i = 0; i < sn; i++) {
-                D(i) -= fix_mul(SS_(i) + SS_(i + 1), 434);
-            }
-            for (i = 0; i < dn; i++) {
-                S(i) += fix_mul(DD_(i) + DD_(i - 1), 7233);
-            }
-            for (i = 0; i < sn; i++) {
-                D(i) += fix_mul(SS_(i) + SS_(i + 1), 3633);
-            }
-            for (i = 0; i < dn; i++) {
-                S(i) = fix_mul(S(i), 5038);    /*5038 */
-            }
-            for (i = 0; i < sn; i++) {
-                D(i) = fix_mul(D(i), 6659);    /*6660 */
-            }
-        }
-    }
-}
-
-static void dwt_encode_stepsize(int stepsize, int numbps,
-                                opj_stepsize_t *bandno_stepsize)
-{
-    int p, n;
-    p = int_floorlog2(stepsize) - 13;
-    n = 11 - int_floorlog2(stepsize);
-    bandno_stepsize->mant = (n < 0 ? stepsize >> -n : stepsize << n) & 0x7ff;
-    bandno_stepsize->expn = numbps - p;
-}
-
-/*
-==========================================================
-   DWT interface
-==========================================================
-*/
-
-/* <summary>                            */
-/* Forward 5-3 wavelet transform in 2-D. */
-/* </summary>                           */
-void dwt_encode(opj_tcd_tilecomp_t * tilec)
-{
-    int i, j, k;
-    int *a = NULL;
-    int *aj = NULL;
-    int *bj = NULL;
-    int w, l;
-
-    w = tilec->x1 - tilec->x0;
-    l = tilec->numresolutions - 1;
-    a = tilec->data;
-
-    for (i = 0; i < l; i++) {
-        int rw;         /* width of the resolution level computed                                                           */
-        int rh;         /* height of the resolution level computed                                                          */
-        int rw1;        /* width of the resolution level once lower than computed one                                       */
-        int rh1;        /* height of the resolution level once lower than computed one                                      */
-        int cas_col;    /* 0 = non inversion on horizontal filtering 1 = inversion between low-pass and high-pass filtering */
-        int cas_row;    /* 0 = non inversion on vertical filtering 1 = inversion between low-pass and high-pass filtering   */
-        int dn, sn;
-
-        rw = tilec->resolutions[l - i].x1 - tilec->resolutions[l - i].x0;
-        rh = tilec->resolutions[l - i].y1 - tilec->resolutions[l - i].y0;
-        rw1 = tilec->resolutions[l - i - 1].x1 - tilec->resolutions[l - i - 1].x0;
-        rh1 = tilec->resolutions[l - i - 1].y1 - tilec->resolutions[l - i - 1].y0;
-
-        cas_row = tilec->resolutions[l - i].x0 % 2;
-        cas_col = tilec->resolutions[l - i].y0 % 2;
-
-        sn = rh1;
-        dn = rh - rh1;
-        bj = (int*)opj_malloc(rh * sizeof(int));
-        for (j = 0; j < rw; j++) {
-            aj = a + j;
-            for (k = 0; k < rh; k++) {
-                bj[k] = aj[k * w];
-            }
-            dwt_encode_1(bj, dn, sn, cas_col);
-            dwt_deinterleave_v(bj, aj, dn, sn, w, cas_col);
-        }
-        opj_free(bj);
-
-        sn = rw1;
-        dn = rw - rw1;
-        bj = (int*)opj_malloc(rw * sizeof(int));
-        for (j = 0; j < rh; j++) {
-            aj = a + j * w;
-            for (k = 0; k < rw; k++) {
-                bj[k] = aj[k];
-            }
-            dwt_encode_1(bj, dn, sn, cas_row);
-            dwt_deinterleave_h(bj, aj, dn, sn, cas_row);
-        }
-        opj_free(bj);
-    }
-}
-
-
-/* <summary>                            */
-/* Inverse 5-3 wavelet transform in 2-D. */
-/* </summary>                           */
-void dwt_decode(opj_tcd_tilecomp_t* tilec, int numres)
-{
-    dwt_decode_tile(tilec, numres, &dwt_decode_1);
-}
-
-
-/* <summary>                          */
-/* Get gain of 5-3 wavelet transform. */
-/* </summary>                         */
-int dwt_getgain(int orient)
-{
-    if (orient == 0) {
-        return 0;
-    }
-    if (orient == 1 || orient == 2) {
-        return 1;
-    }
-    return 2;
-}
-
-/* <summary>                */
-/* Get norm of 5-3 wavelet. */
-/* </summary>               */
-double dwt_getnorm(int level, int orient)
-{
-    return dwt_norms[orient][level];
-}
-
-/* <summary>                             */
-/* Forward 9-7 wavelet transform in 2-D. */
-/* </summary>                            */
-
-void dwt_encode_real(opj_tcd_tilecomp_t * tilec)
-{
-    int i, j, k;
-    int *a = NULL;
-    int *aj = NULL;
-    int *bj = NULL;
-    int w, l;
-
-    w = tilec->x1 - tilec->x0;
-    l = tilec->numresolutions - 1;
-    a = tilec->data;
-
-    for (i = 0; i < l; i++) {
-        int rw;         /* width of the resolution level computed                                                     */
-        int rh;         /* height of the resolution level computed                                                    */
-        int rw1;        /* width of the resolution level once lower than computed one                                 */
-        int rh1;        /* height of the resolution level once lower than computed one                                */
-        int cas_col;    /* 0 = non inversion on horizontal filtering 1 = inversion between low-pass and high-pass filtering */
-        int cas_row;    /* 0 = non inversion on vertical filtering 1 = inversion between low-pass and high-pass filtering   */
-        int dn, sn;
-
-        rw = tilec->resolutions[l - i].x1 - tilec->resolutions[l - i].x0;
-        rh = tilec->resolutions[l - i].y1 - tilec->resolutions[l - i].y0;
-        rw1 = tilec->resolutions[l - i - 1].x1 - tilec->resolutions[l - i - 1].x0;
-        rh1 = tilec->resolutions[l - i - 1].y1 - tilec->resolutions[l - i - 1].y0;
-
-        cas_row = tilec->resolutions[l - i].x0 % 2;
-        cas_col = tilec->resolutions[l - i].y0 % 2;
-
-        sn = rh1;
-        dn = rh - rh1;
-        bj = (int*)opj_malloc(rh * sizeof(int));
-        for (j = 0; j < rw; j++) {
-            aj = a + j;
-            for (k = 0; k < rh; k++) {
-                bj[k] = aj[k * w];
-            }
-            dwt_encode_1_real(bj, dn, sn, cas_col);
-            dwt_deinterleave_v(bj, aj, dn, sn, w, cas_col);
-        }
-        opj_free(bj);
-
-        sn = rw1;
-        dn = rw - rw1;
-        bj = (int*)opj_malloc(rw * sizeof(int));
-        for (j = 0; j < rh; j++) {
-            aj = a + j * w;
-            for (k = 0; k < rw; k++) {
-                bj[k] = aj[k];
-            }
-            dwt_encode_1_real(bj, dn, sn, cas_row);
-            dwt_deinterleave_h(bj, aj, dn, sn, cas_row);
-        }
-        opj_free(bj);
-    }
-}
-
-
-/* <summary>                          */
-/* Get gain of 9-7 wavelet transform. */
-/* </summary>                         */
-int dwt_getgain_real(int orient)
-{
-    (void)orient;
-    return 0;
-}
-
-/* <summary>                */
-/* Get norm of 9-7 wavelet. */
-/* </summary>               */
-double dwt_getnorm_real(int level, int orient)
-{
-    return dwt_norms_real[orient][level];
-}
-
-void dwt_calc_explicit_stepsizes(opj_tccp_t * tccp, int prec)
-{
-    int numbands, bandno;
-    numbands = 3 * tccp->numresolutions - 2;
-    for (bandno = 0; bandno < numbands; bandno++) {
-        double stepsize;
-        int resno, level, orient, gain;
-
-        resno = (bandno == 0) ? 0 : ((bandno - 1) / 3 + 1);
-        orient = (bandno == 0) ? 0 : ((bandno - 1) % 3 + 1);
-        level = tccp->numresolutions - 1 - resno;
-        gain = (tccp->qmfbid == 0) ? 0 : ((orient == 0) ? 0 : (((orient == 1) ||
-                                          (orient == 2)) ? 1 : 2));
-        if (tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) {
-            stepsize = 1.0;
-        } else {
-            double norm = dwt_norms_real[orient][level];
-            stepsize = (1 << (gain)) / norm;
-        }
-        dwt_encode_stepsize((int) floor(stepsize * 8192.0), prec + gain,
-                            &tccp->stepsizes[bandno]);
-    }
-}
-
-
-/* <summary>                             */
-/* Determine maximum computed resolution level for inverse wavelet transform */
-/* </summary>                            */
-static int dwt_decode_max_resolution(opj_tcd_resolution_t* restrict r, int i)
-{
-    int mr  = 1;
-    int w;
-    while (--i) {
-        r++;
-        if (mr < (w = r->x1 - r->x0)) {
-            mr = w ;
-        }
-        if (mr < (w = r->y1 - r->y0)) {
-            mr = w ;
-        }
-    }
-    return mr ;
-}
-
-
-/* <summary>                            */
-/* Inverse wavelet transform in 2-D.     */
-/* </summary>                           */
-static void dwt_decode_tile(opj_tcd_tilecomp_t* tilec, int numres,
-                            DWT1DFN dwt_1D)
-{
-    dwt_t h;
-    dwt_t v;
-
-    opj_tcd_resolution_t* tr = tilec->resolutions;
-
-    int rw = tr->x1 - tr->x0;   /* width of the resolution level computed */
-    int rh = tr->y1 - tr->y0;   /* height of the resolution level computed */
-
-    int w = tilec->x1 - tilec->x0;
-
-    h.mem = (int*)opj_aligned_malloc(dwt_decode_max_resolution(tr,
-                                     numres) * sizeof(int));
-    v.mem = h.mem;
-
-    while (--numres) {
-        int * restrict tiledp = tilec->data;
-        int j;
-
-        ++tr;
-        h.sn = rw;
-        v.sn = rh;
-
-        rw = tr->x1 - tr->x0;
-        rh = tr->y1 - tr->y0;
-
-        h.dn = rw - h.sn;
-        h.cas = tr->x0 % 2;
-
-        for (j = 0; j < rh; ++j) {
-            dwt_interleave_h(&h, &tiledp[j * w]);
-            (dwt_1D)(&h);
-            memcpy(&tiledp[j * w], h.mem, rw * sizeof(int));
-        }
-
-        v.dn = rh - v.sn;
-        v.cas = tr->y0 % 2;
-
-        for (j = 0; j < rw; ++j) {
-            int k;
-            dwt_interleave_v(&v, &tiledp[j], w);
-            (dwt_1D)(&v);
-            for (k = 0; k < rh; ++k) {
-                tiledp[k * w + j] = v.mem[k];
-            }
-        }
-    }
-    opj_aligned_free(h.mem);
-}
-
-static void v4dwt_interleave_h(v4dwt_t* restrict w, float* restrict a, int x,
-                               int size)
-{
-    float* restrict bi = (float*)(w->wavelet + w->cas);
-    int count = w->sn;
-    int i, k;
-    for (k = 0; k < 2; ++k) {
-        if (count + 3 * x < size && ((size_t) a & 0x0f) == 0 &&
-                ((size_t) bi & 0x0f) == 0 && (x & 0x0f) == 0) {
-            /* Fast code path */
-            for (i = 0; i < count; ++i) {
-                int j = i;
-                bi[i * 8    ] = a[j];
-                j += x;
-                bi[i * 8 + 1] = a[j];
-                j += x;
-                bi[i * 8 + 2] = a[j];
-                j += x;
-                bi[i * 8 + 3] = a[j];
-            }
-        } else {
-            /* Slow code path */
-            for (i = 0; i < count; ++i) {
-                int j = i;
-                bi[i * 8    ] = a[j];
-                j += x;
-                if (j > size) {
-                    continue;
-                }
-                bi[i * 8 + 1] = a[j];
-                j += x;
-                if (j > size) {
-                    continue;
-                }
-                bi[i * 8 + 2] = a[j];
-                j += x;
-                if (j > size) {
-                    continue;
-                }
-                bi[i * 8 + 3] = a[j];
-            }
-        }
-        bi = (float*)(w->wavelet + 1 - w->cas);
-        a += w->sn;
-        size -= w->sn;
-        count = w->dn;
-    }
-}
-
-static void v4dwt_interleave_v(v4dwt_t* restrict v, float* restrict a, int x)
-{
-    v4* restrict bi = v->wavelet + v->cas;
-    int i;
-    for (i = 0; i < v->sn; ++i) {
-        memcpy(&bi[i * 2], &a[i * x], 4 * sizeof(float));
-    }
-    a += v->sn * x;
-    bi = v->wavelet + 1 - v->cas;
-    for (i = 0; i < v->dn; ++i) {
-        memcpy(&bi[i * 2], &a[i * x], 4 * sizeof(float));
-    }
-}
-
-#ifdef __SSE__
-
-static void v4dwt_decode_step1_sse(v4* w, int count, const __m128 c)
-{
-    __m128* restrict vw = (__m128*) w;
-    int i;
-    /* 4x unrolled loop */
-    for (i = 0; i < count >> 2; ++i) {
-        *vw = _mm_mul_ps(*vw, c);
-        vw += 2;
-        *vw = _mm_mul_ps(*vw, c);
-        vw += 2;
-        *vw = _mm_mul_ps(*vw, c);
-        vw += 2;
-        *vw = _mm_mul_ps(*vw, c);
-        vw += 2;
-    }
-    count &= 3;
-    for (i = 0; i < count; ++i) {
-        *vw = _mm_mul_ps(*vw, c);
-        vw += 2;
-    }
-}
-
-static void v4dwt_decode_step2_sse(v4* l, v4* w, int k, int m, __m128 c)
-{
-    __m128* restrict vl = (__m128*) l;
-    __m128* restrict vw = (__m128*) w;
-    int i;
-    __m128 tmp1, tmp2, tmp3;
-    tmp1 = vl[0];
-    for (i = 0; i < m; ++i) {
-        tmp2 = vw[-1];
-        tmp3 = vw[ 0];
-        vw[-1] = _mm_add_ps(tmp2, _mm_mul_ps(_mm_add_ps(tmp1, tmp3), c));
-        tmp1 = tmp3;
-        vw += 2;
-    }
-    vl = vw - 2;
-    if (m >= k) {
-        return;
-    }
-    c = _mm_add_ps(c, c);
-    c = _mm_mul_ps(c, vl[0]);
-    for (; m < k; ++m) {
-        __m128 tmp = vw[-1];
-        vw[-1] = _mm_add_ps(tmp, c);
-        vw += 2;
-    }
-}
-
-#else
-
-static void v4dwt_decode_step1(v4* w, int count, const float c)
-{
-    float* restrict fw = (float*) w;
-    int i;
-    for (i = 0; i < count; ++i) {
-        float tmp1 = fw[i * 8    ];
-        float tmp2 = fw[i * 8 + 1];
-        float tmp3 = fw[i * 8 + 2];
-        float tmp4 = fw[i * 8 + 3];
-        fw[i * 8    ] = tmp1 * c;
-        fw[i * 8 + 1] = tmp2 * c;
-        fw[i * 8 + 2] = tmp3 * c;
-        fw[i * 8 + 3] = tmp4 * c;
-    }
-}
-
-static void v4dwt_decode_step2(v4* l, v4* w, int k, int m, float c)
-{
-    float* restrict fl = (float*) l;
-    float* restrict fw = (float*) w;
-    int i;
-    for (i = 0; i < m; ++i) {
-        float tmp1_1 = fl[0];
-        float tmp1_2 = fl[1];
-        float tmp1_3 = fl[2];
-        float tmp1_4 = fl[3];
-        float tmp2_1 = fw[-4];
-        float tmp2_2 = fw[-3];
-        float tmp2_3 = fw[-2];
-        float tmp2_4 = fw[-1];
-        float tmp3_1 = fw[0];
-        float tmp3_2 = fw[1];
-        float tmp3_3 = fw[2];
-        float tmp3_4 = fw[3];
-        fw[-4] = tmp2_1 + ((tmp1_1 + tmp3_1) * c);
-        fw[-3] = tmp2_2 + ((tmp1_2 + tmp3_2) * c);
-        fw[-2] = tmp2_3 + ((tmp1_3 + tmp3_3) * c);
-        fw[-1] = tmp2_4 + ((tmp1_4 + tmp3_4) * c);
-        fl = fw;
-        fw += 8;
-    }
-    if (m < k) {
-        float c1;
-        float c2;
-        float c3;
-        float c4;
-        c += c;
-        c1 = fl[0] * c;
-        c2 = fl[1] * c;
-        c3 = fl[2] * c;
-        c4 = fl[3] * c;
-        for (; m < k; ++m) {
-            float tmp1 = fw[-4];
-            float tmp2 = fw[-3];
-            float tmp3 = fw[-2];
-            float tmp4 = fw[-1];
-            fw[-4] = tmp1 + c1;
-            fw[-3] = tmp2 + c2;
-            fw[-2] = tmp3 + c3;
-            fw[-1] = tmp4 + c4;
-            fw += 8;
-        }
-    }
-}
-
-#endif
-
-/* <summary>                             */
-/* Inverse 9-7 wavelet transform in 1-D. */
-/* </summary>                            */
-static void v4dwt_decode(v4dwt_t* restrict dwt)
-{
-    int a, b;
-    if (dwt->cas == 0) {
-        if (!((dwt->dn > 0) || (dwt->sn > 1))) {
-            return;
-        }
-        a = 0;
-        b = 1;
-    } else {
-        if (!((dwt->sn > 0) || (dwt->dn > 1))) {
-            return;
-        }
-        a = 1;
-        b = 0;
-    }
-#ifdef __SSE__
-    v4dwt_decode_step1_sse(dwt->wavelet + a, dwt->sn, _mm_set1_ps(K));
-    v4dwt_decode_step1_sse(dwt->wavelet + b, dwt->dn, _mm_set1_ps(c13318));
-    v4dwt_decode_step2_sse(dwt->wavelet + b, dwt->wavelet + a + 1, dwt->sn,
-                           int_min(dwt->sn, dwt->dn - a), _mm_set1_ps(dwt_delta));
-    v4dwt_decode_step2_sse(dwt->wavelet + a, dwt->wavelet + b + 1, dwt->dn,
-                           int_min(dwt->dn, dwt->sn - b), _mm_set1_ps(dwt_gamma));
-    v4dwt_decode_step2_sse(dwt->wavelet + b, dwt->wavelet + a + 1, dwt->sn,
-                           int_min(dwt->sn, dwt->dn - a), _mm_set1_ps(dwt_beta));
-    v4dwt_decode_step2_sse(dwt->wavelet + a, dwt->wavelet + b + 1, dwt->dn,
-                           int_min(dwt->dn, dwt->sn - b), _mm_set1_ps(dwt_alpha));
-#else
-    v4dwt_decode_step1(dwt->wavelet + a, dwt->sn, K);
-    v4dwt_decode_step1(dwt->wavelet + b, dwt->dn, c13318);
-    v4dwt_decode_step2(dwt->wavelet + b, dwt->wavelet + a + 1, dwt->sn,
-                       int_min(dwt->sn, dwt->dn - a), dwt_delta);
-    v4dwt_decode_step2(dwt->wavelet + a, dwt->wavelet + b + 1, dwt->dn,
-                       int_min(dwt->dn, dwt->sn - b), dwt_gamma);
-    v4dwt_decode_step2(dwt->wavelet + b, dwt->wavelet + a + 1, dwt->sn,
-                       int_min(dwt->sn, dwt->dn - a), dwt_beta);
-    v4dwt_decode_step2(dwt->wavelet + a, dwt->wavelet + b + 1, dwt->dn,
-                       int_min(dwt->dn, dwt->sn - b), dwt_alpha);
-#endif
-}
-
-/* <summary>                             */
-/* Inverse 9-7 wavelet transform in 2-D. */
-/* </summary>                            */
-void dwt_decode_real(opj_tcd_tilecomp_t* restrict tilec, int numres)
-{
-    v4dwt_t h;
-    v4dwt_t v;
-
-    opj_tcd_resolution_t* res = tilec->resolutions;
-
-    int rw = res->x1 - res->x0; /* width of the resolution level computed */
-    int rh = res->y1 - res->y0; /* height of the resolution level computed */
-
-    int w = tilec->x1 - tilec->x0;
-
-    h.wavelet = (v4*) opj_aligned_malloc((dwt_decode_max_resolution(res,
-                                          numres) + 5) * sizeof(v4));
-    v.wavelet = h.wavelet;
-
-    while (--numres) {
-        float * restrict aj = (float*) tilec->data;
-        int bufsize = (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0);
-        int j;
-
-        h.sn = rw;
-        v.sn = rh;
-
-        ++res;
-
-        rw = res->x1 - res->x0; /* width of the resolution level computed */
-        rh = res->y1 - res->y0; /* height of the resolution level computed */
-
-        h.dn = rw - h.sn;
-        h.cas = res->x0 % 2;
-
-        for (j = rh; j > 3; j -= 4) {
-            int k;
-            v4dwt_interleave_h(&h, aj, w, bufsize);
-            v4dwt_decode(&h);
-            for (k = rw; --k >= 0;) {
-                aj[k    ] = h.wavelet[k].f[0];
-                aj[k + w  ] = h.wavelet[k].f[1];
-                aj[k + w * 2] = h.wavelet[k].f[2];
-                aj[k + w * 3] = h.wavelet[k].f[3];
-            }
-            aj += w * 4;
-            bufsize -= w * 4;
-        }
-        if (rh & 0x03) {
-            int k;
-            j = rh & 0x03;
-            v4dwt_interleave_h(&h, aj, w, bufsize);
-            v4dwt_decode(&h);
-            for (k = rw; --k >= 0;) {
-                switch (j) {
-                case 3:
-                    aj[k + w * 2] = h.wavelet[k].f[2];
-                case 2:
-                    aj[k + w  ] = h.wavelet[k].f[1];
-                case 1:
-                    aj[k    ] = h.wavelet[k].f[0];
-                }
-            }
-        }
-
-        v.dn = rh - v.sn;
-        v.cas = res->y0 % 2;
-
-        aj = (float*) tilec->data;
-        for (j = rw; j > 3; j -= 4) {
-            int k;
-            v4dwt_interleave_v(&v, aj, w);
-            v4dwt_decode(&v);
-            for (k = 0; k < rh; ++k) {
-                memcpy(&aj[k * w], &v.wavelet[k], 4 * sizeof(float));
-            }
-            aj += 4;
-        }
-        if (rw & 0x03) {
-            int k;
-            j = rw & 0x03;
-            v4dwt_interleave_v(&v, aj, w);
-            v4dwt_decode(&v);
-            for (k = 0; k < rh; ++k) {
-                memcpy(&aj[k * w], &v.wavelet[k], j * sizeof(float));
-            }
-        }
-    }
-
-    opj_aligned_free(h.wavelet);
-}
-
diff --git a/src/lib/openmj2/dwt.h b/src/lib/openmj2/dwt.h
deleted file mode 100644 (file)
index 50bd3d0..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __DWT_H
-#define __DWT_H
-/**
-@file dwt.h
-@brief Implementation of a discrete wavelet transform (DWT)
-
-The functions in DWT.C have for goal to realize forward and inverse discret wavelet
-transform with filter 5-3 (reversible) and filter 9-7 (irreversible). The functions in
-DWT.C are used by some function in TCD.C.
-*/
-
-/** @defgroup DWT DWT - Implementation of a discrete wavelet transform */
-/*@{*/
-
-
-/** @name Exported functions */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-/**
-Forward 5-3 wavelet transform in 2-D.
-Apply a reversible DWT transform to a component of an image.
-@param tilec Tile component information (current tile)
-*/
-void dwt_encode(opj_tcd_tilecomp_t * tilec);
-/**
-Inverse 5-3 wavelet transform in 2-D.
-Apply a reversible inverse DWT transform to a component of an image.
-@param tilec Tile component information (current tile)
-@param numres Number of resolution levels to decode
-*/
-void dwt_decode(opj_tcd_tilecomp_t* tilec, int numres);
-/**
-Get the gain of a subband for the reversible 5-3 DWT.
-@param orient Number that identifies the subband (0->LL, 1->HL, 2->LH, 3->HH)
-@return Returns 0 if orient = 0, returns 1 if orient = 1 or 2, returns 2 otherwise
-*/
-int dwt_getgain(int orient);
-/**
-Get the norm of a wavelet function of a subband at a specified level for the reversible 5-3 DWT.
-@param level Level of the wavelet function
-@param orient Band of the wavelet function
-@return Returns the norm of the wavelet function
-*/
-double dwt_getnorm(int level, int orient);
-/**
-Forward 9-7 wavelet transform in 2-D.
-Apply an irreversible DWT transform to a component of an image.
-@param tilec Tile component information (current tile)
-*/
-void dwt_encode_real(opj_tcd_tilecomp_t * tilec);
-/**
-Inverse 9-7 wavelet transform in 2-D.
-Apply an irreversible inverse DWT transform to a component of an image.
-@param tilec Tile component information (current tile)
-@param numres Number of resolution levels to decode
-*/
-void dwt_decode_real(opj_tcd_tilecomp_t* tilec, int numres);
-/**
-Get the gain of a subband for the irreversible 9-7 DWT.
-@param orient Number that identifies the subband (0->LL, 1->HL, 2->LH, 3->HH)
-@return Returns the gain of the 9-7 wavelet transform
-*/
-int dwt_getgain_real(int orient);
-/**
-Get the norm of a wavelet function of a subband at a specified level for the irreversible 9-7 DWT
-@param level Level of the wavelet function
-@param orient Band of the wavelet function
-@return Returns the norm of the 9-7 wavelet
-*/
-double dwt_getnorm_real(int level, int orient);
-/**
-Explicit calculation of the Quantization Stepsizes
-@param tccp Tile-component coding parameters
-@param prec Precint analyzed
-*/
-void dwt_calc_explicit_stepsizes(opj_tccp_t * tccp, int prec);
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif /* __DWT_H */
diff --git a/src/lib/openmj2/event.c b/src/lib/openmj2/event.c
deleted file mode 100644 (file)
index 7eebfaa..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "opj_includes.h"
-
-/* ==========================================================
-     Utility functions
-   ==========================================================*/
-
-#ifdef OPJ_CODE_NOT_USED
-#ifndef _WIN32
-static char*
-i2a(unsigned i, char *a, unsigned r)
-{
-    if (i / r > 0) {
-        a = i2a(i / r, a, r);
-    }
-    *a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i % r];
-    return a + 1;
-}
-
-/**
- Transforms integer i into an ascii string and stores the result in a;
- string is encoded in the base indicated by r.
- @param i Number to be converted
- @param a String result
- @param r Base of value; must be in the range 2 - 36
- @return Returns a
-*/
-static char *
-_itoa(int i, char *a, int r)
-{
-    r = ((r < 2) || (r > 36)) ? 10 : r;
-    if (i < 0) {
-        *a = '-';
-        *i2a(-i, a + 1, r) = 0;
-    } else {
-        *i2a(i, a, r) = 0;
-    }
-    return a;
-}
-
-#endif /* !_WIN32 */
-#endif
-/* ----------------------------------------------------------------------- */
-
-opj_event_mgr_t* OPJ_CALLCONV opj_set_event_mgr(opj_common_ptr cinfo,
-        opj_event_mgr_t *event_mgr, void *context)
-{
-    if (cinfo) {
-        opj_event_mgr_t *previous = cinfo->event_mgr;
-        cinfo->event_mgr = event_mgr;
-        cinfo->client_data = context;
-        return previous;
-    }
-
-    return NULL;
-}
-
-opj_bool opj_event_msg(opj_common_ptr cinfo, int event_type, const char *fmt,
-                       ...)
-{
-#define MSG_SIZE 512 /* 512 bytes should be more than enough for a short message */
-    opj_msg_callback msg_handler = NULL;
-
-    opj_event_mgr_t *event_mgr = cinfo->event_mgr;
-    if (event_mgr != NULL) {
-        switch (event_type) {
-        case EVT_ERROR:
-            msg_handler = event_mgr->error_handler;
-            break;
-        case EVT_WARNING:
-            msg_handler = event_mgr->warning_handler;
-            break;
-        case EVT_INFO:
-            msg_handler = event_mgr->info_handler;
-            break;
-        default:
-            break;
-        }
-        if (msg_handler == NULL) {
-            return OPJ_FALSE;
-        }
-    } else {
-        return OPJ_FALSE;
-    }
-
-    if ((fmt != NULL) && (event_mgr != NULL)) {
-        va_list arg;
-        int str_length/*, i, j*/; /* UniPG */
-        char message[MSG_SIZE];
-        /* initialize the optional parameter list */
-        va_start(arg, fmt);
-        /* parse the format string and put the result in 'message' */
-        str_length = vsnprintf(message, MSG_SIZE, fmt, arg); /* UniPG */
-        /* deinitialize the optional parameter list */
-        va_end(arg);
-
-        /* output the message to the user program */
-        if (str_length > -1 && str_length < MSG_SIZE) {
-            msg_handler(message, cinfo->client_data);
-        } else {
-            return OPJ_FALSE;
-        }
-    }
-
-    return OPJ_TRUE;
-}
-
diff --git a/src/lib/openmj2/event.h b/src/lib/openmj2/event.h
deleted file mode 100644 (file)
index 64c737c..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef __EVENT_H
-#define __EVENT_H
-/**
-@file event.h
-@brief Implementation of a event callback system
-
-The functions in EVENT.C have for goal to send output messages (errors, warnings, debug) to the user.
-*/
-
-#define EVT_ERROR   1   /**< Error event type */
-#define EVT_WARNING 2   /**< Warning event type */
-#define EVT_INFO    4   /**< Debug event type */
-
-/** @defgroup EVENT EVENT - Implementation of a event callback system */
-/*@{*/
-
-/** @name Exported functions (see also openjpeg.h) */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-/**
-Write formatted data to a string and send the string to a user callback.
-@param cinfo Codec context info
-@param event_type Event type or callback to use to send the message
-@param fmt Format-control string (plus optional arguments)
-@return Returns true if successful, returns false otherwise
-*/
-opj_bool opj_event_msg(opj_common_ptr cinfo, int event_type, const char *fmt,
-                       ...);
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif /* __EVENT_H */
diff --git a/src/lib/openmj2/fix.h b/src/lib/openmj2/fix.h
deleted file mode 100644 (file)
index e67b126..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef __FIX_H
-#define __FIX_H
-
-#if defined(_MSC_VER) || defined(__BORLANDC__)
-#define int64 __int64
-#else
-#define int64 long long
-#endif
-
-/**
-@file fix.h
-@brief Implementation of operations of specific multiplication (FIX)
-
-The functions in FIX.H have for goal to realize specific multiplication.
-*/
-
-/** @defgroup FIX FIX - Implementation of operations of specific multiplication */
-/*@{*/
-
-/**
-Multiply two fixed-precision rational numbers.
-@param a
-@param b
-@return Returns a * b
-*/
-static INLINE int fix_mul(int a, int b)
-{
-    int64 temp = (int64) a * (int64) b ;
-    temp += temp & 4096;
-    return (int)(temp >> 13) ;
-}
-
-/*@}*/
-
-#endif /* __FIX_H */
diff --git a/src/lib/openmj2/image.c b/src/lib/openmj2/image.c
deleted file mode 100644 (file)
index 163ab8b..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "opj_includes.h"
-
-opj_image_t* opj_image_create0(void)
-{
-    opj_image_t *image = (opj_image_t*)opj_calloc(1, sizeof(opj_image_t));
-    return image;
-}
-
-opj_image_t* OPJ_CALLCONV opj_image_create(int numcmpts,
-        opj_image_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc)
-{
-    int compno;
-    opj_image_t *image = NULL;
-
-    image = (opj_image_t*) opj_calloc(1, sizeof(opj_image_t));
-    if (image) {
-        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));
-        if (!image->comps) {
-            fprintf(stderr, "Unable to allocate memory for image.\n");
-            opj_image_destroy(image);
-            return NULL;
-        }
-        /* create the individual image components */
-        for (compno = 0; compno < numcmpts; compno++) {
-            opj_image_comp_t *comp = &image->comps[compno];
-            comp->dx = cmptparms[compno].dx;
-            comp->dy = cmptparms[compno].dy;
-            comp->w = cmptparms[compno].w;
-            comp->h = cmptparms[compno].h;
-            comp->x0 = cmptparms[compno].x0;
-            comp->y0 = cmptparms[compno].y0;
-            comp->prec = cmptparms[compno].prec;
-            comp->bpp = cmptparms[compno].bpp;
-            comp->sgnd = cmptparms[compno].sgnd;
-            comp->data = (int*) opj_calloc(comp->w * comp->h, sizeof(int));
-            if (!comp->data) {
-                fprintf(stderr, "Unable to allocate memory for image.\n");
-                opj_image_destroy(image);
-                return NULL;
-            }
-        }
-    }
-
-    return image;
-}
-
-void OPJ_CALLCONV opj_image_destroy(opj_image_t *image)
-{
-    int i;
-    if (image) {
-        if (image->comps) {
-            /* image components */
-            for (i = 0; i < image->numcomps; i++) {
-                opj_image_comp_t *image_comp = &image->comps[i];
-                if (image_comp->data) {
-                    opj_free(image_comp->data);
-                }
-            }
-            opj_free(image->comps);
-        }
-        opj_free(image);
-    }
-}
-
diff --git a/src/lib/openmj2/image.h b/src/lib/openmj2/image.h
deleted file mode 100644 (file)
index dd43215..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef __IMAGE_H
-#define __IMAGE_H
-/**
-@file image.h
-@brief Implementation of operations on images (IMAGE)
-
-The functions in IMAGE.C have for goal to realize operations on images.
-*/
-
-/** @defgroup IMAGE IMAGE - Implementation of operations on images */
-/*@{*/
-
-/**
-Create an empty image
-@todo this function should be removed
-@return returns an empty image if successful, returns NULL otherwise
-*/
-opj_image_t* opj_image_create0(void);
-
-/*@}*/
-
-#endif /* __IMAGE_H */
-
diff --git a/src/lib/openmj2/int.h b/src/lib/openmj2/int.h
deleted file mode 100644 (file)
index 641fc7b..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef __INT_H
-#define __INT_H
-/**
-@file int.h
-@brief Implementation of operations on integers (INT)
-
-The functions in INT.H have for goal to realize operations on integers.
-*/
-
-/** @defgroup INT INT - Implementation of operations on integers */
-/*@{*/
-
-/** @name Exported functions (see also openjpeg.h) */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-/**
-Get the minimum of two integers
-@return Returns a if a < b else b
-*/
-static INLINE int int_min(int a, int b)
-{
-    return a < b ? a : b;
-}
-/**
-Get the maximum of two integers
-@return Returns a if a > b else b
-*/
-static INLINE int int_max(int a, int b)
-{
-    return (a > b) ? a : b;
-}
-/**
-Clamp an integer inside an interval
-@return
-<ul>
-<li>Returns a if (min < a < max)
-<li>Returns max if (a > max)
-<li>Returns min if (a < min)
-</ul>
-*/
-static INLINE int int_clamp(int a, int min, int max)
-{
-    if (a < min) {
-        return min;
-    }
-    if (a > max) {
-        return max;
-    }
-    return a;
-}
-/**
-@return Get absolute value of integer
-*/
-static INLINE int int_abs(int a)
-{
-    return a < 0 ? -a : a;
-}
-/**
-Divide an integer and round upwards
-@return Returns a divided by b
-*/
-static INLINE int int_ceildiv(int a, int b)
-{
-    return (a + b - 1) / b;
-}
-/**
-Divide an integer by a power of 2 and round upwards
-@return Returns a divided by 2^b
-*/
-static INLINE int int_ceildivpow2(int a, int b)
-{
-    return (a + (1 << b) - 1) >> b;
-}
-/**
-Divide an integer by a power of 2 and round downwards
-@return Returns a divided by 2^b
-*/
-static INLINE int int_floordivpow2(int a, int b)
-{
-    return a >> b;
-}
-/**
-Get logarithm of an integer and round downwards
-@return Returns log2(a)
-*/
-static INLINE int int_floorlog2(int a)
-{
-    int l;
-    for (l = 0; a > 1; l++) {
-        a >>= 1;
-    }
-    return l;
-}
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif
diff --git a/src/lib/openmj2/j2k.c b/src/lib/openmj2/j2k.c
deleted file mode 100644 (file)
index daf13f8..0000000
+++ /dev/null
@@ -1,2778 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2006-2007, Parvatha Elangovan
- * Copyright (c) 2010-2011, Kaori Hagihara
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "opj_includes.h"
-
-/** @defgroup J2K J2K - JPEG-2000 codestream reader/writer */
-/*@{*/
-
-/** @name Local static functions */
-/*@{*/
-
-/**
-Write the SOC marker (Start Of Codestream)
-@param j2k J2K handle
-*/
-static void j2k_write_soc(opj_j2k_t *j2k);
-/**
-Read the SOC marker (Start of Codestream)
-@param j2k J2K handle
-*/
-static void j2k_read_soc(opj_j2k_t *j2k);
-/**
-Write the SIZ marker (image and tile size)
-@param j2k J2K handle
-*/
-static void j2k_write_siz(opj_j2k_t *j2k);
-/**
-Read the SIZ marker (image and tile size)
-@param j2k J2K handle
-*/
-static void j2k_read_siz(opj_j2k_t *j2k);
-/**
-Write the COM marker (comment)
-@param j2k J2K handle
-*/
-static void j2k_write_com(opj_j2k_t *j2k);
-/**
-Read the COM marker (comment)
-@param j2k J2K handle
-*/
-static void j2k_read_com(opj_j2k_t *j2k);
-/**
-Write the value concerning the specified component in the marker COD and COC
-@param j2k J2K handle
-@param compno Number of the component concerned by the information written
-*/
-static void j2k_write_cox(opj_j2k_t *j2k, int compno);
-/**
-Read the value concerning the specified component in the marker COD and COC
-@param j2k J2K handle
-@param compno Number of the component concerned by the information read
-*/
-static void j2k_read_cox(opj_j2k_t *j2k, int compno);
-/**
-Write the COD marker (coding style default)
-@param j2k J2K handle
-*/
-static void j2k_write_cod(opj_j2k_t *j2k);
-/**
-Read the COD marker (coding style default)
-@param j2k J2K handle
-*/
-static void j2k_read_cod(opj_j2k_t *j2k);
-/**
-Write the COC marker (coding style component)
-@param j2k J2K handle
-@param compno Number of the component concerned by the information written
-*/
-static void j2k_write_coc(opj_j2k_t *j2k, int compno);
-/**
-Read the COC marker (coding style component)
-@param j2k J2K handle
-*/
-static void j2k_read_coc(opj_j2k_t *j2k);
-/**
-Write the value concerning the specified component in the marker QCD and QCC
-@param j2k J2K handle
-@param compno Number of the component concerned by the information written
-*/
-static void j2k_write_qcx(opj_j2k_t *j2k, int compno);
-/**
-Read the value concerning the specified component in the marker QCD and QCC
-@param j2k J2K handle
-@param compno Number of the component concern by the information read
-@param len Length of the information in the QCX part of the marker QCD/QCC
-*/
-static void j2k_read_qcx(opj_j2k_t *j2k, int compno, int len);
-/**
-Write the QCD marker (quantization default)
-@param j2k J2K handle
-*/
-static void j2k_write_qcd(opj_j2k_t *j2k);
-/**
-Read the QCD marker (quantization default)
-@param j2k J2K handle
-*/
-static void j2k_read_qcd(opj_j2k_t *j2k);
-/**
-Write the QCC marker (quantization component)
-@param j2k J2K handle
-@param compno Number of the component concerned by the information written
-*/
-static void j2k_write_qcc(opj_j2k_t *j2k, int compno);
-/**
-Read the QCC marker (quantization component)
-@param j2k J2K handle
-*/
-static void j2k_read_qcc(opj_j2k_t *j2k);
-/**
-Write the POC marker (progression order change)
-@param j2k J2K handle
-*/
-static void j2k_write_poc(opj_j2k_t *j2k);
-/**
-Read the POC marker (progression order change)
-@param j2k J2K handle
-*/
-static void j2k_read_poc(opj_j2k_t *j2k);
-/**
-Read the CRG marker (component registration)
-@param j2k J2K handle
-*/
-static void j2k_read_crg(opj_j2k_t *j2k);
-/**
-Read the TLM marker (tile-part lengths)
-@param j2k J2K handle
-*/
-static void j2k_read_tlm(opj_j2k_t *j2k);
-/**
-Read the PLM marker (packet length, main header)
-@param j2k J2K handle
-*/
-static void j2k_read_plm(opj_j2k_t *j2k);
-/**
-Read the PLT marker (packet length, tile-part header)
-@param j2k J2K handle
-*/
-static void j2k_read_plt(opj_j2k_t *j2k);
-/**
-Read the PPM marker (packet packet headers, main header)
-@param j2k J2K handle
-*/
-static void j2k_read_ppm(opj_j2k_t *j2k);
-/**
-Read the PPT marker (packet packet headers, tile-part header)
-@param j2k J2K handle
-*/
-static void j2k_read_ppt(opj_j2k_t *j2k);
-/**
-Write the TLM marker (Mainheader)
-@param j2k J2K handle
-*/
-static void j2k_write_tlm(opj_j2k_t *j2k);
-/**
-Write the SOT marker (start of tile-part)
-@param j2k J2K handle
-*/
-static void j2k_write_sot(opj_j2k_t *j2k);
-/**
-Read the SOT marker (start of tile-part)
-@param j2k J2K handle
-*/
-static void j2k_read_sot(opj_j2k_t *j2k);
-/**
-Write the SOD marker (start of data)
-@param j2k J2K handle
-@param tile_coder Pointer to a TCD handle
-*/
-static void j2k_write_sod(opj_j2k_t *j2k, void *tile_coder);
-/**
-Read the SOD marker (start of data)
-@param j2k J2K handle
-*/
-static void j2k_read_sod(opj_j2k_t *j2k);
-/**
-Write the RGN marker (region-of-interest)
-@param j2k J2K handle
-@param compno Number of the component concerned by the information written
-@param tileno Number of the tile concerned by the information written
-*/
-static void j2k_write_rgn(opj_j2k_t *j2k, int compno, int tileno);
-/**
-Read the RGN marker (region-of-interest)
-@param j2k J2K handle
-*/
-static void j2k_read_rgn(opj_j2k_t *j2k);
-/**
-Write the EOC marker (end of codestream)
-@param j2k J2K handle
-*/
-static void j2k_write_eoc(opj_j2k_t *j2k);
-/**
-Read the EOC marker (end of codestream)
-@param j2k J2K handle
-*/
-static void j2k_read_eoc(opj_j2k_t *j2k);
-/**
-Read an unknown marker
-@param j2k J2K handle
-*/
-static void j2k_read_unk(opj_j2k_t *j2k);
-/**
-Add main header marker information
-@param cstr_info Codestream information structure
-@param type marker type
-@param pos byte offset of marker segment
-@param len length of marker segment
- */
-static void j2k_add_mhmarker(opj_codestream_info_t *cstr_info,
-                             unsigned short int type, int pos, int len);
-/**
-Add tile header marker information
-@param tileno tile index number
-@param cstr_info Codestream information structure
-@param type marker type
-@param pos byte offset of marker segment
-@param len length of marker segment
- */
-static void j2k_add_tlmarker(int tileno, opj_codestream_info_t *cstr_info,
-                             unsigned short int type, int pos, int len);
-
-/*@}*/
-
-/*@}*/
-
-/* ----------------------------------------------------------------------- */
-typedef struct j2k_prog_order {
-    OPJ_PROG_ORDER enum_prog;
-    char str_prog[5];
-} j2k_prog_order_t;
-
-j2k_prog_order_t j2k_prog_order_list[] = {
-    {CPRL, "CPRL"},
-    {LRCP, "LRCP"},
-    {PCRL, "PCRL"},
-    {RLCP, "RLCP"},
-    {RPCL, "RPCL"},
-    {(OPJ_PROG_ORDER) - 1, ""}
-};
-
-char *j2k_convert_progression_order(OPJ_PROG_ORDER prg_order)
-{
-    j2k_prog_order_t *po;
-    for (po = j2k_prog_order_list; po->enum_prog != -1; po++) {
-        if (po->enum_prog == prg_order) {
-            break;
-        }
-    }
-    return po->str_prog;
-}
-
-/* ----------------------------------------------------------------------- */
-static int j2k_get_num_tp(opj_cp_t *cp, int pino, int tileno)
-{
-    char *prog;
-    int i;
-    int tpnum = 1, tpend = 0;
-    opj_tcp_t *tcp = &cp->tcps[tileno];
-    prog = j2k_convert_progression_order(tcp->prg);
-
-    if (cp->tp_on == 1) {
-        for (i = 0; i < 4; i++) {
-            if (tpend != 1) {
-                if (cp->tp_flag == prog[i]) {
-                    tpend = 1;
-                    cp->tp_pos = i;
-                }
-                switch (prog[i]) {
-                case 'C':
-                    tpnum = tpnum * tcp->pocs[pino].compE;
-                    break;
-                case 'R':
-                    tpnum = tpnum * tcp->pocs[pino].resE;
-                    break;
-                case 'P':
-                    tpnum = tpnum * tcp->pocs[pino].prcE;
-                    break;
-                case 'L':
-                    tpnum = tpnum * tcp->pocs[pino].layE;
-                    break;
-                }
-            }
-        }
-    } else {
-        tpnum = 1;
-    }
-    return tpnum;
-}
-
-/** mem allocation for TLM marker*/
-static int j2k_calculate_tp(opj_cp_t *cp, int img_numcomp, opj_image_t *image,
-                            opj_j2k_t *j2k)
-{
-    int pino, tileno, totnum_tp = 0;
-
-    OPJ_ARG_NOT_USED(img_numcomp);
-
-    j2k->cur_totnum_tp = (int *) opj_malloc(sizeof(int) * cp->tw * cp->th);
-    for (tileno = 0; tileno < cp->tw * cp->th; tileno++) {
-        int cur_totnum_tp = 0;
-        opj_tcp_t *tcp = &cp->tcps[tileno];
-        for (pino = 0; pino <= tcp->numpocs; pino++) {
-            int tp_num = 0;
-            opj_pi_iterator_t *pi = pi_initialise_encode(image, cp, tileno, FINAL_PASS);
-            if (!pi) {
-                return -1;
-            }
-            tp_num = j2k_get_num_tp(cp, pino, tileno);
-            totnum_tp = totnum_tp + tp_num;
-            cur_totnum_tp = cur_totnum_tp + tp_num;
-            pi_destroy(pi, cp, tileno);
-        }
-        j2k->cur_totnum_tp[tileno] = cur_totnum_tp;
-        /* INDEX >> */
-        if (j2k->cstr_info) {
-            j2k->cstr_info->tile[tileno].num_tps = cur_totnum_tp;
-            j2k->cstr_info->tile[tileno].tp = (opj_tp_info_t *) opj_malloc(
-                                                  cur_totnum_tp * sizeof(opj_tp_info_t));
-        }
-        /* << INDEX */
-    }
-    return totnum_tp;
-}
-
-static void j2k_write_soc(opj_j2k_t *j2k)
-{
-    opj_cio_t *cio = j2k->cio;
-    cio_write(cio, J2K_MS_SOC, 2);
-
-    if (j2k->cstr_info) {
-        j2k_add_mhmarker(j2k->cstr_info, J2K_MS_SOC, cio_tell(cio), 0);
-    }
-
-    /* UniPG>> */
-#ifdef USE_JPWL
-
-    /* update markers struct */
-    j2k_add_marker(j2k->cstr_info, J2K_MS_SOC, cio_tell(cio) - 2, 2);
-#endif /* USE_JPWL */
-    /* <<UniPG */
-}
-
-static void j2k_read_soc(opj_j2k_t *j2k)
-{
-    j2k->state = J2K_STATE_MHSIZ;
-    /* Index */
-    if (j2k->cstr_info) {
-        j2k->cstr_info->main_head_start = cio_tell(j2k->cio) - 2;
-        j2k->cstr_info->codestream_size = cio_numbytesleft(j2k->cio) + 2 -
-                                          j2k->cstr_info->main_head_start;
-    }
-}
-
-static void j2k_write_siz(opj_j2k_t *j2k)
-{
-    int i;
-    int lenp, len;
-
-    opj_cio_t *cio = j2k->cio;
-    opj_image_t *image = j2k->image;
-    opj_cp_t *cp = j2k->cp;
-
-    cio_write(cio, J2K_MS_SIZ, 2);  /* SIZ */
-    lenp = cio_tell(cio);
-    cio_skip(cio, 2);
-    cio_write(cio, cp->rsiz, 2);            /* Rsiz (capabilities) */
-    cio_write(cio, image->x1, 4);   /* Xsiz */
-    cio_write(cio, image->y1, 4);   /* Ysiz */
-    cio_write(cio, image->x0, 4);   /* X0siz */
-    cio_write(cio, image->y0, 4);   /* Y0siz */
-    cio_write(cio, cp->tdx, 4);     /* XTsiz */
-    cio_write(cio, cp->tdy, 4);     /* YTsiz */
-    cio_write(cio, cp->tx0, 4);     /* XT0siz */
-    cio_write(cio, cp->ty0, 4);     /* YT0siz */
-    cio_write(cio, image->numcomps, 2); /* Csiz */
-    for (i = 0; i < image->numcomps; i++) {
-        cio_write(cio, image->comps[i].prec - 1 + (image->comps[i].sgnd << 7),
-                  1);  /* Ssiz_i */
-        cio_write(cio, image->comps[i].dx, 1);  /* XRsiz_i */
-        cio_write(cio, image->comps[i].dy, 1);  /* YRsiz_i */
-    }
-    len = cio_tell(cio) - lenp;
-    cio_seek(cio, lenp);
-    cio_write(cio, len, 2);     /* Lsiz */
-    cio_seek(cio, lenp + len);
-
-    if (j2k->cstr_info) {
-        j2k_add_mhmarker(j2k->cstr_info, J2K_MS_SIZ, lenp, len);
-    }
-}
-
-static void j2k_read_siz(opj_j2k_t *j2k)
-{
-    int len, i;
-
-    opj_cio_t *cio = j2k->cio;
-    opj_image_t *image = j2k->image;
-    opj_cp_t *cp = j2k->cp;
-
-    len = cio_read(cio, 2);         /* Lsiz */
-    cio_read(cio, 2);               /* Rsiz (capabilities) */
-    image->x1 = cio_read(cio, 4);   /* Xsiz */
-    image->y1 = cio_read(cio, 4);   /* Ysiz */
-    image->x0 = cio_read(cio, 4);   /* X0siz */
-    image->y0 = cio_read(cio, 4);   /* Y0siz */
-    cp->tdx = cio_read(cio, 4);     /* XTsiz */
-    cp->tdy = cio_read(cio, 4);     /* YTsiz */
-    cp->tx0 = cio_read(cio, 4);     /* XT0siz */
-    cp->ty0 = cio_read(cio, 4);     /* YT0siz */
-
-    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",
-                      image->x0, image->x1, image->y0, image->y1);
-        return;
-    }
-
-    image->numcomps = cio_read(cio, 2); /* Csiz */
-
-#ifdef USE_JPWL
-    if (j2k->cp->correct) {
-        /* if JPWL is on, we check whether TX errors have damaged
-          too much the SIZ parameters */
-        if (!(image->x1 * image->y1)) {
-            opj_event_msg(j2k->cinfo, EVT_ERROR,
-                          "JPWL: bad image size (%d x %d)\n",
-                          image->x1, image->y1);
-            if (!JPWL_ASSUME || JPWL_ASSUME) {
-                opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
-                return;
-            }
-        }
-        if (image->numcomps != ((len - 38) / 3)) {
-            opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
-                          "JPWL: Csiz is %d => space in SIZ only for %d comps.!!!\n",
-                          image->numcomps, ((len - 38) / 3));
-            if (!JPWL_ASSUME) {
-                opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
-                return;
-            }
-            /* we try to correct */
-            opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust this\n");
-            if (image->numcomps < ((len - 38) / 3)) {
-                len = 38 + 3 * image->numcomps;
-                opj_event_msg(j2k->cinfo, EVT_WARNING,
-                              "- setting Lsiz to %d => HYPOTHESIS!!!\n",
-                              len);
-            } else {
-                image->numcomps = ((len - 38) / 3);
-                opj_event_msg(j2k->cinfo, EVT_WARNING,
-                              "- setting Csiz to %d => HYPOTHESIS!!!\n",
-                              image->numcomps);
-            }
-        }
-
-        /* update components number in the jpwl_exp_comps filed */
-        cp->exp_comps = image->numcomps;
-    }
-#endif /* USE_JPWL */
-
-    /* prevent division by zero */
-    if (!(cp->tdx * cp->tdy)) {
-        opj_event_msg(j2k->cinfo, EVT_ERROR,
-                      "JPWL: 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;
-        tmp = cio_read(cio, 1);     /* Ssiz_i */
-        image->comps[i].prec = (tmp & 0x7f) + 1;
-        image->comps[i].sgnd = tmp >> 7;
-        image->comps[i].dx = cio_read(cio, 1);  /* XRsiz_i */
-        image->comps[i].dy = cio_read(cio, 1);  /* YRsiz_i */
-
-#ifdef USE_JPWL
-        if (j2k->cp->correct) {
-            /* if JPWL is on, we check whether TX errors have damaged
-                too much the SIZ parameters, again */
-            if (!(image->comps[i].dx * image->comps[i].dy)) {
-                opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
-                              "JPWL: bad XRsiz_%d/YRsiz_%d (%d x %d)\n",
-                              i, i, image->comps[i].dx, image->comps[i].dy);
-                if (!JPWL_ASSUME) {
-                    opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
-                    return;
-                }
-                /* we try to correct */
-                opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust them\n");
-                if (!image->comps[i].dx) {
-                    image->comps[i].dx = 1;
-                    opj_event_msg(j2k->cinfo, EVT_WARNING,
-                                  "- setting XRsiz_%d to %d => HYPOTHESIS!!!\n",
-                                  i, image->comps[i].dx);
-                }
-                if (!image->comps[i].dy) {
-                    image->comps[i].dy = 1;
-                    opj_event_msg(j2k->cinfo, EVT_WARNING,
-                                  "- setting YRsiz_%d to %d => HYPOTHESIS!!!\n",
-                                  i, image->comps[i].dy);
-                }
-            }
-
-        }
-#endif /* USE_JPWL */
-
-        /* 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;
-        }
-
-        /* TODO: unused ? */
-        w = int_ceildiv(image->x1 - image->x0, image->comps[i].dx);
-        h = int_ceildiv(image->y1 - image->y0, image->comps[i].dy);
-
-        image->comps[i].resno_decoded = 0;  /* number of resolution decoded */
-        image->comps[i].factor = cp->reduce; /* reducing factor per component */
-    }
-
-    cp->tw = int_ceildiv(image->x1 - cp->tx0, cp->tdx);
-    cp->th = int_ceildiv(image->y1 - cp->ty0, cp->tdy);
-
-#ifdef USE_JPWL
-    if (j2k->cp->correct) {
-        /* if JPWL is on, we check whether TX errors have damaged
-          too much the SIZ parameters */
-        if ((cp->tw < 1) || (cp->th < 1) || (cp->tw > cp->max_tiles) ||
-                (cp->th > cp->max_tiles)) {
-            opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
-                          "JPWL: bad number of tiles (%d x %d)\n",
-                          cp->tw, cp->th);
-            if (!JPWL_ASSUME) {
-                opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
-                return;
-            }
-            /* we try to correct */
-            opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust them\n");
-            if (cp->tw < 1) {
-                cp->tw = 1;
-                opj_event_msg(j2k->cinfo, EVT_WARNING,
-                              "- setting %d tiles in x => HYPOTHESIS!!!\n",
-                              cp->tw);
-            }
-            if (cp->tw > cp->max_tiles) {
-                cp->tw = 1;
-                opj_event_msg(j2k->cinfo, EVT_WARNING,
-                              "- too large x, increase expectance of %d\n"
-                              "- setting %d tiles in x => HYPOTHESIS!!!\n",
-                              cp->max_tiles, cp->tw);
-            }
-            if (cp->th < 1) {
-                cp->th = 1;
-                opj_event_msg(j2k->cinfo, EVT_WARNING,
-                              "- setting %d tiles in y => HYPOTHESIS!!!\n",
-                              cp->th);
-            }
-            if (cp->th > cp->max_tiles) {
-                cp->th = 1;
-                opj_event_msg(j2k->cinfo, EVT_WARNING,
-                              "- too large y, increase expectance of %d to continue\n",
-                              "- setting %d tiles in y => HYPOTHESIS!!!\n",
-                              cp->max_tiles, cp->th);
-            }
-        }
-    }
-#endif /* USE_JPWL */
-
-    cp->tcps = (opj_tcp_t*) opj_calloc(cp->tw * cp->th, sizeof(opj_tcp_t));
-    if (cp->tcps == NULL) {
-        opj_event_msg(j2k->cinfo, EVT_ERROR, "Out of memory\n");
-        return;
-    }
-    cp->tileno = (int*) opj_malloc(sizeof(int) * cp->tw * cp->th);
-    if (cp->tileno == NULL) {
-        opj_event_msg(j2k->cinfo, EVT_ERROR, "Out of memory\n");
-        return;
-    }
-    cp->tileno_size = 0;
-
-#ifdef USE_JPWL
-    if (j2k->cp->correct) {
-        if (!cp->tcps) {
-            opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
-                          "JPWL: could not alloc tcps field of cp\n");
-            if (!JPWL_ASSUME || JPWL_ASSUME) {
-                opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
-                return;
-            }
-        }
-    }
-#endif /* USE_JPWL */
-
-    for (i = 0; i < cp->tw * cp->th; i++) {
-        cp->tcps[i].POC = 0;
-        cp->tcps[i].numpocs = 0;
-        cp->tcps[i].first = 1;
-    }
-
-    /* Initialization for PPM marker */
-    cp->ppm = 0;
-    cp->ppm_data = NULL;
-    cp->ppm_data_first = NULL;
-    cp->ppm_previous = 0;
-    cp->ppm_store = 0;
-
-    j2k->default_tcp->tccps = (opj_tccp_t*) opj_calloc(image->numcomps,
-                              sizeof(opj_tccp_t));
-    for (i = 0; i < cp->tw * cp->th; i++) {
-        cp->tcps[i].tccps = (opj_tccp_t*) opj_malloc(image->numcomps * sizeof(
-                                opj_tccp_t));
-    }
-    j2k->tile_data = (unsigned char**) opj_calloc(cp->tw * cp->th,
-                     sizeof(unsigned char*));
-    j2k->tile_len = (int*) opj_calloc(cp->tw * cp->th, sizeof(int));
-    j2k->state = J2K_STATE_MH;
-
-    /* Index */
-    if (j2k->cstr_info) {
-        opj_codestream_info_t *cstr_info = j2k->cstr_info;
-        cstr_info->image_w = image->x1 - image->x0;
-        cstr_info->image_h = image->y1 - image->y0;
-        cstr_info->numcomps = image->numcomps;
-        cstr_info->tw = cp->tw;
-        cstr_info->th = cp->th;
-        cstr_info->tile_x = cp->tdx;
-        cstr_info->tile_y = cp->tdy;
-        cstr_info->tile_Ox = cp->tx0;
-        cstr_info->tile_Oy = cp->ty0;
-        cstr_info->tile = (opj_tile_info_t*) opj_calloc(cp->tw * cp->th,
-                          sizeof(opj_tile_info_t));
-    }
-}
-
-static void j2k_write_com(opj_j2k_t *j2k)
-{
-    unsigned int i;
-    int lenp, len;
-
-    if (j2k->cp->comment) {
-        opj_cio_t *cio = j2k->cio;
-        char *comment = j2k->cp->comment;
-
-        cio_write(cio, J2K_MS_COM, 2);
-        lenp = cio_tell(cio);
-        cio_skip(cio, 2);
-        cio_write(cio, 1, 2);       /* General use (IS 8859-15:1999 (Latin) values) */
-        for (i = 0; i < strlen(comment); i++) {
-            cio_write(cio, comment[i], 1);
-        }
-        len = cio_tell(cio) - lenp;
-        cio_seek(cio, lenp);
-        cio_write(cio, len, 2);
-        cio_seek(cio, lenp + len);
-
-
-        if (j2k->cstr_info) {
-            j2k_add_mhmarker(j2k->cstr_info, J2K_MS_COM, lenp, len);
-        }
-
-    }
-}
-
-static void j2k_read_com(opj_j2k_t *j2k)
-{
-    int len;
-
-    opj_cio_t *cio = j2k->cio;
-
-    len = cio_read(cio, 2);
-    cio_skip(cio, len - 2);
-}
-
-static void j2k_write_cox(opj_j2k_t *j2k, int compno)
-{
-    int i;
-
-    opj_cp_t *cp = j2k->cp;
-    opj_tcp_t *tcp = &cp->tcps[j2k->curtileno];
-    opj_tccp_t *tccp = &tcp->tccps[compno];
-    opj_cio_t *cio = j2k->cio;
-
-    cio_write(cio, tccp->numresolutions - 1, 1);    /* SPcox (D) */
-    cio_write(cio, tccp->cblkw - 2, 1);             /* SPcox (E) */
-    cio_write(cio, tccp->cblkh - 2, 1);             /* SPcox (F) */
-    cio_write(cio, tccp->cblksty, 1);               /* SPcox (G) */
-    cio_write(cio, tccp->qmfbid, 1);                /* SPcox (H) */
-
-    if (tccp->csty & J2K_CCP_CSTY_PRT) {
-        for (i = 0; i < tccp->numresolutions; i++) {
-            cio_write(cio, tccp->prcw[i] + (tccp->prch[i] << 4), 1);    /* SPcox (I_i) */
-        }
-    }
-}
-
-static void j2k_read_cox(opj_j2k_t *j2k, int compno)
-{
-    int i;
-
-    opj_cp_t *cp = j2k->cp;
-    opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] :
-                     j2k->default_tcp;
-    opj_tccp_t *tccp = &tcp->tccps[compno];
-    opj_cio_t *cio = j2k->cio;
-
-    tccp->numresolutions = cio_read(cio, 1) + 1;    /* SPcox (D) */
-
-    /* If user wants to remove more resolutions than the codestream contains, return error*/
-    if (cp->reduce >= tccp->numresolutions) {
-        opj_event_msg(j2k->cinfo, EVT_ERROR,
-                      "Error decoding component %d.\nThe number of resolutions to remove is higher than the number "
-                      "of resolutions of this component\nModify the cp_reduce parameter.\n\n",
-                      compno);
-        j2k->state |= J2K_STATE_ERR;
-    }
-    if (tccp->numresolutions > J2K_MAXRLVLS) {
-        opj_event_msg(j2k->cinfo, EVT_ERROR,
-                      "Error decoding component %d.\nThe number of resolutions is too big: %d vs max= %d. Truncating.\n\n",
-                      compno, tccp->numresolutions, J2K_MAXRLVLS);
-        j2k->state |= J2K_STATE_ERR;
-        tccp->numresolutions = J2K_MAXRLVLS;
-    }
-
-    tccp->cblkw = cio_read(cio, 1) + 2; /* SPcox (E) */
-    tccp->cblkh = cio_read(cio, 1) + 2; /* SPcox (F) */
-    tccp->cblksty = cio_read(cio, 1);   /* SPcox (G) */
-    tccp->qmfbid = cio_read(cio, 1);    /* SPcox (H) */
-    if (tccp->csty & J2K_CP_CSTY_PRT) {
-        for (i = 0; i < tccp->numresolutions; i++) {
-            int tmp = cio_read(cio, 1); /* SPcox (I_i) */
-            tccp->prcw[i] = tmp & 0xf;
-            tccp->prch[i] = tmp >> 4;
-        }
-    }
-
-    /* INDEX >> */
-    if (j2k->cstr_info && compno == 0) {
-        for (i = 0; i < tccp->numresolutions; i++) {
-            if (tccp->csty & J2K_CP_CSTY_PRT) {
-                j2k->cstr_info->tile[j2k->curtileno].pdx[i] = tccp->prcw[i];
-                j2k->cstr_info->tile[j2k->curtileno].pdy[i] = tccp->prch[i];
-            } else {
-                j2k->cstr_info->tile[j2k->curtileno].pdx[i] = 15;
-                j2k->cstr_info->tile[j2k->curtileno].pdx[i] = 15;
-            }
-        }
-    }
-    /* << INDEX */
-}
-
-static void j2k_write_cod(opj_j2k_t *j2k)
-{
-    opj_cp_t *cp = NULL;
-    opj_tcp_t *tcp = NULL;
-    int lenp, len;
-
-    opj_cio_t *cio = j2k->cio;
-
-    cio_write(cio, J2K_MS_COD, 2);  /* COD */
-
-    lenp = cio_tell(cio);
-    cio_skip(cio, 2);
-
-    cp = j2k->cp;
-    tcp = &cp->tcps[j2k->curtileno];
-
-    cio_write(cio, tcp->csty, 1);       /* Scod */
-    cio_write(cio, tcp->prg, 1);        /* SGcod (A) */
-    cio_write(cio, tcp->numlayers, 2);  /* SGcod (B) */
-    cio_write(cio, tcp->mct, 1);        /* SGcod (C) */
-
-    j2k_write_cox(j2k, 0);
-    len = cio_tell(cio) - lenp;
-    cio_seek(cio, lenp);
-    cio_write(cio, len, 2);     /* Lcod */
-    cio_seek(cio, lenp + len);
-
-    if (j2k->cstr_info) {
-        j2k_add_mhmarker(j2k->cstr_info, J2K_MS_COD, lenp, len);
-    }
-
-}
-
-static void j2k_read_cod(opj_j2k_t *j2k)
-{
-    int len, i, pos;
-
-    opj_cio_t *cio = j2k->cio;
-    opj_cp_t *cp = j2k->cp;
-    opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] :
-                     j2k->default_tcp;
-    opj_image_t *image = j2k->image;
-
-    len = cio_read(cio, 2);             /* Lcod */
-    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) */
-    tcp->mct = cio_read(cio, 1);        /* SGcod (C) */
-
-    pos = cio_tell(cio);
-    for (i = 0; i < image->numcomps; i++) {
-        tcp->tccps[i].csty = tcp->csty & J2K_CP_CSTY_PRT;
-        cio_seek(cio, pos);
-        j2k_read_cox(j2k, i);
-    }
-
-    /* Index */
-    if (j2k->cstr_info) {
-        opj_codestream_info_t *cstr_info = j2k->cstr_info;
-        cstr_info->prog = tcp->prg;
-        cstr_info->numlayers = tcp->numlayers;
-        cstr_info->numdecompos = (int*) opj_malloc(image->numcomps * sizeof(int));
-        for (i = 0; i < image->numcomps; i++) {
-            cstr_info->numdecompos[i] = tcp->tccps[i].numresolutions - 1;
-        }
-    }
-}
-
-static void j2k_write_coc(opj_j2k_t *j2k, int compno)
-{
-    int lenp, len;
-
-    opj_cp_t *cp = j2k->cp;
-    opj_tcp_t *tcp = &cp->tcps[j2k->curtileno];
-    opj_image_t *image = j2k->image;
-    opj_cio_t *cio = j2k->cio;
-
-    cio_write(cio, J2K_MS_COC, 2);  /* COC */
-    lenp = cio_tell(cio);
-    cio_skip(cio, 2);
-    cio_write(cio, compno, image->numcomps <= 256 ? 1 : 2); /* Ccoc */
-    cio_write(cio, tcp->tccps[compno].csty, 1); /* Scoc */
-    j2k_write_cox(j2k, compno);
-    len = cio_tell(cio) - lenp;
-    cio_seek(cio, lenp);
-    cio_write(cio, len, 2);         /* Lcoc */
-    cio_seek(cio, lenp + len);
-}
-
-static void j2k_read_coc(opj_j2k_t *j2k)
-{
-    int len, compno;
-
-    opj_cp_t *cp = j2k->cp;
-    opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] :
-                     j2k->default_tcp;
-    opj_image_t *image = j2k->image;
-    opj_cio_t *cio = j2k->cio;
-
-    len = cio_read(cio, 2);     /* Lcoc */
-    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);
-}
-
-static void j2k_write_qcx(opj_j2k_t *j2k, int compno)
-{
-    int bandno, numbands;
-    int expn, mant;
-
-    opj_cp_t *cp = j2k->cp;
-    opj_tcp_t *tcp = &cp->tcps[j2k->curtileno];
-    opj_tccp_t *tccp = &tcp->tccps[compno];
-    opj_cio_t *cio = j2k->cio;
-
-    cio_write(cio, tccp->qntsty + (tccp->numgbits << 5), 1);    /* Sqcx */
-    numbands = tccp->qntsty == J2K_CCP_QNTSTY_SIQNT ? 1 : tccp->numresolutions * 3 -
-               2;
-
-    for (bandno = 0; bandno < numbands; bandno++) {
-        expn = tccp->stepsizes[bandno].expn;
-        mant = tccp->stepsizes[bandno].mant;
-
-        if (tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) {
-            cio_write(cio, expn << 3, 1);   /* SPqcx_i */
-        } else {
-            cio_write(cio, (expn << 11) + mant, 2); /* SPqcx_i */
-        }
-    }
-}
-
-static void j2k_read_qcx(opj_j2k_t *j2k, int compno, int len)
-{
-    int tmp;
-    int bandno, numbands;
-
-    opj_cp_t *cp = j2k->cp;
-    opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] :
-                     j2k->default_tcp;
-    opj_tccp_t *tccp = &tcp->tccps[compno];
-    opj_cio_t *cio = j2k->cio;
-
-    tmp = cio_read(cio, 1);     /* Sqcx */
-    tccp->qntsty = tmp & 0x1f;
-    tccp->numgbits = tmp >> 5;
-    numbands = (tccp->qntsty == J2K_CCP_QNTSTY_SIQNT) ?
-               1 : ((tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) ? len - 1 : (len - 1) / 2);
-
-#ifdef USE_JPWL
-    if (j2k->cp->correct) {
-
-        /* if JPWL is on, we check whether there are too many subbands */
-        if ((numbands < 0) || (numbands >= J2K_MAXBANDS)) {
-            opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
-                          "JPWL: bad number of subbands in Sqcx (%d)\n",
-                          numbands);
-            if (!JPWL_ASSUME) {
-                opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
-                return;
-            }
-            /* we try to correct */
-            numbands = 1;
-            opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust them\n"
-                          "- setting number of bands to %d => HYPOTHESIS!!!\n",
-                          numbands);
-        };
-
-    };
-
-#else
-    /* We check whether there are too many subbands */
-    if ((numbands < 0) || (numbands >= J2K_MAXBANDS)) {
-        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);
-    }
-
-#endif /* USE_JPWL */
-
-    for (bandno = 0; bandno < numbands; bandno++) {
-        int expn, mant;
-        if (tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) {
-            expn = cio_read(cio, 1) >> 3;   /* SPqcx_i */
-            mant = 0;
-        } else {
-            tmp = cio_read(cio, 2); /* SPqcx_i */
-            expn = tmp >> 11;
-            mant = tmp & 0x7ff;
-        }
-        if (bandno < J2K_MAXBANDS) {
-            tccp->stepsizes[bandno].expn = expn;
-            tccp->stepsizes[bandno].mant = mant;
-        }
-    }
-
-    /* Add Antonin : if scalar_derived -> compute other stepsizes */
-    if (tccp->qntsty == J2K_CCP_QNTSTY_SIQNT) {
-        for (bandno = 1; bandno < J2K_MAXBANDS; bandno++) {
-            tccp->stepsizes[bandno].expn =
-                ((tccp->stepsizes[0].expn) - ((bandno - 1) / 3) > 0) ?
-                (tccp->stepsizes[0].expn) - ((bandno - 1) / 3) : 0;
-            tccp->stepsizes[bandno].mant = tccp->stepsizes[0].mant;
-        }
-    }
-    /* ddA */
-}
-
-static void j2k_write_qcd(opj_j2k_t *j2k)
-{
-    int lenp, len;
-
-    opj_cio_t *cio = j2k->cio;
-
-    cio_write(cio, J2K_MS_QCD, 2);  /* QCD */
-    lenp = cio_tell(cio);
-    cio_skip(cio, 2);
-    j2k_write_qcx(j2k, 0);
-    len = cio_tell(cio) - lenp;
-    cio_seek(cio, lenp);
-    cio_write(cio, len, 2);         /* Lqcd */
-    cio_seek(cio, lenp + len);
-
-    if (j2k->cstr_info) {
-        j2k_add_mhmarker(j2k->cstr_info, J2K_MS_QCD, lenp, len);
-    }
-}
-
-static void j2k_read_qcd(opj_j2k_t *j2k)
-{
-    int len, i, pos;
-
-    opj_cio_t *cio = j2k->cio;
-    opj_image_t *image = j2k->image;
-
-    len = cio_read(cio, 2);     /* Lqcd */
-    pos = cio_tell(cio);
-    for (i = 0; i < image->numcomps; i++) {
-        cio_seek(cio, pos);
-        j2k_read_qcx(j2k, i, len - 2);
-    }
-}
-
-static void j2k_write_qcc(opj_j2k_t *j2k, int compno)
-{
-    int lenp, len;
-
-    opj_cio_t *cio = j2k->cio;
-
-    cio_write(cio, J2K_MS_QCC, 2);  /* QCC */
-    lenp = cio_tell(cio);
-    cio_skip(cio, 2);
-    cio_write(cio, compno, j2k->image->numcomps <= 256 ? 1 : 2);    /* Cqcc */
-    j2k_write_qcx(j2k, compno);
-    len = cio_tell(cio) - lenp;
-    cio_seek(cio, lenp);
-    cio_write(cio, len, 2);         /* Lqcc */
-    cio_seek(cio, lenp + len);
-}
-
-static void j2k_read_qcc(opj_j2k_t *j2k)
-{
-    int len, compno;
-    int numcomp = j2k->image->numcomps;
-    opj_cio_t *cio = j2k->cio;
-
-    len = cio_read(cio, 2); /* Lqcc */
-    compno = cio_read(cio, numcomp <= 256 ? 1 : 2); /* Cqcc */
-
-#ifdef USE_JPWL
-    if (j2k->cp->correct) {
-
-        static int backup_compno = 0;
-
-        /* compno is negative or larger than the number of components!!! */
-        if ((compno < 0) || (compno >= numcomp)) {
-            opj_event_msg(j2k->cinfo, EVT_ERROR,
-                          "JPWL: bad component number in QCC (%d out of a maximum of %d)\n",
-                          compno, numcomp);
-            if (!JPWL_ASSUME) {
-                opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
-                return;
-            }
-            /* we try to correct */
-            compno = backup_compno % numcomp;
-            opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust this\n"
-                          "- setting component number to %d\n",
-                          compno);
-        }
-
-        /* 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));
-}
-
-static void j2k_write_poc(opj_j2k_t *j2k)
-{
-    int len, numpchgs, i;
-
-    int numcomps = j2k->image->numcomps;
-
-    opj_cp_t *cp = j2k->cp;
-    opj_tcp_t *tcp = &cp->tcps[j2k->curtileno];
-    opj_tccp_t *tccp = &tcp->tccps[0];
-    opj_cio_t *cio = j2k->cio;
-
-    numpchgs = 1 + tcp->numpocs;
-    cio_write(cio, J2K_MS_POC, 2);  /* POC  */
-    len = 2 + (5 + 2 * (numcomps <= 256 ? 1 : 2)) * numpchgs;
-    cio_write(cio, len, 2);     /* Lpoc */
-    for (i = 0; i < numpchgs; i++) {
-        opj_poc_t *poc = &tcp->pocs[i];
-        cio_write(cio, poc->resno0, 1); /* RSpoc_i */
-        cio_write(cio, poc->compno0, (numcomps <= 256 ? 1 : 2));    /* CSpoc_i */
-        cio_write(cio, poc->layno1, 2); /* LYEpoc_i */
-        poc->layno1 = int_min(poc->layno1, tcp->numlayers);
-        cio_write(cio, poc->resno1, 1); /* REpoc_i */
-        poc->resno1 = int_min(poc->resno1, tccp->numresolutions);
-        cio_write(cio, poc->compno1, (numcomps <= 256 ? 1 : 2));    /* CEpoc_i */
-        poc->compno1 = int_min(poc->compno1, numcomps);
-        cio_write(cio, poc->prg, 1);    /* Ppoc_i */
-    }
-}
-
-static void j2k_read_poc(opj_j2k_t *j2k)
-{
-    int len, numpchgs, i, old_poc;
-
-    int numcomps = j2k->image->numcomps;
-
-    opj_cp_t *cp = j2k->cp;
-    opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] :
-                     j2k->default_tcp;
-    opj_cio_t *cio = j2k->cio;
-
-    old_poc = tcp->POC ? tcp->numpocs + 1 : 0;
-    tcp->POC = 1;
-    len = cio_read(cio, 2);     /* Lpoc */
-    numpchgs = (len - 2) / (5 + 2 * (numcomps <= 256 ? 1 : 2));
-
-    for (i = old_poc; i < numpchgs + old_poc; i++) {
-        opj_poc_t *poc;
-        poc = &tcp->pocs[i];
-        poc->resno0 = cio_read(cio, 1); /* RSpoc_i */
-        poc->compno0 = cio_read(cio, numcomps <= 256 ? 1 : 2);  /* CSpoc_i */
-        poc->layno1 = cio_read(cio, 2);    /* LYEpoc_i */
-        poc->resno1 = cio_read(cio, 1);    /* REpoc_i */
-        poc->compno1 = int_min(
-                           cio_read(cio, numcomps <= 256 ? 1 : 2),
-                           (unsigned int) numcomps);   /* CEpoc_i */
-        poc->prg = (OPJ_PROG_ORDER)cio_read(cio, 1);    /* Ppoc_i */
-    }
-
-    tcp->numpocs = numpchgs + old_poc - 1;
-}
-
-static void j2k_read_crg(opj_j2k_t *j2k)
-{
-    int len, i, Xcrg_i, Ycrg_i;
-
-    opj_cio_t *cio = j2k->cio;
-    int numcomps = j2k->image->numcomps;
-
-    len = cio_read(cio, 2);         /* Lcrg */
-    for (i = 0; i < numcomps; i++) {
-        Xcrg_i = cio_read(cio, 2);  /* Xcrg_i */
-        Ycrg_i = cio_read(cio, 2);  /* Ycrg_i */
-    }
-}
-
-static void j2k_read_tlm(opj_j2k_t *j2k)
-{
-    int len, Ztlm, Stlm, ST, SP, tile_tlm, i;
-    long int Ttlm_i, Ptlm_i;
-
-    opj_cio_t *cio = j2k->cio;
-
-    len = cio_read(cio, 2);     /* Ltlm */
-    Ztlm = cio_read(cio, 1);    /* 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 */
-        Ptlm_i = cio_read(cio, SP ? 4 : 2); /* Ptlm_i */
-    }
-}
-
-static void j2k_read_plm(opj_j2k_t *j2k)
-{
-    int len, i, Zplm, Nplm, add, packet_len = 0;
-
-    opj_cio_t *cio = j2k->cio;
-
-    len = cio_read(cio, 2);     /* Lplm */
-    Zplm = cio_read(cio, 1);    /* Zplm */
-    len -= 3;
-    while (len > 0) {
-        Nplm = cio_read(cio, 4);        /* Nplm */
-        len -= 4;
-        for (i = Nplm; i > 0; i--) {
-            add = cio_read(cio, 1);
-            len--;
-            packet_len = (packet_len << 7) + add;   /* Iplm_ij */
-            if ((add & 0x80) == 0) {
-                /* New packet */
-                packet_len = 0;
-            }
-            if (len <= 0) {
-                break;
-            }
-        }
-    }
-}
-
-static void j2k_read_plt(opj_j2k_t *j2k)
-{
-    int len, i, Zplt, packet_len = 0, add;
-
-    opj_cio_t *cio = j2k->cio;
-
-    len = cio_read(cio, 2);     /* Lplt */
-    Zplt = cio_read(cio, 1);    /* Zplt */
-    for (i = len - 3; i > 0; i--) {
-        add = cio_read(cio, 1);
-        packet_len = (packet_len << 7) + add;   /* Iplt_i */
-        if ((add & 0x80) == 0) {
-            /* New packet */
-            packet_len = 0;
-        }
-    }
-}
-
-static void j2k_read_ppm(opj_j2k_t *j2k)
-{
-    int len, Z_ppm, i, j;
-    int N_ppm;
-
-    opj_cp_t *cp = j2k->cp;
-    opj_cio_t *cio = j2k->cio;
-
-    len = cio_read(cio, 2);
-    cp->ppm = 1;
-
-    Z_ppm = cio_read(cio, 1);   /* Z_ppm */
-    len -= 3;
-    while (len > 0) {
-        if (cp->ppm_previous == 0) {
-            N_ppm = cio_read(cio, 4);   /* N_ppm */
-            len -= 4;
-        } else {
-            N_ppm = cp->ppm_previous;
-        }
-        j = cp->ppm_store;
-        if (Z_ppm == 0) {   /* First PPM marker */
-            cp->ppm_data = (unsigned char *) opj_malloc(N_ppm * sizeof(unsigned char));
-            cp->ppm_data_first = cp->ppm_data;
-            cp->ppm_len = N_ppm;
-        } else {            /* NON-first PPM marker */
-            cp->ppm_data = (unsigned char *) opj_realloc(cp->ppm_data,
-                           (N_ppm + cp->ppm_store) * sizeof(unsigned char));
-
-#ifdef USE_JPWL
-            /* this memory allocation check could be done even in non-JPWL cases */
-            if (cp->correct) {
-                if (!cp->ppm_data) {
-                    opj_event_msg(j2k->cinfo, EVT_ERROR,
-                                  "JPWL: failed memory allocation during PPM marker parsing (pos. %x)\n",
-                                  cio_tell(cio));
-                    if (!JPWL_ASSUME || JPWL_ASSUME) {
-                        opj_free(cp->ppm_data);
-                        opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
-                        return;
-                    }
-                }
-            }
-#endif
-
-            cp->ppm_data_first = cp->ppm_data;
-            cp->ppm_len = N_ppm + cp->ppm_store;
-        }
-        for (i = N_ppm; i > 0; i--) {   /* Read packet header */
-            cp->ppm_data[j] = cio_read(cio, 1);
-            j++;
-            len--;
-            if (len == 0) {
-                break;    /* Case of non-finished packet header in present marker but finished in next one */
-            }
-        }
-        cp->ppm_previous = i - 1;
-        cp->ppm_store = j;
-    }
-}
-
-static void j2k_read_ppt(opj_j2k_t *j2k)
-{
-    int len, Z_ppt, i, j = 0;
-
-    opj_cp_t *cp = j2k->cp;
-    opj_tcp_t *tcp = cp->tcps + j2k->curtileno;
-    opj_cio_t *cio = j2k->cio;
-
-    len = cio_read(cio, 2);
-    Z_ppt = cio_read(cio, 1);
-    tcp->ppt = 1;
-    if (Z_ppt == 0) {       /* First PPT marker */
-        tcp->ppt_data = (unsigned char *) opj_malloc((len - 3) * sizeof(unsigned char));
-        tcp->ppt_data_first = tcp->ppt_data;
-        tcp->ppt_store = 0;
-        tcp->ppt_len = len - 3;
-    } else {            /* NON-first PPT marker */
-        tcp->ppt_data = (unsigned char *) opj_realloc(tcp->ppt_data,
-                        (len - 3 + tcp->ppt_store) * sizeof(unsigned char));
-        tcp->ppt_data_first = tcp->ppt_data;
-        tcp->ppt_len = len - 3 + tcp->ppt_store;
-    }
-    j = tcp->ppt_store;
-    for (i = len - 3; i > 0; i--) {
-        tcp->ppt_data[j] = cio_read(cio, 1);
-        j++;
-    }
-    tcp->ppt_store = j;
-}
-
-static void j2k_write_tlm(opj_j2k_t *j2k)
-{
-    int lenp;
-    opj_cio_t *cio = j2k->cio;
-    j2k->tlm_start = cio_tell(cio);
-    cio_write(cio, J2K_MS_TLM, 2);/* TLM */
-    lenp = 4 + (5 * j2k->totnum_tp);
-    cio_write(cio, lenp, 2);            /* Ltlm */
-    cio_write(cio, 0, 1);                   /* Ztlm=0*/
-    cio_write(cio, 80,
-              1);                  /* Stlm ST=1(8bits-255 tiles max),SP=1(Ptlm=32bits) */
-    cio_skip(cio, 5 * j2k->totnum_tp);
-}
-
-static void j2k_write_sot(opj_j2k_t *j2k)
-{
-    int lenp, len;
-
-    opj_cio_t *cio = j2k->cio;
-
-    j2k->sot_start = cio_tell(cio);
-    cio_write(cio, J2K_MS_SOT, 2);      /* SOT */
-    lenp = cio_tell(cio);
-    cio_skip(cio, 2);                   /* Lsot (further) */
-    cio_write(cio, j2k->curtileno, 2);  /* Isot */
-    cio_skip(cio, 4);                   /* Psot (further in j2k_write_sod) */
-    cio_write(cio, j2k->cur_tp_num, 1);     /* TPsot */
-    cio_write(cio, j2k->cur_totnum_tp[j2k->curtileno], 1);      /* TNsot */
-    len = cio_tell(cio) - lenp;
-    cio_seek(cio, lenp);
-    cio_write(cio, len, 2);             /* Lsot */
-    cio_seek(cio, lenp + len);
-
-    /* UniPG>> */
-#ifdef USE_JPWL
-    /* update markers struct */
-    j2k_add_marker(j2k->cstr_info, J2K_MS_SOT, j2k->sot_start, len + 2);
-#endif /* USE_JPWL */
-    /* <<UniPG */
-
-    if (j2k->cstr_info && j2k->cur_tp_num == 0) {
-        j2k_add_tlmarker(j2k->curtileno, j2k->cstr_info, J2K_MS_SOT, lenp, len);
-    }
-}
-
-static void j2k_read_sot(opj_j2k_t *j2k)
-{
-    int len, tileno, totlen, partno, numparts, i;
-    opj_tcp_t *tcp = NULL;
-    char status = 0;
-
-    opj_cp_t *cp = j2k->cp;
-    opj_cio_t *cio = j2k->cio;
-
-    len = cio_read(cio, 2);
-    tileno = cio_read(cio, 2);
-
-#ifdef USE_JPWL
-    if (j2k->cp->correct) {
-
-        static int backup_tileno = 0;
-
-        /* tileno is negative or larger than the number of tiles!!! */
-        if ((tileno < 0) || (tileno >= (cp->tw * cp->th))) {
-            opj_event_msg(j2k->cinfo, EVT_ERROR,
-                          "JPWL: bad tile number (%d out of a maximum of %d)\n",
-                          tileno, (cp->tw * cp->th));
-            if (!JPWL_ASSUME) {
-                opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
-                return;
-            }
-            /* we try to correct */
-            tileno = backup_tileno;
-            opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust this\n"
-                          "- setting tile number to %d\n",
-                          tileno);
-        }
-
-        /* keep your private count of tiles */
-        backup_tileno++;
-    } else
-#endif /* USE_JPWL */
-    {
-        /* tileno is negative or larger than the number of tiles!!! */
-        if ((tileno < 0) || (tileno >= (cp->tw * cp->th))) {
-            opj_event_msg(j2k->cinfo, EVT_ERROR,
-                          "JPWL: bad tile number (%d out of a maximum of %d)\n",
-                          tileno, (cp->tw * cp->th));
-            return;
-        }
-    }
-
-    if (cp->tileno_size == 0) {
-        cp->tileno[cp->tileno_size] = tileno;
-        cp->tileno_size++;
-    } else {
-        i = 0;
-        while (i < cp->tileno_size && status == 0) {
-            status = cp->tileno[i] == tileno ? 1 : 0;
-            i++;
-        }
-        if (status == 0) {
-            cp->tileno[cp->tileno_size] = tileno;
-            cp->tileno_size++;
-        }
-    }
-
-    totlen = cio_read(cio, 4);
-
-#ifdef USE_JPWL
-    if (j2k->cp->correct) {
-
-        /* totlen is negative or larger than the bytes left!!! */
-        if ((totlen < 0) || (totlen > (cio_numbytesleft(cio) + 8))) {
-            opj_event_msg(j2k->cinfo, EVT_ERROR,
-                          "JPWL: bad tile byte size (%d bytes against %d bytes left)\n",
-                          totlen, cio_numbytesleft(cio) + 8);
-            if (!JPWL_ASSUME) {
-                opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
-                return;
-            }
-            /* we try to correct */
-            totlen = 0;
-            opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust this\n"
-                          "- setting Psot to %d => assuming it is the last tile\n",
-                          totlen);
-        }
-
-    } else
-#endif /* USE_JPWL */
-    {
-        /* totlen is negative or larger than the bytes left!!! */
-        if ((totlen < 0) || (totlen > (cio_numbytesleft(cio) + 8))) {
-            opj_event_msg(j2k->cinfo, EVT_ERROR,
-                          "JPWL: bad tile byte size (%d bytes against %d bytes left)\n",
-                          totlen, cio_numbytesleft(cio) + 8);
-            return;
-        }
-    }
-
-    if (!totlen) {
-        totlen = cio_numbytesleft(cio) + 8;
-    }
-
-    partno = cio_read(cio, 1);
-    numparts = cio_read(cio, 1);
-
-    if (partno >= numparts) {
-        opj_event_msg(j2k->cinfo, EVT_WARNING,
-                      "SOT marker inconsistency in tile %d: tile-part index greater (%d) than number of tile-parts (%d)\n",
-                      tileno, partno, numparts);
-        numparts = partno + 1;
-    }
-
-    j2k->curtileno = tileno;
-    j2k->cur_tp_num = partno;
-    j2k->eot = cio_getbp(cio) - 12 + totlen;
-    j2k->state = J2K_STATE_TPH;
-    tcp = &cp->tcps[j2k->curtileno];
-
-    /* Index */
-    if (j2k->cstr_info) {
-        if (tcp->first) {
-            if (tileno == 0) {
-                j2k->cstr_info->main_head_end = cio_tell(cio) - 13;
-            }
-            j2k->cstr_info->tile[tileno].tileno = tileno;
-            j2k->cstr_info->tile[tileno].start_pos = cio_tell(cio) - 12;
-            j2k->cstr_info->tile[tileno].end_pos = j2k->cstr_info->tile[tileno].start_pos +
-                                                   totlen - 1;
-        } else {
-            j2k->cstr_info->tile[tileno].end_pos += totlen;
-        }
-        j2k->cstr_info->tile[tileno].num_tps = numparts;
-        if (numparts) {
-            j2k->cstr_info->tile[tileno].tp = (opj_tp_info_t *) opj_realloc(
-                                                  j2k->cstr_info->tile[tileno].tp, numparts * sizeof(opj_tp_info_t));
-        } else {
-            j2k->cstr_info->tile[tileno].tp = (opj_tp_info_t *) opj_realloc(
-                                                  j2k->cstr_info->tile[tileno].tp, 10 * sizeof(opj_tp_info_t));    /* Fixme (10)*/
-        }
-        j2k->cstr_info->tile[tileno].tp[partno].tp_start_pos = cio_tell(cio) - 12;
-        j2k->cstr_info->tile[tileno].tp[partno].tp_end_pos =
-            j2k->cstr_info->tile[tileno].tp[partno].tp_start_pos + totlen - 1;
-    }
-
-    if (tcp->first == 1) {
-        /* Initialization PPT */
-        opj_tccp_t *tmp = tcp->tccps;
-        memcpy(tcp, j2k->default_tcp, sizeof(opj_tcp_t));
-        tcp->ppt = 0;
-        tcp->ppt_data = NULL;
-        tcp->ppt_data_first = NULL;
-        tcp->tccps = tmp;
-
-        for (i = 0; i < j2k->image->numcomps; i++) {
-            tcp->tccps[i] = j2k->default_tcp->tccps[i];
-        }
-        cp->tcps[j2k->curtileno].first = 0;
-    }
-}
-
-static void j2k_write_sod(opj_j2k_t *j2k, void *tile_coder)
-{
-    int l, layno;
-    int totlen;
-    opj_tcp_t *tcp = NULL;
-    opj_codestream_info_t *cstr_info = NULL;
-
-    opj_tcd_t *tcd = (opj_tcd_t*)
-                     tile_coder;    /* cast is needed because of conflicts in header inclusions */
-    opj_cp_t *cp = j2k->cp;
-    opj_cio_t *cio = j2k->cio;
-
-    tcd->tp_num = j2k->tp_num ;
-    tcd->cur_tp_num = j2k->cur_tp_num;
-
-    cio_write(cio, J2K_MS_SOD, 2);
-
-    if (j2k->cstr_info && j2k->cur_tp_num == 0) {
-        j2k_add_tlmarker(j2k->curtileno, j2k->cstr_info, J2K_MS_SOD, cio_tell(cio), 0);
-    }
-
-    if (j2k->curtileno == 0) {
-        j2k->sod_start = cio_tell(cio) + j2k->pos_correction;
-    }
-
-    /* INDEX >> */
-    cstr_info = j2k->cstr_info;
-    if (cstr_info) {
-        if (!j2k->cur_tp_num) {
-            cstr_info->tile[j2k->curtileno].end_header = cio_tell(cio) + j2k->pos_correction
-                    - 1;
-            j2k->cstr_info->tile[j2k->curtileno].tileno = j2k->curtileno;
-        } else {
-            if (cstr_info->tile[j2k->curtileno].packet[cstr_info->packno - 1].end_pos <
-                    cio_tell(cio)) {
-                cstr_info->tile[j2k->curtileno].packet[cstr_info->packno].start_pos = cio_tell(
-                            cio);
-            }
-        }
-        /* UniPG>> */
-#ifdef USE_JPWL
-        /* update markers struct */
-        j2k_add_marker(j2k->cstr_info, J2K_MS_SOD, j2k->sod_start, 2);
-#endif /* USE_JPWL */
-        /* <<UniPG */
-    }
-    /* << INDEX */
-
-    tcp = &cp->tcps[j2k->curtileno];
-    for (layno = 0; layno < tcp->numlayers; layno++) {
-        if (tcp->rates[layno] > (j2k->sod_start / (cp->th * cp->tw))) {
-            tcp->rates[layno] -= (j2k->sod_start / (cp->th * cp->tw));
-        } else if (tcp->rates[layno]) {
-            tcp->rates[layno] = 1;
-        }
-    }
-    if (j2k->cur_tp_num == 0) {
-        tcd->tcd_image->tiles->packno = 0;
-        if (cstr_info) {
-            cstr_info->packno = 0;
-        }
-    }
-
-    l = tcd_encode_tile(tcd, j2k->curtileno, cio_getbp(cio),
-                        cio_numbytesleft(cio) - 2, cstr_info);
-
-    /* Writing Psot in SOT marker */
-    totlen = cio_tell(cio) + l - j2k->sot_start;
-    cio_seek(cio, j2k->sot_start + 6);
-    cio_write(cio, totlen, 4);
-    cio_seek(cio, j2k->sot_start + totlen);
-    /* Writing Ttlm and Ptlm in TLM marker */
-    if (cp->cinema) {
-        cio_seek(cio, j2k->tlm_start + 6 + (5 * j2k->cur_tp_num));
-        cio_write(cio, j2k->curtileno, 1);
-        cio_write(cio, totlen, 4);
-    }
-    cio_seek(cio, j2k->sot_start + totlen);
-}
-
-static void j2k_read_sod(opj_j2k_t *j2k)
-{
-    int len, truncate = 0, i;
-    unsigned char *data = NULL, *data_ptr = NULL;
-
-    opj_cio_t *cio = j2k->cio;
-    int curtileno = j2k->curtileno;
-
-    /* Index */
-    if (j2k->cstr_info) {
-        j2k->cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_end_header =
-            cio_tell(cio) + j2k->pos_correction - 1;
-        if (j2k->cur_tp_num == 0) {
-            j2k->cstr_info->tile[j2k->curtileno].end_header = cio_tell(
-                        cio) + j2k->pos_correction - 1;
-        }
-        j2k->cstr_info->packno = 0;
-    }
-
-    len = int_min(j2k->eot - cio_getbp(cio), cio_numbytesleft(cio) + 1);
-
-    if (len == cio_numbytesleft(cio) + 1) {
-        truncate = 1;       /* Case of a truncate codestream */
-    }
-
-    data = j2k->tile_data[curtileno];
-    data = (unsigned char*) opj_realloc(data,
-                                        (j2k->tile_len[curtileno] + len) * sizeof(unsigned char));
-
-    data_ptr = data + j2k->tile_len[curtileno];
-    for (i = 0; i < len; i++) {
-        data_ptr[i] = cio_read(cio, 1);
-    }
-
-    j2k->tile_len[curtileno] += len;
-    j2k->tile_data[curtileno] = data;
-
-    if (!truncate) {
-        j2k->state = J2K_STATE_TPHSOT;
-    } else {
-        j2k->state = J2K_STATE_NEOC;    /* RAJOUTE !! */
-    }
-    j2k->cur_tp_num++;
-}
-
-static void j2k_write_rgn(opj_j2k_t *j2k, int compno, int tileno)
-{
-    opj_cp_t *cp = j2k->cp;
-    opj_tcp_t *tcp = &cp->tcps[tileno];
-    opj_cio_t *cio = j2k->cio;
-    int numcomps = j2k->image->numcomps;
-
-    cio_write(cio, J2K_MS_RGN, 2);                      /* RGN  */
-    cio_write(cio, numcomps <= 256 ? 5 : 6, 2);         /* Lrgn */
-    cio_write(cio, compno, numcomps <= 256 ? 1 : 2);    /* Crgn */
-    cio_write(cio, 0, 1);                               /* Srgn */
-    cio_write(cio, tcp->tccps[compno].roishift, 1);     /* SPrgn */
-}
-
-static void j2k_read_rgn(opj_j2k_t *j2k)
-{
-    int len, compno, roisty;
-
-    opj_cp_t *cp = j2k->cp;
-    opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] :
-                     j2k->default_tcp;
-    opj_cio_t *cio = j2k->cio;
-    int numcomps = j2k->image->numcomps;
-
-    len = cio_read(cio, 2);                                     /* Lrgn */
-    compno = cio_read(cio, numcomps <= 256 ? 1 : 2);            /* Crgn */
-    roisty = cio_read(cio, 1);                                  /* Srgn */
-
-#ifdef USE_JPWL
-    if (j2k->cp->correct) {
-        /* totlen is negative or larger than the bytes left!!! */
-        if (compno >= numcomps) {
-            opj_event_msg(j2k->cinfo, EVT_ERROR,
-                          "JPWL: bad component number in RGN (%d when there are only %d)\n",
-                          compno, numcomps);
-            if (!JPWL_ASSUME || JPWL_ASSUME) {
-                opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
-                return;
-            }
-        }
-    };
-#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 */
-}
-
-static void j2k_write_eoc(opj_j2k_t *j2k)
-{
-    opj_cio_t *cio = j2k->cio;
-    /* opj_event_msg(j2k->cinfo, "%.8x: EOC\n", cio_tell(cio) + j2k->pos_correction); */
-    cio_write(cio, J2K_MS_EOC, 2);
-
-    /* UniPG>> */
-#ifdef USE_JPWL
-    /* update markers struct */
-    j2k_add_marker(j2k->cstr_info, J2K_MS_EOC, cio_tell(cio) - 2, 2);
-#endif /* USE_JPWL */
-    /* <<UniPG */
-}
-
-static void j2k_read_eoc(opj_j2k_t *j2k)
-{
-    int i, tileno;
-    opj_bool success = OPJ_FALSE;
-
-    /* if packets should be decoded */
-    if (j2k->cp->limit_decoding != DECODE_ALL_BUT_PACKETS) {
-        opj_tcd_t *tcd = tcd_create(j2k->cinfo);
-        tcd_malloc_decode(tcd, j2k->image, j2k->cp);
-        for (i = 0; i < j2k->cp->tileno_size; i++) {
-            tcd_malloc_decode_tile(tcd, j2k->image, j2k->cp, i, j2k->cstr_info);
-            if (j2k->cp->tileno[i] != -1) {
-                tileno = j2k->cp->tileno[i];
-                success = tcd_decode_tile(tcd, j2k->tile_data[tileno], j2k->tile_len[tileno],
-                                          tileno, j2k->cstr_info);
-                opj_free(j2k->tile_data[tileno]);
-                j2k->tile_data[tileno] = NULL;
-                tcd_free_decode_tile(tcd, i);
-            } else {
-                success = OPJ_FALSE;
-            }
-            if (success == OPJ_FALSE) {
-                j2k->state |= J2K_STATE_ERR;
-                break;
-            }
-        }
-        tcd_free_decode(tcd);
-        tcd_destroy(tcd);
-    }
-    /* if packets should not be decoded  */
-    else {
-        for (i = 0; i < j2k->cp->tileno_size; i++) {
-            tileno = j2k->cp->tileno[i];
-            opj_free(j2k->tile_data[tileno]);
-            j2k->tile_data[tileno] = NULL;
-        }
-    }
-    if (j2k->state & J2K_STATE_ERR) {
-        j2k->state = J2K_STATE_MT + J2K_STATE_ERR;
-    } else {
-        j2k->state = J2K_STATE_MT;
-    }
-}
-
-typedef struct opj_dec_mstabent {
-    /** marker value */
-    int id;
-    /** value of the state when the marker can appear */
-    int states;
-    /** action linked to the marker */
-    void (*handler)(opj_j2k_t *j2k);
-} opj_dec_mstabent_t;
-
-opj_dec_mstabent_t j2k_dec_mstab[] = {
-    {J2K_MS_SOC, J2K_STATE_MHSOC, j2k_read_soc},
-    {J2K_MS_SOT, J2K_STATE_MH | J2K_STATE_TPHSOT, j2k_read_sot},
-    {J2K_MS_SOD, J2K_STATE_TPH, j2k_read_sod},
-    {J2K_MS_EOC, J2K_STATE_TPHSOT, j2k_read_eoc},
-    {J2K_MS_SIZ, J2K_STATE_MHSIZ, j2k_read_siz},
-    {J2K_MS_COD, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_cod},
-    {J2K_MS_COC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_coc},
-    {J2K_MS_RGN, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_rgn},
-    {J2K_MS_QCD, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_qcd},
-    {J2K_MS_QCC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_qcc},
-    {J2K_MS_POC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_poc},
-    {J2K_MS_TLM, J2K_STATE_MH, j2k_read_tlm},
-    {J2K_MS_PLM, J2K_STATE_MH, j2k_read_plm},
-    {J2K_MS_PLT, J2K_STATE_TPH, j2k_read_plt},
-    {J2K_MS_PPM, J2K_STATE_MH, j2k_read_ppm},
-    {J2K_MS_PPT, J2K_STATE_TPH, j2k_read_ppt},
-    {J2K_MS_SOP, 0, 0},
-    {J2K_MS_CRG, J2K_STATE_MH, j2k_read_crg},
-    {J2K_MS_COM, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_com},
-
-#ifdef USE_JPWL
-    {J2K_MS_EPC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_epc},
-    {J2K_MS_EPB, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_epb},
-    {J2K_MS_ESD, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_esd},
-    {J2K_MS_RED, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_red},
-#endif /* USE_JPWL */
-#ifdef USE_JPSEC
-    {J2K_MS_SEC, J2K_STATE_MH, j2k_read_sec},
-    {J2K_MS_INSEC, 0, j2k_read_insec},
-#endif /* USE_JPSEC */
-
-    {0, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_unk}
-};
-
-static void j2k_read_unk(opj_j2k_t *j2k)
-{
-    opj_event_msg(j2k->cinfo, EVT_WARNING, "Unknown marker\n");
-
-#ifdef USE_JPWL
-    if (j2k->cp->correct) {
-        int m = 0, id, i;
-        int min_id = 0, min_dist = 17, cur_dist = 0, tmp_id;
-        cio_seek(j2k->cio, cio_tell(j2k->cio) - 2);
-        id = cio_read(j2k->cio, 2);
-        opj_event_msg(j2k->cinfo, EVT_ERROR,
-                      "JPWL: really don't know this marker %x\n",
-                      id);
-        if (!JPWL_ASSUME) {
-            opj_event_msg(j2k->cinfo, EVT_ERROR,
-                          "- possible synch loss due to uncorrectable codestream errors => giving up\n");
-            return;
-        }
-        /* OK, activate this at your own risk!!! */
-        /* we look for the marker at the minimum hamming distance from this */
-        while (j2k_dec_mstab[m].id) {
-
-            /* 1's where they differ */
-            tmp_id = j2k_dec_mstab[m].id ^ id;
-
-            /* compute the hamming distance between our id and the current */
-            cur_dist = 0;
-            for (i = 0; i < 16; i++) {
-                if ((tmp_id >> i) & 0x0001) {
-                    cur_dist++;
-                }
-            }
-
-            /* if current distance is smaller, set the minimum */
-            if (cur_dist < min_dist) {
-                min_dist = cur_dist;
-                min_id = j2k_dec_mstab[m].id;
-            }
-
-            /* jump to the next marker */
-            m++;
-        }
-
-        /* do we substitute the marker? */
-        if (min_dist < JPWL_MAXIMUM_HAMMING) {
-            opj_event_msg(j2k->cinfo, EVT_ERROR,
-                          "- marker %x is at distance %d from the read %x\n",
-                          min_id, min_dist, id);
-            opj_event_msg(j2k->cinfo, EVT_ERROR,
-                          "- trying to substitute in place and crossing fingers!\n");
-            cio_seek(j2k->cio, cio_tell(j2k->cio) - 2);
-            cio_write(j2k->cio, min_id, 2);
-
-            /* rewind */
-            cio_seek(j2k->cio, cio_tell(j2k->cio) - 2);
-
-        }
-
-    };
-#endif /* USE_JPWL */
-
-}
-
-/**
-Read the lookup table containing all the marker, status and action
-@param id Marker value
-*/
-static opj_dec_mstabent_t *j2k_dec_mstab_lookup(int id)
-{
-    opj_dec_mstabent_t *e;
-    for (e = j2k_dec_mstab; e->id != 0; e++) {
-        if (e->id == id) {
-            break;
-        }
-    }
-    return e;
-}
-
-/* ----------------------------------------------------------------------- */
-/* J2K / JPT decoder interface                                             */
-/* ----------------------------------------------------------------------- */
-
-opj_j2k_t* j2k_create_decompress(opj_common_ptr cinfo)
-{
-    opj_j2k_t *j2k = (opj_j2k_t*) opj_calloc(1, sizeof(opj_j2k_t));
-    if (!j2k) {
-        return NULL;
-    }
-
-    j2k->default_tcp = (opj_tcp_t*) opj_calloc(1, sizeof(opj_tcp_t));
-    if (!j2k->default_tcp) {
-        opj_free(j2k);
-        return NULL;
-    }
-
-    j2k->cinfo = cinfo;
-    j2k->tile_data = NULL;
-
-    return j2k;
-}
-
-void j2k_destroy_decompress(opj_j2k_t *j2k)
-{
-    int i = 0;
-
-    if (j2k->tile_len != NULL) {
-        opj_free(j2k->tile_len);
-    }
-    if (j2k->tile_data != NULL) {
-        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;
-            }
-        }
-
-        opj_free(j2k->tile_data);
-    }
-    if (j2k->default_tcp != NULL) {
-        opj_tcp_t *default_tcp = j2k->default_tcp;
-        if (default_tcp->ppt_data_first != NULL) {
-            opj_free(default_tcp->ppt_data_first);
-        }
-        if (j2k->default_tcp->tccps != NULL) {
-            opj_free(j2k->default_tcp->tccps);
-        }
-        opj_free(j2k->default_tcp);
-    }
-    if (j2k->cp != NULL) {
-        opj_cp_t *cp = j2k->cp;
-        if (cp->tcps != NULL) {
-            for (i = 0; i < cp->tw * cp->th; i++) {
-                if (cp->tcps[i].ppt_data_first != NULL) {
-                    opj_free(cp->tcps[i].ppt_data_first);
-                }
-                if (cp->tcps[i].tccps != NULL) {
-                    opj_free(cp->tcps[i].tccps);
-                }
-            }
-            opj_free(cp->tcps);
-        }
-        if (cp->ppm_data_first != NULL) {
-            opj_free(cp->ppm_data_first);
-        }
-        if (cp->tileno != NULL) {
-            opj_free(cp->tileno);
-        }
-        if (cp->comment != NULL) {
-            opj_free(cp->comment);
-        }
-
-        opj_free(cp);
-    }
-    opj_free(j2k);
-}
-
-void j2k_setup_decoder(opj_j2k_t *j2k, opj_dparameters_t *parameters)
-{
-    if (j2k && parameters) {
-        /* create and initialize the coding parameters structure */
-        opj_cp_t *cp = (opj_cp_t*) opj_calloc(1, sizeof(opj_cp_t));
-        cp->reduce = parameters->cp_reduce;
-        cp->layer = parameters->cp_layer;
-        cp->limit_decoding = parameters->cp_limit_decoding;
-
-#ifdef USE_JPWL
-        cp->correct = parameters->jpwl_correct;
-        cp->exp_comps = parameters->jpwl_exp_comps;
-        cp->max_tiles = parameters->jpwl_max_tiles;
-#endif /* USE_JPWL */
-
-
-        /* keep a link to cp so that we can destroy it later in j2k_destroy_decompress */
-        j2k->cp = cp;
-    }
-}
-
-opj_image_t* j2k_decode(opj_j2k_t *j2k, opj_cio_t *cio,
-                        opj_codestream_info_t *cstr_info)
-{
-    opj_image_t *image = NULL;
-
-    opj_common_ptr cinfo = j2k->cinfo;
-
-    j2k->cio = cio;
-    j2k->cstr_info = cstr_info;
-    if (cstr_info) {
-        memset(cstr_info, 0, sizeof(opj_codestream_info_t));
-    }
-
-    /* create an empty image */
-    image = opj_image_create0();
-    j2k->image = image;
-
-    j2k->state = J2K_STATE_MHSOC;
-
-    for (;;) {
-        opj_dec_mstabent_t *e;
-        int id = cio_read(cio, 2);
-
-#ifdef USE_JPWL
-        /* we try to honor JPWL correction power */
-        if (j2k->cp->correct) {
-
-            int orig_pos = cio_tell(cio);
-            opj_bool status;
-
-            /* call the corrector */
-            status = jpwl_correct(j2k);
-
-            /* go back to where you were */
-            cio_seek(cio, orig_pos - 2);
-
-            /* re-read the marker */
-            id = cio_read(cio, 2);
-
-            /* check whether it begins with ff */
-            if (id >> 8 != 0xff) {
-                opj_event_msg(cinfo, EVT_ERROR,
-                              "JPWL: possible bad marker %x at %d\n",
-                              id, cio_tell(cio) - 2);
-                if (!JPWL_ASSUME) {
-                    opj_image_destroy(image);
-                    opj_event_msg(cinfo, EVT_ERROR, "JPWL: giving up\n");
-                    return 0;
-                }
-                /* we try to correct */
-                id = id | 0xff00;
-                cio_seek(cio, cio_tell(cio) - 2);
-                cio_write(cio, id, 2);
-                opj_event_msg(cinfo, EVT_WARNING, "- trying to adjust this\n"
-                              "- setting marker to %x\n",
-                              id);
-            }
-
-        }
-#endif /* USE_JPWL */
-
-        if (id >> 8 != 0xff) {
-            if (cio_numbytesleft(cio) != 0) { /* not end of file reached and no EOC */
-                opj_event_msg(cinfo, EVT_ERROR, "%.8x: expected a marker instead of %x\n",
-                              cio_tell(cio) - 2, id);
-                opj_image_destroy(image);
-                return 0;
-            }
-            opj_event_msg(cinfo, EVT_WARNING, "%.8x: expected a marker instead of %x\n",
-                          cio_tell(cio) - 2, id);
-            j2k->state = J2K_STATE_NEOC;
-            break;
-        }
-        e = j2k_dec_mstab_lookup(id);
-        /* Check if the marker is known*/
-        if (!(j2k->state & e->states)) {
-            opj_image_destroy(image);
-            opj_event_msg(cinfo, EVT_ERROR, "%.8x: unexpected marker %x\n",
-                          cio_tell(cio) - 2, id);
-            return 0;
-        }
-        /* Check if the decoding is limited to the main header*/
-        if (e->id == J2K_MS_SOT && j2k->cp->limit_decoding == LIMIT_TO_MAIN_HEADER) {
-            opj_event_msg(cinfo, EVT_INFO, "Main Header decoded.\n");
-            return image;
-        }
-
-        if (e->handler) {
-            (*e->handler)(j2k);
-        }
-        if (j2k->state & J2K_STATE_ERR) {
-            opj_image_destroy(image);
-            return NULL;
-        }
-
-        if (j2k->state == J2K_STATE_MT) {
-            break;
-        }
-        if (j2k->state == J2K_STATE_NEOC) {
-            break;
-        }
-    }
-    if (j2k->state == J2K_STATE_NEOC) {
-        j2k_read_eoc(j2k);
-    }
-
-    if (j2k->state != J2K_STATE_MT) {
-        opj_event_msg(cinfo, EVT_WARNING, "Incomplete bitstream\n");
-    }
-    return image;
-}
-
-/*
-* Read a JPT-stream and decode file
-*
-*/
-opj_image_t* j2k_decode_jpt_stream(opj_j2k_t *j2k, opj_cio_t *cio,
-                                   opj_codestream_info_t *cstr_info)
-{
-    opj_image_t *image = NULL;
-    opj_jpt_msg_header_t header;
-    int position;
-    opj_common_ptr cinfo = j2k->cinfo;
-
-    OPJ_ARG_NOT_USED(cstr_info);
-
-    j2k->cio = cio;
-
-    /* create an empty image */
-    image = opj_image_create0();
-    j2k->image = image;
-
-    j2k->state = J2K_STATE_MHSOC;
-
-    /* Initialize the header */
-    jpt_init_msg_header(&header);
-    /* Read the first header of the message */
-    jpt_read_msg_header(cinfo, cio, &header);
-
-    position = cio_tell(cio);
-    if (header.Class_Id != 6) { /* 6 : Main header data-bin message */
-        opj_image_destroy(image);
-        opj_event_msg(cinfo, EVT_ERROR,
-                      "[JPT-stream] : Expecting Main header first [class_Id %d] !\n",
-                      header.Class_Id);
-        return 0;
-    }
-
-    for (;;) {
-        opj_dec_mstabent_t *e = NULL;
-        int id;
-
-        if (!cio_numbytesleft(cio)) {
-            j2k_read_eoc(j2k);
-            return image;
-        }
-        /* data-bin read -> need to read a new header */
-        if ((unsigned int)(cio_tell(cio) - position) == header.Msg_length) {
-            jpt_read_msg_header(cinfo, cio, &header);
-            position = cio_tell(cio);
-            if (header.Class_Id != 4) { /* 4 : Tile data-bin message */
-                opj_image_destroy(image);
-                opj_event_msg(cinfo, EVT_ERROR, "[JPT-stream] : Expecting Tile info !\n");
-                return 0;
-            }
-        }
-
-        id = cio_read(cio, 2);
-        if (id >> 8 != 0xff) {
-            if (cio_numbytesleft(cio) != 0) { /* no end of file reached and no EOC */
-                opj_event_msg(cinfo, EVT_ERROR, "%.8x: expected a marker instead of %x\n",
-                              cio_tell(cio) - 2, id);
-                opj_image_destroy(image);
-                return 0;
-            }
-            opj_event_msg(cinfo, EVT_WARNING, "%.8x: expected a marker instead of %x\n",
-                          cio_tell(cio) - 2, id);
-            j2k->state = J2K_STATE_NEOC;
-            break;
-        }
-        e = j2k_dec_mstab_lookup(id);
-        if (!(j2k->state & e->states)) {
-            opj_image_destroy(image);
-            opj_event_msg(cinfo, EVT_ERROR, "%.8x: unexpected marker %x\n",
-                          cio_tell(cio) - 2, id);
-            return 0;
-        }
-        if (e->handler) {
-            (*e->handler)(j2k);
-        }
-        if (j2k->state == J2K_STATE_MT) {
-            break;
-        }
-        if (j2k->state == J2K_STATE_NEOC) {
-            break;
-        }
-    }
-    if (j2k->state == J2K_STATE_NEOC) {
-        j2k_read_eoc(j2k);
-    }
-
-    if (j2k->state != J2K_STATE_MT) {
-        opj_event_msg(cinfo, EVT_WARNING, "Incomplete bitstream\n");
-    }
-
-    return image;
-}
-
-/* ----------------------------------------------------------------------- */
-/* J2K encoder interface                                                       */
-/* ----------------------------------------------------------------------- */
-
-opj_j2k_t* j2k_create_compress(opj_common_ptr cinfo)
-{
-    opj_j2k_t *j2k = (opj_j2k_t*) opj_calloc(1, sizeof(opj_j2k_t));
-    if (j2k) {
-        j2k->cinfo = cinfo;
-    }
-    return j2k;
-}
-
-void j2k_destroy_compress(opj_j2k_t *j2k)
-{
-    int tileno;
-
-    if (!j2k) {
-        return;
-    }
-    if (j2k->cp != NULL) {
-        opj_cp_t *cp = j2k->cp;
-
-        if (cp->comment) {
-            opj_free(cp->comment);
-        }
-        if (cp->matrice) {
-            opj_free(cp->matrice);
-        }
-        for (tileno = 0; tileno < cp->tw * cp->th; tileno++) {
-            opj_free(cp->tcps[tileno].tccps);
-        }
-        opj_free(cp->tcps);
-        opj_free(cp);
-    }
-
-    opj_free(j2k);
-}
-
-void j2k_setup_encoder(opj_j2k_t *j2k, opj_cparameters_t *parameters,
-                       opj_image_t *image)
-{
-    int i, j, tileno, numpocs_tile;
-    opj_cp_t *cp = NULL;
-
-    if (!j2k || !parameters || ! image) {
-        return;
-    }
-
-    /* create and initialize the coding parameters structure */
-    cp = (opj_cp_t*) opj_calloc(1, sizeof(opj_cp_t));
-
-    /* keep a link to cp so that we can destroy it later in j2k_destroy_compress */
-    j2k->cp = cp;
-
-    /* set default values for cp */
-    cp->tw = 1;
-    cp->th = 1;
-
-    /*
-    copy user encoding parameters
-    */
-    cp->cinema = parameters->cp_cinema;
-    cp->max_comp_size = parameters->max_comp_size;
-    cp->rsiz   = parameters->cp_rsiz;
-    cp->disto_alloc = parameters->cp_disto_alloc;
-    cp->fixed_alloc = parameters->cp_fixed_alloc;
-    cp->fixed_quality = parameters->cp_fixed_quality;
-
-    /* mod fixed_quality */
-    if (parameters->cp_matrice) {
-        size_t array_size = parameters->tcp_numlayers * parameters->numresolution * 3 *
-                            sizeof(int);
-        cp->matrice = (int *) opj_malloc(array_size);
-        memcpy(cp->matrice, parameters->cp_matrice, array_size);
-    }
-
-    /* tiles */
-    cp->tdx = parameters->cp_tdx;
-    cp->tdy = parameters->cp_tdy;
-
-    /* tile offset */
-    cp->tx0 = parameters->cp_tx0;
-    cp->ty0 = parameters->cp_ty0;
-
-    /* comment string */
-    if (parameters->cp_comment) {
-        cp->comment = (char*)opj_malloc(strlen(parameters->cp_comment) + 1);
-        if (cp->comment) {
-            strcpy(cp->comment, parameters->cp_comment);
-        }
-    }
-
-    /*
-    calculate other encoding parameters
-    */
-
-    if (parameters->tile_size_on) {
-        cp->tw = int_ceildiv(image->x1 - cp->tx0, cp->tdx);
-        cp->th = int_ceildiv(image->y1 - cp->ty0, cp->tdy);
-    } else {
-        cp->tdx = image->x1 - cp->tx0;
-        cp->tdy = image->y1 - cp->ty0;
-    }
-
-    if (parameters->tp_on) {
-        cp->tp_flag = parameters->tp_flag;
-        cp->tp_on = 1;
-    }
-
-    cp->img_size = 0;
-    for (i = 0; i < image->numcomps ; i++) {
-        cp->img_size += (image->comps[i].w * image->comps[i].h * image->comps[i].prec);
-    }
-
-
-#ifdef USE_JPWL
-    /*
-    calculate JPWL encoding parameters
-    */
-
-    if (parameters->jpwl_epc_on) {
-        int i;
-
-        /* set JPWL on */
-        cp->epc_on = OPJ_TRUE;
-        cp->info_on = OPJ_FALSE; /* no informative technique */
-
-        /* set EPB on */
-        if ((parameters->jpwl_hprot_MH > 0) || (parameters->jpwl_hprot_TPH[0] > 0)) {
-            cp->epb_on = OPJ_TRUE;
-
-            cp->hprot_MH = parameters->jpwl_hprot_MH;
-            for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) {
-                cp->hprot_TPH_tileno[i] = parameters->jpwl_hprot_TPH_tileno[i];
-                cp->hprot_TPH[i] = parameters->jpwl_hprot_TPH[i];
-            }
-            /* if tile specs are not specified, copy MH specs */
-            if (cp->hprot_TPH[0] == -1) {
-                cp->hprot_TPH_tileno[0] = 0;
-                cp->hprot_TPH[0] = parameters->jpwl_hprot_MH;
-            }
-            for (i = 0; i < JPWL_MAX_NO_PACKSPECS; i++) {
-                cp->pprot_tileno[i] = parameters->jpwl_pprot_tileno[i];
-                cp->pprot_packno[i] = parameters->jpwl_pprot_packno[i];
-                cp->pprot[i] = parameters->jpwl_pprot[i];
-            }
-        }
-
-        /* set ESD writing */
-        if ((parameters->jpwl_sens_size == 1) || (parameters->jpwl_sens_size == 2)) {
-            cp->esd_on = OPJ_TRUE;
-
-            cp->sens_size = parameters->jpwl_sens_size;
-            cp->sens_addr = parameters->jpwl_sens_addr;
-            cp->sens_range = parameters->jpwl_sens_range;
-
-            cp->sens_MH = parameters->jpwl_sens_MH;
-            for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) {
-                cp->sens_TPH_tileno[i] = parameters->jpwl_sens_TPH_tileno[i];
-                cp->sens_TPH[i] = parameters->jpwl_sens_TPH[i];
-            }
-        }
-
-        /* always set RED writing to false: we are at the encoder */
-        cp->red_on = OPJ_FALSE;
-
-    } else {
-        cp->epc_on = OPJ_FALSE;
-    }
-#endif /* USE_JPWL */
-
-
-    /* initialize the multiple tiles */
-    /* ---------------------------- */
-    cp->tcps = (opj_tcp_t*) opj_calloc(cp->tw * cp->th, sizeof(opj_tcp_t));
-
-    for (tileno = 0; tileno < cp->tw * cp->th; tileno++) {
-        opj_tcp_t *tcp = &cp->tcps[tileno];
-        tcp->numlayers = parameters->tcp_numlayers;
-        for (j = 0; j < tcp->numlayers; j++) {
-            if (cp->cinema) {
-                if (cp->fixed_quality) {
-                    tcp->distoratio[j] = parameters->tcp_distoratio[j];
-                }
-                tcp->rates[j] = parameters->tcp_rates[j];
-            } else {
-                if (cp->fixed_quality) {    /* add fixed_quality */
-                    tcp->distoratio[j] = parameters->tcp_distoratio[j];
-                } else {
-                    tcp->rates[j] = parameters->tcp_rates[j];
-                }
-            }
-        }
-        tcp->csty = parameters->csty;
-        tcp->prg = parameters->prog_order;
-        tcp->mct = parameters->tcp_mct;
-
-        numpocs_tile = 0;
-        tcp->POC = 0;
-        if (parameters->numpocs) {
-            /* initialisation of POC */
-            tcp->POC = 1;
-            for (i = 0; i < parameters->numpocs; i++) {
-                if ((tileno == parameters->POC[i].tile - 1) ||
-                        (parameters->POC[i].tile == -1)) {
-                    opj_poc_t *tcp_poc = &tcp->pocs[numpocs_tile];
-                    tcp_poc->resno0     = parameters->POC[numpocs_tile].resno0;
-                    tcp_poc->compno0    = parameters->POC[numpocs_tile].compno0;
-                    tcp_poc->layno1     = parameters->POC[numpocs_tile].layno1;
-                    tcp_poc->resno1     = parameters->POC[numpocs_tile].resno1;
-                    tcp_poc->compno1    = parameters->POC[numpocs_tile].compno1;
-                    tcp_poc->prg1       = parameters->POC[numpocs_tile].prg1;
-                    tcp_poc->tile       = parameters->POC[numpocs_tile].tile;
-                    numpocs_tile++;
-                }
-            }
-            tcp->numpocs = numpocs_tile - 1 ;
-        } else {
-            tcp->numpocs = 0;
-        }
-
-        tcp->tccps = (opj_tccp_t*) opj_calloc(image->numcomps, sizeof(opj_tccp_t));
-
-        for (i = 0; i < image->numcomps; i++) {
-            opj_tccp_t *tccp = &tcp->tccps[i];
-            tccp->csty = parameters->csty &
-                         0x01;   /* 0 => one precinct || 1 => custom precinct  */
-            tccp->numresolutions = parameters->numresolution;
-            tccp->cblkw = int_floorlog2(parameters->cblockw_init);
-            tccp->cblkh = int_floorlog2(parameters->cblockh_init);
-            tccp->cblksty = parameters->mode;
-            tccp->qmfbid = parameters->irreversible ? 0 : 1;
-            tccp->qntsty = parameters->irreversible ? J2K_CCP_QNTSTY_SEQNT :
-                           J2K_CCP_QNTSTY_NOQNT;
-            tccp->numgbits = 2;
-            if (i == parameters->roi_compno) {
-                tccp->roishift = parameters->roi_shift;
-            } else {
-                tccp->roishift = 0;
-            }
-
-            if (parameters->cp_cinema) {
-                /*Precinct size for lowest frequency subband=128*/
-                tccp->prcw[0] = 7;
-                tccp->prch[0] = 7;
-                /*Precinct size at all other resolutions = 256*/
-                for (j = 1; j < tccp->numresolutions; j++) {
-                    tccp->prcw[j] = 8;
-                    tccp->prch[j] = 8;
-                }
-            } else {
-                if (parameters->csty & J2K_CCP_CSTY_PRT) {
-                    int p = 0;
-                    for (j = tccp->numresolutions - 1; j >= 0; j--) {
-                        if (p < parameters->res_spec) {
-
-                            if (parameters->prcw_init[p] < 1) {
-                                tccp->prcw[j] = 1;
-                            } else {
-                                tccp->prcw[j] = int_floorlog2(parameters->prcw_init[p]);
-                            }
-
-                            if (parameters->prch_init[p] < 1) {
-                                tccp->prch[j] = 1;
-                            } else {
-                                tccp->prch[j] = int_floorlog2(parameters->prch_init[p]);
-                            }
-
-                        } else {
-                            int res_spec = parameters->res_spec;
-                            int size_prcw = parameters->prcw_init[res_spec - 1] >> (p - (res_spec - 1));
-                            int size_prch = parameters->prch_init[res_spec - 1] >> (p - (res_spec - 1));
-
-                            if (size_prcw < 1) {
-                                tccp->prcw[j] = 1;
-                            } else {
-                                tccp->prcw[j] = int_floorlog2(size_prcw);
-                            }
-
-                            if (size_prch < 1) {
-                                tccp->prch[j] = 1;
-                            } else {
-                                tccp->prch[j] = int_floorlog2(size_prch);
-                            }
-                        }
-                        p++;
-                        /*printf("\nsize precinct for level %d : %d,%d\n", j,tccp->prcw[j], tccp->prch[j]); */
-                    }   /*end for*/
-                } else {
-                    for (j = 0; j < tccp->numresolutions; j++) {
-                        tccp->prcw[j] = 15;
-                        tccp->prch[j] = 15;
-                    }
-                }
-            }
-
-            dwt_calc_explicit_stepsizes(tccp, image->comps[i].prec);
-        }
-    }
-}
-
-opj_bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image,
-                    opj_codestream_info_t *cstr_info)
-{
-    int tileno, compno;
-    opj_cp_t *cp = NULL;
-
-    opj_tcd_t *tcd = NULL;  /* TCD component */
-
-    j2k->cio = cio;
-    j2k->image = image;
-
-    cp = j2k->cp;
-
-    /* INDEX >> */
-    j2k->cstr_info = cstr_info;
-    if (cstr_info) {
-        int compno;
-        cstr_info->tile = (opj_tile_info_t *) opj_malloc(cp->tw * cp->th * sizeof(
-                              opj_tile_info_t));
-        cstr_info->image_w = image->x1 - image->x0;
-        cstr_info->image_h = image->y1 - image->y0;
-        cstr_info->prog = (&cp->tcps[0])->prg;
-        cstr_info->tw = cp->tw;
-        cstr_info->th = cp->th;
-        cstr_info->tile_x = cp->tdx;    /* new version parser */
-        cstr_info->tile_y = cp->tdy;    /* new version parser */
-        cstr_info->tile_Ox = cp->tx0;   /* new version parser */
-        cstr_info->tile_Oy = cp->ty0;   /* new version parser */
-        cstr_info->numcomps = image->numcomps;
-        cstr_info->numlayers = (&cp->tcps[0])->numlayers;
-        cstr_info->numdecompos = (int*) opj_malloc(image->numcomps * sizeof(int));
-        for (compno = 0; compno < image->numcomps; compno++) {
-            cstr_info->numdecompos[compno] = (&cp->tcps[0])->tccps->numresolutions - 1;
-        }
-        cstr_info->D_max = 0.0;     /* ADD Marcela */
-        cstr_info->main_head_start = cio_tell(cio); /* position of SOC */
-        cstr_info->maxmarknum = 100;
-        cstr_info->marker = (opj_marker_info_t *) opj_malloc(cstr_info->maxmarknum *
-                            sizeof(opj_marker_info_t));
-        cstr_info->marknum = 0;
-    }
-    /* << INDEX */
-
-    j2k_write_soc(j2k);
-    j2k_write_siz(j2k);
-    j2k_write_cod(j2k);
-    j2k_write_qcd(j2k);
-
-    if (cp->cinema) {
-        for (compno = 1; compno < image->numcomps; compno++) {
-            j2k_write_coc(j2k, compno);
-            j2k_write_qcc(j2k, compno);
-        }
-    }
-
-    for (compno = 0; compno < image->numcomps; compno++) {
-        opj_tcp_t *tcp = &cp->tcps[0];
-        if (tcp->tccps[compno].roishift) {
-            j2k_write_rgn(j2k, compno, 0);
-        }
-    }
-    if (cp->comment != NULL) {
-        j2k_write_com(j2k);
-    }
-
-    j2k->totnum_tp = j2k_calculate_tp(cp, image->numcomps, image, j2k);
-    /* TLM Marker*/
-    if (cp->cinema) {
-        j2k_write_tlm(j2k);
-        if (cp->cinema == CINEMA4K_24) {
-            j2k_write_poc(j2k);
-        }
-    }
-
-    /* uncomment only for testing JPSEC marker writing */
-    /* j2k_write_sec(j2k); */
-
-    /* INDEX >> */
-    if (cstr_info) {
-        cstr_info->main_head_end = cio_tell(cio) - 1;
-    }
-    /* << INDEX */
-    /**** Main Header ENDS here ***/
-
-    /* create the tile encoder */
-    tcd = tcd_create(j2k->cinfo);
-
-    /* encode each tile */
-    for (tileno = 0; tileno < cp->tw * cp->th; tileno++) {
-        int pino;
-        int tilepartno = 0;
-        /* UniPG>> */
-        int acc_pack_num = 0;
-        /* <<UniPG */
-
-
-        opj_tcp_t *tcp = &cp->tcps[tileno];
-        opj_event_msg(j2k->cinfo, EVT_INFO, "tile number %d / %d\n", tileno + 1,
-                      cp->tw * cp->th);
-
-        j2k->curtileno = tileno;
-        j2k->cur_tp_num = 0;
-        tcd->cur_totnum_tp = j2k->cur_totnum_tp[j2k->curtileno];
-        /* initialisation before tile encoding  */
-        if (tileno == 0) {
-            tcd_malloc_encode(tcd, image, cp, j2k->curtileno);
-        } else {
-            tcd_init_encode(tcd, image, cp, j2k->curtileno);
-        }
-
-        /* INDEX >> */
-        if (cstr_info) {
-            cstr_info->tile[j2k->curtileno].start_pos = cio_tell(cio) + j2k->pos_correction;
-            cstr_info->tile[j2k->curtileno].maxmarknum = 10;
-            cstr_info->tile[j2k->curtileno].marker = (opj_marker_info_t *) opj_malloc(
-                        cstr_info->tile[j2k->curtileno].maxmarknum * sizeof(opj_marker_info_t));
-            cstr_info->tile[j2k->curtileno].marknum = 0;
-        }
-        /* << INDEX */
-
-        for (pino = 0; pino <= tcp->numpocs; pino++) {
-            int tot_num_tp;
-            tcd->cur_pino = pino;
-
-            /*Get number of tile parts*/
-            tot_num_tp = j2k_get_num_tp(cp, pino, tileno);
-            tcd->tp_pos = cp->tp_pos;
-
-            for (tilepartno = 0; tilepartno < tot_num_tp ; tilepartno++) {
-                j2k->tp_num = tilepartno;
-                /* INDEX >> */
-                if (cstr_info)
-                    cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_start_pos =
-                        cio_tell(cio) + j2k->pos_correction;
-                /* << INDEX */
-                j2k_write_sot(j2k);
-
-                if (j2k->cur_tp_num == 0 && cp->cinema == 0) {
-                    for (compno = 1; compno < image->numcomps; compno++) {
-                        j2k_write_coc(j2k, compno);
-                        j2k_write_qcc(j2k, compno);
-                    }
-                    if (cp->tcps[tileno].numpocs) {
-                        j2k_write_poc(j2k);
-                    }
-                }
-
-                /* INDEX >> */
-                if (cstr_info)
-                    cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_end_header =
-                        cio_tell(cio) + j2k->pos_correction + 1;
-                /* << INDEX */
-
-                j2k_write_sod(j2k, tcd);
-
-                /* INDEX >> */
-                if (cstr_info) {
-                    cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_end_pos =
-                        cio_tell(cio) + j2k->pos_correction - 1;
-                    cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_start_pack =
-                        acc_pack_num;
-                    cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_numpacks =
-                        cstr_info->packno - acc_pack_num;
-                    acc_pack_num = cstr_info->packno;
-                }
-                /* << INDEX */
-
-                j2k->cur_tp_num++;
-            }
-        }
-        if (cstr_info) {
-            cstr_info->tile[j2k->curtileno].end_pos = cio_tell(cio) + j2k->pos_correction -
-                    1;
-        }
-
-
-        /*
-        if (tile->PPT) { // BAD PPT !!!
-        FILE *PPT_file;
-        int i;
-        PPT_file=fopen("PPT","rb");
-        fprintf(stderr,"%c%c%c%c",255,97,tile->len_ppt/256,tile->len_ppt%256);
-        for (i=0;i<tile->len_ppt;i++) {
-        unsigned char elmt;
-        fread(&elmt, 1, 1, PPT_file);
-        fwrite(&elmt,1,1,f);
-        }
-        fclose(PPT_file);
-        unlink("PPT");
-        }
-        */
-
-    }
-
-    /* destroy the tile encoder */
-    tcd_free_encode(tcd);
-    tcd_destroy(tcd);
-
-    opj_free(j2k->cur_totnum_tp);
-
-    j2k_write_eoc(j2k);
-
-    if (cstr_info) {
-        cstr_info->codestream_size = cio_tell(cio) + j2k->pos_correction;
-        /* UniPG>> */
-        /* The following adjustment is done to adjust the codestream size */
-        /* if SOD is not at 0 in the buffer. Useful in case of JP2, where */
-        /* the first bunch of bytes is not in the codestream              */
-        cstr_info->codestream_size -= cstr_info->main_head_start;
-        /* <<UniPG */
-    }
-
-#ifdef USE_JPWL
-    /*
-    preparation of JPWL marker segments
-    */
-    if (cp->epc_on) {
-
-        /* encode according to JPWL */
-        jpwl_encode(j2k, cio, image);
-
-    }
-#endif /* USE_JPWL */
-
-    return OPJ_TRUE;
-}
-
-static void j2k_add_mhmarker(opj_codestream_info_t *cstr_info,
-                             unsigned short int type, int pos, int len)
-{
-
-    if (!cstr_info) {
-        return;
-    }
-
-    /* expand the list? */
-    if ((cstr_info->marknum + 1) > cstr_info->maxmarknum) {
-        cstr_info->maxmarknum = 100 + (int)((float) cstr_info->maxmarknum * 1.0F);
-        cstr_info->marker = (opj_marker_info_t*)opj_realloc(cstr_info->marker,
-                            cstr_info->maxmarknum);
-    }
-
-    /* add the marker */
-    cstr_info->marker[cstr_info->marknum].type = type;
-    cstr_info->marker[cstr_info->marknum].pos = pos;
-    cstr_info->marker[cstr_info->marknum].len = len;
-    cstr_info->marknum++;
-
-}
-
-static void j2k_add_tlmarker(int tileno, opj_codestream_info_t *cstr_info,
-                             unsigned short int type, int pos, int len)
-{
-
-    opj_marker_info_t *marker;
-
-    if (!cstr_info) {
-        return;
-    }
-
-    /* expand the list? */
-    if ((cstr_info->tile[tileno].marknum + 1) >
-            cstr_info->tile[tileno].maxmarknum) {
-        cstr_info->tile[tileno].maxmarknum = 100 + (int)((float)
-                                             cstr_info->tile[tileno].maxmarknum * 1.0F);
-        cstr_info->tile[tileno].marker = (opj_marker_info_t*)opj_realloc(
-                                             cstr_info->tile[tileno].marker, cstr_info->maxmarknum);
-    }
-
-    marker = &(cstr_info->tile[tileno].marker[cstr_info->tile[tileno].marknum]);
-
-    /* add the marker */
-    marker->type = type;
-    marker->pos = pos;
-    marker->len = len;
-    cstr_info->tile[tileno].marknum++;
-}
diff --git a/src/lib/openmj2/j2k.h b/src/lib/openmj2/j2k.h
deleted file mode 100644 (file)
index 2dc4311..0000000
+++ /dev/null
@@ -1,456 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2006-2007, Parvatha Elangovan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef __J2K_H
-#define __J2K_H
-/**
-@file j2k.h
-@brief The JPEG-2000 Codestream Reader/Writer (J2K)
-
-The functions in J2K.C have for goal to read/write the several parts of the codestream: markers and data.
-*/
-
-/** @defgroup J2K J2K - JPEG-2000 codestream reader/writer */
-/*@{*/
-
-#define J2K_CP_CSTY_PRT 0x01
-#define J2K_CP_CSTY_SOP 0x02
-#define J2K_CP_CSTY_EPH 0x04
-#define J2K_CCP_CSTY_PRT 0x01
-#define J2K_CCP_CBLKSTY_LAZY 0x01     /**< Selective arithmetic coding bypass */
-#define J2K_CCP_CBLKSTY_RESET 0x02    /**< Reset context probabilities on coding pass boundaries */
-#define J2K_CCP_CBLKSTY_TERMALL 0x04  /**< Termination on each coding pass */
-#define J2K_CCP_CBLKSTY_VSC 0x08      /**< Vertically stripe causal context */
-#define J2K_CCP_CBLKSTY_PTERM 0x10    /**< Predictable termination */
-#define J2K_CCP_CBLKSTY_SEGSYM 0x20   /**< Segmentation symbols are used */
-#define J2K_CCP_QNTSTY_NOQNT 0
-#define J2K_CCP_QNTSTY_SIQNT 1
-#define J2K_CCP_QNTSTY_SEQNT 2
-
-/* ----------------------------------------------------------------------- */
-
-#define J2K_MS_SOC 0xff4f   /**< SOC marker value */
-#define J2K_MS_SOT 0xff90   /**< SOT marker value */
-#define J2K_MS_SOD 0xff93   /**< SOD marker value */
-#define J2K_MS_EOC 0xffd9   /**< EOC marker value */
-#define J2K_MS_SIZ 0xff51   /**< SIZ marker value */
-#define J2K_MS_COD 0xff52   /**< COD marker value */
-#define J2K_MS_COC 0xff53   /**< COC marker value */
-#define J2K_MS_RGN 0xff5e   /**< RGN marker value */
-#define J2K_MS_QCD 0xff5c   /**< QCD marker value */
-#define J2K_MS_QCC 0xff5d   /**< QCC marker value */
-#define J2K_MS_POC 0xff5f   /**< POC marker value */
-#define J2K_MS_TLM 0xff55   /**< TLM marker value */
-#define J2K_MS_PLM 0xff57   /**< PLM marker value */
-#define J2K_MS_PLT 0xff58   /**< PLT marker value */
-#define J2K_MS_PPM 0xff60   /**< PPM marker value */
-#define J2K_MS_PPT 0xff61   /**< PPT marker value */
-#define J2K_MS_SOP 0xff91   /**< SOP marker value */
-#define J2K_MS_EPH 0xff92   /**< EPH marker value */
-#define J2K_MS_CRG 0xff63   /**< CRG marker value */
-#define J2K_MS_COM 0xff64   /**< COM marker value */
-/* UniPG>> */
-#ifdef USE_JPWL
-#define J2K_MS_EPC 0xff68   /**< EPC marker value (Part 11: JPEG 2000 for Wireless) */
-#define J2K_MS_EPB 0xff66   /**< EPB marker value (Part 11: JPEG 2000 for Wireless) */
-#define J2K_MS_ESD 0xff67   /**< ESD marker value (Part 11: JPEG 2000 for Wireless) */
-#define J2K_MS_RED 0xff69   /**< RED marker value (Part 11: JPEG 2000 for Wireless) */
-#endif /* USE_JPWL */
-#ifdef USE_JPSEC
-#define J2K_MS_SEC 0xff65    /**< SEC marker value (Part 8: Secure JPEG 2000) */
-#define J2K_MS_INSEC 0xff94  /**< INSEC marker value (Part 8: Secure JPEG 2000) */
-#endif /* USE_JPSEC */
-/* <<UniPG */
-
-
-/* ----------------------------------------------------------------------- */
-
-/**
-Values that specify the status of the decoding process when decoding the main header.
-These values may be combined with a | operator.
-*/
-typedef enum J2K_STATUS {
-    J2K_STATE_MHSOC  = 0x0001, /**< a SOC marker is expected */
-    J2K_STATE_MHSIZ  = 0x0002, /**< a SIZ marker is expected */
-    J2K_STATE_MH     = 0x0004, /**< the decoding process is in the main header */
-    J2K_STATE_TPHSOT = 0x0008, /**< the decoding process is in a tile part header and expects a SOT marker */
-    J2K_STATE_TPH    = 0x0010, /**< the decoding process is in a tile part header */
-    J2K_STATE_MT     = 0x0020, /**< the EOC marker has just been read */
-    J2K_STATE_NEOC   = 0x0040, /**< the decoding process must not expect a EOC marker because the codestream is truncated */
-    J2K_STATE_ERR    = 0x0080  /**< the decoding process has encountered an error */
-} J2K_STATUS;
-
-/* ----------------------------------------------------------------------- */
-
-/**
-T2 encoding mode
-*/
-typedef enum T2_MODE {
-    THRESH_CALC = 0,    /** Function called in Rate allocation process*/
-    FINAL_PASS = 1      /** Function called in Tier 2 process*/
-} J2K_T2_MODE;
-
-/**
-Quantization stepsize
-*/
-typedef struct opj_stepsize {
-    /** exponent */
-    int expn;
-    /** mantissa */
-    int mant;
-} opj_stepsize_t;
-
-/**
-Tile-component coding parameters
-*/
-typedef struct opj_tccp {
-    /** coding style */
-    int csty;
-    /** number of resolutions */
-    int numresolutions;
-    /** code-blocks width */
-    int cblkw;
-    /** code-blocks height */
-    int cblkh;
-    /** code-block coding style */
-    int cblksty;
-    /** discrete wavelet transform identifier */
-    int qmfbid;
-    /** quantisation style */
-    int qntsty;
-    /** stepsizes used for quantization */
-    opj_stepsize_t stepsizes[J2K_MAXBANDS];
-    /** number of guard bits */
-    int numgbits;
-    /** Region Of Interest shift */
-    int roishift;
-    /** precinct width */
-    int prcw[J2K_MAXRLVLS];
-    /** precinct height */
-    int prch[J2K_MAXRLVLS];
-} opj_tccp_t;
-
-/**
-Tile coding parameters :
-this structure is used to store coding/decoding parameters common to all
-tiles (information like COD, COC in main header)
-*/
-typedef struct opj_tcp {
-    /** 1 : first part-tile of a tile */
-    int first;
-    /** coding style */
-    int csty;
-    /** progression order */
-    OPJ_PROG_ORDER prg;
-    /** number of layers */
-    int numlayers;
-    /** multi-component transform identifier */
-    int mct;
-    /** rates of layers */
-    float rates[100];
-    /** number of progression order changes */
-    int numpocs;
-    /** indicates if a POC marker has been used O:NO, 1:YES */
-    int POC;
-    /** progression order changes */
-    opj_poc_t pocs[32];
-    /** packet header store there for futur use in t2_decode_packet */
-    unsigned char *ppt_data;
-    /** pointer remaining on the first byte of the first header if ppt is used */
-    unsigned char *ppt_data_first;
-    /** If ppt == 1 --> there was a PPT marker for the present tile */
-    int ppt;
-    /** used in case of multiple marker PPT (number of info already stored) */
-    int ppt_store;
-    /** ppmbug1 */
-    int ppt_len;
-    /** add fixed_quality */
-    float distoratio[100];
-    /** tile-component coding parameters */
-    opj_tccp_t *tccps;
-} opj_tcp_t;
-
-/**
-Coding parameters
-*/
-typedef struct opj_cp {
-    /** Digital cinema profile*/
-    OPJ_CINEMA_MODE cinema;
-    /** Maximum rate for each component. If == 0, component size limitation is not considered */
-    int max_comp_size;
-    /** Size of the image in bits*/
-    int img_size;
-    /** Rsiz*/
-    OPJ_RSIZ_CAPABILITIES rsiz;
-    /** Enabling Tile part generation*/
-    char tp_on;
-    /** Flag determining tile part generation*/
-    char tp_flag;
-    /** Position of tile part flag in progression order*/
-    int tp_pos;
-    /** allocation by rate/distortion */
-    int disto_alloc;
-    /** allocation by fixed layer */
-    int fixed_alloc;
-    /** add fixed_quality */
-    int fixed_quality;
-    /** if != 0, then original dimension divided by 2^(reduce); if == 0 or not used, image is decoded to the full resolution */
-    int reduce;
-    /** if != 0, then only the first "layer" layers are decoded; if == 0 or not used, all the quality layers are decoded */
-    int layer;
-    /** if == NO_LIMITATION, decode entire codestream; if == LIMIT_TO_MAIN_HEADER then only decode the main header */
-    OPJ_LIMIT_DECODING limit_decoding;
-    /** XTOsiz */
-    int tx0;
-    /** YTOsiz */
-    int ty0;
-    /** XTsiz */
-    int tdx;
-    /** YTsiz */
-    int tdy;
-    /** comment for coding */
-    char *comment;
-    /** number of tiles in width */
-    int tw;
-    /** number of tiles in height */
-    int th;
-    /** ID number of the tiles present in the codestream */
-    int *tileno;
-    /** size of the vector tileno */
-    int tileno_size;
-    /** packet header store there for futur use in t2_decode_packet */
-    unsigned char *ppm_data;
-    /** pointer remaining on the first byte of the first header if ppm is used */
-    unsigned char *ppm_data_first;
-    /** if ppm == 1 --> there was a PPM marker for the present tile */
-    int ppm;
-    /** use in case of multiple marker PPM (number of info already store) */
-    int ppm_store;
-    /** use in case of multiple marker PPM (case on non-finished previous info) */
-    int ppm_previous;
-    /** ppmbug1 */
-    int ppm_len;
-    /** tile coding parameters */
-    opj_tcp_t *tcps;
-    /** fixed layer */
-    int *matrice;
-    /* UniPG>> */
-#ifdef USE_JPWL
-    /** enables writing of EPC in MH, thus activating JPWL */
-    opj_bool epc_on;
-    /** enables writing of EPB, in case of activated JPWL */
-    opj_bool epb_on;
-    /** enables writing of ESD, in case of activated JPWL */
-    opj_bool esd_on;
-    /** enables writing of informative techniques of ESD, in case of activated JPWL */
-    opj_bool info_on;
-    /** enables writing of RED, in case of activated JPWL */
-    opj_bool red_on;
-    /** error protection method for MH (0,1,16,32,37-128) */
-    int hprot_MH;
-    /** tile number of header protection specification (>=0) */
-    int hprot_TPH_tileno[JPWL_MAX_NO_TILESPECS];
-    /** error protection methods for TPHs (0,1,16,32,37-128) */
-    int hprot_TPH[JPWL_MAX_NO_TILESPECS];
-    /** tile number of packet protection specification (>=0) */
-    int pprot_tileno[JPWL_MAX_NO_PACKSPECS];
-    /** packet number of packet protection specification (>=0) */
-    int pprot_packno[JPWL_MAX_NO_PACKSPECS];
-    /** error protection methods for packets (0,1,16,32,37-128) */
-    int pprot[JPWL_MAX_NO_PACKSPECS];
-    /** enables writing of ESD, (0/2/4 bytes) */
-    int sens_size;
-    /** sensitivity addressing size (0=auto/2/4 bytes) */
-    int sens_addr;
-    /** sensitivity range (0-3) */
-    int sens_range;
-    /** sensitivity method for MH (-1,0-7) */
-    int sens_MH;
-    /** tile number of sensitivity specification (>=0) */
-    int sens_TPH_tileno[JPWL_MAX_NO_TILESPECS];
-    /** sensitivity methods for TPHs (-1,0-7) */
-    int sens_TPH[JPWL_MAX_NO_TILESPECS];
-    /** enables JPWL correction at the decoder */
-    opj_bool correct;
-    /** expected number of components at the decoder */
-    int exp_comps;
-    /** maximum number of tiles at the decoder */
-    int max_tiles;
-#endif /* USE_JPWL */
-    /* <<UniPG */
-} opj_cp_t;
-
-/**
-JPEG-2000 codestream reader/writer
-*/
-typedef struct opj_j2k {
-    /** codec context */
-    opj_common_ptr cinfo;
-
-    /** locate in which part of the codestream the decoder is (main header, tile header, end) */
-    int state;
-    /** number of the tile currently concern by coding/decoding */
-    int curtileno;
-    /** Tile part number*/
-    int tp_num;
-    /** Tilepart number currently coding*/
-    int cur_tp_num;
-    /** Total number of tileparts of the current tile*/
-    int *cur_totnum_tp;
-    /**
-    locate the start position of the TLM marker
-    after encoding the tilepart, a jump (in j2k_write_sod) is done to the TLM marker to store the value of its length.
-    */
-    int tlm_start;
-    /** Total num of tile parts in whole image = num tiles* num tileparts in each tile*/
-    /** used in TLMmarker*/
-    int totnum_tp;
-    /**
-    locate the position of the end of the tile in the codestream,
-    used to detect a truncated codestream (in j2k_read_sod)
-    */
-    unsigned char *eot;
-    /**
-    locate the start position of the SOT marker of the current coded tile:
-    after encoding the tile, a jump (in j2k_write_sod) is done to the SOT marker to store the value of its length.
-    */
-    int sot_start;
-    int sod_start;
-    /**
-    as the J2K-file is written in several parts during encoding,
-    it enables to make the right correction in position return by cio_tell
-    */
-    int pos_correction;
-    /** array used to store the data of each tile */
-    unsigned char **tile_data;
-    /** array used to store the length of each tile */
-    int *tile_len;
-    /**
-    decompression only :
-    store decoding parameters common to all tiles (information like COD, COC in main header)
-    */
-    opj_tcp_t *default_tcp;
-    /** pointer to the encoded / decoded image */
-    opj_image_t *image;
-    /** pointer to the coding parameters */
-    opj_cp_t *cp;
-    /** helper used to write the index file */
-    opj_codestream_info_t *cstr_info;
-    /** pointer to the byte i/o stream */
-    opj_cio_t *cio;
-} opj_j2k_t;
-
-/** @name Exported functions */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-/**
-Creates a J2K decompression structure
-@param cinfo Codec context info
-@return Returns a handle to a J2K decompressor if successful, returns NULL otherwise
-*/
-opj_j2k_t* j2k_create_decompress(opj_common_ptr cinfo);
-/**
-Destroy a J2K decompressor handle
-@param j2k J2K decompressor handle to destroy
-*/
-void j2k_destroy_decompress(opj_j2k_t *j2k);
-/**
-Setup the decoder decoding parameters using user parameters.
-Decoding parameters are returned in j2k->cp.
-@param j2k J2K decompressor handle
-@param parameters decompression parameters
-*/
-void j2k_setup_decoder(opj_j2k_t *j2k, opj_dparameters_t *parameters);
-/**
-Decode an image from a JPEG-2000 codestream
-@param j2k J2K decompressor handle
-@param cio Input buffer stream
-@param cstr_info Codestream information structure if required, NULL otherwise
-@return Returns a decoded image if successful, returns NULL otherwise
-*/
-opj_image_t* j2k_decode(opj_j2k_t *j2k, opj_cio_t *cio,
-                        opj_codestream_info_t *cstr_info);
-/**
-Decode an image form a JPT-stream (JPEG 2000, JPIP)
-@param j2k J2K decompressor handle
-@param cio Input buffer stream
-@param cstr_info Codestream information structure if required, NULL otherwise
-@return Returns a decoded image if successful, returns NULL otherwise
-*/
-opj_image_t* j2k_decode_jpt_stream(opj_j2k_t *j2k, opj_cio_t *cio,
-                                   opj_codestream_info_t *cstr_info);
-/**
-Creates a J2K compression structure
-@param cinfo Codec context info
-@return Returns a handle to a J2K compressor if successful, returns NULL otherwise
-*/
-opj_j2k_t* j2k_create_compress(opj_common_ptr cinfo);
-/**
-Destroy a J2K compressor handle
-@param j2k J2K compressor handle to destroy
-*/
-void j2k_destroy_compress(opj_j2k_t *j2k);
-/**
-Setup the encoder parameters using the current image and using user parameters.
-Coding parameters are returned in j2k->cp.
-@param j2k J2K compressor handle
-@param parameters compression parameters
-@param image input filled image
-*/
-void j2k_setup_encoder(opj_j2k_t *j2k, opj_cparameters_t *parameters,
-                       opj_image_t *image);
-/**
-Converts an enum type progression order to string type
-*/
-char *j2k_convert_progression_order(OPJ_PROG_ORDER prg_order);
-/**
-Encode an image into a JPEG-2000 codestream
-@param j2k J2K compressor handle
-@param cio Output buffer stream
-@param image Image to encode
-@param cstr_info Codestream information structure if required, NULL otherwise
-@return Returns true if successful, returns false otherwise
-*/
-opj_bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image,
-                    opj_codestream_info_t *cstr_info);
-
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif /* __J2K_H */
diff --git a/src/lib/openmj2/j2k_lib.c b/src/lib/openmj2/j2k_lib.c
deleted file mode 100644 (file)
index 7c96ca3..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifdef _WIN32
-#include <windows.h>
-#else
-#include <sys/time.h>
-#include <sys/resource.h>
-#include <sys/times.h>
-#endif /* _WIN32 */
-#include "opj_includes.h"
-
-double OPJ_CALLCONV opj_clock(void)
-{
-#ifdef _WIN32
-    /* _WIN32: use QueryPerformance (very accurate) */
-    LARGE_INTEGER freq, t ;
-    /* freq is the clock speed of the CPU */
-    QueryPerformanceFrequency(&freq) ;
-    /* cout << "freq = " << ((double) freq.QuadPart) << endl; */
-    /* t is the high resolution performance counter (see MSDN) */
-    QueryPerformanceCounter(& t) ;
-    return (t.QuadPart / (double) freq.QuadPart) ;
-#else
-    /* Unix or Linux: use resource usage */
-    struct rusage t;
-    double procTime;
-    /* (1) Get the rusage data structure at this moment (man getrusage) */
-    getrusage(0, &t);
-    /* (2) What is the elapsed time ? - CPU time = User time + System time */
-    /* (2a) Get the seconds */
-    procTime = t.ru_utime.tv_sec + t.ru_stime.tv_sec;
-    /* (2b) More precisely! Get the microseconds part ! */
-    return (procTime + (t.ru_utime.tv_usec + t.ru_stime.tv_usec) * 1e-6) ;
-#endif
-}
-
diff --git a/src/lib/openmj2/j2k_lib.h b/src/lib/openmj2/j2k_lib.h
deleted file mode 100644 (file)
index 33559a7..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef __J2K_LIB_H
-#define __J2K_LIB_H
-/**
-@file j2k_lib.h
-@brief Internal functions
-
-The functions in J2K_LIB.C are internal utilities mainly used for timing.
-*/
-
-/** @defgroup MISC MISC - Miscellaneous internal functions */
-/*@{*/
-
-/** @name Exported functions */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-
-/**
-Difference in successive opj_clock() calls tells you the elapsed time
-@return Returns time in seconds
-*/
-OPJ_API double OPJ_CALLCONV opj_clock(void);
-
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif /* __J2K_LIB_H */
-
diff --git a/src/lib/openmj2/jp2.c b/src/lib/openmj2/jp2.c
deleted file mode 100644 (file)
index acf64b9..0000000
+++ /dev/null
@@ -1,1215 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2010-2011, Kaori Hagihara
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#include "opj_includes.h"
-
-/** @defgroup JP2 JP2 - JPEG-2000 file format reader/writer */
-/*@{*/
-
-/** @name Local static functions */
-/*@{*/
-
-/**
-Read box headers
-@param cinfo Codec context info
-@param cio Input stream
-@param box
-@return Returns true if successful, returns false otherwise
-*/
-static opj_bool jp2_read_boxhdr(opj_common_ptr cinfo, opj_cio_t *cio,
-                                opj_jp2_box_t *box);
-/*static void jp2_write_url(opj_cio_t *cio, char *Idx_file);*/
-/**
-Read the IHDR box - Image Header box
-@param jp2 JP2 handle
-@param cio Input buffer stream
-@return Returns true if successful, returns false otherwise
-*/
-static opj_bool jp2_read_ihdr(opj_jp2_t *jp2, opj_cio_t *cio);
-static void jp2_write_ihdr(opj_jp2_t *jp2, opj_cio_t *cio);
-static void jp2_write_bpcc(opj_jp2_t *jp2, opj_cio_t *cio);
-static opj_bool jp2_read_bpcc(opj_jp2_t *jp2, opj_cio_t *cio);
-static void jp2_write_colr(opj_jp2_t *jp2, opj_cio_t *cio);
-/**
-Write the FTYP box - File type box
-@param jp2 JP2 handle
-@param cio Output buffer stream
-*/
-static void jp2_write_ftyp(opj_jp2_t *jp2, opj_cio_t *cio);
-/**
-Read the FTYP box - File type box
-@param jp2 JP2 handle
-@param cio Input buffer stream
-@return Returns true if successful, returns false otherwise
-*/
-static opj_bool jp2_read_ftyp(opj_jp2_t *jp2, opj_cio_t *cio);
-static int jp2_write_jp2c(opj_jp2_t *jp2, opj_cio_t *cio, opj_image_t *image,
-                          opj_codestream_info_t *cstr_info);
-static opj_bool jp2_read_jp2c(opj_jp2_t *jp2, opj_cio_t *cio,
-                              unsigned int *j2k_codestream_length, unsigned int *j2k_codestream_offset);
-static void jp2_write_jp(opj_cio_t *cio);
-/**
-Read the JP box - JPEG 2000 signature
-@param jp2 JP2 handle
-@param cio Input buffer stream
-@return Returns true if successful, returns false otherwise
-*/
-static opj_bool jp2_read_jp(opj_jp2_t *jp2, opj_cio_t *cio);
-/**
-Decode the structure of a JP2 file
-@param jp2 JP2 handle
-@param cio Input buffer stream
-@param color Collector for profile, cdef and pclr data
-@return Returns true if successful, returns false otherwise
-*/
-static opj_bool jp2_read_struct(opj_jp2_t *jp2, opj_cio_t *cio,
-                                opj_jp2_color_t *color);
-/**
-Apply collected palette data
-@param color Collector for profile, cdef and pclr data
-@param image
-*/
-static void jp2_apply_pclr(opj_jp2_color_t *color, opj_image_t *image,
-                           opj_common_ptr cinfo);
-/**
-Collect palette data
-@param jp2 JP2 handle
-@param cio Input buffer stream
-@param box
-@param color Collector for profile, cdef and pclr data
-@return Returns true if successful, returns false otherwise
-*/
-static opj_bool jp2_read_pclr(opj_jp2_t *jp2, opj_cio_t *cio,
-                              opj_jp2_box_t *box, opj_jp2_color_t *color);
-/**
-Collect component mapping data
-@param jp2 JP2 handle
-@param cio Input buffer stream
-@param box
-@param color Collector for profile, cdef and pclr data
-@return Returns true if successful, returns false otherwise
-*/
-static opj_bool jp2_read_cmap(opj_jp2_t *jp2, opj_cio_t *cio,
-                              opj_jp2_box_t *box, opj_jp2_color_t *color);
-/**
-Collect colour specification data
-@param jp2 JP2 handle
-@param cio Input buffer stream
-@param box
-@param color Collector for profile, cdef and pclr data
-@return Returns true if successful, returns false otherwise
-*/
-static opj_bool jp2_read_colr(opj_jp2_t *jp2, opj_cio_t *cio,
-                              opj_jp2_box_t *box, opj_jp2_color_t *color);
-/*@}*/
-
-/*@}*/
-
-/* ----------------------------------------------------------------------- */
-
-static opj_bool jp2_read_boxhdr(opj_common_ptr cinfo, opj_cio_t *cio,
-                                opj_jp2_box_t *box)
-{
-    box->init_pos = cio_tell(cio);
-    box->length = cio_read(cio, 4);
-    box->type = cio_read(cio, 4);
-    if (box->length == 1) {
-        if (cio_read(cio, 4) != 0) {
-            opj_event_msg(cinfo, EVT_ERROR, "Cannot handle box sizes higher than 2^32\n");
-            return OPJ_FALSE;
-        }
-        box->length = cio_read(cio, 4);
-        if (box->length == 0) {
-            box->length = cio_numbytesleft(cio) + 12;
-        }
-    } else if (box->length == 0) {
-        box->length = cio_numbytesleft(cio) + 8;
-    }
-    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;
-}
-
-#if 0
-static void jp2_write_url(opj_cio_t *cio, char *Idx_file)
-{
-    unsigned int i;
-    opj_jp2_box_t box;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, JP2_URL, 4); /* DBTL */
-    cio_write(cio, 0, 1);       /* VERS */
-    cio_write(cio, 0, 3);       /* FLAG */
-
-    if (Idx_file) {
-        for (i = 0; i < strlen(Idx_file); i++) {
-            cio_write(cio, Idx_file[i], 1);
-        }
-    }
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);  /* L */
-    cio_seek(cio, box.init_pos + box.length);
-}
-#endif
-
-static opj_bool jp2_read_ihdr(opj_jp2_t *jp2, opj_cio_t *cio)
-{
-    opj_jp2_box_t box;
-
-    opj_common_ptr cinfo = jp2->cinfo;
-
-    if (jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE) {
-        opj_event_msg(cinfo, EVT_ERROR, "Failed to read boxhdr\n");
-        return OPJ_FALSE;
-    }
-    if (JP2_IHDR != box.type) {
-        opj_event_msg(cinfo, EVT_ERROR, "Expected IHDR Marker\n");
-        return OPJ_FALSE;
-    }
-
-    jp2->h = cio_read(cio, 4);          /* HEIGHT */
-    jp2->w = cio_read(cio, 4);          /* WIDTH */
-    jp2->numcomps = cio_read(cio, 2);   /* NC */
-    jp2->comps = (opj_jp2_comps_t*) opj_malloc(jp2->numcomps * sizeof(
-                     opj_jp2_comps_t));
-
-    jp2->bpc = cio_read(cio, 1);        /* BPC */
-
-    jp2->C = cio_read(cio, 1);          /* C */
-    jp2->UnkC = cio_read(cio, 1);       /* UnkC */
-    jp2->IPR = cio_read(cio, 1);        /* IPR */
-
-    if (cio_tell(cio) - box.init_pos != box.length) {
-        opj_event_msg(cinfo, EVT_ERROR, "Error with IHDR Box\n");
-        return OPJ_FALSE;
-    }
-
-    return OPJ_TRUE;
-}
-
-static void jp2_write_ihdr(opj_jp2_t *jp2, opj_cio_t *cio)
-{
-    opj_jp2_box_t box;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, JP2_IHDR, 4);        /* IHDR */
-
-    cio_write(cio, jp2->h, 4);          /* HEIGHT */
-    cio_write(cio, jp2->w, 4);          /* WIDTH */
-    cio_write(cio, jp2->numcomps, 2);   /* NC */
-
-    cio_write(cio, jp2->bpc, 1);        /* BPC */
-
-    cio_write(cio, jp2->C, 1);          /* C : Always 7 */
-    cio_write(cio, jp2->UnkC, 1);       /* UnkC, colorspace unknown */
-    cio_write(cio, jp2->IPR, 1);        /* IPR, no intellectual property */
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);  /* L */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-static void jp2_write_bpcc(opj_jp2_t *jp2, opj_cio_t *cio)
-{
-    unsigned int i;
-    opj_jp2_box_t box;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, JP2_BPCC, 4);    /* BPCC */
-
-    for (i = 0; i < jp2->numcomps; i++) {
-        cio_write(cio, jp2->comps[i].bpcc, 1);
-    }
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);  /* L */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-
-static opj_bool jp2_read_bpcc(opj_jp2_t *jp2, opj_cio_t *cio)
-{
-    unsigned int i;
-    opj_jp2_box_t box;
-
-    opj_common_ptr cinfo = jp2->cinfo;
-
-    if (jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE) {
-        opj_event_msg(cinfo, EVT_ERROR, "Failed to read boxhdr\n");
-        return OPJ_FALSE;
-    }
-    if (JP2_BPCC != box.type) {
-        opj_event_msg(cinfo, EVT_ERROR, "Expected BPCC Marker\n");
-        return OPJ_FALSE;
-    }
-
-    for (i = 0; i < jp2->numcomps; i++) {
-        jp2->comps[i].bpcc = cio_read(cio, 1);
-    }
-
-    if (cio_tell(cio) - box.init_pos != box.length) {
-        opj_event_msg(cinfo, EVT_ERROR, "Error with BPCC Box\n");
-        return OPJ_FALSE;
-    }
-
-    return OPJ_TRUE;
-}
-
-static void jp2_write_colr(opj_jp2_t *jp2, opj_cio_t *cio)
-{
-    opj_jp2_box_t box;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, JP2_COLR, 4);        /* COLR */
-
-    cio_write(cio, jp2->meth, 1);       /* METH */
-    cio_write(cio, jp2->precedence, 1); /* PRECEDENCE */
-    cio_write(cio, jp2->approx, 1);     /* APPROX */
-
-    if (jp2->meth == 2) {
-        jp2->enumcs = 0;
-    }
-
-    cio_write(cio, jp2->enumcs, 4); /* EnumCS */
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);  /* L */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-static void jp2_free_pclr(opj_jp2_color_t *color)
-{
-    opj_free(color->jp2_pclr->channel_sign);
-    opj_free(color->jp2_pclr->channel_size);
-    opj_free(color->jp2_pclr->entries);
-
-    if (color->jp2_pclr->cmap) {
-        opj_free(color->jp2_pclr->cmap);
-    }
-
-    opj_free(color->jp2_pclr);
-    color->jp2_pclr = NULL;
-}
-
-static void free_color_data(opj_jp2_color_t *color)
-{
-    if (color->jp2_pclr) {
-        jp2_free_pclr(color);
-    }
-    if (color->jp2_cdef) {
-        if (color->jp2_cdef->info) {
-            opj_free(color->jp2_cdef->info);
-        }
-        opj_free(color->jp2_cdef);
-    }
-    if (color->icc_profile_buf) {
-        opj_free(color->icc_profile_buf);
-    }
-}
-
-static void jp2_apply_pclr(opj_jp2_color_t *color, opj_image_t *image,
-                           opj_common_ptr cinfo)
-{
-    opj_image_comp_t *old_comps, *new_comps;
-    unsigned char *channel_size, *channel_sign;
-    unsigned int *entries;
-    opj_jp2_cmap_comp_t *cmap;
-    int *src, *dst;
-    unsigned int j, max;
-    unsigned short i, nr_channels, cmp, pcol;
-    int k, top_k;
-
-    channel_size = color->jp2_pclr->channel_size;
-    channel_sign = color->jp2_pclr->channel_sign;
-    entries = color->jp2_pclr->entries;
-    cmap = color->jp2_pclr->cmap;
-    nr_channels = color->jp2_pclr->nr_channels;
-
-    old_comps = image->comps;
-    new_comps = (opj_image_comp_t*)
-                opj_malloc(nr_channels * sizeof(opj_image_comp_t));
-
-    for (i = 0; i < nr_channels; ++i) {
-        pcol = cmap[i].pcol;
-        cmp = cmap[i].cmp;
-
-        if (pcol < nr_channels) {
-            new_comps[pcol] = old_comps[cmp];
-        } else {
-            opj_event_msg(cinfo, EVT_ERROR,
-                          "Error with pcol value %d (max: %d). skipping\n", pcol, nr_channels);
-            continue;
-        }
-
-        if (cmap[i].mtyp == 0) { /* Direct use */
-            old_comps[cmp].data = NULL;
-            continue;
-        }
-        /* Palette mapping: */
-        new_comps[pcol].data = (int*)
-                               opj_malloc(sizeof(int) * old_comps[cmp].w * old_comps[cmp].h);
-        new_comps[pcol].prec = channel_size[i];
-        new_comps[pcol].sgnd = channel_sign[i];
-    }
-    top_k = color->jp2_pclr->nr_entries - 1;
-
-    for (i = 0; i < nr_channels; ++i) {
-        /* Direct use: */
-        if (cmap[i].mtyp == 0) {
-            continue;
-        }
-
-        /* Palette mapping: */
-        cmp = cmap[i].cmp;
-        pcol = cmap[i].pcol;
-        src = old_comps[cmp].data;
-        dst = new_comps[pcol].data;
-        max = new_comps[pcol].w * new_comps[pcol].h;
-
-        for (j = 0; j < max; ++j) {
-            /* The index */
-            if ((k = src[j]) < 0) {
-                k = 0;
-            } else if (k > top_k) {
-                k = top_k;
-            }
-            /* The colour */
-            dst[j] = entries[k * nr_channels + pcol];
-        }
-    }
-    max = image->numcomps;
-    for (i = 0; i < max; ++i) {
-        if (old_comps[i].data) {
-            opj_free(old_comps[i].data);
-        }
-    }
-    opj_free(old_comps);
-    image->comps = new_comps;
-    image->numcomps = nr_channels;
-
-    jp2_free_pclr(color);
-
-}/* apply_pclr() */
-
-static opj_bool jp2_read_pclr(opj_jp2_t *jp2, opj_cio_t *cio,
-                              opj_jp2_box_t *box, opj_jp2_color_t *color)
-{
-    opj_jp2_pclr_t *jp2_pclr;
-    unsigned char *channel_size, *channel_sign;
-    unsigned int *entries;
-    unsigned short nr_entries, nr_channels;
-    unsigned short i, j;
-    unsigned char uc;
-
-    OPJ_ARG_NOT_USED(box);
-    OPJ_ARG_NOT_USED(jp2);
-
-    /* Part 1, I.5.3.4: 'There shall be at most one Palette box inside
-     * a JP2 Header box' :
-    */
-    if (color->jp2_pclr) {
-        return OPJ_FALSE;
-    }
-
-    nr_entries = (unsigned short)cio_read(cio, 2); /* NE */
-    nr_channels = (unsigned short)cio_read(cio, 1);/* NPC */
-
-    entries = (unsigned int*)
-              opj_malloc(sizeof(unsigned int) * nr_channels * nr_entries);
-    channel_size = (unsigned char*)opj_malloc(nr_channels);
-    channel_sign = (unsigned char*)opj_malloc(nr_channels);
-
-    jp2_pclr = (opj_jp2_pclr_t*)opj_malloc(sizeof(opj_jp2_pclr_t));
-    jp2_pclr->channel_sign = channel_sign;
-    jp2_pclr->channel_size = channel_size;
-    jp2_pclr->entries = entries;
-    jp2_pclr->nr_entries = nr_entries;
-    jp2_pclr->nr_channels = nr_channels;
-    jp2_pclr->cmap = NULL;
-
-    color->jp2_pclr = jp2_pclr;
-
-    for (i = 0; i < nr_channels; ++i) {
-        uc = cio_read(cio, 1); /* Bi */
-        channel_size[i] = (uc & 0x7f) + 1;
-        channel_sign[i] = (uc & 0x80) ? 1 : 0;
-    }
-
-    for (j = 0; j < nr_entries; ++j) {
-        for (i = 0; i < nr_channels; ++i) {
-            /* Cji */
-            *entries++ = cio_read(cio, (channel_size[i] + 7) >> 3);
-        }
-    }
-
-    return OPJ_TRUE;
-}/* jp2_read_pclr() */
-
-static opj_bool jp2_read_cmap(opj_jp2_t *jp2, opj_cio_t *cio,
-                              opj_jp2_box_t *box, opj_jp2_color_t *color)
-{
-    opj_jp2_cmap_comp_t *cmap;
-    unsigned short i, nr_channels;
-
-    OPJ_ARG_NOT_USED(box);
-    OPJ_ARG_NOT_USED(jp2);
-
-    /* Need nr_channels: */
-    if (color->jp2_pclr == NULL) {
-        return OPJ_FALSE;
-    }
-
-    /* Part 1, I.5.3.5: 'There shall be at most one Component Mapping box
-     * inside a JP2 Header box' :
-    */
-    if (color->jp2_pclr->cmap) {
-        return OPJ_FALSE;
-    }
-
-    nr_channels = color->jp2_pclr->nr_channels;
-    cmap = (opj_jp2_cmap_comp_t*)
-           opj_malloc(nr_channels * sizeof(opj_jp2_cmap_comp_t));
-
-    for (i = 0; i < nr_channels; ++i) {
-        cmap[i].cmp = (unsigned short)cio_read(cio, 2);
-        cmap[i].mtyp = cio_read(cio, 1);
-        cmap[i].pcol = cio_read(cio, 1);
-
-    }
-    color->jp2_pclr->cmap = cmap;
-
-    return OPJ_TRUE;
-}/* jp2_read_cmap() */
-
-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;
-
-    for (i = 0; i < n; ++i) {
-        /* WATCH: acn = asoc - 1 ! */
-        if ((asoc = info[i].asoc) == 0) {
-            continue;
-        }
-
-        cn = info[i].cn;
-        typ = info[i].typ;
-        acn = asoc - 1;
-
-        if (cn != acn) {
-            opj_image_comp_t saved;
-
-            memcpy(&saved, &image->comps[cn], sizeof(opj_image_comp_t));
-            memcpy(&image->comps[cn], &image->comps[acn], sizeof(opj_image_comp_t));
-            memcpy(&image->comps[acn], &saved, sizeof(opj_image_comp_t));
-
-            info[i].asoc = cn + 1;
-            info[acn].asoc = info[acn].cn + 1;
-        }
-    }
-    if (color->jp2_cdef->info) {
-        opj_free(color->jp2_cdef->info);
-    }
-
-    opj_free(color->jp2_cdef);
-    color->jp2_cdef = NULL;
-
-}/* jp2_apply_cdef() */
-
-static opj_bool jp2_read_cdef(opj_jp2_t *jp2, opj_cio_t *cio,
-                              opj_jp2_box_t *box, opj_jp2_color_t *color)
-{
-    opj_jp2_cdef_info_t *info;
-    unsigned short i, n;
-
-    OPJ_ARG_NOT_USED(box);
-    OPJ_ARG_NOT_USED(jp2);
-
-    /* Part 1, I.5.3.6: 'The shall be at most one Channel Definition box
-     * inside a JP2 Header box.'
-    */
-    if (color->jp2_cdef) {
-        return OPJ_FALSE;
-    }
-
-    if ((n = (unsigned short)cio_read(cio, 2)) == 0) {
-        return OPJ_FALSE;    /* szukw000: FIXME */
-    }
-
-    info = (opj_jp2_cdef_info_t*)
-           opj_malloc(n * sizeof(opj_jp2_cdef_info_t));
-
-    color->jp2_cdef = (opj_jp2_cdef_t*)opj_malloc(sizeof(opj_jp2_cdef_t));
-    color->jp2_cdef->info = info;
-    color->jp2_cdef->n = n;
-
-    for (i = 0; i < n; ++i) {
-        info[i].cn = (unsigned short)cio_read(cio, 2);
-        info[i].typ = (unsigned short)cio_read(cio, 2);
-        info[i].asoc = (unsigned short)cio_read(cio, 2);
-
-    }
-    return OPJ_TRUE;
-}/* jp2_read_cdef() */
-
-static opj_bool jp2_read_colr(opj_jp2_t *jp2, opj_cio_t *cio,
-                              opj_jp2_box_t *box, opj_jp2_color_t *color)
-{
-    int skip_len;
-    opj_common_ptr cinfo;
-
-    /* Part 1, I.5.3.3 : 'A conforming JP2 reader shall ignore all Colour
-     * Specification boxes after the first.'
-    */
-    if (color->jp2_has_colr) {
-        return OPJ_FALSE;
-    }
-
-    cinfo = jp2->cinfo;
-
-    jp2->meth = cio_read(cio, 1);       /* METH */
-    jp2->precedence = cio_read(cio, 1); /* PRECEDENCE */
-    jp2->approx = cio_read(cio, 1);     /* APPROX */
-
-    if (jp2->meth == 1) {
-        jp2->enumcs = cio_read(cio, 4); /* EnumCS */
-    } else if (jp2->meth == 2) {
-        /* skip PROFILE */
-        skip_len = box->init_pos + box->length - cio_tell(cio);
-        if (skip_len < 0) {
-            opj_event_msg(cinfo, EVT_ERROR, "Error with COLR box size\n");
-            return OPJ_FALSE;
-        }
-        if (skip_len > 0) {
-            unsigned char *start;
-
-            start = cio_getbp(cio);
-            color->icc_profile_buf = (unsigned char*)opj_malloc(skip_len);
-            color->icc_profile_len = skip_len;
-
-            cio_skip(cio, box->init_pos + box->length - cio_tell(cio));
-
-            memcpy(color->icc_profile_buf, start, skip_len);
-        }
-    }
-
-    if (cio_tell(cio) - box->init_pos != box->length) {
-        opj_event_msg(cinfo, EVT_ERROR, "Error with COLR Box\n");
-        return OPJ_FALSE;
-    }
-    color->jp2_has_colr = 1;
-
-    return OPJ_TRUE;
-}/* jp2_read_colr() */
-
-opj_bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, opj_jp2_color_t *color)
-{
-    opj_jp2_box_t box;
-    int jp2h_end;
-
-    opj_common_ptr cinfo = jp2->cinfo;
-
-    if (jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE) {
-        return OPJ_FALSE;
-    }
-    do {
-        if (JP2_JP2H != box.type) {
-            if (box.type == JP2_JP2C) {
-                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;
-            }
-
-            if (jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE) {
-                return OPJ_FALSE;
-            }
-        }
-    } while (JP2_JP2H != box.type);
-
-    if (!jp2_read_ihdr(jp2, cio)) {
-        return OPJ_FALSE;
-    }
-    jp2h_end = box.init_pos + box.length;
-
-    if (jp2->bpc == 255) {
-        if (!jp2_read_bpcc(jp2, cio)) {
-            return OPJ_FALSE;
-        }
-    }
-    if (jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE) {
-        return OPJ_FALSE;
-    }
-
-    while (cio_tell(cio) < jp2h_end) {
-        if (box.type == JP2_COLR) {
-            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);
-            }
-            if (jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE) {
-                return OPJ_FALSE;
-            }
-            continue;
-        }
-        if (box.type == JP2_CDEF && !jp2->ignore_pclr_cmap_cdef) {
-            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);
-            }
-            if (jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE) {
-                return OPJ_FALSE;
-            }
-            continue;
-        }
-        if (box.type == JP2_PCLR && !jp2->ignore_pclr_cmap_cdef) {
-            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);
-            }
-            if (jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE) {
-                return OPJ_FALSE;
-            }
-            continue;
-        }
-        if (box.type == JP2_CMAP && !jp2->ignore_pclr_cmap_cdef) {
-            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;
-        }
-
-    }/* while(cio_tell(cio) < box_end) */
-
-    cio_seek(cio, jp2h_end);
-
-    /* Part 1, I.5.3.3 : 'must contain at least one' */
-    return (color->jp2_has_colr == 1);
-
-}/* jp2_read_jp2h() */
-
-opj_image_t* opj_jp2_decode(opj_jp2_t *jp2, opj_cio_t *cio,
-                            opj_codestream_info_t *cstr_info)
-{
-    opj_common_ptr cinfo;
-    opj_image_t *image = NULL;
-    opj_jp2_color_t color;
-
-    if (!jp2 || !cio) {
-        return NULL;
-    }
-    memset(&color, 0, sizeof(opj_jp2_color_t));
-    cinfo = jp2->cinfo;
-
-    /* JP2 decoding */
-    if (!jp2_read_struct(jp2, cio, &color)) {
-        free_color_data(&color);
-        opj_event_msg(cinfo, EVT_ERROR, "Failed to decode jp2 structure\n");
-        return NULL;
-    }
-
-    /* J2K decoding */
-    image = j2k_decode(jp2->j2k, cio, cstr_info);
-
-    if (!image) {
-        free_color_data(&color);
-        opj_event_msg(cinfo, EVT_ERROR, "Failed to decode J2K image\n");
-        return NULL;
-    }
-
-    if (!jp2->ignore_pclr_cmap_cdef) {
-
-        /* Set Image Color Space */
-        if (jp2->enumcs == 16) {
-            image->color_space = CLRSPC_SRGB;
-        } else if (jp2->enumcs == 17) {
-            image->color_space = CLRSPC_GRAY;
-        } else if (jp2->enumcs == 18) {
-            image->color_space = CLRSPC_SYCC;
-        } else {
-            image->color_space = CLRSPC_UNKNOWN;
-        }
-
-        if (color.jp2_cdef) {
-            jp2_apply_cdef(image, &color);
-        }
-        if (color.jp2_pclr) {
-            /* Part 1, I.5.3.4: Either both or none : */
-            if (!color.jp2_pclr->cmap) {
-                jp2_free_pclr(&color);
-            } else {
-                jp2_apply_pclr(&color, image, cinfo);
-            }
-        }
-        if (color.icc_profile_buf) {
-            image->icc_profile_buf = color.icc_profile_buf;
-            color.icc_profile_buf = NULL;
-            image->icc_profile_len = color.icc_profile_len;
-        }
-    }
-
-    return image;
-
-}/* opj_jp2_decode() */
-
-
-void jp2_write_jp2h(opj_jp2_t *jp2, opj_cio_t *cio)
-{
-    opj_jp2_box_t box;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, JP2_JP2H, 4);    /* JP2H */
-
-    jp2_write_ihdr(jp2, cio);
-
-    if (jp2->bpc == 255) {
-        jp2_write_bpcc(jp2, cio);
-    }
-    jp2_write_colr(jp2, cio);
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);  /* L */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-static void jp2_write_ftyp(opj_jp2_t *jp2, opj_cio_t *cio)
-{
-    unsigned int i;
-    opj_jp2_box_t box;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, JP2_FTYP, 4);        /* FTYP */
-
-    cio_write(cio, jp2->brand, 4);      /* BR */
-    cio_write(cio, jp2->minversion, 4); /* MinV */
-
-    for (i = 0; i < jp2->numcl; i++) {
-        cio_write(cio, jp2->cl[i], 4);  /* CL */
-    }
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);  /* L */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-static opj_bool jp2_read_ftyp(opj_jp2_t *jp2, opj_cio_t *cio)
-{
-    int i;
-    opj_jp2_box_t box;
-
-    opj_common_ptr cinfo = jp2->cinfo;
-
-    if (jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE) {
-        opj_event_msg(cinfo, EVT_ERROR, "Failed to read boxhdr\n");
-        return OPJ_FALSE;
-    }
-    if (JP2_FTYP != box.type) {
-        opj_event_msg(cinfo, EVT_ERROR, "Expected FTYP Marker\n");
-        return OPJ_FALSE;
-    }
-
-    jp2->brand = cio_read(cio, 4);      /* BR */
-    jp2->minversion = cio_read(cio, 4); /* MinV */
-    jp2->numcl = (box.length - 16) / 4;
-    jp2->cl = (unsigned int *) opj_malloc(jp2->numcl * sizeof(unsigned int));
-
-    for (i = 0; i < (int)jp2->numcl; i++) {
-        jp2->cl[i] = cio_read(cio, 4);  /* CLi */
-    }
-
-    if (cio_tell(cio) - box.init_pos != box.length) {
-        opj_event_msg(cinfo, EVT_ERROR, "Error with FTYP Box\n");
-        return OPJ_FALSE;
-    }
-
-    return OPJ_TRUE;
-}
-
-static int jp2_write_jp2c(opj_jp2_t *jp2, opj_cio_t *cio, opj_image_t *image,
-                          opj_codestream_info_t *cstr_info)
-{
-    unsigned int j2k_codestream_offset, j2k_codestream_length;
-    opj_jp2_box_t box;
-
-    opj_j2k_t *j2k = jp2->j2k;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, JP2_JP2C, 4);    /* JP2C */
-
-    /* J2K encoding */
-    j2k_codestream_offset = cio_tell(cio);
-    if (!j2k_encode(j2k, cio, image, cstr_info)) {
-        opj_event_msg(j2k->cinfo, EVT_ERROR, "Failed to encode image\n");
-        return 0;
-    }
-    j2k_codestream_length = cio_tell(cio) - j2k_codestream_offset;
-
-    jp2->j2k_codestream_offset = j2k_codestream_offset;
-    jp2->j2k_codestream_length = j2k_codestream_length;
-
-    box.length = 8 + jp2->j2k_codestream_length;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);  /* L */
-    cio_seek(cio, box.init_pos + box.length);
-
-    return box.length;
-}
-
-static opj_bool jp2_read_jp2c(opj_jp2_t *jp2, opj_cio_t *cio,
-                              unsigned int *j2k_codestream_length, unsigned int *j2k_codestream_offset)
-{
-    opj_jp2_box_t box;
-
-    opj_common_ptr cinfo = jp2->cinfo;
-
-    if (jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE) {
-        opj_event_msg(cinfo, EVT_ERROR, "Failed to read boxhdr\n");
-        return OPJ_FALSE;
-    }
-    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;
-}
-
-static void jp2_write_jp(opj_cio_t *cio)
-{
-    opj_jp2_box_t box;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, JP2_JP, 4);      /* JP2 signature */
-    cio_write(cio, 0x0d0a870a, 4);
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);  /* L */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-static opj_bool jp2_read_jp(opj_jp2_t *jp2, opj_cio_t *cio)
-{
-    opj_jp2_box_t box;
-
-    opj_common_ptr cinfo = jp2->cinfo;
-
-    if (jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE) {
-        opj_event_msg(cinfo, EVT_ERROR, "Failed to read boxhdr\n");
-        return OPJ_FALSE;
-    }
-    if (JP2_JP != box.type) {
-        opj_event_msg(cinfo, EVT_ERROR, "Expected JP Marker\n");
-        return OPJ_FALSE;
-    }
-    if (0x0d0a870a != cio_read(cio, 4)) {
-        opj_event_msg(cinfo, EVT_ERROR, "Error with JP Marker\n");
-        return OPJ_FALSE;
-    }
-    if (cio_tell(cio) - box.init_pos != box.length) {
-        opj_event_msg(cinfo, EVT_ERROR, "Error with JP Box size\n");
-        return OPJ_FALSE;
-    }
-
-    return OPJ_TRUE;
-}
-
-
-static opj_bool jp2_read_struct(opj_jp2_t *jp2, opj_cio_t *cio,
-                                opj_jp2_color_t *color)
-{
-    if (!jp2_read_jp(jp2, cio)) {
-        return OPJ_FALSE;
-    }
-    if (!jp2_read_ftyp(jp2, cio)) {
-        return OPJ_FALSE;
-    }
-    if (!jp2_read_jp2h(jp2, cio, color)) {
-        return OPJ_FALSE;
-    }
-    if (!jp2_read_jp2c(jp2, cio, &jp2->j2k_codestream_length,
-                       &jp2->j2k_codestream_offset)) {
-        return OPJ_FALSE;
-    }
-
-    return OPJ_TRUE;
-}
-
-
-
-
-/* ----------------------------------------------------------------------- */
-/* JP2 decoder interface                                             */
-/* ----------------------------------------------------------------------- */
-
-opj_jp2_t* jp2_create_decompress(opj_common_ptr cinfo)
-{
-    opj_jp2_t *jp2 = (opj_jp2_t*) opj_calloc(1, sizeof(opj_jp2_t));
-    if (jp2) {
-        jp2->cinfo = cinfo;
-        /* create the J2K codec */
-        jp2->j2k = j2k_create_decompress(cinfo);
-        if (jp2->j2k == NULL) {
-            jp2_destroy_decompress(jp2);
-            return NULL;
-        }
-    }
-    return jp2;
-}
-
-void jp2_destroy_decompress(opj_jp2_t *jp2)
-{
-    if (jp2) {
-        /* destroy the J2K codec */
-        j2k_destroy_decompress(jp2->j2k);
-
-        if (jp2->comps) {
-            opj_free(jp2->comps);
-        }
-        if (jp2->cl) {
-            opj_free(jp2->cl);
-        }
-        opj_free(jp2);
-    }
-}
-
-void jp2_setup_decoder(opj_jp2_t *jp2, opj_dparameters_t *parameters)
-{
-    /* setup the J2K codec */
-    j2k_setup_decoder(jp2->j2k, parameters);
-    /* further JP2 initializations go here */
-    jp2->ignore_pclr_cmap_cdef = parameters->flags &
-                                 OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG;
-}
-
-/* ----------------------------------------------------------------------- */
-/* JP2 encoder interface                                             */
-/* ----------------------------------------------------------------------- */
-
-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) {
-        jp2->cinfo = cinfo;
-        /* create the J2K codec */
-        jp2->j2k = j2k_create_compress(cinfo);
-        if (jp2->j2k == NULL) {
-            jp2_destroy_compress(jp2);
-            return NULL;
-        }
-    }
-    return jp2;
-}
-
-void jp2_destroy_compress(opj_jp2_t *jp2)
-{
-    if (jp2) {
-        /* destroy the J2K codec */
-        j2k_destroy_compress(jp2->j2k);
-
-        if (jp2->comps) {
-            opj_free(jp2->comps);
-        }
-        if (jp2->cl) {
-            opj_free(jp2->cl);
-        }
-        opj_free(jp2);
-    }
-}
-
-void jp2_setup_encoder(opj_jp2_t *jp2, opj_cparameters_t *parameters,
-                       opj_image_t *image)
-{
-    int i;
-    int depth_0, sign;
-
-    if (!jp2 || !parameters || !image) {
-        return;
-    }
-
-    /* setup the J2K codec */
-    /* ------------------- */
-
-    /* Check if number of components respects standard */
-    if (image->numcomps < 1 || image->numcomps > 16384) {
-        opj_event_msg(jp2->cinfo, EVT_ERROR,
-                      "Invalid number of components specified while setting up JP2 encoder\n");
-        return;
-    }
-
-    j2k_setup_encoder(jp2->j2k, parameters, image);
-
-    /* setup the JP2 codec */
-    /* ------------------- */
-
-    /* Profile box */
-
-    jp2->brand = JP2_JP2;   /* BR */
-    jp2->minversion = 0;    /* MinV */
-    jp2->numcl = 1;
-    jp2->cl = (unsigned int*) opj_malloc(jp2->numcl * sizeof(unsigned int));
-    jp2->cl[0] = JP2_JP2;   /* CL0 : JP2 */
-
-    /* Image Header box */
-
-    jp2->numcomps = image->numcomps;    /* NC */
-    jp2->comps = (opj_jp2_comps_t*) opj_malloc(jp2->numcomps * sizeof(
-                     opj_jp2_comps_t));
-    jp2->h = image->y1 - image->y0;     /* HEIGHT */
-    jp2->w = image->x1 - image->x0;     /* WIDTH */
-    /* BPC */
-    depth_0 = image->comps[0].prec - 1;
-    sign = image->comps[0].sgnd;
-    jp2->bpc = depth_0 + (sign << 7);
-    for (i = 1; i < image->numcomps; i++) {
-        int depth = image->comps[i].prec - 1;
-        sign = image->comps[i].sgnd;
-        if (depth_0 != depth) {
-            jp2->bpc = 255;
-        }
-    }
-    jp2->C = 7;         /* C : Always 7 */
-    jp2->UnkC = 0;      /* UnkC, colorspace specified in colr box */
-    jp2->IPR = 0;       /* IPR, no intellectual property */
-
-    /* BitsPerComponent box */
-
-    for (i = 0; i < image->numcomps; i++) {
-        jp2->comps[i].bpcc = image->comps[i].prec - 1 + (image->comps[i].sgnd << 7);
-    }
-    jp2->meth = 1;
-    if (image->color_space == 1) {
-        jp2->enumcs = 16;    /* sRGB as defined by IEC 61966-2.1 */
-    } else if (image->color_space == 2) {
-        jp2->enumcs = 17;    /* greyscale */
-    } else if (image->color_space == 3) {
-        jp2->enumcs = 18;    /* YUV */
-    }
-    jp2->precedence = 0;    /* PRECEDENCE */
-    jp2->approx = 0;        /* APPROX */
-}
-
-opj_bool opj_jp2_encode(opj_jp2_t *jp2, opj_cio_t *cio, opj_image_t *image,
-                        opj_codestream_info_t *cstr_info)
-{
-
-    int pos_iptr, pos_jp2c, len_jp2c;
-    pos_jp2c = pos_iptr = -1; /* remove a warning */
-
-    /* JP2 encoding */
-
-    /* JPEG 2000 Signature box */
-    jp2_write_jp(cio);
-    /* File Type box */
-    jp2_write_ftyp(jp2, cio);
-    /* JP2 Header box */
-    jp2_write_jp2h(jp2, cio);
-
-    /* J2K encoding */
-    if (!(len_jp2c = jp2_write_jp2c(jp2, cio, image, cstr_info))) {
-        opj_event_msg(jp2->cinfo, EVT_ERROR, "Failed to encode image\n");
-        return OPJ_FALSE;
-    }
-
-    return OPJ_TRUE;
-}
diff --git a/src/lib/openmj2/jp2.h b/src/lib/openmj2/jp2.h
deleted file mode 100644 (file)
index 582fb50..0000000
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef __JP2_H
-#define __JP2_H
-/**
-@file jp2.h
-@brief The JPEG-2000 file format Reader/Writer (JP2)
-
-*/
-
-/** @defgroup JP2 JP2 - JPEG-2000 file format reader/writer */
-/*@{*/
-
-#define JP2_JP   0x6a502020     /**< JPEG 2000 signature box */
-#define JP2_FTYP 0x66747970     /**< File type box */
-#define JP2_JP2H 0x6a703268     /**< JP2 header box */
-#define JP2_IHDR 0x69686472     /**< Image header box */
-#define JP2_COLR 0x636f6c72     /**< Colour specification box */
-#define JP2_JP2C 0x6a703263     /**< Contiguous codestream box */
-#define JP2_URL  0x75726c20     /**< URL box */
-#define JP2_DTBL 0x6474626c     /**< Data Reference box */
-#define JP2_BPCC 0x62706363     /**< Bits per component box */
-#define JP2_JP2  0x6a703220     /**< File type fields */
-#define JP2_PCLR 0x70636c72     /**< Palette box */
-#define JP2_CMAP 0x636d6170     /**< Component Mapping box */
-#define JP2_CDEF 0x63646566     /**< Channel Definition box */
-
-/* ----------------------------------------------------------------------- */
-/**
-Channel description: channel index, type, association
-*/
-typedef struct opj_jp2_cdef_info {
-    unsigned short cn, typ, asoc;
-} opj_jp2_cdef_info_t;
-
-/**
-Channel descriptions and number of descriptions
-*/
-typedef struct opj_jp2_cdef {
-    opj_jp2_cdef_info_t *info;
-    unsigned short n;
-} opj_jp2_cdef_t;
-
-/**
-Component mappings: channel index, mapping type, palette index
-*/
-typedef struct opj_jp2_cmap_comp {
-    unsigned short cmp;
-    unsigned char mtyp, pcol;
-} opj_jp2_cmap_comp_t;
-
-/**
-Palette data: table entries, palette columns
-*/
-typedef struct opj_jp2_pclr {
-    unsigned int *entries;
-    unsigned char *channel_sign;
-    unsigned char *channel_size;
-    opj_jp2_cmap_comp_t *cmap;
-    unsigned short nr_entries, nr_channels;
-} opj_jp2_pclr_t;
-
-/**
-Collector for ICC profile, palette, component mapping, channel description
-*/
-typedef struct opj_jp2_color {
-    unsigned char *icc_profile_buf;
-    int icc_profile_len;
-
-    opj_jp2_cdef_t *jp2_cdef;
-    opj_jp2_pclr_t *jp2_pclr;
-    unsigned char jp2_has_colr;
-} opj_jp2_color_t;
-
-/**
-JP2 component
-*/
-typedef struct opj_jp2_comps {
-    int depth;
-    int sgnd;
-    int bpcc;
-} opj_jp2_comps_t;
-
-/**
-JPEG-2000 file format reader/writer
-*/
-typedef struct opj_jp2 {
-    /** codec context */
-    opj_common_ptr cinfo;
-    /** handle to the J2K codec  */
-    opj_j2k_t *j2k;
-    unsigned int w;
-    unsigned int h;
-    unsigned int numcomps;
-    unsigned int bpc;
-    unsigned int C;
-    unsigned int UnkC;
-    unsigned int IPR;
-    unsigned int meth;
-    unsigned int approx;
-    unsigned int enumcs;
-    unsigned int precedence;
-    unsigned int brand;
-    unsigned int minversion;
-    unsigned int numcl;
-    unsigned int *cl;
-    opj_jp2_comps_t *comps;
-    unsigned int j2k_codestream_offset;
-    unsigned int j2k_codestream_length;
-    opj_bool ignore_pclr_cmap_cdef;
-} opj_jp2_t;
-
-/**
-JP2 Box
-*/
-typedef struct opj_jp2_box {
-    int length;
-    int type;
-    int init_pos;
-} opj_jp2_box_t;
-
-/** @name Exported functions */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-/**
-Write the JP2H box - JP2 Header box (used in MJ2)
-@param jp2 JP2 handle
-@param cio Output buffer stream
-*/
-void jp2_write_jp2h(opj_jp2_t *jp2, opj_cio_t *cio);
-/**
-Read the JP2H box - JP2 Header box (used in MJ2)
-@param jp2 JP2 handle
-@param cio Input buffer stream
-@param ext Collector for profile, cdef and pclr data
-@return Returns true if successful, returns false otherwise
-*/
-opj_bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, opj_jp2_color_t *color);
-/**
-Creates a JP2 decompression structure
-@param cinfo Codec context info
-@return Returns a handle to a JP2 decompressor if successful, returns NULL otherwise
-*/
-opj_jp2_t* jp2_create_decompress(opj_common_ptr cinfo);
-/**
-Destroy a JP2 decompressor handle
-@param jp2 JP2 decompressor handle to destroy
-*/
-void jp2_destroy_decompress(opj_jp2_t *jp2);
-/**
-Setup the decoder decoding parameters using user parameters.
-Decoding parameters are returned in jp2->j2k->cp.
-@param jp2 JP2 decompressor handle
-@param parameters decompression parameters
-*/
-void jp2_setup_decoder(opj_jp2_t *jp2, opj_dparameters_t *parameters);
-/**
-Decode an image from a JPEG-2000 file stream
-@param jp2 JP2 decompressor handle
-@param cio Input buffer stream
-@param cstr_info Codestream information structure if required, NULL otherwise
-@return Returns a decoded image if successful, returns NULL otherwise
-*/
-opj_image_t* opj_jp2_decode(opj_jp2_t *jp2, opj_cio_t *cio,
-                            opj_codestream_info_t *cstr_info);
-/**
-Creates a JP2 compression structure
-@param cinfo Codec context info
-@return Returns a handle to a JP2 compressor if successful, returns NULL otherwise
-*/
-opj_jp2_t* jp2_create_compress(opj_common_ptr cinfo);
-/**
-Destroy a JP2 compressor handle
-@param jp2 JP2 compressor handle to destroy
-*/
-void jp2_destroy_compress(opj_jp2_t *jp2);
-/**
-Setup the encoder parameters using the current image and using user parameters.
-Coding parameters are returned in jp2->j2k->cp.
-@param jp2 JP2 compressor handle
-@param parameters compression parameters
-@param image input filled image
-*/
-void jp2_setup_encoder(opj_jp2_t *jp2, opj_cparameters_t *parameters,
-                       opj_image_t *image);
-/**
-Encode an image into a JPEG-2000 file stream
-@param jp2 JP2 compressor handle
-@param cio Output buffer stream
-@param image Image to encode
-@param cstr_info Codestream information structure if required, NULL otherwise
-@return Returns true if successful, returns false otherwise
-*/
-opj_bool opj_jp2_encode(opj_jp2_t *jp2, opj_cio_t *cio, opj_image_t *image,
-                        opj_codestream_info_t *cstr_info);
-
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif /* __JP2_H */
-
diff --git a/src/lib/openmj2/jpt.c b/src/lib/openmj2/jpt.c
deleted file mode 100644 (file)
index 8e94583..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "opj_includes.h"
-
-/*
- * Read the information contains in VBAS [JPP/JPT stream message header]
- * Store information (7 bits) in value
- *
- */
-static unsigned int jpt_read_VBAS_info(opj_cio_t *cio, unsigned int value)
-{
-    unsigned char elmt;
-
-    elmt = cio_read(cio, 1);
-    while ((elmt >> 7) == 1) {
-        value = (value << 7);
-        value |= (elmt & 0x7f);
-        elmt = cio_read(cio, 1);
-    }
-    value = (value << 7);
-    value |= (elmt & 0x7f);
-
-    return value;
-}
-
-/*
- * Initialize the value of the message header structure
- *
- */
-void jpt_init_msg_header(opj_jpt_msg_header_t * header)
-{
-    header->Id = 0;     /* In-class Identifier    */
-    header->last_byte = 0;  /* Last byte information  */
-    header->Class_Id = 0;       /* Class Identifier       */
-    header->CSn_Id = 0;     /* CSn : index identifier */
-    header->Msg_offset = 0; /* Message offset         */
-    header->Msg_length = 0; /* Message length         */
-    header->Layer_nb = 0;       /* Auxiliary for JPP case */
-}
-
-/*
- * Re-initialize the value of the message header structure
- *
- * Only parameters always present in message header
- *
- */
-static void jpt_reinit_msg_header(opj_jpt_msg_header_t * header)
-{
-    header->Id = 0;     /* In-class Identifier    */
-    header->last_byte = 0;  /* Last byte information  */
-    header->Msg_offset = 0; /* Message offset         */
-    header->Msg_length = 0; /* Message length         */
-}
-
-/*
- * Read the message header for a JPP/JPT - stream
- *
- */
-void jpt_read_msg_header(opj_common_ptr cinfo, opj_cio_t *cio,
-                         opj_jpt_msg_header_t *header)
-{
-    unsigned char elmt, Class = 0, CSn = 0;
-    jpt_reinit_msg_header(header);
-
-    /* ------------- */
-    /* VBAS : Bin-ID */
-    /* ------------- */
-    elmt = cio_read(cio, 1);
-
-    /* See for Class and CSn */
-    switch ((elmt >> 5) & 0x03) {
-    case 0:
-        opj_event_msg(cinfo, EVT_ERROR,
-                      "Forbidden value encounter in message header !!\n");
-        break;
-    case 1:
-        Class = 0;
-        CSn = 0;
-        break;
-    case 2:
-        Class = 1;
-        CSn = 0;
-        break;
-    case 3:
-        Class = 1;
-        CSn = 1;
-        break;
-    default:
-        break;
-    }
-
-    /* see information on bits 'c' [p 10 : A.2.1 general, ISO/IEC FCD 15444-9] */
-    if (((elmt >> 4) & 0x01) == 1) {
-        header->last_byte = 1;
-    }
-
-    /* In-class identifier */
-    header->Id |= (elmt & 0x0f);
-    if ((elmt >> 7) == 1) {
-        header->Id = jpt_read_VBAS_info(cio, header->Id);
-    }
-
-    /* ------------ */
-    /* VBAS : Class */
-    /* ------------ */
-    if (Class == 1) {
-        header->Class_Id = 0;
-        header->Class_Id = jpt_read_VBAS_info(cio, header->Class_Id);
-    }
-
-    /* ---------- */
-    /* VBAS : CSn */
-    /* ---------- */
-    if (CSn == 1) {
-        header->CSn_Id = 0;
-        header->CSn_Id = jpt_read_VBAS_info(cio, header->CSn_Id);
-    }
-
-    /* ----------------- */
-    /* VBAS : Msg_offset */
-    /* ----------------- */
-    header->Msg_offset = jpt_read_VBAS_info(cio, header->Msg_offset);
-
-    /* ----------------- */
-    /* VBAS : Msg_length */
-    /* ----------------- */
-    header->Msg_length = jpt_read_VBAS_info(cio, header->Msg_length);
-
-    /* ---------- */
-    /* VBAS : Aux */
-    /* ---------- */
-    if ((header->Class_Id & 0x01) == 1) {
-        header->Layer_nb = 0;
-        header->Layer_nb = jpt_read_VBAS_info(cio, header->Layer_nb);
-    }
-}
diff --git a/src/lib/openmj2/jpt.h b/src/lib/openmj2/jpt.h
deleted file mode 100644 (file)
index 9b039c8..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __JPT_H
-#define __JPT_H
-/**
-@file jpt.h
-@brief JPT-stream reader (JPEG 2000, JPIP)
-
-JPT-stream functions are implemented in J2K.C.
-*/
-
-/**
-Message Header JPT stream structure
-*/
-typedef struct opj_jpt_msg_header {
-    /** In-class Identifier */
-    unsigned int Id;
-    /** Last byte information */
-    unsigned int last_byte;
-    /** Class Identifier */
-    unsigned int Class_Id;
-    /** CSn : index identifier */
-    unsigned int CSn_Id;
-    /** Message offset */
-    unsigned int Msg_offset;
-    /** Message length */
-    unsigned int Msg_length;
-    /** Auxiliary for JPP case */
-    unsigned int Layer_nb;
-} opj_jpt_msg_header_t;
-
-/* ----------------------------------------------------------------------- */
-
-/**
-Initialize the value of the message header structure
-@param header Message header structure
-*/
-void jpt_init_msg_header(opj_jpt_msg_header_t * header);
-
-/**
-Read the message header for a JPP/JPT - stream
-@param cinfo Codec context info
-@param cio CIO handle
-@param header Message header structure
-*/
-void jpt_read_msg_header(opj_common_ptr cinfo, opj_cio_t *cio,
-                         opj_jpt_msg_header_t *header);
-
-#endif
diff --git a/src/lib/openmj2/mct.c b/src/lib/openmj2/mct.c
deleted file mode 100644 (file)
index 2d3a36c..0000000
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifdef __SSE__
-#include <xmmintrin.h>
-#endif
-
-#include "opj_includes.h"
-
-/* <summary> */
-/* This table contains the norms of the basis function of the reversible MCT. */
-/* </summary> */
-static const double mct_norms[3] = { 1.732, .8292, .8292 };
-
-/* <summary> */
-/* This table contains the norms of the basis function of the irreversible MCT. */
-/* </summary> */
-static const double mct_norms_real[3] = { 1.732, 1.805, 1.573 };
-
-/* <summary> */
-/* Forward reversible MCT. */
-/* </summary> */
-void mct_encode(
-    int* restrict c0,
-    int* restrict c1,
-    int* restrict c2,
-    int n)
-{
-    int i;
-    for (i = 0; i < n; ++i) {
-        int r = c0[i];
-        int g = c1[i];
-        int b = c2[i];
-        int y = (r + (g * 2) + b) >> 2;
-        int u = b - g;
-        int v = r - g;
-        c0[i] = y;
-        c1[i] = u;
-        c2[i] = v;
-    }
-}
-
-/* <summary> */
-/* Inverse reversible MCT. */
-/* </summary> */
-void mct_decode(
-    int* restrict c0,
-    int* restrict c1,
-    int* restrict c2,
-    int n)
-{
-    int i;
-    for (i = 0; i < n; ++i) {
-        int y = c0[i];
-        int u = c1[i];
-        int v = c2[i];
-        int g = y - ((u + v) >> 2);
-        int r = v + g;
-        int b = u + g;
-        c0[i] = r;
-        c1[i] = g;
-        c2[i] = b;
-    }
-}
-
-/* <summary> */
-/* Get norm of basis function of reversible MCT. */
-/* </summary> */
-double mct_getnorm(int compno)
-{
-    return mct_norms[compno];
-}
-
-/* <summary> */
-/* Forward irreversible MCT. */
-/* </summary> */
-void mct_encode_real(
-    int* restrict c0,
-    int* restrict c1,
-    int* restrict c2,
-    int n)
-{
-    int i;
-    for (i = 0; i < n; ++i) {
-        int r = c0[i];
-        int g = c1[i];
-        int b = c2[i];
-        int y =  fix_mul(r, 2449) + fix_mul(g, 4809) + fix_mul(b, 934);
-        int u = -fix_mul(r, 1382) - fix_mul(g, 2714) + fix_mul(b, 4096);
-        int v =  fix_mul(r, 4096) - fix_mul(g, 3430) - fix_mul(b, 666);
-        c0[i] = y;
-        c1[i] = u;
-        c2[i] = v;
-    }
-}
-
-/* <summary> */
-/* Inverse irreversible MCT. */
-/* </summary> */
-void mct_decode_real(
-    float* restrict c0,
-    float* restrict c1,
-    float* restrict c2,
-    int n)
-{
-    int i;
-#ifdef __SSE__
-    __m128 vrv, vgu, vgv, vbu;
-    vrv = _mm_set1_ps(1.402f);
-    vgu = _mm_set1_ps(0.34413f);
-    vgv = _mm_set1_ps(0.71414f);
-    vbu = _mm_set1_ps(1.772f);
-    for (i = 0; i < (n >> 3); ++i) {
-        __m128 vy, vu, vv;
-        __m128 vr, vg, vb;
-
-        vy = _mm_load_ps(c0);
-        vu = _mm_load_ps(c1);
-        vv = _mm_load_ps(c2);
-        vr = _mm_add_ps(vy, _mm_mul_ps(vv, vrv));
-        vg = _mm_sub_ps(_mm_sub_ps(vy, _mm_mul_ps(vu, vgu)), _mm_mul_ps(vv, vgv));
-        vb = _mm_add_ps(vy, _mm_mul_ps(vu, vbu));
-        _mm_store_ps(c0, vr);
-        _mm_store_ps(c1, vg);
-        _mm_store_ps(c2, vb);
-        c0 += 4;
-        c1 += 4;
-        c2 += 4;
-
-        vy = _mm_load_ps(c0);
-        vu = _mm_load_ps(c1);
-        vv = _mm_load_ps(c2);
-        vr = _mm_add_ps(vy, _mm_mul_ps(vv, vrv));
-        vg = _mm_sub_ps(_mm_sub_ps(vy, _mm_mul_ps(vu, vgu)), _mm_mul_ps(vv, vgv));
-        vb = _mm_add_ps(vy, _mm_mul_ps(vu, vbu));
-        _mm_store_ps(c0, vr);
-        _mm_store_ps(c1, vg);
-        _mm_store_ps(c2, vb);
-        c0 += 4;
-        c1 += 4;
-        c2 += 4;
-    }
-    n &= 7;
-#endif
-    for (i = 0; i < n; ++i) {
-        float y = c0[i];
-        float u = c1[i];
-        float v = c2[i];
-        float r = y + (v * 1.402f);
-        float g = y - (u * 0.34413f) - (v * (0.71414f));
-        float b = y + (u * 1.772f);
-        c0[i] = r;
-        c1[i] = g;
-        c2[i] = b;
-    }
-}
-
-/* <summary> */
-/* Get norm of basis function of irreversible MCT. */
-/* </summary> */
-double mct_getnorm_real(int compno)
-{
-    return mct_norms_real[compno];
-}
diff --git a/src/lib/openmj2/mct.h b/src/lib/openmj2/mct.h
deleted file mode 100644 (file)
index 3c1e1b7..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __MCT_H
-#define __MCT_H
-/**
-@file mct.h
-@brief Implementation of a multi-component transforms (MCT)
-
-The functions in MCT.C have for goal to realize reversible and irreversible multicomponent
-transform. The functions in MCT.C are used by some function in TCD.C.
-*/
-
-/** @defgroup MCT MCT - Implementation of a multi-component transform */
-/*@{*/
-
-/** @name Exported functions */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-/**
-Apply a reversible multi-component transform to an image
-@param c0 Samples for red component
-@param c1 Samples for green component
-@param c2 Samples blue component
-@param n Number of samples for each component
-*/
-void mct_encode(int *c0, int *c1, int *c2, int n);
-/**
-Apply a reversible multi-component inverse transform to an image
-@param c0 Samples for luminance component
-@param c1 Samples for red chrominance component
-@param c2 Samples for blue chrominance component
-@param n Number of samples for each component
-*/
-void mct_decode(int *c0, int *c1, int *c2, int n);
-/**
-Get norm of the basis function used for the reversible multi-component transform
-@param compno Number of the component (0->Y, 1->U, 2->V)
-@return
-*/
-double mct_getnorm(int compno);
-
-/**
-Apply an irreversible multi-component transform to an image
-@param c0 Samples for red component
-@param c1 Samples for green component
-@param c2 Samples blue component
-@param n Number of samples for each component
-*/
-void mct_encode_real(int *c0, int *c1, int *c2, int n);
-/**
-Apply an irreversible multi-component inverse transform to an image
-@param c0 Samples for luminance component
-@param c1 Samples for red chrominance component
-@param c2 Samples for blue chrominance component
-@param n Number of samples for each component
-*/
-void mct_decode_real(float* c0, float* c1, float* c2, int n);
-/**
-Get norm of the basis function used for the irreversible multi-component transform
-@param compno Number of the component (0->Y, 1->U, 2->V)
-@return
-*/
-double mct_getnorm_real(int compno);
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif /* __MCT_H */
diff --git a/src/lib/openmj2/mj2.c b/src/lib/openmj2/mj2.c
deleted file mode 100644 (file)
index 3cbf83f..0000000
+++ /dev/null
@@ -1,3089 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "opj_includes.h"
-#include "mj2.h"
-
-/** @defgroup JP2 JP2 - JPEG-2000 file format reader/writer */
-/*@{*/
-
-/** @name Local static functions */
-/*@{*/
-
-/*
-*
-* Read box headers
-*
-*/
-
-int mj2_read_boxhdr(mj2_box_t * box, opj_cio_t *cio)
-{
-    box->init_pos = cio_tell(cio);
-    box->length = cio_read(cio, 4);
-    box->type = cio_read(cio, 4);
-    if (box->length == 1) {
-        if (cio_read(cio, 4) != 0) {
-            opj_event_msg(cio->cinfo, EVT_ERROR,
-                          "Error: Cannot handle box sizes higher than 2^32\n");
-            return 1;
-        };
-        box->length = cio_read(cio, 4);
-        if (box->length == 0) {
-            box->length = cio_numbytesleft(cio) + 12;
-        }
-    } else if (box->length == 0) {
-        box->length = cio_numbytesleft(cio) + 8;
-    }
-    return 0;
-}
-
-/*
-*
-* Initialisation of a Standard Movie, given a simple movie structure defined by the user
-* The movie will have one sample per chunk
-*
-* Arguments: opj_mj2_t * movie
-* Several variables of "movie" must be defined in order to enable a correct execution of
-* this function:
-*   - The number of tracks of each type (movie->num_vtk, movie->num_stk, movie->num_htk)
-*   - The memory for each must be allocated (movie->tk)
-*   - For each track:
-*     The track type (tk->track_type)
-*     The number of sample (tk->num_samples)
-*     The sample rate (tk->sample_rate)
-*
-*/
-
-int OPJ_CALLCONV mj2_init_stdmovie(opj_mj2_t * movie)
-{
-    mj2_tk_t *tk0;
-    int i, w, h, prec;
-    unsigned int j;
-    time_t ltime;
-
-    movie->brand = MJ2_MJ2;
-    movie->minversion = 0;
-    movie->num_cl = 2;
-    movie->cl = (unsigned int*) opj_malloc(movie->num_cl * sizeof(unsigned int));
-
-    movie->cl[0] = MJ2_MJ2;
-    movie->cl[1] = MJ2_MJ2S;
-    time(&ltime);         /* Time since 1/1/70 */
-    movie->creation_time = (unsigned int) ltime +
-                           2082844800; /* Seconds between 1/1/04 and 1/1/70 */
-    movie->timescale = 1000;
-
-    movie->rate = 1 <<
-                  16;        /* Rate to play presentation  (default = 0x00010000)          */
-    movie->volume = 1 <<
-                    8;       /* Movie volume (default = 0x0100)                            */
-    movie->trans_matrix[0] =
-        0x00010000;  /* Transformation matrix for video                            */
-    movie->trans_matrix[1] =
-        0;   /* Unity is { 0x00010000,0,0,0,0x00010000,0,0,0,0x40000000 }  */
-    movie->trans_matrix[2] = 0;
-    movie->trans_matrix[3] = 0;
-    movie->trans_matrix[4] = 0x00010000;
-    movie->trans_matrix[5] = 0;
-    movie->trans_matrix[6] = 0;
-    movie->trans_matrix[7] = 0;
-    movie->trans_matrix[8] = 0x40000000;
-    movie->next_tk_id = 1;
-
-    tk0 = &movie->tk[0];
-    w = tk0->w;
-    h = tk0->h;
-    prec = tk0->depth;
-
-    for (i = 0; i < movie->num_htk + movie->num_stk + movie->num_vtk; i++) {
-        mj2_tk_t *tk = &movie->tk[i];
-
-        movie->next_tk_id++;
-        tk->jp2_struct.comps = NULL;
-        tk->jp2_struct.cl = NULL;
-
-        if (tk->track_type == 0) { /* no sound or hint track */
-            if (tk->num_samples == 0) {
-                return 1;
-            }
-
-            tk->w = w;
-            tk->h = h;
-            tk->depth = prec;
-            tk->Dim[0] = 0;
-            tk->Dim[1] = 0;
-
-            tk->timescale =
-                1000; /* Timescale = 1 ms                                          */
-
-            tk->chunk[0].num_samples = 1;
-            tk->chunk[0].sample_descr_idx = 1;
-
-            tk->same_sample_size = 0;
-
-            tk->num_samplestochunk = 1;   /* One sample per chunk  */
-            tk->sampletochunk = (mj2_sampletochunk_t*) opj_malloc(tk->num_samplestochunk *
-                                sizeof(mj2_sampletochunk_t));
-            tk->sampletochunk[0].first_chunk = 1;
-            tk->sampletochunk[0].samples_per_chunk = 1;
-            tk->sampletochunk[0].sample_descr_idx = 1;
-
-            if (tk->sample_rate == 0) {
-                opj_event_msg(tk->cinfo, EVT_ERROR,
-                              "Error while initializing MJ2 movie: Sample rate of track"
-                              " %d must be different from zero\n", tk->track_ID);
-                return 1;
-            }
-
-            for (j = 0; j < tk->num_samples; j++) {
-                tk->sample[j].sample_delta = tk->timescale / tk->sample_rate;
-            }
-
-            tk->num_tts = 1;
-            tk->tts = (mj2_tts_t*) opj_malloc(tk->num_tts * sizeof(mj2_tts_t));
-            tk->tts[0].sample_count = tk->num_samples;
-            tk->tts[0].sample_delta = tk->timescale / tk->sample_rate;
-
-            tk->horizresolution =
-                0x00480000; /* Horizontal resolution (typically 72)                       */
-            tk->vertresolution =
-                0x00480000;  /* Vertical resolution (typically 72)                         */
-            tk->compressorname[0] =
-                0x0f4d6f74;   /* Compressor Name[]: Motion JPEG2000                         */
-            tk->compressorname[1] = 0x696f6e20;
-            tk->compressorname[2] = 0x4a504547;
-            tk->compressorname[3] = 0x32303030;
-            tk->compressorname[4] = 0x00120000;
-            tk->compressorname[5] = 0;
-            tk->compressorname[6] = 0x00000042;
-            tk->compressorname[7] = 0x000000DC;
-            tk->num_url =
-                0;      /* Number of URL                                              */
-            tk->num_urn =
-                0;      /* Number of URN                                              */
-            tk->graphicsmode =
-                0; /* Graphicsmode                                               */
-            tk->opcolor[0] =
-                0;   /* OpColor                                                    */
-            tk->opcolor[1] =
-                0;   /* OpColor                                                    */
-            tk->opcolor[2] =
-                0;   /* OpColor                                                    */
-            tk->creation_time =
-                movie->creation_time; /* Seconds between 1/1/04 and 1/1/70          */
-            tk->language = 0;     /* Language (undefined)                       */
-            tk->layer = 0;
-            tk->volume = 1 << 8;      /* Movie volume (default = 0x0100) */
-            tk->trans_matrix[0] = 0x00010000; /* Transformation matrix for track */
-            tk->trans_matrix[1] =
-                0;  /* Unity is { 0x00010000,0,0,0,0x00010000,0,0,0,0x40000000 }  */
-            tk->trans_matrix[2] = 0;
-            tk->trans_matrix[3] = 0;
-            tk->trans_matrix[4] = 0x00010000;
-            tk->trans_matrix[5] = 0;
-            tk->trans_matrix[6] = 0;
-            tk->trans_matrix[7] = 0;
-            tk->trans_matrix[8] = 0x40000000;
-            tk->fieldcount = 1;
-            tk->fieldorder = 0;
-            tk->or_fieldcount = 1;
-            tk->or_fieldorder = 0;
-            tk->num_br = 2;
-            tk->br = (unsigned int*) opj_malloc(tk->num_br * sizeof(unsigned int));
-            tk->br[0] = MJ2_JP2;
-            tk->br[1] = MJ2_J2P0;
-            tk->num_jp2x = 0;
-            tk->hsub =
-                2;     /* 4:2:0                                                      */
-            tk->vsub =
-                2;     /* 4:2:0                                                      */
-            tk->hoff = 0;
-            tk->voff = 0;
-            tk->visual_w = tk->w << 16;
-            tk->visual_h = tk->h << 16;
-        } else {
-            tk->num_br = 0;
-            tk->jp2xdata = NULL;
-        }
-    }
-    return 0;
-}
-
-/*
-* Time To Sample box Decompact
-*
-*/
-void mj2_tts_decompact(mj2_tk_t * tk)
-{
-    int i, j;
-    tk->num_samples = 0;
-    for (i = 0; i < tk->num_tts; i++) {
-        tk->num_samples += tk->tts[i].sample_count;
-    }
-
-    tk->sample = (mj2_sample_t*) opj_malloc(tk->num_samples * sizeof(mj2_sample_t));
-
-    for (i = 0; i < tk->num_tts; i++) {
-        for (j = 0; j < tk->tts[i].sample_count; j++) {
-            tk->sample[j].sample_delta = tk->tts[i].sample_delta;
-        }
-    }
-}
-
-/*
-* Sample To Chunk box Decompact
-*
-*/
-void mj2_stsc_decompact(mj2_tk_t * tk)
-{
-    unsigned int i, j, k, sampleno = 0;
-
-    if (tk->num_samplestochunk == 1) {
-        tk->num_chunks =
-            (unsigned int) ceil((double) tk->num_samples /
-                                (double) tk->sampletochunk[0].samples_per_chunk);
-        tk->chunk = (mj2_chunk_t*) opj_malloc(tk->num_chunks * sizeof(mj2_chunk_t));
-        for (k = 0; k < tk->num_chunks; k++) {
-            tk->chunk[k].num_samples = tk->sampletochunk[0].samples_per_chunk;
-        }
-
-    } else {
-        tk->chunk = (mj2_chunk_t*) opj_malloc(tk->num_samples * sizeof(mj2_chunk_t));
-        tk->num_chunks = 0;
-        for (i = 0; i < tk->num_samplestochunk - 1 ; i++) {
-            for (j = tk->sampletochunk[i].first_chunk - 1;
-                    j < tk->sampletochunk[i + 1].first_chunk - 1; j++) {
-                tk->chunk[j].num_samples = tk->sampletochunk[i].samples_per_chunk;
-                tk->num_chunks++;
-                sampleno += tk->chunk[j].num_samples;
-            }
-        }
-        tk->num_chunks += (int)(tk->num_samples  - sampleno) /
-                          tk->sampletochunk[tk->num_samplestochunk - 1].samples_per_chunk;
-        for (k = tk->sampletochunk[tk->num_samplestochunk - 1].first_chunk - 1;
-                k < tk->num_chunks; k++) {
-            tk->chunk[k].num_samples =
-                tk->sampletochunk[tk->num_samplestochunk - 1].samples_per_chunk;
-        }
-        tk->chunk = (mj2_chunk_t*)
-                    opj_realloc(tk->chunk, tk->num_chunks * sizeof(mj2_chunk_t));
-    }
-
-}
-
-
-/*
-* Chunk offset box Decompact
-*
-*/
-void mj2_stco_decompact(mj2_tk_t * tk)
-{
-    unsigned int i, j, k = 0;
-    unsigned int intra_chunk_offset;
-
-    for (i = 0; i < tk->num_chunks; i++) {
-        intra_chunk_offset = 0;
-        for (j = 0; j < tk->chunk[i].num_samples; j++) {
-            tk->sample[k].offset = intra_chunk_offset + tk->chunk[i].offset;
-            intra_chunk_offset += tk->sample[k].sample_size;
-            k++;
-        }
-    }
-}
-
-/*
-* Write the JP box
-*
-* JP Signature box
-*
-*/
-void OPJ_CALLCONV mj2_write_jp(opj_cio_t *cio)
-{
-    mj2_box_t box;
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-
-    cio_write(cio, MJ2_JP, 4);        /* JP */
-    cio_write(cio, 0x0d0a870a, 4);    /* 0x0d0a870a required in a JP box */
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-/*
-* Read the JP box
-*
-* JPEG 2000 signature
-*
-*/
-int mj2_read_jp(opj_cio_t *cio)
-{
-    mj2_box_t box;
-
-    mj2_read_boxhdr(&box, cio);
-    if (MJ2_JP != box.type) { /* Check Marker */
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected JP Marker\n");
-        return 1;
-    }
-    if (0x0d0a870a != cio_read(cio,
-                               4)) { /* read the 0x0d0a870a required in a JP box */
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with JP Marker\n");
-        return 1;
-    }
-    if (cio_tell(cio) - box.init_pos != box.length) { /* Check box length */
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with JP Box size \n");
-        return 1;
-    }
-    return 0;
-
-}
-
-/*
-* Write the FTYP box
-*
-* File type box
-*
-*/
-void OPJ_CALLCONV mj2_write_ftyp(opj_mj2_t * movie, opj_cio_t *cio)
-{
-    int i;
-    mj2_box_t box;
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-
-    cio_write(cio, MJ2_FTYP, 4);  /* FTYP       */
-    cio_write(cio, movie->brand, 4);  /* BR         */
-    cio_write(cio, movie->minversion, 4); /* MinV       */
-
-    for (i = 0; i < movie->num_cl; i++) {
-        cio_write(cio, movie->cl[i], 4);    /* CL         */
-    }
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);    /* Length     */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-/*
-* Read the FTYP box
-*
-* File type box
-*
-*/
-int mj2_read_ftyp(opj_mj2_t * movie, opj_cio_t *cio)
-{
-    int i;
-    mj2_box_t box;
-
-    mj2_read_boxhdr(&box, cio);   /* Box Size */
-    if (MJ2_FTYP != box.type) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected FTYP Marker\n");
-        return 1;
-    }
-
-    movie->brand = cio_read(cio, 4);  /* BR              */
-    movie->minversion = cio_read(cio, 4); /* MinV            */
-    movie->num_cl = (box.length - 16) / 4;
-    movie->cl = (unsigned int*) opj_malloc(movie->num_cl * sizeof(unsigned int));
-
-    for (i = movie->num_cl - 1; i > -1; i--) {
-        movie->cl[i] = cio_read(cio, 4);    /* CLi */
-    }
-
-    if (cio_tell(cio) - box.init_pos != box.length) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with FTYP Box\n");
-        return 1;
-    }
-    return 0;
-}
-
-
-/*
-* Write the STCO box
-*
-* Chunk Offset Box
-*
-*/
-void mj2_write_stco(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    mj2_box_t box;
-    unsigned int i;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, MJ2_STCO, 4);  /* STCO       */
-
-    cio_write(cio, 0, 4);     /* Version = 0, flags = 0 */
-
-    cio_write(cio, tk->num_chunks, 4);    /* Entry Count */
-
-    for (i = 0; i < tk->num_chunks; i++) {
-        cio_write(cio, tk->chunk[i].offset, 4); /* Entry offset */
-    }
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);    /* L          */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-/*
-* Read the STCO box
-*
-* Chunk Offset Box
-*
-*/
-int mj2_read_stco(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    unsigned int i;
-    mj2_box_t box;
-
-    mj2_read_boxhdr(&box, cio);   /* Box Size */
-    if (MJ2_STCO != box.type) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected STCO Marker\n");
-        return 1;
-    }
-
-    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error: Only Version 0 handled in STCO box\n");
-        return 1;
-    }
-
-    if (0 != cio_read(cio, 3)) {  /* Flags = 0  */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error with flag in STCO box. Expected flag 0\n");
-        return 1;
-    }
-
-
-    if (cio_read(cio, 4) != tk->num_chunks) {
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error in STCO box: expecting same amount of entry-count as chunks \n");
-    } else {
-        for (i = 0; i < tk->num_chunks; i++) {
-            tk->chunk[i].offset = cio_read(cio, 4);   /* Entry offset */
-        }
-    }
-
-    mj2_stco_decompact(tk);
-
-
-    if (cio_tell(cio) - box.init_pos != box.length) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with STCO Box size\n");
-        return 1;
-    }
-    return 0;
-}
-
-/*
-* Write the STSZ box
-*
-* Sample size box
-*
-*/
-void mj2_write_stsz(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    mj2_box_t box;
-    unsigned int i;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, MJ2_STSZ, 4);  /* STSZ       */
-
-    cio_write(cio, 0, 4);     /* Version = 0, flags = 0 */
-
-    if (tk->same_sample_size == 1) {  /* If they all have the same size */
-        cio_write(cio, tk->sample[0].sample_size, 4);   /* Size */
-
-        cio_write(cio, 1, 4);       /* Entry count = 1 */
-    }
-
-    else {
-        cio_write(cio, 0,
-                  4);       /* Sample Size = 0 because they all have different sizes */
-
-        cio_write(cio, tk->num_samples, 4); /* Sample Count */
-
-        for (i = 0; i < tk->num_samples; i++) {
-            cio_write(cio, tk->sample[i].sample_size, 4);
-        }
-    }
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);    /* L          */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-/*
-* Read the STSZ box
-*
-* Sample size box
-*
-*/
-int mj2_read_stsz(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    int sample_size;
-    unsigned int i;
-    mj2_box_t box;
-
-    mj2_read_boxhdr(&box, cio);   /* Box Size */
-    if (MJ2_STSZ != box.type) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected STSZ Marker\n");
-        return 1;
-    }
-
-
-    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error: Only Version 0 handled in STSZ box\n");
-        return 1;
-    }
-
-    if (0 != cio_read(cio, 3)) {  /* Flags = 0  */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error with flag in STSZ box. Expected flag 0\n");
-        return 1;
-    }
-
-    sample_size = cio_read(cio, 4);
-
-    if (sample_size != 0) {   /* Samples do have the same size */
-        tk->same_sample_size = 1;
-        for (i = 0; i < tk->num_samples; i++) {
-            tk->sample[i].sample_size = sample_size;
-        }
-        cio_skip(cio, 4);       /* Sample count = 1 */
-    } else {
-        tk->same_sample_size = 0;
-        if (tk->num_samples != cio_read(cio, 4)) {  /* Sample count */
-            opj_event_msg(cio->cinfo, EVT_ERROR,
-                          "Error in STSZ box. Expected that sample-count is number of samples in track\n");
-            return 1;
-        }
-        for (i = 0; i < tk->num_samples; i++) {
-            tk->sample[i].sample_size = cio_read(cio, 4); /* Sample Size */
-        }
-
-        if (cio_tell(cio) - box.init_pos != box.length) {
-            opj_event_msg(cio->cinfo, EVT_ERROR, "Error with STSZ Box size\n");
-            return 1;
-        }
-    }
-    return 0;
-
-}
-
-/*
-* Write the STSC box
-*
-* Sample to Chunk
-*
-*/
-void mj2_write_stsc(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    unsigned int i;
-    mj2_box_t box;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, MJ2_STSC, 4);  /* STSC       */
-
-    cio_write(cio, 0, 4);     /* Version = 0, flags = 0 */
-
-    cio_write(cio, tk->num_samplestochunk, 4);    /* Entry Count */
-
-    for (i = 0; i < tk->num_samplestochunk; i++) {
-        cio_write(cio, tk->sampletochunk[i].first_chunk, 4);    /* First Chunk */
-        cio_write(cio, tk->sampletochunk[i].samples_per_chunk,
-                  4);  /* Samples per chunk */
-        cio_write(cio, tk->sampletochunk[i].sample_descr_idx,
-                  4);   /* Samples description index */
-    }
-
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);    /* L          */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-/*
-* Read the STSC box
-*
-* Sample to Chunk
-*
-*/
-int mj2_read_stsc(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    unsigned int i;
-    mj2_box_t box;
-
-    mj2_read_boxhdr(&box, cio);   /* Box Size */
-    if (MJ2_STSC != box.type) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected STSC Marker\n");
-        return 1;
-    }
-
-
-    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error: Only Version 0 handled in STSC box\n");
-        return 1;
-    }
-
-    if (0 != cio_read(cio, 3)) {  /* Flags = 0  */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error with flag in STSC box. Expected flag 0\n");
-        return 1;
-    }
-
-    tk->num_samplestochunk = cio_read(cio, 4);
-
-    tk->sampletochunk = (mj2_sampletochunk_t*) opj_malloc(tk->num_samplestochunk *
-                        sizeof(mj2_sampletochunk_t));
-
-    for (i = 0; i < tk->num_samplestochunk; i++) {
-        tk->sampletochunk[i].first_chunk = cio_read(cio, 4);
-        tk->sampletochunk[i].samples_per_chunk = cio_read(cio, 4);
-        tk->sampletochunk[i].sample_descr_idx = cio_read(cio, 4);
-    }
-
-    mj2_stsc_decompact(tk);   /* decompact sample to chunk box */
-
-
-    if (cio_tell(cio) - box.init_pos != box.length) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with STSC Box size\n");
-        return 1;
-    }
-    return 0;
-}
-
-/*
-* Write the STTS box
-*
-* Time to Sample Box
-*
-*/
-void mj2_write_stts(mj2_tk_t * tk, opj_cio_t *cio)
-{
-
-    int i;
-    mj2_box_t box;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, MJ2_STTS, 4);  /* STTS       */
-
-    cio_write(cio, 0, 4);     /* Version = 0, flags = 0 */
-
-    cio_write(cio, tk->num_tts, 4);   /* entry_count */
-    for (i = 0; i < tk->num_tts; i++) {
-        cio_write(cio, tk->tts[i].sample_count, 4); /* Sample-count */
-        cio_write(cio, tk->tts[i].sample_delta, 4); /* Sample-Delta */
-    }
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);    /* L          */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-/*
-* Read the STTS box
-*
-*
-*
-*/
-int mj2_read_stts(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    int i;
-
-    mj2_box_t box;
-
-    mj2_read_boxhdr(&box, cio);
-    if (MJ2_STTS != box.type) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected STTS Marker\n");
-        return 1;
-    }
-
-
-    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error: Only Version 0 handled in STTS box\n");
-        return 1;
-    }
-
-    if (0 != cio_read(cio, 3)) {  /* Flags = 0  */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error with flag in STTS box. Expected flag 0\n");
-        return 1;
-    }
-
-    tk->num_tts = cio_read(cio, 4);
-
-    tk->tts = (mj2_tts_t*) opj_malloc(tk->num_tts * sizeof(mj2_tts_t));
-
-    for (i = 0; i < tk->num_tts; i++) {
-        tk->tts[i].sample_count = cio_read(cio, 4);
-        tk->tts[i].sample_delta = cio_read(cio, 4);
-    }
-
-    mj2_tts_decompact(tk);
-
-    if (cio_tell(cio) - box.init_pos != box.length) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with STTS Box size\n");
-        return 1;
-    }
-    return 0;
-}
-
-/*
-* Write the FIEL box
-*
-* Field coding Box
-*
-*/
-void mj2_write_fiel(mj2_tk_t * tk, opj_cio_t *cio)
-{
-
-    mj2_box_t box;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, MJ2_FIEL, 4);  /* STTS       */
-
-    cio_write(cio, tk->fieldcount, 1);    /* Field count */
-    cio_write(cio, tk->fieldorder, 1);    /* Field order */
-
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);    /* L          */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-/*
-* Read the FIEL box
-*
-* Field coding Box
-*
-*/
-int mj2_read_fiel(mj2_tk_t * tk, opj_cio_t *cio)
-{
-
-    mj2_box_t box;
-
-    mj2_read_boxhdr(&box, cio);
-    if (MJ2_FIEL != box.type) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected FIEL Marker\n");
-        return 1;
-    }
-
-
-    tk->fieldcount = cio_read(cio, 1);
-    tk->fieldorder = cio_read(cio, 1);
-
-    if (cio_tell(cio) - box.init_pos != box.length) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with FIEL Box size\n");
-        return 1;
-    }
-    return 0;
-}
-
-/*
-* Write the ORFO box
-*
-* Original Format Box
-*
-*/
-void mj2_write_orfo(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    mj2_box_t box;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, MJ2_ORFO, 4);
-
-    cio_write(cio, tk->or_fieldcount, 1); /* Original Field count */
-    cio_write(cio, tk->or_fieldorder, 1); /* Original Field order */
-
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);    /* L          */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-/*
-* Read the ORFO box
-*
-* Original Format Box
-*
-*/
-int mj2_read_orfo(mj2_tk_t * tk, opj_cio_t *cio)
-{
-
-    mj2_box_t box;
-
-    mj2_read_boxhdr(&box, cio);
-    if (MJ2_ORFO != box.type) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected ORFO Marker\n");
-        return 1;
-    }
-
-
-    tk->or_fieldcount = cio_read(cio, 1);
-    tk->or_fieldorder = cio_read(cio, 1);
-
-    if (cio_tell(cio) - box.init_pos != box.length) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with ORFO Box size\n");
-        return 1;
-    }
-    return 0;
-}
-
-/*
-* Write the JP2P box
-*
-* MJP2 Profile Box
-*
-*/
-void mj2_write_jp2p(mj2_tk_t * tk, opj_cio_t *cio)
-{
-
-    int i;
-    mj2_box_t box;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, MJ2_JP2P, 4);
-
-    cio_write(cio, 0, 4);     /* Version 0, flags =0 */
-
-    for (i = 0; i < tk->num_br; i++) {
-        cio_write(cio, tk->br[i], 4);
-    }
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);    /* L          */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-/*
-* Read the JP2P box
-*
-* MJP2 Profile Box
-*
-*/
-int mj2_read_jp2p(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    int i;
-
-    mj2_box_t box;
-
-    mj2_read_boxhdr(&box, cio);
-    if (MJ2_JP2P != box.type) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected JP2P Marker\n");
-        return 1;
-    }
-
-    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error: Only Version 0 handled in JP2P box\n");
-        return 1;
-    }
-
-    if (0 != cio_read(cio, 3)) {  /* Flags = 0  */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error with flag in JP2P box. Expected flag 0\n");
-        return 1;
-    }
-
-
-    tk->num_br = (box.length - 12) / 4;
-    tk->br = (unsigned int*) opj_malloc(tk->num_br * sizeof(unsigned int));
-
-    for (i = 0; i < tk->num_br; i++) {
-        tk->br[i] = cio_read(cio, 4);
-    }
-
-    if (cio_tell(cio) - box.init_pos != box.length) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with JP2P Box size\n");
-        return 1;
-    }
-    return 0;
-}
-
-/*
-* Write the JP2X box
-*
-* MJP2 Prefix Box
-*
-*/
-void mj2_write_jp2x(mj2_tk_t * tk, opj_cio_t *cio)
-{
-
-    int i;
-    mj2_box_t box;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, MJ2_JP2X, 4);
-
-    for (i = 0; i < tk->num_jp2x; i++) {
-        cio_write(cio, tk->jp2xdata[i], 1);
-    }
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);    /* L          */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-/*
-* Read the JP2X box
-*
-* MJP2 Prefix Box
-*
-*/
-int mj2_read_jp2x(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    unsigned int i;
-
-    mj2_box_t box;
-
-    mj2_read_boxhdr(&box, cio);
-    if (MJ2_JP2X != box.type) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected JP2X Marker\n");
-        return 1;
-    }
-
-
-    tk->num_jp2x = (box.length - 8);
-    tk->jp2xdata = (unsigned char*) opj_malloc(tk->num_jp2x * sizeof(
-                       unsigned char));
-
-    for (i = 0; i < tk->num_jp2x; i++) {
-        tk->jp2xdata[i] = cio_read(cio, 1);
-    }
-
-    if (cio_tell(cio) - box.init_pos != box.length) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with JP2X Box size\n");
-        return 1;
-    }
-    return 0;
-}
-
-/*
-* Write the JSUB box
-*
-* MJP2 Subsampling Box
-*
-*/
-void mj2_write_jsub(mj2_tk_t * tk, opj_cio_t *cio)
-{
-
-    mj2_box_t box;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, MJ2_JSUB, 4);
-
-    cio_write(cio, tk->hsub, 1);
-    cio_write(cio, tk->vsub, 1);
-    cio_write(cio, tk->hoff, 1);
-    cio_write(cio, tk->voff, 1);
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);    /* L          */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-/*
-* Read the JSUB box
-*
-* MJP2 Subsampling Box
-*
-*/
-int mj2_read_jsub(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    mj2_box_t box;
-
-    mj2_read_boxhdr(&box, cio);
-    if (MJ2_JSUB != box.type) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected JSUB Marker\n");
-        return 1;
-    }
-
-    tk->hsub = cio_read(cio, 1);
-    tk->vsub = cio_read(cio, 1);
-    tk->hoff = cio_read(cio, 1);;
-    tk->voff = cio_read(cio, 1);
-
-    if (cio_tell(cio) - box.init_pos != box.length) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with JSUB Box size\n");
-        return 1;
-    }
-    return 0;
-}
-
-/*
-* Write the SMJ2 box
-*
-* Visual Sample Entry Description
-*
-*/
-void mj2_write_smj2(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    mj2_box_t box;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, MJ2_MJ2, 4);   /* MJ2       */
-
-    cio_write(cio, 0, 4);     /* Version = 0, flags = 0 */
-
-    cio_write(cio, 1, 4);
-
-    cio_write(cio, 0, 2);     /* Pre-defined */
-
-    cio_write(cio, 0, 2);     /* Reserved */
-
-    cio_write(cio, 0, 4);     /* Pre-defined */
-    cio_write(cio, 0, 4);     /* Pre-defined */
-    cio_write(cio, 0, 4);     /* Pre-defined */
-
-    cio_write(cio, tk->w, 2);     /* Width  */
-    cio_write(cio, tk->h, 2);     /* Height */
-
-    cio_write(cio, tk->horizresolution, 4);   /* Horizontal resolution */
-    cio_write(cio, tk->vertresolution, 4);    /* Vertical resolution   */
-
-    cio_write(cio, 0, 4);     /* Reserved */
-
-    cio_write(cio, 1, 2);     /* Pre-defined = 1 */
-
-    cio_write(cio, tk->compressorname[0], 4); /* Compressor Name */
-    cio_write(cio, tk->compressorname[1], 4);
-    cio_write(cio, tk->compressorname[2], 4);
-    cio_write(cio, tk->compressorname[3], 4);
-    cio_write(cio, tk->compressorname[4], 4);
-    cio_write(cio, tk->compressorname[5], 4);
-    cio_write(cio, tk->compressorname[6], 4);
-    cio_write(cio, tk->compressorname[7], 4);
-
-    cio_write(cio, tk->depth, 2); /* Depth */
-
-    cio_write(cio, 0xffff, 2);        /* Pre-defined = -1 */
-
-    jp2_write_jp2h(&tk->jp2_struct, cio);
-
-    mj2_write_fiel(tk, cio);
-
-    if (tk->num_br != 0) {
-        mj2_write_jp2p(tk, cio);
-    }
-    if (tk->num_jp2x != 0) {
-        mj2_write_jp2x(tk, cio);
-    }
-
-    mj2_write_jsub(tk, cio);
-    mj2_write_orfo(tk, cio);
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);    /* L          */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-/*
-* Read the SMJ2 box
-*
-* Visual Sample Entry Description
-*
-*/
-int mj2_read_smj2(opj_image_t * img, mj2_tk_t * tk, opj_cio_t *cio)
-{
-    mj2_box_t box;
-    mj2_box_t box2;
-    opj_jp2_color_t color;
-    int i;
-    opj_bool ok;
-
-    mj2_read_boxhdr(&box, cio);
-
-    if (MJ2_MJ2 != box.type) {
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error in SMJ2 box: Expected MJ2 Marker\n");
-        return 1;
-    }
-
-    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error: Only Version 0 handled in MJP2 box\n");
-        return 1;
-    }
-
-    if (0 != cio_read(cio, 3)) {  /* Flags = 0  */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error with flag in MJP2 box. Expected flag 0\n");
-        return 1;
-    }
-
-    cio_skip(cio, 4);
-
-    cio_skip(cio, 2);         /* Pre-defined */
-
-    cio_skip(cio, 2);         /* Reserved */
-
-    cio_skip(cio, 4);         /* Pre-defined */
-    cio_skip(cio, 4);         /* Pre-defined */
-    cio_skip(cio, 4);         /* Pre-defined */
-
-    tk->w = cio_read(cio, 2);     /* Width  */
-    tk->h = cio_read(cio, 2);     /* Height */
-
-    tk->horizresolution = cio_read(cio, 4);   /* Horizontal resolution */
-    tk->vertresolution = cio_read(cio, 4);    /* Vertical resolution   */
-
-    cio_skip(cio, 4);         /* Reserved */
-
-    cio_skip(cio, 2);         /* Pre-defined = 1 */
-
-    tk->compressorname[0] = cio_read(cio, 4); /* Compressor Name */
-    tk->compressorname[1] = cio_read(cio, 4);
-    tk->compressorname[2] = cio_read(cio, 4);
-    tk->compressorname[3] = cio_read(cio, 4);
-    tk->compressorname[4] = cio_read(cio, 4);
-    tk->compressorname[5] = cio_read(cio, 4);
-    tk->compressorname[6] = cio_read(cio, 4);
-    tk->compressorname[7] = cio_read(cio, 4);
-
-    tk->depth = cio_read(cio, 2); /* Depth */
-
-    /* Init std value */
-    tk->num_jp2x = 0;
-    tk->fieldcount = 1;
-    tk->fieldorder = 0;
-    tk->or_fieldcount = 1;
-    tk->or_fieldorder = 0;
-
-    cio_skip(cio, 2);         /* Pre-defined = -1 */
-    memset(&color, 0, sizeof(opj_jp2_color_t));
-    tk->jp2_struct.cinfo = tk->cinfo;
-
-    ok = jp2_read_jp2h(&tk->jp2_struct, cio, &color);
-
-    tk->jp2_struct.cinfo = NULL;
-
-    if (ok == OPJ_FALSE) {
-        opj_event_msg(tk->cinfo, EVT_ERROR, "Error reading JP2H Box\n");
-        return 1;
-    }
-
-    tk->jp2_struct.comps = (opj_jp2_comps_t*) opj_malloc(tk->jp2_struct.numcomps *
-                           sizeof(opj_jp2_comps_t));
-    tk->jp2_struct.cl = (unsigned int*) opj_malloc(sizeof(unsigned int));
-
-    tk->num_br = 0;
-    tk->num_jp2x = 0;
-
-    for (i = 0; cio_tell(cio) - box.init_pos < box.length; i++) {
-        mj2_read_boxhdr(&box2, cio);
-        cio_seek(cio, box2.init_pos);
-        switch (box2.type) {
-        case MJ2_FIEL:
-            if (mj2_read_fiel(tk, cio)) {
-                return 1;
-            }
-            break;
-
-        case MJ2_JP2P:
-            if (mj2_read_jp2p(tk, cio)) {
-                return 1;
-            }
-            break;
-
-        case MJ2_JP2X:
-            if (mj2_read_jp2x(tk, cio)) {
-                return 1;
-            }
-            break;
-
-        case MJ2_JSUB:
-            if (mj2_read_jsub(tk, cio)) {
-                return 1;
-            }
-            break;
-
-        case MJ2_ORFO:
-            if (mj2_read_orfo(tk, cio)) {
-                return 1;
-            }
-            break;
-
-        default:
-            opj_event_msg(cio->cinfo, EVT_ERROR, "Error with MJP2 Box size\n");
-            return 1;
-            break;
-
-        }
-    }
-    return 0;
-}
-
-
-/*
-* Write the STSD box
-*
-* Sample Description
-*
-*/
-void mj2_write_stsd(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    mj2_box_t box;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, MJ2_STSD, 4);  /* STSD       */
-
-    cio_write(cio, 0, 4);     /* Version = 0, flags = 0 */
-
-    cio_write(cio, 1,
-              4);     /* entry_count = 1 (considering same JP2 headerboxes) */
-
-    if (tk->track_type == 0) {
-        mj2_write_smj2(tk, cio);
-    } else if (tk->track_type == 1) {
-        /* Not implemented*/
-    }
-    if (tk->track_type == 2) {
-        /* Not implemented*/
-    }
-
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);    /* L          */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-/*
-* Read the STSD box
-*
-* Sample Description
-*
-*/
-int mj2_read_stsd(mj2_tk_t * tk, opj_image_t * img, opj_cio_t *cio)
-{
-    int i;
-    int entry_count, len_2skip;
-
-    mj2_box_t box;
-
-    mj2_read_boxhdr(&box, cio);
-
-    if (MJ2_STSD != box.type) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected STSD Marker\n");
-        return 1;
-    }
-
-    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error: Only Version 0 handled in STSD box\n");
-        return 1;
-    }
-
-    if (0 != cio_read(cio, 3)) {  /* Flags = 0  */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error with flag in STSD box. Expected flag 0\n");
-        return 1;
-    }
-
-    entry_count = cio_read(cio, 4);
-
-    if (tk->track_type == 0) {
-        for (i = 0; i < entry_count; i++) {
-            if (mj2_read_smj2(img, tk, cio)) {
-                return 1;
-            }
-        }
-    } else if (tk->track_type == 1) {
-        len_2skip = cio_read(cio, 4);   /* Not implemented -> skipping box*/
-        cio_skip(cio, len_2skip - 4);
-    } else if (tk->track_type == 2) {
-        len_2skip = cio_read(cio, 4);   /* Not implemented -> skipping box*/
-        cio_skip(cio, len_2skip - 4);
-    }
-
-
-    if (cio_tell(cio) - box.init_pos != box.length) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with STSD Box size\n");
-        return 1;
-    }
-    return 0;
-}
-
-/*
-* Write the STBL box
-*
-* Sample table box box
-*
-*/
-void mj2_write_stbl(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    mj2_box_t box;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, MJ2_STBL, 4);  /* STBL       */
-
-    mj2_write_stsd(tk, cio);
-    mj2_write_stts(tk, cio);
-    mj2_write_stsc(tk, cio);
-    mj2_write_stsz(tk, cio);
-    mj2_write_stco(tk, cio);
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);    /* L          */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-/*
-* Read the STBL box
-*
-* Sample table box box
-*
-*/
-int mj2_read_stbl(mj2_tk_t * tk, opj_image_t * img, opj_cio_t *cio)
-{
-    mj2_box_t box;
-
-    mj2_read_boxhdr(&box, cio);
-    if (MJ2_STBL != box.type) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected STBL Marker\n");
-        return 1;
-    }
-
-    if (mj2_read_stsd(tk, img, cio)) {
-        return 1;
-    }
-    if (mj2_read_stts(tk, cio)) {
-        return 1;
-    }
-    if (mj2_read_stsc(tk, cio)) {
-        return 1;
-    }
-    if (mj2_read_stsz(tk, cio)) {
-        return 1;
-    }
-    if (mj2_read_stco(tk, cio)) {
-        return 1;
-    }
-
-    if (cio_tell(cio) - box.init_pos != box.length) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with STBL Box size\n");
-        return 1;
-    }
-    return 0;
-}
-
-/*
-* Write the URL box
-*
-* URL box
-*
-*/
-void mj2_write_url(mj2_tk_t * tk, int url_num, opj_cio_t *cio)
-{
-    mj2_box_t box;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, MJ2_URL, 4);   /* URL       */
-
-    if (url_num == 0) {
-        cio_write(cio, 1,
-                  4);    /* Version = 0, flags = 1 because stored in same file */
-    } else {
-        cio_write(cio, 0, 4);       /* Version = 0, flags =  0 */
-        cio_write(cio, tk->url[url_num - 1].location[0], 4);
-        cio_write(cio, tk->url[url_num - 1].location[1], 4);
-        cio_write(cio, tk->url[url_num - 1].location[2], 4);
-        cio_write(cio, tk->url[url_num - 1].location[3], 4);
-    }
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);    /* L          */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-/*
-* Read the URL box
-*
-* URL box
-*
-*/
-int mj2_read_url(mj2_tk_t * tk, int urn_num, opj_cio_t *cio)
-{
-    mj2_box_t box;
-
-    mj2_read_boxhdr(&box, cio);
-    if (MJ2_URL != box.type) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected URL Marker\n");
-        return 1;
-    }
-
-    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error: Only Version 0 handled in URL box\n");
-        return 1;
-    }
-
-    if (1 != cio_read(cio, 3)) {  /* If flags = 1 --> media data in file */
-        tk->url[urn_num].location[0] = cio_read(cio, 4);
-        tk->url[urn_num].location[1] = cio_read(cio, 4);
-        tk->url[urn_num].location[2] = cio_read(cio, 4);
-        tk->url[urn_num].location[3] = cio_read(cio, 4);
-    } else {
-        tk->num_url--;
-    }
-
-
-    if (cio_tell(cio) - box.init_pos != box.length) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with URL Box size\n");
-        return 1;
-    }
-    return 0;
-}
-
-/*
-* Write the URN box
-*
-* URN box
-*
-*/
-void mj2_write_urn(mj2_tk_t * tk, int urn_num, opj_cio_t *cio)
-{
-    mj2_box_t box;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, MJ2_URN, 4);   /* URN       */
-
-    cio_write(cio, 0, 4);     /* Version = 0, flags =  0 */
-
-    cio_write(cio, tk->urn[urn_num].name[0], 4);
-    cio_write(cio, tk->urn[urn_num].name[1], 4);
-    cio_write(cio, tk->urn[urn_num].name[2], 4);
-    cio_write(cio, tk->urn[urn_num].name[3], 4);
-    cio_write(cio, tk->urn[urn_num].location[0], 4);
-    cio_write(cio, tk->urn[urn_num].location[1], 4);
-    cio_write(cio, tk->urn[urn_num].location[2], 4);
-    cio_write(cio, tk->urn[urn_num].location[3], 4);
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);    /* L          */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-/*
-* Read the URN box
-*
-* URN box
-*
-*/
-int mj2_read_urn(mj2_tk_t * tk, int urn_num, opj_cio_t *cio)
-{
-
-    mj2_box_t box;
-
-    mj2_read_boxhdr(&box, cio);
-    if (MJ2_URN != box.type) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected URN Marker\n");
-        return 1;
-    }
-
-    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error: Only Version 0 handled in URN box\n");
-        return 1;
-    }
-
-    if (1 != cio_read(cio, 3)) {  /* If flags = 1 --> media data in file */
-        tk->urn[urn_num].name[0] = cio_read(cio, 4);
-        tk->urn[urn_num].name[1] = cio_read(cio, 4);
-        tk->urn[urn_num].name[2] = cio_read(cio, 4);
-        tk->urn[urn_num].name[3] = cio_read(cio, 4);
-        tk->urn[urn_num].location[0] = cio_read(cio, 4);
-        tk->urn[urn_num].location[1] = cio_read(cio, 4);
-        tk->urn[urn_num].location[2] = cio_read(cio, 4);
-        tk->urn[urn_num].location[3] = cio_read(cio, 4);
-    }
-
-
-    if (cio_tell(cio) - box.init_pos != box.length) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with URN Box size\n");
-        return 1;
-    }
-    return 0;
-}
-
-
-/*
-* Write the DREF box
-*
-* Data reference box
-*
-*/
-void mj2_write_dref(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    int i;
-    mj2_box_t box;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, MJ2_DREF, 4);  /* DREF       */
-
-    cio_write(cio, 0, 4);     /* Version = 0, flags = 0 */
-
-    if (tk->num_url + tk->num_urn == 0) { /* Media data in same file */
-        cio_write(cio, 1, 4);       /* entry_count = 1 */
-        mj2_write_url(tk, 0, cio);
-    } else {
-        cio_write(cio, tk->num_url + tk->num_urn, 4);   /* entry_count */
-
-        for (i = 0; i < tk->num_url; i++) {
-            mj2_write_url(tk, i + 1, cio);
-        }
-
-        for (i = 0; i < tk->num_urn; i++) {
-            mj2_write_urn(tk, i, cio);
-        }
-    }
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);    /* L          */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-/*
-* Read the DREF box
-*
-* Data reference box
-*
-*/
-int mj2_read_dref(mj2_tk_t * tk, opj_cio_t *cio)
-{
-
-    int i;
-    int entry_count, marker;
-    mj2_box_t box;
-
-    mj2_read_boxhdr(&box, cio);
-    if (MJ2_DREF != box.type) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected DREF Marker\n");
-        return 1;
-    }
-
-    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error: Only Version 0 handled in DREF box\n");
-        return 1;
-    }
-
-    if (0 != cio_read(cio, 3)) {  /* Flags = 0  */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error with flag in DREF box. Expected flag 0\n");
-        return 1;
-    }
-
-    entry_count = cio_read(cio, 4);
-    tk->num_url = 0;
-    tk->num_urn = 0;
-
-    for (i = 0; i < entry_count; i++) {
-        cio_skip(cio, 4);
-        marker = cio_read(cio, 4);
-        if (marker == MJ2_URL) {
-            cio_skip(cio, -8);
-            tk->num_url++;
-            if (mj2_read_url(tk, tk->num_url, cio)) {
-                return 1;
-            }
-        } else if (marker == MJ2_URN) {
-            cio_skip(cio, -8);
-            tk->num_urn++;
-            if (mj2_read_urn(tk, tk->num_urn, cio)) {
-                return 1;
-            }
-        } else {
-            opj_event_msg(cio->cinfo, EVT_ERROR,
-                          "Error with in DREF box. Expected URN or URL box\n");
-            return 1;
-        }
-
-    }
-
-
-    if (cio_tell(cio) - box.init_pos != box.length) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with DREF Box size\n");
-        return 1;
-    }
-    return 0;
-}
-
-/*
-* Write the DINF box
-*
-* Data information box
-*
-*/
-void mj2_write_dinf(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    mj2_box_t box;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, MJ2_DINF, 4);  /* DINF       */
-
-    mj2_write_dref(tk, cio);
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);    /* L          */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-/*
-* Read the DINF box
-*
-* Data information box
-*
-*/
-int mj2_read_dinf(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    mj2_box_t box;
-
-    mj2_read_boxhdr(&box, cio);
-    if (MJ2_DINF != box.type) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected DINF Marker\n");
-        return 1;
-    }
-
-    if (mj2_read_dref(tk, cio)) {
-        return 1;
-    }
-
-    if (cio_tell(cio) - box.init_pos != box.length) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with DINF Box size\n");
-        return 1;
-    }
-    return 0;
-}
-
-/*
-* Write the VMHD box
-*
-* Video Media information box
-*
-*/
-void mj2_write_vmhd(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    mj2_box_t box;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, MJ2_VMHD, 4);  /* VMHD       */
-
-    cio_write(cio, 1, 4);     /* Version = 0, flags = 1 */
-
-    cio_write(cio, tk->graphicsmode, 2);
-    cio_write(cio, tk->opcolor[0], 2);
-    cio_write(cio, tk->opcolor[1], 2);
-    cio_write(cio, tk->opcolor[2], 2);
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);    /* L          */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-/*
-* Read the VMHD box
-*
-* Video Media information box
-*
-*/
-int mj2_read_vmhd(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    mj2_box_t box;
-
-    mj2_read_boxhdr(&box, cio);
-    if (MJ2_VMHD != box.type) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected VMHD Marker\n");
-        return 1;
-    }
-
-    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error: Only Version 0 handled in VMHD box\n");
-        return 1;
-    }
-
-    if (1 != cio_read(cio, 3)) {  /* Flags = 1  */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error with flag in VMHD box. Expected flag 1\n");
-        return 1;
-    }
-
-    tk->track_type = 0;
-    tk->graphicsmode = cio_read(cio, 2);
-    tk->opcolor[0] = cio_read(cio, 2);
-    tk->opcolor[1] = cio_read(cio, 2);
-    tk->opcolor[2] = cio_read(cio, 2);
-
-    if (cio_tell(cio) - box.init_pos != box.length) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with VMHD Box size\n");
-        return 1;
-    }
-    return 0;
-}
-
-/*
-* Write the SMHD box
-*
-* Sound Media information box
-*
-*/
-void mj2_write_smhd(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    mj2_box_t box;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, MJ2_SMHD, 4);  /* SMHD       */
-
-    cio_write(cio, 0, 4);     /* Version = 0, flags = 0 */
-
-    cio_write(cio, tk->balance, 2);
-
-    cio_write(cio, 0, 2);     /* Reserved */
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);    /* L          */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-/*
-* Read the SMHD box
-*
-* Sound Media information box
-*
-*/
-int mj2_read_smhd(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    mj2_box_t box;
-
-    mj2_read_boxhdr(&box, cio);
-    if (MJ2_SMHD != box.type) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected SMHD Marker\n");
-        return 1;
-    }
-
-    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error: Only Version 0 handled in SMHD box\n");
-        return 1;
-    }
-
-    if (0 != cio_read(cio, 3)) {  /* Flags = 0  */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error with flag in SMHD box. Expected flag 0\n");
-        return 1;
-    }
-
-    tk->track_type = 1;
-    tk->balance = cio_read(cio, 2);
-
-    /* Init variables to zero to avoid problems when freeeing memory
-    The values will possibly be overidded when decoding the track structure */
-    tk->num_br = 0;
-    tk->num_url = 0;
-    tk->num_urn = 0;
-    tk->num_chunks = 0;
-    tk->num_tts = 0;
-    tk->num_samplestochunk = 0;
-    tk->num_samples = 0;
-
-    cio_skip(cio, 2);         /* Reserved */
-
-    if (cio_tell(cio) - box.init_pos != box.length) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with SMHD Box size\n");
-        return 1;
-    }
-    return 0;
-}
-
-/*
-* Write the HMHD box
-*
-* Hint Media information box
-*
-*/
-void mj2_write_hmhd(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    mj2_box_t box;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, MJ2_HMHD, 4);  /* HMHD       */
-
-    cio_write(cio, 0, 4);     /* Version = 0, flags = 0 */
-
-    cio_write(cio, tk->maxPDUsize, 2);
-    cio_write(cio, tk->avgPDUsize, 2);
-    cio_write(cio, tk->maxbitrate, 4);
-    cio_write(cio, tk->avgbitrate, 4);
-    cio_write(cio, tk->slidingavgbitrate, 4);
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);    /* L          */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-/*
-* Read the HMHD box
-*
-* Hint Media information box
-*
-*/
-int mj2_read_hmhd(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    mj2_box_t box;
-
-    mj2_read_boxhdr(&box, cio);
-    if (MJ2_HMHD != box.type) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected HMHD Marker\n");
-        return 1;
-    }
-
-    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error: Only Version 0 handled in HMHD box\n");
-        return 1;
-    }
-
-    if (0 != cio_read(cio, 3)) {  /* Flags = 0  */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error with flag in HMHD box. Expected flag 0\n");
-        return 1;
-    }
-
-    tk->track_type = 2;
-    tk->maxPDUsize = cio_read(cio, 2);
-    tk->avgPDUsize = cio_read(cio, 2);
-    tk->maxbitrate = cio_read(cio, 4);
-    tk->avgbitrate = cio_read(cio, 4);
-    tk->slidingavgbitrate = cio_read(cio, 4);
-
-    /* Init variables to zero to avoid problems when freeeing memory
-    The values will possibly be overidded when decoding the track structure */
-    tk->num_br = 0;
-    tk->num_url = 0;
-    tk->num_urn = 0;
-    tk->num_chunks = 0;
-    tk->num_tts = 0;
-    tk->num_samplestochunk = 0;
-    tk->num_samples = 0;
-
-
-    if (cio_tell(cio) - box.init_pos != box.length) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with HMHD Box size\n");
-        return 1;
-    }
-    return 0;
-}
-
-/*
-* Write the MINF box
-*
-* Media information box
-*
-*/
-void mj2_write_minf(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    mj2_box_t box;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, MJ2_MINF, 4);  /* MINF       */
-
-    if (tk->track_type == 0) {
-        mj2_write_vmhd(tk, cio);
-    } else if (tk->track_type == 1) {
-        mj2_write_smhd(tk, cio);
-    } else if (tk->track_type == 2) {
-        mj2_write_hmhd(tk, cio);
-    }
-
-    mj2_write_dinf(tk, cio);
-    mj2_write_stbl(tk, cio);
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);    /* L          */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-/*
-* Read the MINF box
-*
-* Media information box
-*
-*/
-int mj2_read_minf(mj2_tk_t * tk, opj_image_t * img, opj_cio_t *cio)
-{
-
-    unsigned int box_type;
-    mj2_box_t box;
-
-    mj2_read_boxhdr(&box, cio);
-    if (MJ2_MINF != box.type) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected MINF Marker\n");
-        return 1;
-    }
-
-    cio_skip(cio, 4);
-    box_type = cio_read(cio, 4);
-    cio_skip(cio, -8);
-
-    if (box_type == MJ2_VMHD) {
-        if (mj2_read_vmhd(tk, cio)) {
-            return 1;
-        }
-    } else if (box_type == MJ2_SMHD) {
-        if (mj2_read_smhd(tk, cio)) {
-            return 1;
-        }
-    } else if (box_type == MJ2_HMHD) {
-        if (mj2_read_hmhd(tk, cio)) {
-            return 1;
-        }
-    } else {
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error in MINF box expected vmhd, smhd or hmhd\n");
-        return 1;
-    }
-
-    if (mj2_read_dinf(tk, cio)) {
-        return 1;
-    }
-
-    if (mj2_read_stbl(tk, img, cio)) {
-        return 1;
-    }
-
-    if (cio_tell(cio) - box.init_pos != box.length) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with MINF Box size\n");
-        return 1;
-    }
-    return 0;
-}
-
-/*
-* Write the HDLR box
-*
-* Handler reference box
-*
-*/
-void mj2_write_hdlr(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    mj2_box_t box;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, MJ2_HDLR, 4);  /* HDLR       */
-
-    cio_write(cio, 0, 4);     /* Version = 0, flags = 0 */
-
-    cio_write(cio, 0, 4);     /* Predefine */
-
-    tk->name =
-        0;         /* The track name is immediately determined by the track type */
-
-    if (tk->track_type == 0) {
-        tk->handler_type = 0x76696465;  /* Handler type: vide */
-        cio_write(cio, tk->handler_type, 4);
-
-        cio_write(cio, 0, 4);
-        cio_write(cio, 0, 4);
-        cio_write(cio, 0, 4);       /* Reserved */
-
-        cio_write(cio, 0x76696465, 4);
-        cio_write(cio, 0x6F206d65, 4);
-        cio_write(cio, 0x64696120, 4);
-        cio_write(cio, 0x74726163, 4);
-        cio_write(cio, 0x6b00, 2);  /* String: video media track */
-    } else if (tk->track_type == 1) {
-        tk->handler_type = 0x736F756E;  /* Handler type: soun */
-        cio_write(cio, tk->handler_type, 4);
-
-        cio_write(cio, 0, 4);
-        cio_write(cio, 0, 4);
-        cio_write(cio, 0, 4);       /* Reserved */
-
-        cio_write(cio, 0x536F756E, 4);
-        cio_write(cio, 0x6400, 2);  /* String: Sound */
-    } else if (tk->track_type == 2) {
-        tk->handler_type = 0x68696E74;  /* Handler type: hint */
-        cio_write(cio, tk->handler_type, 4);
-
-        cio_write(cio, 0, 4);
-        cio_write(cio, 0, 4);
-        cio_write(cio, 0, 4);       /* Reserved */
-
-        cio_write(cio, 0x48696E74, 4);
-        cio_write(cio, 0, 2);       /* String: Hint */
-    }
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);    /* L          */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-/*
-* Read the HDLR box
-*
-* Handler reference box
-*
-*/
-int mj2_read_hdlr(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    int i;
-    mj2_box_t box;
-
-    mj2_read_boxhdr(&box, cio);
-    if (MJ2_HDLR != box.type) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected HDLR Marker\n");
-        return 1;
-    }
-
-
-    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error: Only Version 0 handled in HDLR box\n");
-        return 1;
-    }
-
-    if (0 != cio_read(cio, 3)) {  /* Flags = 0  */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error with flag in HDLR box. Expected flag 0\n");
-        return 1;
-    }
-
-    cio_skip(cio, 4);         /* Reserved */
-
-    tk->handler_type = cio_read(cio, 4);
-    cio_skip(cio, 12);        /* Reserved */
-
-    tk->name_size = box.length - 32;
-
-    tk->name = (char*) opj_malloc(tk->name_size * sizeof(char));
-    for (i = 0; i < tk->name_size; i++) {
-        tk->name[i] = cio_read(cio, 1); /* Name */
-    }
-
-    if (cio_tell(cio) - box.init_pos != box.length) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with HDLR Box size\n");
-        return 1;
-    }
-    return 0;
-}
-
-/*
-* Write the MDHD box
-*
-* Media Header Box
-*
-*/
-void mj2_write_mdhd(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    mj2_box_t box;
-    unsigned int i;
-    time_t ltime;
-    unsigned int modification_time;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, MJ2_MDHD, 4);  /* MDHD       */
-
-    cio_write(cio, 0, 4);     /* Version = 0, flags = 0 */
-
-    cio_write(cio, tk->creation_time, 4); /* Creation Time */
-
-    time(&ltime);         /* Time since 1/1/70 */
-    modification_time = (unsigned int)ltime +
-                        2082844800; /* Seoonds between 1/1/04 and 1/1/70 */
-
-    cio_write(cio, modification_time, 4); /* Modification Time */
-
-    cio_write(cio, tk->timescale, 4); /* Timescale */
-
-    tk->duration = 0;
-
-    for (i = 0; i < tk->num_samples; i++) {
-        tk->duration += tk->sample[i].sample_delta;
-    }
-
-    cio_write(cio, tk->duration, 4);  /* Duration */
-
-    cio_write(cio, tk->language, 2);  /* Language */
-
-    cio_write(cio, 0, 2);     /* Predefined */
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);    /* L          */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-/*
-* Read the MDHD box
-*
-* Media Header Box
-*
-*/
-int mj2_read_mdhd(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    mj2_box_t box;
-
-    mj2_read_boxhdr(&box, cio);
-    if (!(MJ2_MHDR == box.type ||
-            MJ2_MDHD == box.type)) {    /* Kakadu writes MHDR instead of MDHD*/
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected MDHD Marker\n");
-        return 1;
-    }
-
-    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error: Only Version 0 handled in MDHD box\n");
-        return 1;
-    }
-
-    if (0 != cio_read(cio, 3)) {  /* Flags = 0 */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error with flag in MDHD box. Expected flag 0\n");
-        return 1;
-    }
-
-
-    tk->creation_time = cio_read(cio, 4); /* Creation Time */
-
-    tk->modification_time = cio_read(cio, 4); /* Modification Time */
-
-    tk->timescale = cio_read(cio, 4); /* Timescale */
-
-    tk->duration = cio_read(cio, 4);  /* Duration */
-
-    tk->language = cio_read(cio, 2);  /* Language */
-
-    cio_skip(cio, 2);         /* Predefined */
-
-    if (cio_tell(cio) - box.init_pos != box.length) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with MDHD Box size\n");
-        return 1;
-    }
-    return 0;
-}
-
-/*
-* Write the MDIA box
-*
-* Media box
-*
-*/
-void mj2_write_mdia(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    mj2_box_t box;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, MJ2_MDIA, 4);  /* MDIA       */
-
-    mj2_write_mdhd(tk, cio);
-    mj2_write_hdlr(tk, cio);
-    mj2_write_minf(tk, cio);
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);    /* L          */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-/*
-* Read the MDIA box
-*
-* Media box
-*
-*/
-int mj2_read_mdia(mj2_tk_t * tk, opj_image_t * img, opj_cio_t *cio)
-{
-    mj2_box_t box;
-
-    mj2_read_boxhdr(&box, cio);
-    if (MJ2_MDIA != box.type) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected MDIA Marker\n");
-        return 1;
-    }
-
-    if (mj2_read_mdhd(tk, cio)) {
-        return 1;
-    }
-    if (mj2_read_hdlr(tk, cio)) {
-        return 1;
-    }
-    if (mj2_read_minf(tk, img, cio)) {
-        return 1;
-    }
-
-    if (cio_tell(cio) - box.init_pos != box.length) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with MDIA Box size\n");
-        return 1;
-    }
-    return 0;
-}
-
-/*
-* Write the TKHD box
-*
-* Track Header box
-*
-*/
-void mj2_write_tkhd(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    mj2_box_t box;
-    unsigned int i;
-    time_t ltime;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-
-    cio_write(cio, MJ2_TKHD, 4);  /* TKHD       */
-
-    cio_write(cio, 3, 4);     /* Version=0, flags=3 */
-
-    time(&ltime);         /* Time since 1/1/70 */
-    tk->modification_time = (unsigned int)ltime +
-                            2082844800; /* Seoonds between 1/1/04 and 1/1/70 */
-
-    cio_write(cio, tk->creation_time, 4); /* Creation Time */
-
-    cio_write(cio, tk->modification_time, 4); /* Modification Time */
-
-    cio_write(cio, tk->track_ID, 4);  /* Track ID */
-
-    cio_write(cio, 0, 4);     /* Reserved */
-
-    tk->duration = 0;
-
-    for (i = 0; i < tk->num_samples; i++) {
-        tk->duration += tk->sample[i].sample_delta;
-    }
-
-    cio_write(cio, tk->duration, 4);  /* Duration */
-
-    cio_write(cio, 0, 4);     /* Reserved */
-    cio_write(cio, 0, 4);     /* Reserved */
-
-    cio_write(cio, tk->layer, 2); /* Layer    */
-
-    cio_write(cio, 0, 2);     /* Predefined */
-
-    cio_write(cio, tk->volume, 2);    /* Volume       */
-
-    cio_write(cio, 0, 2);     /* Reserved */
-
-    cio_write(cio, tk->trans_matrix[0], 4);   /* Transformation matrix for track */
-    cio_write(cio, tk->trans_matrix[1], 4);
-    cio_write(cio, tk->trans_matrix[2], 4);
-    cio_write(cio, tk->trans_matrix[3], 4);
-    cio_write(cio, tk->trans_matrix[4], 4);
-    cio_write(cio, tk->trans_matrix[5], 4);
-    cio_write(cio, tk->trans_matrix[6], 4);
-    cio_write(cio, tk->trans_matrix[7], 4);
-    cio_write(cio, tk->trans_matrix[8], 4);
-
-    cio_write(cio, tk->visual_w, 4);  /* Video Visual Width  */
-
-    cio_write(cio, tk->visual_h, 4);  /* Video Visual Height */
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);    /* L          */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-/*
-* Read the TKHD box
-*
-* Track Header box
-*
-*/
-int mj2_read_tkhd(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    int flag;
-
-    mj2_box_t box;
-
-    mj2_read_boxhdr(&box, cio);
-
-    if (MJ2_TKHD != box.type) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected TKHD Marker\n");
-        return 1;
-    }
-
-    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error: Only Version 0 handled in TKHD box\n");
-        return 1;
-    }
-
-    flag = cio_read(cio, 3);
-
-    if (!(flag == 1 || flag == 2 || flag == 3 ||
-            flag == 4)) {    /* Flags = 1,2,3 or 4 */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error with flag in TKHD box: Expected flag 1,2,3 or 4\n");
-        return 1;
-    }
-
-    tk->creation_time = cio_read(cio, 4); /* Creation Time */
-
-    tk->modification_time = cio_read(cio, 4); /* Modification Time */
-
-    tk->track_ID = cio_read(cio, 4);  /* Track ID */
-
-    cio_skip(cio, 4);         /* Reserved */
-
-    tk->duration = cio_read(cio, 4);  /* Duration */
-
-    cio_skip(cio, 8);         /* Reserved */
-
-    tk->layer = cio_read(cio, 2); /* Layer    */
-
-    cio_read(cio, 2);         /* Predefined */
-
-    tk->volume = cio_read(cio, 2);    /* Volume       */
-
-    cio_skip(cio, 2);         /* Reserved */
-
-    tk->trans_matrix[0] = cio_read(cio, 4);   /* Transformation matrix for track */
-    tk->trans_matrix[1] = cio_read(cio, 4);
-    tk->trans_matrix[2] = cio_read(cio, 4);
-    tk->trans_matrix[3] = cio_read(cio, 4);
-    tk->trans_matrix[4] = cio_read(cio, 4);
-    tk->trans_matrix[5] = cio_read(cio, 4);
-    tk->trans_matrix[6] = cio_read(cio, 4);
-    tk->trans_matrix[7] = cio_read(cio, 4);
-    tk->trans_matrix[8] = cio_read(cio, 4);
-
-    tk->visual_w = cio_read(cio, 4);  /* Video Visual Width  */
-
-    tk->visual_h = cio_read(cio, 4);  /* Video Visual Height */
-
-    if (cio_tell(cio) - box.init_pos != box.length) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with TKHD Box size\n");
-        return 1;
-    }
-    return 0;
-}
-
-/*
-* Write the TRAK box
-*
-* Track box
-*
-*/
-void mj2_write_trak(mj2_tk_t * tk, opj_cio_t *cio)
-{
-    mj2_box_t box;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-
-    cio_write(cio, MJ2_TRAK, 4);  /* TRAK       */
-
-    mj2_write_tkhd(tk, cio);
-    mj2_write_mdia(tk, cio);
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);    /* L          */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-/*
-* Read the TRAK box
-*
-* Track box
-*
-*/
-int mj2_read_trak(mj2_tk_t * tk, opj_image_t * img, opj_cio_t *cio)
-{
-    mj2_box_t box;
-
-    mj2_read_boxhdr(&box, cio);
-    if (MJ2_TRAK != box.type) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected TRAK Marker\n");
-        return 1;
-    }
-    if (mj2_read_tkhd(tk, cio)) {
-        return 1;
-    }
-    if (mj2_read_mdia(tk, img, cio)) {
-        return 1;
-    }
-    if (cio_tell(cio) - box.init_pos != box.length) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with TRAK Box\n");
-        return 1;
-    }
-    return 0;
-}
-
-/*
-* Write the MVHD box
-*
-* Movie header Box
-*
-*/
-void mj2_write_mvhd(opj_mj2_t * movie, opj_cio_t *cio)
-{
-    int i;
-    mj2_box_t box;
-    unsigned j;
-    time_t ltime;
-    int max_tk_num = 0;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, MJ2_MVHD, 4);  /* MVHD       */
-
-    cio_write(cio, 0, 4);     /* Version = 0, flags = 0 */
-
-    time(&ltime);         /* Time since 1/1/70 */
-    movie->modification_time = (unsigned int)ltime +
-                               2082844800;  /* Seoonds between 1/1/04 and 1/1/70 */
-
-    cio_write(cio, movie->creation_time, 4);  /* Creation Time */
-
-    cio_write(cio, movie->modification_time, 4);  /* Modification Time */
-
-    cio_write(cio, movie->timescale, 4);  /* Timescale */
-
-    movie->duration = 0;
-
-    for (i = 0; i < (movie->num_stk + movie->num_htk + movie->num_vtk); i++) {
-        mj2_tk_t *tk = &movie->tk[i];
-
-        for (j = 0; j < tk->num_samples; j++) {
-            movie->duration += tk->sample[j].sample_delta;
-        }
-    }
-
-    cio_write(cio, movie->duration, 4);
-
-    cio_write(cio, movie->rate, 4);   /* Rate to play presentation    */
-
-    cio_write(cio, movie->volume, 2); /* Volume       */
-
-    cio_write(cio, 0, 2);     /* Reserved */
-    cio_write(cio, 0, 4);     /* Reserved */
-    cio_write(cio, 0, 4);     /* Reserved */
-
-    cio_write(cio, movie->trans_matrix[0],
-              4);    /* Transformation matrix for video */
-    cio_write(cio, movie->trans_matrix[1], 4);
-    cio_write(cio, movie->trans_matrix[2], 4);
-    cio_write(cio, movie->trans_matrix[3], 4);
-    cio_write(cio, movie->trans_matrix[4], 4);
-    cio_write(cio, movie->trans_matrix[5], 4);
-    cio_write(cio, movie->trans_matrix[6], 4);
-    cio_write(cio, movie->trans_matrix[7], 4);
-    cio_write(cio, movie->trans_matrix[8], 4);
-
-    cio_write(cio, 0, 4);     /* Pre-defined */
-    cio_write(cio, 0, 4);     /* Pre-defined */
-    cio_write(cio, 0, 4);     /* Pre-defined */
-    cio_write(cio, 0, 4);     /* Pre-defined */
-    cio_write(cio, 0, 4);     /* Pre-defined */
-    cio_write(cio, 0, 4);     /* Pre-defined */
-
-
-    for (i = 0; i < movie->num_htk + movie->num_stk + movie->num_vtk; i++) {
-        if (max_tk_num < movie->tk[i].track_ID) {
-            max_tk_num = movie->tk[i].track_ID;
-        }
-    }
-
-    movie->next_tk_id = max_tk_num + 1;
-
-    cio_write(cio, movie->next_tk_id, 4); /* ID of Next track to be added */
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);    /* L          */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-/*
-* Read the MVHD box
-*
-* Movie header Box
-*
-*/
-int mj2_read_mvhd(opj_mj2_t * movie, opj_cio_t *cio)
-{
-    mj2_box_t box;
-
-    mj2_read_boxhdr(&box, cio);
-    if (MJ2_MVHD != box.type) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected MVHD Marker\n");
-        return 1;
-    }
-
-
-    if (0 != cio_read(cio, 4)) {  /* Version = 0, flags = 0 */
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "Error: Only Version 0 handled in MVHD box\n");
-    }
-
-    movie->creation_time = cio_read(cio, 4);  /* Creation Time */
-
-    movie->modification_time = cio_read(cio, 4);  /* Modification Time */
-
-    movie->timescale = cio_read(cio, 4);  /* Timescale */
-
-    movie->duration = cio_read(cio, 4);   /* Duration */
-
-    movie->rate = cio_read(cio, 4);       /* Rate to play presentation    */
-
-    movie->volume = cio_read(cio, 2);     /* Volume       */
-
-    cio_skip(cio, 10);            /* Reserved */
-
-    movie->trans_matrix[0] = cio_read(cio,
-                                      4);    /* Transformation matrix for video */
-    movie->trans_matrix[1] = cio_read(cio, 4);
-    movie->trans_matrix[2] = cio_read(cio, 4);
-    movie->trans_matrix[3] = cio_read(cio, 4);
-    movie->trans_matrix[4] = cio_read(cio, 4);
-    movie->trans_matrix[5] = cio_read(cio, 4);
-    movie->trans_matrix[6] = cio_read(cio, 4);
-    movie->trans_matrix[7] = cio_read(cio, 4);
-    movie->trans_matrix[8] = cio_read(cio, 4);
-
-    cio_skip(cio, 24);        /* Pre-defined */
-
-    movie->next_tk_id = cio_read(cio, 4); /* ID of Next track to be added */
-
-    if (cio_tell(cio) - box.init_pos != box.length) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with MVHD Box Size\n");
-        return 1;
-    }
-    return 0;
-}
-
-
-/*
-* Write the MOOV box
-*
-* Movie Box
-*
-*/
-void OPJ_CALLCONV mj2_write_moov(opj_mj2_t * movie, opj_cio_t *cio)
-{
-    int i;
-    mj2_box_t box;
-
-    box.init_pos = cio_tell(cio);
-    cio_skip(cio, 4);
-    cio_write(cio, MJ2_MOOV, 4);  /* MOOV       */
-
-    mj2_write_mvhd(movie, cio);
-
-    for (i = 0; i < (movie->num_stk + movie->num_htk + movie->num_vtk); i++) {
-        mj2_write_trak(&movie->tk[i], cio);
-    }
-
-    box.length = cio_tell(cio) - box.init_pos;
-    cio_seek(cio, box.init_pos);
-    cio_write(cio, box.length, 4);    /* L          */
-    cio_seek(cio, box.init_pos + box.length);
-}
-
-/*
-* Read the MOOV box
-*
-* Movie Box
-*
-*/
-int mj2_read_moov(opj_mj2_t * movie, opj_image_t * img, opj_cio_t *cio)
-{
-    unsigned int i;
-    mj2_box_t box;
-    mj2_box_t box2;
-
-    mj2_read_boxhdr(&box, cio);
-    if (MJ2_MOOV != box.type) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected MOOV Marker\n");
-        return 1;
-    }
-
-    if (mj2_read_mvhd(movie, cio)) {
-        return 1;
-    }
-
-    movie->tk = (mj2_tk_t*) opj_malloc((movie->next_tk_id - 1) * sizeof(mj2_tk_t));
-
-    for (i = 0; cio_tell(cio) - box.init_pos < box.length; i++) {
-        mj2_tk_t *tk = &movie->tk[i];
-        tk->cinfo = movie->cinfo;
-        mj2_read_boxhdr(&box2, cio);
-        if (box2.type == MJ2_TRAK) {
-            cio_seek(cio, box2.init_pos);
-            if (mj2_read_trak(tk, img, cio)) {
-                return 1;
-            }
-
-            if (tk->track_type == 0) {
-                movie->num_vtk++;
-            } else if (tk->track_type == 1) {
-                movie->num_stk++;
-            } else if (tk->track_type == 2) {
-                movie->num_htk++;
-            }
-        } else if (box2.type == MJ2_MVEX) {
-            cio_seek(cio, box2.init_pos);
-            cio_skip(cio, box2.length);
-            i--;
-        } else {
-            opj_event_msg(cio->cinfo, EVT_ERROR,
-                          "Error with MOOV Box: Expected TRAK or MVEX box\n");
-            return 1;
-        }
-    }
-    return 0;
-}
-
-int OPJ_CALLCONV mj2_read_struct(FILE *file, opj_mj2_t *movie)
-{
-    mj2_box_t box;
-    opj_image_t img;
-    unsigned char * src;
-    int fsresult;
-    int foffset;
-    opj_cio_t *cio;
-
-    /* open a byte stream for reading */
-    src = (unsigned char*) opj_malloc(300 * sizeof(unsigned char));
-
-    /* Assuming that jp and ftyp markers size do
-     not exceed 300 bytes */
-    fread(src, 300, 1, file);
-
-    cio = opj_cio_open((opj_common_ptr)movie->cinfo, src, 300);
-
-    if (mj2_read_jp(cio)) {
-        return 1;
-    }
-    if (mj2_read_ftyp(movie, cio)) {
-        return 1;
-    }
-
-    fsresult = fseek(file, cio_tell(cio), SEEK_SET);
-    if (fsresult) {
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "End of file reached while trying to read data after FTYP box\n");
-        return 1;
-    }
-
-    foffset = cio_tell(cio);
-
-    box.type = 0;
-
-    fread(src, 30, 1, file);
-    cio = opj_cio_open((opj_common_ptr)movie->cinfo, src, 300);
-    mj2_read_boxhdr(&box, cio);
-
-    while (box.type != MJ2_MOOV) {
-
-        switch (box.type) {
-        case MJ2_MDAT:
-            fsresult = fseek(file, foffset + box.length, SEEK_SET);
-            if (fsresult) {
-                opj_event_msg(cio->cinfo, EVT_ERROR,
-                              "End of file reached while trying to read MDAT box\n");
-                return 1;
-            }
-            foffset += box.length;
-            break;
-
-        case MJ2_MOOF:
-            fsresult = fseek(file, foffset + box.length, SEEK_SET);
-            if (fsresult) {
-                opj_event_msg(cio->cinfo, EVT_ERROR,
-                              "End of file reached while trying to read MOOF box\n");
-                return 1;
-            }
-            foffset += box.length;
-            break;
-        case MJ2_FREE:
-            fsresult = fseek(file, foffset + box.length, SEEK_SET);
-            if (fsresult) {
-                opj_event_msg(cio->cinfo, EVT_ERROR,
-                              "End of file reached while trying to read FREE box\n");
-                return 1;
-            }
-            foffset += box.length;
-            break;
-        case MJ2_SKIP:
-            fsresult = fseek(file, foffset + box.length, SEEK_SET);
-            if (fsresult) {
-                opj_event_msg(cio->cinfo, EVT_ERROR,
-                              "End of file reached while trying to read SKIP box\n");
-                return 1;
-            }
-            foffset += box.length;
-            break;
-        default:
-            opj_event_msg(cio->cinfo, EVT_ERROR, "Unknown box in MJ2 stream\n");
-            fsresult = fseek(file, foffset + box.length, SEEK_SET);
-            if (fsresult) {
-                opj_event_msg(cio->cinfo, EVT_ERROR,
-                              "End of file reached while trying to read end of unknown box\n");
-                return 1;
-            }
-            foffset += box.length;
-            break;
-        }
-        fsresult = fread(src, 8, 1, file);
-        if (fsresult != 1) {
-            opj_event_msg(cio->cinfo, EVT_ERROR, "MOOV box not found in file\n");
-            return 1;
-        }
-        cio = opj_cio_open((opj_common_ptr)movie->cinfo, src, 8);
-        mj2_read_boxhdr(&box, cio);
-    }
-
-    fseek(file, foffset, SEEK_SET);
-    src = (unsigned char*)opj_realloc(src, box.length);
-    if (src == NULL) {
-        opj_event_msg(cio->cinfo, EVT_ERROR, "Error reallocation memory\n");
-        opj_free(src);
-        return 1;
-    }
-
-    fsresult = fread(src, box.length, 1, file);
-    if (fsresult != 1) {
-        opj_event_msg(cio->cinfo, EVT_ERROR,
-                      "End of file reached while trying to read MOOV box\n");
-        opj_free(src);
-        return 1;
-    }
-
-    cio = opj_cio_open((opj_common_ptr)movie->cinfo, src, box.length);
-
-    if (mj2_read_moov(movie, &img, cio)) {
-        opj_free(src);
-        return 1;
-    }
-
-    opj_free(src);
-    return 0;
-}
-
-/* ----------------------------------------------------------------------- */
-/* MJ2 decoder interface                                                                                 */
-/* ----------------------------------------------------------------------- */
-
-opj_dinfo_t* OPJ_CALLCONV mj2_create_decompress()
-{
-    opj_mj2_t* mj2;
-    opj_dinfo_t *dinfo = (opj_dinfo_t*) opj_calloc(1, sizeof(opj_dinfo_t));
-    if (!dinfo) {
-        return NULL;
-    }
-
-    dinfo->is_decompressor = OPJ_TRUE;
-
-    mj2 = (opj_mj2_t*) opj_calloc(1, sizeof(opj_mj2_t));
-    dinfo->mj2_handle = mj2;
-    if (mj2) {
-        mj2->cinfo = (opj_common_ptr)dinfo;
-    }
-    mj2->j2k = j2k_create_decompress((opj_common_ptr)dinfo);
-    dinfo->j2k_handle = mj2->j2k;
-
-    return dinfo;
-}
-
-void OPJ_CALLCONV mj2_setup_decoder(opj_mj2_t *movie,
-                                    mj2_dparameters_t *mj2_parameters)
-{
-    movie->num_vtk = 0;
-    movie->num_stk = 0;
-    movie->num_htk = 0;
-
-    /* setup the J2K decoder parameters */
-    j2k_setup_decoder((opj_j2k_t*)movie->cinfo->j2k_handle,
-                      &mj2_parameters->j2k_parameters);
-
-}
-
-void OPJ_CALLCONV mj2_destroy_decompress(opj_mj2_t *movie)
-{
-    if (movie) {
-        int i;
-        mj2_tk_t *tk = NULL;
-
-        if (movie->cinfo->j2k_handle) {
-            j2k_destroy_compress(movie->j2k);
-        }
-
-        if (movie->num_cl != 0) {
-            opj_free(movie->cl);
-        }
-
-        for (i = 0; i < movie->num_vtk + movie->num_stk + movie->num_htk; i++) {
-            tk = &movie->tk[i];
-            if (tk->name_size != 0) {
-                opj_free(tk->name);
-            }
-            if (tk->track_type == 0)  {/* Video track*/
-                if (tk->jp2_struct.comps != NULL) {
-                    opj_free(tk->jp2_struct.comps);
-                }
-                if (tk->jp2_struct.cl != NULL) {
-                    opj_free(tk->jp2_struct.cl);
-                }
-                if (tk->num_jp2x != 0) {
-                    opj_free(tk->jp2xdata);
-                }
-
-            }
-            if (tk->num_url != 0) {
-                opj_free(tk->url);
-            }
-            if (tk->num_urn != 0) {
-                opj_free(tk->urn);
-            }
-            if (tk->num_br != 0) {
-                opj_free(tk->br);
-            }
-            if (tk->num_tts != 0) {
-                opj_free(tk->tts);
-            }
-            if (tk->num_chunks != 0) {
-                opj_free(tk->chunk);
-            }
-            if (tk->num_samplestochunk != 0) {
-                opj_free(tk->sampletochunk);
-            }
-            if (tk->num_samples != 0) {
-                opj_free(tk->sample);
-            }
-        }
-
-        opj_free(movie->tk);
-    }
-    opj_free(movie);
-}
-
-/* ----------------------------------------------------------------------- */
-/* MJ2 encoder interface                                                                                 */
-/* ----------------------------------------------------------------------- */
-
-opj_cinfo_t* OPJ_CALLCONV mj2_create_compress()
-{
-    opj_mj2_t* mj2;
-    opj_cinfo_t *cinfo = (opj_cinfo_t*) opj_calloc(1, sizeof(opj_cinfo_t));
-    if (!cinfo) {
-        return NULL;
-    }
-
-    mj2 = (opj_mj2_t*) opj_calloc(1, sizeof(opj_mj2_t));
-    cinfo->mj2_handle = mj2;
-    if (mj2) {
-        mj2->cinfo = (opj_common_ptr)cinfo;
-    }
-
-    mj2->j2k = j2k_create_compress(mj2->cinfo);
-    cinfo->j2k_handle = mj2->j2k;
-
-    return cinfo;
-}
-
-void OPJ_CALLCONV mj2_setup_encoder(opj_mj2_t *movie,
-                                    mj2_cparameters_t *parameters)
-{
-    if (movie && parameters) {
-        opj_jp2_t *jp2_struct;
-
-        movie->num_htk = 0;   /* No hint tracks*/
-        movie->num_stk = 0;   /* No sound tracks*/
-        movie->num_vtk = 1;   /* One video track*/
-
-        movie->brand = MJ2_MJ2;  /* One brand: MJ2*/
-        movie->num_cl = 2;    /* Two compatible brands: MJ2 and MJ2S*/
-        movie->cl = (unsigned int*) opj_malloc(movie->num_cl * sizeof(unsigned int));
-        movie->cl[0] = MJ2_MJ2;
-        movie->cl[1] = MJ2_MJ2S;
-        movie->minversion = 0;    /* Minimum version: 0 */
-
-        movie->tk = (mj2_tk_t*) opj_malloc(sizeof(
-                                               mj2_tk_t)); /*Memory allocation for the video track*/
-        movie->tk[0].track_ID = 1;    /* Track ID = 1 */
-        movie->tk[0].track_type = 0;      /* Video track */
-        movie->tk[0].Dim[0] = parameters->Dim[0];
-        movie->tk[0].Dim[1] = parameters->Dim[1];
-        movie->tk[0].w = parameters->w;
-        movie->tk[0].h = parameters->h;
-        movie->tk[0].CbCr_subsampling_dx = parameters->CbCr_subsampling_dx;
-        movie->tk[0].CbCr_subsampling_dy = parameters->CbCr_subsampling_dy;
-        movie->tk[0].sample_rate = parameters->frame_rate;
-        movie->tk[0].name_size = 0;
-        movie->tk[0].chunk = (mj2_chunk_t*) opj_malloc(sizeof(mj2_chunk_t));
-        movie->tk[0].sample = (mj2_sample_t*) opj_malloc(sizeof(mj2_sample_t));
-        movie->tk[0].depth = parameters->prec;
-
-        jp2_struct = &movie->tk[0].jp2_struct;
-        jp2_struct->numcomps = parameters->numcomps;    /* NC */
-        jp2_struct->comps = (opj_jp2_comps_t*) opj_malloc(jp2_struct->numcomps * sizeof(
-                                opj_jp2_comps_t));
-        jp2_struct->precedence = 0;   /* PRECEDENCE*/
-        jp2_struct->approx = 0;   /* APPROX*/
-        jp2_struct->brand = JP2_JP2;    /* BR         */
-        jp2_struct->minversion = 0; /* MinV       */
-        jp2_struct->numcl = 1;
-        jp2_struct->cl = (unsigned int*) opj_malloc(jp2_struct->numcl * sizeof(
-                             unsigned int));
-        jp2_struct->cl[0] = JP2_JP2;    /* CL0 : JP2  */
-        jp2_struct->C = 7;      /* C : Always 7*/
-        jp2_struct->UnkC = 0;      /* UnkC, colorspace specified in colr box*/
-        jp2_struct->IPR = 0;      /* IPR, no intellectual property*/
-        jp2_struct->w = parameters->w;
-        jp2_struct->h = parameters->h;
-        jp2_struct->bpc = 7;
-        jp2_struct->meth = parameters->meth;
-        jp2_struct->enumcs = parameters->enumcs;
-    }
-}
-
-void OPJ_CALLCONV mj2_destroy_compress(opj_mj2_t *movie)
-{
-    if (movie) {
-        int i;
-        mj2_tk_t *tk = NULL;
-
-        if (movie->cinfo->j2k_handle) {
-            j2k_destroy_compress(movie->j2k);
-        }
-
-        if (movie->num_cl != 0) {
-            opj_free(movie->cl);
-        }
-
-        for (i = 0; i < movie->num_vtk + movie->num_stk + movie->num_htk; i++) {
-            tk = &movie->tk[i];
-            if (tk->name_size != 0) {
-                opj_free(tk->name);
-            }
-            if (tk->track_type == 0)  {/* Video track*/
-                if (tk->jp2_struct.comps != NULL) {
-                    opj_free(tk->jp2_struct.comps);
-                }
-                if (tk->jp2_struct.cl != NULL) {
-                    opj_free(tk->jp2_struct.cl);
-                }
-                if (tk->num_jp2x != 0) {
-                    opj_free(tk->jp2xdata);
-                }
-
-            }
-            if (tk->num_url != 0) {
-                opj_free(tk->url);
-            }
-            if (tk->num_urn != 0) {
-                opj_free(tk->urn);
-            }
-            if (tk->num_br != 0) {
-                opj_free(tk->br);
-            }
-            if (tk->num_tts != 0) {
-                opj_free(tk->tts);
-            }
-            if (tk->num_chunks != 0) {
-                opj_free(tk->chunk);
-            }
-            if (tk->num_samplestochunk != 0) {
-                opj_free(tk->sampletochunk);
-            }
-            if (tk->num_samples != 0) {
-                opj_free(tk->sample);
-            }
-        }
-
-        opj_free(movie->tk);
-    }
-    opj_free(movie);
-}
-
-/*@}*/
-
-/*@}*/
-
diff --git a/src/lib/openmj2/mj2.h b/src/lib/openmj2/mj2.h
deleted file mode 100644 (file)
index 8e08f0b..0000000
+++ /dev/null
@@ -1,396 +0,0 @@
-/*
-* Copyright (c) 2003-2004, Francois-Olivier Devaux
-* Copyright (c) 2003-2004,  Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
-* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __MJ2_H
-#define __MJ2_H
-/**
-@file mj2.h
-@brief The Motion JPEG 2000 file format Reader/Writer (MJ22)
-
-*/
-
-/** @defgroup MJ2 MJ2 - Motion JPEG 2000 file format reader/writer */
-/*@{*/
-
-#define MJ2_JP    0x6a502020
-#define MJ2_FTYP  0x66747970
-#define MJ2_MJ2   0x6d6a7032
-#define MJ2_MJ2S  0x6d6a3273
-#define MJ2_MDAT  0x6d646174
-#define MJ2_MOOV  0x6d6f6f76
-#define MJ2_MVHD  0x6d766864
-#define MJ2_TRAK  0x7472616b
-#define MJ2_TKHD  0x746b6864
-#define MJ2_MDIA  0x6d646961
-#define MJ2_MDHD  0x6d646864
-#define MJ2_MHDR  0x6d686472
-#define MJ2_HDLR  0x68646C72
-#define MJ2_MINF  0x6d696e66
-#define MJ2_VMHD  0x766d6864
-#define MJ2_SMHD  0x736d6864
-#define MJ2_HMHD  0x686d6864
-#define MJ2_DINF  0x64696e66
-#define MJ2_DREF  0x64726566
-#define MJ2_URL   0x75726c20
-#define MJ2_URN   0x75726e20
-#define MJ2_STBL  0x7374626c
-#define MJ2_STSD  0x73747364
-#define MJ2_STTS  0x73747473
-#define MJ2_STSC  0x73747363
-#define MJ2_STSZ  0x7374737a
-#define MJ2_STCO  0x7374636f
-#define MJ2_MOOF  0x6d6f6f66
-#define MJ2_FREE  0x66726565
-#define MJ2_SKIP  0x736b6970
-#define MJ2_JP2C  0x6a703263
-#define MJ2_FIEL  0x6669656c
-#define MJ2_JP2P  0x6a703270
-#define MJ2_JP2X  0x6a703278
-#define MJ2_JSUB  0x6a737562
-#define MJ2_ORFO  0x6f72666f
-#define MJ2_MVEX  0x6d766578
-#define MJ2_JP2   0x6a703220
-#define MJ2_J2P0  0x4a325030
-
-/**
-Decompressed format used in parameters
-YUV = 0
-*/
-#define YUV_DFMT 1
-
-/**
-Compressed format used in parameters
-MJ2 = 0
-*/
-#define MJ2_CFMT 2
-
-
-/* ----------------------------------------------------------------------- */
-
-/**
-Time To Sample
-*/
-typedef struct mj2_tts {
-    int sample_count;
-    int sample_delta;
-} mj2_tts_t;
-
-/**
-Chunk
-*/
-typedef struct mj2_chunk {
-    unsigned int num_samples;
-    int sample_descr_idx;
-    int offset;
-} mj2_chunk_t;
-
-/**
-Sample to chunk
-*/
-typedef struct mj2_sampletochunk {
-    unsigned int first_chunk;
-    unsigned int samples_per_chunk;
-    int sample_descr_idx;
-} mj2_sampletochunk_t;
-
-/**
-Sample
-*/
-typedef struct mj2_sample {
-    unsigned int sample_size;
-    unsigned int offset;
-    unsigned int sample_delta;
-} mj2_sample_t;
-
-/**
-URL
-*/
-typedef struct mj2_url {
-    int location[4];
-} mj2_url_t;
-
-/**
-URN
-*/
-typedef struct mj2_urn {
-    int name[2];
-    int location[4];
-} mj2_urn_t;
-
-/**
-Video Track Parameters
-*/
-typedef struct mj2_tk {
-    /** codec context */
-    opj_common_ptr cinfo;
-    int track_ID;
-    int track_type;
-    unsigned int creation_time;
-    unsigned int modification_time;
-    int duration;
-    int timescale;
-    int layer;
-    int volume;
-    int language;
-    int balance;
-    int maxPDUsize;
-    int avgPDUsize;
-    int maxbitrate;
-    int avgbitrate;
-    int slidingavgbitrate;
-    int graphicsmode;
-    int opcolor[3];
-    int num_url;
-    mj2_url_t *url;
-    int num_urn;
-    mj2_urn_t *urn;
-    int Dim[2];
-    int w;
-    int h;
-    int visual_w;
-    int visual_h;
-    int CbCr_subsampling_dx;
-    int CbCr_subsampling_dy;
-    int sample_rate;
-    int sample_description;
-    int horizresolution;
-    int vertresolution;
-    int compressorname[8];
-    int depth;
-    unsigned char fieldcount;
-    unsigned char fieldorder;
-    unsigned char or_fieldcount;
-    unsigned char or_fieldorder;
-    int num_br;
-    unsigned int *br;
-    unsigned char num_jp2x;
-    unsigned char *jp2xdata;
-    unsigned char hsub;
-    unsigned char vsub;
-    unsigned char hoff;
-    unsigned char voff;
-    int trans_matrix[9];
-    /** Number of samples */
-    unsigned int num_samples;
-    int transorm;
-    int handler_type;
-    int name_size;
-    unsigned char same_sample_size;
-    int num_tts;
-    /** Time to sample    */
-    mj2_tts_t *tts;
-    unsigned int num_chunks;
-    mj2_chunk_t *chunk;
-    unsigned int num_samplestochunk;
-    mj2_sampletochunk_t *sampletochunk;
-    char *name;
-    opj_jp2_t jp2_struct;
-    /** Sample parameters */
-    mj2_sample_t *sample;
-} mj2_tk_t;
-
-/**
-MJ2 box
-*/
-typedef struct mj2_box {
-    int length;
-    int type;
-    int init_pos;
-} mj2_box_t;
-
-/**
-MJ2 Movie
-*/
-typedef struct opj_mj2 {
-    /** codec context */
-    opj_common_ptr cinfo;
-    /** handle to the J2K codec  */
-    opj_j2k_t *j2k;
-    unsigned int brand;
-    unsigned int minversion;
-    int num_cl;
-    unsigned int *cl;
-    unsigned int creation_time;
-    unsigned int modification_time;
-    int timescale;
-    unsigned int duration;
-    int rate;
-    int num_vtk;
-    int num_stk;
-    int num_htk;
-    int volume;
-    int trans_matrix[9];
-    int next_tk_id;
-    /** Track Parameters  */
-    mj2_tk_t *tk;
-} opj_mj2_t;
-
-/**
-Decompression parameters
-*/
-typedef struct mj2_dparameters {
-    /**@name command line encoder parameters (not used inside the library) */
-    /*@{*/
-    /** input file name */
-    char infile[OPJ_PATH_LEN];
-    /** output file name */
-    char outfile[OPJ_PATH_LEN];
-    /** J2K decompression parameters */
-    opj_dparameters_t j2k_parameters;
-} mj2_dparameters_t;
-
-/**
-Compression parameters
-*/
-typedef struct mj2_cparameters {
-    /**@name command line encoder parameters (not used inside the library) */
-    /*@{*/
-    /** J2K compression parameters */
-    opj_cparameters_t j2k_parameters;
-    /** input file name */
-    char infile[OPJ_PATH_LEN];
-    /** output file name */
-    char outfile[OPJ_PATH_LEN];
-    /** input file format 0:MJ2 */
-    int decod_format;
-    /** output file format 0:YUV */
-    int cod_format;
-    /** Portion of the image coded */
-    int Dim[2];
-    /** YUV Frame width */
-    int w;
-    /** YUV Frame height */
-    int h;
-    /*   Sample rate of YUV 4:4:4, 4:2:2 or 4:2:0 */
-    int CbCr_subsampling_dx;
-    /*   Sample rate of YUV 4:4:4, 4:2:2 or 4:2:0 */
-    int CbCr_subsampling_dy;
-    /*   Video Frame Rate  */
-    int frame_rate;
-    /*   In YUV files, numcomps always considered as 3 */
-    int numcomps;
-    /*   In YUV files, precision always considered as 8 */
-    int prec;
-    unsigned int meth;
-    unsigned int enumcs;
-} mj2_cparameters_t;
-
-
-/** @name Exported functions */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-/**
-Write the JP box
-*/
-OPJ_API void OPJ_CALLCONV mj2_write_jp(opj_cio_t *cio);
-/**
-Write the FTYP box
-@param movie MJ2 movie
-@param cio Output buffer stream
-*/
-OPJ_API void OPJ_CALLCONV mj2_write_ftyp(opj_mj2_t *movie, opj_cio_t *cio);
-/**
-Creates an MJ2 decompression structure
-@return Returns a handle to a MJ2 decompressor if successful, returns NULL otherwise
-*/
-OPJ_API opj_dinfo_t* OPJ_CALLCONV mj2_create_decompress();
-/**
-Destroy a MJ2 decompressor handle
-@param movie MJ2 decompressor handle to destroy
-*/
-OPJ_API void OPJ_CALLCONV mj2_destroy_decompress(opj_mj2_t *movie);
-/**
-Setup the decoder decoding parameters using user parameters.
-Decoding parameters are returned in mj2->j2k->cp.
-@param movie MJ2 decompressor handle
-@param mj2_parameters decompression parameters
-*/
-OPJ_API void OPJ_CALLCONV mj2_setup_decoder(opj_mj2_t *movie,
-        mj2_dparameters_t *mj2_parameters);
-/**
-Decode an image from a JPEG-2000 file stream
-@param movie MJ2 decompressor handle
-@param cio Input buffer stream
-@return Returns a decoded image if successful, returns NULL otherwise
-*/
-opj_image_t* mj2_decode(opj_mj2_t *movie, opj_cio_t *cio);
-/**
-Creates a MJ2 compression structure
-@return Returns a handle to a MJ2 compressor if successful, returns NULL otherwise
-*/
-OPJ_API opj_cinfo_t* OPJ_CALLCONV mj2_create_compress();
-/**
-Destroy a MJ2 compressor handle
-@param movie MJ2 compressor handle to destroy
-*/
-OPJ_API void OPJ_CALLCONV mj2_destroy_compress(opj_mj2_t *movie);
-/**
-Setup the encoder parameters using the current image and using user parameters.
-Coding parameters are returned in mj2->j2k->cp.
-@param movie MJ2 compressor handle
-@param parameters compression parameters
-*/
-OPJ_API void OPJ_CALLCONV mj2_setup_encoder(opj_mj2_t *movie,
-        mj2_cparameters_t *parameters);
-/**
-Encode an image into a JPEG-2000 file stream
-@param movie MJ2 compressor handle
-@param cio Output buffer stream
-@param image Image to encode
-@param index Name of the index file if required, NULL otherwise
-@return Returns true if successful, returns false otherwise
-*/
-opj_bool mj2_encode(opj_mj2_t *movie, opj_cio_t *cio, opj_image_t *image,
-                    char *index);
-
-/**
-Init a Standard MJ2 movie
-@param movie MJ2 Movie
-@return Returns 0 if successful, returns 1 otherwise
-*/
-OPJ_API int OPJ_CALLCONV mj2_init_stdmovie(opj_mj2_t *movie);
-/**
-Read the structure of an MJ2 file
-@param file MJ2 input File
-@param mj2 J2 movie structure
-@return Returns 0 if successful, returns 1 otherwise
-*/
-OPJ_API int OPJ_CALLCONV mj2_read_struct(FILE *file, opj_mj2_t *mj2);
-/**
-Write the MOOV box to an output buffer stream
-@param movie MJ2 movie structure
-@param cio Output buffer stream
-*/
-OPJ_API void OPJ_CALLCONV mj2_write_moov(opj_mj2_t *movie, opj_cio_t *cio);
-
-
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif /* __MJ2_H */
diff --git a/src/lib/openmj2/mj2_convert.c b/src/lib/openmj2/mj2_convert.c
deleted file mode 100644 (file)
index 0d7816b..0000000
+++ /dev/null
@@ -1,385 +0,0 @@
-/*
-* Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
-* Copyright (c) 2002-2014, Professor Benoit Macq
-* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
-* All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions
-* are met:
-* 1. Redistributions of source code must retain the above copyright
-*    notice, this list of conditions and the following disclaimer.
-* 2. Redistributions in binary form must reproduce the above copyright
-*    notice, this list of conditions and the following disclaimer in the
-*    documentation and/or other materials provided with the distribution.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-* ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-* POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "opj_includes.h"
-#include "mj2_convert.h"
-
-/*  -----------------------       */
-/*                    */
-/*                    */
-/*  Count the number of frames        */
-/*  in a YUV file             */
-/*                    */
-/*  -----------------------       */
-
-unsigned int OPJ_CALLCONV yuv_num_frames(mj2_tk_t * tk, char *infile)
-{
-    unsigned int prec_size;
-    long end_of_f, frame_size;
-    FILE *f;
-
-    f = fopen(infile, "rb");
-    if (!f) {
-        fprintf(stderr, "failed to open %s for reading\n", infile);
-        return 0;
-    }
-    prec_size = (tk->depth + 7) / 8; /* bytes of precision */
-
-    frame_size = (long)(tk->w * tk->h * (1.0 + (double) 2 / (double)(
-            tk->CbCr_subsampling_dx *
-            tk->CbCr_subsampling_dy)));  /* Calculate frame size */
-    frame_size *= prec_size;
-
-    fseek(f, 0, SEEK_END);
-    end_of_f = ftell(f);      /* Calculate file size */
-
-    if (end_of_f < frame_size) {
-        fprintf(stderr,
-                "YUV does not contains any frame of %d x %d size\n", tk->w,
-                tk->h);
-        fclose(f);
-        return 0;
-    }
-    fclose(f);
-
-    return (unsigned int)(end_of_f / frame_size);
-}
-
-/*  ----------------------- */
-/* */
-/* */
-/*  YUV to IMAGE */
-/* */
-/*  ----------------------- */
-
-opj_image_t * OPJ_CALLCONV mj2_image_create(mj2_tk_t * tk,
-        opj_cparameters_t *parameters)
-{
-    opj_image_cmptparm_t cmptparm[3];
-    opj_image_t * img;
-    int i;
-    int numcomps = 3;
-    int subsampling_dx = parameters->subsampling_dx;
-    int subsampling_dy = parameters->subsampling_dy;
-
-    /* initialize image components */
-    memset(&cmptparm[0], 0, 3 * sizeof(opj_image_cmptparm_t));
-    for (i = 0; i < numcomps; i++) {
-        cmptparm[i].prec = tk->depth;
-        cmptparm[i].bpp = tk->depth;
-        cmptparm[i].sgnd = 0;
-        cmptparm[i].dx = i ? subsampling_dx * tk->CbCr_subsampling_dx : subsampling_dx;
-        cmptparm[i].dy = i ? subsampling_dy * tk->CbCr_subsampling_dy : subsampling_dy;
-        cmptparm[i].w = tk->w;
-        cmptparm[i].h = tk->h;
-    }
-    /* create the image */
-    img = opj_image_create(numcomps, cmptparm, CLRSPC_SRGB);
-    return img;
-}
-
-char OPJ_CALLCONV yuvtoimage(mj2_tk_t * tk, opj_image_t * img, int frame_num,
-                             opj_cparameters_t *parameters, char* infile)
-{
-    int i, compno;
-    int offset, size, max, prec_bytes, is_16, v;
-    long end_of_f, position;
-    int numcomps = 3;
-    int subsampling_dx = parameters->subsampling_dx;
-    int subsampling_dy = parameters->subsampling_dy;
-    FILE *yuvfile;
-    int *data;
-    unsigned char uc;
-
-    yuvfile = fopen(infile, "rb");
-    if (!yuvfile) {
-        fprintf(stderr, "failed to open %s for readings\n", parameters->infile);
-        return 1;
-    }
-    is_16 = (tk->depth > 8);
-    prec_bytes = (is_16 ? 2 : 1);
-
-    offset = (int)((double)(frame_num * tk->w * tk->h) * (1.0 +
-                   1.0 * (double) 2 / (double)(tk->CbCr_subsampling_dx *
-                           tk->CbCr_subsampling_dy)));
-    offset *= prec_bytes;
-
-    fseek(yuvfile, 0, SEEK_END);
-    end_of_f = ftell(yuvfile);
-    fseek(yuvfile, sizeof(unsigned char) * offset, SEEK_SET);
-    position = ftell(yuvfile);
-    if (position >= end_of_f) {
-        fprintf(stderr, "Cannot reach frame number %d in yuv file !!\n",
-                frame_num);
-        fclose(yuvfile);
-        return 1;
-    }
-
-    img->x0 = tk->Dim[0];
-    img->y0 = tk->Dim[1];
-    img->x1 = !tk->Dim[0] ? (tk->w - 1) * subsampling_dx + 1 : tk->Dim[0] +
-              (tk->w - 1) * subsampling_dx + 1;
-    img->y1 = !tk->Dim[1] ? (tk->h - 1) * subsampling_dy + 1 : tk->Dim[1] +
-              (tk->h - 1) * subsampling_dy + 1;
-
-    size = tk->w * tk->h * prec_bytes;
-
-    for (compno = 0; compno < numcomps; compno++) {
-        max = size / (img->comps[compno].dx * img->comps[compno].dy);
-        data = img->comps[compno].data;
-
-        for (i = 0; i < max && !feof(yuvfile); i++) {
-            v = 0;
-            fread(&uc, 1, 1, yuvfile);
-            v = uc;
-
-            if (is_16) {
-                fread(&uc, 1, 1, yuvfile);
-                v |= (uc << 8);
-            }
-            *data++ = v;
-        }
-    }
-    fclose(yuvfile);
-
-    return 0;
-}
-
-
-
-/*  ----------------------- */
-/* */
-/* */
-/*  IMAGE to YUV */
-/* */
-/*  ----------------------- */
-
-
-opj_bool OPJ_CALLCONV imagetoyuv(opj_image_t * img, char *outfile)
-{
-    FILE *f;
-    int *data;
-    int i, v, is_16, prec_bytes;
-    unsigned char buf[2];
-
-    if (img->numcomps == 3) {
-        if (img->comps[0].dx != img->comps[1].dx / 2
-                || img->comps[1].dx != img->comps[2].dx) {
-            fprintf(stderr,
-                    "Error with the input image components size: cannot create yuv file)\n");
-            return OPJ_FALSE;
-        }
-    } else if (!(img->numcomps == 1)) {
-        fprintf(stderr,
-                "Error with the number of image components(must be one or three)\n");
-        return OPJ_FALSE;
-    }
-
-    f = fopen(outfile, "a+b");
-    if (!f) {
-        fprintf(stderr, "failed to open %s for writing\n", outfile);
-        return OPJ_FALSE;
-    }
-    is_16 = (img->comps[0].prec > 8);
-    prec_bytes = (is_16 ? 2 : 1);
-    data = img->comps[0].data;
-
-    for (i = 0; i < (img->comps[0].w * img->comps[0].h); i++) {
-        v = *data++;
-        buf[0] = (unsigned char)v;
-
-        if (is_16) {
-            buf[1] = (unsigned char)(v >> 8);
-        }
-
-        fwrite(buf, 1, prec_bytes, f);
-    }
-
-
-    if (img->numcomps == 3) {
-        data = img->comps[1].data;
-
-        for (i = 0; i < (img->comps[1].w * img->comps[1].h); i++) {
-            v = *data++;
-            buf[0] = (unsigned char)v;
-
-            if (is_16) {
-                buf[1] = (unsigned char)(v >> 8);
-            }
-
-            fwrite(buf, 1, prec_bytes, f);
-        }
-        data = img->comps[2].data;
-
-        for (i = 0; i < (img->comps[2].w * img->comps[2].h); i++) {
-            v = *data++;
-            buf[0] = (unsigned char)v;
-
-            if (is_16) {
-                buf[1] = (unsigned char)(v >> 8);
-            }
-
-            fwrite(buf, 1, prec_bytes, f);
-        }
-    } else if (img->numcomps == 1) {
-        /* fake CbCr values */
-        if (is_16) {
-            buf[0] = 255;
-            if (img->comps[0].prec == 10) {
-                buf[1] = 1;
-            } else if (img->comps[0].prec == 12) {
-                buf[1] = 3;
-            } else {
-                buf[1] = 125;
-            }
-        } else {
-            buf[0] = 125;
-        }
-
-        for (i = 0; i < (img->comps[0].w * img->comps[0].h * 0.25); i++) {
-            fwrite(buf, 1, prec_bytes, f);
-        }
-
-
-        for (i = 0; i < (img->comps[0].w * img->comps[0].h * 0.25); i++) {
-            fwrite(buf, 1, prec_bytes, f);
-        }
-    }
-    fclose(f);
-    return OPJ_TRUE;
-}
-
-/*  ----------------------- */
-/* */
-/* */
-/*  IMAGE to BMP */
-/* */
-/*  ----------------------- */
-
-int OPJ_CALLCONV imagetobmp(opj_image_t * img, char *outfile)
-{
-    int w, wr, h, hr, i, pad;
-    FILE *f;
-
-    if (img->numcomps == 3 && img->comps[0].dx == img->comps[1].dx
-            && img->comps[1].dx == img->comps[2].dx
-            && img->comps[0].dy == img->comps[1].dy
-            && img->comps[1].dy == img->comps[2].dy
-            && img->comps[0].prec == img->comps[1].prec
-            && img->comps[1].prec == img->comps[2].prec) {
-        /* -->> -->> -->> -->>
-
-          24 bits color
-
-        <<-- <<-- <<-- <<-- */
-
-        f = fopen(outfile, "wb");
-        if (!f) {
-            fprintf(stderr, "failed to open %s for writing\n", outfile);
-            return 1;
-        }
-
-        w = img->comps[0].w;
-        wr = int_ceildivpow2(img->comps[0].w, img->comps[0].factor);
-
-        h = img->comps[0].h;
-        hr = int_ceildivpow2(img->comps[0].h, img->comps[0].factor);
-
-        fprintf(f, "BM");
-
-        /* FILE HEADER */
-        /* ------------- */
-        fprintf(f, "%c%c%c%c",
-                (unsigned char)(hr * wr * 3 + 3 * hr * (wr % 2) +
-                                54) & 0xff,
-                (unsigned char)((hr * wr * 3 + 3 * hr * (wr % 2) + 54)
-                                >> 8) & 0xff,
-                (unsigned char)((hr * wr * 3 + 3 * hr * (wr % 2) + 54)
-                                >> 16) & 0xff,
-                (unsigned char)((hr * wr * 3 + 3 * hr * (wr % 2) + 54)
-                                >> 24) & 0xff);
-        fprintf(f, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff,
-                ((0) >> 16) & 0xff, ((0) >> 24) & 0xff);
-        fprintf(f, "%c%c%c%c", (54) & 0xff, ((54) >> 8) & 0xff,
-                ((54) >> 16) & 0xff, ((54) >> 24) & 0xff);
-
-        /* INFO HEADER   */
-        /* ------------- */
-        fprintf(f, "%c%c%c%c", (40) & 0xff, ((40) >> 8) & 0xff,
-                ((40) >> 16) & 0xff, ((40) >> 24) & 0xff);
-        fprintf(f, "%c%c%c%c", (unsigned char)((wr) & 0xff),
-                (unsigned char)((wr) >> 8) & 0xff,
-                (unsigned char)((wr) >> 16) & 0xff,
-                (unsigned char)((wr) >> 24) & 0xff);
-        fprintf(f, "%c%c%c%c", (unsigned char)((hr) & 0xff),
-                (unsigned char)((hr) >> 8) & 0xff,
-                (unsigned char)((hr) >> 16) & 0xff,
-                (unsigned char)((hr) >> 24) & 0xff);
-        fprintf(f, "%c%c", (1) & 0xff, ((1) >> 8) & 0xff);
-        fprintf(f, "%c%c", (24) & 0xff, ((24) >> 8) & 0xff);
-        fprintf(f, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff,
-                ((0) >> 16) & 0xff, ((0) >> 24) & 0xff);
-        fprintf(f, "%c%c%c%c",
-                (unsigned char)(3 * hr * wr +
-                                3 * hr * (wr % 2)) & 0xff,
-                (unsigned char)((hr * wr * 3 + 3 * hr * (wr % 2)) >>
-                                8) & 0xff,
-                (unsigned char)((hr * wr * 3 + 3 * hr * (wr % 2)) >>
-                                16) & 0xff,
-                (unsigned char)((hr * wr * 3 + 3 * hr * (wr % 2)) >>
-                                24) & 0xff);
-        fprintf(f, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff,
-                ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
-        fprintf(f, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff,
-                ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
-        fprintf(f, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff,
-                ((0) >> 16) & 0xff, ((0) >> 24) & 0xff);
-        fprintf(f, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff,
-                ((0) >> 16) & 0xff, ((0) >> 24) & 0xff);
-
-        for (i = 0; i < wr * hr; i++) {
-            unsigned char R, G, B;
-            /* a modifier */
-            /* R = img->comps[0].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];*/
-            R = img->comps[0].data[w * hr - ((i) / (wr) + 1) * w + (i) % (wr)];
-            /* G = img->comps[1].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];*/
-            G = img->comps[1].data[w * hr - ((i) / (wr) + 1) * w + (i) % (wr)];
-            /* B = img->comps[2].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];*/
-            B = img->comps[2].data[w * hr - ((i) / (wr) + 1) * w + (i) % (wr)];
-            fprintf(f, "%c%c%c", B, G, R);
-
-            if ((i + 1) % wr == 0) {
-                for (pad = (3 * wr) % 4 ? 4 - (3 * wr) % 4 : 0; pad > 0; pad--) { /* ADD */
-                    fprintf(f, "%c", 0);
-                }
-            }
-        }
-        fclose(f);
-    }
-    return 0;
-}
diff --git a/src/lib/openmj2/mj2_convert.h b/src/lib/openmj2/mj2_convert.h
deleted file mode 100644 (file)
index e5c18cd..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-* Copyright (c) 2003-2004, Francois-Olivier Devaux
-* Copyright (c) 2002-2004,  Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
-* All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions
-* are met:
-* 1. Redistributions of source code must retain the above copyright
-*    notice, this list of conditions and the following disclaimer.
-* 2. Redistributions in binary form must reproduce the above copyright
-*    notice, this list of conditions and the following disclaimer in the
-*    documentation and/or other materials provided with the distribution.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-* ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-* POSSIBILITY OF SUCH DAMAGE.
-*/
-
-
-#include "mj2.h"
-
-#ifndef __MJ2_CONVERT_H
-#define __MJ2_CONVERT_H
-
-OPJ_API int OPJ_CALLCONV imagetoyuv(opj_image_t * img, char *outfile);
-
-OPJ_API int OPJ_CALLCONV imagetobmp(opj_image_t * img, char *outfile);
-
-OPJ_API opj_image_t * OPJ_CALLCONV mj2_image_create(mj2_tk_t * tk,
-        opj_cparameters_t *parameters);
-
-OPJ_API char OPJ_CALLCONV yuvtoimage(mj2_tk_t * tk, opj_image_t * img,
-                                     int frame_num, opj_cparameters_t *parameters, char* infile);
-
-OPJ_API unsigned int OPJ_CALLCONV yuv_num_frames(mj2_tk_t * tk, char *infile);
-
-
-#endif
diff --git a/src/lib/openmj2/mqc.c b/src/lib/openmj2/mqc.c
deleted file mode 100644 (file)
index 60d0572..0000000
+++ /dev/null
@@ -1,629 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "opj_includes.h"
-
-/** @defgroup MQC MQC - Implementation of an MQ-Coder */
-/*@{*/
-
-/** @name Local static functions */
-/*@{*/
-
-/**
-Output a byte, doing bit-stuffing if necessary.
-After a 0xff byte, the next byte must be smaller than 0x90.
-@param mqc MQC handle
-*/
-static void mqc_byteout(opj_mqc_t *mqc);
-/**
-Renormalize mqc->a and mqc->c while encoding, so that mqc->a stays between 0x8000 and 0x10000
-@param mqc MQC handle
-*/
-static void mqc_renorme(opj_mqc_t *mqc);
-/**
-Encode the most probable symbol
-@param mqc MQC handle
-*/
-static void mqc_codemps(opj_mqc_t *mqc);
-/**
-Encode the most least symbol
-@param mqc MQC handle
-*/
-static void mqc_codelps(opj_mqc_t *mqc);
-/**
-Fill mqc->c with 1's for flushing
-@param mqc MQC handle
-*/
-static void mqc_setbits(opj_mqc_t *mqc);
-/**
-FIXME: documentation ???
-@param mqc MQC handle
-@return
-*/
-static INLINE int mqc_mpsexchange(opj_mqc_t *const mqc);
-/**
-FIXME: documentation ???
-@param mqc MQC handle
-@return
-*/
-static INLINE int mqc_lpsexchange(opj_mqc_t *const mqc);
-/**
-Input a byte
-@param mqc MQC handle
-*/
-static INLINE void mqc_bytein(opj_mqc_t *const mqc);
-/**
-Renormalize mqc->a and mqc->c while decoding
-@param mqc MQC handle
-*/
-static INLINE void mqc_renormd(opj_mqc_t *const mqc);
-/*@}*/
-
-/*@}*/
-
-/* <summary> */
-/* This array defines all the possible states for a context. */
-/* </summary> */
-static opj_mqc_state_t mqc_states[47 * 2] = {
-    {0x5601, 0, &mqc_states[2], &mqc_states[3]},
-    {0x5601, 1, &mqc_states[3], &mqc_states[2]},
-    {0x3401, 0, &mqc_states[4], &mqc_states[12]},
-    {0x3401, 1, &mqc_states[5], &mqc_states[13]},
-    {0x1801, 0, &mqc_states[6], &mqc_states[18]},
-    {0x1801, 1, &mqc_states[7], &mqc_states[19]},
-    {0x0ac1, 0, &mqc_states[8], &mqc_states[24]},
-    {0x0ac1, 1, &mqc_states[9], &mqc_states[25]},
-    {0x0521, 0, &mqc_states[10], &mqc_states[58]},
-    {0x0521, 1, &mqc_states[11], &mqc_states[59]},
-    {0x0221, 0, &mqc_states[76], &mqc_states[66]},
-    {0x0221, 1, &mqc_states[77], &mqc_states[67]},
-    {0x5601, 0, &mqc_states[14], &mqc_states[13]},
-    {0x5601, 1, &mqc_states[15], &mqc_states[12]},
-    {0x5401, 0, &mqc_states[16], &mqc_states[28]},
-    {0x5401, 1, &mqc_states[17], &mqc_states[29]},
-    {0x4801, 0, &mqc_states[18], &mqc_states[28]},
-    {0x4801, 1, &mqc_states[19], &mqc_states[29]},
-    {0x3801, 0, &mqc_states[20], &mqc_states[28]},
-    {0x3801, 1, &mqc_states[21], &mqc_states[29]},
-    {0x3001, 0, &mqc_states[22], &mqc_states[34]},
-    {0x3001, 1, &mqc_states[23], &mqc_states[35]},
-    {0x2401, 0, &mqc_states[24], &mqc_states[36]},
-    {0x2401, 1, &mqc_states[25], &mqc_states[37]},
-    {0x1c01, 0, &mqc_states[26], &mqc_states[40]},
-    {0x1c01, 1, &mqc_states[27], &mqc_states[41]},
-    {0x1601, 0, &mqc_states[58], &mqc_states[42]},
-    {0x1601, 1, &mqc_states[59], &mqc_states[43]},
-    {0x5601, 0, &mqc_states[30], &mqc_states[29]},
-    {0x5601, 1, &mqc_states[31], &mqc_states[28]},
-    {0x5401, 0, &mqc_states[32], &mqc_states[28]},
-    {0x5401, 1, &mqc_states[33], &mqc_states[29]},
-    {0x5101, 0, &mqc_states[34], &mqc_states[30]},
-    {0x5101, 1, &mqc_states[35], &mqc_states[31]},
-    {0x4801, 0, &mqc_states[36], &mqc_states[32]},
-    {0x4801, 1, &mqc_states[37], &mqc_states[33]},
-    {0x3801, 0, &mqc_states[38], &mqc_states[34]},
-    {0x3801, 1, &mqc_states[39], &mqc_states[35]},
-    {0x3401, 0, &mqc_states[40], &mqc_states[36]},
-    {0x3401, 1, &mqc_states[41], &mqc_states[37]},
-    {0x3001, 0, &mqc_states[42], &mqc_states[38]},
-    {0x3001, 1, &mqc_states[43], &mqc_states[39]},
-    {0x2801, 0, &mqc_states[44], &mqc_states[38]},
-    {0x2801, 1, &mqc_states[45], &mqc_states[39]},
-    {0x2401, 0, &mqc_states[46], &mqc_states[40]},
-    {0x2401, 1, &mqc_states[47], &mqc_states[41]},
-    {0x2201, 0, &mqc_states[48], &mqc_states[42]},
-    {0x2201, 1, &mqc_states[49], &mqc_states[43]},
-    {0x1c01, 0, &mqc_states[50], &mqc_states[44]},
-    {0x1c01, 1, &mqc_states[51], &mqc_states[45]},
-    {0x1801, 0, &mqc_states[52], &mqc_states[46]},
-    {0x1801, 1, &mqc_states[53], &mqc_states[47]},
-    {0x1601, 0, &mqc_states[54], &mqc_states[48]},
-    {0x1601, 1, &mqc_states[55], &mqc_states[49]},
-    {0x1401, 0, &mqc_states[56], &mqc_states[50]},
-    {0x1401, 1, &mqc_states[57], &mqc_states[51]},
-    {0x1201, 0, &mqc_states[58], &mqc_states[52]},
-    {0x1201, 1, &mqc_states[59], &mqc_states[53]},
-    {0x1101, 0, &mqc_states[60], &mqc_states[54]},
-    {0x1101, 1, &mqc_states[61], &mqc_states[55]},
-    {0x0ac1, 0, &mqc_states[62], &mqc_states[56]},
-    {0x0ac1, 1, &mqc_states[63], &mqc_states[57]},
-    {0x09c1, 0, &mqc_states[64], &mqc_states[58]},
-    {0x09c1, 1, &mqc_states[65], &mqc_states[59]},
-    {0x08a1, 0, &mqc_states[66], &mqc_states[60]},
-    {0x08a1, 1, &mqc_states[67], &mqc_states[61]},
-    {0x0521, 0, &mqc_states[68], &mqc_states[62]},
-    {0x0521, 1, &mqc_states[69], &mqc_states[63]},
-    {0x0441, 0, &mqc_states[70], &mqc_states[64]},
-    {0x0441, 1, &mqc_states[71], &mqc_states[65]},
-    {0x02a1, 0, &mqc_states[72], &mqc_states[66]},
-    {0x02a1, 1, &mqc_states[73], &mqc_states[67]},
-    {0x0221, 0, &mqc_states[74], &mqc_states[68]},
-    {0x0221, 1, &mqc_states[75], &mqc_states[69]},
-    {0x0141, 0, &mqc_states[76], &mqc_states[70]},
-    {0x0141, 1, &mqc_states[77], &mqc_states[71]},
-    {0x0111, 0, &mqc_states[78], &mqc_states[72]},
-    {0x0111, 1, &mqc_states[79], &mqc_states[73]},
-    {0x0085, 0, &mqc_states[80], &mqc_states[74]},
-    {0x0085, 1, &mqc_states[81], &mqc_states[75]},
-    {0x0049, 0, &mqc_states[82], &mqc_states[76]},
-    {0x0049, 1, &mqc_states[83], &mqc_states[77]},
-    {0x0025, 0, &mqc_states[84], &mqc_states[78]},
-    {0x0025, 1, &mqc_states[85], &mqc_states[79]},
-    {0x0015, 0, &mqc_states[86], &mqc_states[80]},
-    {0x0015, 1, &mqc_states[87], &mqc_states[81]},
-    {0x0009, 0, &mqc_states[88], &mqc_states[82]},
-    {0x0009, 1, &mqc_states[89], &mqc_states[83]},
-    {0x0005, 0, &mqc_states[90], &mqc_states[84]},
-    {0x0005, 1, &mqc_states[91], &mqc_states[85]},
-    {0x0001, 0, &mqc_states[90], &mqc_states[86]},
-    {0x0001, 1, &mqc_states[91], &mqc_states[87]},
-    {0x5601, 0, &mqc_states[92], &mqc_states[92]},
-    {0x5601, 1, &mqc_states[93], &mqc_states[93]},
-};
-
-/*
-==========================================================
-   local functions
-==========================================================
-*/
-
-static void mqc_byteout(opj_mqc_t *mqc)
-{
-    if (*mqc->bp == 0xff) {
-        mqc->bp++;
-        *mqc->bp = mqc->c >> 20;
-        mqc->c &= 0xfffff;
-        mqc->ct = 7;
-    } else {
-        if ((mqc->c & 0x8000000) == 0) {    /* ((mqc->c&0x8000000)==0) CHANGE */
-            mqc->bp++;
-            *mqc->bp = mqc->c >> 19;
-            mqc->c &= 0x7ffff;
-            mqc->ct = 8;
-        } else {
-            (*mqc->bp)++;
-            if (*mqc->bp == 0xff) {
-                mqc->c &= 0x7ffffff;
-                mqc->bp++;
-                *mqc->bp = mqc->c >> 20;
-                mqc->c &= 0xfffff;
-                mqc->ct = 7;
-            } else {
-                mqc->bp++;
-                *mqc->bp = mqc->c >> 19;
-                mqc->c &= 0x7ffff;
-                mqc->ct = 8;
-            }
-        }
-    }
-}
-
-static void mqc_renorme(opj_mqc_t *mqc)
-{
-    do {
-        mqc->a <<= 1;
-        mqc->c <<= 1;
-        mqc->ct--;
-        if (mqc->ct == 0) {
-            mqc_byteout(mqc);
-        }
-    } while ((mqc->a & 0x8000) == 0);
-}
-
-static void mqc_codemps(opj_mqc_t *mqc)
-{
-    mqc->a -= (*mqc->curctx)->qeval;
-    if ((mqc->a & 0x8000) == 0) {
-        if (mqc->a < (*mqc->curctx)->qeval) {
-            mqc->a = (*mqc->curctx)->qeval;
-        } else {
-            mqc->c += (*mqc->curctx)->qeval;
-        }
-        *mqc->curctx = (*mqc->curctx)->nmps;
-        mqc_renorme(mqc);
-    } else {
-        mqc->c += (*mqc->curctx)->qeval;
-    }
-}
-
-static void mqc_codelps(opj_mqc_t *mqc)
-{
-    mqc->a -= (*mqc->curctx)->qeval;
-    if (mqc->a < (*mqc->curctx)->qeval) {
-        mqc->c += (*mqc->curctx)->qeval;
-    } else {
-        mqc->a = (*mqc->curctx)->qeval;
-    }
-    *mqc->curctx = (*mqc->curctx)->nlps;
-    mqc_renorme(mqc);
-}
-
-static void mqc_setbits(opj_mqc_t *mqc)
-{
-    unsigned int tempc = mqc->c + mqc->a;
-    mqc->c |= 0xffff;
-    if (mqc->c >= tempc) {
-        mqc->c -= 0x8000;
-    }
-}
-
-static INLINE int mqc_mpsexchange(opj_mqc_t *const mqc)
-{
-    int d;
-    if (mqc->a < (*mqc->curctx)->qeval) {
-        d = 1 - (*mqc->curctx)->mps;
-        *mqc->curctx = (*mqc->curctx)->nlps;
-    } else {
-        d = (*mqc->curctx)->mps;
-        *mqc->curctx = (*mqc->curctx)->nmps;
-    }
-
-    return d;
-}
-
-static INLINE int mqc_lpsexchange(opj_mqc_t *const mqc)
-{
-    int d;
-    if (mqc->a < (*mqc->curctx)->qeval) {
-        mqc->a = (*mqc->curctx)->qeval;
-        d = (*mqc->curctx)->mps;
-        *mqc->curctx = (*mqc->curctx)->nmps;
-    } else {
-        mqc->a = (*mqc->curctx)->qeval;
-        d = 1 - (*mqc->curctx)->mps;
-        *mqc->curctx = (*mqc->curctx)->nlps;
-    }
-
-    return d;
-}
-
-#ifdef MQC_PERF_OPT
-static INLINE void mqc_bytein(opj_mqc_t *const mqc)
-{
-    unsigned int i = *((unsigned int *) mqc->bp);
-    mqc->c += i & 0xffff00;
-    mqc->ct = i & 0x0f;
-    mqc->bp += (i >> 2) & 0x04;
-}
-#else
-static void mqc_bytein(opj_mqc_t *const mqc)
-{
-    if (mqc->bp != mqc->end) {
-        unsigned int c;
-        if (mqc->bp + 1 != mqc->end) {
-            c = *(mqc->bp + 1);
-        } else {
-            c = 0xff;
-        }
-        if (*mqc->bp == 0xff) {
-            if (c > 0x8f) {
-                mqc->c += 0xff00;
-                mqc->ct = 8;
-            } else {
-                mqc->bp++;
-                mqc->c += c << 9;
-                mqc->ct = 7;
-            }
-        } else {
-            mqc->bp++;
-            mqc->c += c << 8;
-            mqc->ct = 8;
-        }
-    } else {
-        mqc->c += 0xff00;
-        mqc->ct = 8;
-    }
-}
-#endif
-
-static INLINE void mqc_renormd(opj_mqc_t *const mqc)
-{
-    do {
-        if (mqc->ct == 0) {
-            mqc_bytein(mqc);
-        }
-        mqc->a <<= 1;
-        mqc->c <<= 1;
-        mqc->ct--;
-    } while (mqc->a < 0x8000);
-}
-
-/*
-==========================================================
-   MQ-Coder interface
-==========================================================
-*/
-
-opj_mqc_t* mqc_create(void)
-{
-    opj_mqc_t *mqc = (opj_mqc_t*)opj_malloc(sizeof(opj_mqc_t));
-#ifdef MQC_PERF_OPT
-    mqc->buffer = NULL;
-#endif
-    return mqc;
-}
-
-void mqc_destroy(opj_mqc_t *mqc)
-{
-    if (mqc) {
-#ifdef MQC_PERF_OPT
-        if (mqc->buffer) {
-            opj_free(mqc->buffer);
-        }
-#endif
-        opj_free(mqc);
-    }
-}
-
-int mqc_numbytes(opj_mqc_t *mqc)
-{
-    return mqc->bp - mqc->start;
-}
-
-void mqc_init_enc(opj_mqc_t *mqc, unsigned char *bp)
-{
-    mqc_setcurctx(mqc, 0);
-    mqc->a = 0x8000;
-    mqc->c = 0;
-    mqc->bp = bp - 1;
-    mqc->ct = 12;
-    if (*mqc->bp == 0xff) {
-        mqc->ct = 13;
-    }
-    mqc->start = bp;
-}
-
-void mqc_encode(opj_mqc_t *mqc, int d)
-{
-    if ((*mqc->curctx)->mps == d) {
-        mqc_codemps(mqc);
-    } else {
-        mqc_codelps(mqc);
-    }
-}
-
-void mqc_flush(opj_mqc_t *mqc)
-{
-    mqc_setbits(mqc);
-    mqc->c <<= mqc->ct;
-    mqc_byteout(mqc);
-    mqc->c <<= mqc->ct;
-    mqc_byteout(mqc);
-
-    if (*mqc->bp != 0xff) {
-        mqc->bp++;
-    }
-}
-
-void mqc_bypass_init_enc(opj_mqc_t *mqc)
-{
-    mqc->c = 0;
-    mqc->ct = 8;
-    /*if (*mqc->bp == 0xff) {
-    mqc->ct = 7;
-     } */
-}
-
-void mqc_bypass_enc(opj_mqc_t *mqc, int d)
-{
-    mqc->ct--;
-    mqc->c = mqc->c + (d << mqc->ct);
-    if (mqc->ct == 0) {
-        mqc->bp++;
-        *mqc->bp = mqc->c;
-        mqc->ct = 8;
-        if (*mqc->bp == 0xff) {
-            mqc->ct = 7;
-        }
-        mqc->c = 0;
-    }
-}
-
-int mqc_bypass_flush_enc(opj_mqc_t *mqc)
-{
-    unsigned char bit_padding;
-
-    bit_padding = 0;
-
-    if (mqc->ct != 0) {
-        while (mqc->ct > 0) {
-            mqc->ct--;
-            mqc->c += bit_padding << mqc->ct;
-            bit_padding = (bit_padding + 1) & 0x01;
-        }
-        mqc->bp++;
-        *mqc->bp = mqc->c;
-        mqc->ct = 8;
-        mqc->c = 0;
-    }
-
-    return 1;
-}
-
-void mqc_reset_enc(opj_mqc_t *mqc)
-{
-    mqc_resetstates(mqc);
-    mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46);
-    mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3);
-    mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4);
-}
-
-int mqc_restart_enc(opj_mqc_t *mqc)
-{
-    int correction = 1;
-
-    /* <flush part> */
-    int n = 27 - 15 - mqc->ct;
-    mqc->c <<= mqc->ct;
-    while (n > 0) {
-        mqc_byteout(mqc);
-        n -= mqc->ct;
-        mqc->c <<= mqc->ct;
-    }
-    mqc_byteout(mqc);
-
-    return correction;
-}
-
-void mqc_restart_init_enc(opj_mqc_t *mqc)
-{
-    /* <Re-init part> */
-    mqc_setcurctx(mqc, 0);
-    mqc->a = 0x8000;
-    mqc->c = 0;
-    mqc->ct = 12;
-    mqc->bp--;
-    if (*mqc->bp == 0xff) {
-        mqc->ct = 13;
-    }
-}
-
-void mqc_erterm_enc(opj_mqc_t *mqc)
-{
-    int k = 11 - mqc->ct + 1;
-
-    while (k > 0) {
-        mqc->c <<= mqc->ct;
-        mqc->ct = 0;
-        mqc_byteout(mqc);
-        k -= mqc->ct;
-    }
-
-    if (*mqc->bp != 0xff) {
-        mqc_byteout(mqc);
-    }
-}
-
-void mqc_segmark_enc(opj_mqc_t *mqc)
-{
-    int i;
-    mqc_setcurctx(mqc, 18);
-
-    for (i = 1; i < 5; i++) {
-        mqc_encode(mqc, i % 2);
-    }
-}
-
-void mqc_init_dec(opj_mqc_t *mqc, unsigned char *bp, int len)
-{
-    mqc_setcurctx(mqc, 0);
-    mqc->start = bp;
-    mqc->end = bp + len;
-    mqc->bp = bp;
-    if (len == 0) {
-        mqc->c = 0xff << 16;
-    } else {
-        mqc->c = *mqc->bp << 16;
-    }
-
-#ifdef MQC_PERF_OPT
-    {
-        unsigned int c;
-        unsigned int *ip;
-        unsigned char *end = mqc->end - 1;
-        mqc->buffer = opj_realloc(mqc->buffer, (len + 1) * sizeof(unsigned int));
-        ip = (unsigned int *) mqc->buffer;
-
-        while (bp < end) {
-            c = *(bp + 1);
-            if (*bp == 0xff) {
-                if (c > 0x8f) {
-                    break;
-                } else {
-                    *ip = 0x00000017 | (c << 9);
-                }
-            } else {
-                *ip = 0x00000018 | (c << 8);
-            }
-            bp++;
-            ip++;
-        }
-
-        /* Handle last byte of data */
-        c = 0xff;
-        if (*bp == 0xff) {
-            *ip = 0x0000ff18;
-        } else {
-            bp++;
-            *ip = 0x00000018 | (c << 8);
-        }
-        ip++;
-
-        *ip = 0x0000ff08;
-        mqc->bp = mqc->buffer;
-    }
-#endif
-    mqc_bytein(mqc);
-    mqc->c <<= 7;
-    mqc->ct -= 7;
-    mqc->a = 0x8000;
-}
-
-int mqc_decode(opj_mqc_t *const mqc)
-{
-    int d;
-    mqc->a -= (*mqc->curctx)->qeval;
-    if ((mqc->c >> 16) < (*mqc->curctx)->qeval) {
-        d = mqc_lpsexchange(mqc);
-        mqc_renormd(mqc);
-    } else {
-        mqc->c -= (*mqc->curctx)->qeval << 16;
-        if ((mqc->a & 0x8000) == 0) {
-            d = mqc_mpsexchange(mqc);
-            mqc_renormd(mqc);
-        } else {
-            d = (*mqc->curctx)->mps;
-        }
-    }
-
-    return d;
-}
-
-void mqc_resetstates(opj_mqc_t *mqc)
-{
-    int i;
-    for (i = 0; i < MQC_NUMCTXS; i++) {
-        mqc->ctxs[i] = mqc_states;
-    }
-}
-
-void mqc_setstate(opj_mqc_t *mqc, int ctxno, int msb, int prob)
-{
-    mqc->ctxs[ctxno] = &mqc_states[msb + (prob << 1)];
-}
-
-
diff --git a/src/lib/openmj2/mqc.h b/src/lib/openmj2/mqc.h
deleted file mode 100644 (file)
index 8966e55..0000000
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __MQC_H
-#define __MQC_H
-/**
-@file mqc.h
-@brief Implementation of an MQ-Coder (MQC)
-
-The functions in MQC.C have for goal to realize the MQ-coder operations. The functions
-in MQC.C are used by some function in T1.C.
-*/
-
-/** @defgroup MQC MQC - Implementation of an MQ-Coder */
-/*@{*/
-
-/**
-This struct defines the state of a context.
-*/
-typedef struct opj_mqc_state {
-    /** the probability of the Least Probable Symbol (0.75->0x8000, 1.5->0xffff) */
-    unsigned int qeval;
-    /** the Most Probable Symbol (0 or 1) */
-    int mps;
-    /** next state if the next encoded symbol is the MPS */
-    struct opj_mqc_state *nmps;
-    /** next state if the next encoded symbol is the LPS */
-    struct opj_mqc_state *nlps;
-} opj_mqc_state_t;
-
-#define MQC_NUMCTXS 19
-
-/**
-MQ coder
-*/
-typedef struct opj_mqc {
-    unsigned int c;
-    unsigned int a;
-    unsigned int ct;
-    unsigned char *bp;
-    unsigned char *start;
-    unsigned char *end;
-    opj_mqc_state_t *ctxs[MQC_NUMCTXS];
-    opj_mqc_state_t **curctx;
-#ifdef MQC_PERF_OPT
-    unsigned char *buffer;
-#endif
-} opj_mqc_t;
-
-/** @name Exported functions */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-/**
-Create a new MQC handle
-@return Returns a new MQC handle if successful, returns NULL otherwise
-*/
-opj_mqc_t* mqc_create(void);
-/**
-Destroy a previously created MQC handle
-@param mqc MQC handle to destroy
-*/
-void mqc_destroy(opj_mqc_t *mqc);
-/**
-Return the number of bytes written/read since initialisation
-@param mqc MQC handle
-@return Returns the number of bytes already encoded
-*/
-int mqc_numbytes(opj_mqc_t *mqc);
-/**
-Reset the states of all the context of the coder/decoder
-(each context is set to a state where 0 and 1 are more or less equiprobable)
-@param mqc MQC handle
-*/
-void mqc_resetstates(opj_mqc_t *mqc);
-/**
-Set the state of a particular context
-@param mqc MQC handle
-@param ctxno Number that identifies the context
-@param msb The MSB of the new state of the context
-@param prob Number that identifies the probability of the symbols for the new state of the context
-*/
-void mqc_setstate(opj_mqc_t *mqc, int ctxno, int msb, int prob);
-/**
-Initialize the encoder
-@param mqc MQC handle
-@param bp Pointer to the start of the buffer where the bytes will be written
-*/
-void mqc_init_enc(opj_mqc_t *mqc, unsigned char *bp);
-/**
-Set the current context used for coding/decoding
-@param mqc MQC handle
-@param ctxno Number that identifies the context
-*/
-#define mqc_setcurctx(mqc, ctxno)   (mqc)->curctx = &(mqc)->ctxs[(int)(ctxno)]
-/**
-Encode a symbol using the MQ-coder
-@param mqc MQC handle
-@param d The symbol to be encoded (0 or 1)
-*/
-void mqc_encode(opj_mqc_t *mqc, int d);
-/**
-Flush the encoder, so that all remaining data is written
-@param mqc MQC handle
-*/
-void mqc_flush(opj_mqc_t *mqc);
-/**
-BYPASS mode switch, initialization operation.
-JPEG 2000 p 505.
-<h2>Not fully implemented and tested !!</h2>
-@param mqc MQC handle
-*/
-void mqc_bypass_init_enc(opj_mqc_t *mqc);
-/**
-BYPASS mode switch, coding operation.
-JPEG 2000 p 505.
-<h2>Not fully implemented and tested !!</h2>
-@param mqc MQC handle
-@param d The symbol to be encoded (0 or 1)
-*/
-void mqc_bypass_enc(opj_mqc_t *mqc, int d);
-/**
-BYPASS mode switch, flush operation
-<h2>Not fully implemented and tested !!</h2>
-@param mqc MQC handle
-@return Returns 1 (always)
-*/
-int mqc_bypass_flush_enc(opj_mqc_t *mqc);
-/**
-RESET mode switch
-@param mqc MQC handle
-*/
-void mqc_reset_enc(opj_mqc_t *mqc);
-/**
-RESTART mode switch (TERMALL)
-@param mqc MQC handle
-@return Returns 1 (always)
-*/
-int mqc_restart_enc(opj_mqc_t *mqc);
-/**
-RESTART mode switch (TERMALL) reinitialisation
-@param mqc MQC handle
-*/
-void mqc_restart_init_enc(opj_mqc_t *mqc);
-/**
-ERTERM mode switch (PTERM)
-@param mqc MQC handle
-*/
-void mqc_erterm_enc(opj_mqc_t *mqc);
-/**
-SEGMARK mode switch (SEGSYM)
-@param mqc MQC handle
-*/
-void mqc_segmark_enc(opj_mqc_t *mqc);
-/**
-Initialize the decoder
-@param mqc MQC handle
-@param bp Pointer to the start of the buffer from which the bytes will be read
-@param len Length of the input buffer
-*/
-void mqc_init_dec(opj_mqc_t *mqc, unsigned char *bp, int len);
-/**
-Decode a symbol
-@param mqc MQC handle
-@return Returns the decoded symbol (0 or 1)
-*/
-int mqc_decode(opj_mqc_t *const mqc);
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif /* __MQC_H */
diff --git a/src/lib/openmj2/openjpeg.c b/src/lib/openmj2/openjpeg.c
deleted file mode 100644 (file)
index a0cce5d..0000000
+++ /dev/null
@@ -1,389 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifdef _WIN32
-#include <windows.h>
-#endif /* _WIN32 */
-
-#include "opj_config_private.h"
-#include "opj_includes.h"
-
-/* ---------------------------------------------------------------------- */
-#ifdef _WIN32
-#ifndef OPJ_STATIC
-BOOL APIENTRY
-DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
-{
-
-    OPJ_ARG_NOT_USED(lpReserved);
-    OPJ_ARG_NOT_USED(hModule);
-
-    switch (ul_reason_for_call) {
-    case DLL_PROCESS_ATTACH :
-        break;
-    case DLL_PROCESS_DETACH :
-        break;
-    case DLL_THREAD_ATTACH :
-    case DLL_THREAD_DETACH :
-        break;
-    }
-
-    return TRUE;
-}
-#endif /* OPJ_STATIC */
-#endif /* _WIN32 */
-
-/* ---------------------------------------------------------------------- */
-
-
-const char* OPJ_CALLCONV opj_version(void)
-{
-    return OPJ_PACKAGE_VERSION;
-}
-
-opj_dinfo_t* OPJ_CALLCONV opj_create_decompress(OPJ_CODEC_FORMAT format)
-{
-    opj_dinfo_t *dinfo = (opj_dinfo_t*)opj_calloc(1, sizeof(opj_dinfo_t));
-    if (!dinfo) {
-        return NULL;
-    }
-    dinfo->is_decompressor = OPJ_TRUE;
-    switch (format) {
-    case CODEC_J2K:
-    case CODEC_JPT:
-        /* get a J2K decoder handle */
-        dinfo->j2k_handle = (void*)j2k_create_decompress((opj_common_ptr)dinfo);
-        if (!dinfo->j2k_handle) {
-            opj_free(dinfo);
-            return NULL;
-        }
-        break;
-    case CODEC_JP2:
-        /* get a JP2 decoder handle */
-        dinfo->jp2_handle = (void*)jp2_create_decompress((opj_common_ptr)dinfo);
-        if (!dinfo->jp2_handle) {
-            opj_free(dinfo);
-            return NULL;
-        }
-        break;
-    case CODEC_UNKNOWN:
-    default:
-        opj_free(dinfo);
-        return NULL;
-    }
-
-    dinfo->codec_format = format;
-
-    return dinfo;
-}
-
-void OPJ_CALLCONV opj_destroy_decompress(opj_dinfo_t *dinfo)
-{
-    if (dinfo) {
-        /* destroy the codec */
-        switch (dinfo->codec_format) {
-        case CODEC_J2K:
-        case CODEC_JPT:
-            j2k_destroy_decompress((opj_j2k_t*)dinfo->j2k_handle);
-            break;
-        case CODEC_JP2:
-            jp2_destroy_decompress((opj_jp2_t*)dinfo->jp2_handle);
-            break;
-        case CODEC_UNKNOWN:
-        default:
-            break;
-        }
-        /* destroy the decompressor */
-        opj_free(dinfo);
-    }
-}
-
-void OPJ_CALLCONV opj_set_default_decoder_parameters(opj_dparameters_t
-        *parameters)
-{
-    if (parameters) {
-        memset(parameters, 0, sizeof(opj_dparameters_t));
-        /* default decoding parameters */
-        parameters->cp_layer = 0;
-        parameters->cp_reduce = 0;
-        parameters->cp_limit_decoding = NO_LIMITATION;
-
-        parameters->decod_format = -1;
-        parameters->cod_format = -1;
-        parameters->flags = 0;
-        /* UniPG>> */
-#ifdef USE_JPWL
-        parameters->jpwl_correct = OPJ_FALSE;
-        parameters->jpwl_exp_comps = JPWL_EXPECTED_COMPONENTS;
-        parameters->jpwl_max_tiles = JPWL_MAXIMUM_TILES;
-#endif /* USE_JPWL */
-        /* <<UniPG */
-    }
-}
-
-void OPJ_CALLCONV opj_setup_decoder(opj_dinfo_t *dinfo,
-                                    opj_dparameters_t *parameters)
-{
-    if (dinfo && parameters) {
-        switch (dinfo->codec_format) {
-        case CODEC_J2K:
-        case CODEC_JPT:
-            j2k_setup_decoder((opj_j2k_t*)dinfo->j2k_handle, parameters);
-            break;
-        case CODEC_JP2:
-            jp2_setup_decoder((opj_jp2_t*)dinfo->jp2_handle, parameters);
-            break;
-        case CODEC_UNKNOWN:
-        default:
-            break;
-        }
-    }
-}
-
-opj_image_t* OPJ_CALLCONV opj_decode(opj_dinfo_t *dinfo, opj_cio_t *cio)
-{
-    return opj_decode_with_info(dinfo, cio, NULL);
-}
-
-opj_image_t* OPJ_CALLCONV opj_decode_with_info(opj_dinfo_t *dinfo,
-        opj_cio_t *cio, opj_codestream_info_t *cstr_info)
-{
-    if (dinfo && cio) {
-        switch (dinfo->codec_format) {
-        case CODEC_J2K:
-            return j2k_decode((opj_j2k_t*)dinfo->j2k_handle, cio, cstr_info);
-        case CODEC_JPT:
-            return j2k_decode_jpt_stream((opj_j2k_t*)dinfo->j2k_handle, cio, cstr_info);
-        case CODEC_JP2:
-            return opj_jp2_decode((opj_jp2_t*)dinfo->jp2_handle, cio, cstr_info);
-        case CODEC_UNKNOWN:
-        default:
-            break;
-        }
-    }
-    return NULL;
-}
-
-opj_cinfo_t* OPJ_CALLCONV opj_create_compress(OPJ_CODEC_FORMAT format)
-{
-    opj_cinfo_t *cinfo = (opj_cinfo_t*)opj_calloc(1, sizeof(opj_cinfo_t));
-    if (!cinfo) {
-        return NULL;
-    }
-    cinfo->is_decompressor = OPJ_FALSE;
-    switch (format) {
-    case CODEC_J2K:
-        /* get a J2K coder handle */
-        cinfo->j2k_handle = (void*)j2k_create_compress((opj_common_ptr)cinfo);
-        if (!cinfo->j2k_handle) {
-            opj_free(cinfo);
-            return NULL;
-        }
-        break;
-    case CODEC_JP2:
-        /* get a JP2 coder handle */
-        cinfo->jp2_handle = (void*)jp2_create_compress((opj_common_ptr)cinfo);
-        if (!cinfo->jp2_handle) {
-            opj_free(cinfo);
-            return NULL;
-        }
-        break;
-    case CODEC_JPT:
-    case CODEC_UNKNOWN:
-    default:
-        opj_free(cinfo);
-        return NULL;
-    }
-
-    cinfo->codec_format = format;
-
-    return cinfo;
-}
-
-void OPJ_CALLCONV opj_destroy_compress(opj_cinfo_t *cinfo)
-{
-    if (cinfo) {
-        /* destroy the codec */
-        switch (cinfo->codec_format) {
-        case CODEC_J2K:
-            j2k_destroy_compress((opj_j2k_t*)cinfo->j2k_handle);
-            break;
-        case CODEC_JP2:
-            jp2_destroy_compress((opj_jp2_t*)cinfo->jp2_handle);
-            break;
-        case CODEC_JPT:
-        case CODEC_UNKNOWN:
-        default:
-            break;
-        }
-        /* destroy the decompressor */
-        opj_free(cinfo);
-    }
-}
-
-void OPJ_CALLCONV opj_set_default_encoder_parameters(opj_cparameters_t
-        *parameters)
-{
-    if (parameters) {
-        memset(parameters, 0, sizeof(opj_cparameters_t));
-        /* default coding parameters */
-        parameters->cp_cinema = OFF;
-        parameters->max_comp_size = 0;
-        parameters->numresolution = 6;
-        parameters->cp_rsiz = STD_RSIZ;
-        parameters->cblockw_init = 64;
-        parameters->cblockh_init = 64;
-        parameters->prog_order = LRCP;
-        parameters->roi_compno = -1;        /* no ROI */
-        parameters->subsampling_dx = 1;
-        parameters->subsampling_dy = 1;
-        parameters->tp_on = 0;
-        parameters->decod_format = -1;
-        parameters->cod_format = -1;
-        parameters->tcp_rates[0] = 0;
-        parameters->tcp_numlayers = 0;
-        parameters->cp_disto_alloc = 0;
-        parameters->cp_fixed_alloc = 0;
-        parameters->cp_fixed_quality = 0;
-        /* UniPG>> */
-#ifdef USE_JPWL
-        parameters->jpwl_epc_on = OPJ_FALSE;
-        parameters->jpwl_hprot_MH = -1; /* -1 means unassigned */
-        {
-            int i;
-            for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) {
-                parameters->jpwl_hprot_TPH_tileno[i] = -1; /* unassigned */
-                parameters->jpwl_hprot_TPH[i] = 0; /* absent */
-            }
-        };
-        {
-            int i;
-            for (i = 0; i < JPWL_MAX_NO_PACKSPECS; i++) {
-                parameters->jpwl_pprot_tileno[i] = -1; /* unassigned */
-                parameters->jpwl_pprot_packno[i] = -1; /* unassigned */
-                parameters->jpwl_pprot[i] = 0; /* absent */
-            }
-        };
-        parameters->jpwl_sens_size = 0; /* 0 means no ESD */
-        parameters->jpwl_sens_addr = 0; /* 0 means auto */
-        parameters->jpwl_sens_range = 0; /* 0 means packet */
-        parameters->jpwl_sens_MH = -1; /* -1 means unassigned */
-        {
-            int i;
-            for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) {
-                parameters->jpwl_sens_TPH_tileno[i] = -1; /* unassigned */
-                parameters->jpwl_sens_TPH[i] = -1; /* absent */
-            }
-        };
-#endif /* USE_JPWL */
-        /* <<UniPG */
-    }
-}
-
-void OPJ_CALLCONV opj_setup_encoder(opj_cinfo_t *cinfo,
-                                    opj_cparameters_t *parameters, opj_image_t *image)
-{
-    if (cinfo && parameters && image) {
-        switch (cinfo->codec_format) {
-        case CODEC_J2K:
-            j2k_setup_encoder((opj_j2k_t*)cinfo->j2k_handle, parameters, image);
-            break;
-        case CODEC_JP2:
-            jp2_setup_encoder((opj_jp2_t*)cinfo->jp2_handle, parameters, image);
-            break;
-        case CODEC_JPT:
-        case CODEC_UNKNOWN:
-        default:
-            break;
-        }
-    }
-}
-
-opj_bool OPJ_CALLCONV opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio,
-                                 opj_image_t *image, char *index)
-{
-    if (index != NULL)
-        opj_event_msg((opj_common_ptr)cinfo, EVT_WARNING,
-                      "Set index to NULL when calling the opj_encode function.\n"
-                      "To extract the index, use the opj_encode_with_info() function.\n"
-                      "No index will be generated during this encoding\n");
-    return opj_encode_with_info(cinfo, cio, image, NULL);
-}
-
-opj_bool OPJ_CALLCONV opj_encode_with_info(opj_cinfo_t *cinfo, opj_cio_t *cio,
-        opj_image_t *image, opj_codestream_info_t *cstr_info)
-{
-    if (cinfo && cio && image) {
-        switch (cinfo->codec_format) {
-        case CODEC_J2K:
-            return j2k_encode((opj_j2k_t*)cinfo->j2k_handle, cio, image, cstr_info);
-        case CODEC_JP2:
-            return opj_jp2_encode((opj_jp2_t*)cinfo->jp2_handle, cio, image, cstr_info);
-        case CODEC_JPT:
-        case CODEC_UNKNOWN:
-        default:
-            break;
-        }
-    }
-    return OPJ_FALSE;
-}
-
-void OPJ_CALLCONV opj_destroy_cstr_info(opj_codestream_info_t *cstr_info)
-{
-    if (cstr_info) {
-        int tileno;
-        for (tileno = 0; tileno < cstr_info->tw * cstr_info->th; tileno++) {
-            opj_tile_info_t *tile_info = &cstr_info->tile[tileno];
-            opj_free(tile_info->thresh);
-            opj_free(tile_info->packet);
-            opj_free(tile_info->tp);
-            opj_free(tile_info->marker);
-        }
-        opj_free(cstr_info->tile);
-        opj_free(cstr_info->marker);
-        opj_free(cstr_info->numdecompos);
-    }
-}
-
-void* OPJ_CALLCONV opj_image_data_alloc(size_t size)
-{
-    /* NOTE: this defers from libopenjp2 where we use opj_aligned_malloc */
-    void* ret = opj_malloc(size);
-    /* printf("opj_image_data_alloc %p\n", ret); */
-    return ret;
-}
-
-void OPJ_CALLCONV opj_image_data_free(void* ptr)
-{
-    /* NOTE: this defers from libopenjp2 where we use opj_aligned_free */
-    /* printf("opj_image_data_free %p\n", ptr); */
-    opj_free(ptr);
-}
diff --git a/src/lib/openmj2/openjpeg.h b/src/lib/openmj2/openjpeg.h
deleted file mode 100644 (file)
index 10fccf1..0000000
+++ /dev/null
@@ -1,958 +0,0 @@
-/*
-* The copyright in this software is being made available under the 2-clauses
-* BSD License, included below. This software may be subject to other third
-* party and contributor rights, including patent rights, and no such rights
-* are granted under this license.
-*
-* Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
-* Copyright (c) 2002-2014, Professor Benoit Macq
-* Copyright (c) 2001-2003, David Janssens
-* Copyright (c) 2002-2003, Yannick Verschueren
-* Copyright (c) 2003-2007, Francois-Olivier Devaux
-* Copyright (c) 2003-2014, Antonin Descampe
-* Copyright (c) 2005, Herve Drolon, FreeImage Team
-* Copyright (c) 2006-2007, Parvatha Elangovan
-* Copyright (c) 2010-2011, Kaori Hagihara
-* All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions
-* are met:
-* 1. Redistributions of source code must retain the above copyright
-*    notice, this list of conditions and the following disclaimer.
-* 2. Redistributions in binary form must reproduce the above copyright
-*    notice, this list of conditions and the following disclaimer in the
-*    documentation and/or other materials provided with the distribution.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-* ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-* POSSIBILITY OF SUCH DAMAGE.
-*/
-#ifndef OPENJPEG_H
-#define OPENJPEG_H
-
-/*
-==========================================================
-   Compiler directives
-==========================================================
-*/
-
-#if defined(OPJ_STATIC) || !defined(_WIN32)
-/* http://gcc.gnu.org/wiki/Visibility */
-#if __GNUC__ >= 4
-#define OPJ_API    __attribute__ ((visibility ("default")))
-#define OPJ_LOCAL  __attribute__ ((visibility ("hidden")))
-#else
-#define OPJ_API
-#define OPJ_LOCAL
-#endif
-#define OPJ_CALLCONV
-#else
-#define OPJ_CALLCONV __stdcall
-/*
-The following ifdef block is the standard way of creating macros which make exporting
-from a DLL simpler. All files within this DLL are compiled with the OPJ_EXPORTS
-symbol defined on the command line. this symbol should not be defined on any project
-that uses this DLL. This way any other project whose source files include this file see
-OPJ_API functions as being imported from a DLL, whereas this DLL sees symbols
-defined with this macro as being exported.
-*/
-#if defined(OPJ_EXPORTS) || defined(DLL_EXPORT)
-#define OPJ_API __declspec(dllexport)
-#else
-#define OPJ_API __declspec(dllimport)
-#endif /* OPJ_EXPORTS */
-#endif /* !OPJ_STATIC || !_WIN32 */
-
-typedef int opj_bool;
-#define OPJ_TRUE 1
-#define OPJ_FALSE 0
-
-/* Avoid compile-time warning because parameter is not used */
-#define OPJ_ARG_NOT_USED(x) (void)(x)
-/*
-==========================================================
-   Useful constant definitions
-==========================================================
-*/
-
-#define OPJ_PATH_LEN 4096 /**< Maximum allowed size for filenames */
-
-#define J2K_MAXRLVLS 33                 /**< Number of maximum resolution level authorized */
-#define J2K_MAXBANDS (3*J2K_MAXRLVLS-2) /**< Number of maximum sub-band linked to number of resolution level */
-
-/* UniPG>> */
-#define JPWL_MAX_NO_TILESPECS   16 /**< Maximum number of tile parts expected by JPWL: increase at your will */
-#define JPWL_MAX_NO_PACKSPECS   16 /**< Maximum number of packet parts expected by JPWL: increase at your will */
-#define JPWL_MAX_NO_MARKERS 512 /**< Maximum number of JPWL markers: increase at your will */
-#define JPWL_PRIVATEINDEX_NAME "jpwl_index_privatefilename" /**< index file name used when JPWL is on */
-#define JPWL_EXPECTED_COMPONENTS 3 /**< Expect this number of components, so you'll find better the first EPB */
-#define JPWL_MAXIMUM_TILES 8192 /**< Expect this maximum number of tiles, to avoid some crashes */
-#define JPWL_MAXIMUM_HAMMING 2 /**< Expect this maximum number of bit errors in marker id's */
-#define JPWL_MAXIMUM_EPB_ROOM 65450 /**< Expect this maximum number of bytes for composition of EPBs */
-/* <<UniPG */
-
-/*
-==========================================================
-   enum definitions
-==========================================================
-*/
-/**
-Rsiz Capabilities
-*/
-typedef enum RSIZ_CAPABILITIES {
-    STD_RSIZ = 0,       /** Standard JPEG2000 profile*/
-    CINEMA2K = 3,       /** Profile name for a 2K image*/
-    CINEMA4K = 4        /** Profile name for a 4K image*/
-} OPJ_RSIZ_CAPABILITIES;
-
-/**
-Digital cinema operation mode
-*/
-typedef enum CINEMA_MODE {
-    OFF = 0,                    /** Not Digital Cinema*/
-    CINEMA2K_24 = 1,    /** 2K Digital Cinema at 24 fps*/
-    CINEMA2K_48 = 2,    /** 2K Digital Cinema at 48 fps*/
-    CINEMA4K_24 = 3     /** 4K Digital Cinema at 24 fps*/
-} OPJ_CINEMA_MODE;
-
-/**
-Progression order
-*/
-typedef enum PROG_ORDER {
-    PROG_UNKNOWN = -1,  /**< place-holder */
-    LRCP = 0,       /**< layer-resolution-component-precinct order */
-    RLCP = 1,       /**< resolution-layer-component-precinct order */
-    RPCL = 2,       /**< resolution-precinct-component-layer order */
-    PCRL = 3,       /**< precinct-component-resolution-layer order */
-    CPRL = 4        /**< component-precinct-resolution-layer order */
-} OPJ_PROG_ORDER;
-
-/**
-Supported image color spaces
-*/
-typedef enum COLOR_SPACE {
-    CLRSPC_UNKNOWN = -1,    /**< not supported by the library */
-    CLRSPC_UNSPECIFIED = 0, /**< not specified in the codestream */
-    CLRSPC_SRGB = 1,        /**< sRGB */
-    CLRSPC_GRAY = 2,        /**< grayscale */
-    CLRSPC_SYCC = 3         /**< YUV */
-} OPJ_COLOR_SPACE;
-
-#define ENUMCS_SRGB 16
-#define ENUMCS_GRAY 17
-#define ENUMCS_SYCC 18
-
-/**
-Supported codec
-*/
-typedef enum CODEC_FORMAT {
-    CODEC_UNKNOWN = -1, /**< place-holder */
-    CODEC_J2K  = 0,     /**< JPEG-2000 codestream : read/write */
-    CODEC_JPT  = 1,     /**< JPT-stream (JPEG 2000, JPIP) : read only */
-    CODEC_JP2  = 2      /**< JPEG-2000 file format : read/write */
-} OPJ_CODEC_FORMAT;
-
-/**
-Limit decoding to certain portions of the codestream.
-*/
-typedef enum LIMIT_DECODING {
-    NO_LIMITATION = 0,                /**< No limitation for the decoding. The entire codestream will de decoded */
-    LIMIT_TO_MAIN_HEADER = 1,       /**< The decoding is limited to the Main Header */
-    DECODE_ALL_BUT_PACKETS = 2  /**< Decode everything except the JPEG 2000 packets */
-} OPJ_LIMIT_DECODING;
-
-/*
-==========================================================
-   event manager typedef definitions
-==========================================================
-*/
-
-/**
-Callback function prototype for events
-@param msg Event message
-@param client_data
-*/
-typedef void (*opj_msg_callback)(const char *msg, void *client_data);
-
-/**
-Message handler object
-used for
-<ul>
-<li>Error messages
-<li>Warning messages
-<li>Debugging messages
-</ul>
-*/
-typedef struct opj_event_mgr {
-    /** Error message callback if available, NULL otherwise */
-    opj_msg_callback error_handler;
-    /** Warning message callback if available, NULL otherwise */
-    opj_msg_callback warning_handler;
-    /** Debug message callback if available, NULL otherwise */
-    opj_msg_callback info_handler;
-} opj_event_mgr_t;
-
-
-/*
-==========================================================
-   codec typedef definitions
-==========================================================
-*/
-
-/**
-Progression order changes
-*/
-typedef struct opj_poc {
-    /** Resolution num start, Component num start, given by POC */
-    int resno0, compno0;
-    /** Layer num end,Resolution num end, Component num end, given by POC */
-    int layno1, resno1, compno1;
-    /** Layer num start,Precinct num start, Precinct num end */
-    int layno0, precno0, precno1;
-    /** Progression order enum*/
-    OPJ_PROG_ORDER prg1, prg;
-    /** Progression order string*/
-    char progorder[5];
-    /** Tile number */
-    int tile;
-    /** Start and end values for Tile width and height*/
-    int tx0, tx1, ty0, ty1;
-    /** Start value, initialised in pi_initialise_encode*/
-    int layS, resS, compS, prcS;
-    /** End value, initialised in pi_initialise_encode */
-    int layE, resE, compE, prcE;
-    /** Start and end values of Tile width and height, initialised in pi_initialise_encode*/
-    int txS, txE, tyS, tyE, dx, dy;
-    /** Temporary values for Tile parts, initialised in pi_create_encode */
-    int lay_t, res_t, comp_t, prc_t, tx0_t, ty0_t;
-} opj_poc_t;
-
-/**
-Compression parameters
-*/
-typedef struct opj_cparameters {
-    /** size of tile: tile_size_on = false (not in argument) or = true (in argument) */
-    opj_bool tile_size_on;
-    /** XTOsiz */
-    int cp_tx0;
-    /** YTOsiz */
-    int cp_ty0;
-    /** XTsiz */
-    int cp_tdx;
-    /** YTsiz */
-    int cp_tdy;
-    /** allocation by rate/distortion */
-    int cp_disto_alloc;
-    /** allocation by fixed layer */
-    int cp_fixed_alloc;
-    /** add fixed_quality */
-    int cp_fixed_quality;
-    /** fixed layer */
-    int *cp_matrice;
-    /** comment for coding */
-    char *cp_comment;
-    /** csty : coding style */
-    int csty;
-    /** progression order (default LRCP) */
-    OPJ_PROG_ORDER prog_order;
-    /** progression order changes */
-    opj_poc_t POC[32];
-    /** number of progression order changes (POC), default to 0 */
-    int numpocs;
-    /** number of layers */
-    int tcp_numlayers;
-    /** rates of layers */
-    float tcp_rates[100];
-    /** different psnr for successive layers */
-    float tcp_distoratio[100];
-    /** number of resolutions */
-    int numresolution;
-    /** initial code block width, default to 64 */
-    int cblockw_init;
-    /** initial code block height, default to 64 */
-    int cblockh_init;
-    /** mode switch (cblk_style) */
-    int mode;
-    /** 1 : use the irreversible DWT 9-7, 0 : use lossless compression (default) */
-    int irreversible;
-    /** region of interest: affected component in [0..3], -1 means no ROI */
-    int roi_compno;
-    /** region of interest: upshift value */
-    int roi_shift;
-    /* number of precinct size specifications */
-    int res_spec;
-    /** initial precinct width */
-    int prcw_init[J2K_MAXRLVLS];
-    /** initial precinct height */
-    int prch_init[J2K_MAXRLVLS];
-
-    /**@name command line encoder parameters (not used inside the library) */
-    /*@{*/
-    /** input file name */
-    char infile[OPJ_PATH_LEN];
-    /** output file name */
-    char outfile[OPJ_PATH_LEN];
-    /** DEPRECATED. Index generation is now handeld with the opj_encode_with_info() function. Set to NULL */
-    int index_on;
-    /** DEPRECATED. Index generation is now handeld with the opj_encode_with_info() function. Set to NULL */
-    char index[OPJ_PATH_LEN];
-    /** subimage encoding: origin image offset in x direction */
-    int image_offset_x0;
-    /** subimage encoding: origin image offset in y direction */
-    int image_offset_y0;
-    /** subsampling value for dx */
-    int subsampling_dx;
-    /** subsampling value for dy */
-    int subsampling_dy;
-    /** input file format 0: PGX, 1: PxM, 2: BMP 3:TIF*/
-    int decod_format;
-    /** output file format 0: J2K, 1: JP2, 2: JPT */
-    int cod_format;
-    /*@}*/
-
-    /* UniPG>> */
-    /**@name JPWL encoding parameters */
-    /*@{*/
-    /** enables writing of EPC in MH, thus activating JPWL */
-    opj_bool jpwl_epc_on;
-    /** error protection method for MH (0,1,16,32,37-128) */
-    int jpwl_hprot_MH;
-    /** tile number of header protection specification (>=0) */
-    int jpwl_hprot_TPH_tileno[JPWL_MAX_NO_TILESPECS];
-    /** error protection methods for TPHs (0,1,16,32,37-128) */
-    int jpwl_hprot_TPH[JPWL_MAX_NO_TILESPECS];
-    /** tile number of packet protection specification (>=0) */
-    int jpwl_pprot_tileno[JPWL_MAX_NO_PACKSPECS];
-    /** packet number of packet protection specification (>=0) */
-    int jpwl_pprot_packno[JPWL_MAX_NO_PACKSPECS];
-    /** error protection methods for packets (0,1,16,32,37-128) */
-    int jpwl_pprot[JPWL_MAX_NO_PACKSPECS];
-    /** enables writing of ESD, (0=no/1/2 bytes) */
-    int jpwl_sens_size;
-    /** sensitivity addressing size (0=auto/2/4 bytes) */
-    int jpwl_sens_addr;
-    /** sensitivity range (0-3) */
-    int jpwl_sens_range;
-    /** sensitivity method for MH (-1=no,0-7) */
-    int jpwl_sens_MH;
-    /** tile number of sensitivity specification (>=0) */
-    int jpwl_sens_TPH_tileno[JPWL_MAX_NO_TILESPECS];
-    /** sensitivity methods for TPHs (-1=no,0-7) */
-    int jpwl_sens_TPH[JPWL_MAX_NO_TILESPECS];
-    /*@}*/
-    /* <<UniPG */
-
-    /** Digital Cinema compliance 0-not compliant, 1-compliant*/
-    OPJ_CINEMA_MODE cp_cinema;
-    /** Maximum rate for each component. If == 0, component size limitation is not considered */
-    int max_comp_size;
-    /** Profile name*/
-    OPJ_RSIZ_CAPABILITIES cp_rsiz;
-    /** Tile part generation*/
-    char tp_on;
-    /** Flag for Tile part generation*/
-    char tp_flag;
-    /** MCT (multiple component transform) */
-    char tcp_mct;
-} opj_cparameters_t;
-
-#define OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG  0x0001
-
-/**
-Decompression parameters
-*/
-typedef struct opj_dparameters {
-    /**
-    Set the number of highest resolution levels to be discarded.
-    The image resolution is effectively divided by 2 to the power of the number of discarded levels.
-    The reduce factor is limited by the smallest total number of decomposition levels among tiles.
-    if != 0, then original dimension divided by 2^(reduce);
-    if == 0 or not used, image is decoded to the full resolution
-    */
-    int cp_reduce;
-    /**
-    Set the maximum number of quality layers to decode.
-    If there are less quality layers than the specified number, all the quality layers are decoded.
-    if != 0, then only the first "layer" layers are decoded;
-    if == 0 or not used, all the quality layers are decoded
-    */
-    int cp_layer;
-
-    /**@name command line encoder parameters (not used inside the library) */
-    /*@{*/
-    /** input file name */
-    char infile[OPJ_PATH_LEN];
-    /** output file name */
-    char outfile[OPJ_PATH_LEN];
-    /** input file format 0: J2K, 1: JP2, 2: JPT */
-    int decod_format;
-    /** output file format 0: PGX, 1: PxM, 2: BMP */
-    int cod_format;
-    /*@}*/
-
-    /* UniPG>> */
-    /**@name JPWL decoding parameters */
-    /*@{*/
-    /** activates the JPWL correction capabilities */
-    opj_bool jpwl_correct;
-    /** expected number of components */
-    int jpwl_exp_comps;
-    /** maximum number of tiles */
-    int jpwl_max_tiles;
-    /*@}*/
-    /* <<UniPG */
-
-    /**
-    Specify whether the decoding should be done on the entire codestream, or be limited to the main header
-    Limiting the decoding to the main header makes it possible to extract the characteristics of the codestream
-    if == NO_LIMITATION, the entire codestream is decoded;
-    if == LIMIT_TO_MAIN_HEADER, only the main header is decoded;
-    */
-    OPJ_LIMIT_DECODING cp_limit_decoding;
-
-    unsigned int flags;
-} opj_dparameters_t;
-
-/** Common fields between JPEG-2000 compression and decompression master structs. */
-
-#define opj_common_fields \
-    opj_event_mgr_t *event_mgr; /**< pointer to the event manager */\
-    void * client_data;         /**< Available for use by application */\
-    opj_bool is_decompressor;   /**< So common code can tell which is which */\
-    OPJ_CODEC_FORMAT codec_format;  /**< selected codec */\
-    void *j2k_handle;           /**< pointer to the J2K codec */\
-    void *jp2_handle;           /**< pointer to the JP2 codec */\
-    void *mj2_handle            /**< pointer to the MJ2 codec */
-
-/* Routines that are to be used by both halves of the library are declared
- * to receive a pointer to this structure.  There are no actual instances of
- * opj_common_struct_t, only of opj_cinfo_t and opj_dinfo_t.
- */
-typedef struct opj_common_struct {
-    opj_common_fields;        /* Fields common to both master struct types */
-    /* Additional fields follow in an actual opj_cinfo_t or
-     * opj_dinfo_t.  All three structs must agree on these
-     * initial fields!  (This would be a lot cleaner in C++.)
-     */
-} opj_common_struct_t;
-
-typedef opj_common_struct_t * opj_common_ptr;
-
-/**
-Compression context info
-*/
-typedef struct opj_cinfo {
-    /** Fields shared with opj_dinfo_t */
-    opj_common_fields;
-    /* other specific fields go here */
-} opj_cinfo_t;
-
-/**
-Decompression context info
-*/
-typedef struct opj_dinfo {
-    /** Fields shared with opj_cinfo_t */
-    opj_common_fields;
-    /* other specific fields go here */
-} opj_dinfo_t;
-
-/*
-==========================================================
-   I/O stream typedef definitions
-==========================================================
-*/
-
-/*
- * Stream open flags.
- */
-/** The stream was opened for reading. */
-#define OPJ_STREAM_READ 0x0001
-/** The stream was opened for writing. */
-#define OPJ_STREAM_WRITE 0x0002
-
-/**
-Byte input-output stream (CIO)
-*/
-typedef struct opj_cio {
-    /** codec context */
-    opj_common_ptr cinfo;
-
-    /** open mode (read/write) either OPJ_STREAM_READ or OPJ_STREAM_WRITE */
-    int openmode;
-    /** pointer to the start of the buffer */
-    unsigned char *buffer;
-    /** buffer size in bytes */
-    int length;
-
-    /** pointer to the start of the stream */
-    unsigned char *start;
-    /** pointer to the end of the stream */
-    unsigned char *end;
-    /** pointer to the current position */
-    unsigned char *bp;
-} opj_cio_t;
-
-/*
-==========================================================
-   image typedef definitions
-==========================================================
-*/
-
-/**
-Defines a single image component
-*/
-typedef struct opj_image_comp {
-    /** XRsiz: horizontal separation of a sample of ith component with respect to the reference grid */
-    int dx;
-    /** YRsiz: vertical separation of a sample of ith component with respect to the reference grid */
-    int dy;
-    /** data width */
-    int w;
-    /** data height */
-    int h;
-    /** x component offset compared to the whole image */
-    int x0;
-    /** y component offset compared to the whole image */
-    int y0;
-    /** precision */
-    int prec;
-    /** image depth in bits */
-    int bpp;
-    /** signed (1) / unsigned (0) */
-    int sgnd;
-    /** number of decoded resolution */
-    int resno_decoded;
-    /** number of division by 2 of the out image compared to the original size of image */
-    int factor;
-    /** image component data */
-    int *data;
-} opj_image_comp_t;
-
-/**
-Defines image data and characteristics
-*/
-typedef struct opj_image {
-    /** XOsiz: horizontal offset from the origin of the reference grid to the left side of the image area */
-    int x0;
-    /** YOsiz: vertical offset from the origin of the reference grid to the top side of the image area */
-    int y0;
-    /** Xsiz: width of the reference grid */
-    int x1;
-    /** Ysiz: height of the reference grid */
-    int y1;
-    /** number of components in the image */
-    int numcomps;
-    /** color space: sRGB, Greyscale or YUV */
-    OPJ_COLOR_SPACE color_space;
-    /** image components */
-    opj_image_comp_t *comps;
-    /** 'restricted' ICC profile */
-    unsigned char *icc_profile_buf;
-    /** size of ICC profile */
-    int icc_profile_len;
-} opj_image_t;
-
-/**
-Component parameters structure used by the opj_image_create function
-*/
-typedef struct opj_image_comptparm {
-    /** XRsiz: horizontal separation of a sample of ith component with respect to the reference grid */
-    int dx;
-    /** YRsiz: vertical separation of a sample of ith component with respect to the reference grid */
-    int dy;
-    /** data width */
-    int w;
-    /** data height */
-    int h;
-    /** x component offset compared to the whole image */
-    int x0;
-    /** y component offset compared to the whole image */
-    int y0;
-    /** precision */
-    int prec;
-    /** image depth in bits */
-    int bpp;
-    /** signed (1) / unsigned (0) */
-    int sgnd;
-} opj_image_cmptparm_t;
-
-/*
-==========================================================
-   Information on the JPEG 2000 codestream
-==========================================================
-*/
-
-/**
-Index structure : Information concerning a packet inside tile
-*/
-typedef struct opj_packet_info {
-    /** packet start position (including SOP marker if it exists) */
-    int start_pos;
-    /** end of packet header position (including EPH marker if it exists)*/
-    int end_ph_pos;
-    /** packet end position */
-    int end_pos;
-    /** packet distorsion */
-    double disto;
-} opj_packet_info_t;
-
-
-/* UniPG>> */
-/**
-Marker structure
-*/
-typedef struct opj_marker_info_t {
-    /** marker type */
-    unsigned short int type;
-    /** position in codestream */
-    int pos;
-    /** length, marker val included */
-    int len;
-} opj_marker_info_t;
-/* <<UniPG */
-
-/**
-Index structure : Information concerning tile-parts
-*/
-typedef struct opj_tp_info {
-    /** start position of tile part */
-    int tp_start_pos;
-    /** end position of tile part header */
-    int tp_end_header;
-    /** end position of tile part */
-    int tp_end_pos;
-    /** start packet of tile part */
-    int tp_start_pack;
-    /** number of packets of tile part */
-    int tp_numpacks;
-} opj_tp_info_t;
-
-/**
-Index structure : information regarding tiles
-*/
-typedef struct opj_tile_info {
-    /** value of thresh for each layer by tile cfr. Marcela   */
-    double *thresh;
-    /** number of tile */
-    int tileno;
-    /** start position */
-    int start_pos;
-    /** end position of the header */
-    int end_header;
-    /** end position */
-    int end_pos;
-    /** precinct number for each resolution level (width) */
-    int pw[33];
-    /** precinct number for each resolution level (height) */
-    int ph[33];
-    /** precinct size (in power of 2), in X for each resolution level */
-    int pdx[33];
-    /** precinct size (in power of 2), in Y for each resolution level */
-    int pdy[33];
-    /** information concerning packets inside tile */
-    opj_packet_info_t *packet;
-    /** add fixed_quality */
-    int numpix;
-    /** add fixed_quality */
-    double distotile;
-    /** number of markers */
-    int marknum;
-    /** list of markers */
-    opj_marker_info_t *marker;
-    /** actual size of markers array */
-    int maxmarknum;
-    /** number of tile parts */
-    int num_tps;
-    /** information concerning tile parts */
-    opj_tp_info_t *tp;
-} opj_tile_info_t;
-
-/**
-Index structure of the codestream
-*/
-typedef struct opj_codestream_info {
-    /** maximum distortion reduction on the whole image (add for Marcela) */
-    double D_max;
-    /** packet number */
-    int packno;
-    /** writing the packet in the index with t2_encode_packets */
-    int index_write;
-    /** image width */
-    int image_w;
-    /** image height */
-    int image_h;
-    /** progression order */
-    OPJ_PROG_ORDER prog;
-    /** tile size in x */
-    int tile_x;
-    /** tile size in y */
-    int tile_y;
-    /** */
-    int tile_Ox;
-    /** */
-    int tile_Oy;
-    /** number of tiles in X */
-    int tw;
-    /** number of tiles in Y */
-    int th;
-    /** component numbers */
-    int numcomps;
-    /** number of layer */
-    int numlayers;
-    /** number of decomposition for each component */
-    int *numdecompos;
-    /* UniPG>> */
-    /** number of markers */
-    int marknum;
-    /** list of markers */
-    opj_marker_info_t *marker;
-    /** actual size of markers array */
-    int maxmarknum;
-    /* <<UniPG */
-    /** main header position */
-    int main_head_start;
-    /** main header position */
-    int main_head_end;
-    /** codestream's size */
-    int codestream_size;
-    /** information regarding tiles inside image */
-    opj_tile_info_t *tile;
-} opj_codestream_info_t;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/*
-==========================================================
-   openjpeg version
-==========================================================
-*/
-
-OPJ_API const char * OPJ_CALLCONV opj_version(void);
-
-/*
-==========================================================
-   image functions definitions
-==========================================================
-*/
-
-/**
-Create an image
-@param numcmpts number of components
-@param cmptparms components parameters
-@param clrspc image color space
-@return returns a new image structure if successful, returns NULL otherwise
-*/
-OPJ_API opj_image_t* OPJ_CALLCONV opj_image_create(int numcmpts,
-        opj_image_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc);
-
-/**
-Deallocate any resources associated with an image
-@param image image to be destroyed
-*/
-OPJ_API void OPJ_CALLCONV opj_image_destroy(opj_image_t *image);
-
-/**
- * Allocator for opj_image_t->comps[].data
- * To be paired with opj_image_data_free.
- *
- * @param   size    number of bytes to allocate
- *
- * @return  a new pointer if successful, NULL otherwise.
- * @since 2.2.0
-*/
-OPJ_API void* OPJ_CALLCONV opj_image_data_alloc(size_t size);
-
-/**
- * Destructor for opj_image_t->comps[].data
- * To be paired with opj_image_data_alloc.
- *
- * @param   ptr    Pointer to free
- *
- * @since 2.2.0
-*/
-OPJ_API void OPJ_CALLCONV opj_image_data_free(void* ptr);
-
-/*
-==========================================================
-   stream functions definitions
-==========================================================
-*/
-
-/**
-Open and allocate a memory stream for read / write.
-On reading, the user must provide a buffer containing encoded data. The buffer will be
-wrapped by the returned CIO handle.
-On writing, buffer parameters must be set to 0: a buffer will be allocated by the library
-to contain encoded data.
-@param cinfo Codec context info
-@param buffer Reading: buffer address. Writing: NULL
-@param length Reading: buffer length. Writing: 0
-@return Returns a CIO handle if successful, returns NULL otherwise
-*/
-OPJ_API opj_cio_t* OPJ_CALLCONV opj_cio_open(opj_common_ptr cinfo,
-        unsigned char *buffer, int length);
-
-/**
-Close and free a CIO handle
-@param cio CIO handle to free
-*/
-OPJ_API void OPJ_CALLCONV opj_cio_close(opj_cio_t *cio);
-
-/**
-Get position in byte stream
-@param cio CIO handle
-@return Returns the position in bytes
-*/
-OPJ_API int OPJ_CALLCONV cio_tell(opj_cio_t *cio);
-/**
-Set position in byte stream
-@param cio CIO handle
-@param pos Position, in number of bytes, from the beginning of the stream
-*/
-OPJ_API void OPJ_CALLCONV cio_seek(opj_cio_t *cio, int pos);
-
-/*
-==========================================================
-   event manager functions definitions
-==========================================================
-*/
-
-OPJ_API opj_event_mgr_t* OPJ_CALLCONV opj_set_event_mgr(opj_common_ptr cinfo,
-        opj_event_mgr_t *event_mgr, void *context);
-
-/*
-==========================================================
-   codec functions definitions
-==========================================================
-*/
-/**
-Creates a J2K/JPT/JP2 decompression structure
-@param format Decoder to select
-@return Returns a handle to a decompressor if successful, returns NULL otherwise
-*/
-OPJ_API opj_dinfo_t* OPJ_CALLCONV opj_create_decompress(
-    OPJ_CODEC_FORMAT format);
-/**
-Destroy a decompressor handle
-@param dinfo decompressor handle to destroy
-*/
-OPJ_API void OPJ_CALLCONV opj_destroy_decompress(opj_dinfo_t *dinfo);
-/**
-Set decoding parameters to default values
-@param parameters Decompression parameters
-*/
-OPJ_API void OPJ_CALLCONV opj_set_default_decoder_parameters(
-    opj_dparameters_t *parameters);
-/**
-Setup the decoder decoding parameters using user parameters.
-Decoding parameters are returned in j2k->cp.
-@param dinfo decompressor handle
-@param parameters decompression parameters
-*/
-OPJ_API void OPJ_CALLCONV opj_setup_decoder(opj_dinfo_t *dinfo,
-        opj_dparameters_t *parameters);
-/**
-Decode an image from a JPEG-2000 codestream
-@param dinfo decompressor handle
-@param cio Input buffer stream
-@return Returns a decoded image if successful, returns NULL otherwise
-*/
-OPJ_API opj_image_t* OPJ_CALLCONV opj_decode(opj_dinfo_t *dinfo,
-        opj_cio_t *cio);
-
-/**
-Decode an image from a JPEG-2000 codestream and extract the codestream information
-@param dinfo decompressor handle
-@param cio Input buffer stream
-@param cstr_info Codestream information structure if needed afterwards, NULL otherwise
-@return Returns a decoded image if successful, returns NULL otherwise
-*/
-OPJ_API opj_image_t* OPJ_CALLCONV opj_decode_with_info(opj_dinfo_t *dinfo,
-        opj_cio_t *cio, opj_codestream_info_t *cstr_info);
-/**
-Creates a J2K/JP2 compression structure
-@param format Coder to select
-@return Returns a handle to a compressor if successful, returns NULL otherwise
-*/
-OPJ_API opj_cinfo_t* OPJ_CALLCONV opj_create_compress(OPJ_CODEC_FORMAT format);
-/**
-Destroy a compressor handle
-@param cinfo compressor handle to destroy
-*/
-OPJ_API void OPJ_CALLCONV opj_destroy_compress(opj_cinfo_t *cinfo);
-/**
-Set encoding parameters to default values, that means :
-<ul>
-<li>Lossless
-<li>1 tile
-<li>Size of precinct : 2^15 x 2^15 (means 1 precinct)
-<li>Size of code-block : 64 x 64
-<li>Number of resolutions: 6
-<li>No SOP marker in the codestream
-<li>No EPH marker in the codestream
-<li>No sub-sampling in x or y direction
-<li>No mode switch activated
-<li>Progression order: LRCP
-<li>No index file
-<li>No ROI upshifted
-<li>No offset of the origin of the image
-<li>No offset of the origin of the tiles
-<li>Reversible DWT 5-3
-</ul>
-@param parameters Compression parameters
-*/
-OPJ_API void OPJ_CALLCONV opj_set_default_encoder_parameters(
-    opj_cparameters_t *parameters);
-/**
-Setup the encoder parameters using the current image and using user parameters.
-@param cinfo Compressor handle
-@param parameters Compression parameters
-@param image Input filled image
-*/
-OPJ_API void OPJ_CALLCONV opj_setup_encoder(opj_cinfo_t *cinfo,
-        opj_cparameters_t *parameters, opj_image_t *image);
-/**
-Encode an image into a JPEG-2000 codestream
-3@param cinfo compressor handle
-@param cio Output buffer stream
-@param image Image to encode
-@param index Deprecated -> Set to NULL. To extract index, used opj_encode_wci()
-@return Returns true if successful, returns false otherwise
-*/
-OPJ_API opj_bool OPJ_CALLCONV opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio,
-        opj_image_t *image, char *index);
-/**
-Encode an image into a JPEG-2000 codestream and extract the codestream information
-@param cinfo compressor handle
-@param cio Output buffer stream
-@param image Image to encode
-@param cstr_info Codestream information structure if needed afterwards, NULL otherwise
-@return Returns true if successful, returns false otherwise
-*/
-OPJ_API opj_bool OPJ_CALLCONV opj_encode_with_info(opj_cinfo_t *cinfo,
-        opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info);
-/**
-Destroy Codestream information after compression or decompression
-@param cstr_info Codestream information structure
-*/
-OPJ_API void OPJ_CALLCONV opj_destroy_cstr_info(opj_codestream_info_t
-        *cstr_info);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* OPENJPEG_H */
diff --git a/src/lib/openmj2/opj_includes.h b/src/lib/openmj2/opj_includes.h
deleted file mode 100644 (file)
index 340e8a9..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef OPJ_INCLUDES_H
-#define OPJ_INCLUDES_H
-
-/*
- ==========================================================
-   Standard includes used by the library
- ==========================================================
-*/
-#include <memory.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <float.h>
-#include <time.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <ctype.h>
-
-/*
- ==========================================================
-   OpenJPEG interface
- ==========================================================
- */
-#include "openjpeg.h"
-
-/*
- ==========================================================
-   OpenJPEG modules
- ==========================================================
-*/
-
-/* Ignore GCC attributes if this is not GCC */
-#ifndef __GNUC__
-#define __attribute__(x) /* __attribute__(x) */
-#endif
-
-/*
-The inline keyword is supported by C99 but not by C90.
-Most compilers implement their own version of this keyword ...
-*/
-#ifndef INLINE
-#if defined(_MSC_VER)
-#define INLINE __forceinline
-#elif defined(__GNUC__)
-#define INLINE __inline__
-#elif defined(__MWERKS__)
-#define INLINE inline
-#else
-/* add other compilers here ... */
-#define INLINE
-#endif /* defined(<Compiler>) */
-#endif /* INLINE */
-
-/* Are restricted pointers available? (C99) */
-#if (__STDC_VERSION__ != 199901L)
-/* Not a C99 compiler */
-#ifdef __GNUC__
-#define restrict __restrict__
-#else
-#define restrict /* restrict */
-#endif
-#endif
-
-/* 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;
-
-    _asm{
-        fld f
-        fistp i
-    };
-
-    return i;
-#endif
-}
-#endif
-
-#include "j2k_lib.h"
-#include "opj_malloc.h"
-#include "event.h"
-#include "bio.h"
-#include "cio.h"
-
-#include "image.h"
-#include "j2k.h"
-#include "jp2.h"
-#include "jpt.h"
-
-#include "mqc.h"
-#include "raw.h"
-#include "bio.h"
-#include "tgt.h"
-#include "pi.h"
-#include "tcd.h"
-#include "t1.h"
-#include "dwt.h"
-#include "t2.h"
-#include "mct.h"
-#include "int.h"
-#include "fix.h"
-
-/* JPWL>> */
-#ifdef USE_JPWL
-#include "jpwl.h"
-#endif /* USE_JPWL */
-/* <<JPWL */
-
-#endif /* OPJ_INCLUDES_H */
diff --git a/src/lib/openmj2/opj_malloc.h b/src/lib/openmj2/opj_malloc.h
deleted file mode 100644 (file)
index 5149a65..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2007, Callum Lerwick <seg@haxxed.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef __OPJ_MALLOC_H
-#define __OPJ_MALLOC_H
-/**
-@file opj_malloc.h
-@brief Internal functions
-
-The functions in opj_malloc.h are internal utilities used for memory management.
-*/
-
-/** @defgroup MISC MISC - Miscellaneous internal functions */
-/*@{*/
-
-/** @name Exported functions */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-
-/**
-Allocate an uninitialized memory block
-@param size Bytes to allocate
-@return Returns a void pointer to the allocated space, or NULL if there is insufficient memory available
-*/
-#ifdef ALLOC_PERF_OPT
-void * OPJ_CALLCONV opj_malloc(size_t size);
-#else
-#define opj_malloc(size) malloc(size)
-#endif
-
-/**
-Allocate a memory block with elements initialized to 0
-@param num Blocks to allocate
-@param size Bytes per block to allocate
-@return Returns a void pointer to the allocated space, or NULL if there is insufficient memory available
-*/
-#ifdef ALLOC_PERF_OPT
-void * OPJ_CALLCONV opj_calloc(size_t _NumOfElements, size_t _SizeOfElements);
-#else
-#define opj_calloc(num, size) calloc(num, size)
-#endif
-
-/**
-Allocate memory aligned to a 16 byte boundary
-@param size Bytes to allocate
-@return Returns a void pointer to the allocated space, or NULL if there is insufficient memory available
-*/
-/* FIXME: These should be set with cmake tests, but we're currently not requiring use of cmake */
-#ifdef _WIN32
-/* Someone should tell the mingw people that their malloc.h ought to provide _mm_malloc() */
-#ifdef __GNUC__
-#include <mm_malloc.h>
-#define HAVE_MM_MALLOC
-#else /* MSVC, Intel C++ */
-#include <malloc.h>
-#ifdef _mm_malloc
-#define HAVE_MM_MALLOC
-#endif
-#endif
-#else /* Not _WIN32 */
-#if defined(__sun)
-#define HAVE_MEMALIGN
-#elif defined(__FreeBSD__)
-#define HAVE_POSIX_MEMALIGN
-/* Linux x86_64 and OSX always align allocations to 16 bytes */
-#elif !defined(__amd64__) && !defined(__APPLE__) && !defined(_AIX)
-#define HAVE_MEMALIGN
-#include <malloc.h>
-#endif
-#endif
-
-#define opj_aligned_malloc(size) malloc(size)
-#define opj_aligned_free(m) free(m)
-
-#ifdef HAVE_MM_MALLOC
-#undef opj_aligned_malloc
-#define opj_aligned_malloc(size) _mm_malloc(size, 16)
-#undef opj_aligned_free
-#define opj_aligned_free(m) _mm_free(m)
-#endif
-
-#ifdef HAVE_MEMALIGN
-extern void* memalign(size_t, size_t);
-#undef opj_aligned_malloc
-#define opj_aligned_malloc(size) memalign(16, (size))
-#undef opj_aligned_free
-#define opj_aligned_free(m) free(m)
-#endif
-
-#ifdef HAVE_POSIX_MEMALIGN
-#undef opj_aligned_malloc
-extern int posix_memalign(void**, size_t, size_t);
-
-static INLINE void* __attribute__((malloc)) opj_aligned_malloc(size_t size)
-{
-    void* mem = NULL;
-    posix_memalign(&mem, 16, size);
-    return mem;
-}
-#undef opj_aligned_free
-#define opj_aligned_free(m) free(m)
-#endif
-
-#ifdef ALLOC_PERF_OPT
-#undef opj_aligned_malloc
-#define opj_aligned_malloc(size) opj_malloc(size)
-#undef opj_aligned_free
-#define opj_aligned_free(m) opj_free(m)
-#endif
-
-/**
-Reallocate memory blocks.
-@param m Pointer to previously allocated memory block
-@param s New size in bytes
-@return Returns a void pointer to the reallocated (and possibly moved) memory block
-*/
-#ifdef ALLOC_PERF_OPT
-void * OPJ_CALLCONV opj_realloc(void * m, size_t s);
-#else
-#define opj_realloc(m, s) realloc(m, s)
-#endif
-
-/**
-Deallocates or frees a memory block.
-@param m Previously allocated memory block to be freed
-*/
-#ifdef ALLOC_PERF_OPT
-void OPJ_CALLCONV opj_free(void * m);
-#else
-#define opj_free(m) free(m)
-#endif
-
-#ifdef __GNUC__
-#pragma GCC poison malloc calloc realloc free
-#endif
-
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif /* __OPJ_MALLOC_H */
-
diff --git a/src/lib/openmj2/pi.c b/src/lib/openmj2/pi.c
deleted file mode 100644 (file)
index ce9c16e..0000000
+++ /dev/null
@@ -1,1056 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2006-2007, Parvatha Elangovan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "opj_includes.h"
-
-/** @defgroup PI PI - Implementation of a packet iterator */
-/*@{*/
-
-/** @name Local static functions */
-/*@{*/
-
-/**
-Get next packet in layer-resolution-component-precinct order.
-@param pi packet iterator to modify
-@return returns false if pi pointed to the last packet or else returns true
-*/
-static opj_bool pi_next_lrcp(opj_pi_iterator_t * pi);
-/**
-Get next packet in resolution-layer-component-precinct order.
-@param pi packet iterator to modify
-@return returns false if pi pointed to the last packet or else returns true
-*/
-static opj_bool pi_next_rlcp(opj_pi_iterator_t * pi);
-/**
-Get next packet in resolution-precinct-component-layer order.
-@param pi packet iterator to modify
-@return returns false if pi pointed to the last packet or else returns true
-*/
-static opj_bool pi_next_rpcl(opj_pi_iterator_t * pi);
-/**
-Get next packet in precinct-component-resolution-layer order.
-@param pi packet iterator to modify
-@return returns false if pi pointed to the last packet or else returns true
-*/
-static opj_bool pi_next_pcrl(opj_pi_iterator_t * pi);
-/**
-Get next packet in component-precinct-resolution-layer order.
-@param pi packet iterator to modify
-@return returns false if pi pointed to the last packet or else returns true
-*/
-static opj_bool pi_next_cprl(opj_pi_iterator_t * pi);
-
-/*@}*/
-
-/*@}*/
-
-/*
-==========================================================
-   local functions
-==========================================================
-*/
-
-static opj_bool pi_next_lrcp(opj_pi_iterator_t * pi)
-{
-    opj_pi_comp_t *comp = NULL;
-    opj_pi_resolution_t *res = NULL;
-    long index = 0;
-
-    if (!pi->first) {
-        comp = &pi->comps[pi->compno];
-        res = &comp->resolutions[pi->resno];
-        goto LABEL_SKIP;
-    } else {
-        pi->first = 0;
-    }
-
-    for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) {
-        for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1;
-                pi->resno++) {
-            for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
-                comp = &pi->comps[pi->compno];
-                if (pi->resno >= comp->numresolutions) {
-                    continue;
-                }
-                res = &comp->resolutions[pi->resno];
-                if (!pi->tp_on) {
-                    pi->poc.precno1 = res->pw * res->ph;
-                }
-                for (pi->precno = pi->poc.precno0; pi->precno < pi->poc.precno1; pi->precno++) {
-                    index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno *
-                            pi->step_c + pi->precno * pi->step_p;
-                    if (!pi->include[index]) {
-                        pi->include[index] = 1;
-                        return OPJ_TRUE;
-                    }
-LABEL_SKIP:
-                    ;
-                }
-            }
-        }
-    }
-
-    return OPJ_FALSE;
-}
-
-static opj_bool pi_next_rlcp(opj_pi_iterator_t * pi)
-{
-    opj_pi_comp_t *comp = NULL;
-    opj_pi_resolution_t *res = NULL;
-    long index = 0;
-
-    if (!pi->first) {
-        comp = &pi->comps[pi->compno];
-        res = &comp->resolutions[pi->resno];
-        goto LABEL_SKIP;
-    } else {
-        pi->first = 0;
-    }
-
-    for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; pi->resno++) {
-        for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) {
-            for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
-                comp = &pi->comps[pi->compno];
-                if (pi->resno >= comp->numresolutions) {
-                    continue;
-                }
-                res = &comp->resolutions[pi->resno];
-                if (!pi->tp_on) {
-                    pi->poc.precno1 = res->pw * res->ph;
-                }
-                for (pi->precno = pi->poc.precno0; pi->precno < pi->poc.precno1; pi->precno++) {
-                    index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno *
-                            pi->step_c + pi->precno * pi->step_p;
-                    if (!pi->include[index]) {
-                        pi->include[index] = 1;
-                        return OPJ_TRUE;
-                    }
-LABEL_SKIP:
-                    ;
-                }
-            }
-        }
-    }
-
-    return OPJ_FALSE;
-}
-
-static opj_bool pi_next_rpcl(opj_pi_iterator_t * pi)
-{
-    opj_pi_comp_t *comp = NULL;
-    opj_pi_resolution_t *res = NULL;
-    long index = 0;
-
-    if (!pi->first) {
-        goto LABEL_SKIP;
-    } else {
-        int compno, resno;
-        pi->first = 0;
-        pi->dx = 0;
-        pi->dy = 0;
-        for (compno = 0; compno < pi->numcomps; compno++) {
-            comp = &pi->comps[compno];
-            for (resno = 0; resno < comp->numresolutions; resno++) {
-                int dx, dy;
-                res = &comp->resolutions[resno];
-                dx = comp->dx * (1 << (res->pdx + comp->numresolutions - 1 - resno));
-                dy = comp->dy * (1 << (res->pdy + comp->numresolutions - 1 - resno));
-                pi->dx = !pi->dx ? dx : int_min(pi->dx, dx);
-                pi->dy = !pi->dy ? dy : int_min(pi->dy, dy);
-            }
-        }
-    }
-    if (!pi->tp_on) {
-        pi->poc.ty0 = pi->ty0;
-        pi->poc.tx0 = pi->tx0;
-        pi->poc.ty1 = pi->ty1;
-        pi->poc.tx1 = pi->tx1;
-    }
-    for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; pi->resno++) {
-        for (pi->y = pi->poc.ty0; pi->y < pi->poc.ty1;
-                pi->y += pi->dy - (pi->y % pi->dy)) {
-            for (pi->x = pi->poc.tx0; pi->x < pi->poc.tx1;
-                    pi->x += pi->dx - (pi->x % pi->dx)) {
-                for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
-                    int levelno;
-                    int trx0, try0;
-                    int trx1, try1;
-                    int rpx, rpy;
-                    int prci, prcj;
-                    comp = &pi->comps[pi->compno];
-                    if (pi->resno >= comp->numresolutions) {
-                        continue;
-                    }
-                    res = &comp->resolutions[pi->resno];
-                    levelno = comp->numresolutions - 1 - pi->resno;
-                    trx0 = int_ceildiv(pi->tx0, comp->dx << levelno);
-                    try0 = int_ceildiv(pi->ty0, comp->dy << levelno);
-                    trx1 = int_ceildiv(pi->tx1, comp->dx << levelno);
-                    try1 = int_ceildiv(pi->ty1, comp->dy << levelno);
-                    rpx = res->pdx + levelno;
-                    rpy = res->pdy + levelno;
-
-                    /* To avoid divisions by zero / undefined behaviour on shift */
-                    if (rpx >= 31 || ((comp->dx << rpx) >> rpx) != comp->dx ||
-                            rpy >= 31 || ((comp->dy << rpy) >> rpy) != comp->dy) {
-                        continue;
-                    }
-
-                    if (!((pi->y % (comp->dy << rpy) == 0) || ((pi->y == pi->ty0) &&
-                            ((try0 << levelno) % (1 << rpy))))) {
-                        continue;
-                    }
-                    if (!((pi->x % (comp->dx << rpx) == 0) || ((pi->x == pi->tx0) &&
-                            ((trx0 << levelno) % (1 << rpx))))) {
-                        continue;
-                    }
-
-                    if ((res->pw == 0) || (res->ph == 0)) {
-                        continue;
-                    }
-
-                    if ((trx0 == trx1) || (try0 == try1)) {
-                        continue;
-                    }
-
-                    prci = int_floordivpow2(int_ceildiv(pi->x, comp->dx << levelno), res->pdx)
-                           - int_floordivpow2(trx0, res->pdx);
-                    prcj = int_floordivpow2(int_ceildiv(pi->y, comp->dy << levelno), res->pdy)
-                           - int_floordivpow2(try0, res->pdy);
-                    pi->precno = prci + prcj * res->pw;
-                    for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) {
-                        index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno *
-                                pi->step_c + pi->precno * pi->step_p;
-                        if (!pi->include[index]) {
-                            pi->include[index] = 1;
-                            return OPJ_TRUE;
-                        }
-LABEL_SKIP:
-                        ;
-                    }
-                }
-            }
-        }
-    }
-
-    return OPJ_FALSE;
-}
-
-static opj_bool pi_next_pcrl(opj_pi_iterator_t * pi)
-{
-    opj_pi_comp_t *comp = NULL;
-    opj_pi_resolution_t *res = NULL;
-    long index = 0;
-
-    if (!pi->first) {
-        comp = &pi->comps[pi->compno];
-        goto LABEL_SKIP;
-    } else {
-        int compno, resno;
-        pi->first = 0;
-        pi->dx = 0;
-        pi->dy = 0;
-        for (compno = 0; compno < pi->numcomps; compno++) {
-            comp = &pi->comps[compno];
-            for (resno = 0; resno < comp->numresolutions; resno++) {
-                int dx, dy;
-                res = &comp->resolutions[resno];
-                dx = comp->dx * (1 << (res->pdx + comp->numresolutions - 1 - resno));
-                dy = comp->dy * (1 << (res->pdy + comp->numresolutions - 1 - resno));
-                pi->dx = !pi->dx ? dx : int_min(pi->dx, dx);
-                pi->dy = !pi->dy ? dy : int_min(pi->dy, dy);
-            }
-        }
-    }
-    if (!pi->tp_on) {
-        pi->poc.ty0 = pi->ty0;
-        pi->poc.tx0 = pi->tx0;
-        pi->poc.ty1 = pi->ty1;
-        pi->poc.tx1 = pi->tx1;
-    }
-    for (pi->y = pi->poc.ty0; pi->y < pi->poc.ty1;
-            pi->y += pi->dy - (pi->y % pi->dy)) {
-        for (pi->x = pi->poc.tx0; pi->x < pi->poc.tx1;
-                pi->x += pi->dx - (pi->x % pi->dx)) {
-            for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
-                comp = &pi->comps[pi->compno];
-                for (pi->resno = pi->poc.resno0;
-                        pi->resno < int_min(pi->poc.resno1, comp->numresolutions); pi->resno++) {
-                    int levelno;
-                    int trx0, try0;
-                    int trx1, try1;
-                    int rpx, rpy;
-                    int prci, prcj;
-                    res = &comp->resolutions[pi->resno];
-                    levelno = comp->numresolutions - 1 - pi->resno;
-                    trx0 = int_ceildiv(pi->tx0, comp->dx << levelno);
-                    try0 = int_ceildiv(pi->ty0, comp->dy << levelno);
-                    trx1 = int_ceildiv(pi->tx1, comp->dx << levelno);
-                    try1 = int_ceildiv(pi->ty1, comp->dy << levelno);
-                    rpx = res->pdx + levelno;
-                    rpy = res->pdy + levelno;
-
-                    /* To avoid divisions by zero / undefined behaviour on shift */
-                    if (rpx >= 31 || ((comp->dx << rpx) >> rpx) != comp->dx ||
-                            rpy >= 31 || ((comp->dy << rpy) >> rpy) != comp->dy) {
-                        continue;
-                    }
-
-                    if (!((pi->y % (comp->dy << rpy) == 0) || ((pi->y == pi->ty0) &&
-                            ((try0 << levelno) % (1 << rpy))))) {
-                        continue;
-                    }
-                    if (!((pi->x % (comp->dx << rpx) == 0) || ((pi->x == pi->tx0) &&
-                            ((trx0 << levelno) % (1 << rpx))))) {
-                        continue;
-                    }
-
-                    if ((res->pw == 0) || (res->ph == 0)) {
-                        continue;
-                    }
-
-                    if ((trx0 == trx1) || (try0 == try1)) {
-                        continue;
-                    }
-
-                    prci = int_floordivpow2(int_ceildiv(pi->x, comp->dx << levelno), res->pdx)
-                           - int_floordivpow2(trx0, res->pdx);
-                    prcj = int_floordivpow2(int_ceildiv(pi->y, comp->dy << levelno), res->pdy)
-                           - int_floordivpow2(try0, res->pdy);
-                    pi->precno = prci + prcj * res->pw;
-                    for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) {
-                        index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno *
-                                pi->step_c + pi->precno * pi->step_p;
-                        if (!pi->include[index]) {
-                            pi->include[index] = 1;
-                            return OPJ_TRUE;
-                        }
-LABEL_SKIP:
-                        ;
-                    }
-                }
-            }
-        }
-    }
-
-    return OPJ_FALSE;
-}
-
-static opj_bool pi_next_cprl(opj_pi_iterator_t * pi)
-{
-    opj_pi_comp_t *comp = NULL;
-    opj_pi_resolution_t *res = NULL;
-    long index = 0;
-
-    if (!pi->first) {
-        comp = &pi->comps[pi->compno];
-        goto LABEL_SKIP;
-    } else {
-        pi->first = 0;
-    }
-
-    for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
-        int resno;
-        comp = &pi->comps[pi->compno];
-        pi->dx = 0;
-        pi->dy = 0;
-        for (resno = 0; resno < comp->numresolutions; resno++) {
-            int dx, dy;
-            res = &comp->resolutions[resno];
-            dx = comp->dx * (1 << (res->pdx + comp->numresolutions - 1 - resno));
-            dy = comp->dy * (1 << (res->pdy + comp->numresolutions - 1 - resno));
-            pi->dx = !pi->dx ? dx : int_min(pi->dx, dx);
-            pi->dy = !pi->dy ? dy : int_min(pi->dy, dy);
-        }
-        if (!pi->tp_on) {
-            pi->poc.ty0 = pi->ty0;
-            pi->poc.tx0 = pi->tx0;
-            pi->poc.ty1 = pi->ty1;
-            pi->poc.tx1 = pi->tx1;
-        }
-        for (pi->y = pi->poc.ty0; pi->y < pi->poc.ty1;
-                pi->y += pi->dy - (pi->y % pi->dy)) {
-            for (pi->x = pi->poc.tx0; pi->x < pi->poc.tx1;
-                    pi->x += pi->dx - (pi->x % pi->dx)) {
-                for (pi->resno = pi->poc.resno0;
-                        pi->resno < int_min(pi->poc.resno1, comp->numresolutions); pi->resno++) {
-                    int levelno;
-                    int trx0, try0;
-                    int trx1, try1;
-                    int rpx, rpy;
-                    int prci, prcj;
-                    res = &comp->resolutions[pi->resno];
-                    levelno = comp->numresolutions - 1 - pi->resno;
-                    trx0 = int_ceildiv(pi->tx0, comp->dx << levelno);
-                    try0 = int_ceildiv(pi->ty0, comp->dy << levelno);
-                    trx1 = int_ceildiv(pi->tx1, comp->dx << levelno);
-                    try1 = int_ceildiv(pi->ty1, comp->dy << levelno);
-                    rpx = res->pdx + levelno;
-                    rpy = res->pdy + levelno;
-
-                    /* To avoid divisions by zero / undefined behaviour on shift */
-                    if (rpx >= 31 || ((comp->dx << rpx) >> rpx) != comp->dx ||
-                            rpy >= 31 || ((comp->dy << rpy) >> rpy) != comp->dy) {
-                        continue;
-                    }
-
-                    if (!((pi->y % (comp->dy << rpy) == 0) || ((pi->y == pi->ty0) &&
-                            ((try0 << levelno) % (1 << rpy))))) {
-                        continue;
-                    }
-                    if (!((pi->x % (comp->dx << rpx) == 0) || ((pi->x == pi->tx0) &&
-                            ((trx0 << levelno) % (1 << rpx))))) {
-                        continue;
-                    }
-
-                    if ((res->pw == 0) || (res->ph == 0)) {
-                        continue;
-                    }
-
-                    if ((trx0 == trx1) || (try0 == try1)) {
-                        continue;
-                    }
-
-                    prci = int_floordivpow2(int_ceildiv(pi->x, comp->dx << levelno), res->pdx)
-                           - int_floordivpow2(trx0, res->pdx);
-                    prcj = int_floordivpow2(int_ceildiv(pi->y, comp->dy << levelno), res->pdy)
-                           - int_floordivpow2(try0, res->pdy);
-                    pi->precno = prci + prcj * res->pw;
-                    for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) {
-                        index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno *
-                                pi->step_c + pi->precno * pi->step_p;
-                        if (!pi->include[index]) {
-                            pi->include[index] = 1;
-                            return OPJ_TRUE;
-                        }
-LABEL_SKIP:
-                        ;
-                    }
-                }
-            }
-        }
-    }
-
-    return OPJ_FALSE;
-}
-
-/*
-==========================================================
-   Packet iterator interface
-==========================================================
-*/
-
-opj_pi_iterator_t *pi_create_decode(opj_image_t *image, opj_cp_t *cp,
-                                    int tileno)
-{
-    int p, q;
-    int compno, resno, pino;
-    opj_pi_iterator_t *pi = NULL;
-    opj_tcp_t *tcp = NULL;
-    opj_tccp_t *tccp = NULL;
-
-    tcp = &cp->tcps[tileno];
-
-    pi = (opj_pi_iterator_t*) opj_calloc((tcp->numpocs + 1),
-                                         sizeof(opj_pi_iterator_t));
-    if (!pi) {
-        /* TODO: throw an error */
-        return NULL;
-    }
-
-    for (pino = 0; pino < tcp->numpocs + 1; pino++) {   /* change */
-        int maxres = 0;
-        int maxprec = 0;
-        p = tileno % cp->tw;
-        q = tileno / cp->tw;
-
-        pi[pino].tx0 = int_max(cp->tx0 + p * cp->tdx, image->x0);
-        pi[pino].ty0 = int_max(cp->ty0 + q * cp->tdy, image->y0);
-        pi[pino].tx1 = int_min(cp->tx0 + (p + 1) * cp->tdx, image->x1);
-        pi[pino].ty1 = int_min(cp->ty0 + (q + 1) * cp->tdy, image->y1);
-        pi[pino].numcomps = image->numcomps;
-
-        pi[pino].comps = (opj_pi_comp_t*) opj_calloc(image->numcomps,
-                         sizeof(opj_pi_comp_t));
-        if (!pi[pino].comps) {
-            /* TODO: throw an error */
-            pi_destroy(pi, cp, tileno);
-            return NULL;
-        }
-
-        for (compno = 0; compno < pi->numcomps; compno++) {
-            int tcx0, tcy0, tcx1, tcy1;
-            opj_pi_comp_t *comp = &pi[pino].comps[compno];
-            tccp = &tcp->tccps[compno];
-            comp->dx = image->comps[compno].dx;
-            comp->dy = image->comps[compno].dy;
-            comp->numresolutions = tccp->numresolutions;
-
-            comp->resolutions = (opj_pi_resolution_t*) opj_calloc(comp->numresolutions,
-                                sizeof(opj_pi_resolution_t));
-            if (!comp->resolutions) {
-                /* TODO: throw an error */
-                pi_destroy(pi, cp, tileno);
-                return NULL;
-            }
-
-            tcx0 = int_ceildiv(pi->tx0, comp->dx);
-            tcy0 = int_ceildiv(pi->ty0, comp->dy);
-            tcx1 = int_ceildiv(pi->tx1, comp->dx);
-            tcy1 = int_ceildiv(pi->ty1, comp->dy);
-            if (comp->numresolutions > maxres) {
-                maxres = comp->numresolutions;
-            }
-
-            for (resno = 0; resno < comp->numresolutions; resno++) {
-                int levelno;
-                int rx0, ry0, rx1, ry1;
-                int px0, py0, px1, py1;
-                opj_pi_resolution_t *res = &comp->resolutions[resno];
-                if (tccp->csty & J2K_CCP_CSTY_PRT) {
-                    res->pdx = tccp->prcw[resno];
-                    res->pdy = tccp->prch[resno];
-                } else {
-                    res->pdx = 15;
-                    res->pdy = 15;
-                }
-                levelno = comp->numresolutions - 1 - resno;
-                rx0 = int_ceildivpow2(tcx0, levelno);
-                ry0 = int_ceildivpow2(tcy0, levelno);
-                rx1 = int_ceildivpow2(tcx1, levelno);
-                ry1 = int_ceildivpow2(tcy1, levelno);
-                px0 = int_floordivpow2(rx0, res->pdx) << res->pdx;
-                py0 = int_floordivpow2(ry0, res->pdy) << res->pdy;
-                px1 = int_ceildivpow2(rx1, res->pdx) << res->pdx;
-                py1 = int_ceildivpow2(ry1, res->pdy) << res->pdy;
-                res->pw = (rx0 == rx1) ? 0 : ((px1 - px0) >> res->pdx);
-                res->ph = (ry0 == ry1) ? 0 : ((py1 - py0) >> res->pdy);
-
-                if (res->pw * res->ph > maxprec) {
-                    maxprec = res->pw * res->ph;
-                }
-
-            }
-        }
-
-        tccp = &tcp->tccps[0];
-        pi[pino].step_p = 1;
-        pi[pino].step_c = maxprec * pi[pino].step_p;
-        pi[pino].step_r = image->numcomps * pi[pino].step_c;
-        pi[pino].step_l = maxres * pi[pino].step_r;
-
-        if (pino == 0) {
-            pi[pino].include = (short int*) opj_calloc(image->numcomps * maxres *
-                               tcp->numlayers * maxprec, sizeof(short int));
-            if (!pi[pino].include) {
-                /* TODO: throw an error */
-                pi_destroy(pi, cp, tileno);
-                return NULL;
-            }
-        } else {
-            pi[pino].include = pi[pino - 1].include;
-        }
-
-        if (tcp->POC == 0) {
-            pi[pino].first = 1;
-            pi[pino].poc.resno0 = 0;
-            pi[pino].poc.compno0 = 0;
-            pi[pino].poc.layno1 = tcp->numlayers;
-            pi[pino].poc.resno1 = maxres;
-            pi[pino].poc.compno1 = image->numcomps;
-            pi[pino].poc.prg = tcp->prg;
-        } else {
-            pi[pino].first = 1;
-            pi[pino].poc.resno0 = tcp->pocs[pino].resno0;
-            pi[pino].poc.compno0 = tcp->pocs[pino].compno0;
-            pi[pino].poc.layno1 = tcp->pocs[pino].layno1;
-            pi[pino].poc.resno1 = tcp->pocs[pino].resno1;
-            pi[pino].poc.compno1 = tcp->pocs[pino].compno1;
-            pi[pino].poc.prg = tcp->pocs[pino].prg;
-        }
-        pi[pino].poc.layno0  = 0;
-        pi[pino].poc.precno0 = 0;
-        pi[pino].poc.precno1 = maxprec;
-
-    }
-
-    return pi;
-}
-
-
-opj_pi_iterator_t *pi_initialise_encode(opj_image_t *image, opj_cp_t *cp,
-                                        int tileno, J2K_T2_MODE t2_mode)
-{
-    int p, q, pino;
-    int compno, resno;
-    int maxres = 0;
-    int maxprec = 0;
-    opj_pi_iterator_t *pi = NULL;
-    opj_tcp_t *tcp = NULL;
-    opj_tccp_t *tccp = NULL;
-
-    tcp = &cp->tcps[tileno];
-
-    pi = (opj_pi_iterator_t*) opj_calloc((tcp->numpocs + 1),
-                                         sizeof(opj_pi_iterator_t));
-    if (!pi) {
-        return NULL;
-    }
-    pi->tp_on = cp->tp_on;
-
-    for (pino = 0; pino < tcp->numpocs + 1 ; pino ++) {
-        p = tileno % cp->tw;
-        q = tileno / cp->tw;
-
-        pi[pino].tx0 = int_max(cp->tx0 + p * cp->tdx, image->x0);
-        pi[pino].ty0 = int_max(cp->ty0 + q * cp->tdy, image->y0);
-        pi[pino].tx1 = int_min(cp->tx0 + (p + 1) * cp->tdx, image->x1);
-        pi[pino].ty1 = int_min(cp->ty0 + (q + 1) * cp->tdy, image->y1);
-        pi[pino].numcomps = image->numcomps;
-
-        pi[pino].comps = (opj_pi_comp_t*) opj_calloc(image->numcomps,
-                         sizeof(opj_pi_comp_t));
-        if (!pi[pino].comps) {
-            pi_destroy(pi, cp, tileno);
-            return NULL;
-        }
-
-        for (compno = 0; compno < pi[pino].numcomps; compno++) {
-            int tcx0, tcy0, tcx1, tcy1;
-            opj_pi_comp_t *comp = &pi[pino].comps[compno];
-            tccp = &tcp->tccps[compno];
-            comp->dx = image->comps[compno].dx;
-            comp->dy = image->comps[compno].dy;
-            comp->numresolutions = tccp->numresolutions;
-
-            comp->resolutions = (opj_pi_resolution_t*) opj_malloc(comp->numresolutions *
-                                sizeof(opj_pi_resolution_t));
-            if (!comp->resolutions) {
-                pi_destroy(pi, cp, tileno);
-                return NULL;
-            }
-
-            tcx0 = int_ceildiv(pi[pino].tx0, comp->dx);
-            tcy0 = int_ceildiv(pi[pino].ty0, comp->dy);
-            tcx1 = int_ceildiv(pi[pino].tx1, comp->dx);
-            tcy1 = int_ceildiv(pi[pino].ty1, comp->dy);
-            if (comp->numresolutions > maxres) {
-                maxres = comp->numresolutions;
-            }
-
-            for (resno = 0; resno < comp->numresolutions; resno++) {
-                int levelno;
-                int rx0, ry0, rx1, ry1;
-                int px0, py0, px1, py1;
-                opj_pi_resolution_t *res = &comp->resolutions[resno];
-                if (tccp->csty & J2K_CCP_CSTY_PRT) {
-                    res->pdx = tccp->prcw[resno];
-                    res->pdy = tccp->prch[resno];
-                } else {
-                    res->pdx = 15;
-                    res->pdy = 15;
-                }
-                levelno = comp->numresolutions - 1 - resno;
-                rx0 = int_ceildivpow2(tcx0, levelno);
-                ry0 = int_ceildivpow2(tcy0, levelno);
-                rx1 = int_ceildivpow2(tcx1, levelno);
-                ry1 = int_ceildivpow2(tcy1, levelno);
-                px0 = int_floordivpow2(rx0, res->pdx) << res->pdx;
-                py0 = int_floordivpow2(ry0, res->pdy) << res->pdy;
-                px1 = int_ceildivpow2(rx1, res->pdx) << res->pdx;
-                py1 = int_ceildivpow2(ry1, res->pdy) << res->pdy;
-                res->pw = (rx0 == rx1) ? 0 : ((px1 - px0) >> res->pdx);
-                res->ph = (ry0 == ry1) ? 0 : ((py1 - py0) >> res->pdy);
-
-                if (res->pw * res->ph > maxprec) {
-                    maxprec = res->pw * res->ph;
-                }
-            }
-        }
-
-        tccp = &tcp->tccps[0];
-        pi[pino].step_p = 1;
-        pi[pino].step_c = maxprec * pi[pino].step_p;
-        pi[pino].step_r = image->numcomps * pi[pino].step_c;
-        pi[pino].step_l = maxres * pi[pino].step_r;
-
-        for (compno = 0; compno < pi->numcomps; compno++) {
-            opj_pi_comp_t *comp = &pi->comps[compno];
-            for (resno = 0; resno < comp->numresolutions; resno++) {
-                int dx, dy;
-                opj_pi_resolution_t *res = &comp->resolutions[resno];
-                dx = comp->dx * (1 << (res->pdx + comp->numresolutions - 1 - resno));
-                dy = comp->dy * (1 << (res->pdy + comp->numresolutions - 1 - resno));
-                pi[pino].dx = !pi->dx ? dx : int_min(pi->dx, dx);
-                pi[pino].dy = !pi->dy ? dy : int_min(pi->dy, dy);
-            }
-        }
-
-        if (pino == 0) {
-            pi[pino].include = (short int*) opj_calloc(tcp->numlayers * pi[pino].step_l,
-                               sizeof(short int));
-            if (!pi[pino].include) {
-                pi_destroy(pi, cp, tileno);
-                return NULL;
-            }
-        } else {
-            pi[pino].include = pi[pino - 1].include;
-        }
-
-        /* Generation of boundaries for each prog flag*/
-        if (tcp->POC && (cp->cinema || ((!cp->cinema) && (t2_mode == FINAL_PASS)))) {
-            tcp->pocs[pino].compS = tcp->pocs[pino].compno0;
-            tcp->pocs[pino].compE = tcp->pocs[pino].compno1;
-            tcp->pocs[pino].resS = tcp->pocs[pino].resno0;
-            tcp->pocs[pino].resE = tcp->pocs[pino].resno1;
-            tcp->pocs[pino].layE = tcp->pocs[pino].layno1;
-            tcp->pocs[pino].prg  = tcp->pocs[pino].prg1;
-            if (pino > 0) {
-                tcp->pocs[pino].layS = (tcp->pocs[pino].layE > tcp->pocs[pino - 1].layE) ?
-                                       tcp->pocs[pino - 1].layE : 0;
-            }
-        } else {
-            tcp->pocs[pino].compS = 0;
-            tcp->pocs[pino].compE = image->numcomps;
-            tcp->pocs[pino].resS = 0;
-            tcp->pocs[pino].resE = maxres;
-            tcp->pocs[pino].layS = 0;
-            tcp->pocs[pino].layE = tcp->numlayers;
-            tcp->pocs[pino].prg  = tcp->prg;
-        }
-        tcp->pocs[pino].prcS = 0;
-        tcp->pocs[pino].prcE = maxprec;;
-        tcp->pocs[pino].txS = pi[pino].tx0;
-        tcp->pocs[pino].txE = pi[pino].tx1;
-        tcp->pocs[pino].tyS = pi[pino].ty0;
-        tcp->pocs[pino].tyE = pi[pino].ty1;
-        tcp->pocs[pino].dx = pi[pino].dx;
-        tcp->pocs[pino].dy = pi[pino].dy;
-    }
-    return pi;
-}
-
-
-
-void pi_destroy(opj_pi_iterator_t *pi, opj_cp_t *cp, int tileno)
-{
-    int compno, pino;
-    opj_tcp_t *tcp = &cp->tcps[tileno];
-    if (pi) {
-        for (pino = 0; pino < tcp->numpocs + 1; pino++) {
-            if (pi[pino].comps) {
-                for (compno = 0; compno < pi->numcomps; compno++) {
-                    opj_pi_comp_t *comp = &pi[pino].comps[compno];
-                    if (comp->resolutions) {
-                        opj_free(comp->resolutions);
-                    }
-                }
-                opj_free(pi[pino].comps);
-            }
-        }
-        if (pi->include) {
-            opj_free(pi->include);
-        }
-        opj_free(pi);
-    }
-}
-
-opj_bool pi_next(opj_pi_iterator_t * pi)
-{
-    switch (pi->poc.prg) {
-    case LRCP:
-        return pi_next_lrcp(pi);
-    case RLCP:
-        return pi_next_rlcp(pi);
-    case RPCL:
-        return pi_next_rpcl(pi);
-    case PCRL:
-        return pi_next_pcrl(pi);
-    case CPRL:
-        return pi_next_cprl(pi);
-    case PROG_UNKNOWN:
-        return OPJ_FALSE;
-    }
-
-    return OPJ_FALSE;
-}
-
-opj_bool pi_create_encode(opj_pi_iterator_t *pi, opj_cp_t *cp, int tileno,
-                          int pino, int tpnum, int tppos, J2K_T2_MODE t2_mode, int cur_totnum_tp)
-{
-    char prog[4];
-    int i;
-    int incr_top = 1, resetX = 0;
-    opj_tcp_t *tcps = &cp->tcps[tileno];
-    opj_poc_t *tcp = &tcps->pocs[pino];
-
-    pi[pino].first = 1;
-    pi[pino].poc.prg = tcp->prg;
-
-    switch (tcp->prg) {
-    case CPRL:
-        strncpy(prog, "CPRL", 4);
-        break;
-    case LRCP:
-        strncpy(prog, "LRCP", 4);
-        break;
-    case PCRL:
-        strncpy(prog, "PCRL", 4);
-        break;
-    case RLCP:
-        strncpy(prog, "RLCP", 4);
-        break;
-    case RPCL:
-        strncpy(prog, "RPCL", 4);
-        break;
-    case PROG_UNKNOWN:
-        return OPJ_TRUE;
-    }
-
-    if (!(cp->tp_on && ((!cp->cinema && (t2_mode == FINAL_PASS)) || cp->cinema))) {
-        pi[pino].poc.resno0 = tcp->resS;
-        pi[pino].poc.resno1 = tcp->resE;
-        pi[pino].poc.compno0 = tcp->compS;
-        pi[pino].poc.compno1 = tcp->compE;
-        pi[pino].poc.layno0 = tcp->layS;
-        pi[pino].poc.layno1 = tcp->layE;
-        pi[pino].poc.precno0 = tcp->prcS;
-        pi[pino].poc.precno1 = tcp->prcE;
-        pi[pino].poc.tx0 = tcp->txS;
-        pi[pino].poc.ty0 = tcp->tyS;
-        pi[pino].poc.tx1 = tcp->txE;
-        pi[pino].poc.ty1 = tcp->tyE;
-    } else {
-        if (tpnum < cur_totnum_tp) {
-            for (i = 3; i >= 0; i--) {
-                switch (prog[i]) {
-                case 'C':
-                    if (i > tppos) {
-                        pi[pino].poc.compno0 = tcp->compS;
-                        pi[pino].poc.compno1 = tcp->compE;
-                    } else {
-                        if (tpnum == 0) {
-                            tcp->comp_t = tcp->compS;
-                            pi[pino].poc.compno0 = tcp->comp_t;
-                            pi[pino].poc.compno1 = tcp->comp_t + 1;
-                            tcp->comp_t += 1;
-                        } else {
-                            if (incr_top == 1) {
-                                if (tcp->comp_t == tcp->compE) {
-                                    tcp->comp_t = tcp->compS;
-                                    pi[pino].poc.compno0 = tcp->comp_t;
-                                    pi[pino].poc.compno1 = tcp->comp_t + 1;
-                                    tcp->comp_t += 1;
-                                    incr_top = 1;
-                                } else {
-                                    pi[pino].poc.compno0 = tcp->comp_t;
-                                    pi[pino].poc.compno1 = tcp->comp_t + 1;
-                                    tcp->comp_t += 1;
-                                    incr_top = 0;
-                                }
-                            } else {
-                                pi[pino].poc.compno0 = tcp->comp_t - 1;
-                                pi[pino].poc.compno1 = tcp->comp_t;
-                            }
-                        }
-                    }
-                    break;
-
-                case 'R':
-                    if (i > tppos) {
-                        pi[pino].poc.resno0 = tcp->resS;
-                        pi[pino].poc.resno1 = tcp->resE;
-                    } else {
-                        if (tpnum == 0) {
-                            tcp->res_t = tcp->resS;
-                            pi[pino].poc.resno0 = tcp->res_t;
-                            pi[pino].poc.resno1 = tcp->res_t + 1;
-                            tcp->res_t += 1;
-                        } else {
-                            if (incr_top == 1) {
-                                if (tcp->res_t == tcp->resE) {
-                                    tcp->res_t = tcp->resS;
-                                    pi[pino].poc.resno0 = tcp->res_t;
-                                    pi[pino].poc.resno1 = tcp->res_t + 1;
-                                    tcp->res_t += 1;
-                                    incr_top = 1;
-                                } else {
-                                    pi[pino].poc.resno0 = tcp->res_t;
-                                    pi[pino].poc.resno1 = tcp->res_t + 1;
-                                    tcp->res_t += 1;
-                                    incr_top = 0;
-                                }
-                            } else {
-                                pi[pino].poc.resno0 = tcp->res_t - 1;
-                                pi[pino].poc.resno1 = tcp->res_t;
-                            }
-                        }
-                    }
-                    break;
-
-                case 'L':
-                    if (i > tppos) {
-                        pi[pino].poc.layno0 = tcp->layS;
-                        pi[pino].poc.layno1 = tcp->layE;
-                    } else {
-                        if (tpnum == 0) {
-                            tcp->lay_t = tcp->layS;
-                            pi[pino].poc.layno0 = tcp->lay_t;
-                            pi[pino].poc.layno1 = tcp->lay_t + 1;
-                            tcp->lay_t += 1;
-                        } else {
-                            if (incr_top == 1) {
-                                if (tcp->lay_t == tcp->layE) {
-                                    tcp->lay_t = tcp->layS;
-                                    pi[pino].poc.layno0 = tcp->lay_t;
-                                    pi[pino].poc.layno1 = tcp->lay_t + 1;
-                                    tcp->lay_t += 1;
-                                    incr_top = 1;
-                                } else {
-                                    pi[pino].poc.layno0 = tcp->lay_t;
-                                    pi[pino].poc.layno1 = tcp->lay_t + 1;
-                                    tcp->lay_t += 1;
-                                    incr_top = 0;
-                                }
-                            } else {
-                                pi[pino].poc.layno0 = tcp->lay_t - 1;
-                                pi[pino].poc.layno1 = tcp->lay_t;
-                            }
-                        }
-                    }
-                    break;
-
-                case 'P':
-                    switch (tcp->prg) {
-                    case LRCP:
-                    case RLCP:
-                        if (i > tppos) {
-                            pi[pino].poc.precno0 = tcp->prcS;
-                            pi[pino].poc.precno1 = tcp->prcE;
-                        } else {
-                            if (tpnum == 0) {
-                                tcp->prc_t = tcp->prcS;
-                                pi[pino].poc.precno0 = tcp->prc_t;
-                                pi[pino].poc.precno1 = tcp->prc_t + 1;
-                                tcp->prc_t += 1;
-                            } else {
-                                if (incr_top == 1) {
-                                    if (tcp->prc_t == tcp->prcE) {
-                                        tcp->prc_t = tcp->prcS;
-                                        pi[pino].poc.precno0 = tcp->prc_t;
-                                        pi[pino].poc.precno1 = tcp->prc_t + 1;
-                                        tcp->prc_t += 1;
-                                        incr_top = 1;
-                                    } else {
-                                        pi[pino].poc.precno0 = tcp->prc_t;
-                                        pi[pino].poc.precno1 = tcp->prc_t + 1;
-                                        tcp->prc_t += 1;
-                                        incr_top = 0;
-                                    }
-                                } else {
-                                    pi[pino].poc.precno0 = tcp->prc_t - 1;
-                                    pi[pino].poc.precno1 = tcp->prc_t;
-                                }
-                            }
-                        }
-                        break;
-                    default:
-                        if (i > tppos) {
-                            pi[pino].poc.tx0 = tcp->txS;
-                            pi[pino].poc.ty0 = tcp->tyS;
-                            pi[pino].poc.tx1 = tcp->txE;
-                            pi[pino].poc.ty1 = tcp->tyE;
-                        } else {
-                            if (tpnum == 0) {
-                                tcp->tx0_t = tcp->txS;
-                                tcp->ty0_t = tcp->tyS;
-                                pi[pino].poc.tx0 = tcp->tx0_t;
-                                pi[pino].poc.tx1 = tcp->tx0_t + tcp->dx - (tcp->tx0_t % tcp->dx);
-                                pi[pino].poc.ty0 = tcp->ty0_t;
-                                pi[pino].poc.ty1 = tcp->ty0_t + tcp->dy - (tcp->ty0_t % tcp->dy);
-                                tcp->tx0_t = pi[pino].poc.tx1;
-                                tcp->ty0_t = pi[pino].poc.ty1;
-                            } else {
-                                if (incr_top == 1) {
-                                    if (tcp->tx0_t >= tcp->txE) {
-                                        if (tcp->ty0_t >= tcp->tyE) {
-                                            tcp->ty0_t = tcp->tyS;
-                                            pi[pino].poc.ty0 = tcp->ty0_t;
-                                            pi[pino].poc.ty1 = tcp->ty0_t + tcp->dy - (tcp->ty0_t % tcp->dy);
-                                            tcp->ty0_t = pi[pino].poc.ty1;
-                                            incr_top = 1;
-                                            resetX = 1;
-                                        } else {
-                                            pi[pino].poc.ty0 = tcp->ty0_t;
-                                            pi[pino].poc.ty1 = tcp->ty0_t + tcp->dy - (tcp->ty0_t % tcp->dy);
-                                            tcp->ty0_t = pi[pino].poc.ty1;
-                                            incr_top = 0;
-                                            resetX = 1;
-                                        }
-                                        if (resetX == 1) {
-                                            tcp->tx0_t = tcp->txS;
-                                            pi[pino].poc.tx0 = tcp->tx0_t;
-                                            pi[pino].poc.tx1 = tcp->tx0_t + tcp->dx - (tcp->tx0_t % tcp->dx);
-                                            tcp->tx0_t = pi[pino].poc.tx1;
-                                        }
-                                    } else {
-                                        pi[pino].poc.tx0 = tcp->tx0_t;
-                                        pi[pino].poc.tx1 = tcp->tx0_t + tcp->dx - (tcp->tx0_t % tcp->dx);
-                                        tcp->tx0_t = pi[pino].poc.tx1;
-                                        pi[pino].poc.ty0 = tcp->ty0_t - tcp->dy - (tcp->ty0_t % tcp->dy);
-                                        pi[pino].poc.ty1 = tcp->ty0_t ;
-                                        incr_top = 0;
-                                    }
-                                } else {
-                                    pi[pino].poc.tx0 = tcp->tx0_t - tcp->dx - (tcp->tx0_t % tcp->dx);
-                                    pi[pino].poc.tx1 = tcp->tx0_t ;
-                                    pi[pino].poc.ty0 = tcp->ty0_t - tcp->dy - (tcp->ty0_t % tcp->dy);
-                                    pi[pino].poc.ty1 = tcp->ty0_t ;
-                                }
-                            }
-                        }
-                        break;
-                    }
-                    break;
-                }
-            }
-        }
-    }
-    return OPJ_FALSE;
-}
-
diff --git a/src/lib/openmj2/pi.h b/src/lib/openmj2/pi.h
deleted file mode 100644 (file)
index c8976cc..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __PI_H
-#define __PI_H
-/**
-@file pi.h
-@brief Implementation of a packet iterator (PI)
-
-The functions in PI.C have for goal to realize a packet iterator that permits to get the next
-packet following the progression order and change of it. The functions in PI.C are used
-by some function in T2.C.
-*/
-
-/** @defgroup PI PI - Implementation of a packet iterator */
-/*@{*/
-
-/**
-FIXME: documentation
-*/
-typedef struct opj_pi_resolution {
-    int pdx, pdy;
-    int pw, ph;
-} opj_pi_resolution_t;
-
-/**
-FIXME: documentation
-*/
-typedef struct opj_pi_comp {
-    int dx, dy;
-    /** number of resolution levels */
-    int numresolutions;
-    opj_pi_resolution_t *resolutions;
-} opj_pi_comp_t;
-
-/**
-Packet iterator
-*/
-typedef struct opj_pi_iterator {
-    /** Enabling Tile part generation*/
-    char tp_on;
-    /** precise if the packet has been already used (useful for progression order change) */
-    short int *include;
-    /** layer step used to localize the packet in the include vector */
-    int step_l;
-    /** resolution step used to localize the packet in the include vector */
-    int step_r;
-    /** component step used to localize the packet in the include vector */
-    int step_c;
-    /** precinct step used to localize the packet in the include vector */
-    int step_p;
-    /** component that identify the packet */
-    int compno;
-    /** resolution that identify the packet */
-    int resno;
-    /** precinct that identify the packet */
-    int precno;
-    /** layer that identify the packet */
-    int layno;
-    /** 0 if the first packet */
-    int first;
-    /** progression order change information */
-    opj_poc_t poc;
-    /** number of components in the image */
-    int numcomps;
-    /** Components*/
-    opj_pi_comp_t *comps;
-    int tx0, ty0, tx1, ty1;
-    int x, y, dx, dy;
-} opj_pi_iterator_t;
-
-/** @name Exported functions */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-/**
-Create a packet iterator for Encoder
-@param image Raw image for which the packets will be listed
-@param cp Coding parameters
-@param tileno Number that identifies the tile for which to list the packets
-@param t2_mode If == 0 In Threshold calculation ,If == 1 Final pass
-@return Returns a packet iterator that points to the first packet of the tile
-@see pi_destroy
-*/
-opj_pi_iterator_t *pi_initialise_encode(opj_image_t *image, opj_cp_t *cp,
-                                        int tileno, J2K_T2_MODE t2_mode);
-/**
-Modify the packet iterator for enabling tile part generation
-@param pi Handle to the packet iterator generated in pi_initialise_encode
-@param cp Coding parameters
-@param tileno Number that identifies the tile for which to list the packets
-@param pino Iterator index for pi
-@param tpnum Tile part number of the current tile
-@param tppos The position of the tile part flag in the progression order
-@param t2_mode If == 0 In Threshold calculation ,If == 1 Final pass
-@param cur_totnum_tp The total number of tile parts in the current tile
-@return Returns true if an error is detected
-*/
-opj_bool pi_create_encode(opj_pi_iterator_t *pi, opj_cp_t *cp, int tileno,
-                          int pino, int tpnum, int tppos, J2K_T2_MODE t2_mode, int cur_totnum_tp);
-/**
-Create a packet iterator for Decoder
-@param image Raw image for which the packets will be listed
-@param cp Coding parameters
-@param tileno Number that identifies the tile for which to list the packets
-@return Returns a packet iterator that points to the first packet of the tile
-@see pi_destroy
-*/
-opj_pi_iterator_t *pi_create_decode(opj_image_t * image, opj_cp_t * cp,
-                                    int tileno);
-
-/**
-Destroy a packet iterator
-@param pi Previously created packet iterator
-@param cp Coding parameters
-@param tileno Number that identifies the tile for which the packets were listed
-@see pi_create
-*/
-void pi_destroy(opj_pi_iterator_t *pi, opj_cp_t *cp, int tileno);
-
-/**
-Modify the packet iterator to point to the next packet
-@param pi Packet iterator to modify
-@return Returns false if pi pointed to the last packet or else returns true
-*/
-opj_bool pi_next(opj_pi_iterator_t * pi);
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif /* __PI_H */
diff --git a/src/lib/openmj2/raw.c b/src/lib/openmj2/raw.c
deleted file mode 100644 (file)
index 3e94d2b..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "opj_includes.h"
-
-/*
-==========================================================
-   local functions
-==========================================================
-*/
-
-
-/*
-==========================================================
-   RAW encoding interface
-==========================================================
-*/
-
-opj_raw_t* raw_create(void)
-{
-    opj_raw_t *raw = (opj_raw_t*)opj_malloc(sizeof(opj_raw_t));
-    return raw;
-}
-
-void raw_destroy(opj_raw_t *raw)
-{
-    if (raw) {
-        opj_free(raw);
-    }
-}
-
-int raw_numbytes(opj_raw_t *raw)
-{
-    return raw->bp - raw->start;
-}
-
-void raw_init_dec(opj_raw_t *raw, unsigned char *bp, int len)
-{
-    raw->start = bp;
-    raw->lenmax = len;
-    raw->len = 0;
-    raw->c = 0;
-    raw->ct = 0;
-}
-
-int raw_decode(opj_raw_t *raw)
-{
-    int d;
-    if (raw->ct == 0) {
-        raw->ct = 8;
-        if (raw->len == raw->lenmax) {
-            raw->c = 0xff;
-        } else {
-            if (raw->c == 0xff) {
-                raw->ct = 7;
-            }
-            raw->c = *(raw->start + raw->len);
-            raw->len++;
-        }
-    }
-    raw->ct--;
-    d = (raw->c >> raw->ct) & 0x01;
-
-    return d;
-}
-
diff --git a/src/lib/openmj2/raw.h b/src/lib/openmj2/raw.h
deleted file mode 100644 (file)
index 5165504..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __RAW_H
-#define __RAW_H
-/**
-@file raw.h
-@brief Implementation of operations for raw encoding (RAW)
-
-The functions in RAW.C have for goal to realize the operation of raw encoding linked
-with the corresponding mode switch.
-*/
-
-/** @defgroup RAW RAW - Implementation of operations for raw encoding */
-/*@{*/
-
-/**
-RAW encoding operations
-*/
-typedef struct opj_raw {
-    /** temporary buffer where bits are coded or decoded */
-    unsigned char c;
-    /** number of bits already read or free to write */
-    unsigned int ct;
-    /** maximum length to decode */
-    unsigned int lenmax;
-    /** length decoded */
-    unsigned int len;
-    /** pointer to the current position in the buffer */
-    unsigned char *bp;
-    /** pointer to the start of the buffer */
-    unsigned char *start;
-    /** pointer to the end of the buffer */
-    unsigned char *end;
-} opj_raw_t;
-
-/** @name Exported functions */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-/**
-Create a new RAW handle
-@return Returns a new RAW handle if successful, returns NULL otherwise
-*/
-opj_raw_t* raw_create(void);
-/**
-Destroy a previously created RAW handle
-@param raw RAW handle to destroy
-*/
-void raw_destroy(opj_raw_t *raw);
-/**
-Return the number of bytes written/read since initialisation
-@param raw RAW handle to destroy
-@return Returns the number of bytes already encoded
-*/
-int raw_numbytes(opj_raw_t *raw);
-/**
-Initialize the decoder
-@param raw RAW handle
-@param bp Pointer to the start of the buffer from which the bytes will be read
-@param len Length of the input buffer
-*/
-void raw_init_dec(opj_raw_t *raw, unsigned char *bp, int len);
-/**
-Decode a symbol using raw-decoder. Cfr p.506 TAUBMAN
-@param raw RAW handle
-@return Returns the decoded symbol (0 or 1)
-*/
-int raw_decode(opj_raw_t *raw);
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif /* __RAW_H */
diff --git a/src/lib/openmj2/t1.c b/src/lib/openmj2/t1.c
deleted file mode 100644 (file)
index ad9e541..0000000
+++ /dev/null
@@ -1,1628 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2007, Callum Lerwick <seg@haxxed.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "opj_includes.h"
-#include "t1_luts.h"
-
-/** @defgroup T1 T1 - Implementation of the tier-1 coding */
-/*@{*/
-
-/** @name Local static functions */
-/*@{*/
-
-static INLINE char t1_getctxno_zc(int f, int orient);
-static char t1_getctxno_sc(int f);
-static INLINE int t1_getctxno_mag(int f);
-static char t1_getspb(int f);
-static short t1_getnmsedec_sig(int x, int bitpos);
-static short t1_getnmsedec_ref(int x, int bitpos);
-static void t1_updateflags(flag_t *flagsp, int s, int stride);
-/**
-Encode significant pass
-*/
-static void t1_enc_sigpass_step(
-    opj_t1_t *t1,
-    flag_t *flagsp,
-    int *datap,
-    int orient,
-    int bpno,
-    int one,
-    int *nmsedec,
-    char type,
-    int vsc);
-/**
-Decode significant pass
-*/
-static INLINE void t1_dec_sigpass_step_raw(
-    opj_t1_t *t1,
-    flag_t *flagsp,
-    int *datap,
-    int orient,
-    int oneplushalf,
-    int vsc);
-static INLINE void t1_dec_sigpass_step_mqc(
-    opj_t1_t *t1,
-    flag_t *flagsp,
-    int *datap,
-    int orient,
-    int oneplushalf);
-static INLINE void t1_dec_sigpass_step_mqc_vsc(
-    opj_t1_t *t1,
-    flag_t *flagsp,
-    int *datap,
-    int orient,
-    int oneplushalf,
-    int vsc);
-/**
-Encode significant pass
-*/
-static void t1_enc_sigpass(
-    opj_t1_t *t1,
-    int bpno,
-    int orient,
-    int *nmsedec,
-    char type,
-    int cblksty);
-/**
-Decode significant pass
-*/
-static void t1_dec_sigpass_raw(
-    opj_t1_t *t1,
-    int bpno,
-    int orient,
-    int cblksty);
-static void t1_dec_sigpass_mqc(
-    opj_t1_t *t1,
-    int bpno,
-    int orient);
-static void t1_dec_sigpass_mqc_vsc(
-    opj_t1_t *t1,
-    int bpno,
-    int orient);
-/**
-Encode refinement pass
-*/
-static void t1_enc_refpass_step(
-    opj_t1_t *t1,
-    flag_t *flagsp,
-    int *datap,
-    int bpno,
-    int one,
-    int *nmsedec,
-    char type,
-    int vsc);
-/**
-Decode refinement pass
-*/
-static INLINE void t1_dec_refpass_step_raw(
-    opj_t1_t *t1,
-    flag_t *flagsp,
-    int *datap,
-    int poshalf,
-    int neghalf,
-    int vsc);
-static INLINE void t1_dec_refpass_step_mqc(
-    opj_t1_t *t1,
-    flag_t *flagsp,
-    int *datap,
-    int poshalf,
-    int neghalf);
-static INLINE void t1_dec_refpass_step_mqc_vsc(
-    opj_t1_t *t1,
-    flag_t *flagsp,
-    int *datap,
-    int poshalf,
-    int neghalf,
-    int vsc);
-
-/**
-Encode refinement pass
-*/
-static void t1_enc_refpass(
-    opj_t1_t *t1,
-    int bpno,
-    int *nmsedec,
-    char type,
-    int cblksty);
-/**
-Decode refinement pass
-*/
-static void t1_dec_refpass_raw(
-    opj_t1_t *t1,
-    int bpno,
-    int cblksty);
-static void t1_dec_refpass_mqc(
-    opj_t1_t *t1,
-    int bpno);
-static void t1_dec_refpass_mqc_vsc(
-    opj_t1_t *t1,
-    int bpno);
-/**
-Encode clean-up pass
-*/
-static void t1_enc_clnpass_step(
-    opj_t1_t *t1,
-    flag_t *flagsp,
-    int *datap,
-    int orient,
-    int bpno,
-    int one,
-    int *nmsedec,
-    int partial,
-    int vsc);
-/**
-Decode clean-up pass
-*/
-static void t1_dec_clnpass_step_partial(
-    opj_t1_t *t1,
-    flag_t *flagsp,
-    int *datap,
-    int orient,
-    int oneplushalf);
-static void t1_dec_clnpass_step(
-    opj_t1_t *t1,
-    flag_t *flagsp,
-    int *datap,
-    int orient,
-    int oneplushalf);
-static void t1_dec_clnpass_step_vsc(
-    opj_t1_t *t1,
-    flag_t *flagsp,
-    int *datap,
-    int orient,
-    int oneplushalf,
-    int partial,
-    int vsc);
-/**
-Encode clean-up pass
-*/
-static void t1_enc_clnpass(
-    opj_t1_t *t1,
-    int bpno,
-    int orient,
-    int *nmsedec,
-    int cblksty);
-/**
-Decode clean-up pass
-*/
-static void t1_dec_clnpass(
-    opj_t1_t *t1,
-    int bpno,
-    int orient,
-    int cblksty);
-static double t1_getwmsedec(
-    int nmsedec,
-    int compno,
-    int level,
-    int orient,
-    int bpno,
-    int qmfbid,
-    double stepsize,
-    int numcomps,
-    int mct);
-/**
-Encode 1 code-block
-@param t1 T1 handle
-@param cblk Code-block coding parameters
-@param orient
-@param compno Component number
-@param level
-@param qmfbid
-@param stepsize
-@param cblksty Code-block style
-@param numcomps
-@param mct
-@param tile
-*/
-static void t1_encode_cblk(
-    opj_t1_t *t1,
-    opj_tcd_cblk_enc_t* cblk,
-    int orient,
-    int compno,
-    int level,
-    int qmfbid,
-    double stepsize,
-    int cblksty,
-    int numcomps,
-    int mct,
-    opj_tcd_tile_t * tile);
-/**
-Decode 1 code-block
-@param t1 T1 handle
-@param cblk Code-block coding parameters
-@param orient
-@param roishift Region of interest shifting value
-@param cblksty Code-block style
-*/
-static void t1_decode_cblk(
-    opj_t1_t *t1,
-    opj_tcd_cblk_dec_t* cblk,
-    int orient,
-    int roishift,
-    int cblksty);
-
-/*@}*/
-
-/*@}*/
-
-/* ----------------------------------------------------------------------- */
-
-static char t1_getctxno_zc(int f, int orient)
-{
-    return lut_ctxno_zc[(orient << 8) | (f & T1_SIG_OTH)];
-}
-
-static char t1_getctxno_sc(int f)
-{
-    return lut_ctxno_sc[(f & (T1_SIG_PRIM | T1_SGN)) >> 4];
-}
-
-static int t1_getctxno_mag(int f)
-{
-    int tmp1 = (f & T1_SIG_OTH) ? T1_CTXNO_MAG + 1 : T1_CTXNO_MAG;
-    int tmp2 = (f & T1_REFINE) ? T1_CTXNO_MAG + 2 : tmp1;
-    return (tmp2);
-}
-
-static char t1_getspb(int f)
-{
-    return lut_spb[(f & (T1_SIG_PRIM | T1_SGN)) >> 4];
-}
-
-static short t1_getnmsedec_sig(int x, int bitpos)
-{
-    if (bitpos > T1_NMSEDEC_FRACBITS) {
-        return lut_nmsedec_sig[(x >> (bitpos - T1_NMSEDEC_FRACBITS)) & ((
-                                                                         1 << T1_NMSEDEC_BITS) - 1)];
-    }
-
-    return lut_nmsedec_sig0[x & ((1 << T1_NMSEDEC_BITS) - 1)];
-}
-
-static short t1_getnmsedec_ref(int x, int bitpos)
-{
-    if (bitpos > T1_NMSEDEC_FRACBITS) {
-        return lut_nmsedec_ref[(x >> (bitpos - T1_NMSEDEC_FRACBITS)) & ((
-                                                                         1 << T1_NMSEDEC_BITS) - 1)];
-    }
-
-    return lut_nmsedec_ref0[x & ((1 << T1_NMSEDEC_BITS) - 1)];
-}
-
-static void t1_updateflags(flag_t *flagsp, int s, int stride)
-{
-    flag_t *np = flagsp - stride;
-    flag_t *sp = flagsp + stride;
-
-    static const flag_t mod[] = {
-        T1_SIG_S, T1_SIG_S | T1_SGN_S,
-        T1_SIG_E, T1_SIG_E | T1_SGN_E,
-        T1_SIG_W, T1_SIG_W | T1_SGN_W,
-        T1_SIG_N, T1_SIG_N | T1_SGN_N
-    };
-
-    np[-1] |= T1_SIG_SE;
-    np[0]  |= mod[s];
-    np[1]  |= T1_SIG_SW;
-
-    flagsp[-1] |= mod[s + 2];
-    flagsp[0]  |= T1_SIG;
-    flagsp[1]  |= mod[s + 4];
-
-    sp[-1] |= T1_SIG_NE;
-    sp[0]  |= mod[s + 6];
-    sp[1]  |= T1_SIG_NW;
-}
-
-static void t1_enc_sigpass_step(
-    opj_t1_t *t1,
-    flag_t *flagsp,
-    int *datap,
-    int orient,
-    int bpno,
-    int one,
-    int *nmsedec,
-    char type,
-    int vsc)
-{
-    int v, flag;
-
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) :
-           (*flagsp);
-    if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) {
-        v = int_abs(*datap) & one ? 1 : 0;
-        mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient));   /* ESSAI */
-        if (type == T1_TYPE_RAW) {  /* BYPASS/LAZY MODE */
-            mqc_bypass_enc(mqc, v);
-        } else {
-            mqc_encode(mqc, v);
-        }
-        if (v) {
-            v = *datap < 0 ? 1 : 0;
-            *nmsedec += t1_getnmsedec_sig(int_abs(*datap), bpno + T1_NMSEDEC_FRACBITS);
-            mqc_setcurctx(mqc, t1_getctxno_sc(flag));   /* ESSAI */
-            if (type == T1_TYPE_RAW) {  /* BYPASS/LAZY MODE */
-                mqc_bypass_enc(mqc, v);
-            } else {
-                mqc_encode(mqc, v ^ t1_getspb(flag));
-            }
-            t1_updateflags(flagsp, v, t1->flags_stride);
-        }
-        *flagsp |= T1_VISIT;
-    }
-}
-
-static INLINE void t1_dec_sigpass_step_raw(
-    opj_t1_t *t1,
-    flag_t *flagsp,
-    int *datap,
-    int orient,
-    int oneplushalf,
-    int vsc)
-{
-    int v, flag;
-    opj_raw_t *raw = t1->raw;   /* RAW component */
-
-    OPJ_ARG_NOT_USED(orient);
-
-    flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) :
-           (*flagsp);
-    if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) {
-        if (raw_decode(raw)) {
-            v = raw_decode(raw);    /* ESSAI */
-            *datap = v ? -oneplushalf : oneplushalf;
-            t1_updateflags(flagsp, v, t1->flags_stride);
-        }
-        *flagsp |= T1_VISIT;
-    }
-}               /* VSC and  BYPASS by Antonin */
-
-static INLINE void t1_dec_sigpass_step_mqc(
-    opj_t1_t *t1,
-    flag_t *flagsp,
-    int *datap,
-    int orient,
-    int oneplushalf)
-{
-    int v, flag;
-
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    flag = *flagsp;
-    if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) {
-        mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient));
-        if (mqc_decode(mqc)) {
-            mqc_setcurctx(mqc, t1_getctxno_sc(flag));
-            v = mqc_decode(mqc) ^ t1_getspb(flag);
-            *datap = v ? -oneplushalf : oneplushalf;
-            t1_updateflags(flagsp, v, t1->flags_stride);
-        }
-        *flagsp |= T1_VISIT;
-    }
-}               /* VSC and  BYPASS by Antonin */
-
-static INLINE void t1_dec_sigpass_step_mqc_vsc(
-    opj_t1_t *t1,
-    flag_t *flagsp,
-    int *datap,
-    int orient,
-    int oneplushalf,
-    int vsc)
-{
-    int v, flag;
-
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) :
-           (*flagsp);
-    if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) {
-        mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient));
-        if (mqc_decode(mqc)) {
-            mqc_setcurctx(mqc, t1_getctxno_sc(flag));
-            v = mqc_decode(mqc) ^ t1_getspb(flag);
-            *datap = v ? -oneplushalf : oneplushalf;
-            t1_updateflags(flagsp, v, t1->flags_stride);
-        }
-        *flagsp |= T1_VISIT;
-    }
-}               /* VSC and  BYPASS by Antonin */
-
-static void t1_enc_sigpass(
-    opj_t1_t *t1,
-    int bpno,
-    int orient,
-    int *nmsedec,
-    char type,
-    int cblksty)
-{
-    int i, j, k, one, vsc;
-    *nmsedec = 0;
-    one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
-    for (k = 0; k < t1->h; k += 4) {
-        for (i = 0; i < t1->w; ++i) {
-            for (j = k; j < k + 4 && j < t1->h; ++j) {
-                vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 ||
-                        j == t1->h - 1)) ? 1 : 0;
-                t1_enc_sigpass_step(
-                    t1,
-                    &t1->flags[((j + 1) * t1->flags_stride) + i + 1],
-                    &t1->data[(j * t1->w) + i],
-                    orient,
-                    bpno,
-                    one,
-                    nmsedec,
-                    type,
-                    vsc);
-            }
-        }
-    }
-}
-
-static void t1_dec_sigpass_raw(
-    opj_t1_t *t1,
-    int bpno,
-    int orient,
-    int cblksty)
-{
-    int i, j, k, one, half, oneplushalf, vsc;
-    one = 1 << bpno;
-    half = one >> 1;
-    oneplushalf = one | half;
-    for (k = 0; k < t1->h; k += 4) {
-        for (i = 0; i < t1->w; ++i) {
-            for (j = k; j < k + 4 && j < t1->h; ++j) {
-                vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 ||
-                        j == t1->h - 1)) ? 1 : 0;
-                t1_dec_sigpass_step_raw(
-                    t1,
-                    &t1->flags[((j + 1) * t1->flags_stride) + i + 1],
-                    &t1->data[(j * t1->w) + i],
-                    orient,
-                    oneplushalf,
-                    vsc);
-            }
-        }
-    }
-}               /* VSC and  BYPASS by Antonin */
-
-static void t1_dec_sigpass_mqc(
-    opj_t1_t *t1,
-    int bpno,
-    int orient)
-{
-    int i, j, k, one, half, oneplushalf;
-    int *data1 = t1->data;
-    flag_t *flags1 = &t1->flags[1];
-    one = 1 << bpno;
-    half = one >> 1;
-    oneplushalf = one | half;
-    for (k = 0; k < (t1->h & ~3); k += 4) {
-        for (i = 0; i < t1->w; ++i) {
-            int *data2 = data1 + i;
-            flag_t *flags2 = flags1 + i;
-            flags2 += t1->flags_stride;
-            t1_dec_sigpass_step_mqc(t1, flags2, data2, orient, oneplushalf);
-            data2 += t1->w;
-            flags2 += t1->flags_stride;
-            t1_dec_sigpass_step_mqc(t1, flags2, data2, orient, oneplushalf);
-            data2 += t1->w;
-            flags2 += t1->flags_stride;
-            t1_dec_sigpass_step_mqc(t1, flags2, data2, orient, oneplushalf);
-            data2 += t1->w;
-            flags2 += t1->flags_stride;
-            t1_dec_sigpass_step_mqc(t1, flags2, data2, orient, oneplushalf);
-            data2 += t1->w;
-        }
-        data1 += t1->w << 2;
-        flags1 += t1->flags_stride << 2;
-    }
-    for (i = 0; i < t1->w; ++i) {
-        int *data2 = data1 + i;
-        flag_t *flags2 = flags1 + i;
-        for (j = k; j < t1->h; ++j) {
-            flags2 += t1->flags_stride;
-            t1_dec_sigpass_step_mqc(t1, flags2, data2, orient, oneplushalf);
-            data2 += t1->w;
-        }
-    }
-}               /* VSC and  BYPASS by Antonin */
-
-static void t1_dec_sigpass_mqc_vsc(
-    opj_t1_t *t1,
-    int bpno,
-    int orient)
-{
-    int i, j, k, one, half, oneplushalf, vsc;
-    one = 1 << bpno;
-    half = one >> 1;
-    oneplushalf = one | half;
-    for (k = 0; k < t1->h; k += 4) {
-        for (i = 0; i < t1->w; ++i) {
-            for (j = k; j < k + 4 && j < t1->h; ++j) {
-                vsc = (j == k + 3 || j == t1->h - 1) ? 1 : 0;
-                t1_dec_sigpass_step_mqc_vsc(
-                    t1,
-                    &t1->flags[((j + 1) * t1->flags_stride) + i + 1],
-                    &t1->data[(j * t1->w) + i],
-                    orient,
-                    oneplushalf,
-                    vsc);
-            }
-        }
-    }
-}               /* VSC and  BYPASS by Antonin */
-
-static void t1_enc_refpass_step(
-    opj_t1_t *t1,
-    flag_t *flagsp,
-    int *datap,
-    int bpno,
-    int one,
-    int *nmsedec,
-    char type,
-    int vsc)
-{
-    int v, flag;
-
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) :
-           (*flagsp);
-    if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) {
-        *nmsedec += t1_getnmsedec_ref(int_abs(*datap), bpno + T1_NMSEDEC_FRACBITS);
-        v = int_abs(*datap) & one ? 1 : 0;
-        mqc_setcurctx(mqc, t1_getctxno_mag(flag));  /* ESSAI */
-        if (type == T1_TYPE_RAW) {  /* BYPASS/LAZY MODE */
-            mqc_bypass_enc(mqc, v);
-        } else {
-            mqc_encode(mqc, v);
-        }
-        *flagsp |= T1_REFINE;
-    }
-}
-
-static INLINE void t1_dec_refpass_step_raw(
-    opj_t1_t *t1,
-    flag_t *flagsp,
-    int *datap,
-    int poshalf,
-    int neghalf,
-    int vsc)
-{
-    int v, t, flag;
-
-    opj_raw_t *raw = t1->raw;   /* RAW component */
-
-    flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) :
-           (*flagsp);
-    if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) {
-        v = raw_decode(raw);
-        t = v ? poshalf : neghalf;
-        *datap += *datap < 0 ? -t : t;
-        *flagsp |= T1_REFINE;
-    }
-}               /* VSC and  BYPASS by Antonin  */
-
-static INLINE void t1_dec_refpass_step_mqc(
-    opj_t1_t *t1,
-    flag_t *flagsp,
-    int *datap,
-    int poshalf,
-    int neghalf)
-{
-    int v, t, flag;
-
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    flag = *flagsp;
-    if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) {
-        mqc_setcurctx(mqc, t1_getctxno_mag(flag));  /* ESSAI */
-        v = mqc_decode(mqc);
-        t = v ? poshalf : neghalf;
-        *datap += *datap < 0 ? -t : t;
-        *flagsp |= T1_REFINE;
-    }
-}               /* VSC and  BYPASS by Antonin  */
-
-static INLINE void t1_dec_refpass_step_mqc_vsc(
-    opj_t1_t *t1,
-    flag_t *flagsp,
-    int *datap,
-    int poshalf,
-    int neghalf,
-    int vsc)
-{
-    int v, t, flag;
-
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) :
-           (*flagsp);
-    if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) {
-        mqc_setcurctx(mqc, t1_getctxno_mag(flag));  /* ESSAI */
-        v = mqc_decode(mqc);
-        t = v ? poshalf : neghalf;
-        *datap += *datap < 0 ? -t : t;
-        *flagsp |= T1_REFINE;
-    }
-}               /* VSC and  BYPASS by Antonin  */
-
-static void t1_enc_refpass(
-    opj_t1_t *t1,
-    int bpno,
-    int *nmsedec,
-    char type,
-    int cblksty)
-{
-    int i, j, k, one, vsc;
-    *nmsedec = 0;
-    one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
-    for (k = 0; k < t1->h; k += 4) {
-        for (i = 0; i < t1->w; ++i) {
-            for (j = k; j < k + 4 && j < t1->h; ++j) {
-                vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 ||
-                        j == t1->h - 1)) ? 1 : 0;
-                t1_enc_refpass_step(
-                    t1,
-                    &t1->flags[((j + 1) * t1->flags_stride) + i + 1],
-                    &t1->data[(j * t1->w) + i],
-                    bpno,
-                    one,
-                    nmsedec,
-                    type,
-                    vsc);
-            }
-        }
-    }
-}
-
-static void t1_dec_refpass_raw(
-    opj_t1_t *t1,
-    int bpno,
-    int cblksty)
-{
-    int i, j, k, one, poshalf, neghalf;
-    int vsc;
-    one = 1 << bpno;
-    poshalf = one >> 1;
-    neghalf = bpno > 0 ? -poshalf : -1;
-    for (k = 0; k < t1->h; k += 4) {
-        for (i = 0; i < t1->w; ++i) {
-            for (j = k; j < k + 4 && j < t1->h; ++j) {
-                vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 ||
-                        j == t1->h - 1)) ? 1 : 0;
-                t1_dec_refpass_step_raw(
-                    t1,
-                    &t1->flags[((j + 1) * t1->flags_stride) + i + 1],
-                    &t1->data[(j * t1->w) + i],
-                    poshalf,
-                    neghalf,
-                    vsc);
-            }
-        }
-    }
-}               /* VSC and  BYPASS by Antonin */
-
-static void t1_dec_refpass_mqc(
-    opj_t1_t *t1,
-    int bpno)
-{
-    int i, j, k, one, poshalf, neghalf;
-    int *data1 = t1->data;
-    flag_t *flags1 = &t1->flags[1];
-    one = 1 << bpno;
-    poshalf = one >> 1;
-    neghalf = bpno > 0 ? -poshalf : -1;
-    for (k = 0; k < (t1->h & ~3); k += 4) {
-        for (i = 0; i < t1->w; ++i) {
-            int *data2 = data1 + i;
-            flag_t *flags2 = flags1 + i;
-            flags2 += t1->flags_stride;
-            t1_dec_refpass_step_mqc(t1, flags2, data2, poshalf, neghalf);
-            data2 += t1->w;
-            flags2 += t1->flags_stride;
-            t1_dec_refpass_step_mqc(t1, flags2, data2, poshalf, neghalf);
-            data2 += t1->w;
-            flags2 += t1->flags_stride;
-            t1_dec_refpass_step_mqc(t1, flags2, data2, poshalf, neghalf);
-            data2 += t1->w;
-            flags2 += t1->flags_stride;
-            t1_dec_refpass_step_mqc(t1, flags2, data2, poshalf, neghalf);
-            data2 += t1->w;
-        }
-        data1 += t1->w << 2;
-        flags1 += t1->flags_stride << 2;
-    }
-    for (i = 0; i < t1->w; ++i) {
-        int *data2 = data1 + i;
-        flag_t *flags2 = flags1 + i;
-        for (j = k; j < t1->h; ++j) {
-            flags2 += t1->flags_stride;
-            t1_dec_refpass_step_mqc(t1, flags2, data2, poshalf, neghalf);
-            data2 += t1->w;
-        }
-    }
-}               /* VSC and  BYPASS by Antonin */
-
-static void t1_dec_refpass_mqc_vsc(
-    opj_t1_t *t1,
-    int bpno)
-{
-    int i, j, k, one, poshalf, neghalf;
-    int vsc;
-    one = 1 << bpno;
-    poshalf = one >> 1;
-    neghalf = bpno > 0 ? -poshalf : -1;
-    for (k = 0; k < t1->h; k += 4) {
-        for (i = 0; i < t1->w; ++i) {
-            for (j = k; j < k + 4 && j < t1->h; ++j) {
-                vsc = ((j == k + 3 || j == t1->h - 1)) ? 1 : 0;
-                t1_dec_refpass_step_mqc_vsc(
-                    t1,
-                    &t1->flags[((j + 1) * t1->flags_stride) + i + 1],
-                    &t1->data[(j * t1->w) + i],
-                    poshalf,
-                    neghalf,
-                    vsc);
-            }
-        }
-    }
-}               /* VSC and  BYPASS by Antonin */
-
-static void t1_enc_clnpass_step(
-    opj_t1_t *t1,
-    flag_t *flagsp,
-    int *datap,
-    int orient,
-    int bpno,
-    int one,
-    int *nmsedec,
-    int partial,
-    int vsc)
-{
-    int v, flag;
-
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) :
-           (*flagsp);
-    if (partial) {
-        goto LABEL_PARTIAL;
-    }
-    if (!(*flagsp & (T1_SIG | T1_VISIT))) {
-        mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient));
-        v = int_abs(*datap) & one ? 1 : 0;
-        mqc_encode(mqc, v);
-        if (v) {
-LABEL_PARTIAL:
-            *nmsedec += t1_getnmsedec_sig(int_abs(*datap), bpno + T1_NMSEDEC_FRACBITS);
-            mqc_setcurctx(mqc, t1_getctxno_sc(flag));
-            v = *datap < 0 ? 1 : 0;
-            mqc_encode(mqc, v ^ t1_getspb(flag));
-            t1_updateflags(flagsp, v, t1->flags_stride);
-        }
-    }
-    *flagsp &= ~T1_VISIT;
-}
-
-static void t1_dec_clnpass_step_partial(
-    opj_t1_t *t1,
-    flag_t *flagsp,
-    int *datap,
-    int orient,
-    int oneplushalf)
-{
-    int v, flag;
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    OPJ_ARG_NOT_USED(orient);
-
-    flag = *flagsp;
-    mqc_setcurctx(mqc, t1_getctxno_sc(flag));
-    v = mqc_decode(mqc) ^ t1_getspb(flag);
-    *datap = v ? -oneplushalf : oneplushalf;
-    t1_updateflags(flagsp, v, t1->flags_stride);
-    *flagsp &= ~T1_VISIT;
-}               /* VSC and  BYPASS by Antonin */
-
-static void t1_dec_clnpass_step(
-    opj_t1_t *t1,
-    flag_t *flagsp,
-    int *datap,
-    int orient,
-    int oneplushalf)
-{
-    int v, flag;
-
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    flag = *flagsp;
-    if (!(flag & (T1_SIG | T1_VISIT))) {
-        mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient));
-        if (mqc_decode(mqc)) {
-            mqc_setcurctx(mqc, t1_getctxno_sc(flag));
-            v = mqc_decode(mqc) ^ t1_getspb(flag);
-            *datap = v ? -oneplushalf : oneplushalf;
-            t1_updateflags(flagsp, v, t1->flags_stride);
-        }
-    }
-    *flagsp &= ~T1_VISIT;
-}               /* VSC and  BYPASS by Antonin */
-
-static void t1_dec_clnpass_step_vsc(
-    opj_t1_t *t1,
-    flag_t *flagsp,
-    int *datap,
-    int orient,
-    int oneplushalf,
-    int partial,
-    int vsc)
-{
-    int v, flag;
-
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) :
-           (*flagsp);
-    if (partial) {
-        goto LABEL_PARTIAL;
-    }
-    if (!(flag & (T1_SIG | T1_VISIT))) {
-        mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient));
-        if (mqc_decode(mqc)) {
-LABEL_PARTIAL:
-            mqc_setcurctx(mqc, t1_getctxno_sc(flag));
-            v = mqc_decode(mqc) ^ t1_getspb(flag);
-            *datap = v ? -oneplushalf : oneplushalf;
-            t1_updateflags(flagsp, v, t1->flags_stride);
-        }
-    }
-    *flagsp &= ~T1_VISIT;
-}
-
-static void t1_enc_clnpass(
-    opj_t1_t *t1,
-    int bpno,
-    int orient,
-    int *nmsedec,
-    int cblksty)
-{
-    int i, j, k, one, agg, runlen, vsc;
-
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    *nmsedec = 0;
-    one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
-    for (k = 0; k < t1->h; k += 4) {
-        for (i = 0; i < t1->w; ++i) {
-            if (k + 3 < t1->h) {
-                if (cblksty & J2K_CCP_CBLKSTY_VSC) {
-                    agg = !(MACRO_t1_flags(1 + k, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                            || MACRO_t1_flags(1 + k + 1, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                            || MACRO_t1_flags(1 + k + 2, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                            || (MACRO_t1_flags(1 + k + 3, 1 + i)
-                                & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) & (T1_SIG | T1_VISIT |
-                                        T1_SIG_OTH));
-                } else {
-                    agg = !(MACRO_t1_flags(1 + k, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                            || MACRO_t1_flags(1 + k + 1, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                            || MACRO_t1_flags(1 + k + 2, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                            || MACRO_t1_flags(1 + k + 3, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH));
-                }
-            } else {
-                agg = 0;
-            }
-            if (agg) {
-                for (runlen = 0; runlen < 4; ++runlen) {
-                    if (int_abs(t1->data[((k + runlen)*t1->w) + i]) & one) {
-                        break;
-                    }
-                }
-                mqc_setcurctx(mqc, T1_CTXNO_AGG);
-                mqc_encode(mqc, runlen != 4);
-                if (runlen == 4) {
-                    continue;
-                }
-                mqc_setcurctx(mqc, T1_CTXNO_UNI);
-                mqc_encode(mqc, runlen >> 1);
-                mqc_encode(mqc, runlen & 1);
-            } else {
-                runlen = 0;
-            }
-            for (j = k + runlen; j < k + 4 && j < t1->h; ++j) {
-                vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 ||
-                        j == t1->h - 1)) ? 1 : 0;
-                t1_enc_clnpass_step(
-                    t1,
-                    &t1->flags[((j + 1) * t1->flags_stride) + i + 1],
-                    &t1->data[(j * t1->w) + i],
-                    orient,
-                    bpno,
-                    one,
-                    nmsedec,
-                    agg && (j == k + runlen),
-                    vsc);
-            }
-        }
-    }
-}
-
-static void t1_dec_clnpass(
-    opj_t1_t *t1,
-    int bpno,
-    int orient,
-    int cblksty)
-{
-    int i, j, k, one, half, oneplushalf, agg, runlen, vsc;
-    int segsym = cblksty & J2K_CCP_CBLKSTY_SEGSYM;
-
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    one = 1 << bpno;
-    half = one >> 1;
-    oneplushalf = one | half;
-    if (cblksty & J2K_CCP_CBLKSTY_VSC) {
-        for (k = 0; k < t1->h; k += 4) {
-            for (i = 0; i < t1->w; ++i) {
-                if (k + 3 < t1->h) {
-                    agg = !(MACRO_t1_flags(1 + k, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                            || MACRO_t1_flags(1 + k + 1, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                            || MACRO_t1_flags(1 + k + 2, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                            || (MACRO_t1_flags(1 + k + 3, 1 + i)
-                                & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) & (T1_SIG | T1_VISIT |
-                                        T1_SIG_OTH));
-                } else {
-                    agg = 0;
-                }
-                if (agg) {
-                    mqc_setcurctx(mqc, T1_CTXNO_AGG);
-                    if (!mqc_decode(mqc)) {
-                        continue;
-                    }
-                    mqc_setcurctx(mqc, T1_CTXNO_UNI);
-                    runlen = mqc_decode(mqc);
-                    runlen = (runlen << 1) | mqc_decode(mqc);
-                } else {
-                    runlen = 0;
-                }
-                for (j = k + runlen; j < k + 4 && j < t1->h; ++j) {
-                    vsc = (j == k + 3 || j == t1->h - 1) ? 1 : 0;
-                    t1_dec_clnpass_step_vsc(
-                        t1,
-                        &t1->flags[((j + 1) * t1->flags_stride) + i + 1],
-                        &t1->data[(j * t1->w) + i],
-                        orient,
-                        oneplushalf,
-                        agg && (j == k + runlen),
-                        vsc);
-                }
-            }
-        }
-    } else {
-        int *data1 = t1->data;
-        flag_t *flags1 = &t1->flags[1];
-        for (k = 0; k < (t1->h & ~3); k += 4) {
-            for (i = 0; i < t1->w; ++i) {
-                int *data2 = data1 + i;
-                flag_t *flags2 = flags1 + i;
-                agg = !(MACRO_t1_flags(1 + k, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                        || MACRO_t1_flags(1 + k + 1, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                        || MACRO_t1_flags(1 + k + 2, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                        || MACRO_t1_flags(1 + k + 3, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH));
-                if (agg) {
-                    mqc_setcurctx(mqc, T1_CTXNO_AGG);
-                    if (!mqc_decode(mqc)) {
-                        continue;
-                    }
-                    mqc_setcurctx(mqc, T1_CTXNO_UNI);
-                    runlen = mqc_decode(mqc);
-                    runlen = (runlen << 1) | mqc_decode(mqc);
-                    flags2 += runlen * t1->flags_stride;
-                    data2 += runlen * t1->w;
-                    for (j = k + runlen; j < k + 4 && j < t1->h; ++j) {
-                        flags2 += t1->flags_stride;
-                        if (agg && (j == k + runlen)) {
-                            t1_dec_clnpass_step_partial(t1, flags2, data2, orient, oneplushalf);
-                        } else {
-                            t1_dec_clnpass_step(t1, flags2, data2, orient, oneplushalf);
-                        }
-                        data2 += t1->w;
-                    }
-                } else {
-                    flags2 += t1->flags_stride;
-                    t1_dec_clnpass_step(t1, flags2, data2, orient, oneplushalf);
-                    data2 += t1->w;
-                    flags2 += t1->flags_stride;
-                    t1_dec_clnpass_step(t1, flags2, data2, orient, oneplushalf);
-                    data2 += t1->w;
-                    flags2 += t1->flags_stride;
-                    t1_dec_clnpass_step(t1, flags2, data2, orient, oneplushalf);
-                    data2 += t1->w;
-                    flags2 += t1->flags_stride;
-                    t1_dec_clnpass_step(t1, flags2, data2, orient, oneplushalf);
-                    data2 += t1->w;
-                }
-            }
-            data1 += t1->w << 2;
-            flags1 += t1->flags_stride << 2;
-        }
-        for (i = 0; i < t1->w; ++i) {
-            int *data2 = data1 + i;
-            flag_t *flags2 = flags1 + i;
-            for (j = k; j < t1->h; ++j) {
-                flags2 += t1->flags_stride;
-                t1_dec_clnpass_step(t1, flags2, data2, orient, oneplushalf);
-                data2 += t1->w;
-            }
-        }
-    }
-
-    if (segsym) {
-        int v = 0;
-        mqc_setcurctx(mqc, T1_CTXNO_UNI);
-        v = mqc_decode(mqc);
-        v = (v << 1) | mqc_decode(mqc);
-        v = (v << 1) | mqc_decode(mqc);
-        v = (v << 1) | mqc_decode(mqc);
-        /*
-        if (v!=0xa) {
-            opj_event_msg(t1->cinfo, EVT_WARNING, "Bad segmentation symbol %x\n", v);
-        }
-        */
-    }
-}               /* VSC and  BYPASS by Antonin */
-
-
-/** mod fixed_quality */
-static double t1_getwmsedec(
-    int nmsedec,
-    int compno,
-    int level,
-    int orient,
-    int bpno,
-    int qmfbid,
-    double stepsize,
-    int numcomps,
-    int mct)
-{
-    double w1, w2, wmsedec;
-    if (qmfbid == 1) {
-        w1 = (mct && numcomps == 3) ? mct_getnorm(compno) : 1.0;
-        w2 = dwt_getnorm(level, orient);
-    } else {            /* if (qmfbid == 0) */
-        w1 = (mct && numcomps == 3) ? mct_getnorm_real(compno) : 1.0;
-        w2 = dwt_getnorm_real(level, orient);
-    }
-    wmsedec = w1 * w2 * stepsize * (1 << bpno);
-    wmsedec *= wmsedec * nmsedec / 8192.0;
-
-    return wmsedec;
-}
-
-static opj_bool allocate_buffers(
-    opj_t1_t *t1,
-    int w,
-    int h)
-{
-    int datasize = w * h;
-    int flagssize;
-
-    if (datasize > t1->datasize) {
-        opj_aligned_free(t1->data);
-        t1->data = (int*) opj_aligned_malloc(datasize * sizeof(int));
-        if (!t1->data) {
-            return OPJ_FALSE;
-        }
-        t1->datasize = datasize;
-    }
-    memset(t1->data, 0, datasize * sizeof(int));
-
-    t1->flags_stride = w + 2;
-    flagssize = t1->flags_stride * (h + 2);
-
-    if (flagssize > t1->flagssize) {
-        opj_aligned_free(t1->flags);
-        t1->flags = (flag_t*) opj_aligned_malloc(flagssize * sizeof(flag_t));
-        if (!t1->flags) {
-            return OPJ_FALSE;
-        }
-        t1->flagssize = flagssize;
-    }
-    memset(t1->flags, 0, flagssize * sizeof(flag_t));
-
-    t1->w = w;
-    t1->h = h;
-
-    return OPJ_TRUE;
-}
-
-/** mod fixed_quality */
-static void t1_encode_cblk(
-    opj_t1_t *t1,
-    opj_tcd_cblk_enc_t* cblk,
-    int orient,
-    int compno,
-    int level,
-    int qmfbid,
-    double stepsize,
-    int cblksty,
-    int numcomps,
-    int mct,
-    opj_tcd_tile_t * tile)
-{
-    double cumwmsedec = 0.0;
-
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    int passno, bpno, passtype;
-    int nmsedec = 0;
-    int i, max;
-    char type = T1_TYPE_MQ;
-    double tempwmsedec;
-
-    max = 0;
-    for (i = 0; i < t1->w * t1->h; ++i) {
-        int tmp = abs(t1->data[i]);
-        max = int_max(max, tmp);
-    }
-
-    cblk->numbps = max ? (int_floorlog2(max) + 1) - T1_NMSEDEC_FRACBITS : 0;
-
-    bpno = cblk->numbps - 1;
-    passtype = 2;
-
-    mqc_resetstates(mqc);
-    mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46);
-    mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3);
-    mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4);
-    mqc_init_enc(mqc, cblk->data);
-
-    for (passno = 0; bpno >= 0; ++passno) {
-        opj_tcd_pass_t *pass = &cblk->passes[passno];
-        int correction = 3;
-        type = ((bpno < (cblk->numbps - 4)) && (passtype < 2) &&
-                (cblksty & J2K_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
-
-        switch (passtype) {
-        case 0:
-            t1_enc_sigpass(t1, bpno, orient, &nmsedec, type, cblksty);
-            break;
-        case 1:
-            t1_enc_refpass(t1, bpno, &nmsedec, type, cblksty);
-            break;
-        case 2:
-            t1_enc_clnpass(t1, bpno, orient, &nmsedec, cblksty);
-            /* code switch SEGMARK (i.e. SEGSYM) */
-            if (cblksty & J2K_CCP_CBLKSTY_SEGSYM) {
-                mqc_segmark_enc(mqc);
-            }
-            break;
-        }
-
-        /* fixed_quality */
-        tempwmsedec = t1_getwmsedec(nmsedec, compno, level, orient, bpno, qmfbid,
-                                    stepsize, numcomps, mct);
-        cumwmsedec += tempwmsedec;
-        tile->distotile += tempwmsedec;
-
-        /* Code switch "RESTART" (i.e. TERMALL) */
-        if ((cblksty & J2K_CCP_CBLKSTY_TERMALL) && !((passtype == 2) &&
-                (bpno - 1 < 0))) {
-            if (type == T1_TYPE_RAW) {
-                mqc_flush(mqc);
-                correction = 1;
-                /* correction = mqc_bypass_flush_enc(); */
-            } else {            /* correction = mqc_restart_enc(); */
-                mqc_flush(mqc);
-                correction = 1;
-            }
-            pass->term = 1;
-        } else {
-            if (((bpno < (cblk->numbps - 4) && (passtype > 0))
-                    || ((bpno == (cblk->numbps - 4)) && (passtype == 2))) &&
-                    (cblksty & J2K_CCP_CBLKSTY_LAZY)) {
-                if (type == T1_TYPE_RAW) {
-                    mqc_flush(mqc);
-                    correction = 1;
-                    /* correction = mqc_bypass_flush_enc(); */
-                } else {        /* correction = mqc_restart_enc(); */
-                    mqc_flush(mqc);
-                    correction = 1;
-                }
-                pass->term = 1;
-            } else {
-                pass->term = 0;
-            }
-        }
-
-        if (++passtype == 3) {
-            passtype = 0;
-            bpno--;
-        }
-
-        if (pass->term && bpno > 0) {
-            type = ((bpno < (cblk->numbps - 4)) && (passtype < 2) &&
-                    (cblksty & J2K_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
-            if (type == T1_TYPE_RAW) {
-                mqc_bypass_init_enc(mqc);
-            } else {
-                mqc_restart_init_enc(mqc);
-            }
-        }
-
-        pass->distortiondec = cumwmsedec;
-        pass->rate = mqc_numbytes(mqc) + correction;    /* FIXME */
-
-        /* Code-switch "RESET" */
-        if (cblksty & J2K_CCP_CBLKSTY_RESET) {
-            mqc_reset_enc(mqc);
-        }
-    }
-
-    /* Code switch "ERTERM" (i.e. PTERM) */
-    if (cblksty & J2K_CCP_CBLKSTY_PTERM) {
-        mqc_erterm_enc(mqc);
-    } else /* Default coding */ if (!(cblksty & J2K_CCP_CBLKSTY_LAZY)) {
-        mqc_flush(mqc);
-    }
-
-    cblk->totalpasses = passno;
-
-    for (passno = 0; passno < cblk->totalpasses; passno++) {
-        opj_tcd_pass_t *pass = &cblk->passes[passno];
-        if (pass->rate > mqc_numbytes(mqc)) {
-            pass->rate = mqc_numbytes(mqc);
-        }
-        /*Preventing generation of FF as last data byte of a pass*/
-        if ((pass->rate > 1) && (cblk->data[pass->rate - 1] == 0xFF)) {
-            pass->rate--;
-        }
-        pass->len = pass->rate - (passno == 0 ? 0 : cblk->passes[passno - 1].rate);
-    }
-}
-
-static void t1_decode_cblk(
-    opj_t1_t *t1,
-    opj_tcd_cblk_dec_t* cblk,
-    int orient,
-    int roishift,
-    int cblksty)
-{
-    opj_raw_t *raw = t1->raw;   /* RAW component */
-    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-
-    int bpno, passtype;
-    int segno, passno;
-    char type = T1_TYPE_MQ; /* BYPASS mode */
-
-    if (!allocate_buffers(
-                t1,
-                cblk->x1 - cblk->x0,
-                cblk->y1 - cblk->y0)) {
-        return;
-    }
-
-    bpno = roishift + cblk->numbps - 1;
-    passtype = 2;
-
-    mqc_resetstates(mqc);
-    mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46);
-    mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3);
-    mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4);
-
-    for (segno = 0; segno < cblk->numsegs; ++segno) {
-        opj_tcd_seg_t *seg = &cblk->segs[segno];
-
-        /* BYPASS mode */
-        type = ((bpno <= (cblk->numbps - 1) - 4) && (passtype < 2) &&
-                (cblksty & J2K_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
-        /* FIXME: slviewer gets here with a null pointer. Why? Partially downloaded and/or corrupt textures? */
-        if (seg->data == NULL) {
-            continue;
-        }
-        if (type == T1_TYPE_RAW) {
-            raw_init_dec(raw, (*seg->data) + seg->dataindex, seg->len);
-        } else {
-            mqc_init_dec(mqc, (*seg->data) + seg->dataindex, seg->len);
-        }
-
-        for (passno = 0; passno < seg->numpasses; ++passno) {
-            switch (passtype) {
-            case 0:
-                if (type == T1_TYPE_RAW) {
-                    t1_dec_sigpass_raw(t1, bpno + 1, orient, cblksty);
-                } else {
-                    if (cblksty & J2K_CCP_CBLKSTY_VSC) {
-                        t1_dec_sigpass_mqc_vsc(t1, bpno + 1, orient);
-                    } else {
-                        t1_dec_sigpass_mqc(t1, bpno + 1, orient);
-                    }
-                }
-                break;
-            case 1:
-                if (type == T1_TYPE_RAW) {
-                    t1_dec_refpass_raw(t1, bpno + 1, cblksty);
-                } else {
-                    if (cblksty & J2K_CCP_CBLKSTY_VSC) {
-                        t1_dec_refpass_mqc_vsc(t1, bpno + 1);
-                    } else {
-                        t1_dec_refpass_mqc(t1, bpno + 1);
-                    }
-                }
-                break;
-            case 2:
-                t1_dec_clnpass(t1, bpno + 1, orient, cblksty);
-                break;
-            }
-
-            if ((cblksty & J2K_CCP_CBLKSTY_RESET) && type == T1_TYPE_MQ) {
-                mqc_resetstates(mqc);
-                mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46);
-                mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3);
-                mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4);
-            }
-            if (++passtype == 3) {
-                passtype = 0;
-                bpno--;
-            }
-        }
-    }
-}
-
-/* ----------------------------------------------------------------------- */
-
-opj_t1_t* t1_create(opj_common_ptr cinfo)
-{
-    opj_t1_t *t1 = (opj_t1_t*) opj_malloc(sizeof(opj_t1_t));
-    if (!t1) {
-        return NULL;
-    }
-
-    t1->cinfo = cinfo;
-    /* create MQC and RAW handles */
-    t1->mqc = mqc_create();
-    t1->raw = raw_create();
-
-    t1->data = NULL;
-    t1->flags = NULL;
-    t1->datasize = 0;
-    t1->flagssize = 0;
-
-    return t1;
-}
-
-void t1_destroy(opj_t1_t *t1)
-{
-    if (t1) {
-        /* destroy MQC and RAW handles */
-        mqc_destroy(t1->mqc);
-        raw_destroy(t1->raw);
-        opj_aligned_free(t1->data);
-        opj_aligned_free(t1->flags);
-        opj_free(t1);
-    }
-}
-
-void t1_encode_cblks(
-    opj_t1_t *t1,
-    opj_tcd_tile_t *tile,
-    opj_tcp_t *tcp)
-{
-    int compno, resno, bandno, precno, cblkno;
-
-    tile->distotile = 0;        /* fixed_quality */
-
-    for (compno = 0; compno < tile->numcomps; ++compno) {
-        opj_tcd_tilecomp_t* tilec = &tile->comps[compno];
-        opj_tccp_t* tccp = &tcp->tccps[compno];
-        int tile_w = tilec->x1 - tilec->x0;
-
-        for (resno = 0; resno < tilec->numresolutions; ++resno) {
-            opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-
-            for (bandno = 0; bandno < res->numbands; ++bandno) {
-                opj_tcd_band_t* restrict band = &res->bands[bandno];
-                int bandconst = 8192 * 8192 / ((int) floor(band->stepsize * 8192));
-
-                for (precno = 0; precno < res->pw * res->ph; ++precno) {
-                    opj_tcd_precinct_t *prc = &band->precincts[precno];
-
-                    for (cblkno = 0; cblkno < prc->cw * prc->ch; ++cblkno) {
-                        opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno];
-                        int* restrict datap;
-                        int* restrict tiledp;
-                        int cblk_w;
-                        int cblk_h;
-                        int i, j;
-
-                        int x = cblk->x0 - band->x0;
-                        int y = cblk->y0 - band->y0;
-                        if (band->bandno & 1) {
-                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                            x += pres->x1 - pres->x0;
-                        }
-                        if (band->bandno & 2) {
-                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                            y += pres->y1 - pres->y0;
-                        }
-
-                        if (!allocate_buffers(
-                                    t1,
-                                    cblk->x1 - cblk->x0,
-                                    cblk->y1 - cblk->y0)) {
-                            return;
-                        }
-
-                        datap = t1->data;
-                        cblk_w = t1->w;
-                        cblk_h = t1->h;
-
-                        tiledp = &tilec->data[(y * tile_w) + x];
-                        if (tccp->qmfbid == 1) {
-                            for (j = 0; j < cblk_h; ++j) {
-                                for (i = 0; i < cblk_w; ++i) {
-                                    int tmp = tiledp[(j * tile_w) + i];
-                                    datap[(j * cblk_w) + i] = tmp << T1_NMSEDEC_FRACBITS;
-                                }
-                            }
-                        } else {        /* if (tccp->qmfbid == 0) */
-                            for (j = 0; j < cblk_h; ++j) {
-                                for (i = 0; i < cblk_w; ++i) {
-                                    int tmp = tiledp[(j * tile_w) + i];
-                                    datap[(j * cblk_w) + i] =
-                                        fix_mul(
-                                            tmp,
-                                            bandconst) >> (11 - T1_NMSEDEC_FRACBITS);
-                                }
-                            }
-                        }
-
-                        t1_encode_cblk(
-                            t1,
-                            cblk,
-                            band->bandno,
-                            compno,
-                            tilec->numresolutions - 1 - resno,
-                            tccp->qmfbid,
-                            band->stepsize,
-                            tccp->cblksty,
-                            tile->numcomps,
-                            tcp->mct,
-                            tile);
-
-                    } /* cblkno */
-                } /* precno */
-            } /* bandno */
-        } /* resno  */
-    } /* compno  */
-}
-
-void t1_decode_cblks(
-    opj_t1_t* t1,
-    opj_tcd_tilecomp_t* tilec,
-    opj_tccp_t* tccp)
-{
-    int resno, bandno, precno, cblkno;
-
-    int tile_w = tilec->x1 - tilec->x0;
-
-    for (resno = 0; resno < tilec->numresolutions; ++resno) {
-        opj_tcd_resolution_t* res = &tilec->resolutions[resno];
-
-        for (bandno = 0; bandno < res->numbands; ++bandno) {
-            opj_tcd_band_t* restrict band = &res->bands[bandno];
-
-            for (precno = 0; precno < res->pw * res->ph; ++precno) {
-                opj_tcd_precinct_t* precinct = &band->precincts[precno];
-
-                for (cblkno = 0; cblkno < precinct->cw * precinct->ch; ++cblkno) {
-                    opj_tcd_cblk_dec_t* cblk = &precinct->cblks.dec[cblkno];
-                    int* restrict datap;
-                    int cblk_w, cblk_h;
-                    int x, y;
-                    int i, j;
-
-                    t1_decode_cblk(
-                        t1,
-                        cblk,
-                        band->bandno,
-                        tccp->roishift,
-                        tccp->cblksty);
-
-                    x = cblk->x0 - band->x0;
-                    y = cblk->y0 - band->y0;
-                    if (band->bandno & 1) {
-                        opj_tcd_resolution_t* pres = &tilec->resolutions[resno - 1];
-                        x += pres->x1 - pres->x0;
-                    }
-                    if (band->bandno & 2) {
-                        opj_tcd_resolution_t* pres = &tilec->resolutions[resno - 1];
-                        y += pres->y1 - pres->y0;
-                    }
-
-                    datap = t1->data;
-                    cblk_w = t1->w;
-                    cblk_h = t1->h;
-
-                    if (tccp->roishift) {
-                        int thresh = 1 << tccp->roishift;
-                        for (j = 0; j < cblk_h; ++j) {
-                            for (i = 0; i < cblk_w; ++i) {
-                                int val = datap[(j * cblk_w) + i];
-                                int mag = abs(val);
-                                if (mag >= thresh) {
-                                    mag >>= tccp->roishift;
-                                    datap[(j * cblk_w) + i] = val < 0 ? -mag : mag;
-                                }
-                            }
-                        }
-                    }
-
-                    if (tccp->qmfbid == 1) {
-                        int* restrict tiledp = &tilec->data[(y * tile_w) + x];
-                        for (j = 0; j < cblk_h; ++j) {
-                            for (i = 0; i < cblk_w; ++i) {
-                                int tmp = datap[(j * cblk_w) + i];
-                                ((int*)tiledp)[(j * tile_w) + i] = tmp / 2;
-                            }
-                        }
-                    } else {        /* if (tccp->qmfbid == 0) */
-                        float* restrict tiledp = (float*) &tilec->data[(y * tile_w) + x];
-                        for (j = 0; j < cblk_h; ++j) {
-                            float* restrict tiledp2 = tiledp;
-                            for (i = 0; i < cblk_w; ++i) {
-                                float tmp = *datap * band->stepsize;
-                                *tiledp2 = tmp;
-                                datap++;
-                                tiledp2++;
-                            }
-                            tiledp += tile_w;
-                        }
-                    }
-                    opj_free(cblk->data);
-                    opj_free(cblk->segs);
-                } /* cblkno */
-                opj_free(precinct->cblks.dec);
-                precinct->cblks.dec = NULL;
-            } /* precno */
-        } /* bandno */
-    } /* resno */
-}
-
diff --git a/src/lib/openmj2/t1.h b/src/lib/openmj2/t1.h
deleted file mode 100644 (file)
index 7918585..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef __T1_H
-#define __T1_H
-/**
-@file t1.h
-@brief Implementation of the tier-1 coding (coding of code-block coefficients) (T1)
-
-The functions in T1.C have for goal to realize the tier-1 coding operation. The functions
-in T1.C are used by some function in TCD.C.
-*/
-
-/** @defgroup T1 T1 - Implementation of the tier-1 coding */
-/*@{*/
-
-/* ----------------------------------------------------------------------- */
-#define T1_NMSEDEC_BITS 7
-
-#define T1_SIG_NE 0x0001    /**< Context orientation : North-East direction */
-#define T1_SIG_SE 0x0002    /**< Context orientation : South-East direction */
-#define T1_SIG_SW 0x0004    /**< Context orientation : South-West direction */
-#define T1_SIG_NW 0x0008    /**< Context orientation : North-West direction */
-#define T1_SIG_N 0x0010     /**< Context orientation : North direction */
-#define T1_SIG_E 0x0020     /**< Context orientation : East direction */
-#define T1_SIG_S 0x0040     /**< Context orientation : South direction */
-#define T1_SIG_W 0x0080     /**< Context orientation : West direction */
-#define T1_SIG_OTH (T1_SIG_N|T1_SIG_NE|T1_SIG_E|T1_SIG_SE|T1_SIG_S|T1_SIG_SW|T1_SIG_W|T1_SIG_NW)
-#define T1_SIG_PRIM (T1_SIG_N|T1_SIG_E|T1_SIG_S|T1_SIG_W)
-
-#define T1_SGN_N 0x0100
-#define T1_SGN_E 0x0200
-#define T1_SGN_S 0x0400
-#define T1_SGN_W 0x0800
-#define T1_SGN (T1_SGN_N|T1_SGN_E|T1_SGN_S|T1_SGN_W)
-
-#define T1_SIG 0x1000
-#define T1_REFINE 0x2000
-#define T1_VISIT 0x4000
-
-#define T1_NUMCTXS_ZC 9
-#define T1_NUMCTXS_SC 5
-#define T1_NUMCTXS_MAG 3
-#define T1_NUMCTXS_AGG 1
-#define T1_NUMCTXS_UNI 1
-
-#define T1_CTXNO_ZC 0
-#define T1_CTXNO_SC (T1_CTXNO_ZC+T1_NUMCTXS_ZC)
-#define T1_CTXNO_MAG (T1_CTXNO_SC+T1_NUMCTXS_SC)
-#define T1_CTXNO_AGG (T1_CTXNO_MAG+T1_NUMCTXS_MAG)
-#define T1_CTXNO_UNI (T1_CTXNO_AGG+T1_NUMCTXS_AGG)
-#define T1_NUMCTXS (T1_CTXNO_UNI+T1_NUMCTXS_UNI)
-
-#define T1_NMSEDEC_FRACBITS (T1_NMSEDEC_BITS-1)
-
-#define T1_TYPE_MQ 0    /**< Normal coding using entropy coder */
-#define T1_TYPE_RAW 1   /**< No encoding the information is store under raw format in codestream (mode switch RAW)*/
-
-/* ----------------------------------------------------------------------- */
-
-typedef short flag_t;
-
-/**
-Tier-1 coding (coding of code-block coefficients)
-*/
-typedef struct opj_t1 {
-    /** codec context */
-    opj_common_ptr cinfo;
-
-    /** MQC component */
-    opj_mqc_t *mqc;
-    /** RAW component */
-    opj_raw_t *raw;
-
-    int *data;
-    flag_t *flags;
-    int w;
-    int h;
-    int datasize;
-    int flagssize;
-    int flags_stride;
-} opj_t1_t;
-
-#define MACRO_t1_flags(x,y) t1->flags[((x)*(t1->flags_stride))+(y)]
-
-/** @name Exported functions */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-/**
-Create a new T1 handle
-and initialize the look-up tables of the Tier-1 coder/decoder
-@return Returns a new T1 handle if successful, returns NULL otherwise
-@see t1_init_luts
-*/
-opj_t1_t* t1_create(opj_common_ptr cinfo);
-/**
-Destroy a previously created T1 handle
-@param t1 T1 handle to destroy
-*/
-void t1_destroy(opj_t1_t *t1);
-/**
-Encode the code-blocks of a tile
-@param t1 T1 handle
-@param tile The tile to encode
-@param tcp Tile coding parameters
-*/
-void t1_encode_cblks(opj_t1_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp);
-/**
-Decode the code-blocks of a tile
-@param t1 T1 handle
-@param tilec The tile to decode
-@param tccp Tile coding parameters
-*/
-void t1_decode_cblks(opj_t1_t* t1, opj_tcd_tilecomp_t* tilec, opj_tccp_t* tccp);
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif /* __T1_H */
diff --git a/src/lib/openmj2/t1_luts.h b/src/lib/openmj2/t1_luts.h
deleted file mode 100644 (file)
index 278a594..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-/* This file was automatically generated by t1_generate_luts.c */
-
-static char lut_ctxno_zc[1024] = {
-    0, 1, 1, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-    5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-    5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-    0, 1, 1, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-    5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-    0, 1, 1, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-    5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-    5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-    0, 3, 3, 6, 3, 6, 6, 8, 3, 6, 6, 8, 6, 8, 8, 8, 1, 4, 4, 7, 4, 7, 7, 8, 4, 7, 7, 8, 7, 8, 8, 8,
-    1, 4, 4, 7, 4, 7, 7, 8, 4, 7, 7, 8, 7, 8, 8, 8, 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8,
-    1, 4, 4, 7, 4, 7, 7, 8, 4, 7, 7, 8, 7, 8, 8, 8, 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8,
-    2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8, 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8,
-    1, 4, 4, 7, 4, 7, 7, 8, 4, 7, 7, 8, 7, 8, 8, 8, 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8,
-    2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8, 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8,
-    2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8, 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8,
-    2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8, 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8
-};
-
-static char lut_ctxno_sc[256] = {
-    0x9, 0xa, 0xc, 0xd, 0xa, 0xa, 0xd, 0xd, 0xc, 0xd, 0xc, 0xd, 0xd, 0xd, 0xd, 0xd,
-    0x9, 0xa, 0xc, 0xb, 0xa, 0x9, 0xd, 0xc, 0xc, 0xb, 0xc, 0xb, 0xd, 0xc, 0xd, 0xc,
-    0x9, 0xa, 0xc, 0xb, 0xa, 0xa, 0xb, 0xb, 0xc, 0xd, 0x9, 0xa, 0xd, 0xd, 0xa, 0xa,
-    0x9, 0xa, 0xc, 0xd, 0xa, 0x9, 0xb, 0xc, 0xc, 0xb, 0x9, 0xa, 0xd, 0xc, 0xa, 0x9,
-    0x9, 0xa, 0xc, 0xd, 0xa, 0x9, 0xb, 0xc, 0xc, 0xd, 0xc, 0xd, 0xb, 0xc, 0xb, 0xc,
-    0x9, 0xa, 0xc, 0xb, 0xa, 0xa, 0xb, 0xb, 0xc, 0xb, 0xc, 0xb, 0xb, 0xb, 0xb, 0xb,
-    0x9, 0xa, 0xc, 0xb, 0xa, 0x9, 0xd, 0xc, 0xc, 0xd, 0x9, 0xa, 0xb, 0xc, 0xa, 0x9,
-    0x9, 0xa, 0xc, 0xd, 0xa, 0xa, 0xd, 0xd, 0xc, 0xb, 0x9, 0xa, 0xb, 0xb, 0xa, 0xa,
-    0x9, 0xa, 0xc, 0xd, 0xa, 0xa, 0xd, 0xd, 0xc, 0xb, 0x9, 0xa, 0xb, 0xb, 0xa, 0xa,
-    0x9, 0xa, 0xc, 0xb, 0xa, 0x9, 0xd, 0xc, 0xc, 0xd, 0x9, 0xa, 0xb, 0xc, 0xa, 0x9,
-    0x9, 0xa, 0xc, 0xb, 0xa, 0xa, 0xb, 0xb, 0xc, 0xb, 0xc, 0xb, 0xb, 0xb, 0xb, 0xb,
-    0x9, 0xa, 0xc, 0xd, 0xa, 0x9, 0xb, 0xc, 0xc, 0xd, 0xc, 0xd, 0xb, 0xc, 0xb, 0xc,
-    0x9, 0xa, 0xc, 0xd, 0xa, 0x9, 0xb, 0xc, 0xc, 0xb, 0x9, 0xa, 0xd, 0xc, 0xa, 0x9,
-    0x9, 0xa, 0xc, 0xb, 0xa, 0xa, 0xb, 0xb, 0xc, 0xd, 0x9, 0xa, 0xd, 0xd, 0xa, 0xa,
-    0x9, 0xa, 0xc, 0xb, 0xa, 0x9, 0xd, 0xc, 0xc, 0xb, 0xc, 0xb, 0xd, 0xc, 0xd, 0xc,
-    0x9, 0xa, 0xc, 0xd, 0xa, 0xa, 0xd, 0xd, 0xc, 0xd, 0xc, 0xd, 0xd, 0xd, 0xd, 0xd
-};
-
-static char lut_spb[256] = {
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0,
-    0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1,
-    0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0,
-    0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1,
-    0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
-};
-
-static short lut_nmsedec_sig[1 << T1_NMSEDEC_BITS] = {
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0180, 0x0300, 0x0480, 0x0600, 0x0780, 0x0900, 0x0a80,
-    0x0c00, 0x0d80, 0x0f00, 0x1080, 0x1200, 0x1380, 0x1500, 0x1680,
-    0x1800, 0x1980, 0x1b00, 0x1c80, 0x1e00, 0x1f80, 0x2100, 0x2280,
-    0x2400, 0x2580, 0x2700, 0x2880, 0x2a00, 0x2b80, 0x2d00, 0x2e80,
-    0x3000, 0x3180, 0x3300, 0x3480, 0x3600, 0x3780, 0x3900, 0x3a80,
-    0x3c00, 0x3d80, 0x3f00, 0x4080, 0x4200, 0x4380, 0x4500, 0x4680,
-    0x4800, 0x4980, 0x4b00, 0x4c80, 0x4e00, 0x4f80, 0x5100, 0x5280,
-    0x5400, 0x5580, 0x5700, 0x5880, 0x5a00, 0x5b80, 0x5d00, 0x5e80,
-    0x6000, 0x6180, 0x6300, 0x6480, 0x6600, 0x6780, 0x6900, 0x6a80,
-    0x6c00, 0x6d80, 0x6f00, 0x7080, 0x7200, 0x7380, 0x7500, 0x7680
-};
-
-static short lut_nmsedec_sig0[1 << T1_NMSEDEC_BITS] = {
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0080, 0x0080,
-    0x0080, 0x0080, 0x0100, 0x0100, 0x0100, 0x0180, 0x0180, 0x0200,
-    0x0200, 0x0280, 0x0280, 0x0300, 0x0300, 0x0380, 0x0400, 0x0400,
-    0x0480, 0x0500, 0x0580, 0x0580, 0x0600, 0x0680, 0x0700, 0x0780,
-    0x0800, 0x0880, 0x0900, 0x0980, 0x0a00, 0x0a80, 0x0b80, 0x0c00,
-    0x0c80, 0x0d00, 0x0e00, 0x0e80, 0x0f00, 0x1000, 0x1080, 0x1180,
-    0x1200, 0x1300, 0x1380, 0x1480, 0x1500, 0x1600, 0x1700, 0x1780,
-    0x1880, 0x1980, 0x1a80, 0x1b00, 0x1c00, 0x1d00, 0x1e00, 0x1f00,
-    0x2000, 0x2100, 0x2200, 0x2300, 0x2400, 0x2500, 0x2680, 0x2780,
-    0x2880, 0x2980, 0x2b00, 0x2c00, 0x2d00, 0x2e80, 0x2f80, 0x3100,
-    0x3200, 0x3380, 0x3480, 0x3600, 0x3700, 0x3880, 0x3a00, 0x3b00,
-    0x3c80, 0x3e00, 0x3f80, 0x4080, 0x4200, 0x4380, 0x4500, 0x4680,
-    0x4800, 0x4980, 0x4b00, 0x4c80, 0x4e00, 0x4f80, 0x5180, 0x5300,
-    0x5480, 0x5600, 0x5800, 0x5980, 0x5b00, 0x5d00, 0x5e80, 0x6080,
-    0x6200, 0x6400, 0x6580, 0x6780, 0x6900, 0x6b00, 0x6d00, 0x6e80,
-    0x7080, 0x7280, 0x7480, 0x7600, 0x7800, 0x7a00, 0x7c00, 0x7e00
-};
-
-static short lut_nmsedec_ref[1 << T1_NMSEDEC_BITS] = {
-    0x1800, 0x1780, 0x1700, 0x1680, 0x1600, 0x1580, 0x1500, 0x1480,
-    0x1400, 0x1380, 0x1300, 0x1280, 0x1200, 0x1180, 0x1100, 0x1080,
-    0x1000, 0x0f80, 0x0f00, 0x0e80, 0x0e00, 0x0d80, 0x0d00, 0x0c80,
-    0x0c00, 0x0b80, 0x0b00, 0x0a80, 0x0a00, 0x0980, 0x0900, 0x0880,
-    0x0800, 0x0780, 0x0700, 0x0680, 0x0600, 0x0580, 0x0500, 0x0480,
-    0x0400, 0x0380, 0x0300, 0x0280, 0x0200, 0x0180, 0x0100, 0x0080,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0080, 0x0100, 0x0180, 0x0200, 0x0280, 0x0300, 0x0380,
-    0x0400, 0x0480, 0x0500, 0x0580, 0x0600, 0x0680, 0x0700, 0x0780,
-    0x0800, 0x0880, 0x0900, 0x0980, 0x0a00, 0x0a80, 0x0b00, 0x0b80,
-    0x0c00, 0x0c80, 0x0d00, 0x0d80, 0x0e00, 0x0e80, 0x0f00, 0x0f80,
-    0x1000, 0x1080, 0x1100, 0x1180, 0x1200, 0x1280, 0x1300, 0x1380,
-    0x1400, 0x1480, 0x1500, 0x1580, 0x1600, 0x1680, 0x1700, 0x1780
-};
-
-static short lut_nmsedec_ref0[1 << T1_NMSEDEC_BITS] = {
-    0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00, 0x1b00, 0x1a80, 0x1980,
-    0x1880, 0x1780, 0x1700, 0x1600, 0x1500, 0x1480, 0x1380, 0x1300,
-    0x1200, 0x1180, 0x1080, 0x1000, 0x0f00, 0x0e80, 0x0e00, 0x0d00,
-    0x0c80, 0x0c00, 0x0b80, 0x0a80, 0x0a00, 0x0980, 0x0900, 0x0880,
-    0x0800, 0x0780, 0x0700, 0x0680, 0x0600, 0x0580, 0x0580, 0x0500,
-    0x0480, 0x0400, 0x0400, 0x0380, 0x0300, 0x0300, 0x0280, 0x0280,
-    0x0200, 0x0200, 0x0180, 0x0180, 0x0100, 0x0100, 0x0100, 0x0080,
-    0x0080, 0x0080, 0x0080, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0080, 0x0080,
-    0x0080, 0x0080, 0x0100, 0x0100, 0x0100, 0x0180, 0x0180, 0x0200,
-    0x0200, 0x0280, 0x0280, 0x0300, 0x0300, 0x0380, 0x0400, 0x0400,
-    0x0480, 0x0500, 0x0580, 0x0580, 0x0600, 0x0680, 0x0700, 0x0780,
-    0x0800, 0x0880, 0x0900, 0x0980, 0x0a00, 0x0a80, 0x0b80, 0x0c00,
-    0x0c80, 0x0d00, 0x0e00, 0x0e80, 0x0f00, 0x1000, 0x1080, 0x1180,
-    0x1200, 0x1300, 0x1380, 0x1480, 0x1500, 0x1600, 0x1700, 0x1780,
-    0x1880, 0x1980, 0x1a80, 0x1b00, 0x1c00, 0x1d00, 0x1e00, 0x1f00
-};
-
diff --git a/src/lib/openmj2/t2.c b/src/lib/openmj2/t2.c
deleted file mode 100644 (file)
index c0c019d..0000000
+++ /dev/null
@@ -1,884 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "opj_includes.h"
-
-/** @defgroup T2 T2 - Implementation of a tier-2 coding */
-/*@{*/
-
-/** @name Local static functions */
-/*@{*/
-
-static void t2_putcommacode(opj_bio_t *bio, int n);
-static int t2_getcommacode(opj_bio_t *bio);
-/**
-Variable length code for signalling delta Zil (truncation point)
-@param bio Bit Input/Output component
-@param n delta Zil
-*/
-static void t2_putnumpasses(opj_bio_t *bio, int n);
-static int t2_getnumpasses(opj_bio_t *bio);
-/**
-Encode a packet of a tile to a destination buffer
-@param tile Tile for which to write the packets
-@param tcp Tile coding parameters
-@param pi Packet identity
-@param dest Destination buffer
-@param len Length of the destination buffer
-@param cstr_info Codestream information structure
-@param tileno Number of the tile encoded
-@return
-*/
-static int t2_encode_packet(opj_tcd_tile_t *tile, opj_tcp_t *tcp,
-                            opj_pi_iterator_t *pi, unsigned char *dest, int len,
-                            opj_codestream_info_t *cstr_info, int tileno);
-/**
-@param cblk
-@param index
-@param cblksty
-@param first
-*/
-static opj_bool t2_init_seg(opj_tcd_cblk_dec_t* cblk, int index, int cblksty,
-                            int first);
-/**
-Decode a packet of a tile from a source buffer
-@param t2 T2 handle
-@param src Source buffer
-@param len Length of the source buffer
-@param tile Tile for which to write the packets
-@param tcp Tile coding parameters
-@param pi Packet identity
-@param pack_info Packet information
-@return
-*/
-static int t2_decode_packet(opj_t2_t* t2, unsigned char *src, int len,
-                            opj_tcd_tile_t *tile,
-                            opj_tcp_t *tcp, opj_pi_iterator_t *pi, opj_packet_info_t *pack_info);
-
-/*@}*/
-
-/*@}*/
-
-/* ----------------------------------------------------------------------- */
-
-/* #define RESTART 0x04 */
-
-static void t2_putcommacode(opj_bio_t *bio, int n)
-{
-    while (--n >= 0) {
-        bio_write(bio, 1, 1);
-    }
-    bio_write(bio, 0, 1);
-}
-
-static int t2_getcommacode(opj_bio_t *bio)
-{
-    int n;
-    for (n = 0; bio_read(bio, 1); n++) {
-        ;
-    }
-    return n;
-}
-
-static void t2_putnumpasses(opj_bio_t *bio, int n)
-{
-    if (n == 1) {
-        bio_write(bio, 0, 1);
-    } else if (n == 2) {
-        bio_write(bio, 2, 2);
-    } else if (n <= 5) {
-        bio_write(bio, 0xc | (n - 3), 4);
-    } else if (n <= 36) {
-        bio_write(bio, 0x1e0 | (n - 6), 9);
-    } else if (n <= 164) {
-        bio_write(bio, 0xff80 | (n - 37), 16);
-    }
-}
-
-static int t2_getnumpasses(opj_bio_t *bio)
-{
-    int n;
-    if (!bio_read(bio, 1)) {
-        return 1;
-    }
-    if (!bio_read(bio, 1)) {
-        return 2;
-    }
-    if ((n = bio_read(bio, 2)) != 3) {
-        return (3 + n);
-    }
-    if ((n = bio_read(bio, 5)) != 31) {
-        return (6 + n);
-    }
-    return (37 + bio_read(bio, 7));
-}
-
-static int t2_encode_packet(opj_tcd_tile_t * tile, opj_tcp_t * tcp,
-                            opj_pi_iterator_t *pi, unsigned char *dest, int length,
-                            opj_codestream_info_t *cstr_info, int tileno)
-{
-    int bandno, cblkno;
-    unsigned char *c = dest;
-
-    int compno = pi->compno;    /* component value */
-    int resno  = pi->resno;     /* resolution level value */
-    int precno = pi->precno;    /* precinct value */
-    int layno  = pi->layno;     /* quality layer value */
-
-    opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-    opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-
-    opj_bio_t *bio = NULL;  /* BIO component */
-
-    /* <SOP 0xff91> */
-    if (tcp->csty & J2K_CP_CSTY_SOP) {
-        c[0] = 255;
-        c[1] = 145;
-        c[2] = 0;
-        c[3] = 4;
-        c[4] = (unsigned char)((tile->packno % 65536) / 256);
-        c[5] = (unsigned char)((tile->packno % 65536) % 256);
-        c += 6;
-    }
-    /* </SOP> */
-
-    if (!layno) {
-        for (bandno = 0; bandno < res->numbands; bandno++) {
-            opj_tcd_band_t *band = &res->bands[bandno];
-            opj_tcd_precinct_t *prc = &band->precincts[precno];
-            tgt_reset(prc->incltree);
-            tgt_reset(prc->imsbtree);
-            for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-                opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno];
-                cblk->numpasses = 0;
-                tgt_setvalue(prc->imsbtree, cblkno, band->numbps - cblk->numbps);
-            }
-        }
-    }
-
-    bio = bio_create();
-    bio_init_enc(bio, c, length);
-    bio_write(bio, 1, 1);       /* Empty header bit */
-
-    /* Writing Packet header */
-    for (bandno = 0; bandno < res->numbands; bandno++) {
-        opj_tcd_band_t *band = &res->bands[bandno];
-        opj_tcd_precinct_t *prc = &band->precincts[precno];
-        for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-            opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno];
-            opj_tcd_layer_t *layer = &cblk->layers[layno];
-            if (!cblk->numpasses && layer->numpasses) {
-                tgt_setvalue(prc->incltree, cblkno, layno);
-            }
-        }
-        for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-            opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno];
-            opj_tcd_layer_t *layer = &cblk->layers[layno];
-            int increment = 0;
-            int nump = 0;
-            int len = 0, passno;
-            /* cblk inclusion bits */
-            if (!cblk->numpasses) {
-                tgt_encode(bio, prc->incltree, cblkno, layno + 1);
-            } else {
-                bio_write(bio, layer->numpasses != 0, 1);
-            }
-            /* if cblk not included, go to the next cblk  */
-            if (!layer->numpasses) {
-                continue;
-            }
-            /* if first instance of cblk --> zero bit-planes information */
-            if (!cblk->numpasses) {
-                cblk->numlenbits = 3;
-                tgt_encode(bio, prc->imsbtree, cblkno, 999);
-            }
-            /* number of coding passes included */
-            t2_putnumpasses(bio, layer->numpasses);
-
-            /* computation of the increase of the length indicator and insertion in the header     */
-            for (passno = cblk->numpasses; passno < cblk->numpasses + layer->numpasses;
-                    passno++) {
-                opj_tcd_pass_t *pass = &cblk->passes[passno];
-                nump++;
-                len += pass->len;
-                if (pass->term || passno == (cblk->numpasses + layer->numpasses) - 1) {
-                    increment = int_max(increment,
-                                        int_floorlog2(len) + 1 - (cblk->numlenbits + int_floorlog2(nump)));
-                    len = 0;
-                    nump = 0;
-                }
-            }
-            t2_putcommacode(bio, increment);
-
-            /* computation of the new Length indicator */
-            cblk->numlenbits += increment;
-
-            /* insertion of the codeword segment length */
-            for (passno = cblk->numpasses; passno < cblk->numpasses + layer->numpasses;
-                    passno++) {
-                opj_tcd_pass_t *pass = &cblk->passes[passno];
-                nump++;
-                len += pass->len;
-                if (pass->term || passno == (cblk->numpasses + layer->numpasses) - 1) {
-                    bio_write(bio, len, cblk->numlenbits + int_floorlog2(nump));
-                    len = 0;
-                    nump = 0;
-                }
-            }
-        }
-    }
-
-    if (bio_flush(bio)) {
-        bio_destroy(bio);
-        return -999;        /* modified to eliminate longjmp !! */
-    }
-
-    c += bio_numbytes(bio);
-    bio_destroy(bio);
-
-    /* <EPH 0xff92> */
-    if (tcp->csty & J2K_CP_CSTY_EPH) {
-        c[0] = 255;
-        c[1] = 146;
-        c += 2;
-    }
-    /* </EPH> */
-
-    /* << INDEX */
-    /* End of packet header position. Currently only represents the distance to start of packet
-    // Will be updated later by incrementing with packet start value */
-    if (cstr_info && cstr_info->index_write) {
-        opj_packet_info_t *info_PK = &cstr_info->tile[tileno].packet[cstr_info->packno];
-        info_PK->end_ph_pos = (int)(c - dest);
-    }
-    /* INDEX >> */
-
-    /* Writing the packet body */
-
-    for (bandno = 0; bandno < res->numbands; bandno++) {
-        opj_tcd_band_t *band = &res->bands[bandno];
-        opj_tcd_precinct_t *prc = &band->precincts[precno];
-        for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-            opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno];
-            opj_tcd_layer_t *layer = &cblk->layers[layno];
-            if (!layer->numpasses) {
-                continue;
-            }
-            if (c + layer->len > dest + length) {
-                return -999;
-            }
-
-            memcpy(c, layer->data, layer->len);
-            cblk->numpasses += layer->numpasses;
-            c += layer->len;
-            /* << INDEX */
-            if (cstr_info && cstr_info->index_write) {
-                opj_packet_info_t *info_PK = &cstr_info->tile[tileno].packet[cstr_info->packno];
-                info_PK->disto += layer->disto;
-                if (cstr_info->D_max < info_PK->disto) {
-                    cstr_info->D_max = info_PK->disto;
-                }
-            }
-            /* INDEX >> */
-        }
-    }
-
-    return (c - dest);
-}
-
-static opj_bool t2_init_seg(opj_tcd_cblk_dec_t* cblk, int index, int cblksty,
-                            int first)
-{
-    opj_tcd_seg_t* seg;
-    opj_tcd_seg_t* segs;
-    segs = (opj_tcd_seg_t*) opj_realloc(cblk->segs,
-                                        (index + 1) * sizeof(opj_tcd_seg_t));
-
-    if (segs == NULL) {
-        return OPJ_FALSE;
-    }
-    cblk->segs = segs;
-
-    seg = &cblk->segs[index];
-    seg->data = NULL;
-    seg->dataindex = 0;
-    seg->numpasses = 0;
-    seg->len = 0;
-    if (cblksty & J2K_CCP_CBLKSTY_TERMALL) {
-        seg->maxpasses = 1;
-    } else if (cblksty & J2K_CCP_CBLKSTY_LAZY) {
-        if (first) {
-            seg->maxpasses = 10;
-        } else {
-            seg->maxpasses = (((seg - 1)->maxpasses == 1) ||
-                              ((seg - 1)->maxpasses == 10)) ? 2 : 1;
-        }
-    } else {
-        seg->maxpasses = 109;
-    }
-
-    return OPJ_TRUE;
-}
-
-static int t2_decode_packet(opj_t2_t* t2, unsigned char *src, int len,
-                            opj_tcd_tile_t *tile,
-                            opj_tcp_t *tcp, opj_pi_iterator_t *pi, opj_packet_info_t *pack_info)
-{
-    int bandno, cblkno;
-    unsigned char *c = src;
-
-    opj_cp_t *cp = t2->cp;
-
-    int compno = pi->compno;    /* component value */
-    int resno  = pi->resno;     /* resolution level value */
-    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 */
-
-    if (layno == 0) {
-        for (bandno = 0; bandno < res->numbands; bandno++) {
-            opj_tcd_band_t *band = &res->bands[bandno];
-            opj_tcd_precinct_t *prc = &band->precincts[precno];
-
-            if ((band->x1 - band->x0 == 0) || (band->y1 - band->y0 == 0)) {
-                continue;
-            }
-
-            tgt_reset(prc->incltree);
-            tgt_reset(prc->imsbtree);
-            for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-                opj_tcd_cblk_dec_t* cblk = &prc->cblks.dec[cblkno];
-                cblk->numsegs = 0;
-            }
-        }
-    }
-
-    /* SOP markers */
-
-    if (tcp->csty & J2K_CP_CSTY_SOP) {
-        if ((*c) != 0xff || (*(c + 1) != 0x91)) {
-            opj_event_msg(t2->cinfo, EVT_WARNING, "Expected SOP marker\n");
-        } else {
-            c += 6;
-        }
-
-        /** TODO : check the Nsop value */
-    }
-
-    /*
-    When the marker PPT/PPM is used the packet header are store in PPT/PPM marker
-    This part deal with this caracteristic
-    step 1: Read packet header in the saved structure
-    step 2: Return to codestream for decoding
-    */
-
-    bio = bio_create();
-
-    if (cp->ppm == 1) {     /* PPM */
-        hd = cp->ppm_data;
-        bio_init_dec(bio, hd, cp->ppm_len);
-    } else if (tcp->ppt == 1) { /* PPT */
-        hd = tcp->ppt_data;
-        bio_init_dec(bio, hd, tcp->ppt_len);
-    } else {            /* Normal Case */
-        hd = c;
-        bio_init_dec(bio, hd, src + len - hd);
-    }
-
-    present = bio_read(bio, 1);
-
-    if (!present) {
-        bio_inalign(bio);
-        hd += bio_numbytes(bio);
-        bio_destroy(bio);
-
-        /* EPH markers */
-
-        if (tcp->csty & J2K_CP_CSTY_EPH) {
-            if ((*hd) != 0xff || (*(hd + 1) != 0x92)) {
-                printf("Error : expected EPH marker\n");
-            } else {
-                hd += 2;
-            }
-        }
-
-        /* << INDEX */
-        /* End of packet header position. Currently only represents the distance to start of packet
-        // Will be updated later by incrementing with packet start value*/
-        if (pack_info) {
-            pack_info->end_ph_pos = (int)(c - src);
-        }
-        /* INDEX >> */
-
-        if (cp->ppm == 1) {     /* PPM case */
-            cp->ppm_len += cp->ppm_data - hd;
-            cp->ppm_data = hd;
-            return (c - src);
-        }
-        if (tcp->ppt == 1) {    /* PPT case */
-            tcp->ppt_len += tcp->ppt_data - hd;
-            tcp->ppt_data = hd;
-            return (c - src);
-        }
-
-        return (hd - src);
-    }
-
-    for (bandno = 0; bandno < res->numbands; bandno++) {
-        opj_tcd_band_t *band = &res->bands[bandno];
-        opj_tcd_precinct_t *prc = &band->precincts[precno];
-
-        if ((band->x1 - band->x0 == 0) || (band->y1 - band->y0 == 0)) {
-            continue;
-        }
-
-        for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-            int included, increment, n, segno;
-            opj_tcd_cblk_dec_t* cblk = &prc->cblks.dec[cblkno];
-            /* if cblk not yet included before --> inclusion tagtree */
-            if (!cblk->numsegs) {
-                included = tgt_decode(bio, prc->incltree, cblkno, layno + 1);
-                /* else one bit */
-            } else {
-                included = bio_read(bio, 1);
-            }
-            /* if cblk not included */
-            if (!included) {
-                cblk->numnewpasses = 0;
-                continue;
-            }
-            /* if cblk not yet included --> zero-bitplane tagtree */
-            if (!cblk->numsegs) {
-                int i, numimsbs;
-                for (i = 0; !tgt_decode(bio, prc->imsbtree, cblkno, i); i++) {
-                    ;
-                }
-                numimsbs = i - 1;
-                cblk->numbps = band->numbps - numimsbs;
-                cblk->numlenbits = 3;
-            }
-            /* number of coding passes */
-            cblk->numnewpasses = t2_getnumpasses(bio);
-            increment = t2_getcommacode(bio);
-            /* length indicator increment */
-            cblk->numlenbits += increment;
-            segno = 0;
-            if (!cblk->numsegs) {
-                if (!t2_init_seg(cblk, segno, tcp->tccps[compno].cblksty, 1)) {
-                    opj_event_msg(t2->cinfo, EVT_ERROR, "Out of memory\n");
-                    bio_destroy(bio);
-                    return -999;
-                }
-            } else {
-                segno = cblk->numsegs - 1;
-                if (cblk->segs[segno].numpasses == cblk->segs[segno].maxpasses) {
-                    ++segno;
-                    if (!t2_init_seg(cblk, segno, tcp->tccps[compno].cblksty, 0)) {
-                        opj_event_msg(t2->cinfo, EVT_ERROR, "Out of memory\n");
-                        bio_destroy(bio);
-                        return -999;
-                    }
-                }
-            }
-            n = cblk->numnewpasses;
-
-            do {
-                cblk->segs[segno].numnewpasses = int_min(cblk->segs[segno].maxpasses -
-                                                 cblk->segs[segno].numpasses, n);
-                cblk->segs[segno].newlen = bio_read(bio,
-                                                    cblk->numlenbits + int_floorlog2(cblk->segs[segno].numnewpasses));
-                n -= cblk->segs[segno].numnewpasses;
-                if (n > 0) {
-                    ++segno;
-                    if (!t2_init_seg(cblk, segno, tcp->tccps[compno].cblksty, 0)) {
-                        opj_event_msg(t2->cinfo, EVT_ERROR, "Out of memory\n");
-                        bio_destroy(bio);
-                        return -999;
-                    }
-                }
-            } while (n > 0);
-        }
-    }
-
-    if (bio_inalign(bio)) {
-        bio_destroy(bio);
-        return -999;
-    }
-
-    hd += bio_numbytes(bio);
-    bio_destroy(bio);
-
-    /* EPH markers */
-    if (tcp->csty & J2K_CP_CSTY_EPH) {
-        if ((*hd) != 0xff || (*(hd + 1) != 0x92)) {
-            opj_event_msg(t2->cinfo, EVT_ERROR, "Expected EPH marker\n");
-            return -999;
-        } else {
-            hd += 2;
-        }
-    }
-
-    /* << INDEX */
-    /* End of packet header position. Currently only represents the distance to start of packet
-    // Will be updated later by incrementing with packet start value*/
-    if (pack_info) {
-        pack_info->end_ph_pos = (int)(hd - src);
-    }
-    /* INDEX >> */
-
-    if (cp->ppm == 1) {
-        cp->ppm_len += cp->ppm_data - hd;
-        cp->ppm_data = hd;
-    } else if (tcp->ppt == 1) {
-        tcp->ppt_len += tcp->ppt_data - hd;
-        tcp->ppt_data = hd;
-    } else {
-        c = hd;
-    }
-
-    for (bandno = 0; bandno < res->numbands; bandno++) {
-        opj_tcd_band_t *band = &res->bands[bandno];
-        opj_tcd_precinct_t *prc = &band->precincts[precno];
-
-        if ((band->x1 - band->x0 == 0) || (band->y1 - band->y0 == 0)) {
-            continue;
-        }
-
-        for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-            opj_tcd_cblk_dec_t* cblk = &prc->cblks.dec[cblkno];
-            opj_tcd_seg_t *seg = NULL;
-            if (!cblk->numnewpasses) {
-                continue;
-            }
-            if (!cblk->numsegs) {
-                seg = &cblk->segs[0];
-                cblk->numsegs++;
-                cblk->len = 0;
-            } else {
-                seg = &cblk->segs[cblk->numsegs - 1];
-                if (seg->numpasses == seg->maxpasses) {
-                    seg++;
-                    cblk->numsegs++;
-                }
-            }
-
-            do {
-                if (c + seg->newlen > src + len) {
-                    return -999;
-                }
-
-#ifdef USE_JPWL
-                /* we need here a j2k handle to verify if making a check to
-                the validity of cblocks parameters is selected from user (-W) */
-
-                /* let's check that we are not exceeding */
-                if ((cblk->len + seg->newlen) > 8192) {
-                    opj_event_msg(t2->cinfo, EVT_WARNING,
-                                  "JPWL: segment too long (%d) for codeblock %d (p=%d, b=%d, r=%d, c=%d)\n",
-                                  seg->newlen, cblkno, precno, bandno, resno, compno);
-                    if (!JPWL_ASSUME) {
-                        opj_event_msg(t2->cinfo, EVT_ERROR, "JPWL: giving up\n");
-                        return -999;
-                    }
-                    seg->newlen = 8192 - cblk->len;
-                    opj_event_msg(t2->cinfo, EVT_WARNING, "      - truncating segment to %d\n",
-                                  seg->newlen);
-                    break;
-                };
-
-#endif /* USE_JPWL */
-
-                cblk->data = (unsigned char*) opj_realloc(cblk->data,
-                             (cblk->len + seg->newlen) * sizeof(unsigned char));
-                memcpy(cblk->data + cblk->len, c, seg->newlen);
-                if (seg->numpasses == 0) {
-                    seg->data = &cblk->data;
-                    seg->dataindex = cblk->len;
-                }
-                c += seg->newlen;
-                cblk->len += seg->newlen;
-                seg->len += seg->newlen;
-                seg->numpasses += seg->numnewpasses;
-                cblk->numnewpasses -= seg->numnewpasses;
-                if (cblk->numnewpasses > 0) {
-                    seg++;
-                    cblk->numsegs++;
-                }
-            } while (cblk->numnewpasses > 0);
-        }
-    }
-
-    return (c - src);
-}
-
-/* ----------------------------------------------------------------------- */
-
-int t2_encode_packets(opj_t2_t* t2, int tileno, opj_tcd_tile_t *tile,
-                      int maxlayers, unsigned char *dest, int len, opj_codestream_info_t *cstr_info,
-                      int tpnum, int tppos, int pino, J2K_T2_MODE t2_mode, int cur_totnum_tp)
-{
-    unsigned char *c = dest;
-    int e = 0;
-    int compno;
-    opj_pi_iterator_t *pi = NULL;
-    int poc;
-    opj_image_t *image = t2->image;
-    opj_cp_t *cp = t2->cp;
-    opj_tcp_t *tcp = &cp->tcps[tileno];
-    int pocno = cp->cinema == CINEMA4K_24 ? 2 : 1;
-    int maxcomp = cp->max_comp_size > 0 ? image->numcomps : 1;
-
-    pi = pi_initialise_encode(image, cp, tileno, t2_mode);
-    if (!pi) {
-        /* TODO: throw an error */
-        return -999;
-    }
-
-    if (t2_mode == THRESH_CALC) { /* Calculating threshold */
-        for (compno = 0; compno < maxcomp; compno++) {
-            for (poc = 0; poc < pocno ; poc++) {
-                int comp_len = 0;
-                int tpnum = compno;
-                if (pi_create_encode(pi, cp, tileno, poc, tpnum, tppos, t2_mode,
-                                     cur_totnum_tp)) {
-                    opj_event_msg(t2->cinfo, EVT_ERROR, "Error initializing Packet Iterator\n");
-                    pi_destroy(pi, cp, tileno);
-                    return -999;
-                }
-                while (pi_next(&pi[poc])) {
-                    if (pi[poc].layno < maxlayers) {
-                        e = t2_encode_packet(tile, &cp->tcps[tileno], &pi[poc], c, dest + len - c,
-                                             cstr_info, tileno);
-                        comp_len = comp_len + e;
-                        if (e == -999) {
-                            break;
-                        } else {
-                            c += e;
-                        }
-                    }
-                }
-                if (e == -999) {
-                    break;
-                }
-                if (cp->max_comp_size) {
-                    if (comp_len > cp->max_comp_size) {
-                        e = -999;
-                        break;
-                    }
-                }
-            }
-            if (e == -999) {
-                break;
-            }
-        }
-    } else { /* t2_mode == FINAL_PASS  */
-        pi_create_encode(pi, cp, tileno, pino, tpnum, tppos, t2_mode, cur_totnum_tp);
-        while (pi_next(&pi[pino])) {
-            if (pi[pino].layno < maxlayers) {
-                e = t2_encode_packet(tile, &cp->tcps[tileno], &pi[pino], c, dest + len - c,
-                                     cstr_info, tileno);
-                if (e == -999) {
-                    break;
-                } else {
-                    c += e;
-                }
-                /* INDEX >> */
-                if (cstr_info) {
-                    if (cstr_info->index_write) {
-                        opj_tile_info_t *info_TL = &cstr_info->tile[tileno];
-                        opj_packet_info_t *info_PK = &info_TL->packet[cstr_info->packno];
-                        if (!cstr_info->packno) {
-                            info_PK->start_pos = info_TL->end_header + 1;
-                        } else {
-                            info_PK->start_pos = ((cp->tp_on | tcp->POC) &&
-                                                  info_PK->start_pos) ? info_PK->start_pos : info_TL->packet[cstr_info->packno -
-                                                                            1].end_pos + 1;
-                        }
-                        info_PK->end_pos = info_PK->start_pos + e - 1;
-                        info_PK->end_ph_pos += info_PK->start_pos -
-                                               1;  /* End of packet header which now only represents the distance
-                                                                                                                        // to start of packet is incremented by value of start of packet*/
-                    }
-
-                    cstr_info->packno++;
-                }
-                /* << INDEX */
-                tile->packno++;
-            }
-        }
-    }
-
-    pi_destroy(pi, cp, tileno);
-
-    if (e == -999) {
-        return e;
-    }
-
-    return (c - dest);
-}
-
-int t2_decode_packets(opj_t2_t *t2, unsigned char *src, int len, int tileno,
-                      opj_tcd_tile_t *tile, opj_codestream_info_t *cstr_info)
-{
-    unsigned char *c = src;
-    opj_pi_iterator_t *pi;
-    int pino, e = 0;
-    int n = 0, curtp = 0;
-    int tp_start_packno;
-
-    opj_image_t *image = t2->image;
-    opj_cp_t *cp = t2->cp;
-
-    /* create a packet iterator */
-    pi = pi_create_decode(image, cp, tileno);
-    if (!pi) {
-        /* TODO: throw an error */
-        return -999;
-    }
-
-    tp_start_packno = 0;
-
-    for (pino = 0; pino <= cp->tcps[tileno].numpocs; pino++) {
-        while (pi_next(&pi[pino])) {
-            if ((cp->layer == 0) || (cp->layer >= ((pi[pino].layno) + 1))) {
-                opj_packet_info_t *pack_info;
-                if (cstr_info) {
-                    pack_info = &cstr_info->tile[tileno].packet[cstr_info->packno];
-                } else {
-                    pack_info = NULL;
-                }
-                e = t2_decode_packet(t2, c, src + len - c, tile, &cp->tcps[tileno], &pi[pino],
-                                     pack_info);
-            } else {
-                e = 0;
-            }
-            if (e == -999) {
-                pi_destroy(pi, cp, tileno);
-                return -999;
-            }
-            /* progression in resolution */
-            image->comps[pi[pino].compno].resno_decoded =
-                (e > 0) ?
-                int_max(pi[pino].resno, image->comps[pi[pino].compno].resno_decoded)
-                : image->comps[pi[pino].compno].resno_decoded;
-            n++;
-
-            /* INDEX >> */
-            if (cstr_info) {
-                opj_tile_info_t *info_TL = &cstr_info->tile[tileno];
-                opj_packet_info_t *info_PK = &info_TL->packet[cstr_info->packno];
-                if (!cstr_info->packno) {
-                    info_PK->start_pos = info_TL->end_header + 1;
-                } else if (info_TL->packet[cstr_info->packno - 1].end_pos >=
-                           (int)cstr_info->tile[tileno].tp[curtp].tp_end_pos) { /* New tile part*/
-                    info_TL->tp[curtp].tp_numpacks = cstr_info->packno -
-                                                     tp_start_packno; /* Number of packets in previous tile-part*/
-                    info_TL->tp[curtp].tp_start_pack = tp_start_packno;
-                    tp_start_packno = cstr_info->packno;
-                    curtp++;
-                    info_PK->start_pos = cstr_info->tile[tileno].tp[curtp].tp_end_header + 1;
-                } else {
-                    info_PK->start_pos = (cp->tp_on &&
-                                          info_PK->start_pos) ? info_PK->start_pos : info_TL->packet[cstr_info->packno -
-                                                                    1].end_pos + 1;
-                }
-                info_PK->end_pos = info_PK->start_pos + e - 1;
-                info_PK->end_ph_pos += info_PK->start_pos -
-                                       1;  /* End of packet header which now only represents the distance
-                                                                                                                // to start of packet is incremented by value of start of packet*/
-                cstr_info->packno++;
-            }
-            /* << INDEX */
-
-            if (e == -999) {        /* ADD */
-                break;
-            } else {
-                c += e;
-            }
-        }
-    }
-    /* INDEX >> */
-    if (cstr_info) {
-        cstr_info->tile[tileno].tp[curtp].tp_numpacks = cstr_info->packno -
-                tp_start_packno; /* Number of packets in last tile-part*/
-        cstr_info->tile[tileno].tp[curtp].tp_start_pack = tp_start_packno;
-    }
-    /* << INDEX */
-
-    /* don't forget to release pi */
-    pi_destroy(pi, cp, tileno);
-
-    if (e == -999) {
-        return e;
-    }
-
-    return (c - src);
-}
-
-/* ----------------------------------------------------------------------- */
-
-opj_t2_t* t2_create(opj_common_ptr cinfo, opj_image_t *image, opj_cp_t *cp)
-{
-    /* create the tcd structure */
-    opj_t2_t *t2 = (opj_t2_t*)opj_malloc(sizeof(opj_t2_t));
-    if (!t2) {
-        return NULL;
-    }
-    t2->cinfo = cinfo;
-    t2->image = image;
-    t2->cp = cp;
-
-    return t2;
-}
-
-void t2_destroy(opj_t2_t *t2)
-{
-    if (t2) {
-        opj_free(t2);
-    }
-}
-
-
-
-
-
diff --git a/src/lib/openmj2/t2.h b/src/lib/openmj2/t2.h
deleted file mode 100644 (file)
index 2f1a4e2..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef __T2_H
-#define __T2_H
-/**
-@file t2.h
-@brief Implementation of a tier-2 coding (packetization of code-block data) (T2)
-
-*/
-
-/** @defgroup T2 T2 - Implementation of a tier-2 coding */
-/*@{*/
-
-/**
-Tier-2 coding
-*/
-typedef struct opj_t2 {
-    /** codec context */
-    opj_common_ptr cinfo;
-
-    /** Encoding: pointer to the src image. Decoding: pointer to the dst image. */
-    opj_image_t *image;
-    /** pointer to the image coding parameters */
-    opj_cp_t *cp;
-} opj_t2_t;
-
-/** @name Exported functions */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-
-/**
-Encode the packets of a tile to a destination buffer
-@param t2 T2 handle
-@param tileno number of the tile encoded
-@param tile the tile for which to write the packets
-@param maxlayers maximum number of layers
-@param dest the destination buffer
-@param len the length of the destination buffer
-@param cstr_info Codestream information structure
-@param tpnum Tile part number of the current tile
-@param tppos The position of the tile part flag in the progression order
-@param pino
-@param t2_mode If == 0 In Threshold calculation ,If == 1 Final pass
-@param cur_totnum_tp The total number of tile parts in the current tile
-*/
-int t2_encode_packets(opj_t2_t* t2, int tileno, opj_tcd_tile_t *tile,
-                      int maxlayers, unsigned char *dest, int len, opj_codestream_info_t *cstr_info,
-                      int tpnum, int tppos, int pino, J2K_T2_MODE t2_mode, int cur_totnum_tp);
-/**
-Decode the packets of a tile from a source buffer
-@param t2 T2 handle
-@param src the source buffer
-@param len length of the source buffer
-@param tileno number that identifies the tile for which to decode the packets
-@param tile tile for which to decode the packets
-@param cstr_info Codestream information structure
- */
-int t2_decode_packets(opj_t2_t *t2, unsigned char *src, int len, int tileno,
-                      opj_tcd_tile_t *tile, opj_codestream_info_t *cstr_info);
-
-/**
-Create a T2 handle
-@param cinfo Codec context info
-@param image Source or destination image
-@param cp Image coding parameters
-@return Returns a new T2 handle if successful, returns NULL otherwise
-*/
-opj_t2_t* t2_create(opj_common_ptr cinfo, opj_image_t *image, opj_cp_t *cp);
-/**
-Destroy a T2 handle
-@param t2 T2 handle to destroy
-*/
-void t2_destroy(opj_t2_t *t2);
-
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif /* __T2_H */
diff --git a/src/lib/openmj2/tcd.c b/src/lib/openmj2/tcd.c
deleted file mode 100644 (file)
index 2a97043..0000000
+++ /dev/null
@@ -1,1663 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2006-2007, Parvatha Elangovan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#define _ISOC99_SOURCE /* lrintf is C99 */
-#include "opj_includes.h"
-
-void tcd_dump(FILE *fd, opj_tcd_t *tcd, opj_tcd_image_t * img)
-{
-    int tileno, compno, resno, bandno, precno;/*, cblkno;*/
-
-    fprintf(fd, "image {\n");
-    fprintf(fd, "  tw=%d, th=%d x0=%d x1=%d y0=%d y1=%d\n",
-            img->tw, img->th, tcd->image->x0, tcd->image->x1, tcd->image->y0,
-            tcd->image->y1);
-
-    for (tileno = 0; tileno < img->th * img->tw; tileno++) {
-        opj_tcd_tile_t *tile = &tcd->tcd_image->tiles[tileno];
-        fprintf(fd, "  tile {\n");
-        fprintf(fd, "    x0=%d, y0=%d, x1=%d, y1=%d, numcomps=%d\n",
-                tile->x0, tile->y0, tile->x1, tile->y1, tile->numcomps);
-        for (compno = 0; compno < tile->numcomps; compno++) {
-            opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-            fprintf(fd, "    tilec {\n");
-            fprintf(fd,
-                    "      x0=%d, y0=%d, x1=%d, y1=%d, numresolutions=%d\n",
-                    tilec->x0, tilec->y0, tilec->x1, tilec->y1, tilec->numresolutions);
-            for (resno = 0; resno < tilec->numresolutions; resno++) {
-                opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-                fprintf(fd, "\n   res {\n");
-                fprintf(fd,
-                        "          x0=%d, y0=%d, x1=%d, y1=%d, pw=%d, ph=%d, numbands=%d\n",
-                        res->x0, res->y0, res->x1, res->y1, res->pw, res->ph, res->numbands);
-                for (bandno = 0; bandno < res->numbands; bandno++) {
-                    opj_tcd_band_t *band = &res->bands[bandno];
-                    fprintf(fd, "        band {\n");
-                    fprintf(fd,
-                            "          x0=%d, y0=%d, x1=%d, y1=%d, stepsize=%f, numbps=%d\n",
-                            band->x0, band->y0, band->x1, band->y1, band->stepsize, band->numbps);
-                    for (precno = 0; precno < res->pw * res->ph; precno++) {
-                        opj_tcd_precinct_t *prec = &band->precincts[precno];
-                        fprintf(fd, "          prec {\n");
-                        fprintf(fd,
-                                "            x0=%d, y0=%d, x1=%d, y1=%d, cw=%d, ch=%d\n",
-                                prec->x0, prec->y0, prec->x1, prec->y1, prec->cw, prec->ch);
-                        /*
-                        for (cblkno = 0; cblkno < prec->cw * prec->ch; cblkno++) {
-                            opj_tcd_cblk_t *cblk = &prec->cblks[cblkno];
-                            fprintf(fd, "            cblk {\n");
-                            fprintf(fd,
-                                "              x0=%d, y0=%d, x1=%d, y1=%d\n",
-                                cblk->x0, cblk->y0, cblk->x1, cblk->y1);
-                            fprintf(fd, "            }\n");
-                        }
-                        */
-                        fprintf(fd, "          }\n");
-                    }
-                    fprintf(fd, "        }\n");
-                }
-                fprintf(fd, "      }\n");
-            }
-            fprintf(fd, "    }\n");
-        }
-        fprintf(fd, "  }\n");
-    }
-    fprintf(fd, "}\n");
-}
-
-/* ----------------------------------------------------------------------- */
-
-/**
-Create a new TCD handle
-*/
-opj_tcd_t* tcd_create(opj_common_ptr cinfo)
-{
-    /* create the tcd structure */
-    opj_tcd_t *tcd = (opj_tcd_t*)opj_malloc(sizeof(opj_tcd_t));
-    if (!tcd) {
-        return NULL;
-    }
-    tcd->cinfo = cinfo;
-    tcd->tcd_image = (opj_tcd_image_t*)opj_malloc(sizeof(opj_tcd_image_t));
-    if (!tcd->tcd_image) {
-        opj_free(tcd);
-        return NULL;
-    }
-
-    return tcd;
-}
-
-/**
-Destroy a previously created TCD handle
-*/
-void tcd_destroy(opj_tcd_t *tcd)
-{
-    if (tcd) {
-        opj_free(tcd->tcd_image);
-        opj_free(tcd);
-    }
-}
-
-/* ----------------------------------------------------------------------- */
-
-void tcd_malloc_encode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp,
-                       int curtileno)
-{
-    int tileno, compno, resno, bandno, precno, cblkno;
-
-    tcd->image = image;
-    tcd->cp = cp;
-    tcd->tcd_image->tw = cp->tw;
-    tcd->tcd_image->th = cp->th;
-    tcd->tcd_image->tiles = (opj_tcd_tile_t *) opj_malloc(sizeof(opj_tcd_tile_t));
-
-    for (tileno = 0; tileno < 1; tileno++) {
-        opj_tcp_t *tcp = &cp->tcps[curtileno];
-        int j;
-
-        /* cfr p59 ISO/IEC FDIS15444-1 : 2000 (18 august 2000) */
-        int p = curtileno % cp->tw; /* si numerotation matricielle .. */
-        int q = curtileno /
-                cp->tw; /* .. coordonnees de la tile (q,p) q pour ligne et p pour colonne */
-
-        /* opj_tcd_tile_t *tile=&tcd->tcd_image->tiles[tileno]; */
-        opj_tcd_tile_t *tile = tcd->tcd_image->tiles;
-
-        /* 4 borders of the tile rescale on the image if necessary */
-        tile->x0 = int_max(cp->tx0 + p * cp->tdx, image->x0);
-        tile->y0 = int_max(cp->ty0 + q * cp->tdy, image->y0);
-        tile->x1 = int_min(cp->tx0 + (p + 1) * cp->tdx, image->x1);
-        tile->y1 = int_min(cp->ty0 + (q + 1) * cp->tdy, image->y1);
-        tile->numcomps = image->numcomps;
-        /* tile->PPT=image->PPT;  */
-
-        /* Modification of the RATE >> */
-        for (j = 0; j < tcp->numlayers; j++) {
-            tcp->rates[j] = tcp->rates[j] ?
-                            cp->tp_on ?
-                            (((float)(tile->numcomps
-                                      * (tile->x1 - tile->x0)
-                                      * (tile->y1 - tile->y0)
-                                      * image->comps[0].prec))
-                             / (tcp->rates[j] * 8 * image->comps[0].dx * image->comps[0].dy)) - (((
-                                         tcd->cur_totnum_tp - 1) * 14) / tcp->numlayers)
-                            :
-                            ((float)(tile->numcomps
-                                     * (tile->x1 - tile->x0)
-                                     * (tile->y1 - tile->y0)
-                                     * image->comps[0].prec)) /
-                            (tcp->rates[j] * 8 * image->comps[0].dx * image->comps[0].dy)
-                            : 0;
-
-            if (tcp->rates[j]) {
-                if (j && tcp->rates[j] < tcp->rates[j - 1] + 10) {
-                    tcp->rates[j] = tcp->rates[j - 1] + 20;
-                } else {
-                    if (!j && tcp->rates[j] < 30) {
-                        tcp->rates[j] = 30;
-                    }
-                }
-
-                if (j == (tcp->numlayers - 1)) {
-                    tcp->rates[j] = tcp->rates[j] - 2;
-                }
-            }
-        }
-        /* << Modification of the RATE */
-
-        tile->comps = (opj_tcd_tilecomp_t *) opj_malloc(image->numcomps * sizeof(
-                          opj_tcd_tilecomp_t));
-        for (compno = 0; compno < tile->numcomps; compno++) {
-            opj_tccp_t *tccp = &tcp->tccps[compno];
-
-            opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-
-            /* border of each tile component (global) */
-            tilec->x0 = int_ceildiv(tile->x0, image->comps[compno].dx);
-            tilec->y0 = int_ceildiv(tile->y0, image->comps[compno].dy);
-            tilec->x1 = int_ceildiv(tile->x1, image->comps[compno].dx);
-            tilec->y1 = int_ceildiv(tile->y1, image->comps[compno].dy);
-
-            tilec->data = (int *) opj_aligned_malloc((tilec->x1 - tilec->x0) *
-                          (tilec->y1 - tilec->y0) * sizeof(int));
-            tilec->numresolutions = tccp->numresolutions;
-
-            tilec->resolutions = (opj_tcd_resolution_t *) opj_malloc(
-                                     tilec->numresolutions * sizeof(opj_tcd_resolution_t));
-
-            for (resno = 0; resno < tilec->numresolutions; resno++) {
-                int pdx, pdy;
-                int levelno = tilec->numresolutions - 1 - resno;
-                int tlprcxstart, tlprcystart, brprcxend, brprcyend;
-                int tlcbgxstart, tlcbgystart, brcbgxend, brcbgyend;
-                int cbgwidthexpn, cbgheightexpn;
-                int cblkwidthexpn, cblkheightexpn;
-
-                opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-
-                /* border for each resolution level (global) */
-                res->x0 = int_ceildivpow2(tilec->x0, levelno);
-                res->y0 = int_ceildivpow2(tilec->y0, levelno);
-                res->x1 = int_ceildivpow2(tilec->x1, levelno);
-                res->y1 = int_ceildivpow2(tilec->y1, levelno);
-
-                res->numbands = resno == 0 ? 1 : 3;
-                /* p. 35, table A-23, ISO/IEC FDIS154444-1 : 2000 (18 august 2000) */
-                if (tccp->csty & J2K_CCP_CSTY_PRT) {
-                    pdx = tccp->prcw[resno];
-                    pdy = tccp->prch[resno];
-                } else {
-                    pdx = 15;
-                    pdy = 15;
-                }
-                /* p. 64, B.6, ISO/IEC FDIS15444-1 : 2000 (18 august 2000)  */
-                tlprcxstart = int_floordivpow2(res->x0, pdx) << pdx;
-                tlprcystart = int_floordivpow2(res->y0, pdy) << pdy;
-
-                brprcxend = int_ceildivpow2(res->x1, pdx) << pdx;
-                brprcyend = int_ceildivpow2(res->y1, pdy) << pdy;
-
-                res->pw = (brprcxend - tlprcxstart) >> pdx;
-                res->ph = (brprcyend - tlprcystart) >> pdy;
-
-                if (resno == 0) {
-                    tlcbgxstart = tlprcxstart;
-                    tlcbgystart = tlprcystart;
-                    brcbgxend = brprcxend;
-                    brcbgyend = brprcyend;
-                    cbgwidthexpn = pdx;
-                    cbgheightexpn = pdy;
-                } else {
-                    tlcbgxstart = int_ceildivpow2(tlprcxstart, 1);
-                    tlcbgystart = int_ceildivpow2(tlprcystart, 1);
-                    brcbgxend = int_ceildivpow2(brprcxend, 1);
-                    brcbgyend = int_ceildivpow2(brprcyend, 1);
-                    cbgwidthexpn = pdx - 1;
-                    cbgheightexpn = pdy - 1;
-                }
-
-                cblkwidthexpn = int_min(tccp->cblkw, cbgwidthexpn);
-                cblkheightexpn = int_min(tccp->cblkh, cbgheightexpn);
-
-                for (bandno = 0; bandno < res->numbands; bandno++) {
-                    int x0b, y0b, i;
-                    int gain, numbps;
-                    opj_stepsize_t *ss = NULL;
-
-                    opj_tcd_band_t *band = &res->bands[bandno];
-
-                    band->bandno = resno == 0 ? 0 : bandno + 1;
-                    x0b = (band->bandno == 1) || (band->bandno == 3) ? 1 : 0;
-                    y0b = (band->bandno == 2) || (band->bandno == 3) ? 1 : 0;
-
-                    if (band->bandno == 0) {
-                        /* band border (global) */
-                        band->x0 = int_ceildivpow2(tilec->x0, levelno);
-                        band->y0 = int_ceildivpow2(tilec->y0, levelno);
-                        band->x1 = int_ceildivpow2(tilec->x1, levelno);
-                        band->y1 = int_ceildivpow2(tilec->y1, levelno);
-                    } else {
-                        /* band border (global) */
-                        band->x0 = int_ceildivpow2(tilec->x0 - (1 << levelno) * x0b, levelno + 1);
-                        band->y0 = int_ceildivpow2(tilec->y0 - (1 << levelno) * y0b, levelno + 1);
-                        band->x1 = int_ceildivpow2(tilec->x1 - (1 << levelno) * x0b, levelno + 1);
-                        band->y1 = int_ceildivpow2(tilec->y1 - (1 << levelno) * y0b, levelno + 1);
-                    }
-
-                    ss = &tccp->stepsizes[resno == 0 ? 0 : 3 * (resno - 1) + bandno + 1];
-                    gain = tccp->qmfbid == 0 ? dwt_getgain_real(band->bandno) : dwt_getgain(
-                               band->bandno);
-                    numbps = image->comps[compno].prec + gain;
-
-                    band->stepsize = (float)((1.0 + ss->mant / 2048.0) * pow(2.0,
-                                             numbps - ss->expn));
-                    band->numbps = ss->expn + tccp->numgbits - 1;   /* WHY -1 ? */
-
-                    band->precincts = (opj_tcd_precinct_t *) opj_malloc(3 * res->pw * res->ph *
-                                      sizeof(opj_tcd_precinct_t));
-
-                    for (i = 0; i < res->pw * res->ph * 3; i++) {
-                        band->precincts[i].imsbtree = NULL;
-                        band->precincts[i].incltree = NULL;
-                        band->precincts[i].cblks.enc = NULL;
-                    }
-
-                    for (precno = 0; precno < res->pw * res->ph; precno++) {
-                        int tlcblkxstart, tlcblkystart, brcblkxend, brcblkyend;
-
-                        int cbgxstart = tlcbgxstart + (precno % res->pw) * (1 << cbgwidthexpn);
-                        int cbgystart = tlcbgystart + (precno / res->pw) * (1 << cbgheightexpn);
-                        int cbgxend = cbgxstart + (1 << cbgwidthexpn);
-                        int cbgyend = cbgystart + (1 << cbgheightexpn);
-
-                        opj_tcd_precinct_t *prc = &band->precincts[precno];
-
-                        /* precinct size (global) */
-                        prc->x0 = int_max(cbgxstart, band->x0);
-                        prc->y0 = int_max(cbgystart, band->y0);
-                        prc->x1 = int_min(cbgxend, band->x1);
-                        prc->y1 = int_min(cbgyend, band->y1);
-
-                        tlcblkxstart = int_floordivpow2(prc->x0, cblkwidthexpn) << cblkwidthexpn;
-                        tlcblkystart = int_floordivpow2(prc->y0, cblkheightexpn) << cblkheightexpn;
-                        brcblkxend = int_ceildivpow2(prc->x1, cblkwidthexpn) << cblkwidthexpn;
-                        brcblkyend = int_ceildivpow2(prc->y1, cblkheightexpn) << cblkheightexpn;
-                        prc->cw = (brcblkxend - tlcblkxstart) >> cblkwidthexpn;
-                        prc->ch = (brcblkyend - tlcblkystart) >> cblkheightexpn;
-
-                        prc->cblks.enc = (opj_tcd_cblk_enc_t*) opj_calloc((prc->cw * prc->ch),
-                                         sizeof(opj_tcd_cblk_enc_t));
-                        prc->incltree = tgt_create(prc->cw, prc->ch);
-                        prc->imsbtree = tgt_create(prc->cw, prc->ch);
-
-                        for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-                            int cblkxstart = tlcblkxstart + (cblkno % prc->cw) * (1 << cblkwidthexpn);
-                            int cblkystart = tlcblkystart + (cblkno / prc->cw) * (1 << cblkheightexpn);
-                            int cblkxend = cblkxstart + (1 << cblkwidthexpn);
-                            int cblkyend = cblkystart + (1 << cblkheightexpn);
-
-                            opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno];
-
-                            /* code-block size (global) */
-                            cblk->x0 = int_max(cblkxstart, prc->x0);
-                            cblk->y0 = int_max(cblkystart, prc->y0);
-                            cblk->x1 = int_min(cblkxend, prc->x1);
-                            cblk->y1 = int_min(cblkyend, prc->y1);
-                            cblk->data = (unsigned char*) opj_calloc(9728 + 2, sizeof(unsigned char));
-                            /* FIXME: mqc_init_enc and mqc_byteout underrun the buffer if we don't do this. Why? */
-                            cblk->data[0] = 0;
-                            cblk->data[1] = 0;
-                            cblk->data += 2;
-                            cblk->layers = (opj_tcd_layer_t*) opj_calloc(100, sizeof(opj_tcd_layer_t));
-                            cblk->passes = (opj_tcd_pass_t*) opj_calloc(100, sizeof(opj_tcd_pass_t));
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    /* tcd_dump(stdout, tcd, &tcd->tcd_image); */
-}
-
-void tcd_free_encode(opj_tcd_t *tcd)
-{
-    int tileno, compno, resno, bandno, precno, cblkno;
-
-    for (tileno = 0; tileno < 1; tileno++) {
-        opj_tcd_tile_t *tile = tcd->tcd_image->tiles;
-
-        for (compno = 0; compno < tile->numcomps; compno++) {
-            opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-
-            for (resno = 0; resno < tilec->numresolutions; resno++) {
-                opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-
-                for (bandno = 0; bandno < res->numbands; bandno++) {
-                    opj_tcd_band_t *band = &res->bands[bandno];
-
-                    for (precno = 0; precno < res->pw * res->ph; precno++) {
-                        opj_tcd_precinct_t *prc = &band->precincts[precno];
-
-                        if (prc->incltree != NULL) {
-                            tgt_destroy(prc->incltree);
-                            prc->incltree = NULL;
-                        }
-                        if (prc->imsbtree != NULL) {
-                            tgt_destroy(prc->imsbtree);
-                            prc->imsbtree = NULL;
-                        }
-                        for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-                            opj_free(prc->cblks.enc[cblkno].data - 2);
-                            opj_free(prc->cblks.enc[cblkno].layers);
-                            opj_free(prc->cblks.enc[cblkno].passes);
-                        }
-                        opj_free(prc->cblks.enc);
-                    } /* for (precno */
-                    opj_free(band->precincts);
-                    band->precincts = NULL;
-                } /* for (bandno */
-            } /* for (resno */
-            opj_free(tilec->resolutions);
-            tilec->resolutions = NULL;
-        } /* for (compno */
-        opj_free(tile->comps);
-        tile->comps = NULL;
-    } /* for (tileno */
-    opj_free(tcd->tcd_image->tiles);
-    tcd->tcd_image->tiles = NULL;
-}
-
-void tcd_init_encode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp,
-                     int curtileno)
-{
-    int tileno, compno, resno, bandno, precno, cblkno;
-
-    for (tileno = 0; tileno < 1; tileno++) {
-        opj_tcp_t *tcp = &cp->tcps[curtileno];
-        int j;
-        /* cfr p59 ISO/IEC FDIS15444-1 : 2000 (18 august 2000) */
-        int p = curtileno % cp->tw;
-        int q = curtileno / cp->tw;
-
-        opj_tcd_tile_t *tile = tcd->tcd_image->tiles;
-
-        /* 4 borders of the tile rescale on the image if necessary */
-        tile->x0 = int_max(cp->tx0 + p * cp->tdx, image->x0);
-        tile->y0 = int_max(cp->ty0 + q * cp->tdy, image->y0);
-        tile->x1 = int_min(cp->tx0 + (p + 1) * cp->tdx, image->x1);
-        tile->y1 = int_min(cp->ty0 + (q + 1) * cp->tdy, image->y1);
-
-        tile->numcomps = image->numcomps;
-        /* tile->PPT=image->PPT; */
-
-        /* Modification of the RATE >> */
-        for (j = 0; j < tcp->numlayers; j++) {
-            tcp->rates[j] = tcp->rates[j] ?
-                            cp->tp_on ?
-                            (((float)(tile->numcomps
-                                      * (tile->x1 - tile->x0)
-                                      * (tile->y1 - tile->y0)
-                                      * image->comps[0].prec))
-                             / (tcp->rates[j] * 8 * image->comps[0].dx * image->comps[0].dy)) - (((
-                                         tcd->cur_totnum_tp - 1) * 14) / tcp->numlayers)
-                            :
-                            ((float)(tile->numcomps
-                                     * (tile->x1 - tile->x0)
-                                     * (tile->y1 - tile->y0)
-                                     * image->comps[0].prec)) /
-                            (tcp->rates[j] * 8 * image->comps[0].dx * image->comps[0].dy)
-                            : 0;
-
-            if (tcp->rates[j]) {
-                if (j && tcp->rates[j] < tcp->rates[j - 1] + 10) {
-                    tcp->rates[j] = tcp->rates[j - 1] + 20;
-                } else {
-                    if (!j && tcp->rates[j] < 30) {
-                        tcp->rates[j] = 30;
-                    }
-                }
-            }
-        }
-        /* << Modification of the RATE */
-
-        /* tile->comps=(opj_tcd_tilecomp_t*)opj_realloc(tile->comps,image->numcomps*sizeof(opj_tcd_tilecomp_t)); */
-        for (compno = 0; compno < tile->numcomps; compno++) {
-            opj_tccp_t *tccp = &tcp->tccps[compno];
-
-            opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-
-            /* border of each tile component (global) */
-            tilec->x0 = int_ceildiv(tile->x0, image->comps[compno].dx);
-            tilec->y0 = int_ceildiv(tile->y0, image->comps[compno].dy);
-            tilec->x1 = int_ceildiv(tile->x1, image->comps[compno].dx);
-            tilec->y1 = int_ceildiv(tile->y1, image->comps[compno].dy);
-
-            tilec->data = (int *) opj_aligned_malloc((tilec->x1 - tilec->x0) *
-                          (tilec->y1 - tilec->y0) * sizeof(int));
-            tilec->numresolutions = tccp->numresolutions;
-            /* tilec->resolutions=(opj_tcd_resolution_t*)opj_realloc(tilec->resolutions,tilec->numresolutions*sizeof(opj_tcd_resolution_t)); */
-            for (resno = 0; resno < tilec->numresolutions; resno++) {
-                int pdx, pdy;
-
-                int levelno = tilec->numresolutions - 1 - resno;
-                int tlprcxstart, tlprcystart, brprcxend, brprcyend;
-                int tlcbgxstart, tlcbgystart, brcbgxend, brcbgyend;
-                int cbgwidthexpn, cbgheightexpn;
-                int cblkwidthexpn, cblkheightexpn;
-
-                opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-
-                /* border for each resolution level (global) */
-                res->x0 = int_ceildivpow2(tilec->x0, levelno);
-                res->y0 = int_ceildivpow2(tilec->y0, levelno);
-                res->x1 = int_ceildivpow2(tilec->x1, levelno);
-                res->y1 = int_ceildivpow2(tilec->y1, levelno);
-                res->numbands = resno == 0 ? 1 : 3;
-
-                /* p. 35, table A-23, ISO/IEC FDIS154444-1 : 2000 (18 august 2000) */
-                if (tccp->csty & J2K_CCP_CSTY_PRT) {
-                    pdx = tccp->prcw[resno];
-                    pdy = tccp->prch[resno];
-                } else {
-                    pdx = 15;
-                    pdy = 15;
-                }
-                /* p. 64, B.6, ISO/IEC FDIS15444-1 : 2000 (18 august 2000)  */
-                tlprcxstart = int_floordivpow2(res->x0, pdx) << pdx;
-                tlprcystart = int_floordivpow2(res->y0, pdy) << pdy;
-                brprcxend = int_ceildivpow2(res->x1, pdx) << pdx;
-                brprcyend = int_ceildivpow2(res->y1, pdy) << pdy;
-
-                res->pw = (brprcxend - tlprcxstart) >> pdx;
-                res->ph = (brprcyend - tlprcystart) >> pdy;
-
-                if (resno == 0) {
-                    tlcbgxstart = tlprcxstart;
-                    tlcbgystart = tlprcystart;
-                    brcbgxend = brprcxend;
-                    brcbgyend = brprcyend;
-                    cbgwidthexpn = pdx;
-                    cbgheightexpn = pdy;
-                } else {
-                    tlcbgxstart = int_ceildivpow2(tlprcxstart, 1);
-                    tlcbgystart = int_ceildivpow2(tlprcystart, 1);
-                    brcbgxend = int_ceildivpow2(brprcxend, 1);
-                    brcbgyend = int_ceildivpow2(brprcyend, 1);
-                    cbgwidthexpn = pdx - 1;
-                    cbgheightexpn = pdy - 1;
-                }
-
-                cblkwidthexpn = int_min(tccp->cblkw, cbgwidthexpn);
-                cblkheightexpn = int_min(tccp->cblkh, cbgheightexpn);
-
-                for (bandno = 0; bandno < res->numbands; bandno++) {
-                    int x0b, y0b;
-                    int gain, numbps;
-                    opj_stepsize_t *ss = NULL;
-
-                    opj_tcd_band_t *band = &res->bands[bandno];
-
-                    band->bandno = resno == 0 ? 0 : bandno + 1;
-                    x0b = (band->bandno == 1) || (band->bandno == 3) ? 1 : 0;
-                    y0b = (band->bandno == 2) || (band->bandno == 3) ? 1 : 0;
-
-                    if (band->bandno == 0) {
-                        /* band border */
-                        band->x0 = int_ceildivpow2(tilec->x0, levelno);
-                        band->y0 = int_ceildivpow2(tilec->y0, levelno);
-                        band->x1 = int_ceildivpow2(tilec->x1, levelno);
-                        band->y1 = int_ceildivpow2(tilec->y1, levelno);
-                    } else {
-                        band->x0 = int_ceildivpow2(tilec->x0 - (1 << levelno) * x0b, levelno + 1);
-                        band->y0 = int_ceildivpow2(tilec->y0 - (1 << levelno) * y0b, levelno + 1);
-                        band->x1 = int_ceildivpow2(tilec->x1 - (1 << levelno) * x0b, levelno + 1);
-                        band->y1 = int_ceildivpow2(tilec->y1 - (1 << levelno) * y0b, levelno + 1);
-                    }
-
-                    ss = &tccp->stepsizes[resno == 0 ? 0 : 3 * (resno - 1) + bandno + 1];
-                    gain = tccp->qmfbid == 0 ? dwt_getgain_real(band->bandno) : dwt_getgain(
-                               band->bandno);
-                    numbps = image->comps[compno].prec + gain;
-                    band->stepsize = (float)((1.0 + ss->mant / 2048.0) * pow(2.0,
-                                             numbps - ss->expn));
-                    band->numbps = ss->expn + tccp->numgbits - 1;   /* WHY -1 ? */
-
-                    for (precno = 0; precno < res->pw * res->ph; precno++) {
-                        int tlcblkxstart, tlcblkystart, brcblkxend, brcblkyend;
-
-                        int cbgxstart = tlcbgxstart + (precno % res->pw) * (1 << cbgwidthexpn);
-                        int cbgystart = tlcbgystart + (precno / res->pw) * (1 << cbgheightexpn);
-                        int cbgxend = cbgxstart + (1 << cbgwidthexpn);
-                        int cbgyend = cbgystart + (1 << cbgheightexpn);
-
-                        opj_tcd_precinct_t *prc = &band->precincts[precno];
-
-                        /* precinct size (global) */
-                        prc->x0 = int_max(cbgxstart, band->x0);
-                        prc->y0 = int_max(cbgystart, band->y0);
-                        prc->x1 = int_min(cbgxend, band->x1);
-                        prc->y1 = int_min(cbgyend, band->y1);
-
-                        tlcblkxstart = int_floordivpow2(prc->x0, cblkwidthexpn) << cblkwidthexpn;
-                        tlcblkystart = int_floordivpow2(prc->y0, cblkheightexpn) << cblkheightexpn;
-                        brcblkxend = int_ceildivpow2(prc->x1, cblkwidthexpn) << cblkwidthexpn;
-                        brcblkyend = int_ceildivpow2(prc->y1, cblkheightexpn) << cblkheightexpn;
-                        prc->cw = (brcblkxend - tlcblkxstart) >> cblkwidthexpn;
-                        prc->ch = (brcblkyend - tlcblkystart) >> cblkheightexpn;
-
-                        opj_free(prc->cblks.enc);
-                        prc->cblks.enc = (opj_tcd_cblk_enc_t*) opj_calloc(prc->cw * prc->ch,
-                                         sizeof(opj_tcd_cblk_enc_t));
-
-                        if (prc->incltree != NULL) {
-                            tgt_destroy(prc->incltree);
-                        }
-                        if (prc->imsbtree != NULL) {
-                            tgt_destroy(prc->imsbtree);
-                        }
-
-                        prc->incltree = tgt_create(prc->cw, prc->ch);
-                        prc->imsbtree = tgt_create(prc->cw, prc->ch);
-
-                        for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-                            int cblkxstart = tlcblkxstart + (cblkno % prc->cw) * (1 << cblkwidthexpn);
-                            int cblkystart = tlcblkystart + (cblkno / prc->cw) * (1 << cblkheightexpn);
-                            int cblkxend = cblkxstart + (1 << cblkwidthexpn);
-                            int cblkyend = cblkystart + (1 << cblkheightexpn);
-
-                            opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno];
-
-                            /* code-block size (global) */
-                            cblk->x0 = int_max(cblkxstart, prc->x0);
-                            cblk->y0 = int_max(cblkystart, prc->y0);
-                            cblk->x1 = int_min(cblkxend, prc->x1);
-                            cblk->y1 = int_min(cblkyend, prc->y1);
-                            cblk->data = (unsigned char*) opj_calloc(8192 + 2, sizeof(unsigned char));
-                            /* FIXME: mqc_init_enc and mqc_byteout underrun the buffer if we don't do this. Why? */
-                            cblk->data[0] = 0;
-                            cblk->data[1] = 0;
-                            cblk->data += 2;
-                            cblk->layers = (opj_tcd_layer_t*) opj_calloc(100, sizeof(opj_tcd_layer_t));
-                            cblk->passes = (opj_tcd_pass_t*) opj_calloc(100, sizeof(opj_tcd_pass_t));
-                        }
-                    } /* precno */
-                } /* bandno */
-            } /* resno */
-        } /* compno */
-    } /* tileno */
-
-    /* tcd_dump(stdout, tcd, &tcd->tcd_image); */
-}
-
-void tcd_malloc_decode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp)
-{
-    int i, j, tileno, p, q;
-    unsigned int x0 = 0, y0 = 0, x1 = 0, y1 = 0, w, h;
-
-    tcd->image = image;
-    tcd->tcd_image->tw = cp->tw;
-    tcd->tcd_image->th = cp->th;
-    tcd->tcd_image->tiles = (opj_tcd_tile_t *) opj_calloc(cp->tw * cp->th,
-                            sizeof(opj_tcd_tile_t));
-
-    /*
-    Allocate place to store the decoded data = final image
-    Place limited by the tile really present in the codestream
-    */
-
-    for (j = 0; j < cp->tileno_size; j++) {
-        opj_tcd_tile_t *tile;
-
-        tileno = cp->tileno[j];
-        tile = &(tcd->tcd_image->tiles[cp->tileno[tileno]]);
-        tile->numcomps = image->numcomps;
-        tile->comps = (opj_tcd_tilecomp_t*) opj_calloc(image->numcomps,
-                      sizeof(opj_tcd_tilecomp_t));
-    }
-
-    for (i = 0; i < image->numcomps; i++) {
-        for (j = 0; j < cp->tileno_size; j++) {
-            opj_tcd_tile_t *tile;
-            opj_tcd_tilecomp_t *tilec;
-
-            /* cfr p59 ISO/IEC FDIS15444-1 : 2000 (18 august 2000) */
-
-            tileno = cp->tileno[j];
-
-            tile = &(tcd->tcd_image->tiles[cp->tileno[tileno]]);
-            tilec = &tile->comps[i];
-
-            p = tileno % cp->tw;    /* si numerotation matricielle .. */
-            q = tileno /
-                cp->tw;    /* .. coordonnees de la tile (q,p) q pour ligne et p pour colonne */
-
-            /* 4 borders of the tile rescale on the image if necessary */
-            tile->x0 = int_max(cp->tx0 + p * cp->tdx, image->x0);
-            tile->y0 = int_max(cp->ty0 + q * cp->tdy, image->y0);
-            tile->x1 = int_min(cp->tx0 + (p + 1) * cp->tdx, image->x1);
-            tile->y1 = int_min(cp->ty0 + (q + 1) * cp->tdy, image->y1);
-
-            tilec->x0 = int_ceildiv(tile->x0, image->comps[i].dx);
-            tilec->y0 = int_ceildiv(tile->y0, image->comps[i].dy);
-            tilec->x1 = int_ceildiv(tile->x1, image->comps[i].dx);
-            tilec->y1 = int_ceildiv(tile->y1, image->comps[i].dy);
-
-            x0 = j == 0 ? tilec->x0 : int_min(x0, (unsigned int) tilec->x0);
-            y0 = j == 0 ? tilec->y0 : int_min(y0, (unsigned int) tilec->y0);
-            x1 = j == 0 ? tilec->x1 : int_max(x1, (unsigned int) tilec->x1);
-            y1 = j == 0 ? tilec->y1 : int_max(y1, (unsigned int) tilec->y1);
-        }
-
-        w = int_ceildivpow2(x1 - x0, image->comps[i].factor);
-        h = int_ceildivpow2(y1 - y0, image->comps[i].factor);
-
-        image->comps[i].w = w;
-        image->comps[i].h = h;
-        image->comps[i].x0 = x0;
-        image->comps[i].y0 = y0;
-    }
-}
-
-void tcd_malloc_decode_tile(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp,
-                            int tileno, opj_codestream_info_t *cstr_info)
-{
-    int compno, resno, bandno, precno, cblkno;
-    opj_tcp_t *tcp;
-    opj_tcd_tile_t *tile;
-
-    OPJ_ARG_NOT_USED(cstr_info);
-
-    tcd->cp = cp;
-
-    tcp = &(cp->tcps[cp->tileno[tileno]]);
-    tile = &(tcd->tcd_image->tiles[cp->tileno[tileno]]);
-
-    tileno = cp->tileno[tileno];
-
-    for (compno = 0; compno < tile->numcomps; compno++) {
-        opj_tccp_t *tccp = &tcp->tccps[compno];
-        opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-
-        if (tccp->numresolutions <= 0) {
-            cp->tileno[tileno] = -1;
-            return;
-        }
-
-        /* border of each tile component (global) */
-        tilec->x0 = int_ceildiv(tile->x0, image->comps[compno].dx);
-        tilec->y0 = int_ceildiv(tile->y0, image->comps[compno].dy);
-        tilec->x1 = int_ceildiv(tile->x1, image->comps[compno].dx);
-        tilec->y1 = int_ceildiv(tile->y1, image->comps[compno].dy);
-
-        tilec->numresolutions = tccp->numresolutions;
-        tilec->resolutions = (opj_tcd_resolution_t *) opj_malloc(
-                                 tilec->numresolutions * sizeof(opj_tcd_resolution_t));
-
-        for (resno = 0; resno < tilec->numresolutions; resno++) {
-            int pdx, pdy;
-            int levelno = tilec->numresolutions - 1 - resno;
-            int tlprcxstart, tlprcystart, brprcxend, brprcyend;
-            int tlcbgxstart, tlcbgystart, brcbgxend, brcbgyend;
-            int cbgwidthexpn, cbgheightexpn;
-            int cblkwidthexpn, cblkheightexpn;
-
-            opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-
-            /* border for each resolution level (global) */
-            res->x0 = int_ceildivpow2(tilec->x0, levelno);
-            res->y0 = int_ceildivpow2(tilec->y0, levelno);
-            res->x1 = int_ceildivpow2(tilec->x1, levelno);
-            res->y1 = int_ceildivpow2(tilec->y1, levelno);
-            res->numbands = resno == 0 ? 1 : 3;
-
-            /* p. 35, table A-23, ISO/IEC FDIS154444-1 : 2000 (18 august 2000) */
-            if (tccp->csty & J2K_CCP_CSTY_PRT) {
-                pdx = tccp->prcw[resno];
-                pdy = tccp->prch[resno];
-            } else {
-                pdx = 15;
-                pdy = 15;
-            }
-
-            /* p. 64, B.6, ISO/IEC FDIS15444-1 : 2000 (18 august 2000)  */
-            tlprcxstart = int_floordivpow2(res->x0, pdx) << pdx;
-            tlprcystart = int_floordivpow2(res->y0, pdy) << pdy;
-            brprcxend = int_ceildivpow2(res->x1, pdx) << pdx;
-            brprcyend = int_ceildivpow2(res->y1, pdy) << pdy;
-
-            res->pw = (res->x0 == res->x1) ? 0 : ((brprcxend - tlprcxstart) >> pdx);
-            res->ph = (res->y0 == res->y1) ? 0 : ((brprcyend - tlprcystart) >> pdy);
-
-            if (resno == 0) {
-                tlcbgxstart = tlprcxstart;
-                tlcbgystart = tlprcystart;
-                brcbgxend = brprcxend;
-                brcbgyend = brprcyend;
-                cbgwidthexpn = pdx;
-                cbgheightexpn = pdy;
-            } else {
-                tlcbgxstart = int_ceildivpow2(tlprcxstart, 1);
-                tlcbgystart = int_ceildivpow2(tlprcystart, 1);
-                brcbgxend = int_ceildivpow2(brprcxend, 1);
-                brcbgyend = int_ceildivpow2(brprcyend, 1);
-                cbgwidthexpn = pdx - 1;
-                cbgheightexpn = pdy - 1;
-            }
-
-            cblkwidthexpn = int_min(tccp->cblkw, cbgwidthexpn);
-            cblkheightexpn = int_min(tccp->cblkh, cbgheightexpn);
-
-            for (bandno = 0; bandno < res->numbands; bandno++) {
-                int x0b, y0b;
-                int gain, numbps;
-                opj_stepsize_t *ss = NULL;
-
-                opj_tcd_band_t *band = &res->bands[bandno];
-                band->bandno = resno == 0 ? 0 : bandno + 1;
-                x0b = (band->bandno == 1) || (band->bandno == 3) ? 1 : 0;
-                y0b = (band->bandno == 2) || (band->bandno == 3) ? 1 : 0;
-
-                if (band->bandno == 0) {
-                    /* band border (global) */
-                    band->x0 = int_ceildivpow2(tilec->x0, levelno);
-                    band->y0 = int_ceildivpow2(tilec->y0, levelno);
-                    band->x1 = int_ceildivpow2(tilec->x1, levelno);
-                    band->y1 = int_ceildivpow2(tilec->y1, levelno);
-                } else {
-                    /* band border (global) */
-                    band->x0 = int_ceildivpow2(tilec->x0 - (1 << levelno) * x0b, levelno + 1);
-                    band->y0 = int_ceildivpow2(tilec->y0 - (1 << levelno) * y0b, levelno + 1);
-                    band->x1 = int_ceildivpow2(tilec->x1 - (1 << levelno) * x0b, levelno + 1);
-                    band->y1 = int_ceildivpow2(tilec->y1 - (1 << levelno) * y0b, levelno + 1);
-                }
-
-                ss = &tccp->stepsizes[resno == 0 ? 0 : 3 * (resno - 1) + bandno + 1];
-                gain = tccp->qmfbid == 0 ? dwt_getgain_real(band->bandno) : dwt_getgain(
-                           band->bandno);
-                numbps = image->comps[compno].prec + gain;
-                band->stepsize = (float)(((1.0 + ss->mant / 2048.0) * pow(2.0,
-                                          numbps - ss->expn)) * 0.5);
-                band->numbps = ss->expn + tccp->numgbits - 1;   /* WHY -1 ? */
-
-                band->precincts = (opj_tcd_precinct_t *) opj_malloc(res->pw * res->ph * sizeof(
-                                      opj_tcd_precinct_t));
-
-                for (precno = 0; precno < res->pw * res->ph; precno++) {
-                    int tlcblkxstart, tlcblkystart, brcblkxend, brcblkyend;
-                    int cbgxstart = tlcbgxstart + (precno % res->pw) * (1 << cbgwidthexpn);
-                    int cbgystart = tlcbgystart + (precno / res->pw) * (1 << cbgheightexpn);
-                    int cbgxend = cbgxstart + (1 << cbgwidthexpn);
-                    int cbgyend = cbgystart + (1 << cbgheightexpn);
-
-                    opj_tcd_precinct_t *prc = &band->precincts[precno];
-                    /* precinct size (global) */
-                    prc->x0 = int_max(cbgxstart, band->x0);
-                    prc->y0 = int_max(cbgystart, band->y0);
-                    prc->x1 = int_min(cbgxend, band->x1);
-                    prc->y1 = int_min(cbgyend, band->y1);
-
-                    tlcblkxstart = int_floordivpow2(prc->x0, cblkwidthexpn) << cblkwidthexpn;
-                    tlcblkystart = int_floordivpow2(prc->y0, cblkheightexpn) << cblkheightexpn;
-                    brcblkxend = int_ceildivpow2(prc->x1, cblkwidthexpn) << cblkwidthexpn;
-                    brcblkyend = int_ceildivpow2(prc->y1, cblkheightexpn) << cblkheightexpn;
-                    prc->cw = (brcblkxend - tlcblkxstart) >> cblkwidthexpn;
-                    prc->ch = (brcblkyend - tlcblkystart) >> cblkheightexpn;
-
-                    prc->cblks.dec = (opj_tcd_cblk_dec_t*) opj_malloc(prc->cw * prc->ch * sizeof(
-                                         opj_tcd_cblk_dec_t));
-
-                    prc->incltree = tgt_create(prc->cw, prc->ch);
-                    prc->imsbtree = tgt_create(prc->cw, prc->ch);
-
-                    for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-                        int cblkxstart = tlcblkxstart + (cblkno % prc->cw) * (1 << cblkwidthexpn);
-                        int cblkystart = tlcblkystart + (cblkno / prc->cw) * (1 << cblkheightexpn);
-                        int cblkxend = cblkxstart + (1 << cblkwidthexpn);
-                        int cblkyend = cblkystart + (1 << cblkheightexpn);
-
-                        opj_tcd_cblk_dec_t* cblk = &prc->cblks.dec[cblkno];
-                        cblk->data = NULL;
-                        cblk->segs = NULL;
-                        /* code-block size (global) */
-                        cblk->x0 = int_max(cblkxstart, prc->x0);
-                        cblk->y0 = int_max(cblkystart, prc->y0);
-                        cblk->x1 = int_min(cblkxend, prc->x1);
-                        cblk->y1 = int_min(cblkyend, prc->y1);
-                        cblk->numsegs = 0;
-                    }
-                } /* precno */
-            } /* bandno */
-        } /* resno */
-    } /* compno */
-    /* tcd_dump(stdout, tcd, &tcd->tcd_image); */
-}
-
-void tcd_makelayer_fixed(opj_tcd_t *tcd, int layno, int final)
-{
-    int compno, resno, bandno, precno, cblkno;
-    int value;          /*, matrice[tcd_tcp->numlayers][tcd_tile->comps[0].numresolutions][3]; */
-    int matrice[10][10][3];
-    int i, j, k;
-
-    opj_cp_t *cp = tcd->cp;
-    opj_tcd_tile_t *tcd_tile = tcd->tcd_tile;
-    opj_tcp_t *tcd_tcp = tcd->tcp;
-
-    /*matrice=(int*)opj_malloc(tcd_tcp->numlayers*tcd_tile->comps[0].numresolutions*3*sizeof(int)); */
-
-    for (compno = 0; compno < tcd_tile->numcomps; compno++) {
-        opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno];
-        for (i = 0; i < tcd_tcp->numlayers; i++) {
-            for (j = 0; j < tilec->numresolutions; j++) {
-                for (k = 0; k < 3; k++) {
-                    matrice[i][j][k] =
-                        (int)(cp->matrice[i * tilec->numresolutions * 3 + j * 3 + k]
-                              * (float)(tcd->image->comps[compno].prec / 16.0));
-                }
-            }
-        }
-
-        for (resno = 0; resno < tilec->numresolutions; resno++) {
-            opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-            for (bandno = 0; bandno < res->numbands; bandno++) {
-                opj_tcd_band_t *band = &res->bands[bandno];
-                for (precno = 0; precno < res->pw * res->ph; precno++) {
-                    opj_tcd_precinct_t *prc = &band->precincts[precno];
-                    for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-                        opj_tcd_cblk_enc_t *cblk = &prc->cblks.enc[cblkno];
-                        opj_tcd_layer_t *layer = &cblk->layers[layno];
-                        int n;
-                        int imsb = tcd->image->comps[compno].prec -
-                                   cblk->numbps;   /* number of bit-plan equal to zero */
-                        /* Correction of the matrix of coefficient to include the IMSB information */
-                        if (layno == 0) {
-                            value = matrice[layno][resno][bandno];
-                            if (imsb >= value) {
-                                value = 0;
-                            } else {
-                                value -= imsb;
-                            }
-                        } else {
-                            value = matrice[layno][resno][bandno] - matrice[layno - 1][resno][bandno];
-                            if (imsb >= matrice[layno - 1][resno][bandno]) {
-                                value -= (imsb - matrice[layno - 1][resno][bandno]);
-                                if (value < 0) {
-                                    value = 0;
-                                }
-                            }
-                        }
-
-                        if (layno == 0) {
-                            cblk->numpassesinlayers = 0;
-                        }
-
-                        n = cblk->numpassesinlayers;
-                        if (cblk->numpassesinlayers == 0) {
-                            if (value != 0) {
-                                n = 3 * value - 2 + cblk->numpassesinlayers;
-                            } else {
-                                n = cblk->numpassesinlayers;
-                            }
-                        } else {
-                            n = 3 * value + cblk->numpassesinlayers;
-                        }
-
-                        layer->numpasses = n - cblk->numpassesinlayers;
-
-                        if (!layer->numpasses) {
-                            continue;
-                        }
-
-                        if (cblk->numpassesinlayers == 0) {
-                            layer->len = cblk->passes[n - 1].rate;
-                            layer->data = cblk->data;
-                        } else {
-                            layer->len = cblk->passes[n - 1].rate - cblk->passes[cblk->numpassesinlayers -
-                                         1].rate;
-                            layer->data = cblk->data + cblk->passes[cblk->numpassesinlayers - 1].rate;
-                        }
-                        if (final) {
-                            cblk->numpassesinlayers = n;
-                        }
-                    }
-                }
-            }
-        }
-    }
-}
-
-void tcd_rateallocate_fixed(opj_tcd_t *tcd)
-{
-    int layno;
-    for (layno = 0; layno < tcd->tcp->numlayers; layno++) {
-        tcd_makelayer_fixed(tcd, layno, 1);
-    }
-}
-
-void tcd_makelayer(opj_tcd_t *tcd, int layno, double thresh, int final)
-{
-    int compno, resno, bandno, precno, cblkno, passno;
-
-    opj_tcd_tile_t *tcd_tile = tcd->tcd_tile;
-
-    tcd_tile->distolayer[layno] = 0;    /* fixed_quality */
-
-    for (compno = 0; compno < tcd_tile->numcomps; compno++) {
-        opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno];
-        for (resno = 0; resno < tilec->numresolutions; resno++) {
-            opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-            for (bandno = 0; bandno < res->numbands; bandno++) {
-                opj_tcd_band_t *band = &res->bands[bandno];
-                for (precno = 0; precno < res->pw * res->ph; precno++) {
-                    opj_tcd_precinct_t *prc = &band->precincts[precno];
-                    for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-                        opj_tcd_cblk_enc_t *cblk = &prc->cblks.enc[cblkno];
-                        opj_tcd_layer_t *layer = &cblk->layers[layno];
-
-                        int n;
-                        if (layno == 0) {
-                            cblk->numpassesinlayers = 0;
-                        }
-                        n = cblk->numpassesinlayers;
-                        for (passno = cblk->numpassesinlayers; passno < cblk->totalpasses; passno++) {
-                            int dr;
-                            double dd;
-                            opj_tcd_pass_t *pass = &cblk->passes[passno];
-                            if (n == 0) {
-                                dr = pass->rate;
-                                dd = pass->distortiondec;
-                            } else {
-                                dr = pass->rate - cblk->passes[n - 1].rate;
-                                dd = pass->distortiondec - cblk->passes[n - 1].distortiondec;
-                            }
-                            if (!dr) {
-                                if (dd != 0) {
-                                    n = passno + 1;
-                                }
-                                continue;
-                            }
-                            if (dd / dr >= thresh) {
-                                n = passno + 1;
-                            }
-                        }
-                        layer->numpasses = n - cblk->numpassesinlayers;
-
-                        if (!layer->numpasses) {
-                            layer->disto = 0;
-                            continue;
-                        }
-                        if (cblk->numpassesinlayers == 0) {
-                            layer->len = cblk->passes[n - 1].rate;
-                            layer->data = cblk->data;
-                            layer->disto = cblk->passes[n - 1].distortiondec;
-                        } else {
-                            layer->len = cblk->passes[n - 1].rate - cblk->passes[cblk->numpassesinlayers -
-                                         1].rate;
-                            layer->data = cblk->data + cblk->passes[cblk->numpassesinlayers - 1].rate;
-                            layer->disto = cblk->passes[n - 1].distortiondec -
-                                           cblk->passes[cblk->numpassesinlayers - 1].distortiondec;
-                        }
-
-                        tcd_tile->distolayer[layno] += layer->disto;    /* fixed_quality */
-
-                        if (final) {
-                            cblk->numpassesinlayers = n;
-                        }
-                    }
-                }
-            }
-        }
-    }
-}
-
-opj_bool tcd_rateallocate(opj_tcd_t *tcd, unsigned char *dest, int len,
-                          opj_codestream_info_t *cstr_info)
-{
-    int compno, resno, bandno, precno, cblkno, passno, layno;
-    double min, max;
-    double cumdisto[100];   /* fixed_quality */
-    const double K = 1;     /* 1.1; fixed_quality */
-    double maxSE = 0;
-
-    opj_cp_t *cp = tcd->cp;
-    opj_tcd_tile_t *tcd_tile = tcd->tcd_tile;
-    opj_tcp_t *tcd_tcp = tcd->tcp;
-
-    min = DBL_MAX;
-    max = 0;
-
-    tcd_tile->numpix = 0;       /* fixed_quality */
-
-    for (compno = 0; compno < tcd_tile->numcomps; compno++) {
-        opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno];
-        tilec->numpix = 0;
-
-        for (resno = 0; resno < tilec->numresolutions; resno++) {
-            opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-
-            for (bandno = 0; bandno < res->numbands; bandno++) {
-                opj_tcd_band_t *band = &res->bands[bandno];
-
-                for (precno = 0; precno < res->pw * res->ph; precno++) {
-                    opj_tcd_precinct_t *prc = &band->precincts[precno];
-
-                    for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-                        opj_tcd_cblk_enc_t *cblk = &prc->cblks.enc[cblkno];
-
-                        for (passno = 0; passno < cblk->totalpasses; passno++) {
-                            opj_tcd_pass_t *pass = &cblk->passes[passno];
-                            int dr;
-                            double dd, rdslope;
-                            if (passno == 0) {
-                                dr = pass->rate;
-                                dd = pass->distortiondec;
-                            } else {
-                                dr = pass->rate - cblk->passes[passno - 1].rate;
-                                dd = pass->distortiondec - cblk->passes[passno - 1].distortiondec;
-                            }
-                            if (dr == 0) {
-                                continue;
-                            }
-                            rdslope = dd / dr;
-                            if (rdslope < min) {
-                                min = rdslope;
-                            }
-                            if (rdslope > max) {
-                                max = rdslope;
-                            }
-                        } /* passno */
-
-                        /* fixed_quality */
-                        tcd_tile->numpix += ((cblk->x1 - cblk->x0) * (cblk->y1 - cblk->y0));
-                        tilec->numpix += ((cblk->x1 - cblk->x0) * (cblk->y1 - cblk->y0));
-                    } /* cbklno */
-                } /* precno */
-            } /* bandno */
-        } /* resno */
-
-        maxSE += (((double)(1 << tcd->image->comps[compno].prec) - 1.0)
-                  * ((double)(1 << tcd->image->comps[compno].prec) - 1.0))
-                 * ((double)(tilec->numpix));
-    } /* compno */
-
-    /* index file */
-    if (cstr_info) {
-        opj_tile_info_t *tile_info = &cstr_info->tile[tcd->tcd_tileno];
-        tile_info->numpix = tcd_tile->numpix;
-        tile_info->distotile = tcd_tile->distotile;
-        tile_info->thresh = (double *) opj_malloc(tcd_tcp->numlayers * sizeof(double));
-    }
-
-    for (layno = 0; layno < tcd_tcp->numlayers; layno++) {
-        double lo = min;
-        double hi = max;
-        int success = 0;
-        int maxlen = tcd_tcp->rates[layno] ? int_min(((int) ceil(
-                         tcd_tcp->rates[layno])), len) : len;
-        double goodthresh = 0;
-        double stable_thresh = 0;
-        int i;
-        double distotarget;     /* fixed_quality */
-
-        /* fixed_quality */
-        distotarget = tcd_tile->distotile - ((K * maxSE) / pow((float)10,
-                                             tcd_tcp->distoratio[layno] / 10));
-
-        /* Don't try to find an optimal threshold but rather take everything not included yet, if
-          -r xx,yy,zz,0   (disto_alloc == 1 and rates == 0)
-          -q xx,yy,zz,0   (fixed_quality == 1 and distoratio == 0)
-          ==> possible to have some lossy layers and the last layer for sure lossless */
-        if (((cp->disto_alloc == 1) && (tcd_tcp->rates[layno] > 0)) ||
-                ((cp->fixed_quality == 1) && (tcd_tcp->distoratio[layno] > 0))) {
-            opj_t2_t *t2 = t2_create(tcd->cinfo, tcd->image, cp);
-            double thresh = 0;
-
-            for (i = 0; i < 128; i++) {
-                int l = 0;
-                double distoachieved = 0;   /* fixed_quality */
-                thresh = (lo + hi) / 2;
-
-                tcd_makelayer(tcd, layno, thresh, 0);
-
-                if (cp->fixed_quality) {    /* fixed_quality */
-                    if (cp->cinema) {
-                        l = t2_encode_packets(t2, tcd->tcd_tileno, tcd_tile, layno + 1, dest, maxlen,
-                                              cstr_info, tcd->cur_tp_num, tcd->tp_pos, tcd->cur_pino, THRESH_CALC,
-                                              tcd->cur_totnum_tp);
-                        if (l == -999) {
-                            lo = thresh;
-                            continue;
-                        } else {
-                            distoachieved = layno == 0 ?
-                                            tcd_tile->distolayer[0] : cumdisto[layno - 1] + tcd_tile->distolayer[layno];
-                            if (distoachieved < distotarget) {
-                                hi = thresh;
-                                stable_thresh = thresh;
-                                continue;
-                            } else {
-                                lo = thresh;
-                            }
-                        }
-                    } else {
-                        distoachieved = (layno == 0) ?
-                                        tcd_tile->distolayer[0] : (cumdisto[layno - 1] + tcd_tile->distolayer[layno]);
-                        if (distoachieved < distotarget) {
-                            hi = thresh;
-                            stable_thresh = thresh;
-                            continue;
-                        }
-                        lo = thresh;
-                    }
-                } else {
-                    l = t2_encode_packets(t2, tcd->tcd_tileno, tcd_tile, layno + 1, dest, maxlen,
-                                          cstr_info, tcd->cur_tp_num, tcd->tp_pos, tcd->cur_pino, THRESH_CALC,
-                                          tcd->cur_totnum_tp);
-                    /* TODO: what to do with l ??? seek / tell ??? */
-                    /* opj_event_msg(tcd->cinfo, EVT_INFO, "rate alloc: len=%d, max=%d\n", l, maxlen); */
-                    if (l == -999) {
-                        lo = thresh;
-                        continue;
-                    }
-                    hi = thresh;
-                    stable_thresh = thresh;
-                }
-            }
-            success = 1;
-            goodthresh = stable_thresh == 0 ? thresh : stable_thresh;
-            t2_destroy(t2);
-        } else {
-            success = 1;
-            goodthresh = min;
-        }
-
-        if (!success) {
-            return OPJ_FALSE;
-        }
-
-        if (cstr_info) { /* Threshold for Marcela Index */
-            cstr_info->tile[tcd->tcd_tileno].thresh[layno] = goodthresh;
-        }
-        tcd_makelayer(tcd, layno, goodthresh, 1);
-
-        /* fixed_quality */
-        cumdisto[layno] = (layno == 0) ? tcd_tile->distolayer[0] :
-                          (cumdisto[layno - 1] + tcd_tile->distolayer[layno]);
-    }
-
-    return OPJ_TRUE;
-}
-
-int tcd_encode_tile(opj_tcd_t *tcd, int tileno, unsigned char *dest, int len,
-                    opj_codestream_info_t *cstr_info)
-{
-    int compno;
-    int l, i, numpacks = 0;
-    opj_tcd_tile_t *tile = NULL;
-    opj_tcp_t *tcd_tcp = NULL;
-    opj_cp_t *cp = NULL;
-
-    opj_tcp_t *tcp = &tcd->cp->tcps[0];
-    opj_tccp_t *tccp = &tcp->tccps[0];
-    opj_image_t *image = tcd->image;
-
-    opj_t1_t *t1 = NULL;        /* T1 component */
-    opj_t2_t *t2 = NULL;        /* T2 component */
-
-    tcd->tcd_tileno = tileno;
-    tcd->tcd_tile = tcd->tcd_image->tiles;
-    tcd->tcp = &tcd->cp->tcps[tileno];
-
-    tile = tcd->tcd_tile;
-    tcd_tcp = tcd->tcp;
-    cp = tcd->cp;
-
-    if (tcd->cur_tp_num == 0) {
-        tcd->encoding_time = opj_clock();   /* time needed to encode a tile */
-        /* INDEX >> "Precinct_nb_X et Precinct_nb_Y" */
-        if (cstr_info) {
-            opj_tcd_tilecomp_t *tilec_idx = &tile->comps[0];    /* based on component 0 */
-            for (i = 0; i < tilec_idx->numresolutions; i++) {
-                opj_tcd_resolution_t *res_idx = &tilec_idx->resolutions[i];
-
-                cstr_info->tile[tileno].pw[i] = res_idx->pw;
-                cstr_info->tile[tileno].ph[i] = res_idx->ph;
-
-                numpacks += res_idx->pw * res_idx->ph;
-
-                cstr_info->tile[tileno].pdx[i] = tccp->prcw[i];
-                cstr_info->tile[tileno].pdy[i] = tccp->prch[i];
-            }
-            cstr_info->tile[tileno].packet = (opj_packet_info_t*) opj_calloc(
-                                                 cstr_info->numcomps * cstr_info->numlayers * numpacks,
-                                                 sizeof(opj_packet_info_t));
-        }
-        /* << INDEX */
-
-        /*---------------TILE-------------------*/
-
-        for (compno = 0; compno < tile->numcomps; compno++) {
-            int x, y;
-
-            int adjust = image->comps[compno].sgnd ? 0 : 1 << (image->comps[compno].prec -
-                         1);
-            int offset_x = int_ceildiv(image->x0, image->comps[compno].dx);
-            int offset_y = int_ceildiv(image->y0, image->comps[compno].dy);
-
-            opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-            int tw = tilec->x1 - tilec->x0;
-            int w = int_ceildiv(image->x1 - image->x0, image->comps[compno].dx);
-
-            /* extract tile data */
-
-            if (tcd_tcp->tccps[compno].qmfbid == 1) {
-                for (y = tilec->y0; y < tilec->y1; y++) {
-                    /* start of the src tile scanline */
-                    int *data = &image->comps[compno].data[(tilec->x0 - offset_x) +
-                                                           (y - offset_y) * w];
-                    /* start of the dst tile scanline */
-                    int *tile_data = &tilec->data[(y - tilec->y0) * tw];
-                    for (x = tilec->x0; x < tilec->x1; x++) {
-                        *tile_data++ = *data++ - adjust;
-                    }
-                }
-            } else if (tcd_tcp->tccps[compno].qmfbid == 0) {
-                for (y = tilec->y0; y < tilec->y1; y++) {
-                    /* start of the src tile scanline */
-                    int *data = &image->comps[compno].data[(tilec->x0 - offset_x) +
-                                                           (y - offset_y) * w];
-                    /* start of the dst tile scanline */
-                    int *tile_data = &tilec->data[(y - tilec->y0) * tw];
-                    for (x = tilec->x0; x < tilec->x1; x++) {
-                        *tile_data++ = (*data++ - adjust) << 11;
-                    }
-
-                }
-            }
-        }
-
-        /*----------------MCT-------------------*/
-        if (tcd_tcp->mct) {
-            int samples = (tile->comps[0].x1 - tile->comps[0].x0) *
-                          (tile->comps[0].y1 - tile->comps[0].y0);
-            if (tcd_tcp->tccps[0].qmfbid == 0) {
-                mct_encode_real(tile->comps[0].data, tile->comps[1].data, tile->comps[2].data,
-                                samples);
-            } else {
-                mct_encode(tile->comps[0].data, tile->comps[1].data, tile->comps[2].data,
-                           samples);
-            }
-        }
-
-        /*----------------DWT---------------------*/
-
-        for (compno = 0; compno < tile->numcomps; compno++) {
-            opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-            if (tcd_tcp->tccps[compno].qmfbid == 1) {
-                dwt_encode(tilec);
-            } else if (tcd_tcp->tccps[compno].qmfbid == 0) {
-                dwt_encode_real(tilec);
-            }
-        }
-
-        /*------------------TIER1-----------------*/
-        t1 = t1_create(tcd->cinfo);
-        t1_encode_cblks(t1, tile, tcd_tcp);
-        t1_destroy(t1);
-
-        /*-----------RATE-ALLOCATE------------------*/
-
-        /* INDEX */
-        if (cstr_info) {
-            cstr_info->index_write = 0;
-        }
-        if (cp->disto_alloc || cp->fixed_quality) { /* fixed_quality */
-            /* Normal Rate/distortion allocation */
-            tcd_rateallocate(tcd, dest, len, cstr_info);
-        } else {
-            /* Fixed layer allocation */
-            tcd_rateallocate_fixed(tcd);
-        }
-    }
-    /*--------------TIER2------------------*/
-
-    /* INDEX */
-    if (cstr_info) {
-        cstr_info->index_write = 1;
-    }
-
-    t2 = t2_create(tcd->cinfo, image, cp);
-    l = t2_encode_packets(t2, tileno, tile, tcd_tcp->numlayers, dest, len,
-                          cstr_info, tcd->tp_num, tcd->tp_pos, tcd->cur_pino, FINAL_PASS,
-                          tcd->cur_totnum_tp);
-    t2_destroy(t2);
-
-    /*---------------CLEAN-------------------*/
-
-
-    if (tcd->cur_tp_num == tcd->cur_totnum_tp - 1) {
-        tcd->encoding_time = opj_clock() - tcd->encoding_time;
-        opj_event_msg(tcd->cinfo, EVT_INFO, "- tile encoded in %f s\n",
-                      tcd->encoding_time);
-
-        /* cleaning memory */
-        for (compno = 0; compno < tile->numcomps; compno++) {
-            opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-            opj_aligned_free(tilec->data);
-        }
-    }
-
-    return l;
-}
-
-opj_bool tcd_decode_tile(opj_tcd_t *tcd, unsigned char *src, int len,
-                         int tileno, opj_codestream_info_t *cstr_info)
-{
-    int l;
-    int compno;
-    int eof = 0;
-    double tile_time, t1_time, dwt_time;
-    opj_tcd_tile_t *tile = NULL;
-
-    opj_t1_t *t1 = NULL;        /* T1 component */
-    opj_t2_t *t2 = NULL;        /* T2 component */
-
-    tcd->tcd_tileno = tileno;
-    tcd->tcd_tile = &(tcd->tcd_image->tiles[tileno]);
-    tcd->tcp = &(tcd->cp->tcps[tileno]);
-    tile = tcd->tcd_tile;
-
-    tile_time = opj_clock();    /* time needed to decode a tile */
-    opj_event_msg(tcd->cinfo, EVT_INFO, "tile %d of %d\n", tileno + 1,
-                  tcd->cp->tw * tcd->cp->th);
-
-    /* INDEX >>  */
-    if (cstr_info) {
-        int resno, compno, numprec = 0;
-        for (compno = 0; compno < cstr_info->numcomps; compno++) {
-            opj_tcp_t *tcp = &tcd->cp->tcps[0];
-            opj_tccp_t *tccp = &tcp->tccps[compno];
-            opj_tcd_tilecomp_t *tilec_idx = &tile->comps[compno];
-            for (resno = 0; resno < tilec_idx->numresolutions; resno++) {
-                opj_tcd_resolution_t *res_idx = &tilec_idx->resolutions[resno];
-                cstr_info->tile[tileno].pw[resno] = res_idx->pw;
-                cstr_info->tile[tileno].ph[resno] = res_idx->ph;
-                numprec += res_idx->pw * res_idx->ph;
-                if (tccp->csty & J2K_CP_CSTY_PRT) {
-                    cstr_info->tile[tileno].pdx[resno] = tccp->prcw[resno];
-                    cstr_info->tile[tileno].pdy[resno] = tccp->prch[resno];
-                } else {
-                    cstr_info->tile[tileno].pdx[resno] = 15;
-                    cstr_info->tile[tileno].pdy[resno] = 15;
-                }
-            }
-        }
-        cstr_info->tile[tileno].packet = (opj_packet_info_t *) opj_malloc(
-                                             cstr_info->numlayers * numprec * sizeof(opj_packet_info_t));
-        cstr_info->packno = 0;
-    }
-    /* << INDEX */
-
-    /*--------------TIER2------------------*/
-
-    t2 = t2_create(tcd->cinfo, tcd->image, tcd->cp);
-    l = t2_decode_packets(t2, src, len, tileno, tile, cstr_info);
-    t2_destroy(t2);
-
-    if (l == -999) {
-        eof = 1;
-        opj_event_msg(tcd->cinfo, EVT_ERROR, "tcd_decode: incomplete bitstream\n");
-    }
-
-    /*------------------TIER1-----------------*/
-
-    t1_time = opj_clock();  /* time needed to decode a tile */
-    t1 = t1_create(tcd->cinfo);
-    if (t1 == NULL) {
-        opj_event_msg(tcd->cinfo, EVT_ERROR, "Out of memory\n");
-        t1_destroy(t1);
-        return OPJ_FALSE;
-    }
-
-    for (compno = 0; compno < tile->numcomps; ++compno) {
-        opj_tcd_tilecomp_t* tilec = &tile->comps[compno];
-        /* The +3 is headroom required by the vectorized DWT */
-        tilec->data = (int*) opj_aligned_malloc((((tilec->x1 - tilec->x0) *
-                                                (tilec->y1 - tilec->y0)) + 3) * sizeof(int));
-        if (tilec->data == NULL) {
-            opj_event_msg(tcd->cinfo, EVT_ERROR, "Out of memory\n");
-            return OPJ_FALSE;
-        }
-
-        t1_decode_cblks(t1, tilec, &tcd->tcp->tccps[compno]);
-    }
-    t1_destroy(t1);
-    t1_time = opj_clock() - t1_time;
-    opj_event_msg(tcd->cinfo, EVT_INFO, "- tiers-1 took %f s\n", t1_time);
-
-    /*----------------DWT---------------------*/
-
-    dwt_time = opj_clock(); /* time needed to decode a tile */
-    for (compno = 0; compno < tile->numcomps; compno++) {
-        opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-        int numres2decode;
-
-        if (tcd->cp->reduce != 0) {
-            if (tile->comps[compno].numresolutions < (tcd->cp->reduce - 1)) {
-                opj_event_msg(tcd->cinfo, EVT_ERROR,
-                              "Error decoding tile. The number of resolutions to remove [%d+1] is higher than the number "
-                              " of resolutions in the original codestream [%d]\nModify the cp_reduce parameter.\n",
-                              tcd->cp->reduce, tile->comps[compno].numresolutions);
-                return OPJ_FALSE;
-            } else {
-                tcd->image->comps[compno].resno_decoded =
-                    tile->comps[compno].numresolutions - tcd->cp->reduce - 1;
-            }
-        }
-
-        numres2decode = tcd->image->comps[compno].resno_decoded + 1;
-        if (numres2decode > 0) {
-            if (tcd->tcp->tccps[compno].qmfbid == 1) {
-                dwt_decode(tilec, numres2decode);
-            } else {
-                dwt_decode_real(tilec, numres2decode);
-            }
-        }
-    }
-    dwt_time = opj_clock() - dwt_time;
-    opj_event_msg(tcd->cinfo, EVT_INFO, "- dwt took %f s\n", dwt_time);
-
-    /*----------------MCT-------------------*/
-
-    if (tcd->tcp->mct) {
-        int n = (tile->comps[0].x1 - tile->comps[0].x0) * (tile->comps[0].y1 -
-                tile->comps[0].y0);
-
-        if (tile->numcomps >= 3) {
-            if (tcd->tcp->tccps[0].qmfbid == 1) {
-                mct_decode(
-                    tile->comps[0].data,
-                    tile->comps[1].data,
-                    tile->comps[2].data,
-                    n);
-            } else {
-                mct_decode_real(
-                    (float*)tile->comps[0].data,
-                    (float*)tile->comps[1].data,
-                    (float*)tile->comps[2].data,
-                    n);
-            }
-        } else {
-            opj_event_msg(tcd->cinfo, EVT_WARNING,
-                          "Number of components (%d) is inconsistent with a MCT. Skip the MCT step.\n",
-                          tile->numcomps);
-        }
-    }
-
-    /*---------------TILE-------------------*/
-
-    for (compno = 0; compno < tile->numcomps; ++compno) {
-        opj_tcd_tilecomp_t* tilec = &tile->comps[compno];
-        opj_image_comp_t* imagec = &tcd->image->comps[compno];
-        opj_tcd_resolution_t* res = &tilec->resolutions[imagec->resno_decoded];
-        int adjust = imagec->sgnd ? 0 : 1 << (imagec->prec - 1);
-        int min = imagec->sgnd ? -(1 << (imagec->prec - 1)) : 0;
-        int max = imagec->sgnd ? (1 << (imagec->prec - 1)) - 1 :
-                  (1 << imagec->prec) - 1;
-
-        int tw = tilec->x1 - tilec->x0;
-        int w = imagec->w;
-
-        int offset_x = int_ceildivpow2(imagec->x0, imagec->factor);
-        int offset_y = int_ceildivpow2(imagec->y0, imagec->factor);
-
-        int i, j;
-        if (!imagec->data) {
-            imagec->data = (int*) opj_malloc(imagec->w * imagec->h * sizeof(int));
-        }
-        if (!imagec->data) {
-            opj_event_msg(tcd->cinfo, EVT_ERROR, "Out of memory\n");
-            return OPJ_FALSE;
-        }
-        if (tcd->tcp->tccps[compno].qmfbid == 1) {
-            for (j = res->y0; j < res->y1; ++j) {
-                for (i = res->x0; i < res->x1; ++i) {
-                    int v = tilec->data[i - res->x0 + (j - res->y0) * tw];
-                    v += adjust;
-                    imagec->data[(i - offset_x) + (j - offset_y) * w] = int_clamp(v, min, max);
-                }
-            }
-        } else {
-            for (j = res->y0; j < res->y1; ++j) {
-                for (i = res->x0; i < res->x1; ++i) {
-                    float tmp = ((float*)tilec->data)[i - res->x0 + (j - res->y0) * tw];
-                    int v = lrintf(tmp);
-                    v += adjust;
-                    imagec->data[(i - offset_x) + (j - offset_y) * w] = int_clamp(v, min, max);
-                }
-            }
-        }
-        opj_aligned_free(tilec->data);
-    }
-
-    tile_time = opj_clock() - tile_time;    /* time needed to decode a tile */
-    opj_event_msg(tcd->cinfo, EVT_INFO, "- tile decoded in %f s\n", tile_time);
-
-    if (eof) {
-        return OPJ_FALSE;
-    }
-
-    return OPJ_TRUE;
-}
-
-void tcd_free_decode(opj_tcd_t *tcd)
-{
-    opj_tcd_image_t *tcd_image = tcd->tcd_image;
-    int i = 0;
-    for (i = 0; i < tcd_image->tw * tcd_image->th; i++) {
-        tcd_free_decode_tile(tcd, i);
-    }
-
-    opj_free(tcd_image->tiles);
-}
-
-void tcd_free_decode_tile(opj_tcd_t *tcd, int tileno)
-{
-    int compno, resno, bandno, precno, cblkno;
-
-    opj_tcd_image_t *tcd_image = tcd->tcd_image;
-
-    opj_tcd_tile_t *tile = &tcd_image->tiles[tileno];
-    if (tile->comps != NULL) {
-        for (compno = 0; compno < tile->numcomps; compno++) {
-            opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-            for (resno = 0; resno < tilec->numresolutions; resno++) {
-                opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-                for (bandno = 0; bandno < res->numbands; bandno++) {
-                    opj_tcd_band_t *band = &res->bands[bandno];
-                    for (precno = 0; precno < res->ph * res->pw; precno++) {
-                        opj_tcd_precinct_t *prec = &band->precincts[precno];
-                        if (prec->cblks.dec != NULL) {
-                            for (cblkno = 0; cblkno < prec->cw * prec->ch; ++cblkno) {
-                                opj_tcd_cblk_dec_t* cblk = &prec->cblks.dec[cblkno];
-                                opj_free(cblk->data);
-                                opj_free(cblk->segs);
-                            }
-                            opj_free(prec->cblks.dec);
-                        }
-                        if (prec->imsbtree != NULL) {
-                            tgt_destroy(prec->imsbtree);
-                        }
-                        if (prec->incltree != NULL) {
-                            tgt_destroy(prec->incltree);
-                        }
-
-
-                    }
-                    opj_free(band->precincts);
-                }
-            }
-            opj_free(tilec->resolutions);
-        }
-        opj_free(tile->comps);
-        tile->comps = NULL;
-    }
-}
-
-
-
diff --git a/src/lib/openmj2/tcd.h b/src/lib/openmj2/tcd.h
deleted file mode 100644 (file)
index 4a53001..0000000
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef __TCD_H
-#define __TCD_H
-/**
-@file tcd.h
-@brief Implementation of a tile coder/decoder (TCD)
-
-The functions in TCD.C have for goal to encode or decode each tile independently from
-each other. The functions in TCD.C are used by some function in J2K.C.
-*/
-
-/** @defgroup TCD TCD - Implementation of a tile coder/decoder */
-/*@{*/
-
-/**
-FIXME: documentation
-*/
-typedef struct opj_tcd_seg {
-    unsigned char** data;
-    int dataindex;
-    int numpasses;
-    int len;
-    int maxpasses;
-    int numnewpasses;
-    int newlen;
-} opj_tcd_seg_t;
-
-/**
-FIXME: documentation
-*/
-typedef struct opj_tcd_pass {
-    int rate;
-    double distortiondec;
-    int term, len;
-} opj_tcd_pass_t;
-
-/**
-FIXME: documentation
-*/
-typedef struct opj_tcd_layer {
-    int numpasses;        /* Number of passes in the layer */
-    int len;          /* len of information */
-    double disto;         /* add for index (Cfr. Marcela) */
-    unsigned char *data;      /* data */
-} opj_tcd_layer_t;
-
-/**
-FIXME: documentation
-*/
-typedef struct opj_tcd_cblk_enc {
-    unsigned char* data;  /* Data */
-    opj_tcd_layer_t* layers;  /* layer information */
-    opj_tcd_pass_t* passes;   /* information about the passes */
-    int x0, y0, x1,
-        y1;       /* dimension of the code-blocks : left upper corner (x0, y0) right low corner (x1,y1) */
-    int numbps;
-    int numlenbits;
-    int numpasses;        /* number of pass already done for the code-blocks */
-    int numpassesinlayers;    /* number of passes in the layer */
-    int totalpasses;      /* total number of passes */
-} opj_tcd_cblk_enc_t;
-
-typedef struct opj_tcd_cblk_dec {
-    unsigned char* data;  /* Data */
-    opj_tcd_seg_t* segs;      /* segments information */
-    int x0, y0, x1,
-        y1;     /* dimension of the code-blocks : left upper corner (x0, y0) right low corner (x1,y1) */
-    int numbps;
-    int numlenbits;
-    int len;          /* length */
-    int numnewpasses;     /* number of pass added to the code-blocks */
-    int numsegs;          /* number of segments */
-} opj_tcd_cblk_dec_t;
-
-/**
-FIXME: documentation
-*/
-typedef struct opj_tcd_precinct {
-    int x0, y0, x1,
-        y1;       /* dimension of the precinct : left upper corner (x0, y0) right low corner (x1,y1) */
-    int cw, ch;           /* number of precinct in width and height */
-    union {       /* code-blocks information */
-        opj_tcd_cblk_enc_t* enc;
-        opj_tcd_cblk_dec_t* dec;
-    } cblks;
-    opj_tgt_tree_t *incltree;     /* inclusion tree */
-    opj_tgt_tree_t *imsbtree;     /* IMSB tree */
-} opj_tcd_precinct_t;
-
-/**
-FIXME: documentation
-*/
-typedef struct opj_tcd_band {
-    int x0, y0, x1,
-        y1;       /* dimension of the subband : left upper corner (x0, y0) right low corner (x1,y1) */
-    int bandno;
-    opj_tcd_precinct_t *precincts;    /* precinct information */
-    int numbps;
-    float stepsize;
-} opj_tcd_band_t;
-
-/**
-FIXME: documentation
-*/
-typedef struct opj_tcd_resolution {
-    int x0, y0, x1,
-        y1;       /* dimension of the resolution level : left upper corner (x0, y0) right low corner (x1,y1) */
-    int pw, ph;
-    int numbands;         /* number sub-band for the resolution level */
-    opj_tcd_band_t bands[3];      /* subband information */
-} opj_tcd_resolution_t;
-
-/**
-FIXME: documentation
-*/
-typedef struct opj_tcd_tilecomp {
-    int x0, y0, x1,
-        y1;       /* dimension of component : left upper corner (x0, y0) right low corner (x1,y1) */
-    int numresolutions;       /* number of resolutions level */
-    opj_tcd_resolution_t *resolutions;    /* resolutions information */
-    int *data;            /* data of the component */
-    int numpix;           /* add fixed_quality */
-} opj_tcd_tilecomp_t;
-
-/**
-FIXME: documentation
-*/
-typedef struct opj_tcd_tile {
-    int x0, y0, x1,
-        y1;       /* dimension of the tile : left upper corner (x0, y0) right low corner (x1,y1) */
-    int numcomps;         /* number of components in tile */
-    opj_tcd_tilecomp_t *comps;    /* Components information */
-    int numpix;           /* add fixed_quality */
-    double distotile;     /* add fixed_quality */
-    double distolayer[100];   /* add fixed_quality */
-    /** packet number */
-    int packno;
-} opj_tcd_tile_t;
-
-/**
-FIXME: documentation
-*/
-typedef struct opj_tcd_image {
-    int tw, th;           /* number of tiles in width and height */
-    opj_tcd_tile_t *tiles;        /* Tiles information */
-} opj_tcd_image_t;
-
-/**
-Tile coder/decoder
-*/
-typedef struct opj_tcd {
-    /** Position of the tilepart flag in Progression order*/
-    int tp_pos;
-    /** Tile part number*/
-    int tp_num;
-    /** Current tile part number*/
-    int cur_tp_num;
-    /** Total number of tileparts of the current tile*/
-    int cur_totnum_tp;
-    /** Current Packet iterator number */
-    int cur_pino;
-    /** codec context */
-    opj_common_ptr cinfo;
-
-    /** info on each image tile */
-    opj_tcd_image_t *tcd_image;
-    /** image */
-    opj_image_t *image;
-    /** coding parameters */
-    opj_cp_t *cp;
-    /** pointer to the current encoded/decoded tile */
-    opj_tcd_tile_t *tcd_tile;
-    /** coding/decoding parameters common to all tiles */
-    opj_tcp_t *tcp;
-    /** current encoded/decoded tile */
-    int tcd_tileno;
-    /** Time taken to encode a tile*/
-    double encoding_time;
-} opj_tcd_t;
-
-/** @name Exported functions */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-
-/**
-Dump the content of a tcd structure
-*/
-void tcd_dump(FILE *fd, opj_tcd_t *tcd, opj_tcd_image_t *img);
-/**
-Create a new TCD handle
-@param cinfo Codec context info
-@return Returns a new TCD handle if successful returns NULL otherwise
-*/
-opj_tcd_t* tcd_create(opj_common_ptr cinfo);
-/**
-Destroy a previously created TCD handle
-@param tcd TCD handle to destroy
-*/
-void tcd_destroy(opj_tcd_t *tcd);
-/**
-Initialize the tile coder (allocate the memory)
-@param tcd TCD handle
-@param image Raw image
-@param cp Coding parameters
-@param curtileno Number that identifies the tile that will be encoded
-*/
-void tcd_malloc_encode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp,
-                       int curtileno);
-/**
-Free the memory allocated for encoding
-@param tcd TCD handle
-*/
-void tcd_free_encode(opj_tcd_t *tcd);
-/**
-Initialize the tile coder (reuses the memory allocated by tcd_malloc_encode)
-@param tcd TCD handle
-@param image Raw image
-@param cp Coding parameters
-@param curtileno Number that identifies the tile that will be encoded
-*/
-void tcd_init_encode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp,
-                     int curtileno);
-/**
-Initialize the tile decoder
-@param tcd TCD handle
-@param image Raw image
-@param cp Coding parameters
-*/
-void tcd_malloc_decode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp);
-void tcd_malloc_decode_tile(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp,
-                            int tileno, opj_codestream_info_t *cstr_info);
-void tcd_makelayer_fixed(opj_tcd_t *tcd, int layno, int final);
-void tcd_rateallocate_fixed(opj_tcd_t *tcd);
-void tcd_makelayer(opj_tcd_t *tcd, int layno, double thresh, int final);
-opj_bool tcd_rateallocate(opj_tcd_t *tcd, unsigned char *dest, int len,
-                          opj_codestream_info_t *cstr_info);
-/**
-Encode a tile from the raw image into a buffer
-@param tcd TCD handle
-@param tileno Number that identifies one of the tiles to be encoded
-@param dest Destination buffer
-@param len Length of destination buffer
-@param cstr_info Codestream information structure
-@return
-*/
-int tcd_encode_tile(opj_tcd_t *tcd, int tileno, unsigned char *dest, int len,
-                    opj_codestream_info_t *cstr_info);
-/**
-Decode a tile from a buffer into a raw image
-@param tcd TCD handle
-@param src Source buffer
-@param len Length of source buffer
-@param tileno Number that identifies one of the tiles to be decoded
-@param cstr_info Codestream information structure
-*/
-opj_bool tcd_decode_tile(opj_tcd_t *tcd, unsigned char *src, int len,
-                         int tileno, opj_codestream_info_t *cstr_info);
-/**
-Free the memory allocated for decoding
-@param tcd TCD handle
-*/
-void tcd_free_decode(opj_tcd_t *tcd);
-void tcd_free_decode_tile(opj_tcd_t *tcd, int tileno);
-
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif /* __TCD_H */
diff --git a/src/lib/openmj2/tgt.c b/src/lib/openmj2/tgt.c
deleted file mode 100644 (file)
index ae5b893..0000000
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "opj_includes.h"
-
-/*
-==========================================================
-   Tag-tree coder interface
-==========================================================
-*/
-
-opj_tgt_tree_t *tgt_create(int numleafsh, int numleafsv)
-{
-    int nplh[32];
-    int nplv[32];
-    opj_tgt_node_t *node = NULL;
-    opj_tgt_node_t *parentnode = NULL;
-    opj_tgt_node_t *parentnode0 = NULL;
-    opj_tgt_tree_t *tree = NULL;
-    int i, j, k;
-    int numlvls;
-    int n;
-
-    tree = (opj_tgt_tree_t *) opj_malloc(sizeof(opj_tgt_tree_t));
-    if (!tree) {
-        return NULL;
-    }
-    tree->numleafsh = numleafsh;
-    tree->numleafsv = numleafsv;
-
-    numlvls = 0;
-    nplh[0] = numleafsh;
-    nplv[0] = numleafsv;
-    tree->numnodes = 0;
-    do {
-        n = nplh[numlvls] * nplv[numlvls];
-        nplh[numlvls + 1] = (nplh[numlvls] + 1) / 2;
-        nplv[numlvls + 1] = (nplv[numlvls] + 1) / 2;
-        tree->numnodes += n;
-        ++numlvls;
-    } while (n > 1);
-
-    /* ADD */
-    if (tree->numnodes == 0) {
-        opj_free(tree);
-        return NULL;
-    }
-
-    tree->nodes = (opj_tgt_node_t*) opj_calloc(tree->numnodes,
-                  sizeof(opj_tgt_node_t));
-    if (!tree->nodes) {
-        opj_free(tree);
-        return NULL;
-    }
-
-    node = tree->nodes;
-    parentnode = &tree->nodes[tree->numleafsh * tree->numleafsv];
-    parentnode0 = parentnode;
-
-    for (i = 0; i < numlvls - 1; ++i) {
-        for (j = 0; j < nplv[i]; ++j) {
-            k = nplh[i];
-            while (--k >= 0) {
-                node->parent = parentnode;
-                ++node;
-                if (--k >= 0) {
-                    node->parent = parentnode;
-                    ++node;
-                }
-                ++parentnode;
-            }
-            if ((j & 1) || j == nplv[i] - 1) {
-                parentnode0 = parentnode;
-            } else {
-                parentnode = parentnode0;
-                parentnode0 += nplh[i];
-            }
-        }
-    }
-    node->parent = 0;
-
-    tgt_reset(tree);
-
-    return tree;
-}
-
-void tgt_destroy(opj_tgt_tree_t *tree)
-{
-    opj_free(tree->nodes);
-    opj_free(tree);
-}
-
-void tgt_reset(opj_tgt_tree_t *tree)
-{
-    int i;
-
-    if (NULL == tree) {
-        return;
-    }
-
-    for (i = 0; i < tree->numnodes; i++) {
-        tree->nodes[i].value = 999;
-        tree->nodes[i].low = 0;
-        tree->nodes[i].known = 0;
-    }
-}
-
-void tgt_setvalue(opj_tgt_tree_t *tree, int leafno, int value)
-{
-    opj_tgt_node_t *node;
-    node = &tree->nodes[leafno];
-    while (node && node->value > value) {
-        node->value = value;
-        node = node->parent;
-    }
-}
-
-void tgt_encode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno,
-                int threshold)
-{
-    opj_tgt_node_t *stk[31];
-    opj_tgt_node_t **stkptr;
-    opj_tgt_node_t *node;
-    int low;
-
-    stkptr = stk;
-    node = &tree->nodes[leafno];
-    while (node->parent) {
-        *stkptr++ = node;
-        node = node->parent;
-    }
-
-    low = 0;
-    for (;;) {
-        if (low > node->low) {
-            node->low = low;
-        } else {
-            low = node->low;
-        }
-
-        while (low < threshold) {
-            if (low >= node->value) {
-                if (!node->known) {
-                    bio_write(bio, 1, 1);
-                    node->known = 1;
-                }
-                break;
-            }
-            bio_write(bio, 0, 1);
-            ++low;
-        }
-
-        node->low = low;
-        if (stkptr == stk) {
-            break;
-        }
-        node = *--stkptr;
-    }
-}
-
-int tgt_decode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno, int threshold)
-{
-    opj_tgt_node_t *stk[31];
-    opj_tgt_node_t **stkptr;
-    opj_tgt_node_t *node;
-    int low;
-
-    stkptr = stk;
-    node = &tree->nodes[leafno];
-    while (node->parent) {
-        *stkptr++ = node;
-        node = node->parent;
-    }
-
-    low = 0;
-    for (;;) {
-        if (low > node->low) {
-            node->low = low;
-        } else {
-            low = node->low;
-        }
-        while (low < threshold && low < node->value) {
-            if (bio_read(bio, 1)) {
-                node->value = low;
-            } else {
-                ++low;
-            }
-        }
-        node->low = low;
-        if (stkptr == stk) {
-            break;
-        }
-        node = *--stkptr;
-    }
-
-    return (node->value < threshold) ? 1 : 0;
-}
diff --git a/src/lib/openmj2/tgt.h b/src/lib/openmj2/tgt.h
deleted file mode 100644 (file)
index 0a29944..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __TGT_H
-#define __TGT_H
-/**
-@file tgt.h
-@brief Implementation of a tag-tree coder (TGT)
-
-The functions in TGT.C have for goal to realize a tag-tree coder. The functions in TGT.C
-are used by some function in T2.C.
-*/
-
-/** @defgroup TGT TGT - Implementation of a tag-tree coder */
-/*@{*/
-
-/**
-Tag node
-*/
-typedef struct opj_tgt_node {
-    struct opj_tgt_node *parent;
-    int value;
-    int low;
-    int known;
-} opj_tgt_node_t;
-
-/**
-Tag tree
-*/
-typedef struct opj_tgt_tree {
-    int numleafsh;
-    int numleafsv;
-    int numnodes;
-    opj_tgt_node_t *nodes;
-} opj_tgt_tree_t;
-
-/** @name Exported functions */
-/*@{*/
-/* ----------------------------------------------------------------------- */
-/**
-Create a tag-tree
-@param numleafsh Width of the array of leafs of the tree
-@param numleafsv Height of the array of leafs of the tree
-@return Returns a new tag-tree if successful, returns NULL otherwise
-*/
-opj_tgt_tree_t *tgt_create(int numleafsh, int numleafsv);
-/**
-Destroy a tag-tree, liberating memory
-@param tree Tag-tree to destroy
-*/
-void tgt_destroy(opj_tgt_tree_t *tree);
-/**
-Reset a tag-tree (set all leaves to 0)
-@param tree Tag-tree to reset
-*/
-void tgt_reset(opj_tgt_tree_t *tree);
-/**
-Set the value of a leaf of a tag-tree
-@param tree Tag-tree to modify
-@param leafno Number that identifies the leaf to modify
-@param value New value of the leaf
-*/
-void tgt_setvalue(opj_tgt_tree_t *tree, int leafno, int value);
-/**
-Encode the value of a leaf of the tag-tree up to a given threshold
-@param bio Pointer to a BIO handle
-@param tree Tag-tree to modify
-@param leafno Number that identifies the leaf to encode
-@param threshold Threshold to use when encoding value of the leaf
-*/
-void tgt_encode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno,
-                int threshold);
-/**
-Decode the value of a leaf of the tag-tree up to a given threshold
-@param bio Pointer to a BIO handle
-@param tree Tag-tree to decode
-@param leafno Number that identifies the leaf to decode
-@param threshold Threshold to use when decoding value of the leaf
-@return Returns 1 if the node's value < threshold, returns 0 otherwise
-*/
-int tgt_decode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno, int threshold);
-/* ----------------------------------------------------------------------- */
-/*@}*/
-
-/*@}*/
-
-#endif /* __TGT_H */
index e4639385f09600c9455d49bb5a92ca86dd436efa..6a9ebc201264bfc883ebae0d1cd91437c6d67c0f 100644 (file)
@@ -28,9 +28,6 @@ add_library(openjpegjni MODULE
 set_property(TARGET openjpegjni PROPERTY NO_SONAME 1)
 
 # FIXME (need to use old API):
-if(BUILD_MJ2)
-  target_link_libraries(openjpegjni openmj2)
-endif()
 target_link_libraries(openjpegjni
   ${PNG_LIBNAME} ${TIFF_LIBNAME} ${LCMS_LIBNAME} ${Z_LIBNAME}
 )