removed old readme and Makefile
authorAntonin Descampe <antonin@gmail.com>
Thu, 8 Dec 2005 09:27:26 +0000 (09:27 +0000)
committerAntonin Descampe <antonin@gmail.com>
Thu, 8 Dec 2005 09:27:26 +0000 (09:27 +0000)
12 files changed:
codec/Makefile [deleted file]
codec/compat/getopt.c
codec/compat/getopt.h
codec/convert.c
codec/convert.h
codec/image_to_j2k.c
codec/image_to_j2k.dsp
codec/image_to_j2k.dsw
codec/j2k_to_image.c
codec/j2k_to_image.dsp
codec/j2k_to_image.dsw
codec/readme.txt [deleted file]

diff --git a/codec/Makefile b/codec/Makefile
deleted file mode 100644 (file)
index 27dc9a5..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-# $Id$
-#
-# makefile for OpenJPEG codec
-
-OPENJPEG_DIR = ../libopenjpeg
-
-ifndef DEBUG
-  LDFLAGS = -s -lm
-else
-  LDFLAGS = -lm
-endif
-
-CFLAGS = -Wall -O3 -fno-strength-reduce -fomit-frame-pointer -I$(OPENJPEG_DIR)
-
-OBJ_DIR_W32 = obj.w32
-BIN_DIR_W32 = bin.w32
-LIB_DIR_W32 = $(OPENJPEG_DIR)/lib.w32
-
-ifdef MINGW32
-  CC = i386-mingw32-gcc
-  CFLAGS += -DDONT_HAVE_GETOPT
-  OBJ_DIR = $(OBJ_DIR_W32)
-  BIN_DIR = $(BIN_DIR_W32)
-  LIB_DIR = lib.w32
-  all: $(BIN_DIR) $(OBJ_DIR) $(LIB_DIR) \
-       $(addprefix $(BIN_DIR)/,j2k_to_image.exe image_to_j2k.exe)
-else
-  CC = gcc
-  OBJ_DIR = obj
-  BIN_DIR = bin
-  LIB_DIR = lib
-  all: $(BIN_DIR) $(OBJ_DIR) $(LIB_DIR) \
-       $(addprefix $(BIN_DIR)/,j2k_to_image image_to_j2k)
-endif
-
-ifdef DYNAMIC
-  ifdef MINGW32
-    LIB_OPENJPEG = $(LIB_DIR)/libopenjpeg.dll
-    LDFLAGS += -L$(LIB_DIR) -lopenjpeg
-  else
-    LIB_OPENJPEG = $(OPENJPEG_DIR)/$(LIB_DIR)/libopenjpeg.so
-    LDFLAGS += -L$(OPENJPEG_DIR)/$(LIB_DIR) -lopenjpeg
-  endif
-else
-  LIB_OPENJPEG = $(OPENJPEG_DIR)/$(LIB_DIR)/libopenjpeg.a
-  LDFLAGS += $(LIB_OPENJPEG)
-endif
-
-$(BIN_DIR):
-       mkdir $(BIN_DIR)
-
-$(OBJ_DIR):
-       mkdir $(OBJ_DIR)
-
-$(LIB_DIR):    
-       mkdir $(LIB_DIR)
-
-$(LIB_DIR)/libopenjpeg.dll: $(OPENJPEG_DIR)/$(LIB_DIR)/libopenjpeg.dll
-       ln -sf ../$< $@
-$(OPENJPEG_DIR)/$(LIB_DIR)/libopenjpeg.dll:
-       cd $(OPENJPEG_DIR) && \
-       $(MAKE) $(OBJ_DIR) $(LIB_DIR) $(LIB_DIR)/libopenjpeg.dll
-$(OPENJPEG_DIR)/$(LIB_DIR)/libopenjpeg.a:
-       cd $(OPENJPEG_DIR) && \
-       $(MAKE) $(OBJ_DIR) $(LIB_DIR) $(LIB_DIR)/libopenjpeg.a
-$(OPENJPEG_DIR)/$(LIB_DIR)/libopenjpeg.so:
-       cd $(OPENJPEG_DIR) && \
-       $(MAKE) $(LIB_DIR) $(LIB_DIR)/libopenjpeg.so
-
-$(OBJ_DIR)/%.o:
-       $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<
-
-$(OBJ_DIR)/getopt.o:           compat/getopt.c
-$(OBJ_DIR)/convert.o:          convert.c
-$(OBJ_DIR)/j2k_to_image.o:     j2k_to_image.c
-$(OBJ_DIR)/image_to_j2k.o:     image_to_j2k.c convert.h
-
-J2I_OBJS = $(addprefix $(OBJ_DIR)/,j2k_to_image.o)
-I2J_OBJS = $(addprefix $(OBJ_DIR)/,image_to_j2k.o convert.o)
-
-$(BIN_DIR)/j2k_to_image:       $(J2I_OBJS) $(LIB_OPENJPEG)
-       ${CC} -o $@  $(J2I_OBJS) ${LDFLAGS} 
-
-$(BIN_DIR)/image_to_j2k:       $(I2J_OBJS) $(LIB_OPENJPEG)
-       ${CC} -o $@  $(I2J_OBJS) ${LDFLAGS} 
-
-$(BIN_DIR)/j2k_to_image.exe:   $(J2I_OBJS) $(LIB_OPENJPEG)
-       ${CC} -o $@  $(J2I_OBJS) ${LDFLAGS} 
-
-$(BIN_DIR)/image_to_j2k.exe:   $(I2J_OBJS) $(LIB_OPENJPEG) $(OBJ_DIR)/getopt.o
-       ${CC} -o $@  $(I2J_OBJS) ${LDFLAGS} $(OBJ_DIR)/getopt.o
-
-clean:
-       rm -f $(BIN_DIR_W32)/* $(BIN_DIR)/* $(OBJ_DIR_W32)/* $(OBJ_DIR)/*
index d5420acb6511b1fc9727f98076bc1388d6afcbd7..53d8329bec2aabea6d9ac872972979cf55c5d50c 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 1987, 1993, 1994
- *  The Regents of the University of California.  All rights reserved.
+ *     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
@@ -12,8 +12,8 @@
  *    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.
+ *     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.
 /* 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 */
+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 */
+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  ""
+#define        BADCH   (int)'?'
+#define        BADARG  (int)':'
+#define        EMSG    ""
 
 /*
  * getopt --
- *  Parse argc/argv argument vector.
+ *     Parse argc/argv argument vector.
  */
 int getopt(int nargc, char *const *nargv, const char *ostr) {
 #  define __progname nargv[0]
-  static char *place = EMSG;  /* option letter processing */
-  char *oli;      /* option letter list index */
+  static char *place = EMSG;   /* option letter processing */
+  char *oli;                   /* option letter list index */
 
-  if (optreset || !*place) {  /* update scanning pointer */
+  if (optreset || !*place) {   /* update scanning pointer */
     optreset = 0;
     if (optind >= nargc || *(place = nargv[optind]) != '-') {
       place = EMSG;
       return (-1);
     }
-    if (place[1] && *++place == '-') {  /* found "--" */
+    if (place[1] && *++place == '-') { /* found "--" */
       ++optind;
       place = EMSG;
       return (-1);
     }
-  }       /* option letter okay? */
+  }                            /* option letter okay? */
   if ((optopt = (int) *place++) == (int) ':' ||
       !(oli = strchr(ostr, optopt))) {
     /*
@@ -84,29 +84,29 @@ int getopt(int nargc, char *const *nargv, const char *ostr) {
       ++optind;
     if (opterr && *ostr != ':')
       (void) fprintf(stderr,
-         "%s: illegal option -- %c\n", __progname, optopt);
+                    "%s: illegal option -- %c\n", __progname, optopt);
     return (BADCH);
   }
-  if (*++oli != ':') {    /* don't need argument */
+  if (*++oli != ':') {         /* don't need argument */
     optarg = NULL;
     if (!*place)
       ++optind;
-  } else {      /* need an argument */
-    if (*place)     /* no white space */
+  } else {                     /* need an argument */
+    if (*place)                        /* no white space */
       optarg = place;
-    else if (nargc <= ++optind) { /* no arg */
+    else if (nargc <= ++optind) {      /* no arg */
       place = EMSG;
       if (*ostr == ':')
-  return (BADARG);
+       return (BADARG);
       if (opterr)
-  (void) fprintf(stderr,
-           "%s: option requires an argument -- %c\n",
-           __progname, optopt);
+       (void) fprintf(stderr,
+                      "%s: option requires an argument -- %c\n",
+                      __progname, optopt);
       return (BADCH);
-    } else      /* white space */
+    } else                     /* white space */
       optarg = nargv[optind];
     place = EMSG;
     ++optind;
   }
-  return (optopt);    /* dump back option letter */
+  return (optopt);             /* dump back option letter */
 }
index c2b4dddef913730a31eb3235a8f5a5e9f538a148..ab9c1a7bd6913e937184141cab94fa9148432265 100644 (file)
@@ -11,4 +11,4 @@ extern char *optarg;
 
 extern int getopt(int nargc, char *const *nargv, const char *ostr);
 
-#endif        /* _GETOPT_H_ */
+#endif                         /* _GETOPT_H_ */
index 813a0601450a0e302b408fb457a567cb23d1619c..5784c2853b0bbe254ea0d2a7afaf744631143a2d 100644 (file)
@@ -2,7 +2,7 @@
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
  * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herv Drolon, FreeImage Team
+ * Copyright (c) 2005, Herv Drolon, FreeImage Team
  * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
  * All rights reserved.
  *
@@ -27,7 +27,6 @@
  * 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>
  * log2(a)
  */
 static int int_floorlog2(int a) {
-  int l;
-  for (l = 0; a > 1; l++) {
-    a >>= 1;
-  }
-  return l;
+       int l;
+       for (l = 0; a > 1; l++) {
+               a >>= 1;
+       }
+       return l;
 }
 
 /*
@@ -52,7 +51,7 @@ static int int_floorlog2(int a) {
  * a divided by 2^b
  */
 static int int_ceildivpow2(int a, int b) {
-  return (a + (1 << b) - 1) >> b;
+       return (a + (1 << b) - 1) >> b;
 }
 
 /*
@@ -61,7 +60,7 @@ static int int_ceildivpow2(int a, int b) {
  * a divided by b
  */
 static int int_ceildiv(int a, int b) {
-  return (a + b - 1) / b;
+       return (a + b - 1) / b;
 }
 
 /* -->> -->> -->> -->>
@@ -77,547 +76,547 @@ typedef unsigned short int WORD;
 typedef unsigned long 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                  */
+  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;   /* Heigth 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) */
+  DWORD biSize;                        /* Size of the structure in bytes */
+  DWORD biWidth;               /* Width of the image in pixels */
+  DWORD biHeight;              /* Heigth 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(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, type = 0;
-
-  int x, y, index;
-  int gray_scale = 1, not_end_file = 1; 
-
-  unsigned int line = 0, col = 0;
-  unsigned char v, v2;
-  DWORD W, H;
-  
-  IN = fopen(filename, "rb");
-  if (!IN) {
-    fprintf(stderr, "\033[0;33mFailed to open %s for reading !!\033[0;39m\n", filename);
-    return 0;
-  }
+       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, not_end_file = 1; 
+
+       unsigned int line = 0, col = 0;
+       unsigned char v, v2;
+       DWORD W, H;
   
-  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");
-    return 0;
-  } else {
-    /* 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;
-
-    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 */
+       IN = fopen(filename, "rb");
+       if (!IN) {
+               fprintf(stderr, "\033[0;33mFailed to open %s for reading !!\033[0;39m\n", filename);
+               return 0;
+       }
+       
+       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");
+               return 0;
+       } else {
+               /* 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;
+
+               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));
-      
-      fread(RGB, sizeof(unsigned char), (3 * W + PAD) * H, IN);
-      
-      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);
-
-    } else if (Info_h.biBitCount == 8 && Info_h.biCompression == 0) {
-      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));
-      
-      for (j = 0; j < Info_h.biClrUsed; j++) {
-        table_B[j] = getc(IN);
-        table_G[j] = getc(IN);
-        table_R[j] = getc(IN);
-        getc(IN);
-        if (table_R[j] != table_G[j] && table_R[j] != table_B[j] && table_G[j] != table_B[j])
-          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);
-        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));
-      
-      fread(RGB, sizeof(unsigned char), W * H, IN);
-      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);
+               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));
+                       
+                       fread(RGB, sizeof(unsigned char), (3 * W + PAD) * H, IN);
+                       
+                       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);
+
+               } else if (Info_h.biBitCount == 8 && Info_h.biCompression == 0) {
+                       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));
+                       
+                       for (j = 0; j < Info_h.biClrUsed; j++) {
+                               table_B[j] = getc(IN);
+                               table_G[j] = getc(IN);
+                               table_R[j] = getc(IN);
+                               getc(IN);
+                               if (table_R[j] != table_G[j] && table_R[j] != table_B[j] && table_G[j] != table_B[j])
+                                       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);
+                               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));
+                       
+                       fread(RGB, sizeof(unsigned char), W * H, IN);
+                       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);
             
-    } else if (Info_h.biBitCount == 8 && Info_h.biCompression == 1) {       
-      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));
-      
-      for (j = 0; j < Info_h.biClrUsed; j++) {
-        table_B[j] = getc(IN);
-        table_G[j] = getc(IN);
-        table_R[j] = getc(IN);
-        getc(IN);
-        if (table_R[j] != table_G[j] && table_R[j] != table_B[j] && table_G[j] != table_B[j])
-          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);
-        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);
-      
-      RGB = (unsigned char *) malloc(Info_h.biWidth * Info_h.biHeight * sizeof(unsigned char));
+               } else if (Info_h.biBitCount == 8 && Info_h.biCompression == 1) {                               
+                       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));
+                       
+                       for (j = 0; j < Info_h.biClrUsed; j++) {
+                               table_B[j] = getc(IN);
+                               table_G[j] = getc(IN);
+                               table_R[j] = getc(IN);
+                               getc(IN);
+                               if (table_R[j] != table_G[j] && table_R[j] != table_B[j] && table_G[j] != table_B[j])
+                                       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);
+                               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);
+                       
+                       RGB = (unsigned char *) malloc(Info_h.biWidth * Info_h.biHeight * sizeof(unsigned char));
             
-      while (not_end_file) {
-        v = getc(IN);
-        if (v) {
-          v2 = getc(IN);
-          for (i = 0; i < (int) v; i++) {
-            RGB[line * Info_h.biWidth + col] = v2;
-            col++;
-          }
-        } else {
-          v = getc(IN);
-          switch (v) {
-            case 0:
-              col = 0;
-              line++;
-              break;
-            case 1:
-              line++;
-              not_end_file = 0;
-              break;
-            case 2:
-              fprintf(stderr,"No Delta supported\n");
-              opj_image_destroy(image);
-              fclose(IN);
-              return NULL;
-              break;
-            default:
-              for (i = 0; i < v; i++) {
-                v2 = getc(IN);
-                RGB[line * Info_h.biWidth + col] = v2;
-                col++;
-              }
-              if (v % 2)
-                v2 = getc(IN);
-              break;
-          }
-        }
-      }
-      if (gray_scale) {
-        index = 0;
-        for (line = 0; line < Info_h.biHeight; line++) {
-          for (col = 0; col < Info_h.biWidth; col++) {
-            image->comps[0].data[index] = table_R[(int)RGB[(Info_h.biHeight - line - 1) * Info_h.biWidth + col]];
-            index++;
-          }
-        }
-      } else {
-        index = 0;
-        for (line = 0; line < Info_h.biHeight; line++) {
-          for (col = 0; col < Info_h.biWidth; col++) {
-            unsigned char pixel_index = (int)RGB[(Info_h.biHeight - line - 1) * Info_h.biWidth + col];
-            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);
-  } 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);
+                       while (not_end_file) {
+                               v = getc(IN);
+                               if (v) {
+                                       v2 = getc(IN);
+                                       for (i = 0; i < (int) v; i++) {
+                                               RGB[line * Info_h.biWidth + col] = v2;
+                                               col++;
+                                       }
+                               } else {
+                                       v = getc(IN);
+                                       switch (v) {
+                                               case 0:
+                                                       col = 0;
+                                                       line++;
+                                                       break;
+                                               case 1:
+                                                       line++;
+                                                       not_end_file = 0;
+                                                       break;
+                                               case 2:
+                                                       fprintf(stderr,"No Delta supported\n");
+                                                       opj_image_destroy(image);
+                                                       fclose(IN);
+                                                       return NULL;
+                                                       break;
+                                               default:
+                                                       for (i = 0; i < v; i++) {
+                                                               v2 = getc(IN);
+                                                               RGB[line * Info_h.biWidth + col] = v2;
+                                                               col++;
+                                                       }
+                                                       if (v % 2)
+                                                               v2 = getc(IN);
+                                                       break;
+                                       }
+                               }
+                       }
+                       if (gray_scale) {
+                               index = 0;
+                               for (line = 0; line < Info_h.biHeight; line++) {
+                                       for (col = 0; col < Info_h.biWidth; col++) {
+                                               image->comps[0].data[index] = table_R[(int)RGB[(Info_h.biHeight - line - 1) * Info_h.biWidth + col]];
+                                               index++;
+                                       }
+                               }
+                       } else {
+                               index = 0;
+                               for (line = 0; line < Info_h.biHeight; line++) {
+                                       for (col = 0; col < Info_h.biWidth; col++) {
+                                               unsigned char pixel_index = (int)RGB[(Info_h.biHeight - line - 1) * Info_h.biWidth + col];
+                                               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);
+       } 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, char *outfile) {
-  int w, wr, h, hr;
-  int i, pad;
-  FILE *fdest = NULL;
-
-  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 = int_ceildiv(image->x1 - image->x0, image->comps[0].dx);
-    // wr = int_ceildiv(int_ceildivpow2(image->x1 - image->x0,image->factor), image->comps[0].dx);
-    w = image->comps[0].w;
-    wr = int_ceildivpow2(image->comps[0].w, image->comps[0].factor);
-      
-    // h = int_ceildiv(image->y1 - image->y0, image->comps[0].dy);
-    // hr = int_ceildiv(int_ceildivpow2(image->y1 - image->y0,image->factor), image->comps[0].dy);
-    h = image->comps[0].h;
-    hr = int_ceildivpow2(image->comps[0].h, image->comps[0].factor);
-      
-    fprintf(fdest, "BM");
-      
-    /* FILE HEADER */
-    /* ------------- */
-    fprintf(fdest, "%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(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) ((wr) & 0xff),
-      (unsigned char) ((wr) >> 8) & 0xff,
-      (unsigned char) ((wr) >> 16) & 0xff,
-      (unsigned char) ((wr) >> 24) & 0xff);
-    fprintf(fdest, "%c%c%c%c", (unsigned char) ((hr) & 0xff),
-      (unsigned char) ((hr) >> 8) & 0xff,
-      (unsigned char) ((hr) >> 16) & 0xff,
-      (unsigned char) ((hr) >> 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 * 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(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);
-      
-    for (i = 0; i < wr * hr; i++) {
-      unsigned char R, G, B;
-      /* a modifier */
-      // R = image->comps[0].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];
-      R = image->comps[0].data[w * hr - ((i) / (wr) + 1) * w + (i) % (wr)];
-      // G = image->comps[1].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];
-      G = image->comps[1].data[w * hr - ((i) / (wr) + 1) * w + (i) % (wr)];
-      // B = image->comps[2].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];
-      B = image->comps[2].data[w * hr - ((i) / (wr) + 1) * w + (i) % (wr)];
-      fprintf(fdest, "%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(fdest, "%c", 0);
-      }
-    }
-    fclose(fdest);
-  } else {      /* Gray-scale */
-
-    /* -->> -->> -->> -->>
-    8 bits non code (Gray scale)
-    <<-- <<-- <<-- <<-- */
-
-    fdest = fopen(outfile, "wb");
-    // w = int_ceildiv(image->x1 - image->x0, image->comps[0].dx);
-    // wr = int_ceildiv(int_ceildivpow2(image->x1 - image->x0,image->factor), image->comps[0].dx);
-    w = image->comps[0].w;
-    wr = int_ceildivpow2(image->comps[0].w, image->comps[0].factor);
-      
-    // h = int_ceildiv(image->y1 - image->y0, image->comps[0].dy);
-    // hr = int_ceildiv(int_ceildivpow2(image->y1 - image->y0,image->factor), image->comps[0].dy);
-    h = image->comps[0].h;
-    hr = int_ceildivpow2(image->comps[0].h, image->comps[0].factor);
-      
-    fprintf(fdest, "BM");
-      
-    /* FILE HEADER */
-    /* ------------- */
-    fprintf(fdest, "%c%c%c%c", (unsigned char) (hr * wr + 54 + 1024 + hr * (wr % 2)) & 0xff,
-      (unsigned char) ((hr * wr + 54 + 1024 + hr * (wr % 2)) >> 8) & 0xff,
-      (unsigned char) ((hr * wr + 54 + 1024 + hr * (wr % 2)) >> 16) & 0xff,
-      (unsigned char) ((hr * wr + 54 + 1024 + wr * (wr % 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) ((wr) & 0xff),
-      (unsigned char) ((wr) >> 8) & 0xff,
-      (unsigned char) ((wr) >> 16) & 0xff,
-      (unsigned char) ((wr) >> 24) & 0xff);
-    fprintf(fdest, "%c%c%c%c", (unsigned char) ((hr) & 0xff),
-      (unsigned char) ((hr) >> 8) & 0xff,
-      (unsigned char) ((hr) >> 16) & 0xff,
-      (unsigned char) ((hr) >> 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) (hr * wr + hr * (wr % 2)) & 0xff,
-      (unsigned char) ((hr * wr + hr * (wr % 2)) >> 8) &  0xff,
-      (unsigned char) ((hr * wr + hr * (wr % 2)) >> 16) & 0xff,
-      (unsigned char) ((hr * wr + hr * (wr % 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);
-  }
-
-  for (i = 0; i < 256; i++) {
-    fprintf(fdest, "%c%c%c%c", i, i, i, 0);
-  }
-
-  for (i = 0; i < wr * hr; i++) {
-    /* a modifier !! */
-    // fprintf(fdest, "%c", image->comps[0].data[w * h - ((i) / (w) + 1) * w + (i) % (w)]);
-    fprintf(fdest, "%c", image->comps[0].data[w * hr - ((i) / (wr) + 1) * w + (i) % (wr)]);
-    /*if (((i + 1) % w == 0 && w % 2))
-    fprintf(fdest, "%c", 0); */
-    if ((i + 1) % wr == 0) {
-      for (pad = wr % 4 ? 4 - wr % 4 : 0; pad > 0; pad--) /* ADD */
-        fprintf(fdest, "%c", 0);
-    }
-  }
-  fclose(fdest);
-
-  return 0;
+       int w, wr, h, hr;
+       int i, pad;
+       FILE *fdest = NULL;
+
+       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 = int_ceildiv(image->x1 - image->x0, image->comps[0].dx);
+               // wr = int_ceildiv(int_ceildivpow2(image->x1 - image->x0,image->factor), image->comps[0].dx);
+               w = image->comps[0].w;
+               wr = int_ceildivpow2(image->comps[0].w, image->comps[0].factor);
+           
+               // h = int_ceildiv(image->y1 - image->y0, image->comps[0].dy);
+               // hr = int_ceildiv(int_ceildivpow2(image->y1 - image->y0,image->factor), image->comps[0].dy);
+               h = image->comps[0].h;
+               hr = int_ceildivpow2(image->comps[0].h, image->comps[0].factor);
+           
+               fprintf(fdest, "BM");
+           
+               /* FILE HEADER */
+               /* ------------- */
+               fprintf(fdest, "%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(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) ((wr) & 0xff),
+                       (unsigned char) ((wr) >> 8) & 0xff,
+                       (unsigned char) ((wr) >> 16) & 0xff,
+                       (unsigned char) ((wr) >> 24) & 0xff);
+               fprintf(fdest, "%c%c%c%c", (unsigned char) ((hr) & 0xff),
+                       (unsigned char) ((hr) >> 8) & 0xff,
+                       (unsigned char) ((hr) >> 16) & 0xff,
+                       (unsigned char) ((hr) >> 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 * 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(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);
+           
+               for (i = 0; i < wr * hr; i++) {
+                       unsigned char R, G, B;
+                       /* a modifier */
+                       // R = image->comps[0].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];
+                       R = image->comps[0].data[w * hr - ((i) / (wr) + 1) * w + (i) % (wr)];
+                       // G = image->comps[1].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];
+                       G = image->comps[1].data[w * hr - ((i) / (wr) + 1) * w + (i) % (wr)];
+                       // B = image->comps[2].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];
+                       B = image->comps[2].data[w * hr - ((i) / (wr) + 1) * w + (i) % (wr)];
+                       fprintf(fdest, "%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(fdest, "%c", 0);
+                       }
+               }
+               fclose(fdest);
+       } else {                        /* Gray-scale */
+
+               /* -->> -->> -->> -->>
+               8 bits non code (Gray scale)
+               <<-- <<-- <<-- <<-- */
+
+               fdest = fopen(outfile, "wb");
+               // w = int_ceildiv(image->x1 - image->x0, image->comps[0].dx);
+               // wr = int_ceildiv(int_ceildivpow2(image->x1 - image->x0,image->factor), image->comps[0].dx);
+               w = image->comps[0].w;
+               wr = int_ceildivpow2(image->comps[0].w, image->comps[0].factor);
+           
+               // h = int_ceildiv(image->y1 - image->y0, image->comps[0].dy);
+               // hr = int_ceildiv(int_ceildivpow2(image->y1 - image->y0,image->factor), image->comps[0].dy);
+               h = image->comps[0].h;
+               hr = int_ceildivpow2(image->comps[0].h, image->comps[0].factor);
+           
+               fprintf(fdest, "BM");
+           
+               /* FILE HEADER */
+               /* ------------- */
+               fprintf(fdest, "%c%c%c%c", (unsigned char) (hr * wr + 54 + 1024 + hr * (wr % 2)) & 0xff,
+                       (unsigned char) ((hr * wr + 54 + 1024 + hr * (wr % 2)) >> 8) & 0xff,
+                       (unsigned char) ((hr * wr + 54 + 1024 + hr * (wr % 2)) >> 16) & 0xff,
+                       (unsigned char) ((hr * wr + 54 + 1024 + wr * (wr % 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) ((wr) & 0xff),
+                       (unsigned char) ((wr) >> 8) & 0xff,
+                       (unsigned char) ((wr) >> 16) & 0xff,
+                       (unsigned char) ((wr) >> 24) & 0xff);
+               fprintf(fdest, "%c%c%c%c", (unsigned char) ((hr) & 0xff),
+                       (unsigned char) ((hr) >> 8) & 0xff,
+                       (unsigned char) ((hr) >> 16) & 0xff,
+                       (unsigned char) ((hr) >> 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) (hr * wr + hr * (wr % 2)) & 0xff,
+                       (unsigned char) ((hr * wr + hr * (wr % 2)) >> 8) &      0xff,
+                       (unsigned char) ((hr * wr + hr * (wr % 2)) >> 16) &     0xff,
+                       (unsigned char) ((hr * wr + hr * (wr % 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);
+       }
+
+       for (i = 0; i < 256; i++) {
+               fprintf(fdest, "%c%c%c%c", i, i, i, 0);
+       }
+
+       for (i = 0; i < wr * hr; i++) {
+               /* a modifier !! */
+               // fprintf(fdest, "%c", image->comps[0].data[w * h - ((i) / (w) + 1) * w + (i) % (w)]);
+               fprintf(fdest, "%c", image->comps[0].data[w * hr - ((i) / (wr) + 1) * w + (i) % (wr)]);
+               /*if (((i + 1) % w == 0 && w % 2))
+               fprintf(fdest, "%c", 0); */
+               if ((i + 1) % wr == 0) {
+                       for (pad = wr % 4 ? 4 - wr % 4 : 0; pad > 0; pad--)     /* ADD */
+                               fprintf(fdest, "%c", 0);
+               }
+       }
+       fclose(fdest);
+
+       return 0;
 }
 
 /* -->> -->> -->> -->>
@@ -659,174 +658,174 @@ unsigned int readuint(FILE * f, int bigendian)
 }
 
 opj_image_t* pgxtoimage(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;
-
-  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);
-  fscanf(f, "PG%[ \t]%c%c%[ \t+-]%d%[ \t]%d%[ \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') {
-    bigendian = 1;
-  } else if (endian2=='M' && endian1=='L') {
-    bigendian = 0;
-  } else {
-    fprintf(stderr, "Bad pgx header, please check input file\n");
-    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;
-  }
-  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 (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;
+       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;
+
+       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);
+       fscanf(f, "PG%[ \t]%c%c%[ \t+-]%d%[ \t]%d%[ \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') {
+               bigendian = 1;
+       } else if (endian2=='M' && endian1=='L') {
+               bigendian = 0;
+       } else {
+               fprintf(stderr, "Bad pgx header, please check input file\n");
+               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;
+       }
+       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 (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, char *outfile) {
-  int w, wr, h, hr;
-  int i, j, compno;
-  FILE *fdest = NULL;
-
-  for (compno = 0; compno < image->numcomps; compno++) {
-    opj_image_comp_t *comp = &image->comps[compno];
-    char name[256];
-    int nbytes = 0;
-    char *tmp = outfile;
-    while (*tmp) {
-      tmp++;
-    }
-    while (*tmp!='.') {
-      tmp--;
-    }
-    *tmp='\0';
-
-    if (image->numcomps > 1) {
-      sprintf(name, "%s-%d.pgx", outfile, compno);
-    } else {
-      sprintf(name, "%s.pgx", outfile);
-    }
-    fdest = fopen(name, "wb");
-    if (!fdest) {
-      fprintf(stderr, "ERROR -> failed to open %s for writing\n", name);
-      return 1;
-    }
-    // w = int_ceildiv(image->x1 - image->x0, comp->dx);
-    // wr = int_ceildiv(int_ceildivpow2(image->x1 - image->x0,image->factor), comp->dx);
-    w = image->comps[compno].w;
-    wr = int_ceildivpow2(image->comps[compno].w, image->comps[compno].factor);
-      
-    // h = int_ceildiv(image->y1 - image->y0, comp->dy);
-    // hr = int_ceildiv(int_ceildivpow2(image->y1 - image->y0,image->factor), comp->dy);
-    h = image->comps[compno].h;
-    hr = int_ceildivpow2(image->comps[compno].h, image->comps[compno].factor);
-      
-    fprintf(fdest, "PG ML %c %d %d %d\n", comp->sgnd ? '-' : '+', comp->prec, wr, hr);
-    if (comp->prec <= 8) {
-      nbytes = 1;
-    } else if (comp->prec <= 16) {
-      nbytes = 2;
-    } else {
-      nbytes = 4;
-    }
-    for (i = 0; i < wr * hr; i++) {
-      int v = image->comps[compno].data[i / wr * w + i % wr];
-      for (j = nbytes - 1; j >= 0; j--) {
-        char byte = (char) (v >> (j * 8));
-        fwrite(&byte, 1, 1, fdest);
-      }
-    }
-    fclose(fdest);
-  }
-
-  return 0;
+       int w, wr, h, hr;
+       int i, j, compno;
+       FILE *fdest = NULL;
+
+       for (compno = 0; compno < image->numcomps; compno++) {
+               opj_image_comp_t *comp = &image->comps[compno];
+               char name[256];
+               int nbytes = 0;
+               char *tmp = outfile;
+               while (*tmp) {
+                       tmp++;
+               }
+               while (*tmp!='.') {
+                       tmp--;
+               }
+               *tmp='\0';
+
+               if (image->numcomps > 1) {
+                       sprintf(name, "%s-%d.pgx", outfile, compno);
+               } else {
+                       sprintf(name, "%s.pgx", outfile);
+               }
+               fdest = fopen(name, "wb");
+               if (!fdest) {
+                       fprintf(stderr, "ERROR -> failed to open %s for writing\n", name);
+                       return 1;
+               }
+               // w = int_ceildiv(image->x1 - image->x0, comp->dx);
+               // wr = int_ceildiv(int_ceildivpow2(image->x1 - image->x0,image->factor), comp->dx);
+               w = image->comps[compno].w;
+               wr = int_ceildivpow2(image->comps[compno].w, image->comps[compno].factor);
+           
+               // h = int_ceildiv(image->y1 - image->y0, comp->dy);
+               // hr = int_ceildiv(int_ceildivpow2(image->y1 - image->y0,image->factor), comp->dy);
+               h = image->comps[compno].h;
+               hr = int_ceildivpow2(image->comps[compno].h, image->comps[compno].factor);
+           
+               fprintf(fdest, "PG ML %c %d %d %d\n", comp->sgnd ? '-' : '+', comp->prec, wr, hr);
+               if (comp->prec <= 8) {
+                       nbytes = 1;
+               } else if (comp->prec <= 16) {
+                       nbytes = 2;
+               } else {
+                       nbytes = 4;
+               }
+               for (i = 0; i < wr * hr; i++) {
+                       int v = image->comps[compno].data[i / wr * w + i % wr];
+                       for (j = nbytes - 1; j >= 0; j--) {
+                               char byte = (char) (v >> (j * 8));
+                               fwrite(&byte, 1, 1, fdest);
+                       }
+               }
+               fclose(fdest);
+       }
+
+       return 0;
 }
 
 /* -->> -->> -->> -->>
@@ -836,260 +835,260 @@ PNM IMAGE FORMAT
 <<-- <<-- <<-- <<-- */
 
 opj_image_t* pnmtoimage(char *filename, opj_cparameters_t *parameters) {
-  int tdy = parameters->cp_tdy;
-  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[3]; /* maximum of 3 components */
-  opj_image_t * image = NULL;
-  char value;
-  char comment[256];
-
-  f = fopen(filename, "rb");
-  if (!f) {
-    fprintf(stderr, "\033[0;33mFailed to open %s for reading !!\033[0;39m\n", filename);
-    return 0;
-  }
-
-  if (fgetc(f) != 'P')
-    return 0;
-  value = fgetc(f);
-
-  switch(value) {
-    case '2': /* greyscale image type */
-    case '5':
-    {
-      numcomps = 1;
-      color_space = CLRSPC_GRAY;
-
-      fgetc(f);
-
-      if (fgetc(f) == '#') {
-        /* skip comments */
-        fseek(f, 0, SEEK_SET);
-        if (value == '2') {
-          fscanf(f, "P2\n");
-        } else if (value == '5') {
-          fscanf(f, "P5\n");
-        }
-        fgets(comment, 256, f);
-        fscanf(f, "%d %d\n255", &w, &h);
-      } else {
-        fseek(f, 0, SEEK_SET);
-        if (value == '2') {
-          fscanf(f, "P2\n%d %d\n255", &w, &h);
-        } else if (value == '5') {
-          fscanf(f, "P5\n%d %d\n255", &w, &h);
-        }
-      }
-      
-      fgetc(f); /* <cr><lf> */
-    }
-    break;
-
-    case '3': /* RGB image type */
-    case '6':
-    {
-      numcomps = 3;
-      color_space = CLRSPC_SRGB;
-
-      fgetc(f);
-
-      if (fgetc(f) == '#') {
-        /* skip comments */
-        fseek(f, 0, SEEK_SET);
-        if (value == '3') {
-          fscanf(f, "P3\n");
-        } else if (value == '6') {
-          fscanf(f, "P6\n");
-        }
-        fgets(comment, 256, f);
-        fscanf(f, "%d %d\n255", &w, &h);
-      } else {
-        fseek(f, 0, SEEK_SET);
-        if (value == '3') {
-          fscanf(f, "P3\n%d %d\n255", &w, &h);
-        } else if (value == '6') {
-          fscanf(f, "P6\n%d %d\n255", &w, &h);
-        }
-      }
-      
-      fgetc(f); /* <cr><lf> */
-    }
-    break;
-
-    default:
-      fclose(f);
-      return NULL;
-  }
-
-  /* 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(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;
-
-  /* set image data */
-
-  if ((value == '2') || (value == '3')) { /* ASCII */
-    for (i = 0; i < w * h; i++) {
-      for(compno = 0; compno < numcomps; compno++) {
-        unsigned int index = 0;
-        fscanf(f, "%d", &index);
-        /* compno : 0 = GREY, (0, 1, 2) = (R, G, B) */
-        image->comps[compno].data[i] = index;
-      }
-    }
-  } else if ((value == '5') || (value == '6')) {  /* BINARY */
-    for (i = 0; i < w * h; i++) {
-      for(compno = 0; compno < numcomps; compno++) {
-        unsigned char index = 0;
-        fread(&index, 1, 1, f);
-        /* compno : 0 = GREY, (0, 1, 2) = (R, G, B) */
-        image->comps[compno].data[i] = index;
-      }
-    }
-  }
-
-  fclose(f);
-
-  return image;
+       int tdy = parameters->cp_tdy;
+       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[3];       /* maximum of 3 components */
+       opj_image_t * image = NULL;
+       char value;
+       char comment[256];
+
+       f = fopen(filename, "rb");
+       if (!f) {
+               fprintf(stderr, "\033[0;33mFailed to open %s for reading !!\033[0;39m\n", filename);
+               return 0;
+       }
+
+       if (fgetc(f) != 'P')
+               return 0;
+       value = fgetc(f);
+
+       switch(value) {
+               case '2':       /* greyscale image type */
+               case '5':
+               {
+                       numcomps = 1;
+                       color_space = CLRSPC_GRAY;
+
+                       fgetc(f);
+
+                       if (fgetc(f) == '#') {
+                               /* skip comments */
+                               fseek(f, 0, SEEK_SET);
+                               if (value == '2') {
+                                       fscanf(f, "P2\n");
+                               } else if (value == '5') {
+                                       fscanf(f, "P5\n");
+                               }
+                               fgets(comment, 256, f);
+                               fscanf(f, "%d %d\n255", &w, &h);
+                       } else {
+                               fseek(f, 0, SEEK_SET);
+                               if (value == '2') {
+                                       fscanf(f, "P2\n%d %d\n255", &w, &h);
+                               } else if (value == '5') {
+                                       fscanf(f, "P5\n%d %d\n255", &w, &h);
+                               }
+                       }
+                       
+                       fgetc(f);       /* <cr><lf> */
+               }
+               break;
+
+               case '3':       /* RGB image type */
+               case '6':
+               {
+                       numcomps = 3;
+                       color_space = CLRSPC_SRGB;
+
+                       fgetc(f);
+
+                       if (fgetc(f) == '#') {
+                               /* skip comments */
+                               fseek(f, 0, SEEK_SET);
+                               if (value == '3') {
+                                       fscanf(f, "P3\n");
+                               } else if (value == '6') {
+                                       fscanf(f, "P6\n");
+                               }
+                               fgets(comment, 256, f);
+                               fscanf(f, "%d %d\n255", &w, &h);
+                       } else {
+                               fseek(f, 0, SEEK_SET);
+                               if (value == '3') {
+                                       fscanf(f, "P3\n%d %d\n255", &w, &h);
+                               } else if (value == '6') {
+                                       fscanf(f, "P6\n%d %d\n255", &w, &h);
+                               }
+                       }
+                       
+                       fgetc(f);       /* <cr><lf> */
+               }
+               break;
+
+               default:
+                       fclose(f);
+                       return NULL;
+       }
+
+       /* 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(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;
+
+       /* set image data */
+
+       if ((value == '2') || (value == '3')) { /* ASCII */
+               for (i = 0; i < w * h; i++) {
+                       for(compno = 0; compno < numcomps; compno++) {
+                               unsigned int index = 0;
+                               fscanf(f, "%d", &index);
+                               /* compno : 0 = GREY, (0, 1, 2) = (R, G, B) */
+                               image->comps[compno].data[i] = index;
+                       }
+               }
+       } else if ((value == '5') || (value == '6')) {  /* BINARY */
+               for (i = 0; i < w * h; i++) {
+                       for(compno = 0; compno < numcomps; compno++) {
+                               unsigned char index = 0;
+                               fread(&index, 1, 1, f);
+                               /* compno : 0 = GREY, (0, 1, 2) = (R, G, B) */
+                               image->comps[compno].data[i] = index;
+                       }
+               }
+       }
+
+       fclose(f);
+
+       return image;
 }
 
 int imagetopnm(opj_image_t * image, char *outfile) {
-  int w, wr, wrr, h, hr, hrr, max;
-  int i, compno;
-  int adjust;
-  FILE *fdest = NULL;
-  char S2;
-  char *tmp = outfile;
-
-  while (*tmp) {
-    tmp++;
-  }
-  tmp--;
-  tmp--;
-  S2 = *tmp;
-
-  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
-    && S2 !='g' && S2 !='G') {
-
-    fdest = fopen(outfile, "wb");
-    if (!fdest) {
-      fprintf(stderr, "ERROR -> failed to open %s for writing\n", outfile);
-      return 1;
-    }
-
-    w = int_ceildiv(image->x1 - image->x0, image->comps[0].dx);
-    // wr = int_ceildiv(int_ceildivpow2(image->x1 - image->x0,image->factor),image->comps[0].dx);
-    wr = image->comps[0].w;
-    wrr = int_ceildivpow2(image->comps[0].w, image->comps[0].factor);
+       int w, wr, wrr, h, hr, hrr, max;
+       int i, compno;
+       int adjust;
+       FILE *fdest = NULL;
+       char S2;
+       char *tmp = outfile;
+
+       while (*tmp) {
+               tmp++;
+       }
+       tmp--;
+       tmp--;
+       S2 = *tmp;
+
+       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
+               && S2 !='g' && S2 !='G') {
+
+               fdest = fopen(outfile, "wb");
+               if (!fdest) {
+                       fprintf(stderr, "ERROR -> failed to open %s for writing\n", outfile);
+                       return 1;
+               }
+
+               w = int_ceildiv(image->x1 - image->x0, image->comps[0].dx);
+               // wr = int_ceildiv(int_ceildivpow2(image->x1 - image->x0,image->factor),image->comps[0].dx);
+               wr = image->comps[0].w;
+               wrr = int_ceildivpow2(image->comps[0].w, image->comps[0].factor);
         
-    h = int_ceildiv(image->y1 - image->y0, image->comps[0].dy);
-    // hr = int_ceildiv(int_ceildivpow2(image->y1 - image->y0,image->factor), image->comps[0].dy);
-    hr = image->comps[0].h;
-    hrr = int_ceildivpow2(image->comps[0].h, image->comps[0].factor);
-      
-    max = image->comps[0].prec > 8 ? 255 : (1 << image->comps[0].prec) - 1;
-      
-    image->comps[0].x0 = int_ceildivpow2(image->comps[0].x0 - int_ceildiv(image->x0, image->comps[0].dx), image->comps[0].factor);
-    image->comps[0].y0 = int_ceildivpow2(image->comps[0].y0 - int_ceildiv(image->y0, image->comps[0].dy), image->comps[0].factor);
-
-    fprintf(fdest, "P6\n%d %d\n%d\n", wrr, hrr, max);
-    adjust = image->comps[0].prec > 8 ? image->comps[0].prec - 8 : 0;
-    for (i = 0; i < wrr * hrr; i++) {
-      int r, g, b;
-      unsigned char rc,gc,bc;
-      r = image->comps[0].data[i / wrr * wr + i % wrr];
-      r += (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
-      rc = (unsigned char) ((r >> adjust)+((r >> (adjust-1))%2));
-
-      g = image->comps[1].data[i / wrr * wr + i % wrr];
-      g += (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
-      gc = (unsigned char) ((g >> adjust)+((g >> (adjust-1))%2));
-      
-      b = image->comps[2].data[i / wrr * wr + i % wrr];
-      b += (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
-      bc = (unsigned char) ((b >> adjust)+((b >> (adjust-1))%2));
-      
-      fprintf(fdest, "%c%c%c", rc, gc, bc);
-    }
-    fclose(fdest);
-  } else {
-    int ncomp=(S2=='g' || S2=='G')?1:image->numcomps;
-    if (image->numcomps>ncomp) {
-      fprintf(stderr,"WARNING -> [PGM files] Only the first component\n");
-      fprintf(stderr,"           is written to the file\n");
-    }
-    for (compno = 0; compno < ncomp; compno++) {
-      char name[256];
-      if (ncomp > 1) {
-        sprintf(name, "%d.%s", compno, outfile);
-      } else {
-        sprintf(name, "%s", outfile);
-      }
-      
-      fdest = fopen(name, "wb");
-      if (!fdest) {
-        fprintf(stderr, "ERROR -> failed to open %s for writing\n", name);
-        return 1;
-      }
+               h = int_ceildiv(image->y1 - image->y0, image->comps[0].dy);
+               // hr = int_ceildiv(int_ceildivpow2(image->y1 - image->y0,image->factor), image->comps[0].dy);
+               hr = image->comps[0].h;
+               hrr = int_ceildivpow2(image->comps[0].h, image->comps[0].factor);
+           
+               max = image->comps[0].prec > 8 ? 255 : (1 << image->comps[0].prec) - 1;
+           
+               image->comps[0].x0 = int_ceildivpow2(image->comps[0].x0 - int_ceildiv(image->x0, image->comps[0].dx), image->comps[0].factor);
+               image->comps[0].y0 = int_ceildivpow2(image->comps[0].y0 -       int_ceildiv(image->y0, image->comps[0].dy), image->comps[0].factor);
+
+               fprintf(fdest, "P6\n%d %d\n%d\n", wrr, hrr, max);
+               adjust = image->comps[0].prec > 8 ? image->comps[0].prec - 8 : 0;
+               for (i = 0; i < wrr * hrr; i++) {
+                       int r, g, b;
+                       unsigned char rc,gc,bc;
+                       r = image->comps[0].data[i / wrr * wr + i % wrr];
+                       r += (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
+                       rc = (unsigned char) ((r >> adjust)+((r >> (adjust-1))%2));
+
+                       g = image->comps[1].data[i / wrr * wr + i % wrr];
+                       g += (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
+                       gc = (unsigned char) ((g >> adjust)+((g >> (adjust-1))%2));
+                       
+                       b = image->comps[2].data[i / wrr * wr + i % wrr];
+                       b += (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
+                       bc = (unsigned char) ((b >> adjust)+((b >> (adjust-1))%2));
+                       
+                       fprintf(fdest, "%c%c%c", rc, gc, bc);
+               }
+               fclose(fdest);
+       } else {
+               int ncomp=(S2=='g' || S2=='G')?1:image->numcomps;
+               if (image->numcomps>ncomp) {
+                       fprintf(stderr,"WARNING -> [PGM files] Only the first component\n");
+                       fprintf(stderr,"           is written to the file\n");
+               }
+               for (compno = 0; compno < ncomp; compno++) {
+                       char name[256];
+                       if (ncomp > 1) {
+                               sprintf(name, "%d.%s", compno, outfile);
+                       } else {
+                               sprintf(name, "%s", outfile);
+                       }
+                       
+                       fdest = fopen(name, "wb");
+                       if (!fdest) {
+                               fprintf(stderr, "ERROR -> failed to open %s for writing\n", name);
+                               return 1;
+                       }
             
-      w = int_ceildiv(image->x1 - image->x0, image->comps[compno].dx);
-      // wr = int_ceildiv(int_ceildivpow2(image->x1 - image->x0,image->factor),image->comps[compno].dx);
-      wr = image->comps[compno].w;
-      wrr = int_ceildivpow2(image->comps[compno].w, image->comps[compno].factor);
-      
-      h = int_ceildiv(image->y1 - image->y0, image->comps[compno].dy);
-      // hr = int_ceildiv(int_ceildivpow2(image->y1 - image->y0,image->factor), image->comps[compno].dy);
-      hr = image->comps[compno].h;
-      hrr = int_ceildivpow2(image->comps[compno].h, image->comps[compno].factor);
-      
-      max = image->comps[compno].prec > 8 ? 255 : (1 << image->comps[compno].prec) - 1;
-      
-      image->comps[compno].x0 = int_ceildivpow2(image->comps[compno].x0 - int_ceildiv(image->x0, image->comps[compno].dx), image->comps[compno].factor);
-      image->comps[compno].y0 = int_ceildivpow2(image->comps[compno].y0 - int_ceildiv(image->y0, image->comps[compno].dy), image->comps[compno].factor);
-      
-      fprintf(fdest, "P5\n%d %d\n%d\n", wrr, hrr, max);
-      adjust = image->comps[compno].prec > 8 ? image->comps[compno].prec - 8 : 0;
-
-      for (i = 0; i < wrr * hrr; i++) {
-        int l;
-        unsigned char lc;
-        l = image->comps[compno].data[i / wrr * wr + i % wrr];
-        l += (image->comps[compno].sgnd ? 1 << (image->comps[compno].prec - 1) : 0);
-        lc = (unsigned char) ((l >> adjust)+((l >> (adjust-1))%2));
-        fprintf(fdest, "%c", lc);
-      }
-      fclose(fdest);
-    }
-  }
-
-  return 0;
+                       w = int_ceildiv(image->x1 - image->x0, image->comps[compno].dx);
+                       // wr = int_ceildiv(int_ceildivpow2(image->x1 - image->x0,image->factor),image->comps[compno].dx);
+                       wr = image->comps[compno].w;
+                       wrr = int_ceildivpow2(image->comps[compno].w, image->comps[compno].factor);
+                       
+                       h = int_ceildiv(image->y1 - image->y0, image->comps[compno].dy);
+                       // hr = int_ceildiv(int_ceildivpow2(image->y1 - image->y0,image->factor), image->comps[compno].dy);
+                       hr = image->comps[compno].h;
+                       hrr = int_ceildivpow2(image->comps[compno].h, image->comps[compno].factor);
+                       
+                       max = image->comps[compno].prec > 8 ? 255 : (1 << image->comps[compno].prec) - 1;
+                       
+                       image->comps[compno].x0 = int_ceildivpow2(image->comps[compno].x0 - int_ceildiv(image->x0, image->comps[compno].dx), image->comps[compno].factor);
+                       image->comps[compno].y0 = int_ceildivpow2(image->comps[compno].y0 - int_ceildiv(image->y0, image->comps[compno].dy), image->comps[compno].factor);
+                       
+                       fprintf(fdest, "P5\n%d %d\n%d\n", wrr, hrr, max);
+                       adjust = image->comps[compno].prec > 8 ? image->comps[compno].prec - 8 : 0;
+
+                       for (i = 0; i < wrr * hrr; i++) {
+                               int l;
+                               unsigned char lc;
+                               l = image->comps[compno].data[i / wrr * wr + i % wrr];
+                               l += (image->comps[compno].sgnd ? 1 << (image->comps[compno].prec - 1) : 0);
+                               lc = (unsigned char) ((l >> adjust)+((l >> (adjust-1))%2));
+                               fprintf(fdest, "%c", lc);
+                       }
+                       fclose(fdest);
+               }
+       }
+
+       return 0;
 }
index dfc447d7ec6fba8d4051cfb4f012ffa4175e8f6e..a3876547926556b9340194923739110c1b7907bf 100644 (file)
@@ -27,8 +27,6 @@
  * 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
 
index 0c623e0b2e428a4bf7ae92cf6551be4e8b6069d4..4cde28f341c857eedfe7d464a4ba0ac627d2699d 100644 (file)
@@ -2,7 +2,7 @@
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
  * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herv Drolon, FreeImage Team
+ * Copyright (c) 2005, Herv Drolon, FreeImage Team
  * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
  * All rights reserved.
  *
@@ -27,8 +27,6 @@
  * 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 "compat/getopt.h"
 #include "convert.h"
 
+#ifndef WIN32
+#define stricmp strcasecmp
+#define strnicmp strncasecmp
+#endif
+
+/* ----------------------------------------------------------------------- */
+
 #define J2K_CFMT 0
 #define JP2_CFMT 1
 #define JPT_CFMT 2
 /* ----------------------------------------------------------------------- */
 
 void encode_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,"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,"- This coder can encode a mega image, a test was made on a 24000x24000 pixels \n");
-  fprintf(stdout,"color image.  You need enough disk space memory (twice the original) to encode \n");
-  fprintf(stdout,"the image,i.e. for a 1.5 GB image you need a minimum of 3GB of disk memory)\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,"\n");
-  fprintf(stdout,"-i           : source file  (-i source.pnm also *.pgm, *.ppm) \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,"-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,"-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,"-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,"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");
+       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,"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,"- This coder can encode a mega image, a test was made on a 24000x24000 pixels \n");
+       fprintf(stdout,"color image.  You need enough disk space memory (twice the original) to encode \n");
+       fprintf(stdout,"the image,i.e. for a 1.5 GB image you need a minimum of 3GB of disk memory)\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,"\n");
+       fprintf(stdout,"-i           : source file  (-i source.pnm also *.pgm, *.ppm) \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,"-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,"-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,"-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,"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");
 }
 
 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;
+       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;
 }
 
 int get_file_format(char *filename) {
-  int i;
-  static const char *extension[] = {"pgx", "pnm", "pgm", "ppm", "bmp", "j2k", "jp2" };
-  static const int format[] = { PGX_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, BMP_DFMT, J2K_CFMT, JP2_CFMT };
-  char * ext = strrchr(filename, '.') + 1;
-  for(i = 0; i < sizeof(format); i++) {
-    if(strnicmp(ext, extension[i], 3) == 0) {
-      return format[i];
-    }
-  }
-
-  return -1;
+       int i;
+       static const char *extension[] = {"pgx", "pnm", "pgm", "ppm", "bmp", "j2k", "jp2" };
+       static const int format[] = { PGX_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, BMP_DFMT, J2K_CFMT, JP2_CFMT };
+       char * ext = strrchr(filename, '.') + 1;
+       for(i = 0; i < 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, j;
-
-  /* parse the command line */
-
-  while (1) {
-    int c = getopt(argc, argv, "i:o:r:q:f:t:n:c:b:x:p:s:d:h:P:S:E:M:R:T:C:I");
-    if (c == -1)
-      break;
-    switch (c) {
-      case 'i':     /* input file */
-      {
-        char *infile = optarg;
-        parameters->decod_format = get_file_format(infile);
-        switch(parameters->decod_format) {
-          case PGX_DFMT:
-          case PXM_DFMT:
-          case BMP_DFMT:
-            break;
-          default:
-            fprintf(stderr, 
-              "!! Unrecognized format for infile : %s [accept only *.pnm, *.pgm, *.ppm, *.pgx or *.bmp] !!\n\n", 
-              infile);
-            return 1;
-            break;
-        }
-        strncpy(parameters->infile, infile, MAX_PATH);
-      }
-      break;
-        
-        /* ----------------------------------------------------- */
-
-      case 'o':     /* output file */
-      {
-        char *outfile = 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, *.jp2]!! \n", outfile);
-            return 1;
-            break;
-        }
-        strncpy(parameters->outfile, outfile, MAX_PATH);
-      }
-      break;
-
-        /* ----------------------------------------------------- */
-      
-      case 'r':     /* rates rates/distorsion */
-      {
-        char *s = optarg;
-        while (sscanf(s, "%d", &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':     /* add fixed_quality */
-      {
-        char *s = 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 = 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(optarg, "%d,%d", &parameters->cp_tdx, &parameters->cp_tdy);
-        parameters->tile_size_on = true;
-      }
-      break;
-        
-        /* ----------------------------------------------------- */
-      
-      case 'n':     /* resolution */
-      {
-        sscanf(optarg, "%d", &parameters->numresolution);
-      }
-      break;
-        
-        /* ----------------------------------------------------- */
-      case 'c':     /* precinct dimension */
-      {
-        char sep;
-        int res_spec = 0;
-
-        char *s = 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(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;
-        }
-        parameters->cblockw_init = cblockw_init;
-        parameters->cblockh_init = cblockh_init;
-      }
-      break;
-        
-        /* ----------------------------------------------------- */
-      
-      case 'x':     /* creation of index file */
-      {
-        char *index = optarg;
-        strncpy(parameters->index, index, MAX_PATH);
-        parameters->index_on = 1;
-      }
-      break;
-        
-        /* ----------------------------------------------------- */
-      
-      case 'p':     /* progression order */
-      {
-        char progression[4];
-
-        strncpy(progression, 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(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(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;
-      }
-      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 = optarg;
-        POC = parameters->POC;
-
-        fprintf(stderr, "/----------------------------------\\\n");
-        fprintf(stderr, "|  POC option not fully tested !!  |\n");
-        fprintf(stderr, "\\----------------------------------/\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':     /* Mode switch pas tous au point !! */
-      {
-        int value = 0;
-        if (sscanf(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(optarg, "OI: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(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(optarg) + 1);
-        if(parameters->cp_comment) {
-          strcpy(parameters->cp_comment, optarg);
-        }
-      }
-      break;
-        
-        /* ------------------------------------------------------ */
-      
-      case 'I':     /* reversible or not */
-      {
-        parameters->irreversible = 1;
-      }
-      break;
-        
-        /* ------------------------------------------------------ */
-      
-      default:
-        fprintf(stderr, "ERROR -> this option is not valid \"-%c %s\"\n", c, optarg);
-        return 1;
-    }
-  }
-
-  /* check for possible errors */
-
-  if((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) {
-    fprintf(stderr, "usage: image_to_j2k -i image-file -o j2k/jp2-file (+ options)\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;
+       int i, j;
+
+       /* parse the command line */
+
+       while (1) {
+               int c = getopt(argc, argv, "i:o:r:q:f:t:n:c:b:x:p:s:d:h:P:S:E:M:R:T:C:I");
+               if (c == -1)
+                       break;
+               switch (c) {
+                       case 'i':                       /* input file */
+                       {
+                               char *infile = optarg;
+                               parameters->decod_format = get_file_format(infile);
+                               switch(parameters->decod_format) {
+                                       case PGX_DFMT:
+                                       case PXM_DFMT:
+                                       case BMP_DFMT:
+                                               break;
+                                       default:
+                                               fprintf(stderr, 
+                                                       "!! Unrecognized format for infile : %s [accept only *.pnm, *.pgm, *.ppm, *.pgx or *.bmp] !!\n\n", 
+                                                       infile);
+                                               return 1;
+                                               break;
+                               }
+                               strncpy(parameters->infile, infile, MAX_PATH);
+                       }
+                       break;
+                               
+                               /* ----------------------------------------------------- */
+
+                       case 'o':                       /* output file */
+                       {
+                               char *outfile = 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, *.jp2]!! \n", outfile);
+                                               return 1;
+                                               break;
+                               }
+                               strncpy(parameters->outfile, outfile, MAX_PATH);
+                       }
+                       break;
+
+                               /* ----------------------------------------------------- */
+                       
+                       case 'r':                       /* rates rates/distorsion */
+                       {
+                               char *s = optarg;
+                               while (sscanf(s, "%d", &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':                       /* add fixed_quality */
+                       {
+                               char *s = 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 = 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(optarg, "%d,%d", &parameters->cp_tdx, &parameters->cp_tdy);
+                               parameters->tile_size_on = true;
+                       }
+                       break;
+                               
+                               /* ----------------------------------------------------- */
+                       
+                       case 'n':                       /* resolution */
+                       {
+                               sscanf(optarg, "%d", &parameters->numresolution);
+                       }
+                       break;
+                               
+                               /* ----------------------------------------------------- */
+                       case 'c':                       /* precinct dimension */
+                       {
+                               char sep;
+                               int res_spec = 0;
+
+                               char *s = 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(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;
+                               }
+                               parameters->cblockw_init = cblockw_init;
+                               parameters->cblockh_init = cblockh_init;
+                       }
+                       break;
+                               
+                               /* ----------------------------------------------------- */
+                       
+                       case 'x':                       /* creation of index file */
+                       {
+                               char *index = optarg;
+                               strncpy(parameters->index, index, MAX_PATH);
+                               parameters->index_on = 1;
+                       }
+                       break;
+                               
+                               /* ----------------------------------------------------- */
+                       
+                       case 'p':                       /* progression order */
+                       {
+                               char progression[4];
+
+                               strncpy(progression, 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(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(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;
+                       }
+                       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 = optarg;
+                               POC = parameters->POC;
+
+                               fprintf(stderr, "/----------------------------------\\\n");
+                               fprintf(stderr, "|  POC option not fully tested !!  |\n");
+                               fprintf(stderr, "\\----------------------------------/\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':                       /* Mode switch pas tous au point !! */
+                       {
+                               int value = 0;
+                               if (sscanf(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(optarg, "OI: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(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(optarg) + 1);
+                               if(parameters->cp_comment) {
+                                       strcpy(parameters->cp_comment, optarg);
+                               }
+                       }
+                       break;
+                               
+                               /* ------------------------------------------------------ */
+                       
+                       case 'I':                       /* reversible or not */
+                       {
+                               parameters->irreversible = 1;
+                       }
+                       break;
+                               
+                               /* ------------------------------------------------------ */
+                       
+                       default:
+                               fprintf(stderr, "ERROR -> this option is not valid \"-%c %s\"\n", c, optarg);
+                               return 1;
+               }
+       }
+
+       /* check for possible errors */
+
+       if((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) {
+               fprintf(stderr, "usage: image_to_j2k -i image-file -o j2k/jp2-file (+ options)\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;
 }
 
 /* -------------------------------------------------------------------------- */
@@ -609,183 +614,183 @@ int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters)
 sample error callback expecting a FILE* client object
 */
 void error_callback(const char *msg, void *client_data) {
-  FILE *stream = (FILE*)client_data;
-  fprintf(stream, "[ERROR] %s", msg);
+       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);
+       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);
+       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_image_t *image = NULL;
-
-  /* 
-  configure the event callbacks (not required)
-  setting of each callback is optionnal 
-  */
-  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 0.9";
-    /* no need to delete parameters.cp_comment on exit */
-    delete_comment = false;
-  }
-
-  /* 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, " not a pnm file\n");
-        return 1;
-      }
-      break;
-
-    case BMP_DFMT:
-      image = bmptoimage(parameters.infile, &parameters);
-      if (!image) {
-        fprintf(stderr, " not a bmp file\n");
-        return 1;
-      }
-      break;
-  }
-
-  /* encode the destination image */
-  /* ---------------------------- */
-
-  if (parameters.cod_format == J2K_CFMT) {  /* J2K format output */
-    int codestream_length;
-    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 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 */
-    bSuccess = opj_encode(cinfo, cio, image, parameters.index);
-    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;
-    }
-    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 {      /* JP2 format output */
-    int codestream_length;
-    opj_cio_t *cio = NULL;
-    FILE *f = NULL;
-
-    /* get a JP2 compressor handle */
-    opj_cinfo_t* 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 */
-    bSuccess = opj_encode(cinfo, cio, image, parameters.index);
-    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;
-    }
-    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);
-
-  }
-
-  /* free user parameters structure */
-  if(delete_comment) {
-    if(parameters.cp_comment) free(parameters.cp_comment);
-  }
-  if(parameters.cp_matrice) free(parameters.cp_matrice);
-
-  /* free image data */
-  opj_image_destroy(image);
-
-  return 0;
+       bool bSuccess;
+       bool delete_comment = true;
+       opj_cparameters_t parameters;   /* compression parameters */
+       opj_event_mgr_t event_mgr;              /* event manager */
+       opj_image_t *image = NULL;
+
+       /* 
+       configure the event callbacks (not required)
+       setting of each callback is optionnal 
+       */
+       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 0.9";
+               /* no need to delete parameters.cp_comment on exit */
+               delete_comment = false;
+       }
+
+       /* 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, " not a pnm file\n");
+                               return 1;
+                       }
+                       break;
+
+               case BMP_DFMT:
+                       image = bmptoimage(parameters.infile, &parameters);
+                       if (!image) {
+                               fprintf(stderr, " not a bmp file\n");
+                               return 1;
+                       }
+                       break;
+       }
+
+       /* encode the destination image */
+       /* ---------------------------- */
+
+       if (parameters.cod_format == J2K_CFMT) {        /* J2K format output */
+               int codestream_length;
+               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 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 */
+               bSuccess = opj_encode(cinfo, cio, image, parameters.index);
+               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;
+               }
+               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 {                        /* JP2 format output */
+               int codestream_length;
+               opj_cio_t *cio = NULL;
+               FILE *f = NULL;
+
+               /* get a JP2 compressor handle */
+               opj_cinfo_t* 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 */
+               bSuccess = opj_encode(cinfo, cio, image, parameters.index);
+               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;
+               }
+               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);
+
+       }
+
+       /* free user parameters structure */
+       if(delete_comment) {
+               if(parameters.cp_comment) free(parameters.cp_comment);
+       }
+       if(parameters.cp_matrice) free(parameters.cp_matrice);
+
+       /* free image data */
+       opj_image_destroy(image);
+
+       return 0;
 }
 
index cbb6f8f940efbda3e540d7c3bc184805405998c6..8bca167a2e98c2e5d3298b1385bca14a2784cc2f 100644 (file)
@@ -39,9 +39,11 @@ RSC=rc.exe
 # PROP Use_Debug_Libraries 0
 # PROP Output_Dir "Release"
 # PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
 # PROP Target_Dir ""
 # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "../libopenjpeg" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../libopenjpeg" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c
+# SUBTRACT CPP /YX
 # ADD BASE RSC /l 0x40c /d "NDEBUG"
 # ADD RSC /l 0x40c /d "NDEBUG"
 BSC32=bscmake.exe
@@ -64,7 +66,8 @@ LINK32=link.exe
 # PROP Intermediate_Dir "Debug"
 # PROP Target_Dir ""
 # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../libopenjpeg" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../libopenjpeg" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c
+# SUBTRACT CPP /YX
 # ADD BASE RSC /l 0x40c /d "_DEBUG"
 # ADD RSC /l 0x40c /d "_DEBUG"
 BSC32=bscmake.exe
index 3b50444b32f8d264f3f469a056739f00fb7f1c06..577938204d88e831cf8b874bd7f81b879606eaa4 100644 (file)
@@ -3,7 +3,7 @@ Microsoft Developer Studio Workspace File, Format Version 6.00
 
 ###############################################################################
 
-Project: "LibOpenJPEG"=..\libopenjpeg\LibOpenJPEG.dsp - Package Owner=<4>
+Project: "LibOpenJPEG"=..\LibOpenJPEG.dsp - Package Owner=<4>
 
 Package=<5>
 {{{
index d3593c0ad62c38d231e04e5fc9926ea39685824f..e45dcfe25e921135924c63c9f5f7d4db34de4722 100644 (file)
 #include "compat/getopt.h"
 #include "convert.h"
 
+#ifndef WIN32
+#define stricmp strcasecmp
+#define strnicmp strncasecmp
+#endif
+
+/* ----------------------------------------------------------------------- */
+
 #define J2K_CFMT 0
 #define JP2_CFMT 1
 #define JPT_CFMT 2
 /* ----------------------------------------------------------------------- */
 
 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,"  -i <compressed file>\n");
-  fprintf(stdout,"    REQUIRED\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-files, PPM-files, PNM-files, PGX-files and\n");
-  fprintf(stdout,"    BMP-files. 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,"\n");
+       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,"  -i <compressed file>\n");
+       fprintf(stdout,"    REQUIRED\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-files, PPM-files, PNM-files, PGX-files and\n");
+       fprintf(stdout,"    BMP-files. 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,"\n");
 }
 
 /* -------------------------------------------------------------------------- */
 
 int get_file_format(char *filename) {
-  int i;
-  static const char *extension[] = {"pgx", "pnm", "pgm", "ppm", "bmp", "j2k", "jp2", "jpt" };
-  static const int format[] = { PGX_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, BMP_DFMT, J2K_CFMT, JP2_CFMT, JPT_CFMT };
-  char * ext = strrchr(filename, '.') + 1;
-  if(ext) {
-    for(i = 0; i < sizeof(format); i++) {
-      if(strnicmp(ext, extension[i], 3) == 0) {
-        return format[i];
-      }
-    }
-  }
-
-  return -1;
+       int i;
+       static const char *extension[] = {"pgx", "pnm", "pgm", "ppm", "bmp", "j2k", "jp2", "jpt" };
+       static const int format[] = { PGX_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, BMP_DFMT, J2K_CFMT, JP2_CFMT, JPT_CFMT };
+       char * ext = strrchr(filename, '.') + 1;
+       if(ext) {
+               for(i = 0; i < sizeof(format); 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 = getopt(argc, argv, "i:o:r:q:f:t:n:c:b:x:p:s:d:h:P:S:E:M:R:T:C:I");
-    if (c == -1)
-      break;
-    switch (c) {
-      case 'i':     /* input file */
-      {
-        char *infile = 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;
-            break;
-        }
-        strncpy(parameters->infile, infile, MAX_PATH);
-      }
-      break;
-        
-        /* ----------------------------------------------------- */
-
-      case 'o':     /* output file */
-      {
-        char *outfile = optarg;
-        parameters->cod_format = get_file_format(outfile);
-        switch(parameters->cod_format) {
-          case PGX_DFMT:
-          case PXM_DFMT:
-          case BMP_DFMT:
-            break;
-          default:
-            fprintf(stderr, "Unknown output format image %s [only *.pnm, *.pgm, *.ppm, *.pgx or *.bmp]!! \n", outfile);
-            return 1;
-            break;
-        }
-        strncpy(parameters->outfile, outfile, MAX_PATH);
-      }
-      break;
-      
-        /* ----------------------------------------------------- */
-      
+       /* parse the command line */
+
+       while (1) {
+               int c = getopt(argc, argv, "i:o:r:q:f:t:n:c:b:x:p:s:d:h:P:S:E:M:R:T:C:I");
+               if (c == -1)
+                       break;
+               switch (c) {
+                       case 'i':                       /* input file */
+                       {
+                               char *infile = 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;
+                                               break;
+                               }
+                               strncpy(parameters->infile, infile, MAX_PATH);
+                       }
+                       break;
+                               
+                               /* ----------------------------------------------------- */
+
+                       case 'o':                       /* output file */
+                       {
+                               char *outfile = optarg;
+                               parameters->cod_format = get_file_format(outfile);
+                               switch(parameters->cod_format) {
+                                       case PGX_DFMT:
+                                       case PXM_DFMT:
+                                       case BMP_DFMT:
+                                               break;
+                                       default:
+                                               fprintf(stderr, "Unknown output format image %s [only *.pnm, *.pgm, *.ppm, *.pgx or *.bmp]!! \n", outfile);
+                                               return 1;
+                                               break;
+                               }
+                               strncpy(parameters->outfile, outfile, MAX_PATH);
+                       }
+                       break;
+                       
+                               /* ----------------------------------------------------- */
+                       
     
-      case 'r':   /* reduce option */
-      {
-        sscanf(optarg, "%d", &parameters->cp_reduce);
-      }
-      break;
-      
-        /* ----------------------------------------------------- */
+                       case 'r':               /* reduce option */
+                       {
+                               sscanf(optarg, "%d", &parameters->cp_reduce);
+                       }
+                       break;
+                       
+                               /* ----------------------------------------------------- */
       
 
-      case 'l':   /* layering option */
-      {
-        sscanf(optarg, "%d", &parameters->cp_layer);
-      }
-      break;
-      
-        /* ----------------------------------------------------- */
-      
-      case 'h':       /* display an help description */
-      {
-        decode_help_display();
-        return 1;
-      }
-      break;
+                       case 'l':               /* layering option */
+                       {
+                               sscanf(optarg, "%d", &parameters->cp_layer);
+                       }
+                       break;
+                       
+                               /* ----------------------------------------------------- */
+                       
+                       case 'h':                       /* display an help description */
+                       {
+                               decode_help_display();
+                               return 1;
+                       }
+                       break;
             
-        /* ----------------------------------------------------- */
-      
-      default:
-        fprintf(stderr,"WARNING -> this option is not valid \"-%c %s\"\n",c, optarg);
-        break;
-    }
-  }
-
-  /* check for possible errors */
-
-  if((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) {
-    fprintf(stderr,"ERROR -> At least one required argument is missing\nCheck j2k_to_image -h for usage information\n");
-    return 1;
-  }
-
-  return 0;
+                               /* ----------------------------------------------------- */
+                       
+                       default:
+                               fprintf(stderr,"WARNING -> this option is not valid \"-%c %s\"\n",c, optarg);
+                               break;
+               }
+       }
+
+       /* check for possible errors */
+
+       if((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) {
+               fprintf(stderr,"ERROR -> At least one required argument is missing\nCheck j2k_to_image -h for usage information\n");
+               return 1;
+       }
+
+       return 0;
 }
 
 /* -------------------------------------------------------------------------- */
@@ -196,194 +203,194 @@ int parse_cmdline_decoder(int argc, char **argv, opj_dparameters_t *parameters)
 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);
+       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);
+       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);
+       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_image_t *image = NULL;
-  FILE *fsrc = NULL;
-  unsigned char *src = NULL; 
-  int file_length;
-
-  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 */
-  if(parse_cmdline_decoder(argc, argv, &parameters) == 1) {
-    return 0;
-  }
-  
-  /* 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);
-  fread(src, 1, file_length, fsrc);
-  fclose(fsrc);
-  
-  /* decode the code-stream */
-  /* ---------------------- */
+       opj_dparameters_t parameters;   /* decompression parameters */
+       opj_event_mgr_t event_mgr;              /* event manager */
+       opj_image_t *image = NULL;
+       FILE *fsrc = NULL;
+       unsigned char *src = NULL; 
+       int file_length;
+
+       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 */
+       if(parse_cmdline_decoder(argc, argv, &parameters) == 1) {
+               return 0;
+       }
+       
+       /* 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);
+       fread(src, 1, file_length, fsrc);
+       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 */
-      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);
-        return 1;
-      }
-      
-      /* close the byte stream */
-      opj_cio_close(cio);
-    }
-    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 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 */
-      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);
-        return 1;
-      }
-
-      /* close the byte stream */
-      opj_cio_close(cio);
-
-    }
-    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 */
-      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);
-        return 1;
-      } 
-
-      /* close the byte stream */
-      opj_cio_close(cio);
-    }
-    break;
-
-    default:
-      fprintf(stderr, "ERROR -> j2k_to_image : Unknown input image format\n");
-      return 1;
-      break;
-  }
+               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 */
+                       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);
+                               return 1;
+                       }
+                       
+                       /* close the byte stream */
+                       opj_cio_close(cio);
+               }
+               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 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 */
+                       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);
+                               return 1;
+                       }
+
+                       /* close the byte stream */
+                       opj_cio_close(cio);
+
+               }
+               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 */
+                       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);
+                               return 1;
+                       }       
+
+                       /* close the byte stream */
+                       opj_cio_close(cio);
+               }
+               break;
+
+               default:
+                       fprintf(stderr, "ERROR -> j2k_to_image : Unknown input image format\n");
+                       return 1;
+                       break;
+       }
   
-  /* free the memory containing the code-stream */
-  free(src);
-  src = NULL;
+       /* free the memory containing the code-stream */
+       free(src);
+       src = NULL;
 
-  /* create output image */
-  /* ------------------- */
+       /* create output image */
+       /* ------------------- */
 
-  switch (parameters.cod_format) {
-    case PXM_DFMT:      /* PNM PGM PPM */
-      imagetopnm(image, parameters.outfile);
-      break;
+       switch (parameters.cod_format) {
+               case PXM_DFMT:                  /* PNM PGM PPM */
+                       imagetopnm(image, parameters.outfile);
+                       break;
             
-    case PGX_DFMT:      /* PGX */
-      imagetopgx(image, parameters.outfile);
-      break;
-    
-    case BMP_DFMT:      /* BMP */
-      imagetobmp(image, parameters.outfile);
-      break;
-  }
-
-  /* free remaining structures */
-  if(dinfo) {
-    opj_destroy_decompress(dinfo);
-  }
-
-  /* free image data structure */
-  opj_image_destroy(image);
+               case PGX_DFMT:                  /* PGX */
+                       imagetopgx(image, parameters.outfile);
+                       break;
+               
+               case BMP_DFMT:                  /* BMP */
+                       imagetobmp(image, parameters.outfile);
+                       break;
+       }
+
+       /* free remaining structures */
+       if(dinfo) {
+               opj_destroy_decompress(dinfo);
+       }
+
+       /* free image data structure */
+       opj_image_destroy(image);
    
-  return 0;
+       return 0;
 }
 
index 826e2890974c010e7f515572bd453679884c15e0..e0e98d9d94a7ceff5113e8e3581523791b2650b1 100644 (file)
@@ -42,7 +42,8 @@ RSC=rc.exe
 # PROP Ignore_Export_Lib 0
 # PROP Target_Dir ""
 # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "../libopenjpeg" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../libopenjpeg" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c
+# SUBTRACT CPP /YX
 # ADD BASE RSC /l 0x40c /d "NDEBUG"
 # ADD RSC /l 0x40c /d "NDEBUG"
 BSC32=bscmake.exe
index db775c91d332303ab8fbf1555ec9f0a703d445a4..d951063a9a41496b9b4d308b6721655e3df05ecf 100644 (file)
@@ -3,7 +3,7 @@ Microsoft Developer Studio Workspace File, Format Version 6.00
 
 ###############################################################################
 
-Project: "LibOpenJPEG"=..\libopenjpeg\LibOpenJPEG.dsp - Package Owner=<4>
+Project: "LibOpenJPEG"=..\LibOpenJPEG.dsp - Package Owner=<4>
 
 Package=<5>
 {{{
diff --git a/codec/readme.txt b/codec/readme.txt
deleted file mode 100644 (file)
index 972fac4..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-List of parameters for the coder JPEG 2000 :
-
-Date : June the 25th, 2003
-Author : Yannick Verschueren
-Contact : verschueren@tele.ucl.ac.be 
-
-- the option -help displays the readme.txt file on screen
-
-- The markers COD and QCD are writed both of two in the main_header and never appear in the tile_header.  The markers in the main header are : SOC SIZ COD QCD COM.
-
-- This coder can encode mega image, a test was made on a 24000x24000 pixels color image.  You need enough disk space memory (twice the original) to encode the image. (i.e. for a 1.5 Gb image you need a minimum of 3Gb of disk memory) 
-
-REMARKS :
----------
-
-* the value of rate enter in the code line is the compression factor !
-exemple :
-
--r 20,10,1 means quality 1 : compress 20x, quality 2 : compress 10x and quality 3 : compress 1x = lossless  
-
-* The number of resolution can be modified by the program in view to respect profile-0 conditions (Taubman, Marcelin (2002), "JPEG2000, image compression fundamentals, standards and practice", p700)
-
-By default :
-------------
-
- * lossless
- * 1 tile
- * size of precinct 2^15 x 2^15 (means 1 precinct)
- * size of code-block 64 x 64
- * Number of resolution : 6
- * No SOP marker in the codestream
- * No EPH marker in the codestream
- * No sub-sampling in x and y direction
- * No mode switch activated
- * progression order : LRCP
- * No index file
- * No ROI upshifted
- * No offset of the origin of the image
- * No offset of the origin of the tiles
- * Reversible DWT 5-3
-
-Parameters :
-------------
-
--i             : source file  (-i source.pnm also *.pgm, *.ppm) "required"
-
--o             : destination file (-o dest.j2k) "required"
-
--r             : different rates (-r 20,10,5) "optional" 
-
--n             : Number of resolution (-n 3) "optional"
-
--b             : size of code block (-b 32,32) "optional"
-
--c             : size of precinct (-c 128,128) "optional"
-
--t             : size of tile (-t 512,512) "optional"
-
--p             : progression order (-p LRCP) [LRCP, RLCP, RPCL, PCRL, CPRL] "optional"
-
--s             : subsampling factor (-s 2,2) [-s X,Y] "optional"
-
--SOP           : write SOP marker before each packet "optional"
-
--EPH           : write EPH marker after each header packet "optional"
-
--M             : mode switch (-M 3) [1= BYPASS(LAZY) 2=RESET 4=RESTART(TERMALL) 8=VSC 16=ERTERM(SEGTERM) 32=SEGMARK(SEGSYM)]  "optional"
-                    for several mode switch you have to add the value of each mode you want
-                    ex : RESTART(4) + RESET(2) + SEGMARK(32) = -M 38 
-
--x             : Create an index file *.Idx (-x index_name.Idx) "optional"
-
--ROI:c=%d,U=%d : quantization indices upshifted for component c=%d [%d = 0,1,2] 
-                 with a value of U=%d [0 <= %d <= 37] (i.e. -ROI:c=0,U=25) "optional"
-
--d             : offset of the origin of the image (-d 150,300) "optional"
-
--T             : offset of the origin of the tiles (-T 100,75) "optional"
-
--I             : Use the irreversible DWT 9-7 (-I) "optional"
-
-IMPORTANT : 
------------
-
-* subsampling bigger than 2 can produce error
-
-The index file respect the structure below :
----------------------------------------------
-
-Image_height Image_width
-progression order
-Tiles_size_X Tiles_size_Y
-Components_nb
-Layers_nb
-decomposition_levels
-Precincts_size_X Precincts_size_Y
-Main_header_end_position
-Codestream_size
-Tile0 start_pos end_Theader end_pos
-Tile1  "         "           "
-...
-TileN  "         "           "
-Tpacket_0 Tile layer res. comp. prec. start_pos end_pos
-...
-Tpacket_M "    "     "    "     "     "         "